From b235d43c6a7c459b369659c40834c05c9e30ac23 Mon Sep 17 00:00:00 2001 From: Juan Cruz Viotti Date: Tue, 25 Aug 2026 13:36:23 -0300 Subject: [PATCH 1/3] Upgrade Core to `0d35d4ea6d2d21d84feaec7b2451fb1c7f36b936` Signed-off-by: Juan Cruz Viotti --- DEPENDENCIES | 2 +- enterprise/server/CMakeLists.txt | 1 + .../one/enterprise_server_action_metrics_v1.h | 196 +- .../include/sourcemeta/one/http_metrics.h | 11 - vendor/core/DEPENDENCIES | 4 +- vendor/core/config.cmake.in | 2 + vendor/core/src/core/dns/hostname.cc | 21 +- vendor/core/src/core/email/helpers.h | 70 +- .../email/include/sourcemeta/core/email.h | 13 +- .../gzip/include/sourcemeta/core/gzip_error.h | 3 +- .../include/sourcemeta/core/gzip_streambuf.h | 3 +- .../include/sourcemeta/core/html_buffer.h | 3 +- .../include/sourcemeta/core/html_writer.h | 3 +- .../http/include/sourcemeta/core/http_error.h | 3 +- .../include/sourcemeta/core/http_system.h | 3 +- vendor/core/src/core/idna/CMakeLists.txt | 1 + vendor/core/src/core/idna/idna.cc | 32 +- .../core/idna/include/sourcemeta/core/idna.h | 20 +- .../jose/include/sourcemeta/core/jose_error.h | 3 +- .../jose/include/sourcemeta/core/jose_jwe.h | 3 +- .../jose/include/sourcemeta/core/jose_jwk.h | 3 +- .../sourcemeta/core/jose_jwk_private.h | 3 +- .../jose/include/sourcemeta/core/jose_jwks.h | 3 +- .../sourcemeta/core/jose_jwks_provider.h | 3 +- .../jose/include/sourcemeta/core/jose_jwt.h | 3 +- .../json/include/sourcemeta/core/json_array.h | 3 +- .../json/include/sourcemeta/core/json_error.h | 3 +- .../include/sourcemeta/core/json_object.h | 3 +- .../json/include/sourcemeta/core/json_value.h | 3 +- .../jsonl/include/sourcemeta/core/jsonl.h | 23 +- .../include/sourcemeta/core/jsonl_iterator.h | 7 +- vendor/core/src/core/jsonl/iterator.cc | 2 +- .../include/sourcemeta/core/jsonld_error.h | 3 +- .../include/sourcemeta/core/jsonpath_error.h | 3 +- .../sourcemeta/core/jsonpointer_position.h | 3 +- .../sourcemeta/core/jsonpointer_walker.h | 3 +- .../include/sourcemeta/core/oauth_device.h | 3 +- .../include/sourcemeta/core/oauth_dpop.h | 6 +- .../include/sourcemeta/core/oauth_error.h | 3 +- .../sourcemeta/core/oauth_introspection.h | 3 +- .../include/sourcemeta/core/oauth_metadata.h | 3 +- .../sourcemeta/core/oauth_metadata_provider.h | 3 +- .../sourcemeta/core/oauth_registration.h | 3 +- .../oidc/include/sourcemeta/core/oidc_error.h | 3 +- .../include/sourcemeta/core/oidc_metadata.h | 3 +- .../sourcemeta/core/oidc_registration.h | 3 +- .../include/sourcemeta/core/punycode_error.h | 3 +- vendor/core/src/core/regex/CMakeLists.txt | 2 +- vendor/core/src/core/regex/ecma262.h | 1026 ++ .../core/src/core/regex/ecma262_properties.h | 572 + .../regex/include/sourcemeta/core/regex.h | 32 +- vendor/core/src/core/regex/permissive.h | 40 +- vendor/core/src/core/regex/regex.cc | 73 +- .../semver/include/sourcemeta/core/semver.h | 3 +- .../include/sourcemeta/core/semver_error.h | 3 +- vendor/core/src/core/unicode/CMakeLists.txt | 2 + vendor/core/src/core/unicode/codegen.cc | 21 +- .../unicode/include/sourcemeta/core/unicode.h | 32 + vendor/core/src/core/unicode/unicode.cc | 16 + .../core/uri/include/sourcemeta/core/uri.h | 9 +- .../uri/include/sourcemeta/core/uri_error.h | 3 +- .../include/sourcemeta/core/uritemplate.h | 3 +- .../sourcemeta/core/uritemplate_error.h | 3 +- .../yaml/include/sourcemeta/core/yaml_error.h | 3 +- .../include/sourcemeta/core/yaml_roundtrip.h | 3 +- .../include/sourcemeta/core/io_bytestream.h | 3 +- .../io/include/sourcemeta/core/io_error.h | 3 +- .../io/include/sourcemeta/core/io_temporary.h | 3 +- .../include/sourcemeta/core/numeric_error.h | 3 +- .../options/include/sourcemeta/core/options.h | 3 +- .../include/sourcemeta/core/options_error.h | 3 +- vendor/core/src/lang/process/CMakeLists.txt | 11 +- .../process/include/sourcemeta/core/process.h | 1 + .../include/sourcemeta/core/process_error.h | 3 +- .../include/sourcemeta/core/process_usage.h | 91 + vendor/core/src/lang/process/usage.cc | 548 + .../lang/test/include/sourcemeta/core/test.h | 5 + vendor/core/vendor/libdeflate/common_defs.h | 21 +- .../vendor/libdeflate/lib/arm/cpu_features.c | 88 +- .../vendor/libdeflate/lib/deflate_compress.c | 7 + .../libdeflate/lib/deflate_decompress.c | 12 +- .../vendor/libdeflate/lib/x86/adler32_impl.h | 1 + .../vendor/libdeflate/lib/x86/crc32_impl.h | 1 + vendor/core/vendor/libdeflate/libdeflate.h | 9 +- .../allocator_src/sljitWXExecAllocatorPosix.c | 3 + .../pcre2/deps/sljit/sljit_src/sljitConfig.h | 2 +- .../deps/sljit/sljit_src/sljitConfigCPU.h | 77 + .../sljit/sljit_src/sljitConfigInternal.h | 133 +- .../pcre2/deps/sljit/sljit_src/sljitLir.c | 11 +- .../pcre2/deps/sljit/sljit_src/sljitLir.h | 20 +- .../sljit/sljit_src/sljitNativeALPHA_64.c | 3655 +++++ .../deps/sljit/sljit_src/sljitNativeARM_32.c | 2 +- .../deps/sljit/sljit_src/sljitNativeARM_64.c | 10 +- .../sljit/sljit_src/sljitNativeARM_T2_32.c | 2 +- .../sljit/sljit_src/sljitNativeLOONGARCH_64.c | 6 +- .../sljit/sljit_src/sljitNativeMIPS_common.c | 2 +- .../sljit/sljit_src/sljitNativePPC_common.c | 21 +- .../sljit/sljit_src/sljitNativeRISCV_64.c | 5 + .../sljit/sljit_src/sljitNativeRISCV_common.c | 55 +- .../deps/sljit/sljit_src/sljitNativeS390X.c | 2 +- .../sljit/sljit_src/sljitNativeX86_common.c | 15 +- .../core/vendor/pcre2/src/config-cmake.h.in | 1 + vendor/core/vendor/pcre2/src/config.h.generic | 494 - vendor/core/vendor/pcre2/src/config.h.in | 472 - vendor/core/vendor/pcre2/src/libpcre2-16.sym | 88 - vendor/core/vendor/pcre2/src/libpcre2-32.sym | 88 - vendor/core/vendor/pcre2/src/libpcre2-8.sym | 88 - .../core/vendor/pcre2/src/libpcre2-posix.sym | 13 - vendor/core/vendor/pcre2/src/pcre2.h.generic | 1079 -- vendor/core/vendor/pcre2/src/pcre2.h.in | 1 + .../src/pcre2_chartables.c.ebcdic-1047-nl15 | 196 - .../src/pcre2_chartables.c.ebcdic-1047-nl25 | 196 - vendor/core/vendor/pcre2/src/pcre2_compile.c | 36 +- .../vendor/pcre2/src/pcre2_compile_class.c | 25 +- vendor/core/vendor/pcre2/src/pcre2_convert.c | 8 +- .../core/vendor/pcre2/src/pcre2_dfa_match.c | 26 +- vendor/core/vendor/pcre2/src/pcre2_error.c | 2 + vendor/core/vendor/pcre2/src/pcre2_internal.h | 29 +- .../core/vendor/pcre2/src/pcre2_intmodedep.h | 138 +- .../core/vendor/pcre2/src/pcre2_jit_compile.c | 167 +- .../vendor/pcre2/src/pcre2_jit_match_inc.h | 11 + .../vendor/pcre2/src/pcre2_jit_misc_inc.h | 38 +- vendor/core/vendor/pcre2/src/pcre2_match.c | 519 +- .../core/vendor/pcre2/src/pcre2_serialize.c | 37 +- .../core/vendor/pcre2/src/pcre2_substitute.c | 50 +- .../core/vendor/pcre2/src/pcre2_substring.c | 7 +- vendor/core/vendor/pcre2/src/pcre2_ucd.c | 7038 ++++---- vendor/core/vendor/pcre2/src/pcre2_ucp.h | 7 +- .../vendor/pcre2/src/pcre2_ucptables_inc.h | 989 +- vendor/core/vendor/pcre2/src/pcre2posix.h | 184 - vendor/core/vendor/pcre2/src/pcre2test_inc.h | 6349 -------- .../data/ucd/dev/DerivedCoreProperties.txt | 13601 ++++++++++++++++ 132 files changed, 24955 insertions(+), 14209 deletions(-) create mode 100644 vendor/core/src/core/regex/ecma262.h create mode 100644 vendor/core/src/core/regex/ecma262_properties.h create mode 100644 vendor/core/src/lang/process/include/sourcemeta/core/process_usage.h create mode 100644 vendor/core/src/lang/process/usage.cc create mode 100644 vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeALPHA_64.c delete mode 100644 vendor/core/vendor/pcre2/src/config.h.generic delete mode 100644 vendor/core/vendor/pcre2/src/config.h.in delete mode 100644 vendor/core/vendor/pcre2/src/libpcre2-16.sym delete mode 100644 vendor/core/vendor/pcre2/src/libpcre2-32.sym delete mode 100644 vendor/core/vendor/pcre2/src/libpcre2-8.sym delete mode 100644 vendor/core/vendor/pcre2/src/libpcre2-posix.sym delete mode 100644 vendor/core/vendor/pcre2/src/pcre2.h.generic delete mode 100644 vendor/core/vendor/pcre2/src/pcre2_chartables.c.ebcdic-1047-nl15 delete mode 100644 vendor/core/vendor/pcre2/src/pcre2_chartables.c.ebcdic-1047-nl25 delete mode 100644 vendor/core/vendor/pcre2/src/pcre2posix.h delete mode 100644 vendor/core/vendor/pcre2/src/pcre2test_inc.h create mode 100644 vendor/core/vendor/unicodetools/unicodetools/data/ucd/dev/DerivedCoreProperties.txt diff --git a/DEPENDENCIES b/DEPENDENCIES index 910345ca3..0b4ca2486 100644 --- a/DEPENDENCIES +++ b/DEPENDENCIES @@ -1,6 +1,6 @@ vendorpull https://github.com/sourcemeta/vendorpull 1dcbac42809cf87cb5b045106b863e17ad84ba02 uwebsockets https://github.com/uNetworking/uWebSockets v20.79.0 -core https://github.com/sourcemeta/core 9ba55aa07360c270d289f5c74a9e9fef4e0cf33d +core https://github.com/sourcemeta/core 0d35d4ea6d2d21d84feaec7b2451fb1c7f36b936 blaze https://github.com/sourcemeta/blaze 714bea1948f551918682236c75c1d386f8051adb jsonbinpack https://github.com/sourcemeta/jsonbinpack a97365f29e673cd7a278da8b87a8b083ae81774d jsonschema https://github.com/sourcemeta/jsonschema 11d4305852cc9084ff9c758d44e595ca7b0c839c diff --git a/enterprise/server/CMakeLists.txt b/enterprise/server/CMakeLists.txt index 836df7019..f58460229 100644 --- a/enterprise/server/CMakeLists.txt +++ b/enterprise/server/CMakeLists.txt @@ -24,4 +24,5 @@ target_link_libraries(sourcemeta_one_enterprise_server INTERFACE sourcemeta::one target_link_libraries(sourcemeta_one_enterprise_server INTERFACE sourcemeta::blaze::output) target_link_libraries(sourcemeta_one_enterprise_server INTERFACE sourcemeta::core::jsonld) target_link_libraries(sourcemeta_one_enterprise_server INTERFACE sourcemeta::core::numeric) +target_link_libraries(sourcemeta_one_enterprise_server INTERFACE sourcemeta::core::process) target_link_libraries(sourcemeta_one_enterprise_server INTERFACE sourcemeta::core::http) diff --git a/enterprise/server/include/sourcemeta/one/enterprise_server_action_metrics_v1.h b/enterprise/server/include/sourcemeta/one/enterprise_server_action_metrics_v1.h index 77492b71c..b6419d8d3 100644 --- a/enterprise/server/include/sourcemeta/one/enterprise_server_action_metrics_v1.h +++ b/enterprise/server/include/sourcemeta/one/enterprise_server_action_metrics_v1.h @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -14,7 +15,7 @@ #include // std::ranges::transform #include // std::array -#include // std::uint64_t +#include // std::chrono::duration #include // std::filesystem::path #include // std::format #include // std::span @@ -22,19 +23,6 @@ #include // std::string_view #include // std::vector -#if defined(__APPLE__) -#include // proc_pidinfo, PROC_PIDLISTFDS, PROC_PIDLISTFD_SIZE -#include // mach_task_self, task_info, MACH_TASK_BASIC_INFO -#include // getrusage, getrlimit, RUSAGE_SELF, RLIMIT_NOFILE -#include // getpid -#elif defined(__linux__) -#include // std::ifstream -#include // std::istringstream -#include // getrlimit, RLIMIT_NOFILE -#include // std::error_code -#include // sysconf, _SC_CLK_TCK, _SC_PAGESIZE -#endif - class ActionMetrics_v1 : public sourcemeta::one::RouterAction { public: static constexpr std::string_view DESCRIPTION{ @@ -108,118 +96,6 @@ class ActionMetrics_v1 : public sourcemeta::one::RouterAction { } private: - // What a process says about itself, which the platform answers rather than - // this program keeping count of. Anything a platform cannot cheaply say is - // left out rather than guessed at - struct Process { - double cpu_seconds{0}; - std::uint64_t resident_bytes{0}; - std::uint64_t virtual_bytes{0}; - std::uint64_t open_descriptors{0}; - std::uint64_t maximum_descriptors{0}; - }; - - [[nodiscard]] static auto descriptor_limit() -> std::uint64_t { - rlimit limit{}; - if (getrlimit(RLIMIT_NOFILE, &limit) != 0) { - return 0; - } - - return static_cast(limit.rlim_cur); - } - -#if defined(__APPLE__) - - [[nodiscard]] static auto read_process() -> Process { - Process sample; - - rusage usage{}; - if (getrusage(RUSAGE_SELF, &usage) == 0) { - sample.cpu_seconds = - static_cast(usage.ru_utime.tv_sec) + - static_cast(usage.ru_utime.tv_usec) / 1000000.0 + - static_cast(usage.ru_stime.tv_sec) + - static_cast(usage.ru_stime.tv_usec) / 1000000.0; - } - - mach_task_basic_info info{}; - mach_msg_type_number_t count{MACH_TASK_BASIC_INFO_COUNT}; - if (task_info(mach_task_self(), MACH_TASK_BASIC_INFO, - reinterpret_cast(&info), - &count) == KERN_SUCCESS) { - sample.resident_bytes = info.resident_size; - sample.virtual_bytes = info.virtual_size; - } - - const auto descriptors{ - proc_pidinfo(getpid(), PROC_PIDLISTFDS, 0, nullptr, 0)}; - if (descriptors > 0) { - sample.open_descriptors = - static_cast(descriptors) / PROC_PIDLISTFD_SIZE; - } - - sample.maximum_descriptors = descriptor_limit(); - return sample; - } - -#elif defined(__linux__) - - // The second field is a command name in parentheses that may itself contain - // spaces, so what follows it is found from the last parenthesis rather than - // by counting separators from the beginning - [[nodiscard]] static auto read_process() -> Process { - Process sample; - - std::ifstream stream{"/proc/self/stat"}; - if (stream.is_open()) { - std::string line; - std::getline(stream, line); - const auto comm{line.rfind(')')}; - if (comm != std::string::npos) { - std::istringstream fields{line.substr(comm + 1)}; - std::vector tokens; - std::string token; - while (fields >> token) { - tokens.push_back(token); - } - - const auto ticks{static_cast(sysconf(_SC_CLK_TCK))}; - if (tokens.size() > 21 && ticks > 0) { - sample.cpu_seconds = - (std::stod(tokens.at(11)) + std::stod(tokens.at(12))) / ticks; - sample.virtual_bytes = std::stoull(tokens.at(20)); - sample.resident_bytes = - std::stoull(tokens.at(21)) * - static_cast(sysconf(_SC_PAGESIZE)); - } - } - } - - // Reading the list takes a descriptor of its own, which the list then - // includes, so what is counted is one more than what was open - std::error_code error; - const std::filesystem::directory_iterator descriptors{"/proc/self/fd", - error}; - if (!error) { - std::uint64_t listed{0}; - for (const auto &entry : descriptors) { - static_cast(entry); - listed += 1; - } - - sample.open_descriptors = listed > 0 ? listed - 1 : 0; - } - - sample.maximum_descriptors = descriptor_limit(); - return sample; - } - -#else - - [[nodiscard]] static auto read_process() -> Process { return {}; } - -#endif - static auto family(std::string &output, const std::string_view name, const std::string_view help, const std::string_view type) -> void { @@ -230,7 +106,9 @@ class ActionMetrics_v1 : public sourcemeta::one::RouterAction { [[nodiscard]] auto serialize() const -> std::string { const auto &metrics{sourcemeta::one::http_metrics()}; const auto state{metrics.snapshot()}; - const auto process{read_process()}; + const auto usage{sourcemeta::core::process_usage()}; + const auto descriptors{sourcemeta::core::process_descriptors()}; + const auto started{sourcemeta::core::process_start_time()}; std::string edition{sourcemeta::one::edition()}; std::ranges::transform(edition, edition.begin(), @@ -246,34 +124,52 @@ class ActionMetrics_v1 : public sourcemeta::one::RouterAction { "sourcemeta_one_build_info{{version=\"{}\",edition=\"{}\"}} 1\n\n", sourcemeta::one::version(), edition); - family(output, "process_start_time_seconds", - "Start time of the process since the Unix epoch", "gauge"); - output += - std::format("process_start_time_seconds {}\n\n", metrics.started()); + // A platform that cannot answer is not made to. A series nobody receives + // is one nobody plots a flat zero for + if (started.has_value()) { + family(output, "process_start_time_seconds", + "Start time of the process since the Unix epoch", "gauge"); + output += std::format( + "process_start_time_seconds {}\n\n", + std::chrono::duration{started.value().time_since_epoch()} + .count()); + } - family(output, "process_cpu_seconds_total", - "Total user and system CPU time spent", "counter"); - output += - std::format("process_cpu_seconds_total {}\n\n", process.cpu_seconds); + if (usage.cpu_time.has_value()) { + family(output, "process_cpu_seconds_total", + "Total user and system CPU time spent", "counter"); + output += std::format( + "process_cpu_seconds_total {}\n\n", + std::chrono::duration{usage.cpu_time.value()}.count()); + } - family(output, "process_resident_memory_bytes", "Resident memory size", - "gauge"); - output += std::format("process_resident_memory_bytes {}\n\n", - process.resident_bytes); + if (usage.resident_bytes.has_value()) { + family(output, "process_resident_memory_bytes", "Resident memory size", + "gauge"); + output += std::format("process_resident_memory_bytes {}\n\n", + usage.resident_bytes.value()); + } - family(output, "process_virtual_memory_bytes", "Virtual memory size", - "gauge"); - output += std::format("process_virtual_memory_bytes {}\n\n", - process.virtual_bytes); + if (usage.virtual_bytes.has_value()) { + family(output, "process_virtual_memory_bytes", "Virtual memory size", + "gauge"); + output += std::format("process_virtual_memory_bytes {}\n\n", + usage.virtual_bytes.value()); + } - family(output, "process_open_fds", "Number of open file descriptors", - "gauge"); - output += std::format("process_open_fds {}\n\n", process.open_descriptors); + if (descriptors.open.has_value()) { + family(output, "process_open_fds", "Number of open file descriptors", + "gauge"); + output += + std::format("process_open_fds {}\n\n", descriptors.open.value()); + } - family(output, "process_max_fds", "Maximum number of open file descriptors", - "gauge"); - output += - std::format("process_max_fds {}\n\n", process.maximum_descriptors); + if (descriptors.maximum.has_value()) { + family(output, "process_max_fds", + "Maximum number of open file descriptors", "gauge"); + output += + std::format("process_max_fds {}\n\n", descriptors.maximum.value()); + } family(output, "sourcemeta_one_http_requests_in_flight", "Requests currently being served", "gauge"); diff --git a/src/http/include/sourcemeta/one/http_metrics.h b/src/http/include/sourcemeta/one/http_metrics.h index c1a6226d8..39e565471 100644 --- a/src/http/include/sourcemeta/one/http_metrics.h +++ b/src/http/include/sourcemeta/one/http_metrics.h @@ -4,7 +4,6 @@ #include // std::ranges::lower_bound #include // std::array #include // std::atomic -#include // std::chrono::system_clock, std::chrono::duration #include // std::size_t #include // std::uint8_t, std::uint16_t, std::uint32_t, std::uint64_t #include // std::distance @@ -61,10 +60,6 @@ class HTTPMetrics { // counted before this is said auto start(const std::size_t handlers) -> void { this->handlers_ = handlers; - this->started_ = - std::chrono::duration{ - std::chrono::system_clock::now().time_since_epoch()} - .count(); for (auto &shard : this->shards_) { const std::scoped_lock guard{shard.mutex}; shard.buckets.assign(handlers, {}); @@ -150,11 +145,6 @@ class HTTPMetrics { return result; } - // When this server began, as seconds since the Unix epoch - [[nodiscard]] auto started() const noexcept -> double { - return this->started_; - } - private: // A series is named by what answered and what it answered together, so // neither alone identifies one @@ -194,7 +184,6 @@ class HTTPMetrics { std::atomic entered_{0}; std::atomic answered_{0}; std::atomic dropped_{0}; - double started_{0}; }; // What this process has served, which there is one of because there is one diff --git a/vendor/core/DEPENDENCIES b/vendor/core/DEPENDENCIES index a4d2c127e..8cbbe86c0 100644 --- a/vendor/core/DEPENDENCIES +++ b/vendor/core/DEPENDENCIES @@ -6,9 +6,9 @@ cmark-gfm https://github.com/github/cmark-gfm 587a12bb54d95ac37241377e6ddc93ea0e uritemplate-test https://github.com/uri-templates/uritemplate-test 1eb27ab4462b9e5819dc47db99044f5fd1fa9bc7 pyca-cryptography https://github.com/pyca/cryptography 9747d06e83764e7f1ea4c04daf134cb8f861700b wycheproof https://github.com/C2SP/wycheproof 6d7cccd0fcb1917368579adeeac10fe802f1b521 -pcre2 https://github.com/PCRE2Project/pcre2 pcre2-10.47 +pcre2 https://github.com/PCRE2Project/pcre2 pcre2-10.48-RC1 googlebenchmark https://github.com/google/benchmark 378fe693a1ef51500db21b11ff05a8018c5f0e55 -libdeflate https://github.com/ebiggers/libdeflate v1.25 +libdeflate https://github.com/ebiggers/libdeflate v1.26 unicodetools https://github.com/unicode-org/unicodetools final-17.0-20250910 jose-cookbook https://github.com/ietf-jose/cookbook 13692b68bfc18b99557a5b1ed311fd5077bfff04 w3c-json-ld https://github.com/w3c/json-ld-api 8654ac22b6cf4f441d2fee915ae634d36b5a8067 diff --git a/vendor/core/config.cmake.in b/vendor/core/config.cmake.in index 81cf401dd..aa12b9892 100644 --- a/vendor/core/config.cmake.in +++ b/vendor/core/config.cmake.in @@ -59,6 +59,8 @@ foreach(component ${SOURCEMETA_CORE_COMPONENTS}) include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_io.cmake") elseif(component STREQUAL "process") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_text.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_preprocessor.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_numeric.cmake") include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_process.cmake") elseif(component STREQUAL "parallel") find_dependency(Threads) diff --git a/vendor/core/src/core/dns/hostname.cc b/vendor/core/src/core/dns/hostname.cc index 31aa097c4..2b862935f 100644 --- a/vendor/core/src/core/dns/hostname.cc +++ b/vendor/core/src/core/dns/hostname.cc @@ -2,7 +2,6 @@ #include #include -#include // std::string #include // std::string_view namespace sourcemeta::core { @@ -56,18 +55,14 @@ auto is_hostname(const std::string_view value) -> bool { return false; } - // RFC 5890 §2.3.2.1: the ACE prefix "xn--" is case-insensitive. A-labels - // must also satisfy RFC 5891 §4.2.3 and RFC 5892 (Punycode round-trip, - // IDNA 2008 derived properties, contextual rules) - if (label_length >= 4 && ((value[label_start] | 0x20) == 'x') && - ((value[label_start + 1] | 0x20) == 'n') && - value[label_start + 2] == '-' && value[label_start + 3] == '-') { - std::string canonical{value.substr(label_start, label_length)}; - canonical[0] = 'x'; - canonical[1] = 'n'; - if (!idna_is_valid_a_label(canonical)) { - return false; - } + // RFC 5891 §5.3: an A-label starts in "xn--", interpreted + // case-insensitively. A-labels must also satisfy RFC 5891 §4.2.3 and + // RFC 5892 (Punycode round-trip, IDNA 2008 derived properties, + // contextual rules) + const auto label{value.substr(label_start, label_length)}; + if (starts_with_ignore_case(label, "xn--") && + !idna_is_valid_a_label(label)) { + return false; } if (position < value.size()) { diff --git a/vendor/core/src/core/email/helpers.h b/vendor/core/src/core/email/helpers.h index e69d12370..8a53dc766 100644 --- a/vendor/core/src/core/email/helpers.h +++ b/vendor/core/src/core/email/helpers.h @@ -47,28 +47,6 @@ constexpr auto is_qtext_smtp(const unsigned char character) -> bool { (character >= 93 && character <= 126); } -// RFC 5321 §4.1.3: dcontent = %d33-90 / %d94-126 -constexpr auto is_dcontent(const unsigned char character) -> bool { - return (character >= 33 && character <= 90) || - (character >= 94 && character <= 126); -} - -// RFC 5321 §4.1.2: Ldh-str = *( ALPHA / DIGIT / "-" ) Let-dig -// RFC 5321 §4.1.3: Standardized-tag = Ldh-str -constexpr auto is_ldh_str(const std::string_view value) -> bool { - if (value.empty() || !sourcemeta::core::is_alphanum(value.back())) { - return false; - } - for (std::string_view::size_type position{0}; position + 1 < value.size(); - position += 1) { - const auto character{value[position]}; - if (!sourcemeta::core::is_alphanum(character) && character != '-') { - return false; - } - } - return true; -} - // RFC 5321 §4.1.3: Snum = 1*3DIGIT ; representing a decimal integer // value in the range 0 through 255. Leading zeros are permitted, unlike // the RFC 3986 dec-octet that backs is_ipv4 @@ -122,30 +100,8 @@ constexpr auto matches_ipv6_tag(const std::string_view value) -> bool { value[4] == ':'; } -// RFC 5321 §4.1.3: General-address-literal = Standardized-tag ":" 1*dcontent -constexpr auto is_general_address_literal(const std::string_view value) - -> bool { - const auto colon_position{value.find(':')}; - if (colon_position == std::string_view::npos) { - return false; - } - if (!is_ldh_str(value.substr(0, colon_position))) { - return false; - } - const auto content{value.substr(colon_position + 1)}; - if (content.empty()) { - return false; - } - for (const auto character : content) { - if (!is_dcontent(static_cast(character))) { - return false; - } - } - return true; -} - // RFC 5321 §4.1.3: validate the address-literal payload (between "[" and "]") -// as IPv6, IPv4, or General-address-literal. Always ASCII; no IDNA applies +// as IPv6 or IPv4. Always ASCII; no IDNA applies inline auto is_address_literal(const std::string_view domain) -> bool { if (domain.back() != ']') { return false; @@ -155,18 +111,18 @@ inline auto is_address_literal(const std::string_view domain) -> bool { return false; } const auto inner{domain.substr(1, domain.size() - 2)}; - // RFC 5321 §4.1.3: IPv6-address-literal = "IPv6:" IPv6-addr - if (matches_ipv6_tag(inner) && sourcemeta::core::is_ipv6(inner.substr(5))) { - return true; - } - // RFC 5234 §3.2: ABNF alternatives are unordered. A failed IPv6 match - // falls through to IPv4 or General-address-literal. - // RFC 5321 §4.1.3: IPv4-address-literal has no ":"; - // General-address-literal requires ":" - if (!inner.contains(':')) { - return is_ipv4_address_literal(inner); - } - return is_general_address_literal(inner); + // RFC 5321 §4.1.3: IPv6-address-literal = "IPv6:" IPv6-addr. The tag names + // the syntax that the rest of the literal follows, so a payload that is not + // an address is turned down rather than read as general content, which + // would otherwise leave the IPv6 form unable to ever fail + if (matches_ipv6_tag(inner)) { + return sourcemeta::core::is_ipv6(inner.substr(5)); + } + // RFC 5321 §4.1.3: a Standardized-tag must be registered with IANA before + // being used, and the registry carries the IPv6 tag alone, so the general + // form admits nothing that the branch above does not already cover. What + // remains is the IPv4 form, which has no colon to begin with + return !inner.contains(':') && is_ipv4_address_literal(inner); } // RFC 3986 §2.1: "For consistency, URI producers and normalizers should use diff --git a/vendor/core/src/core/email/include/sourcemeta/core/email.h b/vendor/core/src/core/email/include/sourcemeta/core/email.h index eeadfaeda..8e8e43291 100644 --- a/vendor/core/src/core/email/include/sourcemeta/core/email.h +++ b/vendor/core/src/core/email/include/sourcemeta/core/email.h @@ -39,9 +39,11 @@ namespace sourcemeta::core { /// prose specifies the IPv6 syntax as that of RFC 4291, while the `IPv6-addr` /// ABNF in the same section is stricter and conflicts with it, so the prose is /// followed. A bracketed `[IPv6:...]` whose body is not a valid address is -/// still accepted, because Section 4.1.3 also permits any -/// General-address-literal (a registered tag, a colon, and content) and ABNF -/// alternatives are unordered. +/// turned down rather than read as a General-address-literal, since the tag +/// names the syntax that has to follow it. That general form is not accepted +/// under any other tag either, as Section 4.1.3 requires a Standardized-tag to +/// be registered with IANA before being used and that registry carries the +/// IPv6 tag alone. /// /// For example: /// @@ -108,9 +110,8 @@ auto is_idn_email_uts46(const std::string_view value) -> bool; /// Produce the domain half of a valid RFC 5321 `Mailbox`, returning an empty /// view when the input is not one, which no valid mailbox can otherwise yield /// since a domain is never empty. The separator is located by parsing the -/// address, since neither the first nor the last at sign reliably marks it: -/// RFC 5321 Section 4.1.2 admits one inside a quoted local part, and Section -/// 4.1.3 admits one inside the content of a General-address-literal. The +/// address, since the first at sign does not reliably mark it: RFC 5321 +/// Section 4.1.2 admits one inside a quoted local part. The /// result borrows from the input and keeps its spelling, so a caller comparing /// domains applies the RFC 5321 Section 2.4 case insensitivity itself. Only /// the ASCII grammar is accepted, so an internationalized address per RFC 6531 diff --git a/vendor/core/src/core/gzip/include/sourcemeta/core/gzip_error.h b/vendor/core/src/core/gzip/include/sourcemeta/core/gzip_error.h index 111a14c1f..8bad9c9c8 100644 --- a/vendor/core/src/core/gzip/include/sourcemeta/core/gzip_error.h +++ b/vendor/core/src/core/gzip/include/sourcemeta/core/gzip_error.h @@ -15,6 +15,7 @@ namespace sourcemeta::core { // safe // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -37,7 +38,7 @@ class SOURCEMETA_CORE_GZIP_EXPORT GZIPError : public std::exception { }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/core/gzip/include/sourcemeta/core/gzip_streambuf.h b/vendor/core/src/core/gzip/include/sourcemeta/core/gzip_streambuf.h index a104374dc..9e08b6880 100644 --- a/vendor/core/src/core/gzip/include/sourcemeta/core/gzip_streambuf.h +++ b/vendor/core/src/core/gzip/include/sourcemeta/core/gzip_streambuf.h @@ -34,12 +34,13 @@ class SOURCEMETA_CORE_GZIP_EXPORT GZIPStreamBuffer : public std::streambuf { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif struct Internal; std::unique_ptr internal_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/html/include/sourcemeta/core/html_buffer.h b/vendor/core/src/core/html/include/sourcemeta/core/html_buffer.h index 42e3fd86d..d72b08ac1 100644 --- a/vendor/core/src/core/html/include/sourcemeta/core/html_buffer.h +++ b/vendor/core/src/core/html/include/sourcemeta/core/html_buffer.h @@ -83,11 +83,12 @@ class SOURCEMETA_CORE_HTML_EXPORT HTMLBuffer { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif std::string buffer_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif char *cursor_{nullptr}; char *end_{nullptr}; diff --git a/vendor/core/src/core/html/include/sourcemeta/core/html_writer.h b/vendor/core/src/core/html/include/sourcemeta/core/html_writer.h index 829d58173..24d643ab8 100644 --- a/vendor/core/src/core/html/include/sourcemeta/core/html_writer.h +++ b/vendor/core/src/core/html/include/sourcemeta/core/html_writer.h @@ -99,6 +99,7 @@ class SOURCEMETA_CORE_HTML_EXPORT HTMLWriter { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif @@ -470,7 +471,7 @@ class SOURCEMETA_CORE_HTML_EXPORT HTMLWriter { bool tag_open_{false}; bool tag_open_is_void_{false}; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/http/include/sourcemeta/core/http_error.h b/vendor/core/src/core/http/include/sourcemeta/core/http_error.h index 86b5a3a97..bfd64d03a 100644 --- a/vendor/core/src/core/http/include/sourcemeta/core/http_error.h +++ b/vendor/core/src/core/http/include/sourcemeta/core/http_error.h @@ -19,6 +19,7 @@ namespace sourcemeta::core { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -93,7 +94,7 @@ class SOURCEMETA_CORE_HTTP_EXPORT HTTPStatusError : public HTTPError { }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/core/http/include/sourcemeta/core/http_system.h b/vendor/core/src/core/http/include/sourcemeta/core/http_system.h index fa6496b6d..5268c9678 100644 --- a/vendor/core/src/core/http/include/sourcemeta/core/http_system.h +++ b/vendor/core/src/core/http/include/sourcemeta/core/http_system.h @@ -28,6 +28,7 @@ namespace sourcemeta::core { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -332,7 +333,7 @@ class SOURCEMETA_CORE_HTTP_EXPORT HTTPSystemRequest { }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/core/idna/CMakeLists.txt b/vendor/core/src/core/idna/CMakeLists.txt index 14c7cfd03..83a9737e7 100644 --- a/vendor/core/src/core/idna/CMakeLists.txt +++ b/vendor/core/src/core/idna/CMakeLists.txt @@ -39,3 +39,4 @@ endif() target_link_libraries(sourcemeta_core_idna PRIVATE sourcemeta::core::unicode) target_link_libraries(sourcemeta_core_idna PRIVATE sourcemeta::core::punycode) +target_link_libraries(sourcemeta_core_idna PRIVATE sourcemeta::core::text) diff --git a/vendor/core/src/core/idna/idna.cc b/vendor/core/src/core/idna/idna.cc index 5bd579ed1..3abb2d051 100644 --- a/vendor/core/src/core/idna/idna.cc +++ b/vendor/core/src/core/idna/idna.cc @@ -1,6 +1,7 @@ #include #include +#include #include #include // std::ranges::lower_bound @@ -27,8 +28,21 @@ auto validate_a_label_body(const std::string_view encoded, return false; } + // RFC 5891 §5.3: "first ensuring that the A-label is entirely in lowercase + // (converting it to lowercase if necessary)", which RFC 5891 §4.2.1 also + // requires ahead of the canonical form check below. Discarding case loses + // nothing, as RFC 3492 §5 assigns A-Z and a-z the same digit values and + // RFC 5890 §2.3.2.4 rules out mixed-case annotation + std::string lowercased; + std::string_view body{encoded}; + if (!is_lowercase(encoded)) { + lowercased.assign(encoded); + to_lowercase(lowercased); + body = lowercased; + } + try { - decoded = punycode_to_utf32(encoded); + decoded = punycode_to_utf32(body); } catch (const PunycodeError &) { return false; } @@ -50,10 +64,11 @@ auto validate_a_label_body(const std::string_view encoded, return false; } - // RFC 5891 §4.2: A-labels must be in canonical Punycode form, so - // re-encoding the decoded U-label must yield the original bytes. + // RFC 5891 §4.2.1: "verify that the A-label produced by the step in + // Section 4.4 matches the one provided as input", so re-encoding the decoded + // U-label must yield the lowercased bytes we decoded from try { - return utf32_to_punycode(decoded) == encoded; + return utf32_to_punycode(decoded) == body; } catch (const PunycodeError &) { return false; } @@ -93,11 +108,6 @@ auto idna_classify_label(const std::u32string_view label, for (const auto codepoint : label) { ascii.push_back(static_cast(codepoint)); } - // Normalise the prefix to canonical lowercase before validating, so - // the round-trip equality does not reject input that only differs in - // the case of the prefix - ascii[0] = 'x'; - ascii[1] = 'n'; if (!validate_a_label_body( std::string_view{ascii.data() + 4, ascii.size() - 4}, decoded)) { return std::nullopt; @@ -418,8 +428,10 @@ auto idna_passes_bidi_rule(const std::u32string_view label) noexcept -> bool { } auto idna_is_valid_a_label(const std::string_view label) -> bool { + // RFC 5891 §5.3: a label is treated as an A-label when it starts in + // "xn--", interpreted case-insensitively constexpr std::string_view PREFIX{"xn--"}; - if (!label.starts_with(PREFIX)) { + if (!starts_with_ignore_case(label, PREFIX)) { return false; } diff --git a/vendor/core/src/core/idna/include/sourcemeta/core/idna.h b/vendor/core/src/core/idna/include/sourcemeta/core/idna.h index 6f86204f8..bb288b619 100644 --- a/vendor/core/src/core/idna/include/sourcemeta/core/idna.h +++ b/vendor/core/src/core/idna/include/sourcemeta/core/idna.h @@ -39,8 +39,9 @@ enum class IDNALabelKind : std::uint8_t { /// @ingroup idna /// Classify `label` as an Ascii / A-label / U-label per RFC 5890 §2.3.2, /// validate the A-label and U-label cases per RFC 5891 §4, and write the -/// U-label codepoint form to `decoded`. Detection of the ACE prefix "xn--" -/// is case-insensitive per RFC 5890 §2.3.2.1. For example: +/// U-label codepoint form to `decoded`. Per RFC 5891 §4.2.1 an A-label is +/// lowercased before it is decoded, so the ACE prefix "xn--" and the Punycode +/// body are both matched case-insensitively. For example: /// /// ```cpp /// #include @@ -161,13 +162,12 @@ auto idna_is_valid_u_label(const std::u32string_view label) -> bool; /// @ingroup idna /// Return whether the given label is a valid A-label per RFC 5891 §4. See /// https://www.rfc-editor.org/rfc/rfc5891#section-4 for the criteria. -/// A valid A-label starts with the lowercase ACE prefix "xn--", is pure -/// ASCII, is at most 63 octets, has a non-empty Punycode body that decodes to -/// a U-label containing at least one non-ASCII codepoint, and round-trips -/// through Punycode in its canonical form. Both the prefix and the Punycode -/// body are matched case-sensitively, so an uppercase prefix or a mixed-case -/// body is rejected. This is intended for registration-side validation rather -/// than case-folding lookup. For example: +/// A valid A-label starts with the ACE prefix "xn--", is pure ASCII, is at +/// most 63 octets, has a non-empty Punycode body that decodes to a U-label +/// containing at least one non-ASCII codepoint, and round-trips through +/// Punycode in its canonical form. Per RFC 5891 §4.2.1 the label is lowercased +/// before it is decoded, so the prefix and the Punycode body are both matched +/// case-insensitively. For example: /// /// ```cpp /// #include @@ -175,6 +175,8 @@ auto idna_is_valid_u_label(const std::u32string_view label) -> bool; /// /// // xn--mnchen-3ya decodes to "München" /// assert(sourcemeta::core::idna_is_valid_a_label("xn--mnchen-3ya")); +/// // The same label, lowercased before it is decoded +/// assert(sourcemeta::core::idna_is_valid_a_label("XN--MNCHEN-3YA")); /// // Missing "xn--" prefix /// assert(!sourcemeta::core::idna_is_valid_a_label("abc")); /// // Decodes to "abc" (no non-ASCII codepoint) diff --git a/vendor/core/src/core/jose/include/sourcemeta/core/jose_error.h b/vendor/core/src/core/jose/include/sourcemeta/core/jose_error.h index 513e815d5..e50054a4b 100644 --- a/vendor/core/src/core/jose/include/sourcemeta/core/jose_error.h +++ b/vendor/core/src/core/jose/include/sourcemeta/core/jose_error.h @@ -10,6 +10,7 @@ namespace sourcemeta::core { #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -50,7 +51,7 @@ class SOURCEMETA_CORE_JOSE_EXPORT JWEParseError : public std::exception { }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwe.h b/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwe.h index ebf610ebf..0ff866be1 100644 --- a/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwe.h +++ b/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwe.h @@ -100,6 +100,7 @@ class SOURCEMETA_CORE_JOSE_EXPORT JWE { static auto parse(const std::string_view input, JWE &result) -> bool; #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif std::string protected_header_; @@ -111,7 +112,7 @@ class SOURCEMETA_CORE_JOSE_EXPORT JWE { std::optional algorithm_; std::optional encryption_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwk.h b/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwk.h index 8a1e0c2c4..f1e97a616 100644 --- a/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwk.h +++ b/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwk.h @@ -142,6 +142,7 @@ class SOURCEMETA_CORE_JOSE_EXPORT JWK { static auto parse(const JSON &value, JWK &result) -> bool; #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif Type type_{Type::RSA}; @@ -156,7 +157,7 @@ class SOURCEMETA_CORE_JOSE_EXPORT JWK { std::string coordinate_y_; std::string public_point_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwk_private.h b/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwk_private.h index 5a96ac934..037f69024 100644 --- a/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwk_private.h +++ b/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwk_private.h @@ -145,6 +145,7 @@ class SOURCEMETA_CORE_JOSE_EXPORT JWKPrivate { static auto parse(const JSON &value, JWKPrivate &result) -> bool; #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif Type type_{Type::RSA}; @@ -159,7 +160,7 @@ class SOURCEMETA_CORE_JOSE_EXPORT JWKPrivate { std::string coordinate_y_; std::string public_point_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwks.h b/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwks.h index f7eebbdd7..e32dac7bd 100644 --- a/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwks.h +++ b/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwks.h @@ -82,11 +82,12 @@ class SOURCEMETA_CORE_JOSE_EXPORT JWKS { static auto parse(const JSON &value, JWKS &result) -> bool; #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif std::vector keys_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwks_provider.h b/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwks_provider.h index 98b9cf826..e8dbfa165 100644 --- a/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwks_provider.h +++ b/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwks_provider.h @@ -156,6 +156,7 @@ class SOURCEMETA_CORE_JOSE_EXPORT JWKSProvider { -> std::shared_ptr; #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif const std::string jwks_uri_; @@ -167,7 +168,7 @@ class SOURCEMETA_CORE_JOSE_EXPORT JWKSProvider { std::chrono::system_clock::time_point next_refresh_{}; std::chrono::system_clock::time_point unknown_kid_cooldown_until_{}; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwt.h b/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwt.h index 0e803e8ba..be458cba8 100644 --- a/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwt.h +++ b/vendor/core/src/core/jose/include/sourcemeta/core/jose_jwt.h @@ -120,6 +120,7 @@ class SOURCEMETA_CORE_JOSE_EXPORT JWT { static auto parse(const std::string_view input, JWT &result) -> bool; #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif std::string_view signing_input_; @@ -128,7 +129,7 @@ class SOURCEMETA_CORE_JOSE_EXPORT JWT { JSON payload_{nullptr}; std::optional algorithm_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/json/include/sourcemeta/core/json_array.h b/vendor/core/src/core/json/include/sourcemeta/core/json_array.h index 651f063d7..af4c55e7a 100644 --- a/vendor/core/src/core/json/include/sourcemeta/core/json_array.h +++ b/vendor/core/src/core/json/include/sourcemeta/core/json_array.h @@ -111,11 +111,12 @@ template class JSONArray { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif Container data_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/json/include/sourcemeta/core/json_error.h b/vendor/core/src/core/json/include/sourcemeta/core/json_error.h index bf2d93ce1..1b2575f2f 100644 --- a/vendor/core/src/core/json/include/sourcemeta/core/json_error.h +++ b/vendor/core/src/core/json/include/sourcemeta/core/json_error.h @@ -18,6 +18,7 @@ namespace sourcemeta::core { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -93,7 +94,7 @@ class SOURCEMETA_CORE_JSON_EXPORT JSONFileParseError : public JSONParseError { }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/core/json/include/sourcemeta/core/json_object.h b/vendor/core/src/core/json/include/sourcemeta/core/json_object.h index b55fe70f9..e4ed9fe05 100644 --- a/vendor/core/src/core/json/include/sourcemeta/core/json_object.h +++ b/vendor/core/src/core/json/include/sourcemeta/core/json_object.h @@ -822,12 +822,13 @@ template class JSONObject { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif static constexpr Hash HASHER{}; underlying_type data_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/json/include/sourcemeta/core/json_value.h b/vendor/core/src/core/json/include/sourcemeta/core/json_value.h index bb90649fd..f5b6dca0b 100644 --- a/vendor/core/src/core/json/include/sourcemeta/core/json_value.h +++ b/vendor/core/src/core/json/include/sourcemeta/core/json_value.h @@ -2479,6 +2479,7 @@ class SOURCEMETA_CORE_JSON_EXPORT JSON { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif union { @@ -2495,7 +2496,7 @@ class SOURCEMETA_CORE_JSON_EXPORT JSON { // footprint static_assert(sizeof(Decimal) <= sizeof(String)); #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif auto maybe_destruct_union() -> void; }; diff --git a/vendor/core/src/core/jsonl/include/sourcemeta/core/jsonl.h b/vendor/core/src/core/jsonl/include/sourcemeta/core/jsonl.h index 3b05afe4e..4f5704947 100644 --- a/vendor/core/src/core/jsonl/include/sourcemeta/core/jsonl.h +++ b/vendor/core/src/core/jsonl/include/sourcemeta/core/jsonl.h @@ -18,11 +18,21 @@ /// @defgroup jsonl JSONL /// @brief A JSON Lines (https://jsonlines.org) implementation with iterator /// support. Every non-empty line in a JSONL stream is a complete, valid JSON -/// value, and lines are separated by newline characters (U+000A). Multi-line -/// JSON values are not supported, as per the JSONL specification. Blank and -/// whitespace-only lines are skipped rather than treated as errors. JSON Lines -/// is a convention rather than a formal specification, so tolerating stray -/// blank lines is friendlier to real-world input. +/// value of any type, and lines are separated by newline characters (U+000A), +/// optionally preceded by a carriage return (U+000D). Multi-line JSON values +/// are not supported, as per the JSONL specification. +/// +/// JSON Lines and NDJSON (https://github.com/ndjson/ndjson-spec) describe the +/// same format with minor differences, and this implementation accepts a +/// superset of both: +/// +/// - Blank and whitespace-only lines are skipped rather than treated as +/// errors. JSON Lines considers them invalid, while NDJSON 3.2 permits +/// ignoring them as long as the behavior is documented +/// - A newline after the last value is optional. JSON Lines makes it a +/// recommendation, while NDJSON 3.1 requires it when serializing +/// - Whitespace is tolerated anywhere around a value, including carriage +/// returns that NDJSON 3.1 only allows right before a newline /// /// This functionality is included as follows: /// @@ -87,13 +97,14 @@ class SOURCEMETA_CORE_JSONL_EXPORT JSONL { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif std::basic_istream *stream_; struct Internal; std::unique_ptr internal_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/jsonl/include/sourcemeta/core/jsonl_iterator.h b/vendor/core/src/core/jsonl/include/sourcemeta/core/jsonl_iterator.h index 92ab19634..f2f12e029 100644 --- a/vendor/core/src/core/jsonl/include/sourcemeta/core/jsonl_iterator.h +++ b/vendor/core/src/core/jsonl/include/sourcemeta/core/jsonl_iterator.h @@ -17,9 +17,7 @@ namespace sourcemeta::core { /// @ingroup jsonl /// A forward iterator to parse JSON documents out of a JSON Lines stream. Blank -/// and whitespace-only lines are skipped rather than treated as errors, as JSON -/// Lines is a convention rather than a formal specification and tolerating -/// stray blank lines is friendlier to real-world input. +/// and whitespace-only lines are skipped rather than treated as errors. class SOURCEMETA_CORE_JSONL_EXPORT ConstJSONLIterator { public: /// Construct an iterator over the JSON documents in a stream. @@ -49,6 +47,7 @@ class SOURCEMETA_CORE_JSONL_EXPORT ConstJSONLIterator { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif // Use PIMPL idiom to hide internal details, mainly @@ -56,7 +55,7 @@ class SOURCEMETA_CORE_JSONL_EXPORT ConstJSONLIterator { struct Internal; std::unique_ptr internal_{}; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/jsonl/iterator.cc b/vendor/core/src/core/jsonl/iterator.cc index b46d79db1..6de918c45 100644 --- a/vendor/core/src/core/jsonl/iterator.cc +++ b/vendor/core/src/core/jsonl/iterator.cc @@ -34,7 +34,7 @@ auto ConstJSONLIterator::parse_next() -> JSON { row.pop_back(); } - // Skip whitespace-only lines + // NDJSON 3.2 states that "The parser MAY silently ignore empty lines" bool has_content{false}; for (const auto character : row) { if (character != internal::TOKEN_JSONL_WHITESPACE_SPACE && diff --git a/vendor/core/src/core/jsonld/include/sourcemeta/core/jsonld_error.h b/vendor/core/src/core/jsonld/include/sourcemeta/core/jsonld_error.h index 5ce06f91a..411b55f2b 100644 --- a/vendor/core/src/core/jsonld/include/sourcemeta/core/jsonld_error.h +++ b/vendor/core/src/core/jsonld/include/sourcemeta/core/jsonld_error.h @@ -18,6 +18,7 @@ namespace sourcemeta::core { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -82,7 +83,7 @@ class SOURCEMETA_CORE_JSONLD_EXPORT JSONLDFragmentError : public JSONLDError { }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/core/jsonpath/include/sourcemeta/core/jsonpath_error.h b/vendor/core/src/core/jsonpath/include/sourcemeta/core/jsonpath_error.h index 1773df961..db8d8fb2f 100644 --- a/vendor/core/src/core/jsonpath/include/sourcemeta/core/jsonpath_error.h +++ b/vendor/core/src/core/jsonpath/include/sourcemeta/core/jsonpath_error.h @@ -14,6 +14,7 @@ namespace sourcemeta::core { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -39,7 +40,7 @@ class SOURCEMETA_CORE_JSONPATH_EXPORT JSONPathParseError }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/core/jsonpointer/include/sourcemeta/core/jsonpointer_position.h b/vendor/core/src/core/jsonpointer/include/sourcemeta/core/jsonpointer_position.h index 8a6899966..993df7b71 100644 --- a/vendor/core/src/core/jsonpointer/include/sourcemeta/core/jsonpointer_position.h +++ b/vendor/core/src/core/jsonpointer/include/sourcemeta/core/jsonpointer_position.h @@ -89,13 +89,14 @@ class SOURCEMETA_CORE_JSONPOINTER_EXPORT PointerPositionTracker { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif std::vector events_; mutable bool indexed_{false}; mutable std::vector trie_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/jsonpointer/include/sourcemeta/core/jsonpointer_walker.h b/vendor/core/src/core/jsonpointer/include/sourcemeta/core/jsonpointer_walker.h index 0972b0e58..58f76d80a 100644 --- a/vendor/core/src/core/jsonpointer/include/sourcemeta/core/jsonpointer_walker.h +++ b/vendor/core/src/core/jsonpointer/include/sourcemeta/core/jsonpointer_walker.h @@ -76,11 +76,12 @@ template class GenericPointerWalker { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif internal pointers_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_device.h b/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_device.h index c17868142..6ae1341bb 100644 --- a/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_device.h +++ b/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_device.h @@ -21,6 +21,7 @@ namespace sourcemeta::core { #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif @@ -185,7 +186,7 @@ class SOURCEMETA_CORE_OAUTH_EXPORT OAuthDevicePoller { }; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif /// @ingroup oauth diff --git a/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_dpop.h b/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_dpop.h index e288850bc..c15916a3a 100644 --- a/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_dpop.h +++ b/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_dpop.h @@ -96,12 +96,13 @@ class SOURCEMETA_CORE_OAUTH_EXPORT OAuthDPoPProofer { JWKPrivate key_; JWSAlgorithm algorithm_; #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif mutable std::mutex mutex_; std::map> nonces_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; @@ -307,12 +308,13 @@ class SOURCEMETA_CORE_OAUTH_EXPORT OAuthDPoPReplayStore { std::size_t capacity_; #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif mutable std::mutex mutex_; std::vector entries_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_error.h b/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_error.h index b0e3c8a2e..187383ad9 100644 --- a/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_error.h +++ b/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_error.h @@ -281,6 +281,7 @@ auto oauth_bearer_error_status(const OAuthBearerError error) noexcept -> HTTPStatus; #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -307,7 +308,7 @@ class SOURCEMETA_CORE_OAUTH_EXPORT OAuthRegistrationParseError }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_introspection.h b/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_introspection.h index cabb75059..e7a59c531 100644 --- a/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_introspection.h +++ b/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_introspection.h @@ -15,6 +15,7 @@ namespace sourcemeta::core { #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif @@ -100,7 +101,7 @@ class SOURCEMETA_CORE_OAUTH_EXPORT OAuthIntrospectionResponse { }; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif /// @ingroup oauth diff --git a/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_metadata.h b/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_metadata.h index 8a00062da..c97a3030e 100644 --- a/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_metadata.h +++ b/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_metadata.h @@ -118,6 +118,7 @@ SOURCEMETA_CORE_OAUTH_EXPORT auto oauth_is_issuer_identifier(const std::string_view value) -> bool; #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif @@ -352,7 +353,7 @@ class SOURCEMETA_CORE_OAUTH_EXPORT OAuthResourceMetadata { }; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif /// @ingroup oauth diff --git a/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_metadata_provider.h b/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_metadata_provider.h index e8effd76d..459abcaa3 100644 --- a/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_metadata_provider.h +++ b/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_metadata_provider.h @@ -18,6 +18,7 @@ namespace sourcemeta::core { #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif @@ -227,7 +228,7 @@ class SOURCEMETA_CORE_OAUTH_EXPORT OAuthResourceMetadataProvider { }; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_registration.h b/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_registration.h index 7ba075eed..72a619db3 100644 --- a/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_registration.h +++ b/vendor/core/src/core/oauth/include/sourcemeta/core/oauth_registration.h @@ -15,6 +15,7 @@ namespace sourcemeta::core { #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif @@ -152,7 +153,7 @@ class SOURCEMETA_CORE_OAUTH_EXPORT OAuthClientMetadata { }; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif /// @ingroup oauth diff --git a/vendor/core/src/core/oidc/include/sourcemeta/core/oidc_error.h b/vendor/core/src/core/oidc/include/sourcemeta/core/oidc_error.h index 1af3c2bc1..67335633e 100644 --- a/vendor/core/src/core/oidc/include/sourcemeta/core/oidc_error.h +++ b/vendor/core/src/core/oidc/include/sourcemeta/core/oidc_error.h @@ -13,6 +13,7 @@ namespace sourcemeta::core { #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -40,7 +41,7 @@ class SOURCEMETA_CORE_OIDC_EXPORT OIDCRegistrationParseError }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif /// @ingroup oidc diff --git a/vendor/core/src/core/oidc/include/sourcemeta/core/oidc_metadata.h b/vendor/core/src/core/oidc/include/sourcemeta/core/oidc_metadata.h index a317009a7..6d5692726 100644 --- a/vendor/core/src/core/oidc/include/sourcemeta/core/oidc_metadata.h +++ b/vendor/core/src/core/oidc/include/sourcemeta/core/oidc_metadata.h @@ -15,6 +15,7 @@ namespace sourcemeta::core { #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif @@ -167,7 +168,7 @@ class SOURCEMETA_CORE_OIDC_EXPORT OIDCProviderMetadata { }; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif /// @ingroup oidc diff --git a/vendor/core/src/core/oidc/include/sourcemeta/core/oidc_registration.h b/vendor/core/src/core/oidc/include/sourcemeta/core/oidc_registration.h index 7e4d4528d..05ed706b3 100644 --- a/vendor/core/src/core/oidc/include/sourcemeta/core/oidc_registration.h +++ b/vendor/core/src/core/oidc/include/sourcemeta/core/oidc_registration.h @@ -16,6 +16,7 @@ namespace sourcemeta::core { #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif @@ -114,7 +115,7 @@ class SOURCEMETA_CORE_OIDC_EXPORT OIDCClientMetadata { }; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif /// @ingroup oidc diff --git a/vendor/core/src/core/punycode/include/sourcemeta/core/punycode_error.h b/vendor/core/src/core/punycode/include/sourcemeta/core/punycode_error.h index 0f885557a..e385ba5f6 100644 --- a/vendor/core/src/core/punycode/include/sourcemeta/core/punycode_error.h +++ b/vendor/core/src/core/punycode/include/sourcemeta/core/punycode_error.h @@ -15,6 +15,7 @@ namespace sourcemeta::core { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -37,7 +38,7 @@ class SOURCEMETA_CORE_PUNYCODE_EXPORT PunycodeError : public std::exception { }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/core/regex/CMakeLists.txt b/vendor/core/src/core/regex/CMakeLists.txt index 958144e9d..f10eec028 100644 --- a/vendor/core/src/core/regex/CMakeLists.txt +++ b/vendor/core/src/core/regex/CMakeLists.txt @@ -1,5 +1,5 @@ sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME regex - SOURCES regex.cc iregexp.h permissive.h) + SOURCES regex.cc ecma262.h ecma262_properties.h iregexp.h permissive.h) if(SOURCEMETA_CORE_INSTALL) sourcemeta_library_install(NAMESPACE sourcemeta PROJECT core NAME regex) diff --git a/vendor/core/src/core/regex/ecma262.h b/vendor/core/src/core/regex/ecma262.h new file mode 100644 index 000000000..d5994afdf --- /dev/null +++ b/vendor/core/src/core/regex/ecma262.h @@ -0,0 +1,1026 @@ +#ifndef SOURCEMETA_CORE_REGEX_ECMA262_H_ +#define SOURCEMETA_CORE_REGEX_ECMA262_H_ + +#include + +#include "ecma262_properties.h" + +#include // std::size_t +#include // std::optional +#include // std::string, std::u32string +#include // std::string_view, std::u32string_view +#include // std::unordered_set +#include // std::move +#include // std::vector + +namespace sourcemeta::core { + +namespace { + +// Every code point is a possible member of a pattern, including the null one, +// so running past the end is reported with a value outside the Unicode range +constexpr char32_t ECMA262_END{0xFFFFFFFF}; + +constexpr char32_t ECMA262_LAST_CODE_POINT{0x10FFFF}; +constexpr char32_t ECMA262_LEAD_SURROGATE_FIRST{0xD800}; +constexpr char32_t ECMA262_LEAD_SURROGATE_LAST{0xDBFF}; +constexpr char32_t ECMA262_TRAIL_SURROGATE_FIRST{0xDC00}; +constexpr char32_t ECMA262_TRAIL_SURROGATE_LAST{0xDFFF}; +constexpr char32_t ECMA262_ZERO_WIDTH_NON_JOINER{0x200C}; +constexpr char32_t ECMA262_ZERO_WIDTH_JOINER{0x200D}; + +constexpr std::u32string_view ECMA262_SYNTAX_CHARACTERS{U"^$\\.*+?()[]{}|"}; +constexpr std::u32string_view ECMA262_CLASS_SHORTHANDS{U"dDsSwW"}; +constexpr std::u32string_view ECMA262_MODIFIERS{U"ims"}; + +// The characters that set notation reserves for its own operators, and the +// ones it only accepts escaped so that future syntax stays available +constexpr std::u32string_view ECMA262_SET_SYNTAX_CHARACTERS{U"()[]{}/-\\|"}; +constexpr std::u32string_view ECMA262_SET_RESERVED_PUNCTUATORS{ + U"&-!#%,:;<=>@`~"}; +constexpr std::u32string_view ECMA262_SET_DOUBLED_PUNCTUATORS{ + U"&!#$%*+,.:;<=>?@^`~"}; + +// The outcome of reading one member of a character class, where a shorthand +// or a property stands for a set rather than for a single code point +struct Ecma262ClassAtom { + bool is_class; + char32_t value; +}; + +// The outcome of reading one operand of a set expression, which additionally +// tracks whether it can stand for something other than a single code point +struct Ecma262SetOperand { + bool is_character; + char32_t value; + bool may_contain_strings; + bool is_range; +}; + +inline auto is_set_syntax_character(const char32_t codepoint) -> bool { + return ECMA262_SET_SYNTAX_CHARACTERS.find(codepoint) != + std::u32string_view::npos; +} + +inline auto is_set_reserved_punctuator(const char32_t codepoint) -> bool { + return ECMA262_SET_RESERVED_PUNCTUATORS.find(codepoint) != + std::u32string_view::npos; +} + +inline auto is_ascii_letter(const char32_t codepoint) -> bool { + return (codepoint >= U'a' && codepoint <= U'z') || + (codepoint >= U'A' && codepoint <= U'Z'); +} + +inline auto is_decimal_digit(const char32_t codepoint) -> bool { + return codepoint >= U'0' && codepoint <= U'9'; +} + +inline auto is_hex_code_point(const char32_t codepoint) -> bool { + return is_decimal_digit(codepoint) || + (codepoint >= U'a' && codepoint <= U'f') || + (codepoint >= U'A' && codepoint <= U'F'); +} + +inline auto hex_code_point_value(const char32_t codepoint) -> char32_t { + if (is_decimal_digit(codepoint)) { + return codepoint - U'0'; + } + + return (codepoint | 0x20) - U'a' + 10; +} + +inline auto is_identifier_start(const char32_t codepoint) -> bool { + return is_id_start(codepoint) || codepoint == U'$' || codepoint == U'_'; +} + +inline auto is_identifier_part(const char32_t codepoint) -> bool { + return is_id_continue(codepoint) || codepoint == U'$' || + codepoint == ECMA262_ZERO_WIDTH_NON_JOINER || + codepoint == ECMA262_ZERO_WIDTH_JOINER; +} + +inline auto significant_digits(const std::u32string_view digits) + -> std::u32string_view { + const auto first{digits.find_first_not_of(U'0')}; + return first == std::u32string_view::npos ? std::u32string_view{} + : digits.substr(first); +} + +// The digits of a quantifier bound are unbounded in the grammar, so the two +// bounds are ordered as decimal strings rather than as machine integers +inline auto decimal_greater(const std::u32string_view left, + const std::u32string_view right) -> bool { + const auto left_value{significant_digits(left)}; + const auto right_value{significant_digits(right)}; + return left_value.size() == right_value.size() + ? left_value > right_value + : left_value.size() > right_value.size(); +} + +// Groups and classes both nest, and reading them is recursive, so a pattern +// that nests past this many levels is turned down rather than allowed to run +// the stack out on input that may not be trusted. No real pattern comes close, +// and engines impose a bound of their own for the same reason +constexpr std::size_t ECMA262_MAXIMUM_DEPTH{256}; + +// A recursive descent reader of the pattern grammar of ECMA-262, taken with +// the Unicode parameter and without the one for set notation. Constraints +// that look ahead of the point where they are written, such as a reference to +// a group that appears later, are collected and settled once the whole +// pattern has been read +struct Ecma262Reader { + std::u32string_view input{}; + bool unicode_sets{false}; + std::size_t depth{0}; + std::size_t position{0}; + std::size_t capture_count{0}; + // The names that the alternative being read has declared, at every level of + // alternation, as a name may only repeat across alternatives + std::vector> declared; + std::unordered_set names; + std::vector references; + std::u32string largest_reference; + + [[nodiscard]] auto exhausted() const -> bool { + return this->position >= this->input.size(); + } + + [[nodiscard]] auto peek(const std::size_t offset = 0) const -> char32_t { + return this->position + offset < this->input.size() + ? this->input[this->position + offset] + : ECMA262_END; + } + + auto consume(const char32_t codepoint) -> bool { + if (this->peek() == codepoint) { + this->position += 1; + return true; + } + + return false; + } + + auto read_digits() -> std::u32string_view { + const auto start{this->position}; + while (is_decimal_digit(this->peek())) { + this->position += 1; + } + + return this->input.substr(start, this->position - start); + } + + auto read_pattern() -> bool { + if (!this->read_disjunction() || !this->exhausted()) { + return false; + } + + for (const auto &reference : this->references) { + if (!this->names.contains(reference)) { + return false; + } + } + + if (!this->largest_reference.empty() && + decimal_greater(this->largest_reference, + to_decimal_string(this->capture_count))) { + return false; + } + + return true; + } + + static auto to_decimal_string(const std::size_t value) -> std::u32string { + if (value == 0) { + return U"0"; + } + + std::u32string result; + for (auto remaining = value; remaining > 0; remaining /= 10) { + result.insert(result.begin(), + static_cast(U'0' + (remaining % 10))); + } + + return result; + } + + auto read_disjunction() -> bool { + if (this->depth >= ECMA262_MAXIMUM_DEPTH) { + return false; + } + + this->depth += 1; + const auto result{this->read_disjunction_contents()}; + this->depth -= 1; + return result; + } + + auto read_disjunction_contents() -> bool { + this->declared.emplace_back(); + std::unordered_set gathered; + if (!this->read_alternative()) { + return false; + } + + while (this->consume(U'|')) { + gathered.merge(this->declared.back()); + this->declared.back().clear(); + if (!this->read_alternative()) { + return false; + } + } + + gathered.merge(this->declared.back()); + this->declared.pop_back(); + + // What every alternative declared belongs to the alternative that encloses + // them, where the same name may not already stand + if (this->declared.empty()) { + return true; + } + + for (const auto &name : gathered) { + if (!this->declared.back().insert(name).second) { + return false; + } + } + + return true; + } + + auto read_alternative() -> bool { + while (!this->exhausted() && this->peek() != U'|' && this->peek() != U')') { + if (!this->read_term()) { + return false; + } + } + + return true; + } + + auto read_term() -> bool { + const auto current{this->peek()}; + // An assertion is its own kind of term and takes no quantifier, so a + // quantifier written after one has nothing to repeat + if (current == U'^' || current == U'$') { + this->position += 1; + return true; + } + + if (current == U'\\' && (this->peek(1) == U'b' || this->peek(1) == U'B')) { + this->position += 2; + return true; + } + + if (current == U'(' && this->peek(1) == U'?') { + const auto third{this->peek(2)}; + if (third == U'=' || third == U'!') { + this->position += 3; + return this->read_disjunction() && this->consume(U')'); + } + + if (third == U'<' && (this->peek(3) == U'=' || this->peek(3) == U'!')) { + this->position += 4; + return this->read_disjunction() && this->consume(U')'); + } + } + + return this->read_atom() && this->read_quantifier(); + } + + auto read_quantifier() -> bool { + const auto current{this->peek()}; + if (current == U'*' || current == U'+' || current == U'?') { + this->position += 1; + } else if (current == U'{') { + if (!this->read_braced_quantifier()) { + return false; + } + } else { + return true; + } + + this->consume(U'?'); + return true; + } + + auto read_braced_quantifier() -> bool { + this->position += 1; + const auto minimum{this->read_digits()}; + if (minimum.empty()) { + return false; + } + + if (this->consume(U'}')) { + return true; + } + + if (!this->consume(U',')) { + return false; + } + + if (this->consume(U'}')) { + return true; + } + + const auto maximum{this->read_digits()}; + return !maximum.empty() && this->consume(U'}') && + !decimal_greater(minimum, maximum); + } + + auto read_atom() -> bool { + const auto current{this->peek()}; + if (current == U'.') { + this->position += 1; + return true; + } + + if (current == U'\\') { + this->position += 1; + return this->read_atom_escape(); + } + + if (current == U'[') { + return this->read_character_class(); + } + + if (current == U'(') { + return this->read_group(); + } + + if (current == ECMA262_END || + ECMA262_SYNTAX_CHARACTERS.find(current) != std::u32string_view::npos) { + return false; + } + + this->position += 1; + return true; + } + + auto read_group() -> bool { + this->position += 1; + if (this->peek() != U'?') { + this->capture_count += 1; + return this->read_disjunction() && this->consume(U')'); + } + + if (this->peek(1) == U'<') { + this->position += 1; + auto name{this->read_group_name()}; + if (!name.has_value()) { + return false; + } + + this->capture_count += 1; + if (!this->declared.back().insert(name.value()).second) { + return false; + } + + this->names.insert(std::move(name.value())); + return this->read_disjunction() && this->consume(U')'); + } + + return this->read_modifiers() && this->read_disjunction() && + this->consume(U')'); + } + + // A group that carries no name carries flags instead, and the plain + // non-capturing form is the one that turns none of them on or off + auto read_modifiers() -> bool { + this->position += 1; + const auto added{this->read_modifier_run()}; + std::u32string removed; + const bool subtracts{this->consume(U'-')}; + if (subtracts) { + removed = this->read_modifier_run(); + } + + if (!this->consume(U':')) { + return false; + } + + if (subtracts && added.empty() && removed.empty()) { + return false; + } + + return !has_repeated_modifier(added) && !has_repeated_modifier(removed) && + !shares_modifier(added, removed); + } + + auto read_modifier_run() -> std::u32string { + std::u32string result; + while (ECMA262_MODIFIERS.find(this->peek()) != std::u32string_view::npos) { + result += this->peek(); + this->position += 1; + } + + return result; + } + + static auto has_repeated_modifier(const std::u32string_view run) -> bool { + for (std::size_t left = 0; left < run.size(); ++left) { + for (auto right = left + 1; right < run.size(); ++right) { + if (run[left] == run[right]) { + return true; + } + } + } + + return false; + } + + static auto shares_modifier(const std::u32string_view left, + const std::u32string_view right) -> bool { + for (const auto codepoint : left) { + if (right.find(codepoint) != std::u32string_view::npos) { + return true; + } + } + + return false; + } + + auto read_group_name() -> std::optional { + if (!this->consume(U'<')) { + return std::nullopt; + } + + std::u32string name; + const auto first{this->read_identifier_code_point()}; + if (!first.has_value() || !is_identifier_start(first.value())) { + return std::nullopt; + } + + name += first.value(); + while (this->peek() != U'>') { + const auto next{this->read_identifier_code_point()}; + if (!next.has_value() || !is_identifier_part(next.value())) { + return std::nullopt; + } + + name += next.value(); + } + + this->position += 1; + return name; + } + + auto read_identifier_code_point() -> std::optional { + const auto current{this->peek()}; + if (current == ECMA262_END) { + return std::nullopt; + } + + if (current == U'\\') { + if (this->peek(1) != U'u') { + return std::nullopt; + } + + this->position += 1; + return this->read_unicode_escape(); + } + + this->position += 1; + return current; + } + + auto read_atom_escape() -> bool { + const auto current{this->peek()}; + if (current >= U'1' && current <= U'9') { + const auto digits{this->read_digits()}; + if (decimal_greater(digits, this->largest_reference)) { + this->largest_reference = digits; + } + + return true; + } + + if (current == U'k') { + this->position += 1; + auto name{this->read_group_name()}; + if (!name.has_value()) { + return false; + } + + this->references.push_back(std::move(name.value())); + return true; + } + + if (ECMA262_CLASS_SHORTHANDS.find(current) != std::u32string_view::npos) { + this->position += 1; + return true; + } + + if (current == U'p' || current == U'P') { + return this->read_unicode_property(current == U'P').has_value(); + } + + return this->read_character_escape().has_value(); + } + + // Reads a property expression and reports whether it may stand for + // something other than a single code point + auto read_unicode_property(const bool negated) -> std::optional { + this->position += 1; + if (!this->consume(U'{')) { + return std::nullopt; + } + + const auto first{this->read_property_token()}; + if (this->consume(U'=')) { + const auto value{this->read_property_token()}; + if (first.empty() || value.empty() || !this->consume(U'}') || + !is_listed_property(ECMA262_NON_BINARY_PROPERTIES, first)) { + return std::nullopt; + } + + const bool known{ + (first == "General_Category" || first == "gc") + ? is_listed_property(ECMA262_GENERAL_CATEGORY_VALUES, value) + : is_listed_property(ECMA262_SCRIPT_VALUES, value)}; + return known ? std::optional{false} : std::nullopt; + } + + if (first.empty() || !this->consume(U'}')) { + return std::nullopt; + } + + // A property that stands for a set of strings only resolves under set + // notation, and never where the property is negated + if (is_listed_property(ECMA262_BINARY_PROPERTIES_OF_STRINGS, first)) { + return (this->unicode_sets && !negated) ? std::optional{true} + : std::nullopt; + } + + if (is_listed_property(ECMA262_GENERAL_CATEGORY_VALUES, first) || + is_listed_property(ECMA262_BINARY_PROPERTIES, first)) { + return false; + } + + return std::nullopt; + } + + // Both halves of a property expression are spelled with ASCII alone, so the + // token is gathered as a narrow string ready to look up + auto read_property_token() -> std::string { + std::string result; + while (is_ascii_letter(this->peek()) || this->peek() == U'_' || + is_decimal_digit(this->peek())) { + result += static_cast(this->peek()); + this->position += 1; + } + + return result; + } + + auto read_character_escape() -> std::optional { + const auto current{this->peek()}; + switch (current) { + case U'f': + this->position += 1; + return 0x000C; + case U'n': + this->position += 1; + return 0x000A; + case U'r': + this->position += 1; + return 0x000D; + case U't': + this->position += 1; + return 0x0009; + case U'v': + this->position += 1; + return 0x000B; + default: + break; + } + + if (current == U'c') { + const auto letter{this->peek(1)}; + if (!is_ascii_letter(letter)) { + return std::nullopt; + } + + this->position += 2; + return letter % 32; + } + + if (current == U'0') { + if (is_decimal_digit(this->peek(1))) { + return std::nullopt; + } + + this->position += 1; + return 0x0000; + } + + if (current == U'x') { + if (!is_hex_code_point(this->peek(1)) || + !is_hex_code_point(this->peek(2))) { + return std::nullopt; + } + + const auto value{(hex_code_point_value(this->peek(1)) << 4U) | + hex_code_point_value(this->peek(2))}; + this->position += 3; + return value; + } + + if (current == U'u') { + return this->read_unicode_escape(); + } + + if (current == U'/' || + ECMA262_SYNTAX_CHARACTERS.find(current) != std::u32string_view::npos) { + this->position += 1; + return current; + } + + return std::nullopt; + } + + auto read_unicode_escape() -> std::optional { + this->position += 1; + if (this->consume(U'{')) { + if (!is_hex_code_point(this->peek())) { + return std::nullopt; + } + + char32_t value{0}; + while (is_hex_code_point(this->peek())) { + value = (value << 4U) | hex_code_point_value(this->peek()); + this->position += 1; + if (value > ECMA262_LAST_CODE_POINT) { + return std::nullopt; + } + } + + return this->consume(U'}') ? std::optional{value} + : std::nullopt; + } + + const auto leading{this->read_four_hex_digits()}; + if (!leading.has_value()) { + return std::nullopt; + } + + // A pair of escapes standing for a surrogate pair denotes the single code + // point they combine into, rather than either half on its own + if (leading.value() >= ECMA262_LEAD_SURROGATE_FIRST && + leading.value() <= ECMA262_LEAD_SURROGATE_LAST && + this->peek() == U'\\' && this->peek(1) == U'u') { + const auto rewind{this->position}; + this->position += 2; + const auto trailing{this->read_four_hex_digits()}; + if (trailing.has_value() && + trailing.value() >= ECMA262_TRAIL_SURROGATE_FIRST && + trailing.value() <= ECMA262_TRAIL_SURROGATE_LAST) { + return 0x10000 + + ((leading.value() - ECMA262_LEAD_SURROGATE_FIRST) << 10U) + + (trailing.value() - ECMA262_TRAIL_SURROGATE_FIRST); + } + + this->position = rewind; + } + + return leading; + } + + auto read_four_hex_digits() -> std::optional { + for (std::size_t offset = 0; offset < 4; ++offset) { + if (!is_hex_code_point(this->peek(offset))) { + return std::nullopt; + } + } + + char32_t value{0}; + for (std::size_t offset = 0; offset < 4; ++offset) { + value = (value << 4U) | hex_code_point_value(this->peek(offset)); + } + + this->position += 4; + return value; + } + + auto read_character_class() -> bool { + this->position += 1; + const bool negated{this->consume(U'^')}; + if (this->unicode_sets) { + const auto strings{this->read_set_expression()}; + // A negated class can never stand for a set of strings, as there is no + // sensible complement of one + return strings.has_value() && !(negated && strings.value()) && + this->consume(U']'); + } + + while (this->peek() != U']') { + const auto first{this->read_class_atom()}; + if (!first.has_value()) { + return false; + } + + if (this->peek() != U'-' || this->peek(1) == U']' || + this->peek(1) == ECMA262_END) { + continue; + } + + this->position += 1; + const auto second{this->read_class_atom()}; + if (!second.has_value() || first->is_class || second->is_class || + first->value > second->value) { + return false; + } + } + + this->position += 1; + return true; + } + + // Reads the contents of a class written with set notation, reporting + // whether the result may stand for something other than a single code point + auto read_set_expression() -> std::optional { + if (this->depth >= ECMA262_MAXIMUM_DEPTH) { + return std::nullopt; + } + + this->depth += 1; + const auto result{this->read_set_expression_contents()}; + this->depth -= 1; + return result; + } + + auto read_set_expression_contents() -> std::optional { + if (this->peek() == U']') { + return false; + } + + auto first{this->read_set_range_or_operand()}; + if (!first.has_value()) { + return std::nullopt; + } + + const bool operates{(this->peek() == U'&' && this->peek(1) == U'&') || + (this->peek() == U'-' && this->peek(1) == U'-')}; + if (first->is_range && operates) { + return std::nullopt; + } + + if (this->peek() == U'&' && this->peek(1) == U'&') { + auto strings{first->may_contain_strings}; + while (this->peek() == U'&' && this->peek(1) == U'&') { + this->position += 2; + if (this->peek() == U'&') { + return std::nullopt; + } + + const auto operand{this->read_set_operand()}; + if (!operand.has_value()) { + return std::nullopt; + } + + strings = strings && operand->may_contain_strings; + } + + return this->peek() == U']' ? std::optional{strings} : std::nullopt; + } + + if (this->peek() == U'-' && this->peek(1) == U'-') { + while (this->peek() == U'-' && this->peek(1) == U'-') { + this->position += 2; + if (!this->read_set_operand().has_value()) { + return std::nullopt; + } + } + + // Taking members away can never introduce one, so only what the + // expression started from decides this + return this->peek() == U']' + ? std::optional{first->may_contain_strings} + : std::nullopt; + } + + auto strings{first->may_contain_strings}; + while (this->peek() != U']') { + const auto next{this->read_set_range_or_operand()}; + if (!next.has_value()) { + return std::nullopt; + } + + strings = strings || next->may_contain_strings; + } + + return strings; + } + + auto read_set_range_or_operand() -> std::optional { + const auto first{this->read_set_operand()}; + if (!first.has_value() || !first->is_character || this->peek() != U'-' || + this->peek(1) == U'-' || this->peek(1) == U']' || + this->peek(1) == ECMA262_END) { + return first; + } + + this->position += 1; + const auto second{this->read_set_operand()}; + if (!second.has_value() || !second->is_character || + first->value > second->value) { + return std::nullopt; + } + + return Ecma262SetOperand{.is_character = false, + .value = 0, + .may_contain_strings = false, + .is_range = true}; + } + + auto read_set_operand() -> std::optional { + if (this->peek() == U'[') { + this->position += 1; + const bool negated{this->consume(U'^')}; + const auto strings{this->read_set_expression()}; + if (!strings.has_value() || (negated && strings.value()) || + !this->consume(U']')) { + return std::nullopt; + } + + return Ecma262SetOperand{.is_character = false, + .value = 0, + .may_contain_strings = strings.value(), + .is_range = false}; + } + + if (this->peek() == U'\\') { + const auto next{this->peek(1)}; + if (next == U'q') { + this->position += 2; + return this->read_set_string_disjunction(); + } + + if (ECMA262_CLASS_SHORTHANDS.find(next) != std::u32string_view::npos) { + this->position += 2; + return Ecma262SetOperand{.is_character = false, + .value = 0, + .may_contain_strings = false, + .is_range = false}; + } + + if (next == U'p' || next == U'P') { + this->position += 1; + const auto strings{this->read_unicode_property(next == U'P')}; + if (!strings.has_value()) { + return std::nullopt; + } + + return Ecma262SetOperand{.is_character = false, + .value = 0, + .may_contain_strings = strings.value(), + .is_range = false}; + } + } + + const auto character{this->read_set_character()}; + if (!character.has_value()) { + return std::nullopt; + } + + return Ecma262SetOperand{.is_character = true, + .value = character.value(), + .may_contain_strings = false, + .is_range = false}; + } + + auto read_set_string_disjunction() -> std::optional { + if (!this->consume(U'{')) { + return std::nullopt; + } + + bool strings{false}; + while (true) { + std::size_t length{0}; + while (this->peek() != U'}' && this->peek() != U'|') { + if (!this->read_set_character().has_value()) { + return std::nullopt; + } + + length += 1; + } + + // An alternative of any length other than one stands for a string + strings = strings || length != 1; + if (!this->consume(U'|')) { + break; + } + } + + if (!this->consume(U'}')) { + return std::nullopt; + } + + return Ecma262SetOperand{.is_character = false, + .value = 0, + .may_contain_strings = strings, + .is_range = false}; + } + + auto read_set_character() -> std::optional { + const auto current{this->peek()}; + if (current == ECMA262_END) { + return std::nullopt; + } + + if (current == U'\\') { + this->position += 1; + if (this->peek() == U'b') { + this->position += 1; + return 0x0008; + } + + if (is_set_reserved_punctuator(this->peek())) { + const auto punctuator{this->peek()}; + this->position += 1; + return punctuator; + } + + return this->read_character_escape(); + } + + // Set notation keeps its own operators, and holds back every doubled + // punctuator so that later revisions may give them a meaning + if (is_set_syntax_character(current) || + (this->peek(1) == current && + ECMA262_SET_DOUBLED_PUNCTUATORS.find(current) != + std::u32string_view::npos)) { + return std::nullopt; + } + + this->position += 1; + return current; + } + + auto read_class_atom() -> std::optional { + const auto current{this->peek()}; + if (current == ECMA262_END) { + return std::nullopt; + } + + if (current != U'\\') { + this->position += 1; + return Ecma262ClassAtom{.is_class = false, .value = current}; + } + + this->position += 1; + const auto next{this->peek()}; + if (next == U'b') { + this->position += 1; + return Ecma262ClassAtom{.is_class = false, .value = 0x0008}; + } + + if (next == U'-') { + this->position += 1; + return Ecma262ClassAtom{.is_class = false, .value = U'-'}; + } + + if (ECMA262_CLASS_SHORTHANDS.find(next) != std::u32string_view::npos) { + this->position += 1; + return Ecma262ClassAtom{.is_class = true, .value = 0}; + } + + if (next == U'p' || next == U'P') { + return this->read_unicode_property(next == U'P').has_value() + ? std::optional{Ecma262ClassAtom{ + .is_class = true, .value = 0}} + : std::nullopt; + } + + const auto value{this->read_character_escape()}; + return value.has_value() ? std::optional{Ecma262ClassAtom{ + .is_class = false, .value = value.value()}} + : std::nullopt; + } +}; + +// Whether the given text is a pattern of ECMA-262 read with the Unicode +// parameter, which is the reading that a JSON Schema regular expression takes +inline auto is_ecma262_pattern(const std::string_view pattern) -> bool { + const auto decoded{utf8_to_utf32(pattern)}; + if (!decoded.has_value()) { + return false; + } + + Ecma262Reader unicode{}; + unicode.input = decoded.value(); + if (unicode.read_pattern()) { + return true; + } + + Ecma262Reader unicode_sets{}; + unicode_sets.input = decoded.value(); + unicode_sets.unicode_sets = true; + return unicode_sets.read_pattern(); +} + +} // namespace + +} // namespace sourcemeta::core + +#endif diff --git a/vendor/core/src/core/regex/ecma262_properties.h b/vendor/core/src/core/regex/ecma262_properties.h new file mode 100644 index 000000000..0b15d6962 --- /dev/null +++ b/vendor/core/src/core/regex/ecma262_properties.h @@ -0,0 +1,572 @@ +#ifndef SOURCEMETA_CORE_REGEX_ECMA262_PROPERTIES_H_ +#define SOURCEMETA_CORE_REGEX_ECMA262_PROPERTIES_H_ + +#include // std::ranges::binary_search +#include // std::array +#include // std::size_t +#include // std::string_view + +namespace sourcemeta::core { + +namespace { + +// The property names and aliases that may precede an equals sign, as listed +// by the non-binary property table of ECMA-262 +constexpr std::array ECMA262_NON_BINARY_PROPERTIES{ + {"General_Category", "Script", "Script_Extensions", "gc", "sc", "scx"}}; + +// The binary property names and aliases of the ECMA-262 table of the same +// name, which implementations may not extend +constexpr std::array ECMA262_BINARY_PROPERTIES{ + {"AHex", + "ASCII", + "ASCII_Hex_Digit", + "Alpha", + "Alphabetic", + "Any", + "Assigned", + "Bidi_C", + "Bidi_Control", + "Bidi_M", + "Bidi_Mirrored", + "CI", + "CWCF", + "CWCM", + "CWKCF", + "CWL", + "CWT", + "CWU", + "Case_Ignorable", + "Cased", + "Changes_When_Casefolded", + "Changes_When_Casemapped", + "Changes_When_Lowercased", + "Changes_When_NFKC_Casefolded", + "Changes_When_Titlecased", + "Changes_When_Uppercased", + "DI", + "Dash", + "Default_Ignorable_Code_Point", + "Dep", + "Deprecated", + "Dia", + "Diacritic", + "EBase", + "EComp", + "EMod", + "EPres", + "Emoji", + "Emoji_Component", + "Emoji_Modifier", + "Emoji_Modifier_Base", + "Emoji_Presentation", + "Ext", + "ExtPict", + "Extended_Pictographic", + "Extender", + "Gr_Base", + "Gr_Ext", + "Grapheme_Base", + "Grapheme_Extend", + "Hex", + "Hex_Digit", + "IDC", + "IDS", + "IDSB", + "IDST", + "IDS_Binary_Operator", + "IDS_Trinary_Operator", + "ID_Continue", + "ID_Start", + "Ideo", + "Ideographic", + "Join_C", + "Join_Control", + "LOE", + "Logical_Order_Exception", + "Lower", + "Lowercase", + "Math", + "NChar", + "Noncharacter_Code_Point", + "Pat_Syn", + "Pat_WS", + "Pattern_Syntax", + "Pattern_White_Space", + "QMark", + "Quotation_Mark", + "RI", + "Radical", + "Regional_Indicator", + "SD", + "STerm", + "Sentence_Terminal", + "Soft_Dotted", + "Term", + "Terminal_Punctuation", + "UIdeo", + "Unified_Ideograph", + "Upper", + "Uppercase", + "VS", + "Variation_Selector", + "White_Space", + "XIDC", + "XIDS", + "XID_Continue", + "XID_Start", + "space"}}; + +// The properties that only resolve where a pattern carries the parameter for +// the set notation, which this dialect never does +constexpr std::array ECMA262_BINARY_PROPERTIES_OF_STRINGS{ + {"Basic_Emoji", "Emoji_Keycap_Sequence", "RGI_Emoji", + "RGI_Emoji_Flag_Sequence", "RGI_Emoji_Modifier_Sequence", + "RGI_Emoji_Tag_Sequence", "RGI_Emoji_ZWJ_Sequence"}}; + +// The general category values and value aliases of the Unicode Character +// Database that this project vendors +constexpr std::array ECMA262_GENERAL_CATEGORY_VALUES{ + {"C", + "Cased_Letter", + "Cc", + "Cf", + "Close_Punctuation", + "Cn", + "Co", + "Combining_Mark", + "Connector_Punctuation", + "Control", + "Cs", + "Currency_Symbol", + "Dash_Punctuation", + "Decimal_Number", + "Enclosing_Mark", + "Final_Punctuation", + "Format", + "Initial_Punctuation", + "L", + "LC", + "Letter", + "Letter_Number", + "Line_Separator", + "Ll", + "Lm", + "Lo", + "Lowercase_Letter", + "Lt", + "Lu", + "M", + "Mark", + "Math_Symbol", + "Mc", + "Me", + "Mn", + "Modifier_Letter", + "Modifier_Symbol", + "N", + "Nd", + "Nl", + "No", + "Nonspacing_Mark", + "Number", + "Open_Punctuation", + "Other", + "Other_Letter", + "Other_Number", + "Other_Punctuation", + "Other_Symbol", + "P", + "Paragraph_Separator", + "Pc", + "Pd", + "Pe", + "Pf", + "Pi", + "Po", + "Private_Use", + "Ps", + "Punctuation", + "S", + "Sc", + "Separator", + "Sk", + "Sm", + "So", + "Space_Separator", + "Spacing_Mark", + "Surrogate", + "Symbol", + "Titlecase_Letter", + "Unassigned", + "Uppercase_Letter", + "Z", + "Zl", + "Zp", + "Zs", + "cntrl", + "digit", + "punct"}}; + +// The script values and value aliases of the same database, shared by both +// the script property and its extension counterpart +constexpr std::array ECMA262_SCRIPT_VALUES{ + {"Adlam", + "Adlm", + "Aghb", + "Ahom", + "Anatolian_Hieroglyphs", + "Arab", + "Arabic", + "Armenian", + "Armi", + "Armn", + "Avestan", + "Avst", + "Bali", + "Balinese", + "Bamu", + "Bamum", + "Bass", + "Bassa_Vah", + "Batak", + "Batk", + "Beng", + "Bengali", + "Berf", + "Beria_Erfe", + "Bhaiksuki", + "Bhks", + "Bopo", + "Bopomofo", + "Brah", + "Brahmi", + "Brai", + "Braille", + "Bugi", + "Buginese", + "Buhd", + "Buhid", + "Cakm", + "Canadian_Aboriginal", + "Cans", + "Cari", + "Carian", + "Caucasian_Albanian", + "Chakma", + "Cham", + "Cher", + "Cherokee", + "Chorasmian", + "Chrs", + "Common", + "Copt", + "Coptic", + "Cpmn", + "Cprt", + "Cuneiform", + "Cypriot", + "Cypro_Minoan", + "Cyrillic", + "Cyrl", + "Deseret", + "Deva", + "Devanagari", + "Diak", + "Dives_Akuru", + "Dogr", + "Dogra", + "Dsrt", + "Dupl", + "Duployan", + "Egyp", + "Egyptian_Hieroglyphs", + "Elba", + "Elbasan", + "Elym", + "Elymaic", + "Ethi", + "Ethiopic", + "Gara", + "Garay", + "Geor", + "Georgian", + "Glag", + "Glagolitic", + "Gong", + "Gonm", + "Goth", + "Gothic", + "Gran", + "Grantha", + "Greek", + "Grek", + "Gujarati", + "Gujr", + "Gukh", + "Gunjala_Gondi", + "Gurmukhi", + "Guru", + "Gurung_Khema", + "Han", + "Hang", + "Hangul", + "Hani", + "Hanifi_Rohingya", + "Hano", + "Hanunoo", + "Hatr", + "Hatran", + "Hebr", + "Hebrew", + "Hira", + "Hiragana", + "Hluw", + "Hmng", + "Hmnp", + "Hrkt", + "Hung", + "Imperial_Aramaic", + "Inherited", + "Inscriptional_Pahlavi", + "Inscriptional_Parthian", + "Ital", + "Java", + "Javanese", + "Kaithi", + "Kali", + "Kana", + "Kannada", + "Katakana", + "Katakana_Or_Hiragana", + "Kawi", + "Kayah_Li", + "Khar", + "Kharoshthi", + "Khitan_Small_Script", + "Khmer", + "Khmr", + "Khoj", + "Khojki", + "Khudawadi", + "Kirat_Rai", + "Kits", + "Knda", + "Krai", + "Kthi", + "Lana", + "Lao", + "Laoo", + "Latin", + "Latn", + "Lepc", + "Lepcha", + "Limb", + "Limbu", + "Lina", + "Linb", + "Linear_A", + "Linear_B", + "Lisu", + "Lyci", + "Lycian", + "Lydi", + "Lydian", + "Mahajani", + "Mahj", + "Maka", + "Makasar", + "Malayalam", + "Mand", + "Mandaic", + "Mani", + "Manichaean", + "Marc", + "Marchen", + "Masaram_Gondi", + "Medefaidrin", + "Medf", + "Meetei_Mayek", + "Mend", + "Mende_Kikakui", + "Merc", + "Mero", + "Meroitic_Cursive", + "Meroitic_Hieroglyphs", + "Miao", + "Mlym", + "Modi", + "Mong", + "Mongolian", + "Mro", + "Mroo", + "Mtei", + "Mult", + "Multani", + "Myanmar", + "Mymr", + "Nabataean", + "Nag_Mundari", + "Nagm", + "Nand", + "Nandinagari", + "Narb", + "Nbat", + "New_Tai_Lue", + "Newa", + "Nko", + "Nkoo", + "Nshu", + "Nushu", + "Nyiakeng_Puachue_Hmong", + "Ogam", + "Ogham", + "Ol_Chiki", + "Ol_Onal", + "Olck", + "Old_Hungarian", + "Old_Italic", + "Old_North_Arabian", + "Old_Permic", + "Old_Persian", + "Old_Sogdian", + "Old_South_Arabian", + "Old_Turkic", + "Old_Uyghur", + "Onao", + "Oriya", + "Orkh", + "Orya", + "Osage", + "Osge", + "Osma", + "Osmanya", + "Ougr", + "Pahawh_Hmong", + "Palm", + "Palmyrene", + "Pau_Cin_Hau", + "Pauc", + "Perm", + "Phag", + "Phags_Pa", + "Phli", + "Phlp", + "Phnx", + "Phoenician", + "Plrd", + "Prti", + "Psalter_Pahlavi", + "Qaac", + "Qaai", + "Rejang", + "Rjng", + "Rohg", + "Runic", + "Runr", + "Samaritan", + "Samr", + "Sarb", + "Saur", + "Saurashtra", + "Sgnw", + "Sharada", + "Shavian", + "Shaw", + "Shrd", + "Sidd", + "Siddham", + "Sidetic", + "Sidt", + "SignWriting", + "Sind", + "Sinh", + "Sinhala", + "Sogd", + "Sogdian", + "Sogo", + "Sora", + "Sora_Sompeng", + "Soyo", + "Soyombo", + "Sund", + "Sundanese", + "Sunu", + "Sunuwar", + "Sylo", + "Syloti_Nagri", + "Syrc", + "Syriac", + "Tagalog", + "Tagb", + "Tagbanwa", + "Tai_Le", + "Tai_Tham", + "Tai_Viet", + "Tai_Yo", + "Takr", + "Takri", + "Tale", + "Talu", + "Tamil", + "Taml", + "Tang", + "Tangsa", + "Tangut", + "Tavt", + "Tayo", + "Telu", + "Telugu", + "Tfng", + "Tglg", + "Thaa", + "Thaana", + "Thai", + "Tibetan", + "Tibt", + "Tifinagh", + "Tirh", + "Tirhuta", + "Tnsa", + "Todhri", + "Todr", + "Tolong_Siki", + "Tols", + "Toto", + "Tulu_Tigalari", + "Tutg", + "Ugar", + "Ugaritic", + "Unknown", + "Vai", + "Vaii", + "Vith", + "Vithkuqi", + "Wancho", + "Wara", + "Warang_Citi", + "Wcho", + "Xpeo", + "Xsux", + "Yezi", + "Yezidi", + "Yi", + "Yiii", + "Zanabazar_Square", + "Zanb", + "Zinh", + "Zyyy", + "Zzzz"}}; + +// Every table above is sorted so that a lookup does not walk it end to end +template +auto is_listed_property(const std::array &table, + const std::string_view name) -> bool { + return std::ranges::binary_search(table, name); +} + +} // namespace + +} // namespace sourcemeta::core + +#endif diff --git a/vendor/core/src/core/regex/include/sourcemeta/core/regex.h b/vendor/core/src/core/regex/include/sourcemeta/core/regex.h index 9fd243066..4b0de5570 100644 --- a/vendor/core/src/core/regex/include/sourcemeta/core/regex.h +++ b/vendor/core/src/core/regex/include/sourcemeta/core/regex.h @@ -172,17 +172,45 @@ auto replace_all(const Regex ®ex, const std::string_view subject, /// @ingroup regex /// -/// Check whether the given string is a valid ECMA-262 regular expression. For -/// example: +/// Check whether the given string is a valid ECMA-262 regular expression. +/// +/// The pattern is read against the grammar of ECMA-262, including its early +/// errors, rather than handed to the underlying engine, so the answer follows +/// the standard instead of whatever a particular engine happens to accept. A +/// pattern is accepted when it parses under either of the two Unicode-aware +/// readings of the standard, meaning the one that JavaScript selects with the +/// `u` flag or the one it selects with the `v` flag. The latter is what makes +/// set notation, such as nested classes, set operations and string +/// disjunctions, come out valid. +/// +/// The legacy reading of Annex B, which JavaScript selects when no flag is +/// given, is deliberately not accepted. That reading treats a great deal of +/// otherwise malformed input as literal text, so a pattern written for another +/// flavour would pass without meaning what its author intended. The official +/// JSON Schema test suite agrees, as it requires an alarm escape to be +/// rejected even though the legacy reading accepts it as a literal. +/// +/// In practice this means that a syntax character standing on its own, such as +/// an unescaped brace or closing bracket, makes a pattern invalid, and that +/// property escapes only resolve against the property names and values that +/// the standard permits. For example: /// /// ```cpp /// #include /// #include /// /// assert(sourcemeta::core::is_regex_ecma("([abc])+\\s+$")); +/// assert(sourcemeta::core::is_regex_ecma("\\p{gc=Lu}")); +/// assert(sourcemeta::core::is_regex_ecma("[[a-z]--[aeiou]]")); /// assert(!sourcemeta::core::is_regex_ecma("^(abc]")); /// assert(!sourcemeta::core::is_regex_ecma("\\a")); +/// assert(!sourcemeta::core::is_regex_ecma("^{.*}$")); /// ``` +/// +/// Note that a pattern being valid does not mean this project can compile it, +/// as the standard places no bound on how much a quantifier may repeat while +/// the underlying engine does. Use `to_regex` to find out whether a pattern +/// can also be matched with. SOURCEMETA_CORE_REGEX_EXPORT auto is_regex_ecma(const std::string_view pattern) -> bool; diff --git a/vendor/core/src/core/regex/permissive.h b/vendor/core/src/core/regex/permissive.h index 8273beeba..4b395298c 100644 --- a/vendor/core/src/core/regex/permissive.h +++ b/vendor/core/src/core/regex/permissive.h @@ -15,7 +15,7 @@ namespace sourcemeta::core { namespace { -constexpr std::array, 42> +constexpr std::array, 47> UNICODE_PROPERTY_MAP{{{"digit", "Nd"}, {"Decimal_Number", "Nd"}, {"space", "White_Space"}, @@ -24,18 +24,21 @@ constexpr std::array, 42> {"Hex_Digit", "Hex_Digit"}, {"Alphabetic", "Alphabetic"}, {"Letter", "L"}, + {"Cased_Letter", "LC"}, {"Uppercase_Letter", "Lu"}, {"Lowercase_Letter", "Ll"}, {"Titlecase_Letter", "Lt"}, {"Modifier_Letter", "Lm"}, {"Other_Letter", "Lo"}, {"Mark", "M"}, + {"Combining_Mark", "M"}, {"Nonspacing_Mark", "Mn"}, {"Spacing_Mark", "Mc"}, {"Enclosing_Mark", "Me"}, {"Number", "N"}, {"Letter_Number", "Nl"}, {"Other_Number", "No"}, + {"punct", "P"}, {"Punctuation", "P"}, {"Connector_Punctuation", "Pc"}, {"Dash_Punctuation", "Pd"}, @@ -54,10 +57,15 @@ constexpr std::array, 42> {"Line_Separator", "Zl"}, {"Paragraph_Separator", "Zp"}, {"Other", "C"}, + {"cntrl", "Cc"}, {"Control", "Cc"}, {"Format", "Cf"}, {"Unassigned", "Cn"}, - {"Private_Use", "Co"}}}; + {"Private_Use", "Co"}, + {"Surrogate", "Cs"}}}; + +constexpr std::array GENERAL_CATEGORY_PREFIXES{ + {"General_Category=", "gc="}}; constexpr std::string_view SHORTHAND_CHARS{"dDwWsS"}; constexpr std::string_view SIMPLE_ESCAPES{"btnrfv0"}; @@ -577,15 +585,37 @@ inline auto expand_char_class(const std::string &content) return result.none() ? "(?!)" : bitset_to_class(result); } +inline auto property_class(const std::string_view name, const bool negated) + -> std::string { + return std::string("\\") + (negated ? 'P' : 'p') + '{' + std::string{name} + + '}'; +} + inline auto translate_property(const std::string_view name, const bool negated) -> std::optional { + // ECMA-262 resolves a lone property value against the general category + // before anything else, so naming that property outright means the same as + // giving the value on its own + auto value{name}; + bool general_category{false}; + for (const auto prefix : GENERAL_CATEGORY_PREFIXES) { + if (value.starts_with(prefix)) { + value.remove_prefix(prefix.size()); + general_category = true; + break; + } + } + for (const auto &[prop_name, pcre_name] : UNICODE_PROPERTY_MAP) { - if (name == prop_name) { - return std::string("\\") + (negated ? 'P' : 'p') + '{' + - std::string(pcre_name) + '}'; + if (value == prop_name) { + return property_class(pcre_name, negated); } } + if (general_category) { + return property_class(value, negated); + } + return std::nullopt; } diff --git a/vendor/core/src/core/regex/regex.cc b/vendor/core/src/core/regex/regex.cc index c5b505def..eb1d3b0dd 100644 --- a/vendor/core/src/core/regex/regex.cc +++ b/vendor/core/src/core/regex/regex.cc @@ -3,6 +3,7 @@ #include +#include "ecma262.h" #include "iregexp.h" #include "permissive.h" @@ -37,60 +38,6 @@ auto compile_pcre2(const std::string &pattern, const std::uint32_t options) return RegexTypePCRE2{std::shared_ptr(pcre2_regex)}; } -auto compiles_with_ecma_options(const std::string &pattern) -> bool { - int pcre2_error_code{0}; - PCRE2_SIZE pcre2_error_offset{0}; - pcre2_code *pcre2_regex_raw{pcre2_compile( - reinterpret_cast(pattern.c_str()), pattern.size(), - // Capturing groups are kept enabled so that ECMA-262 numbered - // backreferences like (a)\1 compile and match, at a small tracking cost - PCRE2_UTF | PCRE2_UCP | PCRE2_DOTALL | PCRE2_DOLLAR_ENDONLY | - PCRE2_NEVER_BACKSLASH_C | PCRE2_MATCH_INVALID_UTF | - PCRE2_ALLOW_EMPTY_CLASS, - &pcre2_error_code, &pcre2_error_offset, nullptr)}; - - if (pcre2_regex_raw == nullptr) { - return false; - } - - pcre2_code_free(pcre2_regex_raw); - return true; -} - -auto lookbehinds_as_lookaheads(const std::string &pattern) -> std::string { - std::string result; - result.reserve(pattern.size()); - bool in_class{false}; - for (std::size_t position = 0; position < pattern.size(); ++position) { - const char current{pattern[position]}; - if (current == '\\' && position + 1 < pattern.size()) { - result += current; - result += pattern[position + 1]; - position += 1; - continue; - } - - if (current == '[') { - in_class = true; - } else if (current == ']') { - in_class = false; - } - - if (!in_class && current == '(' && position + 3 < pattern.size() && - pattern[position + 1] == '?' && pattern[position + 2] == '<' && - (pattern[position + 3] == '=' || pattern[position + 3] == '!')) { - result += "(?"; - result += pattern[position + 3]; - position += 3; - continue; - } - - result += current; - } - - return result; -} - } // namespace auto to_regex(const std::string_view pattern, const RegexDialect dialect, @@ -266,23 +213,7 @@ auto matches_if_valid(const std::string_view pattern, } auto is_regex_ecma(const std::string_view pattern) -> bool { - const auto translated{translate_permissive(std::string{pattern})}; - if (!translated.ecma_valid || !translated.transformed.has_value()) { - return false; - } - - if (compiles_with_ecma_options(translated.transformed.value())) { - return true; - } - - // ECMA-262 places no width restriction on lookbehind assertions, while - // PCRE2 only accepts lookbehinds whose maximum width is bounded. As - // lookbehind and lookahead bodies follow the same grammar, the syntax - // check is retried with every lookbehind turned into a lookahead - const auto rewritten{ - lookbehinds_as_lookaheads(translated.transformed.value())}; - return rewritten != translated.transformed.value() && - compiles_with_ecma_options(rewritten); + return is_ecma262_pattern(pattern); } } // namespace sourcemeta::core diff --git a/vendor/core/src/core/semver/include/sourcemeta/core/semver.h b/vendor/core/src/core/semver/include/sourcemeta/core/semver.h index 5722d63d5..842371854 100644 --- a/vendor/core/src/core/semver/include/sourcemeta/core/semver.h +++ b/vendor/core/src/core/semver/include/sourcemeta/core/semver.h @@ -128,12 +128,13 @@ class SOURCEMETA_CORE_SEMVER_EXPORT SemVer { std::uint64_t minor_{0}; std::uint64_t patch_{0}; #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif std::string_view pre_release_; std::string_view build_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/semver/include/sourcemeta/core/semver_error.h b/vendor/core/src/core/semver/include/sourcemeta/core/semver_error.h index 51befa9df..67117a9fe 100644 --- a/vendor/core/src/core/semver/include/sourcemeta/core/semver_error.h +++ b/vendor/core/src/core/semver/include/sourcemeta/core/semver_error.h @@ -11,6 +11,7 @@ namespace sourcemeta::core { #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -54,7 +55,7 @@ class SOURCEMETA_CORE_SEMVER_EXPORT SemVerOverflowError }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/core/unicode/CMakeLists.txt b/vendor/core/src/core/unicode/CMakeLists.txt index 0b781358a..c5d42a161 100644 --- a/vendor/core/src/core/unicode/CMakeLists.txt +++ b/vendor/core/src/core/unicode/CMakeLists.txt @@ -26,6 +26,7 @@ add_custom_command( "${SOURCEMETA_CORE_UNICODE_UCD_DIR}/DerivedNormalizationProps.txt" "${SOURCEMETA_CORE_UNICODE_UCD_DIR}/UnicodeData.txt" "${SOURCEMETA_CORE_UNICODE_UCD_DIR}/CompositionExclusions.txt" + "${SOURCEMETA_CORE_UNICODE_UCD_DIR}/DerivedCoreProperties.txt" DEPENDS "${SOURCEMETA_CORE_UNICODE_CODEGEN_TARGET}" "${SOURCEMETA_CORE_UNICODE_UCD_DIR}/PropertyValueAliases.txt" @@ -37,6 +38,7 @@ add_custom_command( "${SOURCEMETA_CORE_UNICODE_UCD_DIR}/DerivedNormalizationProps.txt" "${SOURCEMETA_CORE_UNICODE_UCD_DIR}/UnicodeData.txt" "${SOURCEMETA_CORE_UNICODE_UCD_DIR}/CompositionExclusions.txt" + "${SOURCEMETA_CORE_UNICODE_UCD_DIR}/DerivedCoreProperties.txt" COMMENT "Generating Unicode property tables" VERBATIM) diff --git a/vendor/core/src/core/unicode/codegen.cc b/vendor/core/src/core/unicode/codegen.cc index 92611b2a9..86e4b2ad6 100644 --- a/vendor/core/src/core/unicode/codegen.cc +++ b/vendor/core/src/core/unicode/codegen.cc @@ -507,14 +507,15 @@ auto main(const int argc, const char *const argv[]) -> int { sourcemeta::core::Options app; app.parse(argc, argv); const auto &positional{app.positional()}; - if (positional.size() != 10) { + if (positional.size() != 11) { std::cerr << "Usage: " << (argc > 0 ? argv[0] : "codegen") << " " " " " " " " - " \n"; + " " + " \n"; return EXIT_FAILURE; } @@ -523,6 +524,7 @@ auto main(const int argc, const char *const argv[]) -> int { const std::filesystem::path normalization_props_path{positional.at(7)}; const std::filesystem::path unicode_data_path{positional.at(8)}; const std::filesystem::path composition_exclusions_path{positional.at(9)}; + const std::filesystem::path core_properties_path{positional.at(10)}; const auto canonical_value{ [](const std::span order) { @@ -561,6 +563,9 @@ auto main(const int argc, const char *const argv[]) -> int { })}; const auto nfc_quick_check_map{build_alias_map( aliases_path, "NFC_QC", canonical_value(NFC_QUICK_CHECK_ORDER))}; + // A file of derived core properties names the property but carries no + // value of its own, so every listed range simply belongs to it + const ValueMap membership_map{{"", std::uint8_t{1}}}; struct PropertySpec { std::string_view prefix; @@ -569,7 +574,7 @@ auto main(const int argc, const char *const argv[]) -> int { const ValueMap &value_map; }; - const std::array properties{ + const std::array properties{ {{.prefix = "COMBINING_CLASS", .input_path = positional.at(2), .property_filter = std::nullopt, @@ -593,7 +598,15 @@ auto main(const int argc, const char *const argv[]) -> int { {.prefix = "NFC_QUICK_CHECK", .input_path = normalization_props_path, .property_filter = std::optional{"NFC_QC"}, - .value_map = nfc_quick_check_map}}}; + .value_map = nfc_quick_check_map}, + {.prefix = "IS_ID_START", + .input_path = core_properties_path, + .property_filter = std::optional{"ID_Start"}, + .value_map = membership_map}, + {.prefix = "IS_ID_CONTINUE", + .input_path = core_properties_path, + .property_filter = std::optional{"ID_Continue"}, + .value_map = membership_map}}}; const auto unicode_data{parse_unicode_data(unicode_data_path)}; const auto full_exclusions{ diff --git a/vendor/core/src/core/unicode/include/sourcemeta/core/unicode.h b/vendor/core/src/core/unicode/include/sourcemeta/core/unicode.h index c130f555b..75a528e80 100644 --- a/vendor/core/src/core/unicode/include/sourcemeta/core/unicode.h +++ b/vendor/core/src/core/unicode/include/sourcemeta/core/unicode.h @@ -604,6 +604,38 @@ auto script(const char32_t codepoint) noexcept -> UnicodeScript; SOURCEMETA_CORE_UNICODE_EXPORT auto is_combining_mark(const char32_t codepoint) noexcept -> bool; +/// @ingroup unicode +/// Determine whether a Unicode codepoint may open an identifier per UAX #31. +/// See https://www.unicode.org/reports/tr31/ for the property's definition. +/// For example: +/// +/// ```cpp +/// #include +/// #include +/// +/// assert(sourcemeta::core::is_id_start(U'A')); +/// assert(sourcemeta::core::is_id_start(U'\u00E9')); +/// assert(!sourcemeta::core::is_id_start(U'1')); +/// ``` +SOURCEMETA_CORE_UNICODE_EXPORT +auto is_id_start(const char32_t codepoint) noexcept -> bool; + +/// @ingroup unicode +/// Determine whether a Unicode codepoint may continue an identifier per +/// UAX #31. See https://www.unicode.org/reports/tr31/ for the property's +/// definition. For example: +/// +/// ```cpp +/// #include +/// #include +/// +/// assert(sourcemeta::core::is_id_continue(U'A')); +/// assert(sourcemeta::core::is_id_continue(U'1')); +/// assert(!sourcemeta::core::is_id_continue(U'-')); +/// ``` +SOURCEMETA_CORE_UNICODE_EXPORT +auto is_id_continue(const char32_t codepoint) noexcept -> bool; + /// @ingroup unicode /// Return the NFC quick-check property of a Unicode codepoint per UAX #15. /// See https://www.unicode.org/reports/tr15/ for the property's definition. diff --git a/vendor/core/src/core/unicode/unicode.cc b/vendor/core/src/core/unicode/unicode.cc index 891bb6691..d22d2cb19 100644 --- a/vendor/core/src/core/unicode/unicode.cc +++ b/vendor/core/src/core/unicode/unicode.cc @@ -374,6 +374,22 @@ auto is_combining_mark(const char32_t codepoint) noexcept -> bool { return IS_COMBINING_MARK_STAGE2[(page << 10U) | (codepoint & 0x3FFU)] != 0; } +auto is_id_start(const char32_t codepoint) noexcept -> bool { + if (codepoint > 0x10FFFF) { + return false; + } + const std::size_t page{IS_ID_START_STAGE1[codepoint >> 10U]}; + return IS_ID_START_STAGE2[(page << 10U) | (codepoint & 0x3FFU)] != 0; +} + +auto is_id_continue(const char32_t codepoint) noexcept -> bool { + if (codepoint > 0x10FFFF) { + return false; + } + const std::size_t page{IS_ID_CONTINUE_STAGE1[codepoint >> 10U]}; + return IS_ID_CONTINUE_STAGE2[(page << 10U) | (codepoint & 0x3FFU)] != 0; +} + auto nfc_quick_check(const char32_t codepoint) noexcept -> NFCQuickCheck { if (codepoint > 0x10FFFF) { return NFCQuickCheck::Yes; diff --git a/vendor/core/src/core/uri/include/sourcemeta/core/uri.h b/vendor/core/src/core/uri/include/sourcemeta/core/uri.h index 91b557025..df5498358 100644 --- a/vendor/core/src/core/uri/include/sourcemeta/core/uri.h +++ b/vendor/core/src/core/uri/include/sourcemeta/core/uri.h @@ -520,13 +520,14 @@ class SOURCEMETA_CORE_URI_EXPORT URI { private: #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif std::string_view raw_{}; std::size_t pair_start_{std::string_view::npos}; value_type current_{}; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; @@ -538,11 +539,12 @@ class SOURCEMETA_CORE_URI_EXPORT URI { private: #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif std::string_view raw_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; @@ -1163,6 +1165,7 @@ class SOURCEMETA_CORE_URI_EXPORT URI { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif std::optional path_{}; @@ -1177,7 +1180,7 @@ class SOURCEMETA_CORE_URI_EXPORT URI { // (RFC 3986) bool iri_{false}; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/uri/include/sourcemeta/core/uri_error.h b/vendor/core/src/core/uri/include/sourcemeta/core/uri_error.h index dacbae9ce..4d79c5a34 100644 --- a/vendor/core/src/core/uri/include/sourcemeta/core/uri_error.h +++ b/vendor/core/src/core/uri/include/sourcemeta/core/uri_error.h @@ -16,6 +16,7 @@ namespace sourcemeta::core { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -58,7 +59,7 @@ class SOURCEMETA_CORE_URI_EXPORT URIError : public std::exception { }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate.h b/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate.h index 9f60952ad..7bf185c46 100644 --- a/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate.h +++ b/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate.h @@ -152,11 +152,12 @@ class SOURCEMETA_CORE_URITEMPLATE_EXPORT URITemplate { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif std::vector tokens_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate_error.h b/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate_error.h index e9bdd6c6c..9ac0e75c3 100644 --- a/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate_error.h +++ b/vendor/core/src/core/uritemplate/include/sourcemeta/core/uritemplate_error.h @@ -19,6 +19,7 @@ namespace sourcemeta::core { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -199,7 +200,7 @@ class SOURCEMETA_CORE_URITEMPLATE_EXPORT URITemplateRouterReadError }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/core/yaml/include/sourcemeta/core/yaml_error.h b/vendor/core/src/core/yaml/include/sourcemeta/core/yaml_error.h index 07f01fac9..fff9a8011 100644 --- a/vendor/core/src/core/yaml/include/sourcemeta/core/yaml_error.h +++ b/vendor/core/src/core/yaml/include/sourcemeta/core/yaml_error.h @@ -18,6 +18,7 @@ namespace sourcemeta::core { // safe // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -153,7 +154,7 @@ class SOURCEMETA_CORE_YAML_EXPORT YAMLDuplicateKeyError }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/core/yaml/include/sourcemeta/core/yaml_roundtrip.h b/vendor/core/src/core/yaml/include/sourcemeta/core/yaml_roundtrip.h index d3ea4d051..9a655dfa1 100644 --- a/vendor/core/src/core/yaml/include/sourcemeta/core/yaml_roundtrip.h +++ b/vendor/core/src/core/yaml/include/sourcemeta/core/yaml_roundtrip.h @@ -20,6 +20,7 @@ namespace sourcemeta::core { // safe // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -122,7 +123,7 @@ class SOURCEMETA_CORE_YAML_EXPORT YAMLRoundTrip { }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/lang/io/include/sourcemeta/core/io_bytestream.h b/vendor/core/src/lang/io/include/sourcemeta/core/io_bytestream.h index 065a8f133..f00235a0c 100644 --- a/vendor/core/src/lang/io/include/sourcemeta/core/io_bytestream.h +++ b/vendor/core/src/lang/io/include/sourcemeta/core/io_bytestream.h @@ -20,6 +20,7 @@ namespace sourcemeta::core { // (LNK2005). // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -59,7 +60,7 @@ class OutputByteStream : public std::ostringstream { }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/lang/io/include/sourcemeta/core/io_error.h b/vendor/core/src/lang/io/include/sourcemeta/core/io_error.h index f826241e3..6fc243e02 100644 --- a/vendor/core/src/lang/io/include/sourcemeta/core/io_error.h +++ b/vendor/core/src/lang/io/include/sourcemeta/core/io_error.h @@ -17,6 +17,7 @@ namespace sourcemeta::core { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -167,7 +168,7 @@ class SOURCEMETA_CORE_IO_EXPORT IOStreamWriteError : public std::exception { }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/lang/io/include/sourcemeta/core/io_temporary.h b/vendor/core/src/lang/io/include/sourcemeta/core/io_temporary.h index 311151b82..cf7788349 100644 --- a/vendor/core/src/lang/io/include/sourcemeta/core/io_temporary.h +++ b/vendor/core/src/lang/io/include/sourcemeta/core/io_temporary.h @@ -42,11 +42,12 @@ class SOURCEMETA_CORE_IO_EXPORT TemporaryDirectory { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251) #endif std::filesystem::path path_; #if defined(_MSC_VER) -#pragma warning(default : 4251) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/lang/numeric/include/sourcemeta/core/numeric_error.h b/vendor/core/src/lang/numeric/include/sourcemeta/core/numeric_error.h index 9e1691ef5..63cd02ad2 100644 --- a/vendor/core/src/lang/numeric/include/sourcemeta/core/numeric_error.h +++ b/vendor/core/src/lang/numeric/include/sourcemeta/core/numeric_error.h @@ -14,6 +14,7 @@ namespace sourcemeta::core { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -77,7 +78,7 @@ class SOURCEMETA_CORE_NUMERIC_EXPORT NumericOutOfMemoryError }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/lang/options/include/sourcemeta/core/options.h b/vendor/core/src/lang/options/include/sourcemeta/core/options.h index 929d9b6d1..75ddf8b67 100644 --- a/vendor/core/src/lang/options/include/sourcemeta/core/options.h +++ b/vendor/core/src/lang/options/include/sourcemeta/core/options.h @@ -108,6 +108,7 @@ class SOURCEMETA_CORE_OPTIONS_EXPORT Options { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif static constexpr std::string_view POSITIONAL_ARGUMENT_NAME{""}; @@ -118,7 +119,7 @@ class SOURCEMETA_CORE_OPTIONS_EXPORT Options { std::unordered_map> options_; std::unordered_set flags_; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif }; diff --git a/vendor/core/src/lang/options/include/sourcemeta/core/options_error.h b/vendor/core/src/lang/options/include/sourcemeta/core/options_error.h index 94c2b449e..d6e832a0d 100644 --- a/vendor/core/src/lang/options/include/sourcemeta/core/options_error.h +++ b/vendor/core/src/lang/options/include/sourcemeta/core/options_error.h @@ -15,6 +15,7 @@ namespace sourcemeta::core { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -85,7 +86,7 @@ struct SOURCEMETA_CORE_OPTIONS_EXPORT OptionsMissingOptionValueError }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/lang/process/CMakeLists.txt b/vendor/core/src/lang/process/CMakeLists.txt index 58ea5c1e0..517ba09a5 100644 --- a/vendor/core/src/lang/process/CMakeLists.txt +++ b/vendor/core/src/lang/process/CMakeLists.txt @@ -1,9 +1,16 @@ sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME process - PRIVATE_HEADERS error.h - SOURCES spawn.cc command_line.h) + PRIVATE_HEADERS error.h usage.h + SOURCES spawn.cc usage.cc command_line.h) if(SOURCEMETA_CORE_INSTALL) sourcemeta_library_install(NAMESPACE sourcemeta PROJECT core NAME process) endif() target_link_libraries(sourcemeta_core_process PRIVATE sourcemeta::core::text) +target_link_libraries(sourcemeta_core_process PRIVATE sourcemeta::core::numeric) + +# Matching the condition the sources compile the Windows implementation under, +# so that a MinGW build does not link what it never calls +if(WIN32 AND NOT MINGW) + target_link_libraries(sourcemeta_core_process PRIVATE psapi) +endif() diff --git a/vendor/core/src/lang/process/include/sourcemeta/core/process.h b/vendor/core/src/lang/process/include/sourcemeta/core/process.h index ac7935928..64cf2c8d0 100644 --- a/vendor/core/src/lang/process/include/sourcemeta/core/process.h +++ b/vendor/core/src/lang/process/include/sourcemeta/core/process.h @@ -7,6 +7,7 @@ // NOLINTBEGIN(misc-include-cleaner) #include +#include // NOLINTEND(misc-include-cleaner) #include // std::filesystem diff --git a/vendor/core/src/lang/process/include/sourcemeta/core/process_error.h b/vendor/core/src/lang/process/include/sourcemeta/core/process_error.h index 3f6e50b42..f3ff64de8 100644 --- a/vendor/core/src/lang/process/include/sourcemeta/core/process_error.h +++ b/vendor/core/src/lang/process/include/sourcemeta/core/process_error.h @@ -19,6 +19,7 @@ namespace sourcemeta::core { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -79,7 +80,7 @@ class SOURCEMETA_CORE_PROCESS_EXPORT ProcessSpawnError : public std::exception { }; #if defined(_MSC_VER) -#pragma warning(default : 4251 4275) +#pragma warning(pop) #endif } // namespace sourcemeta::core diff --git a/vendor/core/src/lang/process/include/sourcemeta/core/process_usage.h b/vendor/core/src/lang/process/include/sourcemeta/core/process_usage.h new file mode 100644 index 000000000..2c5103cd6 --- /dev/null +++ b/vendor/core/src/lang/process/include/sourcemeta/core/process_usage.h @@ -0,0 +1,91 @@ +#ifndef SOURCEMETA_CORE_PROCESS_USAGE_H_ +#define SOURCEMETA_CORE_PROCESS_USAGE_H_ + +#ifndef SOURCEMETA_CORE_PROCESS_EXPORT +#include +#endif + +#include // std::chrono::nanoseconds, std::chrono::system_clock +#include // std::uint64_t +#include // std::optional + +namespace sourcemeta::core { + +/// @ingroup process +/// What the running process has consumed so far. +/// +/// Every member carries no value where the platform cannot cheaply answer, so +/// that a caller reports nothing rather than a zero it cannot tell apart from +/// a measurement. +struct ProcessUsage { + /// Combined user and system processor time + std::optional cpu_time{std::nullopt}; + /// Physical memory currently held, in bytes + std::optional resident_bytes{std::nullopt}; + /// Address space currently mapped, in bytes + std::optional virtual_bytes{std::nullopt}; +}; + +/// @ingroup process +/// What the running process currently holds open, and how much it may. +/// +/// Every member carries no value where the platform cannot cheaply answer, so +/// that a caller reports nothing rather than a zero it cannot tell apart from +/// a measurement. +struct ProcessDescriptors { + /// Open file descriptors, or open handles on platforms that count those + std::optional open{std::nullopt}; + /// The ceiling the platform enforces, where there is one and it is finite + std::optional maximum{std::nullopt}; +}; + +/// @ingroup process +/// +/// Read what the running process has consumed so far. For example: +/// +/// ```cpp +/// #include +/// #include +/// #include +/// +/// const auto usage{sourcemeta::core::process_usage()}; +/// assert(usage.cpu_time.value() >= std::chrono::nanoseconds::zero()); +/// ``` +SOURCEMETA_CORE_PROCESS_EXPORT +auto process_usage() noexcept -> ProcessUsage; + +/// @ingroup process +/// +/// Read what the running process currently holds open. This costs a directory +/// scan on some platforms. For example: +/// +/// ```cpp +/// #include +/// #include +/// +/// const auto descriptors{sourcemeta::core::process_descriptors()}; +/// assert(descriptors.open.value() > 0); +/// ``` +SOURCEMETA_CORE_PROCESS_EXPORT +auto process_descriptors() noexcept -> ProcessDescriptors; + +/// @ingroup process +/// +/// Read when the running process began. The answer does not change. For +/// example: +/// +/// ```cpp +/// #include +/// #include +/// #include +/// +/// const auto started{sourcemeta::core::process_start_time()}; +/// assert(started.value() <= std::chrono::system_clock::now()); +/// ``` +SOURCEMETA_CORE_PROCESS_EXPORT +auto process_start_time() noexcept + -> std::optional; + +} // namespace sourcemeta::core + +#endif diff --git a/vendor/core/src/lang/process/usage.cc b/vendor/core/src/lang/process/usage.cc new file mode 100644 index 000000000..e1860930a --- /dev/null +++ b/vendor/core/src/lang/process/usage.cc @@ -0,0 +1,548 @@ +#include + +#include // std::chrono::duration, std::chrono::duration_cast, std::chrono::microseconds, std::chrono::nanoseconds, std::chrono::seconds, std::chrono::system_clock +#include // std::int64_t, std::uint64_t +#include // std::optional + +#if defined(_WIN32) && !defined(__MSYS__) && !defined(__CYGWIN__) && \ + !defined(__MINGW32__) && !defined(__MINGW64__) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOMINMAX +#define NOMINMAX +#endif + +#include // GetCurrentProcess, GetProcessTimes, GetProcessHandleCount, FILETIME, ULARGE_INTEGER, DWORD + +// Declared in terms of what the header above brings in, so it stays in a block +// of its own rather than being sorted ahead of it +#include // GetProcessMemoryInfo, PROCESS_MEMORY_COUNTERS +#elif defined(__APPLE__) +#include // std::size_t +#include // std::malloc, std::free + +#include // proc_pidinfo, proc_bsdinfo, PROC_PIDLISTFDS, PROC_PIDLISTFD_SIZE, PROC_PIDTBSDINFO, PROC_PIDTBSDINFO_SIZE +#include // mach_task_self, task_info, task_info_t, mach_task_basic_info, mach_msg_type_number_t, MACH_TASK_BASIC_INFO, MACH_TASK_BASIC_INFO_COUNT, KERN_SUCCESS +#include // getrusage, getrlimit, rusage, rlimit, RUSAGE_SELF, RLIMIT_NOFILE, RLIM_INFINITY +#include // getpid +#elif defined(__linux__) +#include + +#include // std::array +#include // EINTR, errno +#include // std::size_t +#include // std::string_view + +#include // opendir, readdir, closedir, DIR, dirent +#include // open, O_RDONLY, O_CLOEXEC +#include // getrlimit, rlimit, RLIMIT_NOFILE, RLIM_INFINITY +#include // read, close, sysconf, _SC_CLK_TCK, _SC_PAGESIZE +#endif + +#if defined(_WIN32) && !defined(__MSYS__) && !defined(__CYGWIN__) && \ + !defined(__MINGW32__) && !defined(__MINGW64__) + +namespace { + +// The platform counts time in hundreds of nanoseconds +constexpr double UNITS_PER_SECOND{10000000.0}; +constexpr std::int64_t NANOSECONDS_PER_UNIT{100}; + +// The platform counts from the start of the year 1601, which is this many of +// its own units before the Unix epoch +constexpr std::uint64_t EPOCH_OFFSET_UNITS{11644473600ULL * 10000000ULL}; + +// The class of process information that carries the size of the mapped address +// space, which no documented interface answers with +constexpr ULONG VM_COUNTERS_INFORMATION_CLASS{3}; + +// What that class answers with, mirroring the kernel's VM_COUNTERS. It is +// absent from the public headers, so the layout is spelled out here. Only the +// second member is read, and everything before it has held its place since +// Windows NT +struct VirtualMemoryCounters { + SIZE_T peak_virtual_size; + SIZE_T virtual_size; + ULONG page_fault_count; + SIZE_T peak_working_set_size; + SIZE_T working_set_size; + SIZE_T quota_peak_paged_pool_usage; + SIZE_T quota_paged_pool_usage; + SIZE_T quota_peak_non_paged_pool_usage; + SIZE_T quota_non_paged_pool_usage; + SIZE_T pagefile_usage; + SIZE_T peak_pagefile_usage; +}; + +using QueryProcessInformation = LONG(NTAPI *)(HANDLE, ULONG, PVOID, ULONG, + PULONG); + +auto to_units(const FILETIME &value) noexcept -> std::uint64_t { + ULARGE_INTEGER converted{}; + converted.LowPart = value.dwLowDateTime; + converted.HighPart = value.dwHighDateTime; + return converted.QuadPart; +} + +// Resolved once rather than on every call. Looking a module up takes the +// loader lock, and a reading may be taken on a thread that other work shares. +// The address of an export is fixed for the lifetime of the process, so this +// remembers a constant rather than a measurement +auto query_process_information() noexcept -> QueryProcessInformation { + static const auto entry{reinterpret_cast( + reinterpret_cast(GetProcAddress(GetModuleHandleW(L"ntdll.dll"), + "NtQueryInformationProcess")))}; + return entry; +} + +// The documented memory interface answers with the commit charge, which leaves +// out file backed mappings and reserved regions and so is a different quantity +// from what the other platforms report. This asks the undocumented interface +// that does answer with the mapped address space, and says nothing at all +// where it is unavailable +auto mapped_address_space() noexcept -> std::optional { + const auto entry{query_process_information()}; + if (entry == nullptr) { + return std::nullopt; + } + + VirtualMemoryCounters counters{}; + if (entry(GetCurrentProcess(), VM_COUNTERS_INFORMATION_CLASS, &counters, + static_cast(sizeof(counters)), nullptr) < 0) { + return std::nullopt; + } + + return counters.virtual_size; +} + +} // namespace + +namespace sourcemeta::core { + +auto process_usage() noexcept -> ProcessUsage { + ProcessUsage result; + + FILETIME creation{}; + FILETIME termination{}; + FILETIME kernel{}; + FILETIME user{}; + if (GetProcessTimes(GetCurrentProcess(), &creation, &termination, &kernel, + &user) != 0) { + result.cpu_time = std::chrono::nanoseconds{ + static_cast(to_units(kernel) + to_units(user)) * + NANOSECONDS_PER_UNIT}; + } + + PROCESS_MEMORY_COUNTERS counters{}; + counters.cb = sizeof(counters); + if (GetProcessMemoryInfo(GetCurrentProcess(), &counters, sizeof(counters)) != + 0) { + result.resident_bytes = counters.WorkingSetSize; + } + + result.virtual_bytes = mapped_address_space(); + return result; +} + +auto process_descriptors() noexcept -> ProcessDescriptors { + ProcessDescriptors result; + + DWORD handles{0}; + if (GetProcessHandleCount(GetCurrentProcess(), &handles) != 0) { + result.open = handles; + } + + // The platform enforces no per-process ceiling comparable to the POSIX one, + // so there is nothing true to say about the maximum + return result; +} + +auto process_start_time() noexcept + -> std::optional { + FILETIME creation{}; + FILETIME termination{}; + FILETIME kernel{}; + FILETIME user{}; + if (GetProcessTimes(GetCurrentProcess(), &creation, &termination, &kernel, + &user) == 0) { + return std::nullopt; + } + + const auto units{to_units(creation)}; + if (units < EPOCH_OFFSET_UNITS) { + return std::nullopt; + } + + const std::chrono::duration since_epoch{ + static_cast(units - EPOCH_OFFSET_UNITS) / UNITS_PER_SECOND}; + return std::chrono::system_clock::time_point{ + std::chrono::duration_cast( + since_epoch)}; +} + +} // namespace sourcemeta::core + +#elif defined(__APPLE__) + +namespace { + +auto descriptor_ceiling() noexcept -> std::optional { + rlimit limit{}; + if (getrlimit(RLIMIT_NOFILE, &limit) != 0 || + limit.rlim_cur == RLIM_INFINITY) { + return std::nullopt; + } + + return static_cast(limit.rlim_cur); +} + +} // namespace + +namespace sourcemeta::core { + +auto process_usage() noexcept -> ProcessUsage { + ProcessUsage result; + + rusage consumed{}; + if (getrusage(RUSAGE_SELF, &consumed) == 0) { + result.cpu_time = + std::chrono::seconds{static_cast( + consumed.ru_utime.tv_sec + consumed.ru_stime.tv_sec)} + + std::chrono::microseconds{static_cast( + consumed.ru_utime.tv_usec + consumed.ru_stime.tv_usec)}; + } + + mach_task_basic_info information{}; + mach_msg_type_number_t count{MACH_TASK_BASIC_INFO_COUNT}; + if (task_info(mach_task_self(), MACH_TASK_BASIC_INFO, + reinterpret_cast(&information), + &count) == KERN_SUCCESS) { + result.resident_bytes = information.resident_size; + result.virtual_bytes = information.virtual_size; + } + + return result; +} + +auto process_descriptors() noexcept -> ProcessDescriptors { + ProcessDescriptors result; + + result.maximum = descriptor_ceiling(); + + // Asking for no bytes answers with room for the highest descriptor in use + // plus a margin, which is not a count of what is open, so the listing has to + // be taken and measured by what it actually fills. Taking it opens nothing, + // so there is no entry of its own to discount + const auto capacity{proc_pidinfo(getpid(), PROC_PIDLISTFDS, 0, nullptr, 0)}; + if (capacity <= 0) { + return result; + } + + // The only platform where anything here has to reach for the heap, and it + // is done without the standard containers so that running out of memory + // stays a returned absence rather than an exception this cannot throw + auto *listing{std::malloc(static_cast(capacity))}; + if (listing == nullptr) { + return result; + } + + const auto written{ + proc_pidinfo(getpid(), PROC_PIDLISTFDS, 0, listing, capacity)}; + std::free(listing); + if (written > 0) { + result.open = static_cast(written) / PROC_PIDLISTFD_SIZE; + } + + return result; +} + +auto process_start_time() noexcept + -> std::optional { + proc_bsdinfo information{}; + if (proc_pidinfo(getpid(), PROC_PIDTBSDINFO, 0, &information, + PROC_PIDTBSDINFO_SIZE) != PROC_PIDTBSDINFO_SIZE) { + return std::nullopt; + } + + const std::chrono::duration since_epoch{ + static_cast(information.pbi_start_tvsec) + + static_cast(information.pbi_start_tvusec) / 1000000.0}; + return std::chrono::system_clock::time_point{ + std::chrono::duration_cast( + since_epoch)}; +} + +} // namespace sourcemeta::core + +#elif defined(__linux__) + +namespace { + +// Bounded by what the kernel writes, which is a handful of fields wider than +// the last one anything here reads +constexpr std::size_t STAT_BUFFER_SIZE{1024}; + +// One past the highest index this reads, being the resident set size +constexpr std::size_t STAT_FIELD_COUNT{22}; + +// As wide as an unsigned 64-bit value ever spells out to +constexpr std::size_t DIGIT_BUFFER_SIZE{20}; + +auto read_bounded(const char *path, char *buffer, + const std::size_t size) noexcept + -> std::optional { + const auto descriptor{open(path, O_RDONLY | O_CLOEXEC)}; + if (descriptor < 0) { + return std::nullopt; + } + + std::size_t total{0}; + while (total < size) { + const auto count{read(descriptor, buffer + total, size - total)}; + if (count < 0) { + if (errno == EINTR) { + continue; + } + + close(descriptor); + return std::nullopt; + } + + if (count == 0) { + break; + } + + total += static_cast(count); + } + + close(descriptor); + return std::string_view{buffer, total}; +} + +// The second field is a command name in parentheses that may itself contain +// spaces, so what follows it is found from the last parenthesis rather than by +// counting separators from the beginning. See proc(5) +auto stat_fields(const std::string_view line) noexcept + -> std::array { + std::array result{}; + const auto command{line.rfind(')')}; + if (command == std::string_view::npos) { + return result; + } + + auto cursor{command + 1}; + std::size_t index{0}; + while (cursor < line.size() && index < result.size()) { + while (cursor < line.size() && line[cursor] == ' ') { + cursor += 1; + } + + const auto start{cursor}; + while (cursor < line.size() && line[cursor] != ' ' && + line[cursor] != '\n') { + cursor += 1; + } + + if (cursor == start) { + break; + } + + result[index] = line.substr(start, cursor - start); + index += 1; + } + + return result; +} + +// The file is too wide to hold in a bounded buffer on a machine with many +// interrupt sources, so the boot time is picked out of it as it streams past +auto boot_time_seconds() noexcept -> std::optional { + static constexpr std::string_view PREFIX{"btime "}; + const auto descriptor{open("/proc/stat", O_RDONLY | O_CLOEXEC)}; + if (descriptor < 0) { + return std::nullopt; + } + + std::array buffer{}; + std::array digits{}; + std::size_t length{0}; + std::size_t matched{0}; + bool skipping{false}; + bool collecting{false}; + bool done{false}; + + while (!done) { + const auto count{read(descriptor, buffer.data(), buffer.size())}; + if (count < 0) { + if (errno == EINTR) { + continue; + } + + close(descriptor); + return std::nullopt; + } + + if (count == 0) { + break; + } + + for (std::size_t index = 0; index < static_cast(count); + index++) { + const auto character{buffer[index]}; + if (collecting) { + if (character < '0' || character > '9' || length == digits.size()) { + done = true; + break; + } + + digits[length] = character; + length += 1; + } else if (skipping) { + skipping = character != '\n'; + } else if (character == '\n') { + matched = 0; + } else if (character == PREFIX[matched]) { + matched += 1; + collecting = matched == PREFIX.size(); + } else { + skipping = true; + matched = 0; + } + } + } + + close(descriptor); + if (length == 0) { + return std::nullopt; + } + + return sourcemeta::core::to_uint64_t(std::string_view{digits.data(), length}); +} + +auto descriptor_ceiling() noexcept -> std::optional { + rlimit limit{}; + if (getrlimit(RLIMIT_NOFILE, &limit) != 0 || + limit.rlim_cur == RLIM_INFINITY) { + return std::nullopt; + } + + return static_cast(limit.rlim_cur); +} + +} // namespace + +namespace sourcemeta::core { + +auto process_usage() noexcept -> ProcessUsage { + ProcessUsage result; + + std::array buffer{}; + const auto line{ + read_bounded("/proc/self/stat", buffer.data(), buffer.size())}; + if (!line.has_value()) { + return result; + } + + const auto fields{stat_fields(line.value())}; + + const auto ticks{sysconf(_SC_CLK_TCK)}; + const auto user{to_uint64_t(fields[11])}; + const auto system{to_uint64_t(fields[12])}; + if (ticks > 0 && user.has_value() && system.has_value()) { + // Split rather than scaled whole, so that a rate that does not divide a + // second evenly still converts exactly and nothing overflows on the way + const auto total{static_cast(user.value() + system.value())}; + const auto rate{static_cast(ticks)}; + result.cpu_time = + std::chrono::seconds{total / rate} + + std::chrono::nanoseconds{(total % rate) * 1000000000 / rate}; + } + + result.virtual_bytes = to_uint64_t(fields[20]); + + const auto pages{to_uint64_t(fields[21])}; + const auto page_size{sysconf(_SC_PAGESIZE)}; + if (pages.has_value() && page_size > 0) { + result.resident_bytes = + pages.value() * static_cast(page_size); + } + + return result; +} + +auto process_descriptors() noexcept -> ProcessDescriptors { + ProcessDescriptors result; + + DIR *listing{opendir("/proc/self/fd")}; + if (listing != nullptr) { + std::uint64_t entries{0}; + for (const dirent *entry{readdir(listing)}; entry != nullptr; + entry = readdir(listing)) { + const std::string_view name{entry->d_name}; + if (name != "." && name != "..") { + entries += 1; + } + } + + closedir(listing); + // Reading the list takes a descriptor of its own, which the list then + // includes, so what is counted is one more than what was open + result.open = entries > 0 ? entries - 1 : 0; + } + + result.maximum = descriptor_ceiling(); + return result; +} + +auto process_start_time() noexcept + -> std::optional { + const auto boot{boot_time_seconds()}; + if (!boot.has_value()) { + return std::nullopt; + } + + const auto ticks{sysconf(_SC_CLK_TCK)}; + if (ticks <= 0) { + return std::nullopt; + } + + std::array buffer{}; + const auto line{ + read_bounded("/proc/self/stat", buffer.data(), buffer.size())}; + if (!line.has_value()) { + return std::nullopt; + } + + const auto fields{stat_fields(line.value())}; + const auto started{to_uint64_t(fields[19])}; + if (!started.has_value()) { + return std::nullopt; + } + + const std::chrono::duration since_epoch{ + static_cast(boot.value()) + + static_cast(started.value()) / static_cast(ticks)}; + return std::chrono::system_clock::time_point{ + std::chrono::duration_cast( + since_epoch)}; +} + +} // namespace sourcemeta::core + +#else + +namespace sourcemeta::core { + +auto process_usage() noexcept -> ProcessUsage { return {}; } + +auto process_descriptors() noexcept -> ProcessDescriptors { return {}; } + +auto process_start_time() noexcept + -> std::optional { + return std::nullopt; +} + +} // namespace sourcemeta::core + +#endif diff --git a/vendor/core/src/lang/test/include/sourcemeta/core/test.h b/vendor/core/src/lang/test/include/sourcemeta/core/test.h index d9be4b87d..5f4d98edc 100644 --- a/vendor/core/src/lang/test/include/sourcemeta/core/test.h +++ b/vendor/core/src/lang/test/include/sourcemeta/core/test.h @@ -31,6 +31,7 @@ namespace sourcemeta::core { // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN #if defined(_MSC_VER) +#pragma warning(push) #pragma warning(disable : 4251 4275) #endif @@ -242,6 +243,10 @@ auto test_expect_comparison(std::string_view file, int line, } } +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + } // namespace sourcemeta::core #define SOURCEMETA_CORE_TEST_REGISTER(name) \ diff --git a/vendor/core/vendor/libdeflate/common_defs.h b/vendor/core/vendor/libdeflate/common_defs.h index a0868d44d..80307b90c 100644 --- a/vendor/core/vendor/libdeflate/common_defs.h +++ b/vendor/core/vendor/libdeflate/common_defs.h @@ -159,8 +159,8 @@ typedef size_t machine_word_t; #endif #ifdef _MSC_VER # define MSVC_PREREQ(version) (_MSC_VER >= (version)) -# if !MSVC_PREREQ(1900) -# error "MSVC versions older than Visual Studio 2015 are no longer supported" +# if !MSVC_PREREQ(1928) +# error "MSVC versions older than Visual Studio 2019 v16.8 are no longer supported" # endif #else # define MSVC_PREREQ(version) 0 @@ -212,20 +212,6 @@ typedef size_t machine_word_t; # define NORETURN #endif -/* - * restrict - hint that writes only occur through the given pointer. - * - * Don't use MSVC's __restrict, since it has nonstandard behavior. - * Standard restrict is okay, if it is supported. - */ -#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 201112L) -# if defined(__GNUC__) || defined(__clang__) -# define restrict __restrict__ -# else -# define restrict -# endif -#endif /* else assume 'restrict' is usable as-is */ - /* likely(expr) - hint that an expression is usually true */ #if defined(__GNUC__) || __has_builtin(__builtin_expect) # define likely(expr) __builtin_expect(!!(expr), 1) @@ -402,7 +388,8 @@ static forceinline u64 bswap64(u64 v) */ #if (defined(__GNUC__) || defined(__clang__)) && \ (defined(ARCH_X86_64) || defined(ARCH_X86_32) || \ - defined(__ARM_FEATURE_UNALIGNED) || defined(__powerpc64__) || \ + defined(__ARM_FEATURE_UNALIGNED) || \ + defined(__powerpc64__) || defined(__powerpc__) || defined(__POWERPC__) || \ defined(__riscv_misaligned_fast) || \ /* * For all compilation purposes, WebAssembly behaves like any other CPU diff --git a/vendor/core/vendor/libdeflate/lib/arm/cpu_features.c b/vendor/core/vendor/libdeflate/lib/arm/cpu_features.c index 42f81f5ed..a4008ca94 100644 --- a/vendor/core/vendor/libdeflate/lib/arm/cpu_features.c +++ b/vendor/core/vendor/libdeflate/lib/arm/cpu_features.c @@ -54,6 +54,7 @@ #include #include +#include #include #include @@ -67,7 +68,7 @@ static void scan_auxv(unsigned long *hwcap, unsigned long *hwcap2) int filled = 0; int i; - fd = open("/proc/self/auxv", O_RDONLY); + fd = open("/proc/self/auxv", O_RDONLY | O_CLOEXEC); if (fd < 0) return; @@ -130,6 +131,51 @@ static u32 query_arm_cpu_features(void) return features; } +#ifdef ARCH_ARM64 +/* + * Return whether cpu0's MIDR_EL1 identifies one of the Arm Neoverse + * V-class server cores (V1 / V2 / V3 / V3AE). MIDR_EL1 is exposed + * unprivileged via sysfs (added in Linux 4.7). Reading cpu0 only is fine + * in practice: no Neoverse V-class server SKU has shipped as part of a + * big.LITTLE cluster. Any failure (file missing, read error, parse + * failure, unrecognized CPU) returns false. + */ +static bool arm64_cpu_is_neoverse_v_class(void) +{ + int fd; + char buf[32]; + ssize_t n; + unsigned long midr; + u32 part; + + fd = open("/sys/devices/system/cpu/cpu0/regs/identification/midr_el1", + O_RDONLY | O_CLOEXEC); + if (fd < 0) + return false; + do { + n = read(fd, buf, sizeof(buf) - 1); + } while (n < 0 && errno == EINTR); + close(fd); + if (n <= 0) + return false; + buf[n] = '\0'; + midr = strtoul(buf, NULL, 0); /* sysfs prints "0x%016llx\n" */ + + /* MIDR_EL1: [31:24]=Implementer, [15:4]=PartNum. */ + if (((midr >> 24) & 0xff) != 0x41) /* Implementer must be Arm Ltd. */ + return false; + part = (midr >> 4) & 0xfff; + switch (part) { + case 0xd40: /* Neoverse V1 (e.g. AWS Graviton 3) */ + case 0xd4f: /* Neoverse V2 (e.g. AWS Graviton 4) */ + case 0xd83: /* Neoverse V3AE */ + case 0xd84: /* Neoverse V3 */ + return true; + } + return false; +} +#endif /* ARCH_ARM64 */ + #elif defined(__APPLE__) /* On Apple platforms, arm64 CPU features can be detected via sysctlbyname(). */ @@ -202,24 +248,40 @@ static const struct cpu_feature arm_cpu_feature_table[] = { {ARM_CPU_FEATURE_DOTPROD, "dotprod"}, }; +/* + * Whether to set ARM_CPU_FEATURE_PREFER_PMULL on this CPU. This is the + * right choice on CPUs whose pmull pipes have more aggregate throughput + * than the crc32 unit -- in measured cases by a wide margin: the Apple M + * series sustains ~68 GB/s on pmull vs ~25 GB/s on crc32 (M1), and the Arm + * Neoverse V class sustains ~40 GB/s vs ~22 GB/s (Graviton 4 / V2). + * + * We detect Apple at compile time, and Neoverse V-class cores at runtime + * via MIDR_EL1 on Linux. Elsewhere we leave this unset, and the dispatcher + * picks the crc32-instruction path which is the right default for most + * other modern ARM CPUs. + */ +static bool arm_cpu_prefers_pmull(void) +{ +#if defined(__APPLE__) && TARGET_OS_OSX + return true; +#elif defined(__linux__) && defined(ARCH_ARM64) + if (arm64_cpu_is_neoverse_v_class()) + return true; +#endif +#ifdef TEST_SUPPORT__DO_NOT_USE + return true; +#endif + return false; +} + volatile u32 libdeflate_arm_cpu_features = 0; void libdeflate_init_arm_cpu_features(void) { u32 features = query_arm_cpu_features(); - /* - * On the Apple M1 processor, crc32 instructions max out at about 25.5 - * GB/s in the best case of using a 3-way or greater interleaved chunked - * implementation, whereas a pmull-based implementation achieves 68 GB/s - * provided that the stride length is large enough (about 10+ vectors - * with eor3, or 12+ without). - * - * Assume that crc32 instructions are preferable in other cases. - */ -#if (defined(__APPLE__) && TARGET_OS_OSX) || defined(TEST_SUPPORT__DO_NOT_USE) - features |= ARM_CPU_FEATURE_PREFER_PMULL; -#endif + if (arm_cpu_prefers_pmull()) + features |= ARM_CPU_FEATURE_PREFER_PMULL; disable_cpu_features_for_testing(&features, arm_cpu_feature_table, ARRAY_LEN(arm_cpu_feature_table)); diff --git a/vendor/core/vendor/libdeflate/lib/deflate_compress.c b/vendor/core/vendor/libdeflate/lib/deflate_compress.c index 4a1f32769..b24087c20 100644 --- a/vendor/core/vendor/libdeflate/lib/deflate_compress.c +++ b/vendor/core/vendor/libdeflate/lib/deflate_compress.c @@ -3885,6 +3885,13 @@ libdeflate_alloc_compressor_ex(int compression_level, if (options->sizeof_options != sizeof(*options)) return NULL; + /* + * Note: For similarity with zlib's API, -1 is accepted as an alias for + * the default compression level. + */ + if (compression_level == -1) + compression_level = 6; + if (compression_level < 0 || compression_level > 12) return NULL; diff --git a/vendor/core/vendor/libdeflate/lib/deflate_decompress.c b/vendor/core/vendor/libdeflate/lib/deflate_decompress.c index 63726c7a5..d5af5eb02 100644 --- a/vendor/core/vendor/libdeflate/lib/deflate_decompress.c +++ b/vendor/core/vendor/libdeflate/lib/deflate_decompress.c @@ -1094,18 +1094,18 @@ typedef enum libdeflate_result (*decompress_func_t) #ifdef arch_select_decompress_func static enum libdeflate_result -dispatch_decomp(struct libdeflate_decompressor *d, - const void *in, size_t in_nbytes, - void *out, size_t out_nbytes_avail, +dispatch_decomp(struct libdeflate_decompressor * restrict d, + const void * restrict in, size_t in_nbytes, + void * restrict out, size_t out_nbytes_avail, size_t *actual_in_nbytes_ret, size_t *actual_out_nbytes_ret); static volatile decompress_func_t decompress_impl = dispatch_decomp; /* Choose the best implementation at runtime. */ static enum libdeflate_result -dispatch_decomp(struct libdeflate_decompressor *d, - const void *in, size_t in_nbytes, - void *out, size_t out_nbytes_avail, +dispatch_decomp(struct libdeflate_decompressor * restrict d, + const void * restrict in, size_t in_nbytes, + void * restrict out, size_t out_nbytes_avail, size_t *actual_in_nbytes_ret, size_t *actual_out_nbytes_ret) { decompress_func_t f = arch_select_decompress_func(); diff --git a/vendor/core/vendor/libdeflate/lib/x86/adler32_impl.h b/vendor/core/vendor/libdeflate/lib/x86/adler32_impl.h index 74c7b312b..f1102b5e1 100644 --- a/vendor/core/vendor/libdeflate/lib/x86/adler32_impl.h +++ b/vendor/core/vendor/libdeflate/lib/x86/adler32_impl.h @@ -72,6 +72,7 @@ #endif #if (GCC_PREREQ(8, 1) || CLANG_PREREQ(6, 0, 10000000) || MSVC_PREREQ(1920)) && \ + !(CLANG_PREREQ(18, 0, 18000000) && !CLANG_PREREQ(19, 0, 19000000)) && \ !defined(LIBDEFLATE_ASSEMBLER_DOES_NOT_SUPPORT_AVX512VNNI) /* * AVX512VNNI implementation using 256-bit vectors. This is very similar to the diff --git a/vendor/core/vendor/libdeflate/lib/x86/crc32_impl.h b/vendor/core/vendor/libdeflate/lib/x86/crc32_impl.h index 50ea52bb2..4fbdef7eb 100644 --- a/vendor/core/vendor/libdeflate/lib/x86/crc32_impl.h +++ b/vendor/core/vendor/libdeflate/lib/x86/crc32_impl.h @@ -92,6 +92,7 @@ static const u8 MAYBE_UNUSED shift_tab[48] = { #endif #if (GCC_PREREQ(10, 1) || CLANG_PREREQ(6, 0, 10000000) || MSVC_PREREQ(1920)) && \ + !(CLANG_PREREQ(18, 0, 18000000) && !CLANG_PREREQ(19, 0, 19000000)) && \ !defined(LIBDEFLATE_ASSEMBLER_DOES_NOT_SUPPORT_VPCLMULQDQ) /* * VPCLMULQDQ/AVX512 implementation using 256-bit vectors. This is very similar diff --git a/vendor/core/vendor/libdeflate/libdeflate.h b/vendor/core/vendor/libdeflate/libdeflate.h index d6c885f23..1821acda8 100644 --- a/vendor/core/vendor/libdeflate/libdeflate.h +++ b/vendor/core/vendor/libdeflate/libdeflate.h @@ -13,8 +13,8 @@ extern "C" { #endif #define LIBDEFLATE_VERSION_MAJOR 1 -#define LIBDEFLATE_VERSION_MINOR 25 -#define LIBDEFLATE_VERSION_STRING "1.25" +#define LIBDEFLATE_VERSION_MINOR 26 +#define LIBDEFLATE_VERSION_STRING "1.26" /* * Users of libdeflate.dll on Windows can define LIBDEFLATE_DLL to cause @@ -43,10 +43,11 @@ struct libdeflate_options; * level on a zlib-like scale but with a higher maximum value (1 = fastest, 6 = * medium/default, 9 = slow, 12 = slowest). Level 0 is also supported and means * "no compression", specifically "create a valid stream, but only emit - * uncompressed blocks" (this will expand the data slightly). + * uncompressed blocks" (this will expand the data slightly). Level -1 is an + * alias indicating a default level of 6. * * The return value is a pointer to the new compressor, or NULL if out of memory - * or if the compression level is invalid (i.e. outside the range [0, 12]). + * or if the compression level is invalid (i.e. outside the range [-1, 12]). * * Note: for compression, the sliding window size is defined at compilation time * to 32768, the largest size permissible in the DEFLATE format. It cannot be diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorPosix.c b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorPosix.c index 36d301434..62f737112 100644 --- a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorPosix.c +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/allocator_src/sljitWXExecAllocatorPosix.c @@ -90,6 +90,9 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size) #ifdef PROT_MAX prot |= PROT_MAX(PROT_READ | PROT_WRITE | PROT_EXEC); #endif +#ifdef PROT_MPROTECT + prot |= PROT_MPROTECT(PROT_EXEC); +#endif size += sizeof(sljit_uw); ptr = (sljit_uw*)mmap(NULL, size, prot, MAP_PRIVATE | MAP_ANON, -1, 0); diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitConfig.h b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitConfig.h index 993f4fe2f..d43e8ae2a 100644 --- a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitConfig.h +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitConfig.h @@ -133,7 +133,7 @@ extern "C" { nonzero value - FPU is present. */ -/* For further configurations, see the beginning of sljitConfigInternal.h */ +/* For further configurations, see sljitConfigCPU.h and sljitConfigInternal.h */ #ifdef __cplusplus } /* extern "C" */ diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitConfigCPU.h b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitConfigCPU.h index dcf88efbd..a0d8d44c9 100644 --- a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitConfigCPU.h +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitConfigCPU.h @@ -46,6 +46,7 @@ /* #define SLJIT_CONFIG_RISCV_64 1 */ /* #define SLJIT_CONFIG_S390X 1 */ /* #define SLJIT_CONFIG_LOONGARCH_64 */ +/* #define SLJIT_CONFIG_ALPHA_64 1 */ /* #define SLJIT_CONFIG_AUTO 1 */ /* #define SLJIT_CONFIG_UNSUPPORTED 1 */ @@ -68,6 +69,7 @@ + (defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) \ + (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \ + (defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) \ + + (defined SLJIT_CONFIG_ALPHA_64 && SLJIT_CONFIG_ALPHA_64) \ + (defined SLJIT_CONFIG_AUTO && SLJIT_CONFIG_AUTO) \ + (defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) >= 2 #error "Multiple architectures are selected" @@ -87,6 +89,7 @@ && !(defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) \ && !(defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \ && !(defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) \ + && !(defined SLJIT_CONFIG_ALPHA_64 && SLJIT_CONFIG_ALPHA_64) \ && !(defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) \ && !(defined SLJIT_CONFIG_AUTO && SLJIT_CONFIG_AUTO) #if defined SLJIT_CONFIG_AUTO && !SLJIT_CONFIG_AUTO @@ -134,6 +137,8 @@ #define SLJIT_CONFIG_LOONGARCH_64 1 #elif defined(__s390x__) #define SLJIT_CONFIG_S390X 1 +#elif defined(__alpha__) +#define SLJIT_CONFIG_ALPHA_64 1 #else /* Unsupported architecture */ #define SLJIT_CONFIG_UNSUPPORTED 1 @@ -183,6 +188,78 @@ #define SLJIT_CONFIG_RISCV 1 #elif (defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) #define SLJIT_CONFIG_LOONGARCH 1 +#elif (defined SLJIT_CONFIG_ALPHA_64 && SLJIT_CONFIG_ALPHA_64) +#define SLJIT_CONFIG_ALPHA 1 +#endif + +/*************************/ +/* Endianness detection. */ +/*************************/ + +#if !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN) + +#if defined(SLJIT_CONFIG_ARM) && SLJIT_CONFIG_ARM + +#ifdef __ARM_BIG_ENDIAN +#define SLJIT_BIG_ENDIAN 1 +#else +#define SLJIT_LITTLE_ENDIAN 1 +#endif + +#elif (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) + +#ifdef __LITTLE_ENDIAN__ +#define SLJIT_LITTLE_ENDIAN 1 +#else +#define SLJIT_BIG_ENDIAN 1 +#endif + +#elif (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) + +#ifdef __MIPSEL__ +#define SLJIT_LITTLE_ENDIAN 1 +#else +#define SLJIT_BIG_ENDIAN 1 +#endif + +#ifndef SLJIT_MIPS_REV + +/* Auto detecting mips revision. */ +#if (defined __mips_isa_rev) && (__mips_isa_rev >= 6) +#define SLJIT_MIPS_REV 6 +#elif defined(__mips_isa_rev) && __mips_isa_rev >= 1 +#define SLJIT_MIPS_REV __mips_isa_rev +#elif defined(__clang__) \ + && (defined(_MIPS_ARCH_OCTEON) || defined(_MIPS_ARCH_P5600)) +/* clang either forgets to define (clang-7) __mips_isa_rev at all + * or sets it to zero (clang-8,-9) for -march=octeon (MIPS64 R2+) + * and -march=p5600 (MIPS32 R5). + * It also sets the __mips macro to 64 or 32 for -mipsN when N <= 5 + * (should be set to N exactly) so we cannot rely on this too. + */ +#define SLJIT_MIPS_REV 1 +#endif + +#endif /* !SLJIT_MIPS_REV */ + +#elif (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) + +#define SLJIT_BIG_ENDIAN 1 + +#else + +#define SLJIT_LITTLE_ENDIAN 1 + +#endif + +#endif /* !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN) */ + +#if (defined(SLJIT_CONFIG_ARM_64) && SLJIT_CONFIG_ARM_64) \ + && (defined(SLJIT_BIG_ENDIAN) && SLJIT_BIG_ENDIAN) + +#undef SLJIT_CONFIG_ARM_64 +#define SLJIT_CONFIG_UNSUPPORTED 1 + #endif #endif /* SLJIT_CONFIG_CPU_H_ */ diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitConfigInternal.h b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitConfigInternal.h index c052434d2..9c222349c 100644 --- a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitConfigInternal.h +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitConfigInternal.h @@ -54,6 +54,14 @@ SLJIT_UPPER_BITS_ZERO_EXTENDED : 32 bit operations clears the upper bits of destination registers SLJIT_UPPER_BITS_SIGN_EXTENDED : 32 bit operations replicates the sign bit in the upper bits of destination registers SLJIT_UPPER_BITS_PRESERVED : 32 bit operations preserves the upper bits of destination registers + SLJIT_SUBC_SETS_SIGNED : SLJIT_SUBC[32] operation always sets the signed result, so setting + the following status flags after a subtract with carry operation is valid: + sljit_set_current_flags(..., SLJIT_CURRENT_FLAGS_SUB | SLJIT_SET_SIG_LESS) + sljit_set_current_flags(..., SLJIT_CURRENT_FLAGS_SUB | SLJIT_SET_SIG_GREATER) + SLJIT_SHARED_COMPARISON_FLAGS: the cpu has different instructions for signed and unsigned + comparisons, which sets the same status flags, so passing SLJIT_LESS + or SLJIT_SIG_LESS as an argument has the same effect, and this is true + for all other signed/unsigned comparison type pairs Constants: SLJIT_NUMBER_OF_REGISTERS : number of available registers @@ -100,18 +108,21 @@ SLJIT_TMP_DEST_REG : a temporary register for results, see the rules below SLJIT_TMP_DEST_FREG : a temporary register for float results, see the rules below SLJIT_TMP_DEST_VREG : a temporary register for vector results, see the rules below - SLJIT_TMP_OPT_REG : a temporary register which might not be defined, see the rules below + SLJIT_TMP_OPT_REG : an optional temporary register, see the rules below + SLJIT_TMP_FLAG_REG : an optional temporary register for storing the value of a flag SLJIT_FUNC : calling convention attribute for both calling JIT from C and C calling back from JIT SLJIT_W(number) : defining 64 bit constants on 64 bit architectures (platform independent helper) SLJIT_F64_SECOND(reg) : provides the register index of the second 32 bit part of a 64 bit floating point register when SLJIT_HAS_F64_AS_F32_PAIR returns non-zero Temporary register rules (e.g. SLJIT_TMP_DEST_REG / SLJIT_TMP_OPT_REG): - Sljit tries to emit instructions without using any temporary registers whenever it is possible. - When a single temporary register is needed, it is always the "OPT" register. When two temporary - registers are needed, both the "DEST" and "OPT" are used. The x86-32 does not define an "OPT" - register, and handles all cases without an "OPT" register which requires an "OPT" register - on other architectures. + The sljit compiler avoids using temporary registers, but certain instruction + forms cannot be generated without them. The number of temporary registers + reserved by the compiler depends on the target architecture. An SLJIT_TMP_* + name is assigned to some of these registers, which represents their + SLJIT_TMP_R(i) index. When such register is optional, it might not be + defined on all architectures. For example, the x86-32 code generator does + not use any optional temporary registers. */ #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \ @@ -124,6 +135,13 @@ #include #endif +#ifdef __APPLE__ +#include +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050 +#include +#endif +#endif + #ifdef __cplusplus extern "C" { #endif @@ -242,10 +260,6 @@ extern "C" { /* Instruction cache flush. */ /****************************/ -#ifdef __APPLE__ -#include -#endif - /* * TODO: * @@ -291,7 +305,6 @@ extern "C" { /* Supported by all macs since Mac OS 10.5. However, it does not work on non-jailbroken iOS devices, although the compilation is successful. */ -#include #define SLJIT_CACHE_FLUSH(from, to) \ sys_icache_invalidate((void*)(from), (size_t)((char*)(to) - (char*)(from))) @@ -359,7 +372,8 @@ typedef int sljit_sw; && !(defined SLJIT_CONFIG_MIPS_64 && SLJIT_CONFIG_MIPS_64) \ && !(defined SLJIT_CONFIG_RISCV_64 && SLJIT_CONFIG_RISCV_64) \ && !(defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \ - && !(defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) + && !(defined SLJIT_CONFIG_LOONGARCH_64 && SLJIT_CONFIG_LOONGARCH_64) \ + && !(defined SLJIT_CONFIG_ALPHA_64 && SLJIT_CONFIG_ALPHA_64) #define SLJIT_32BIT_ARCHITECTURE 1 #define SLJIT_WORD_SHIFT 2 typedef unsigned int sljit_uw; @@ -428,6 +442,12 @@ typedef double sljit_f64; #define SLJIT_CONV_MAX_FLOAT SLJIT_CONV_RESULT_MAX_INT #define SLJIT_CONV_MIN_FLOAT SLJIT_CONV_RESULT_MIN_INT #define SLJIT_CONV_NAN_FLOAT SLJIT_CONV_RESULT_ZERO +#elif (defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA) +/* CVTTQ/SVC uses software completion; sljit_emit_fop1_conv_sw_from_f64 + emits FCMPLT/CMPTEQ + CMOVNE/CMOVEQ fixups to enforce saturation. */ +#define SLJIT_CONV_MAX_FLOAT SLJIT_CONV_RESULT_MAX_INT +#define SLJIT_CONV_MIN_FLOAT SLJIT_CONV_RESULT_MIN_INT +#define SLJIT_CONV_NAN_FLOAT SLJIT_CONV_RESULT_ZERO #else #error "Result for float to integer conversion is not defined" #endif @@ -451,55 +471,6 @@ typedef double sljit_f64; /* Endianness detection. */ /*************************/ -#if !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN) - -/* These macros are mostly useful for the applications. */ -#if (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) - -#ifdef __LITTLE_ENDIAN__ -#define SLJIT_LITTLE_ENDIAN 1 -#else -#define SLJIT_BIG_ENDIAN 1 -#endif - -#elif (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) - -#ifdef __MIPSEL__ -#define SLJIT_LITTLE_ENDIAN 1 -#else -#define SLJIT_BIG_ENDIAN 1 -#endif - -#ifndef SLJIT_MIPS_REV - -/* Auto detecting mips revision. */ -#if (defined __mips_isa_rev) && (__mips_isa_rev >= 6) -#define SLJIT_MIPS_REV 6 -#elif defined(__mips_isa_rev) && __mips_isa_rev >= 1 -#define SLJIT_MIPS_REV __mips_isa_rev -#elif defined(__clang__) \ - && (defined(_MIPS_ARCH_OCTEON) || defined(_MIPS_ARCH_P5600)) -/* clang either forgets to define (clang-7) __mips_isa_rev at all - * or sets it to zero (clang-8,-9) for -march=octeon (MIPS64 R2+) - * and -march=p5600 (MIPS32 R5). - * It also sets the __mips macro to 64 or 32 for -mipsN when N <= 5 - * (should be set to N exactly) so we cannot rely on this too. - */ -#define SLJIT_MIPS_REV 1 -#endif - -#endif /* !SLJIT_MIPS_REV */ - -#elif (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) - -#define SLJIT_BIG_ENDIAN 1 - -#else -#define SLJIT_LITTLE_ENDIAN 1 -#endif - -#endif /* !defined(SLJIT_BIG_ENDIAN) && !defined(SLJIT_LITTLE_ENDIAN) */ - /* Sanity check. */ #if (defined SLJIT_BIG_ENDIAN && SLJIT_BIG_ENDIAN) && (defined SLJIT_LITTLE_ENDIAN && SLJIT_LITTLE_ENDIAN) #error "Exactly one endianness must be selected" @@ -616,6 +587,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_IGNORED 1 #define SLJIT_UPPER_BITS_ZERO_EXTENDED 1 +#define SLJIT_SUBC_SETS_SIGNED 1 #elif (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) @@ -640,6 +612,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_IGNORED 1 #define SLJIT_UPPER_BITS_ZERO_EXTENDED 1 +#define SLJIT_SUBC_SETS_SIGNED 1 #elif (defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) @@ -653,6 +626,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_TMP_OPT_REG SLJIT_TMP_R0 #define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0 #define SLJIT_LOCALS_OFFSET_BASE 0 +#define SLJIT_SUBC_SETS_SIGNED 1 #elif (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) @@ -670,6 +644,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_IGNORED 1 #define SLJIT_UPPER_BITS_ZERO_EXTENDED 1 +#define SLJIT_SUBC_SETS_SIGNED 1 #elif (defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) @@ -691,6 +666,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_LOCALS_OFFSET_BASE (3 * (sljit_s32)sizeof(sljit_sw)) #endif /* SLJIT_CONFIG_PPC_64 || _AIX */ #define SLJIT_UPPER_BITS_IGNORED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 #elif (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) @@ -709,10 +685,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 3 #define SLJIT_TMP_DEST_REG SLJIT_TMP_R1 #define SLJIT_TMP_OPT_REG SLJIT_TMP_R0 +#define SLJIT_TMP_FLAG_REG SLJIT_TMP_R3 #define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0 #define SLJIT_MASKED_SHIFT 1 #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_SIGN_EXTENDED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 #elif (defined SLJIT_CONFIG_RISCV && SLJIT_CONFIG_RISCV) @@ -728,6 +706,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_NUMBER_OF_TEMPORARY_VECTOR_REGISTERS 2 #define SLJIT_TMP_DEST_REG SLJIT_TMP_R1 #define SLJIT_TMP_OPT_REG SLJIT_TMP_R0 +#define SLJIT_TMP_FLAG_REG SLJIT_TMP_R3 #define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0 #define SLJIT_TMP_DEST_VREG SLJIT_TMP_VR0 #define SLJIT_LOCALS_OFFSET_BASE 0 @@ -735,6 +714,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_IGNORED 1 #define SLJIT_UPPER_BITS_SIGN_EXTENDED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 #elif (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) @@ -772,6 +752,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_MASKED_SHIFT 1 #define SLJIT_UPPER_BITS_IGNORED 1 #define SLJIT_UPPER_BITS_PRESERVED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 #elif (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH) @@ -783,11 +764,38 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); #define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 2 #define SLJIT_TMP_DEST_REG SLJIT_TMP_R1 #define SLJIT_TMP_OPT_REG SLJIT_TMP_R0 +#define SLJIT_TMP_FLAG_REG SLJIT_TMP_R3 #define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0 #define SLJIT_LOCALS_OFFSET_BASE 0 #define SLJIT_MASKED_SHIFT 1 #define SLJIT_MASKED_SHIFT32 1 #define SLJIT_UPPER_BITS_SIGN_EXTENDED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 + +#elif (defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA) + +/* Alpha has 32 general registers (r31 hardwired zero) and 32 float registers + (f31 hardwired zero). Reserved: r31 (zero), r30 (sp), r29 (gp, unused by the + JIT). Backend temporaries: r24, r25, r26 (ra), r27 (pv), r28 (at). Exposed: + 17 scratch (r0-r8, r16-r23) + 7 callee-saved (r9-r15). */ +#define SLJIT_NUMBER_OF_REGISTERS 24 +#define SLJIT_NUMBER_OF_SAVED_REGISTERS 7 +#define SLJIT_NUMBER_OF_TEMPORARY_REGISTERS 5 +#define SLJIT_NUMBER_OF_FLOAT_REGISTERS 28 +#define SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS 8 +#define SLJIT_NUMBER_OF_TEMPORARY_FLOAT_REGISTERS 2 +#define SLJIT_TMP_DEST_REG SLJIT_TMP_R1 +#define SLJIT_TMP_OPT_REG SLJIT_TMP_R0 +#define SLJIT_TMP_FLAG_REG SLJIT_TMP_R3 +#define SLJIT_TMP_DEST_FREG SLJIT_TMP_FR0 +/* One word is reserved at the bottom of the frame: CPUs without the FIX + extension have no register to register move between the integer and float + register files, so values are bounced through this slot instead. */ +#define SLJIT_LOCALS_OFFSET_BASE ((sljit_s32)sizeof(sljit_sw)) +#define SLJIT_MASKED_SHIFT 1 +#define SLJIT_MASKED_SHIFT32 1 +#define SLJIT_UPPER_BITS_SIGN_EXTENDED 1 +#define SLJIT_SHARED_COMPARISON_FLAGS 1 #elif (defined SLJIT_CONFIG_UNSUPPORTED && SLJIT_CONFIG_UNSUPPORTED) @@ -894,7 +902,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void *code); || (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) \ || (defined SLJIT_CONFIG_RISCV && SLJIT_CONFIG_RISCV) \ || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X) \ - || (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH) + || (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH) \ + || (defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA) #define SLJIT_HAS_STATUS_FLAGS_STATE 1 #endif diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitLir.c b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitLir.c index 633e794b3..e8c77f856 100644 --- a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitLir.c +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitLir.c @@ -2484,7 +2484,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_jump(struct sljit_compile CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z); else if ((compiler->last_flags & 0xff) == SLJIT_CARRY) { CHECK_ARGUMENT((type & 0xfe) == SLJIT_CARRY); - compiler->last_flags = 0; + compiler->last_flags &= ~SLJIT_SET_Z; } else CHECK_ARGUMENT((type & 0xfe) == (compiler->last_flags & 0xff) || CHECK_UNORDERED(type, compiler->last_flags)); @@ -2746,7 +2746,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_select(struct sljit_compi CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z); else if ((compiler->last_flags & 0xff) == SLJIT_CARRY) { CHECK_ARGUMENT((type & 0xfe) == SLJIT_CARRY); - compiler->last_flags = 0; + compiler->last_flags &= ~SLJIT_SET_Z; } else CHECK_ARGUMENT((cond & 0xfe) == (compiler->last_flags & 0xff) || CHECK_UNORDERED(cond, compiler->last_flags)); @@ -3495,6 +3495,8 @@ static void sljit_reset_read_only_buffers(struct sljit_read_only_buffer *buffers # include "sljitNativeS390X.c" #elif (defined SLJIT_CONFIG_LOONGARCH && SLJIT_CONFIG_LOONGARCH) # include "sljitNativeLOONGARCH_64.c" +#elif (defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA) +# include "sljitNativeALPHA_64.c" #endif /* SLJIT_CONFIG_X86 */ #include "sljitSerialize.c" @@ -3737,7 +3739,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem_update(struct sljit_compiler * #endif /* !SLJIT_CONFIG_ARM && !SLJIT_CONFIG_PPC */ #if !(defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) \ - && !(defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) + && !(defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) \ + && !(defined SLJIT_CONFIG_ALPHA && SLJIT_CONFIG_ALPHA) SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 freg, @@ -3749,7 +3752,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compil return sljit_emit_fmem_unaligned(compiler, type, freg, mem, memw); } -#endif /* !SLJIT_CONFIG_ARM_32 && !SLJIT_CONFIG_MIPS */ +#endif /* !SLJIT_CONFIG_ARM_32 && !SLJIT_CONFIG_MIPS && !SLJIT_CONFIG_ALPHA */ #if !(defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) \ && !(defined SLJIT_CONFIG_PPC && SLJIT_CONFIG_PPC) diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitLir.h b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitLir.h index c5bf1287c..019ad60ea 100644 --- a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitLir.h +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitLir.h @@ -1167,7 +1167,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_to(struct sljit_compiler *c #define SLJIT_OP0_BASE 0 /* Flags: - (does not modify flags) - Note: breakpoint instruction is not supported by all architectures (e.g. ppc) + Triggers a trap that could be intercepted by a debugger + Note: might not be supported by all architectures, It falls back to SLJIT_NOP in those cases. */ #define SLJIT_BREAKPOINT (SLJIT_OP0_BASE + 0) /* Flags: - (does not modify flags) @@ -1761,7 +1762,10 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_aligned_label(struct slj #define SLJIT_SET_OVERFLOW SLJIT_SET(SLJIT_OVERFLOW) #define SLJIT_NOT_OVERFLOW 11 -/* Unlike other flags, sljit_emit_jump may destroy the carry flag. */ +/* Unlike other comparison types, sljit_emit_jump may destroy zero flag + when carry flag is specified (powerpc limitation). Furthermore, + SLJIT_CARRY represents that the first operand is unsigned less than + the second operand after an SLJIT_SUB / SLJIT_SUBC operation. */ #define SLJIT_CARRY 12 #define SLJIT_SET_CARRY SLJIT_SET(SLJIT_CARRY) #define SLJIT_NOT_CARRY 13 @@ -2023,11 +2027,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *com /* The following flags are used by sljit_emit_mem() and sljit_emit_fmem(). */ -/* Load or stora data from an unaligned (byte aligned) address. */ +/* Load or store data from an unaligned (byte aligned) address. */ #define SLJIT_MEM_UNALIGNED 0x000400 -/* Load or stora data from a 16 bit aligned address. */ +/* Load or store data from a 16 bit aligned address. */ #define SLJIT_MEM_ALIGNED_16 0x000800 -/* Load or stora data from a 32 bit aligned address. */ +/* Load or store data from a 32 bit aligned address. */ #define SLJIT_MEM_ALIGNED_32 0x001000 /* The following flags are used by sljit_emit_mem_update(), @@ -2732,8 +2736,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_u8 *SLJIT_FUNC sljit_stack_resize(struct sljit_st /* All JIT related code should be placed in the same context (library, binary, etc.). */ /* Get the entry address of a given function (signed, unsigned result). */ -#define SLJIT_FUNC_ADDR(func_name) (*(sljit_sw*)(void*)func_name) -#define SLJIT_FUNC_UADDR(func_name) (*(sljit_uw*)(void*)func_name) +#define SLJIT_FUNC_ADDR(func_name) (*(sljit_sw*)(sljit_uw)func_name) +#define SLJIT_FUNC_UADDR(func_name) (*(sljit_uw*)(sljit_uw)func_name) /* For powerpc64, the function pointers point to a context descriptor. */ struct sljit_function_context { @@ -2745,7 +2749,7 @@ struct sljit_function_context { /* Fill the context arguments using the addr and the function. If func_ptr is NULL, it will not be set to the address of context If addr is NULL, the function address also comes from the func pointer. */ -SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void* func); +SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void (*func)(void)); #endif /* !(defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) */ diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeALPHA_64.c b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeALPHA_64.c new file mode 100644 index 000000000..ffc29ddd8 --- /dev/null +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeALPHA_64.c @@ -0,0 +1,3655 @@ +/* + * Stack-less Just-In-Time compiler + * + * Copyright Zoltan Herczeg (hzmester@freemail.hu). All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE COPYRIGHT HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* Alpha ISA extension bits: a bit set means the extension is present. + Same layout as Linux AT_HWCAP and as ~amask(-1). */ +#define ALPHA_HWCAP_BWX 0x1 +#define ALPHA_HWCAP_FIX 0x2 +#define ALPHA_HWCAP_CIX 0x4 + +SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void) +{ + return "Alpha" SLJIT_CPUINFO; +} + +/* Alpha instructions are fixed 32 bit and processed as instruction units. */ +typedef sljit_u32 sljit_ins; + +#define TMP_REG1 (SLJIT_NUMBER_OF_REGISTERS + 2) +#define TMP_REG2 (SLJIT_NUMBER_OF_REGISTERS + 3) +#define TMP_REG3 (SLJIT_NUMBER_OF_REGISTERS + 4) +/* r29 (gp) is unused in JIT-compiled code; used as 4th scratch when reg + aliases TMP_REG2 or TMP_REG3 in the unaligned store synthesizers. */ +#define TMP_REG4 (SLJIT_NUMBER_OF_REGISTERS + 7) +#define TMP_ZERO 0 + +/* Flags are kept in volatile registers. */ +#define EQUAL_FLAG (SLJIT_NUMBER_OF_REGISTERS + 5) +#define RETURN_ADDR_REG TMP_REG2 +#define OTHER_FLAG (SLJIT_NUMBER_OF_REGISTERS + 6) + +#define TMP_FREG1 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 1) +#define TMP_FREG2 (SLJIT_NUMBER_OF_FLOAT_REGISTERS + 2) + +/* Maps sljit register indices onto Alpha physical registers. */ +static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 8] = { + 31, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 17, 18, 19, 20, 21, 22, 23, + 9, 10, 11, 12, 13, 14, 15, + 30, 28, 26, 27, 25, 24, 29 +}; + +static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { + 31, + 0, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 9, 8, 7, 6, 5, 4, 3, 2, + 30, 28 +}; + +/* --------------------------------------------------------------------- */ +/* Instruction forms */ +/* --------------------------------------------------------------------- */ + +#define OP(op) ((sljit_ins)(op) << 26) +#define FUNC(f) ((sljit_ins)(f) << 5) + +#define RA(r) ((sljit_ins)reg_map[r] << 21) +#define RB(r) ((sljit_ins)reg_map[r] << 16) +#define RC(r) ((sljit_ins)reg_map[r]) +#define FA(r) ((sljit_ins)freg_map[r] << 21) +#define FB(r) ((sljit_ins)freg_map[r] << 16) +#define FC(r) ((sljit_ins)freg_map[r]) +#define ABS_RA(n) ((sljit_ins)(n) << 21) +/* Literal (8 bit, zero extended) operand for operate instructions. */ +#define ALPHA_LIT(imm) ((((sljit_ins)(imm) & 0xff) << 13) | ((sljit_ins)1 << 12)) +#define DISP16(imm) ((sljit_ins)(imm) & 0xffff) + +/* Memory format opcodes. */ +#define LDA OP(0x08) +#define LDAH OP(0x09) +#define LDBU OP(0x0a) +#define LDQ_U OP(0x0b) +#define LDWU OP(0x0c) +#define STW OP(0x0d) +#define STB OP(0x0e) +#define STQ_U OP(0x0f) +#define LDF OP(0x20) +#define LDG OP(0x21) +#define LDS OP(0x22) +#define LDT OP(0x23) +#define STF OP(0x24) +#define STG OP(0x25) +#define STS OP(0x26) +#define STT OP(0x27) +#define LDL OP(0x28) +#define LDQ OP(0x29) +#define LDL_L OP(0x2a) +#define LDQ_L OP(0x2b) +#define STL OP(0x2c) +#define STQ OP(0x2d) +#define STL_C OP(0x2e) +#define STQ_C OP(0x2f) + +/* Integer arithmetic (op 0x10). */ +#define ADDL (OP(0x10) | FUNC(0x00)) +#define SUBL (OP(0x10) | FUNC(0x09)) +#define ADDQ (OP(0x10) | FUNC(0x20)) +#define SUBQ (OP(0x10) | FUNC(0x29)) +#define S4ADDQ (OP(0x10) | FUNC(0x22)) +#define S8ADDQ (OP(0x10) | FUNC(0x32)) +#define CMPEQ (OP(0x10) | FUNC(0x2d)) +#define CMPLT (OP(0x10) | FUNC(0x4d)) +#define CMPLE (OP(0x10) | FUNC(0x6d)) +#define CMPULT (OP(0x10) | FUNC(0x1d)) +#define CMPULE (OP(0x10) | FUNC(0x3d)) +#define CMPBGE (OP(0x10) | FUNC(0x0f)) + +/* Logical / conditional move (op 0x11). */ +#define AND (OP(0x11) | FUNC(0x00)) +#define BIC (OP(0x11) | FUNC(0x08)) +#define CMOVLBS (OP(0x11) | FUNC(0x14)) +#define CMOVLBC (OP(0x11) | FUNC(0x16)) +#define BIS (OP(0x11) | FUNC(0x20)) +#define CMOVEQ (OP(0x11) | FUNC(0x24)) +#define CMOVNE (OP(0x11) | FUNC(0x26)) +#define ORNOT (OP(0x11) | FUNC(0x28)) +#define XOR (OP(0x11) | FUNC(0x40)) +#define CMOVLT (OP(0x11) | FUNC(0x44)) +#define CMOVGE (OP(0x11) | FUNC(0x46)) +#define EQV (OP(0x11) | FUNC(0x48)) +#define CMOVLE (OP(0x11) | FUNC(0x64)) +#define CMOVGT (OP(0x11) | FUNC(0x66)) + +/* Shift / byte manipulation (op 0x12). */ +#define EXTBL (OP(0x12) | FUNC(0x06)) +#define EXTWL (OP(0x12) | FUNC(0x16)) +#define EXTLL (OP(0x12) | FUNC(0x26)) +#define EXTQL (OP(0x12) | FUNC(0x36)) +#define INSBL (OP(0x12) | FUNC(0x0b)) +#define MSKBL (OP(0x12) | FUNC(0x02)) +#define INSWL (OP(0x12) | FUNC(0x1b)) +#define INSLL (OP(0x12) | FUNC(0x2b)) +#define INSQL (OP(0x12) | FUNC(0x3b)) +#define MSKWL (OP(0x12) | FUNC(0x12)) +#define MSKLL (OP(0x12) | FUNC(0x22)) +#define MSKQL (OP(0x12) | FUNC(0x32)) +#define ZAPNOT (OP(0x12) | FUNC(0x31)) +#define EXTWH (OP(0x12) | FUNC(0x5a)) +#define EXTLH (OP(0x12) | FUNC(0x6a)) +#define EXTQH (OP(0x12) | FUNC(0x7a)) +#define MSKWH (OP(0x12) | FUNC(0x52)) +#define MSKLH (OP(0x12) | FUNC(0x62)) +#define MSKQH (OP(0x12) | FUNC(0x72)) +#define INSWH (OP(0x12) | FUNC(0x57)) +#define INSLH (OP(0x12) | FUNC(0x67)) +#define INSQH (OP(0x12) | FUNC(0x77)) +#define SRL (OP(0x12) | FUNC(0x34)) +#define SLL (OP(0x12) | FUNC(0x39)) +#define SRA (OP(0x12) | FUNC(0x3c)) + +/* Multiply (op 0x13). */ +#define MULL (OP(0x13) | FUNC(0x00)) +#define MULQ (OP(0x13) | FUNC(0x20)) +#define UMULH (OP(0x13) | FUNC(0x30)) + +/* Sign extension / count (op 0x1c, BWX/CIX). */ +#define SEXTB (OP(0x1c) | FUNC(0x00)) +#define SEXTW (OP(0x1c) | FUNC(0x01)) +#define CTPOP (OP(0x1c) | FUNC(0x30)) +#define CTLZ (OP(0x1c) | FUNC(0x32)) +#define CTTZ (OP(0x1c) | FUNC(0x33)) +/* FTOIx / ITOFx leave the unused Rb field as r31. */ +#define FTOIT (OP(0x1c) | FUNC(0x070) | ((sljit_ins)31 << 16)) +#define FTOIS (OP(0x1c) | FUNC(0x078) | ((sljit_ins)31 << 16)) + +/* Integer to float register move (op 0x14, FIX). */ +#define ITOFS (OP(0x14) | FUNC(0x004) | ((sljit_ins)31 << 16)) +#define ITOFT (OP(0x14) | FUNC(0x024) | ((sljit_ins)31 << 16)) + +/* Branches. */ +#define BR OP(0x30) +#define FBEQ OP(0x31) +#define FBLT OP(0x32) +#define FBLE OP(0x33) +#define BSR OP(0x34) +#define FBNE OP(0x35) +#define FBGE OP(0x36) +#define FBGT OP(0x37) +#define BLBC OP(0x38) +#define BEQ OP(0x39) +#define BLT OP(0x3a) +#define BLE OP(0x3b) +#define BLBS OP(0x3c) +#define BNE OP(0x3d) +#define BGE OP(0x3e) +#define BGT OP(0x3f) + +/* Memory branch (jumps, op 0x1a). */ +#define JMP (OP(0x1a) | ((sljit_ins)0 << 14)) +#define JSR (OP(0x1a) | ((sljit_ins)1 << 14)) +#define RETI (OP(0x1a) | ((sljit_ins)2 << 14)) + +/* Floating point IEEE T/S (op 0x16). The /SUI (arithmetic, +0x700) and /SU + (compare, +0x500) software-completion qualifiers keep IEEE exceptions from + raising SIGFPE: the kernel completes them with the (trap-disabled) FPCR. */ +#define ADDS (OP(0x16) | FUNC(0x780)) +#define SUBS (OP(0x16) | FUNC(0x781)) +#define MULS (OP(0x16) | FUNC(0x782)) +#define DIVS (OP(0x16) | FUNC(0x783)) +#define ADDT (OP(0x16) | FUNC(0x7a0)) +#define SUBT (OP(0x16) | FUNC(0x7a1)) +#define MULT (OP(0x16) | FUNC(0x7a2)) +#define DIVT (OP(0x16) | FUNC(0x7a3)) +#define CMPTUN (OP(0x16) | FUNC(0x5a4)) +#define CMPTEQ (OP(0x16) | FUNC(0x5a5)) +#define CMPTLT (OP(0x16) | FUNC(0x5a6)) +#define CMPTLE (OP(0x16) | FUNC(0x5a7)) +/* Unary converts leave the unused Fa field as f31. CVTTQ uses /SVC (software + completion + integer overflow + chopped/truncating rounding). */ +#define CVTTS (OP(0x16) | FUNC(0x7ac) | ((sljit_ins)31 << 21)) +#define CVTTQ (OP(0x16) | FUNC(0x52f) | ((sljit_ins)31 << 21)) +#define CVTQS (OP(0x16) | FUNC(0x7bc) | ((sljit_ins)31 << 21)) +#define CVTQT (OP(0x16) | FUNC(0x7be) | ((sljit_ins)31 << 21)) + +/* Floating point copy/convert (op 0x17). */ +#define CVTLQ (OP(0x17) | FUNC(0x010) | ((sljit_ins)31 << 21)) +#define CPYS (OP(0x17) | FUNC(0x020)) +#define CPYSN (OP(0x17) | FUNC(0x021)) +#define CPYSE (OP(0x17) | FUNC(0x022)) +#define CVTQL (OP(0x17) | FUNC(0x030) | ((sljit_ins)31 << 21)) + +/* Miscellaneous (op 0x18). */ +#define MB (OP(0x18) | 0x4000) + +/* NOP: BIS r31, r31, r31. */ +#define NOP (BIS | RA(TMP_ZERO) | RB(TMP_ZERO) | RC(TMP_ZERO)) +/* Canonical return: ret r31, (r26). */ +#define ALPHA_RET (RETI | RA(TMP_ZERO) | RB(RETURN_ADDR_REG) | 1) + +#define SIMM_MAX (0x7fff) +#define SIMM_MIN (-0x8000) +#define S32_MAX (0x7fffffffl) +#define S32_MIN (-0x80000000l) + +/* Branch displacement is a signed 21 bit count of instructions. */ +#define BRANCH_MAX (0xfffff) +#define BRANCH_MIN (-0x100000) + +/* Local jump flags (bits must not clash with JUMP_ADDR/JUMP_MOV_ADDR/ + SLJIT_REWRITABLE_JUMP defined in sljitLir.c). */ +#define IS_COND 0x004 +#define IS_CALL 0x008 +#define PATCH_B 0x020 +#define PATCH_ABS 0x040 + +/* Reserved instruction slots for a materialized far jump: + LDAH, LDA, SLL, LDAH, LDA (5) + JMP/JSR (1). */ +#define JUMP_MAX_SIZE ((sljit_uw)6) + +static sljit_s32 push_inst(struct sljit_compiler *compiler, sljit_ins ins) +{ + sljit_ins *ptr = (sljit_ins*)ensure_buf(compiler, sizeof(sljit_ins)); + FAIL_IF(!ptr); + *ptr = ins; + compiler->size++; + return SLJIT_SUCCESS; +} + +/* --------------------------------------------------------------------- */ +/* CPU feature detection */ +/* --------------------------------------------------------------------- */ + +static sljit_u32 cpu_feature_list = 0; + +static void get_cpu_features(void) +{ + /* Bit 31 is a sentinel: ensures cpu_feature_list != 0 after + initialization even on pre-EV56 CPUs with no extensions. */ + sljit_u32 features = 0x80000000u; + /* __builtin_alpha_amask clears a bit for each supported extension. + On pre-EV56, AMASK copies Rb to Rc unchanged (hardware behavior), + so ~amask(~0UL)=0 correctly indicates no extensions. */ + unsigned long hwcap = ~__builtin_alpha_amask(~0UL); + + if (hwcap & ALPHA_HWCAP_BWX) + features |= ALPHA_HWCAP_BWX; + if (hwcap & ALPHA_HWCAP_FIX) + features |= ALPHA_HWCAP_FIX; + if (hwcap & ALPHA_HWCAP_CIX) + features |= ALPHA_HWCAP_CIX; + + cpu_feature_list = features; +} + +/* Move a raw bit pattern between the integer and floating point register + files. ITOFS/ITOFT/FTOIS/FTOIT require the FIX extension (EV6+); older + CPUs have no such instruction, so the value is bounced through the word + reserved at the bottom of the frame by SLJIT_LOCALS_OFFSET_BASE. The + store/load pair is chosen to perform the same format conversion as the + instruction it replaces: LDS/STS convert S format, LDT/STT do not. */ +static sljit_s32 emit_int_to_float(struct sljit_compiler *compiler, sljit_s32 is_32, sljit_s32 freg, sljit_s32 reg) +{ + if (!cpu_feature_list) + get_cpu_features(); + + if (cpu_feature_list & ALPHA_HWCAP_FIX) + return push_inst(compiler, (is_32 ? ITOFS : ITOFT) | RA(reg) | FC(freg)); + + FAIL_IF(push_inst(compiler, (is_32 ? STL : STQ) | RA(reg) | RB(SLJIT_SP) | DISP16(0))); + return push_inst(compiler, (is_32 ? LDS : LDT) | FA(freg) | RB(SLJIT_SP) | DISP16(0)); +} + +/* Number of instructions emitted by the two helpers above, needed by callers + which branch over a block containing a transfer. */ +static sljit_s32 int_float_move_size(void) +{ + if (!cpu_feature_list) + get_cpu_features(); + + return (cpu_feature_list & ALPHA_HWCAP_FIX) ? 1 : 2; +} + +static sljit_s32 emit_float_to_int(struct sljit_compiler *compiler, sljit_s32 is_32, sljit_s32 reg, sljit_s32 freg) +{ + if (!cpu_feature_list) + get_cpu_features(); + + if (cpu_feature_list & ALPHA_HWCAP_FIX) + return push_inst(compiler, (is_32 ? FTOIS : FTOIT) | FA(freg) | RC(reg)); + + FAIL_IF(push_inst(compiler, (is_32 ? STS : STT) | FA(freg) | RB(SLJIT_SP) | DISP16(0))); + return push_inst(compiler, (is_32 ? LDL : LDQ) | RA(reg) | RB(SLJIT_SP) | DISP16(0)); +} + +/* --------------------------------------------------------------------- */ +/* Jumps */ +/* --------------------------------------------------------------------- */ + +static sljit_ins get_jump_instruction(sljit_s32 type); + +/* Fill the reserved region [inst .. inst + JUMP_MAX_SIZE) of a jump. + Returns the last written instruction slot. */ +static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code, sljit_sw executable_offset) +{ + sljit_sw diff; + sljit_uw target_addr; + sljit_ins *inst = code_ptr; + sljit_s32 i; + + SLJIT_UNUSED_ARG(executable_offset); + + if (jump->flags & JUMP_ADDR) + target_addr = jump->u.target; + else { + SLJIT_ASSERT(jump->u.label != NULL); + target_addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code + jump->u.label->size, executable_offset); + } + + if (jump->flags & IS_COND) { + if (!(jump->flags & SLJIT_REWRITABLE_JUMP)) { + /* The conditional branch is at inst[-1]. */ + diff = (sljit_sw)target_addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(inst - 1, executable_offset); + diff = (diff - 4) >> 2; + + if (diff >= BRANCH_MIN && diff <= BRANCH_MAX) { + /* Branch straight to the target, pad the rest with NOP. */ + jump->flags |= PATCH_B; + jump->addr = (sljit_uw)(inst - 1); + for (i = 0; i < (sljit_s32)JUMP_MAX_SIZE; i++) + inst[i] = NOP; + return inst + (JUMP_MAX_SIZE - 1); + } + } + + /* Far / rewritable conditional: invert the branch so it skips the + materialized jump. */ + inst[-1] = (inst[-1] ^ ((sljit_ins)0x04 << 26)) | (JUMP_MAX_SIZE & 0x1fffff); + } else if (!(jump->flags & SLJIT_REWRITABLE_JUMP) && !(jump->flags & IS_CALL)) { + /* Calls always take the materialized path so pv (r27) holds the + callee entry point for its ldgp. */ + diff = (sljit_sw)target_addr - (sljit_sw)SLJIT_ADD_EXEC_OFFSET(inst, executable_offset); + diff = (diff - 4) >> 2; + + if (diff >= BRANCH_MIN && diff <= BRANCH_MAX) { + jump->flags |= PATCH_B; + jump->addr = (sljit_uw)inst; + inst[0] = BR | RA(TMP_ZERO); + for (i = 1; i < (sljit_s32)JUMP_MAX_SIZE; i++) + inst[i] = NOP; + return inst + (JUMP_MAX_SIZE - 1); + } + } + + /* Far / rewritable: materialize the target into TMP_REG3 and jump. */ + jump->flags |= PATCH_ABS; + jump->addr = (sljit_uw)inst; + inst[5] = (jump->flags & IS_CALL) + ? (JSR | RA(RETURN_ADDR_REG) | RB(TMP_REG3)) + : (JMP | RA(TMP_ZERO) | RB(TMP_REG3)); + return inst + (JUMP_MAX_SIZE - 1); +} + +/* Write a fixed five instruction LDAH/LDA/SLL/LDAH/LDA sequence that loads + a 64 bit address into reg at inst[0..4]. */ +static SLJIT_INLINE void load_addr_to_reg(sljit_ins *inst, sljit_s32 reg, sljit_uw addr) +{ + sljit_sw high; + sljit_s32 low; + + low = (sljit_s32)addr; + high = (sljit_sw)addr >> 32; + if (low < 0) + high++; + + inst[0] = LDAH | RA(reg) | RB(TMP_ZERO) | ((((sljit_ins)((sljit_uw)high >> 16)) + (((high) & 0x8000) ? 1 : 0)) & 0xffff); + inst[1] = LDA | RA(reg) | RB(reg) | ((sljit_ins)high & 0xffff); + inst[2] = SLL | RA(reg) | ALPHA_LIT(32) | RC(reg); + inst[3] = LDAH | RA(reg) | RB(reg) | ((((sljit_ins)((sljit_u32)low >> 16)) + (((low) & 0x8000) ? 1 : 0)) & 0xffff); + inst[4] = LDA | RA(reg) | RB(reg) | ((sljit_ins)low & 0xffff); +} + +static SLJIT_INLINE sljit_ins *process_extended_label(sljit_ins *code_ptr, struct sljit_extended_label *ext_label) +{ + SLJIT_ASSERT(ext_label->label.u.index == SLJIT_LABEL_ALIGNED); + return (sljit_ins*)((sljit_uw)code_ptr & ~(ext_label->data)); +} + +SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler, sljit_s32 options, void *exec_allocator_data) +{ + struct sljit_memory_fragment *buf; + sljit_ins *code; + sljit_ins *code_ptr; + sljit_ins *buf_ptr; + sljit_ins *buf_end; + sljit_uw word_count; + SLJIT_NEXT_DEFINE_TYPES; + sljit_sw executable_offset; + sljit_uw addr; + + struct sljit_label *label; + struct sljit_jump *jump; + struct sljit_const *const_; + + CHECK_ERROR_PTR(); + CHECK_PTR(check_sljit_generate_code(compiler, options)); + + code = (sljit_ins*)allocate_executable_memory(compiler->size * sizeof(sljit_ins), options, exec_allocator_data, &executable_offset); + PTR_FAIL_WITH_EXEC_IF(code); + + reverse_buf(compiler); + buf = compiler->buf; + + code_ptr = code; + word_count = 0; + label = compiler->labels; + jump = compiler->jumps; + const_ = compiler->consts; + SLJIT_NEXT_INIT_TYPES(); + SLJIT_GET_NEXT_MIN(); + + do { + buf_ptr = (sljit_ins*)buf->memory; + buf_end = buf_ptr + (buf->used_size >> 2); + do { + *code_ptr = *buf_ptr++; + if (next_min_addr == word_count) { + SLJIT_ASSERT(!label || label->size >= word_count); + SLJIT_ASSERT(!jump || jump->addr >= word_count); + SLJIT_ASSERT(!const_ || const_->addr >= word_count); + + if (next_min_addr == next_label_size) { + if (label->u.index >= SLJIT_LABEL_ALIGNED) { + code_ptr = process_extended_label(code_ptr, (struct sljit_extended_label*)label); + *code_ptr = buf_ptr[-1]; + } + + label->u.addr = (sljit_uw)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); + label->size = (sljit_uw)(code_ptr - code); + label = label->next; + next_label_size = SLJIT_GET_NEXT_SIZE(label); + } + + if (next_min_addr == next_jump_addr) { + if (!(jump->flags & JUMP_MOV_ADDR)) { + word_count += JUMP_MAX_SIZE - 1; + code_ptr = detect_jump_type(jump, code_ptr, code, executable_offset); + } else { + word_count += JUMP_MAX_SIZE - 1; + jump->addr = (sljit_uw)code_ptr; + /* load_addr_to_reg fills slots [0..4]; NOP the rest. */ + code_ptr[JUMP_MAX_SIZE - 1] = NOP; + code_ptr += JUMP_MAX_SIZE - 1; + } + jump = jump->next; + next_jump_addr = SLJIT_GET_NEXT_ADDRESS(jump); + } else if (next_min_addr == next_const_addr) { + const_->addr = (sljit_uw)code_ptr; + const_ = const_->next; + next_const_addr = SLJIT_GET_NEXT_ADDRESS(const_); + } + + SLJIT_GET_NEXT_MIN(); + } + code_ptr++; + word_count++; + } while (buf_ptr < buf_end); + + buf = buf->next; + } while (buf); + + if (label && label->size == word_count) { + if (label->u.index >= SLJIT_LABEL_ALIGNED) + code_ptr = process_extended_label(code_ptr, (struct sljit_extended_label*)label); + + label->u.addr = (sljit_uw)code_ptr; + label->size = (sljit_uw)(code_ptr - code); + label = label->next; + } + + SLJIT_ASSERT(!label); + SLJIT_ASSERT(!jump); + SLJIT_ASSERT(!const_); + SLJIT_ASSERT(code_ptr - code <= (sljit_sw)compiler->size); + + jump = compiler->jumps; + while (jump) { + do { + addr = (jump->flags & JUMP_ADDR) ? jump->u.target : jump->u.label->u.addr; + buf_ptr = (sljit_ins *)jump->addr; + + if (jump->flags & JUMP_MOV_ADDR) { + load_addr_to_reg(buf_ptr, (sljit_s32)buf_ptr[0], addr); + break; + } + + if (jump->flags & PATCH_B) { + addr = (sljit_uw)((sljit_sw)(addr - (sljit_uw)SLJIT_ADD_EXEC_OFFSET(buf_ptr, executable_offset) - sizeof(sljit_ins)) >> 2); + SLJIT_ASSERT((sljit_sw)addr <= BRANCH_MAX && (sljit_sw)addr >= BRANCH_MIN); + buf_ptr[0] = (buf_ptr[0] & ~(sljit_ins)0x1fffff) | ((sljit_ins)addr & 0x1fffff); + break; + } + + SLJIT_ASSERT(jump->flags & PATCH_ABS); + load_addr_to_reg(buf_ptr, TMP_REG3, addr); + } while (0); + + jump = jump->next; + } + + compiler->error = SLJIT_ERR_COMPILED; + compiler->executable_offset = executable_offset; + compiler->executable_size = (sljit_uw)(code_ptr - code) * sizeof(sljit_ins); + + code = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code, executable_offset); + code_ptr = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(code_ptr, executable_offset); + + SLJIT_CACHE_FLUSH(code, code_ptr); + SLJIT_UPDATE_WX_FLAGS(code, code_ptr, 1); + return code; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) +{ + switch (feature_type) { + case SLJIT_HAS_FPU: +#ifdef SLJIT_IS_FPU_AVAILABLE + return (SLJIT_IS_FPU_AVAILABLE) != 0; +#else + return 1; +#endif + case SLJIT_HAS_ZERO_REGISTER: + case SLJIT_HAS_CMOV: + case SLJIT_HAS_REV: + case SLJIT_HAS_MEMORY_BARRIER: + return 1; + case SLJIT_HAS_COPY_F32: + case SLJIT_HAS_COPY_F64: + /* Uses ITOFS/ITOFT/FTOIS/FTOIT when the FIX extension (EV6+) is + available, and a stack round trip otherwise. */ + return 1; + case SLJIT_HAS_CLZ: + case SLJIT_HAS_CTZ: + if (!cpu_feature_list) + get_cpu_features(); + return (cpu_feature_list & ALPHA_HWCAP_CIX) ? 1 : 0; + case SLJIT_HAS_PREFETCH: + return 1; + case SLJIT_HAS_ROT: + case SLJIT_HAS_ATOMIC: + case SLJIT_HAS_SIMD: + default: + return 0; + } +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_cmp_info(sljit_s32 type) +{ + SLJIT_UNUSED_ARG(type); + return 0; +} + +/* --------------------------------------------------------------------- */ +/* Entry, exit */ +/* --------------------------------------------------------------------- */ + +/* Creates an index in data_transfer_insts array. */ +#define LOAD_DATA 0x01 +#define WORD_DATA 0x00 +#define BYTE_DATA 0x02 +#define HALF_DATA 0x04 +#define INT_DATA 0x06 +#define SIGNED_DATA 0x08 +/* Separates integer and floating point registers */ +#define GPR_REG 0x0f +#define DOUBLE_DATA 0x10 +#define SINGLE_DATA 0x12 + +#define MEM_MASK 0x1f + +#define ARG_TEST 0x00020 +#define ALT_KEEP_CACHE 0x00040 +#define CUMULATIVE_OP 0x00080 +#define IMM_OP 0x00100 +#define MOVE_OP 0x00200 +#define SRC2_IMM 0x00400 + +#define UNUSED_DEST 0x00800 +#define REG_DEST 0x01000 +#define REG1_SOURCE 0x02000 +#define REG2_SOURCE 0x04000 +#define SLOW_SRC1 0x08000 +#define SLOW_SRC2 0x10000 +#define SLOW_DEST 0x20000 +#define MEM_USE_TMP2 0x40000 + +static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw); + +/* Split a signed 32 bit value into an LDAH/LDA displacement pair, correcting + the high part for the sign extension performed by the LDA. */ +#define ALPHA_HI16(v) ((sljit_ins)((((sljit_u32)(v) >> 16) + (((v) & 0x8000) ? 1 : 0)) & 0xffff)) +#define ALPHA_LO16(v) ((sljit_ins)((v) & 0xffff)) + +/* Emit "reg = base + (sljit_s32)v32". Normally an LDAH/LDA pair, but values in + (0x7fff7fff, 0x7fffffff] need the high displacement 0x8000 which sign-extends + negative, so split off 0x40000000 and use a three instruction sequence. */ +static sljit_s32 emit_hi_lo(struct sljit_compiler *compiler, sljit_s32 reg, sljit_s32 base, sljit_s32 v32) +{ + sljit_s32 lo = (sljit_s32)(sljit_s16)(v32 & 0xffff); + sljit_sw hi = ((sljit_sw)v32 - lo) >> 16; + + if (hi >= -0x8000 && hi <= 0x7fff) { + FAIL_IF(push_inst(compiler, LDAH | RA(reg) | RB(base) | ((sljit_ins)hi & 0xffff))); + return push_inst(compiler, LDA | RA(reg) | RB(reg) | ((sljit_ins)lo & 0xffff)); + } + + FAIL_IF(push_inst(compiler, LDAH | RA(reg) | RB(base) | 0x4000)); + v32 -= 0x40000000; + lo = (sljit_s32)(sljit_s16)(v32 & 0xffff); + hi = ((sljit_sw)v32 - lo) >> 16; + FAIL_IF(push_inst(compiler, LDAH | RA(reg) | RB(reg) | ((sljit_ins)hi & 0xffff))); + return push_inst(compiler, LDA | RA(reg) | RB(reg) | ((sljit_ins)lo & 0xffff)); +} + +static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst_r, sljit_sw imm, sljit_s32 tmp_r) +{ + sljit_sw high; + sljit_s32 low; + + SLJIT_UNUSED_ARG(tmp_r); + + if (imm >= -0x8000 && imm <= 0x7fff) + return push_inst(compiler, LDA | RA(dst_r) | RB(TMP_ZERO) | ALPHA_LO16(imm)); + + if (imm >= S32_MIN && imm <= S32_MAX) + return emit_hi_lo(compiler, dst_r, TMP_ZERO, (sljit_s32)imm); + + /* Full 64 bit constant: build the high half, shift and add the low half. + The low half is added back sign extended, so the high half is biased by + one when it is negative. That bias can push high up to 0x80000000, which + no longer fits in a signed 32 bit value, but only the low 32 bits of the + high half survive the shift, so computing it modulo 2^32 is equivalent. */ + low = (sljit_s32)imm; + high = (sljit_sw)((sljit_uw)imm >> 32); + if (low < 0) + high++; + + FAIL_IF(emit_hi_lo(compiler, dst_r, TMP_ZERO, (sljit_s32)(sljit_u32)(sljit_uw)high)); + FAIL_IF(push_inst(compiler, SLL | RA(dst_r) | ALPHA_LIT(32) | RC(dst_r))); + + if (low == 0) + return SLJIT_SUCCESS; + + return emit_hi_lo(compiler, dst_r, dst_r, low); +} + +static SLJIT_INLINE sljit_s32 emit_const(struct sljit_compiler *compiler, sljit_s32 dst, sljit_sw init_value) +{ + sljit_sw high; + sljit_s32 low; + + low = (sljit_s32)init_value; + high = init_value >> 32; + if (low < 0) + high++; + + /* Fixed five instruction sequence so sljit_set_jump_addr can rewrite it. */ + FAIL_IF(push_inst(compiler, LDAH | RA(dst) | RB(TMP_ZERO) | ALPHA_HI16((sljit_s32)high))); + FAIL_IF(push_inst(compiler, LDA | RA(dst) | RB(dst) | ALPHA_LO16((sljit_s32)high))); + FAIL_IF(push_inst(compiler, SLL | RA(dst) | ALPHA_LIT(32) | RC(dst))); + FAIL_IF(push_inst(compiler, LDAH | RA(dst) | RB(dst) | ALPHA_HI16(low))); + return push_inst(compiler, LDA | RA(dst) | RB(dst) | ALPHA_LO16(low)); +} + +/* Emit a register move (BIS r31, src, dst). */ +static SLJIT_INLINE sljit_s32 emit_mov(struct sljit_compiler *compiler, sljit_s32 dst, sljit_s32 src) +{ + if (dst == src) + return SLJIT_SUCCESS; + return push_inst(compiler, BIS | RA(TMP_ZERO) | RB(src) | RC(dst)); +} + +#define STACK_MAX_DISTANCE (-SIMM_MIN) + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_enter(struct sljit_compiler *compiler, + sljit_s32 options, sljit_s32 arg_types, + sljit_s32 scratches, sljit_s32 saveds, sljit_s32 local_size) +{ + sljit_s32 fscratches = ENTER_GET_FLOAT_REGS(scratches); + sljit_s32 fsaveds = ENTER_GET_FLOAT_REGS(saveds); + sljit_s32 i, tmp, offset; + sljit_s32 saved_arg_count = SLJIT_KEPT_SAVEDS_COUNT(options); + sljit_s32 arg_count; + + CHECK_ERROR(); + CHECK(check_sljit_emit_enter(compiler, options, arg_types, scratches, saveds, local_size)); + set_emit_enter(compiler, options, arg_types, scratches, saveds, local_size); + + scratches = ENTER_GET_REGS(scratches); + saveds = ENTER_GET_REGS(saveds); + local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds - saved_arg_count, 1); + local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, f64); + local_size = (local_size + SLJIT_LOCALS_OFFSET + 15) & ~0xf; + compiler->local_size = local_size; + + if (local_size <= STACK_MAX_DISTANCE) { + offset = local_size - SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, LDA | RA(SLJIT_SP) | RB(SLJIT_SP) | DISP16(-local_size))); + local_size = 0; + } else { + FAIL_IF(push_inst(compiler, LDA | RA(SLJIT_SP) | RB(SLJIT_SP) | DISP16(-STACK_MAX_DISTANCE))); + local_size -= STACK_MAX_DISTANCE; + + if (local_size > STACK_MAX_DISTANCE) + FAIL_IF(load_immediate(compiler, TMP_REG1, local_size, TMP_REG3)); + offset = STACK_MAX_DISTANCE - SSIZE_OF(sw); + } + + FAIL_IF(push_inst(compiler, STQ | RA(RETURN_ADDR_REG) | RB(SLJIT_SP) | DISP16(offset))); + + tmp = SLJIT_S0 - saveds; + for (i = SLJIT_S0 - saved_arg_count; i > tmp; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STQ | RA(i) | RB(SLJIT_SP) | DISP16(offset))); + } + + for (i = scratches; i >= SLJIT_FIRST_SAVED_REG; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, STQ | RA(i) | RB(SLJIT_SP) | DISP16(offset))); + } + + tmp = SLJIT_FS0 - fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, STT | FA(i) | RB(SLJIT_SP) | DISP16(offset))); + } + + for (i = fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, STT | FA(i) | RB(SLJIT_SP) | DISP16(offset))); + } + + if (local_size > STACK_MAX_DISTANCE) + FAIL_IF(push_inst(compiler, SUBQ | RA(SLJIT_SP) | RB(TMP_REG1) | RC(SLJIT_SP))); + else if (local_size > 0) + FAIL_IF(push_inst(compiler, LDA | RA(SLJIT_SP) | RB(SLJIT_SP) | DISP16(-local_size))); + + if (options & SLJIT_ENTER_REG_ARG) + return SLJIT_SUCCESS; + + /* The Nth argument arrives in r(16 + N) (integer) or f(16 + N) (float). + Saved arguments are copied to SLJIT_S0.. / SLJIT_FS0..; scratch (_R) + arguments are copied to SLJIT_R0.. / SLJIT_FR0.. by type index. */ + arg_types >>= SLJIT_ARG_SHIFT; + saved_arg_count = 0; + arg_count = 0; + offset = 0; /* word arg index */ + i = 0; /* float arg index */ + + while (arg_types > 0) { + if ((arg_types & SLJIT_ARG_MASK) < SLJIT_ARG_TYPE_F64) { + if (!(arg_types & SLJIT_ARG_TYPE_SCRATCH_REG)) { + FAIL_IF(push_inst(compiler, BIS | ABS_RA(16 + arg_count) | RB(TMP_ZERO) | RC(SLJIT_S0 - saved_arg_count))); + saved_arg_count++; + } else if (reg_map[SLJIT_R0 + offset] != 16 + arg_count) + FAIL_IF(push_inst(compiler, BIS | ABS_RA(16 + arg_count) | RB(TMP_ZERO) | RC(SLJIT_R0 + offset))); + offset++; + } else { + /* Floating point arguments land in SLJIT_FR0.. by float index. */ + if (freg_map[SLJIT_FR0 + i] != 16 + arg_count) + FAIL_IF(push_inst(compiler, CPYS | ((sljit_ins)(16 + arg_count) << 21) | ((sljit_ins)(16 + arg_count) << 16) | FC(SLJIT_FR0 + i))); + i++; + } + + arg_count++; + arg_types >>= SLJIT_ARG_SHIFT; + } + + return SLJIT_SUCCESS; +} + +#undef STACK_MAX_DISTANCE + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_set_context(struct sljit_compiler *compiler, + sljit_s32 options, sljit_s32 arg_types, + sljit_s32 scratches, sljit_s32 saveds, sljit_s32 local_size) +{ + sljit_s32 fscratches = ENTER_GET_FLOAT_REGS(scratches); + sljit_s32 fsaveds = ENTER_GET_FLOAT_REGS(saveds); + + CHECK_ERROR(); + CHECK(check_sljit_set_context(compiler, options, arg_types, scratches, saveds, local_size)); + set_emit_enter(compiler, options, arg_types, scratches, saveds, local_size); + + scratches = ENTER_GET_REGS(scratches); + saveds = ENTER_GET_REGS(saveds); + local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds - SLJIT_KEPT_SAVEDS_COUNT(options), 1); + local_size += GET_SAVED_FLOAT_REGISTERS_SIZE(fscratches, fsaveds, f64); + compiler->local_size = (local_size + SLJIT_LOCALS_OFFSET + 15) & ~0xf; + + return SLJIT_SUCCESS; +} + +#define STACK_MAX_DISTANCE (-SIMM_MIN - 16) + +static sljit_s32 emit_stack_frame_release(struct sljit_compiler *compiler, sljit_s32 is_return_to) +{ + sljit_s32 i, tmp, offset; + sljit_s32 local_size = compiler->local_size; + + if (local_size > STACK_MAX_DISTANCE) { + local_size -= STACK_MAX_DISTANCE; + + if (local_size > STACK_MAX_DISTANCE) { + FAIL_IF(load_immediate(compiler, TMP_REG2, local_size, TMP_REG3)); + FAIL_IF(push_inst(compiler, ADDQ | RA(SLJIT_SP) | RB(TMP_REG2) | RC(SLJIT_SP))); + } else + FAIL_IF(push_inst(compiler, LDA | RA(SLJIT_SP) | RB(SLJIT_SP) | DISP16(local_size))); + + local_size = STACK_MAX_DISTANCE; + } + + offset = local_size - SSIZE_OF(sw); + if (!is_return_to) + FAIL_IF(push_inst(compiler, LDQ | RA(RETURN_ADDR_REG) | RB(SLJIT_SP) | DISP16(offset))); + + tmp = SLJIT_S0 - compiler->saveds; + for (i = SLJIT_S0 - SLJIT_KEPT_SAVEDS_COUNT(compiler->options); i > tmp; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, LDQ | RA(i) | RB(SLJIT_SP) | DISP16(offset))); + } + + for (i = compiler->scratches; i >= SLJIT_FIRST_SAVED_REG; i--) { + offset -= SSIZE_OF(sw); + FAIL_IF(push_inst(compiler, LDQ | RA(i) | RB(SLJIT_SP) | DISP16(offset))); + } + + tmp = SLJIT_FS0 - compiler->fsaveds; + for (i = SLJIT_FS0; i > tmp; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, LDT | FA(i) | RB(SLJIT_SP) | DISP16(offset))); + } + + for (i = compiler->fscratches; i >= SLJIT_FIRST_SAVED_FLOAT_REG; i--) { + offset -= SSIZE_OF(f64); + FAIL_IF(push_inst(compiler, LDT | FA(i) | RB(SLJIT_SP) | DISP16(offset))); + } + + return push_inst(compiler, LDA | RA(SLJIT_SP) | RB(SLJIT_SP) | DISP16(local_size)); +} + +#undef STACK_MAX_DISTANCE + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_void(struct sljit_compiler *compiler) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return_void(compiler)); + + FAIL_IF(emit_stack_frame_release(compiler, 0)); + return push_inst(compiler, ALPHA_RET); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_return_to(struct sljit_compiler *compiler, + sljit_s32 src, sljit_sw srcw) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_return_to(compiler, src, srcw)); + + if (src & SLJIT_MEM) { + ADJUST_LOCAL_OFFSET(src, srcw); + FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_REG1, src, srcw)); + src = TMP_REG1; + srcw = 0; + } else if (src >= SLJIT_FIRST_SAVED_REG && src <= (SLJIT_S0 - SLJIT_KEPT_SAVEDS_COUNT(compiler->options))) { + FAIL_IF(emit_mov(compiler, TMP_REG1, src)); + src = TMP_REG1; + srcw = 0; + } + + FAIL_IF(emit_stack_frame_release(compiler, 1)); + + SLJIT_SKIP_CHECKS(compiler); + return sljit_emit_ijump(compiler, SLJIT_JUMP, src, srcw); +} + +/* --------------------------------------------------------------------- */ +/* Operators */ +/* --------------------------------------------------------------------- */ + +static const sljit_ins data_transfer_insts[16 + 4] = { +/* u w s */ STQ, +/* u w l */ LDQ, +/* u b s */ STB, +/* u b l */ LDBU, +/* u h s */ STW, +/* u h l */ LDWU, +/* u i s */ STL, +/* u i l */ LDL, + +/* s w s */ STQ, +/* s w l */ LDQ, +/* s b s */ STB, +/* s b l */ LDBU, +/* s h s */ STW, +/* s h l */ LDWU, +/* s i s */ STL, +/* s i l */ LDL, + +/* d s */ STT, +/* d l */ LDT, +/* s s */ STS, +/* s l */ LDS, +}; + +/* Synthesize byte or halfword load/store on pre-EV56 Alpha (no BWX extension). + * Uses LDQ_U + EXTBL/EXTWL[H] / INSBL/INSWL[H] / MSKBL/MSKWL[H] + STQ_U. + * base must be a register; offset is a signed 16-bit displacement. */ +static sljit_s32 emit_no_bwx_mem(struct sljit_compiler *compiler, sljit_s32 flags, + sljit_s32 reg, sljit_s32 base, sljit_sw offset) +{ + sljit_s32 is_byte = ((flags & 0x6) == BYTE_DATA); + sljit_s32 is_signed = (flags & SIGNED_DATA) != 0; + + /* TMP_REG1 = actual byte address; LDQ_U will mask the low 3 bits to align. */ + FAIL_IF(push_inst(compiler, LDA | RA(TMP_REG1) | RB(base) | DISP16(offset))); + + if (flags & LOAD_DATA) { + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0))); + + if (is_byte) { + FAIL_IF(push_inst(compiler, EXTBL | RA(TMP_REG2) | RB(TMP_REG1) | RC(reg))); + if (is_signed) { + FAIL_IF(push_inst(compiler, SLL | RA(reg) | ALPHA_LIT(56) | RC(reg))); + return push_inst(compiler, SRA | RA(reg) | ALPHA_LIT(56) | RC(reg)); + } + return SLJIT_SUCCESS; + } + + /* Halfword may span two aligned quadwords; load both. */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG3) | RB(TMP_REG1) | DISP16(1))); + FAIL_IF(push_inst(compiler, EXTWL | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, EXTWH | RA(TMP_REG3) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(reg))); + if (is_signed) { + FAIL_IF(push_inst(compiler, SLL | RA(reg) | ALPHA_LIT(48) | RC(reg))); + return push_inst(compiler, SRA | RA(reg) | ALPHA_LIT(48) | RC(reg)); + } + return SLJIT_SUCCESS; + } + + /* Store: INSBL/INSWL read reg before LDQ_U clobbers TMP_REG2, but for + halfword stores the data must survive two LDQ_U/INSWx pairs. Save to + TMP_REG4 (r29/gp, never used in JIT code) when reg aliases a scratch. */ + + if (is_byte) { + /* Emit INSBL first so reg may safely alias TMP_REG2 or TMP_REG3. */ + FAIL_IF(push_inst(compiler, INSBL | RA(reg) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0))); + FAIL_IF(push_inst(compiler, MSKBL | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG2))); + return push_inst(compiler, STQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0)); + } + + /* Halfword store: data must survive two LDQ_U loads; save if aliased. */ + if (reg == TMP_REG2 || reg == TMP_REG3) { + FAIL_IF(push_inst(compiler, BIS | RA(reg) | RB(TMP_ZERO) | RC(TMP_REG4))); + reg = TMP_REG4; + } + /* Lower aligned quadword. */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0))); + FAIL_IF(push_inst(compiler, MSKWL | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, INSWL | RA(reg) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, STQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0))); + /* Upper aligned quadword. */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(1))); + FAIL_IF(push_inst(compiler, MSKWH | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, INSWH | RA(reg) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG2))); + return push_inst(compiler, STQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(1)); +} + +static sljit_s32 push_mem_inst(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 base, sljit_sw offset) +{ + sljit_ins ins; + + SLJIT_ASSERT(FAST_IS_REG(base) && offset <= SIMM_MAX && offset >= SIMM_MIN); + + /* LDBU/LDWU/STB/STW require the BWX extension (EV56+). Synthesize + * using LDQ_U + EXT/INS/MSK + STQ_U on pre-EV56 hardware. Only integer + * accesses qualify: SINGLE_DATA also has the BYTE_DATA bits set, but it + * transfers a floating point register with LDS/STS, which always exist. */ + if ((flags & MEM_MASK) <= GPR_REG + && ((flags & 0x6) == BYTE_DATA || (flags & 0x6) == HALF_DATA)) { + if (!cpu_feature_list) + get_cpu_features(); + if (!(cpu_feature_list & ALPHA_HWCAP_BWX)) + return emit_no_bwx_mem(compiler, flags, reg, base, offset); + } + + ins = data_transfer_insts[flags & MEM_MASK] | RB(base) | DISP16(offset); + if ((flags & MEM_MASK) <= GPR_REG) + ins |= RA(reg); + else + ins |= FA(reg); + + return push_inst(compiler, ins); +} + +/* Can perform an operation using at most 1 instruction. */ +static sljit_s32 getput_arg_fast(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) +{ + SLJIT_ASSERT(arg & SLJIT_MEM); + + if (!(arg & OFFS_REG_MASK) && argw <= SIMM_MAX && argw >= SIMM_MIN) { + if (SLJIT_UNLIKELY(flags & ARG_TEST)) + return 1; + + FAIL_IF(push_mem_inst(compiler, flags, reg, arg & REG_MASK, argw)); + return -1; + } + return 0; +} + +#define TO_ARGW_HI(argw) (((argw) & ~0xffff) + (((argw) & 0x8000) ? 0x10000 : 0)) + +static sljit_s32 can_cache(sljit_s32 arg, sljit_sw argw, sljit_s32 next_arg, sljit_sw next_argw) +{ + SLJIT_ASSERT((arg & SLJIT_MEM) && (next_arg & SLJIT_MEM)); + + if (arg & OFFS_REG_MASK) { + argw &= 0x3; + next_argw &= 0x3; + if (argw && argw == next_argw && (arg == next_arg || (arg & OFFS_REG_MASK) == (next_arg & OFFS_REG_MASK))) + return 1; + return 0; + } + + if (arg == next_arg) { + if (((next_argw - argw) <= SIMM_MAX && (next_argw - argw) >= SIMM_MIN) + || TO_ARGW_HI(argw) == TO_ARGW_HI(next_argw)) + return 1; + return 0; + } + + return 0; +} + +static sljit_s32 getput_arg(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) +{ + sljit_s32 base = arg & REG_MASK; + sljit_s32 tmp_r = (flags & MEM_USE_TMP2) ? TMP_REG2 : TMP_REG1; + sljit_sw offset; + + SLJIT_ASSERT(arg & SLJIT_MEM); + + if (SLJIT_UNLIKELY(arg & OFFS_REG_MASK)) { + argw &= 0x3; + + if (SLJIT_UNLIKELY(argw)) { + FAIL_IF(push_inst(compiler, SLL | RA(OFFS_REG(arg)) | ALPHA_LIT(argw) | RC(tmp_r))); + FAIL_IF(push_inst(compiler, ADDQ | RA(tmp_r) | RB(base) | RC(tmp_r))); + } else + FAIL_IF(push_inst(compiler, ADDQ | RA(base) | RB(OFFS_REG(arg)) | RC(tmp_r))); + + return push_mem_inst(compiler, flags, reg, tmp_r, 0); + } + + /* No address cache: materialize the high part and keep the low 16 bits + as the memory displacement. */ + offset = argw - TO_ARGW_HI(argw); + FAIL_IF(load_immediate(compiler, tmp_r, TO_ARGW_HI(argw), TMP_REG3)); + + if (base) + FAIL_IF(push_inst(compiler, ADDQ | RA(tmp_r) | RB(base) | RC(tmp_r))); + + return push_mem_inst(compiler, flags, reg, tmp_r, offset); +} + +static sljit_s32 emit_op_mem(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg, sljit_sw argw) +{ + sljit_s32 base = arg & REG_MASK; + sljit_s32 tmp_r = TMP_REG1; + + if (getput_arg_fast(compiler, flags, reg, arg, argw)) + return compiler->error; + + if ((flags & MEM_MASK) <= GPR_REG && (flags & LOAD_DATA)) + tmp_r = reg; + + if (SLJIT_UNLIKELY(arg & OFFS_REG_MASK)) { + argw &= 0x3; + + if (SLJIT_UNLIKELY(argw)) { + FAIL_IF(push_inst(compiler, SLL | RA(OFFS_REG(arg)) | ALPHA_LIT(argw) | RC(tmp_r))); + FAIL_IF(push_inst(compiler, ADDQ | RA(tmp_r) | RB(base) | RC(tmp_r))); + } else + FAIL_IF(push_inst(compiler, ADDQ | RA(base) | RB(OFFS_REG(arg)) | RC(tmp_r))); + + argw = 0; + } else { + FAIL_IF(load_immediate(compiler, tmp_r, TO_ARGW_HI(argw), TMP_REG3)); + + if (base != 0) + FAIL_IF(push_inst(compiler, ADDQ | RA(tmp_r) | RB(base) | RC(tmp_r))); + + argw -= TO_ARGW_HI(argw); + } + + return push_mem_inst(compiler, flags, reg, tmp_r, argw); +} + +static SLJIT_INLINE sljit_s32 emit_op_mem2(struct sljit_compiler *compiler, sljit_s32 flags, sljit_s32 reg, sljit_s32 arg1, sljit_sw arg1w) +{ + if (getput_arg_fast(compiler, flags, reg, arg1, arg1w)) + return compiler->error; + return getput_arg(compiler, flags, reg, arg1, arg1w); +} + +/* Select ADDQ/ADDL etc. based on the SLJIT_32 flag. */ +#define SELECT_OP(op, q, l) (((op) & SLJIT_32) ? (l) : (q)) + +/* Sign extend the low 32 bits when the result must stay canonical, and deposit + the zero flag when requested (only shift opcodes route SLJIT_SET_Z here). */ +static SLJIT_INLINE sljit_s32 emit_sext32(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst) +{ + if (op & SLJIT_32) + FAIL_IF(push_inst(compiler, ADDL | RA(dst) | RB(TMP_ZERO) | RC(dst))); + if (op & SLJIT_SET_Z) + return push_inst(compiler, BIS | RA(TMP_ZERO) | RB(dst) | RC(EQUAL_FLAG)); + return SLJIT_SUCCESS; +} + +static sljit_s32 emit_rev(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 dst, sljit_s32 src) +{ + sljit_s32 n, i; + sljit_s32 res = EQUAL_FLAG; + + switch (GET_OPCODE(op)) { + case SLJIT_REV_U16: + case SLJIT_REV_S16: + n = 2; + break; + case SLJIT_REV_U32: + case SLJIT_REV_S32: + n = 4; + break; + default: + n = (op & SLJIT_32) ? 4 : 8; + break; + } + + FAIL_IF(push_inst(compiler, BIS | RA(TMP_ZERO) | RB(TMP_ZERO) | RC(res))); + for (i = 0; i < n; i++) { + FAIL_IF(push_inst(compiler, EXTBL | RA(src) | ALPHA_LIT(i) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, INSBL | RA(TMP_REG1) | ALPHA_LIT(n - 1 - i) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, BIS | RA(res) | RB(TMP_REG1) | RC(res))); + } + + switch (GET_OPCODE(op)) { + case SLJIT_REV_U16: + return push_inst(compiler, ZAPNOT | RA(res) | ALPHA_LIT(0x03) | RC(dst)); + case SLJIT_REV_S16: + return push_inst(compiler, SEXTW | RA(TMP_ZERO) | RB(res) | RC(dst)); + case SLJIT_REV_U32: + return push_inst(compiler, ZAPNOT | RA(res) | ALPHA_LIT(0x0f) | RC(dst)); + case SLJIT_REV_S32: + return push_inst(compiler, ADDL | RA(res) | RB(TMP_ZERO) | RC(dst)); + default: + return emit_mov(compiler, dst, res); + } +} + +static sljit_s32 emit_cmp_flag(struct sljit_compiler *compiler, sljit_s32 flag_type, sljit_s32 src1, sljit_s32 src2) +{ + /* Deposit the strict comparison result into OTHER_FLAG. */ + switch (flag_type) { + case SLJIT_LESS: + case SLJIT_GREATER_EQUAL: + case SLJIT_CARRY: + case SLJIT_NOT_CARRY: + return push_inst(compiler, CMPULT | RA(src1) | RB(src2) | RC(OTHER_FLAG)); + case SLJIT_GREATER: + case SLJIT_LESS_EQUAL: + return push_inst(compiler, CMPULT | RA(src2) | RB(src1) | RC(OTHER_FLAG)); + case SLJIT_SIG_LESS: + case SLJIT_SIG_GREATER_EQUAL: + return push_inst(compiler, CMPLT | RA(src1) | RB(src2) | RC(OTHER_FLAG)); + case SLJIT_SIG_GREATER: + case SLJIT_SIG_LESS_EQUAL: + return push_inst(compiler, CMPLT | RA(src2) | RB(src1) | RC(OTHER_FLAG)); + } + return SLJIT_SUCCESS; +} + +/* Count leading zeroes of a 64 bit value without the CIX extension (pre-EV67). + Branchless binary search: at each step the top half of the remaining window + is tested, and is either skipped (adding its width to the count) or becomes + the new window. A zero input yields 64. + + src_r is read by the first instruction only, so it may be any of the scratch + registers this clobbers (OTHER_FLAG, EQUAL_FLAG, TMP_REG3). */ +static sljit_s32 emit_clz64_no_cix(struct sljit_compiler *compiler, sljit_s32 dst_r, sljit_s32 src_r) +{ + sljit_s32 shift; + + /* The window under consideration, and the count of zeroes above it. */ + FAIL_IF(push_inst(compiler, BIS | RA(src_r) | RB(TMP_ZERO) | RC(OTHER_FLAG))); + FAIL_IF(push_inst(compiler, LDA | RA(dst_r) | RB(TMP_ZERO) | DISP16(0))); + + for (shift = 32; shift > 0; shift >>= 1) { + FAIL_IF(push_inst(compiler, SRL | RA(OTHER_FLAG) | ALPHA_LIT(shift) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, ADDQ | RA(dst_r) | ALPHA_LIT(shift) | RC(TMP_REG3))); + /* Top half empty: skip it and count its width. */ + FAIL_IF(push_inst(compiler, CMOVEQ | RA(EQUAL_FLAG) | RB(TMP_REG3) | RC(dst_r))); + /* Otherwise the top half becomes the new window. */ + FAIL_IF(push_inst(compiler, CMOVNE | RA(EQUAL_FLAG) | RB(EQUAL_FLAG) | RC(OTHER_FLAG))); + } + + /* The window is now a single bit; if it is clear the input was zero. */ + FAIL_IF(push_inst(compiler, ADDQ | RA(dst_r) | ALPHA_LIT(1) | RC(TMP_REG3))); + return push_inst(compiler, CMOVEQ | RA(OTHER_FLAG) | RB(TMP_REG3) | RC(dst_r)); +} + +/* SLJIT_CLZ / SLJIT_CTZ on CPUs without CIX. */ +static sljit_s32 emit_clz_ctz_no_cix(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 opcode, sljit_s32 dst_r, sljit_s32 src_r) +{ + sljit_s32 src = src_r; + + if (op & SLJIT_32) { + /* Operate on the zero extended low word. */ + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src_r) | ALPHA_LIT(0x0f) | RC(TMP_REG3))); + src = TMP_REG3; + } + + if (opcode == SLJIT_CLZ) { + FAIL_IF(emit_clz64_no_cix(compiler, dst_r, src)); + + /* A zero extended word has 32 extra leading zeroes, and a zero input + correctly ends up as 64 - 32. */ + if (op & SLJIT_32) + return push_inst(compiler, SUBQ | RA(dst_r) | ALPHA_LIT(32) | RC(dst_r)); + return SLJIT_SUCCESS; + } + + /* ctz(x) == 64 - clz(~x & (x - 1)), which needs no special case for zero: + the mask is then all ones, so clz is 0 and the result is 64. */ + FAIL_IF(push_inst(compiler, LDA | RA(EQUAL_FLAG) | RB(src) | DISP16(-1))); + FAIL_IF(push_inst(compiler, BIC | RA(EQUAL_FLAG) | RB(src) | RC(EQUAL_FLAG))); + FAIL_IF(emit_clz64_no_cix(compiler, dst_r, EQUAL_FLAG)); + FAIL_IF(push_inst(compiler, LDA | RA(OTHER_FLAG) | RB(TMP_ZERO) | DISP16(64))); + FAIL_IF(push_inst(compiler, SUBQ | RA(OTHER_FLAG) | RB(dst_r) | RC(dst_r))); + + if (!(op & SLJIT_32)) + return SLJIT_SUCCESS; + + /* A zero low word gives 64 here, but the 32 bit result must be 32. No + other input can reach 64, so the value alone identifies the case. */ + FAIL_IF(push_inst(compiler, CMPEQ | RA(dst_r) | ALPHA_LIT(64) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, LDA | RA(OTHER_FLAG) | RB(TMP_ZERO) | DISP16(32))); + return push_inst(compiler, CMOVNE | RA(EQUAL_FLAG) | RB(OTHER_FLAG) | RC(dst_r)); +} + +static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags, + sljit_s32 dst, sljit_s32 src1, sljit_sw src2) +{ + sljit_s32 opcode = GET_OPCODE(op); + sljit_s32 flag_type = GET_FLAG_TYPE(op); + sljit_ins op_imm, op_reg; + sljit_s32 src2r = (sljit_s32)src2; + + switch (opcode) { + case SLJIT_MOV: + case SLJIT_MOV_P: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + return emit_mov(compiler, dst, src2r); + + case SLJIT_MOV_U8: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + return push_inst(compiler, ZAPNOT | RA(src2r) | ALPHA_LIT(0x01) | RC(dst)); + + case SLJIT_MOV_S8: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + return push_inst(compiler, SEXTB | RA(TMP_ZERO) | RB(src2r) | RC(dst)); + + case SLJIT_MOV_U16: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + return push_inst(compiler, ZAPNOT | RA(src2r) | ALPHA_LIT(0x03) | RC(dst)); + + case SLJIT_MOV_S16: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + return push_inst(compiler, SEXTW | RA(TMP_ZERO) | RB(src2r) | RC(dst)); + + case SLJIT_MOV_U32: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + return push_inst(compiler, ZAPNOT | RA(src2r) | ALPHA_LIT(0x0f) | RC(dst)); + + case SLJIT_MOV_S32: + case SLJIT_MOV32: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + return push_inst(compiler, ADDL | RA(src2r) | RB(TMP_ZERO) | RC(dst)); + + case SLJIT_CLZ: + case SLJIT_CTZ: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + /* CTLZ/CTTZ require the CIX extension (EV67+). */ + if (!cpu_feature_list) + get_cpu_features(); + if (!(cpu_feature_list & ALPHA_HWCAP_CIX)) + return emit_clz_ctz_no_cix(compiler, op, opcode, dst, src2r); + + if (op & SLJIT_32) { + if (opcode == SLJIT_CLZ) { + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src2r) | ALPHA_LIT(0x0f) | RC(OTHER_FLAG))); + FAIL_IF(push_inst(compiler, CTLZ | RA(TMP_ZERO) | RB(OTHER_FLAG) | RC(dst))); + return push_inst(compiler, SUBQ | RA(dst) | ALPHA_LIT(32) | RC(dst)); + } + /* Trailing zeroes of a 32 bit value; the all-zero case is 32. */ + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src2r) | ALPHA_LIT(0x0f) | RC(OTHER_FLAG))); + FAIL_IF(push_inst(compiler, CTTZ | RA(TMP_ZERO) | RB(OTHER_FLAG) | RC(dst))); + FAIL_IF(push_inst(compiler, LDA | RA(EQUAL_FLAG) | RB(TMP_ZERO) | DISP16(32))); + return push_inst(compiler, CMOVEQ | RA(OTHER_FLAG) | RB(EQUAL_FLAG) | RC(dst)); + } + return push_inst(compiler, ((opcode == SLJIT_CLZ) ? CTLZ : CTTZ) | RA(TMP_ZERO) | RB(src2r) | RC(dst)); + + case SLJIT_REV: + case SLJIT_REV_U16: + case SLJIT_REV_S16: + case SLJIT_REV_U32: + case SLJIT_REV_S32: + SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); + return emit_rev(compiler, op, dst, src2r); + + case SLJIT_ADD: { + sljit_s32 is_carry = (flag_type == SLJIT_CARRY); + sljit_s32 is_ovf = (flag_type == SLJIT_OVERFLOW); + sljit_s32 carry_r = 0; + + if (is_ovf) { + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, XOR | RA(src1) | ALPHA_LIT(src2) | RC(EQUAL_FLAG))); + else + FAIL_IF(push_inst(compiler, XOR | RA(src1) | RB(src2r) | RC(EQUAL_FLAG))); + } + + if (is_carry || is_ovf) { + if (dst != src1) + carry_r = src1; + else if (!(flags & SRC2_IMM) && dst != src2r) + carry_r = src2r; + else { + FAIL_IF(emit_mov(compiler, OTHER_FLAG, src1)); + carry_r = OTHER_FLAG; + } + } + + { + /* Flags-only + zero flag: add straight into EQUAL_FLAG so a caller + value held in the (unused) destination TMP_REG2 is preserved. */ + sljit_s32 add_dst = ((op & SLJIT_SET_Z) && (flags & UNUSED_DEST) && !is_carry && !is_ovf) ? EQUAL_FLAG : dst; + + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, SELECT_OP(op, ADDQ, ADDL) | RA(src1) | ALPHA_LIT(src2) | RC(add_dst))); + else + FAIL_IF(push_inst(compiler, SELECT_OP(op, ADDQ, ADDL) | RA(src1) | RB(src2r) | RC(add_dst))); + + if (is_carry || is_ovf) + FAIL_IF(push_inst(compiler, CMPULT | RA(dst) | RB(carry_r) | RC(OTHER_FLAG))); + + if (is_ovf) { + FAIL_IF(push_inst(compiler, XOR | RA(dst) | RB(EQUAL_FLAG) | RC(TMP_REG1))); + if (op & SLJIT_SET_Z) + FAIL_IF(emit_mov(compiler, EQUAL_FLAG, dst)); + /* Test the sign at the operation width: bit 31 for 32 bit ops + (sign extend the low word first), bit 63 otherwise. */ + if (op & SLJIT_32) + FAIL_IF(push_inst(compiler, ADDL | RA(TMP_REG1) | RB(TMP_ZERO) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, CMPLT | RA(TMP_REG1) | RB(TMP_ZERO) | RC(TMP_REG1))); + return push_inst(compiler, XOR | RA(TMP_REG1) | RB(OTHER_FLAG) | RC(OTHER_FLAG)); + } + + if ((op & SLJIT_SET_Z) && add_dst != EQUAL_FLAG) + FAIL_IF(emit_mov(compiler, EQUAL_FLAG, add_dst)); + } + return SLJIT_SUCCESS; + } + + case SLJIT_ADDC: { + sljit_s32 is_carry = (flag_type == SLJIT_CARRY); + sljit_s32 carry_r = 0; + + if (is_carry) { + if (dst != src1) + carry_r = src1; + else if (!(flags & SRC2_IMM) && dst != src2r) + carry_r = src2r; + else { + FAIL_IF(emit_mov(compiler, EQUAL_FLAG, src1)); + carry_r = EQUAL_FLAG; + } + } + + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, SELECT_OP(op, ADDQ, ADDL) | RA(src1) | ALPHA_LIT(src2) | RC(dst))); + else + FAIL_IF(push_inst(compiler, SELECT_OP(op, ADDQ, ADDL) | RA(src1) | RB(src2r) | RC(dst))); + + if (is_carry) + FAIL_IF(push_inst(compiler, CMPULT | RA(dst) | RB(carry_r) | RC(EQUAL_FLAG))); + + FAIL_IF(push_inst(compiler, SELECT_OP(op, ADDQ, ADDL) | RA(dst) | RB(OTHER_FLAG) | RC(dst))); + + if (!is_carry) + return SLJIT_SUCCESS; + + FAIL_IF(push_inst(compiler, CMPULT | RA(dst) | RB(OTHER_FLAG) | RC(OTHER_FLAG))); + return push_inst(compiler, BIS | RA(OTHER_FLAG) | RB(EQUAL_FLAG) | RC(OTHER_FLAG)); + } + + case SLJIT_SUB: { + sljit_s32 is_carry = (flag_type == SLJIT_CARRY); + sljit_s32 is_ovf = (flag_type == SLJIT_OVERFLOW); + + if (flag_type >= SLJIT_LESS && flag_type <= SLJIT_SIG_LESS_EQUAL) { + if (flags & SRC2_IMM) { + /* Use a scratch that is not SLJIT_TMP_DEST_REG (TMP_REG2) so a + caller value held there is not clobbered by the comparison. */ + sljit_s32 imm_reg = (src1 == TMP_REG1) ? TMP_REG2 : TMP_REG1; + FAIL_IF(load_immediate(compiler, imm_reg, src2, TMP_REG3)); + src2r = imm_reg; + flags &= ~SRC2_IMM; + } + FAIL_IF(emit_cmp_flag(compiler, flag_type, src1, src2r)); + + /* Only the comparison flag (and optionally Z) is needed; skip the + subtraction when the destination is unused. */ + if (op & SLJIT_SET_Z) + FAIL_IF(push_inst(compiler, SELECT_OP(op, SUBQ, SUBL) | RA(src1) | RB(src2r) | RC(EQUAL_FLAG))); + if (!(flags & UNUSED_DEST)) + FAIL_IF(push_inst(compiler, SELECT_OP(op, SUBQ, SUBL) | RA(src1) | RB(src2r) | RC(dst))); + return SLJIT_SUCCESS; + } + + if (is_ovf) { + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, XOR | RA(src1) | ALPHA_LIT(src2) | RC(EQUAL_FLAG))); + else + FAIL_IF(push_inst(compiler, XOR | RA(src1) | RB(src2r) | RC(EQUAL_FLAG))); + } + + if (is_carry || is_ovf) { + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, CMPULT | RA(src1) | ALPHA_LIT(src2) | RC(OTHER_FLAG))); + else + FAIL_IF(push_inst(compiler, CMPULT | RA(src1) | RB(src2r) | RC(OTHER_FLAG))); + } + + /* When only the zero flag is needed and the destination is unused, + subtract straight into EQUAL_FLAG so a caller value held in dst + (SLJIT_TMP_DEST_REG maps to TMP_REG2) is preserved. */ + { + sljit_s32 sub_dst = ((op & SLJIT_SET_Z) && (flags & UNUSED_DEST) && !is_ovf) ? EQUAL_FLAG : dst; + + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, SELECT_OP(op, SUBQ, SUBL) | RA(src1) | ALPHA_LIT(src2) | RC(sub_dst))); + else + FAIL_IF(push_inst(compiler, SELECT_OP(op, SUBQ, SUBL) | RA(src1) | RB(src2r) | RC(sub_dst))); + + if (is_ovf) { + FAIL_IF(push_inst(compiler, XOR | RA(dst) | RB(EQUAL_FLAG) | RC(TMP_REG1))); + if (op & SLJIT_SET_Z) + FAIL_IF(emit_mov(compiler, EQUAL_FLAG, dst)); + /* Test the sign at the operation width: bit 31 for 32 bit ops + (sign extend the low word first), bit 63 otherwise. */ + if (op & SLJIT_32) + FAIL_IF(push_inst(compiler, ADDL | RA(TMP_REG1) | RB(TMP_ZERO) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, CMPLT | RA(TMP_REG1) | RB(TMP_ZERO) | RC(TMP_REG1))); + return push_inst(compiler, XOR | RA(TMP_REG1) | RB(OTHER_FLAG) | RC(OTHER_FLAG)); + } + + if ((op & SLJIT_SET_Z) && sub_dst != EQUAL_FLAG) + FAIL_IF(emit_mov(compiler, EQUAL_FLAG, sub_dst)); + } + return SLJIT_SUCCESS; + } + + case SLJIT_SUBC: { + sljit_s32 is_carry = (flag_type == SLJIT_CARRY); + + if (is_carry) { + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, CMPULT | RA(src1) | ALPHA_LIT(src2) | RC(EQUAL_FLAG))); + else + FAIL_IF(push_inst(compiler, CMPULT | RA(src1) | RB(src2r) | RC(EQUAL_FLAG))); + } + + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, SELECT_OP(op, SUBQ, SUBL) | RA(src1) | ALPHA_LIT(src2) | RC(dst))); + else + FAIL_IF(push_inst(compiler, SELECT_OP(op, SUBQ, SUBL) | RA(src1) | RB(src2r) | RC(dst))); + + if (is_carry) + FAIL_IF(push_inst(compiler, CMPULT | RA(dst) | RB(OTHER_FLAG) | RC(TMP_REG1))); + + FAIL_IF(push_inst(compiler, SELECT_OP(op, SUBQ, SUBL) | RA(dst) | RB(OTHER_FLAG) | RC(dst))); + + if (!is_carry) + return SLJIT_SUCCESS; + + return push_inst(compiler, BIS | RA(EQUAL_FLAG) | RB(TMP_REG1) | RC(OTHER_FLAG)); + } + + case SLJIT_MUL: + SLJIT_ASSERT(!(flags & SRC2_IMM)); + + if (flag_type != SLJIT_OVERFLOW) + return push_inst(compiler, SELECT_OP(op, MULQ, MULL) | RA(src1) | RB(src2r) | RC(dst)); + + if (op & SLJIT_32) { + /* Overflow if the full product differs from its low 32 bits. */ + FAIL_IF(push_inst(compiler, MULQ | RA(src1) | RB(src2r) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, MULL | RA(src1) | RB(src2r) | RC(dst))); + FAIL_IF(push_inst(compiler, XOR | RA(EQUAL_FLAG) | RB(dst) | RC(EQUAL_FLAG))); + return push_inst(compiler, CMPULT | RA(TMP_ZERO) | RB(EQUAL_FLAG) | RC(OTHER_FLAG)); + } + + /* Signed 64x64: overflow if the signed high half differs from the sign + extension of the low half. Signed high = UMULH - (a<0?b) - (b<0?a). */ + FAIL_IF(push_inst(compiler, UMULH | RA(src1) | RB(src2r) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, SRA | RA(src1) | ALPHA_LIT(63) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, AND | RA(TMP_REG3) | RB(src2r) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, SUBQ | RA(EQUAL_FLAG) | RB(TMP_REG3) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, SRA | RA(src2r) | ALPHA_LIT(63) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, AND | RA(TMP_REG3) | RB(src1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, SUBQ | RA(EQUAL_FLAG) | RB(TMP_REG3) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, MULQ | RA(src1) | RB(src2r) | RC(dst))); + FAIL_IF(push_inst(compiler, SRA | RA(dst) | ALPHA_LIT(63) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, XOR | RA(EQUAL_FLAG) | RB(TMP_REG3) | RC(EQUAL_FLAG))); + return push_inst(compiler, CMPULT | RA(TMP_ZERO) | RB(EQUAL_FLAG) | RC(OTHER_FLAG)); + + case SLJIT_AND: + op_imm = AND; + op_reg = AND; + break; + case SLJIT_OR: + op_imm = BIS; + op_reg = BIS; + break; + case SLJIT_XOR: + op_imm = XOR; + op_reg = XOR; + break; + + case SLJIT_SHL: + case SLJIT_MSHL: + if (op & SLJIT_32) { + if (flags & SRC2_IMM) + FAIL_IF(push_inst(compiler, SLL | RA(src1) | ALPHA_LIT(src2 & 0x1f) | RC(dst))); + else { + FAIL_IF(push_inst(compiler, AND | RA(src2r) | ALPHA_LIT(0x1f) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, SLL | RA(src1) | RB(TMP_REG2) | RC(dst))); + } + return emit_sext32(compiler, op, dst); + } + op_imm = SLL; + op_reg = SLL; + break; + + case SLJIT_LSHR: + case SLJIT_MLSHR: + if (op & SLJIT_32) { + if (flags & SRC2_IMM) { + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src1) | ALPHA_LIT(0x0f) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, SRL | RA(TMP_REG1) | ALPHA_LIT(src2 & 0x1f) | RC(dst))); + } else { + /* Mask the count before src1 gets zero-extended (they may share a temp). */ + FAIL_IF(push_inst(compiler, AND | RA(src2r) | ALPHA_LIT(0x1f) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src1) | ALPHA_LIT(0x0f) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, SRL | RA(TMP_REG1) | RB(TMP_REG2) | RC(dst))); + } + return emit_sext32(compiler, op, dst); + } + op_imm = SRL; + op_reg = SRL; + break; + + case SLJIT_ASHR: + case SLJIT_MASHR: + if (op & SLJIT_32) { + if (flags & SRC2_IMM) { + FAIL_IF(push_inst(compiler, ADDL | RA(src1) | RB(TMP_ZERO) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, SRA | RA(TMP_REG1) | ALPHA_LIT(src2 & 0x1f) | RC(dst))); + } else { + FAIL_IF(push_inst(compiler, AND | RA(src2r) | ALPHA_LIT(0x1f) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, ADDL | RA(src1) | RB(TMP_ZERO) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, SRA | RA(TMP_REG1) | RB(TMP_REG2) | RC(dst))); + } + return emit_sext32(compiler, op, dst); + } + op_imm = SRA; + op_reg = SRA; + break; + + case SLJIT_ROTL: + case SLJIT_ROTR: { + sljit_s32 bits = (op & SLJIT_32) ? 32 : 64; + sljit_s32 is_left = (opcode == SLJIT_ROTL); + sljit_s32 in = src1; + sljit_ins first = is_left ? SLL : SRL; + sljit_ins second = is_left ? SRL : SLL; + + if (flags & SRC2_IMM) { + sljit_sw sh = src2 & (bits - 1); + if (op & SLJIT_32) { + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src1) | ALPHA_LIT(0x0f) | RC(TMP_REG1))); + in = TMP_REG1; + } + if (sh == 0) { + FAIL_IF(emit_mov(compiler, dst, src1)); + return emit_sext32(compiler, op, dst); + } + FAIL_IF(push_inst(compiler, first | RA(in) | ALPHA_LIT(sh) | RC(OTHER_FLAG))); + FAIL_IF(push_inst(compiler, second | RA(in) | ALPHA_LIT(bits - sh) | RC(dst))); + FAIL_IF(push_inst(compiler, BIS | RA(dst) | RB(OTHER_FLAG) | RC(dst))); + return emit_sext32(compiler, op, dst); + } + + if (op & SLJIT_32) { + /* Mask the count before src1 gets zero-extended (shared temp). */ + FAIL_IF(push_inst(compiler, AND | RA(src2r) | ALPHA_LIT(0x1f) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src1) | ALPHA_LIT(0x0f) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, LDA | RA(EQUAL_FLAG) | RB(TMP_ZERO) | DISP16(32))); + FAIL_IF(push_inst(compiler, SUBQ | RA(EQUAL_FLAG) | RB(TMP_REG2) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, first | RA(TMP_REG1) | RB(TMP_REG2) | RC(OTHER_FLAG))); + FAIL_IF(push_inst(compiler, second | RA(TMP_REG1) | RB(EQUAL_FLAG) | RC(dst))); + FAIL_IF(push_inst(compiler, BIS | RA(dst) | RB(OTHER_FLAG) | RC(dst))); + return emit_sext32(compiler, op, dst); + } + + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_ZERO) | RB(src2r) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, first | RA(in) | RB(src2r) | RC(OTHER_FLAG))); + FAIL_IF(push_inst(compiler, second | RA(in) | RB(EQUAL_FLAG) | RC(dst))); + return push_inst(compiler, BIS | RA(dst) | RB(OTHER_FLAG) | RC(dst)); + } + + default: + SLJIT_UNREACHABLE(); + return SLJIT_SUCCESS; + } + + /* Logical operations. Route SLJIT_SET_Z through EQUAL_FLAG and only write + the destination when it is actually used, so a live value the caller + keeps in dst (e.g. SLJIT_TMP_DEST_REG, which maps to TMP_REG2) survives + a flags-only (UNUSED_DEST) operation. */ + if (flags & SRC2_IMM) { + if (op & SLJIT_SET_Z) + FAIL_IF(push_inst(compiler, op_imm | RA(src1) | ALPHA_LIT(src2) | RC(EQUAL_FLAG))); + if (!(flags & UNUSED_DEST)) + FAIL_IF(push_inst(compiler, op_imm | RA(src1) | ALPHA_LIT(src2) | RC(dst))); + } else { + if (op & SLJIT_SET_Z) + FAIL_IF(push_inst(compiler, op_reg | RA(src1) | RB(src2r) | RC(EQUAL_FLAG))); + if (!(flags & UNUSED_DEST)) + FAIL_IF(push_inst(compiler, op_reg | RA(src1) | RB(src2r) | RC(dst))); + } + return SLJIT_SUCCESS; +} + +static sljit_s32 emit_op(struct sljit_compiler *compiler, sljit_s32 op, sljit_s32 flags, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_s32 dst_r = TMP_REG2; + sljit_s32 src1_r; + sljit_sw src2_r = 0; + sljit_s32 src2_tmp_reg = (GET_OPCODE(op) >= SLJIT_OP2_BASE && FAST_IS_REG(src1)) ? TMP_REG1 : TMP_REG2; + + if (dst == 0) { + SLJIT_ASSERT(HAS_FLAGS(op)); + flags |= UNUSED_DEST; + dst = TMP_REG2; + } else if (FAST_IS_REG(dst)) { + dst_r = dst; + flags |= REG_DEST; + if (flags & MOVE_OP) + src2_tmp_reg = dst_r; + } else if ((dst & SLJIT_MEM) && !getput_arg_fast(compiler, flags | ARG_TEST, TMP_REG1, dst, dstw)) + flags |= SLOW_DEST; + + if (flags & IMM_OP) { + if (src2 == SLJIT_IMM && src2w >= 0 && src2w <= 0xff) { + flags |= SRC2_IMM; + src2_r = src2w; + } else if ((flags & CUMULATIVE_OP) && src1 == SLJIT_IMM && src1w >= 0 && src1w <= 0xff) { + flags |= SRC2_IMM; + src2_r = src1w; + + src1 = src2; + src1w = src2w; + src2 = SLJIT_IMM; + } + } + + if (FAST_IS_REG(src1)) { + src1_r = src1; + flags |= REG1_SOURCE; + } else if (src1 == SLJIT_IMM) { + if (src1w) { + FAIL_IF(load_immediate(compiler, TMP_REG1, src1w, TMP_REG3)); + src1_r = TMP_REG1; + } else + src1_r = TMP_ZERO; + } else { + if (getput_arg_fast(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w)) + FAIL_IF(compiler->error); + else + flags |= SLOW_SRC1; + src1_r = TMP_REG1; + } + + if (FAST_IS_REG(src2)) { + src2_r = src2; + flags |= REG2_SOURCE; + if ((flags & (REG_DEST | MOVE_OP)) == MOVE_OP) + dst_r = (sljit_s32)src2_r; + } else if (src2 == SLJIT_IMM) { + if (!(flags & SRC2_IMM)) { + if (src2w) { + FAIL_IF(load_immediate(compiler, src2_tmp_reg, src2w, TMP_REG3)); + src2_r = src2_tmp_reg; + } else { + src2_r = TMP_ZERO; + if (flags & MOVE_OP) { + if (dst & SLJIT_MEM) + dst_r = 0; + else + op = SLJIT_MOV; + } + } + } + } else { + if (getput_arg_fast(compiler, flags | LOAD_DATA, src2_tmp_reg, src2, src2w)) + FAIL_IF(compiler->error); + else + flags |= SLOW_SRC2; + src2_r = src2_tmp_reg; + } + + if ((flags & (SLOW_SRC1 | SLOW_SRC2)) == (SLOW_SRC1 | SLOW_SRC2)) { + SLJIT_ASSERT(src2_r == TMP_REG2); + if ((flags & SLOW_DEST) && !can_cache(src2, src2w, src1, src1w) && can_cache(src2, src2w, dst, dstw)) { + FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w)); + FAIL_IF(getput_arg(compiler, flags | LOAD_DATA | MEM_USE_TMP2, TMP_REG2, src2, src2w)); + } else { + FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG2, src2, src2w)); + FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w)); + } + } else if (flags & SLOW_SRC1) + FAIL_IF(getput_arg(compiler, flags | LOAD_DATA, TMP_REG1, src1, src1w)); + else if (flags & SLOW_SRC2) + FAIL_IF(getput_arg(compiler, flags | LOAD_DATA | ((src1_r == TMP_REG1) ? MEM_USE_TMP2 : 0), src2_tmp_reg, src2, src2w)); + + FAIL_IF(emit_single_op(compiler, op, flags, dst_r, src1_r, src2_r)); + + if (dst & SLJIT_MEM) { + if (!(flags & SLOW_DEST)) { + getput_arg_fast(compiler, flags, dst_r, dst, dstw); + return compiler->error; + } + return getput_arg(compiler, flags, dst_r, dst, dstw); + } + + return SLJIT_SUCCESS; +} + +/* Alpha has no integer divide instruction. Synthesize DIV/DIVMOD with a + restoring binary long division. Only the backend temporaries are touched so + the caller's scratch/saved registers (other than R0/R1) are preserved. + Quotient goes to R0; DIVMOD also writes the remainder to R1, DIV leaves R1 + holding the divisor. */ +static sljit_s32 emit_div_mod(struct sljit_compiler *compiler, sljit_s32 op) +{ + sljit_s32 opcode = GET_OPCODE(op); + sljit_s32 is_32 = op & SLJIT_32; + sljit_s32 is_signed = (opcode == SLJIT_DIVMOD_SW || opcode == SLJIT_DIV_SW); + sljit_s32 is_mod = (opcode == SLJIT_DIVMOD_UW || opcode == SLJIT_DIVMOD_SW); + sljit_s32 a = SLJIT_R0, b = SLJIT_R1; + + /* Canonicalize 32 bit inputs to a full-width value. */ + if (is_32) { + if (is_signed) { + FAIL_IF(push_inst(compiler, ADDL | RA(a) | RB(TMP_ZERO) | RC(a))); + FAIL_IF(push_inst(compiler, ADDL | RA(b) | RB(TMP_ZERO) | RC(b))); + } else { + FAIL_IF(push_inst(compiler, ZAPNOT | RA(a) | ALPHA_LIT(0x0f) | RC(a))); + FAIL_IF(push_inst(compiler, ZAPNOT | RA(b) | ALPHA_LIT(0x0f) | RC(b))); + } + } + + if (is_signed) { + /* TMP_REG1 = |a|, TMP_REG2 = |b|; keep a_sign in R0, q_sign in R1. */ + FAIL_IF(push_inst(compiler, SRA | RA(a) | ALPHA_LIT(63) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, XOR | RA(a) | RB(EQUAL_FLAG) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_REG1) | RB(EQUAL_FLAG) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, SRA | RA(b) | ALPHA_LIT(63) | RC(OTHER_FLAG))); + FAIL_IF(push_inst(compiler, XOR | RA(b) | RB(OTHER_FLAG) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_REG2) | RB(OTHER_FLAG) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, XOR | RA(EQUAL_FLAG) | RB(OTHER_FLAG) | RC(b))); + FAIL_IF(emit_mov(compiler, a, EQUAL_FLAG)); + } else { + FAIL_IF(emit_mov(compiler, TMP_REG1, a)); + FAIL_IF(emit_mov(compiler, TMP_REG2, b)); + } + + /* Unsigned long division of TMP_REG1 by TMP_REG2. TMP_REG1 accumulates the + quotient as its bits shift out, TMP_REG3 holds the running remainder. */ + FAIL_IF(push_inst(compiler, BIS | RA(TMP_ZERO) | RB(TMP_ZERO) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, LDA | RA(OTHER_FLAG) | RB(TMP_ZERO) | DISP16(64))); + /* 11 instruction loop body; the trailing BNE branches back by -11. */ + FAIL_IF(push_inst(compiler, SRL | RA(TMP_REG1) | ALPHA_LIT(63) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, SLL | RA(TMP_REG3) | ALPHA_LIT(1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG3) | RB(EQUAL_FLAG) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, SLL | RA(TMP_REG1) | ALPHA_LIT(1) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, CMPULE | RA(TMP_REG2) | RB(TMP_REG3) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG1) | RB(EQUAL_FLAG) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_ZERO) | RB(EQUAL_FLAG) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, AND | RA(TMP_REG2) | RB(EQUAL_FLAG) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_REG3) | RB(EQUAL_FLAG) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, SUBQ | RA(OTHER_FLAG) | ALPHA_LIT(1) | RC(OTHER_FLAG))); + FAIL_IF(push_inst(compiler, BNE | RA(OTHER_FLAG) | ((sljit_ins)(-11) & 0x1fffff))); + + if (is_signed) { + /* Apply the result signs: quotient uses a_sign^b_sign, remainder a_sign. */ + FAIL_IF(push_inst(compiler, XOR | RA(TMP_REG1) | RB(b) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_REG1) | RB(b) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, XOR | RA(TMP_REG3) | RB(a) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_REG3) | RB(a) | RC(TMP_REG3))); + + if (is_mod) { + FAIL_IF(emit_mov(compiler, a, TMP_REG1)); + return emit_mov(compiler, b, TMP_REG3); + } + /* DIV: rebuild the signed divisor (b_sign = q_sign ^ a_sign). */ + FAIL_IF(push_inst(compiler, XOR | RA(b) | RB(a) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, XOR | RA(TMP_REG2) | RB(EQUAL_FLAG) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_REG2) | RB(EQUAL_FLAG) | RC(TMP_REG2))); + FAIL_IF(emit_mov(compiler, a, TMP_REG1)); + return emit_mov(compiler, b, TMP_REG2); + } + + if (is_mod) { + FAIL_IF(emit_mov(compiler, a, TMP_REG1)); + return emit_mov(compiler, b, TMP_REG3); + } + /* Unsigned DIV: R1 still holds the (possibly zero-extended) divisor. */ + return emit_mov(compiler, a, TMP_REG1); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compiler, sljit_s32 op) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op0(compiler, op)); + + switch (GET_OPCODE(op)) { + case SLJIT_BREAKPOINT: + return push_inst(compiler, OP(0x00) | 0x80); + case SLJIT_NOP: + return push_inst(compiler, NOP); + case SLJIT_LMUL_UW: + FAIL_IF(emit_mov(compiler, TMP_REG1, SLJIT_R1)); + FAIL_IF(push_inst(compiler, UMULH | RA(SLJIT_R0) | RB(TMP_REG1) | RC(SLJIT_R1))); + return push_inst(compiler, MULQ | RA(SLJIT_R0) | RB(TMP_REG1) | RC(SLJIT_R0)); + case SLJIT_LMUL_SW: + /* Signed high = UMULH(a,b) - (a<0?b:0) - (b<0?a:0). */ + FAIL_IF(emit_mov(compiler, TMP_REG1, SLJIT_R1)); + FAIL_IF(push_inst(compiler, UMULH | RA(SLJIT_R0) | RB(TMP_REG1) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, SRA | RA(SLJIT_R0) | ALPHA_LIT(63) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, AND | RA(TMP_REG3) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, SUBQ | RA(EQUAL_FLAG) | RB(TMP_REG3) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, SRA | RA(TMP_REG1) | ALPHA_LIT(63) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, AND | RA(TMP_REG3) | RB(SLJIT_R0) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, SUBQ | RA(EQUAL_FLAG) | RB(TMP_REG3) | RC(EQUAL_FLAG))); + FAIL_IF(push_inst(compiler, MULQ | RA(SLJIT_R0) | RB(TMP_REG1) | RC(SLJIT_R0))); + return emit_mov(compiler, SLJIT_R1, EQUAL_FLAG); + case SLJIT_DIVMOD_UW: + case SLJIT_DIVMOD_SW: + case SLJIT_DIV_UW: + case SLJIT_DIV_SW: + return emit_div_mod(compiler, op); + case SLJIT_MEMORY_BARRIER: + return push_inst(compiler, MB); + case SLJIT_ENDBR: + case SLJIT_SKIP_FRAMES_BEFORE_RETURN: + return SLJIT_SUCCESS; + } + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src, sljit_sw srcw) +{ + sljit_s32 flags = 0; + + CHECK_ERROR(); + CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw)); + ADJUST_LOCAL_OFFSET(dst, dstw); + ADJUST_LOCAL_OFFSET(src, srcw); + + if (op & SLJIT_32) + flags = INT_DATA | SIGNED_DATA; + + switch (GET_OPCODE(op)) { + case SLJIT_MOV: + case SLJIT_MOV_P: + return emit_op(compiler, SLJIT_MOV, WORD_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, srcw); + + case SLJIT_MOV_U32: + return emit_op(compiler, SLJIT_MOV_U32, INT_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_u32)srcw : srcw); + + case SLJIT_MOV_S32: + case SLJIT_MOV32: + return emit_op(compiler, SLJIT_MOV_S32, INT_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_s32)srcw : srcw); + + case SLJIT_MOV_U8: + return emit_op(compiler, op, BYTE_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_u8)srcw : srcw); + + case SLJIT_MOV_S8: + return emit_op(compiler, op, BYTE_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_s8)srcw : srcw); + + case SLJIT_MOV_U16: + return emit_op(compiler, op, HALF_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_u16)srcw : srcw); + + case SLJIT_MOV_S16: + return emit_op(compiler, op, HALF_DATA | SIGNED_DATA | MOVE_OP, dst, dstw, TMP_ZERO, 0, src, (src == SLJIT_IMM) ? (sljit_s16)srcw : srcw); + + case SLJIT_CLZ: + case SLJIT_CTZ: + case SLJIT_REV: + return emit_op(compiler, op, flags, dst, dstw, TMP_ZERO, 0, src, srcw); + + case SLJIT_REV_U16: + case SLJIT_REV_S16: + return emit_op(compiler, op, HALF_DATA, dst, dstw, TMP_ZERO, 0, src, srcw); + + case SLJIT_REV_U32: + case SLJIT_REV_S32: + return emit_op(compiler, op | SLJIT_32, INT_DATA, dst, dstw, TMP_ZERO, 0, src, srcw); + } + + SLJIT_UNREACHABLE(); + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_s32 flags = 0; + + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 0, dst, dstw, src1, src1w, src2, src2w)); + ADJUST_LOCAL_OFFSET(dst, dstw); + ADJUST_LOCAL_OFFSET(src1, src1w); + ADJUST_LOCAL_OFFSET(src2, src2w); + + if (op & SLJIT_32) { + flags |= INT_DATA | SIGNED_DATA; + if (src1 == SLJIT_IMM) + src1w = (sljit_s32)src1w; + if (src2 == SLJIT_IMM) + src2w = (sljit_s32)src2w; + } + + switch (GET_OPCODE(op)) { + case SLJIT_ADD: + case SLJIT_ADDC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD; + return emit_op(compiler, op, flags | CUMULATIVE_OP | IMM_OP, dst, dstw, src1, src1w, src2, src2w); + + case SLJIT_SUB: + case SLJIT_SUBC: + compiler->status_flags_state = SLJIT_CURRENT_FLAGS_SUB; + return emit_op(compiler, op, flags | IMM_OP, dst, dstw, src1, src1w, src2, src2w); + + case SLJIT_MUL: + compiler->status_flags_state = 0; + return emit_op(compiler, op, flags | CUMULATIVE_OP, dst, dstw, src1, src1w, src2, src2w); + + case SLJIT_AND: + case SLJIT_OR: + case SLJIT_XOR: + return emit_op(compiler, op, flags | CUMULATIVE_OP | IMM_OP, dst, dstw, src1, src1w, src2, src2w); + + case SLJIT_SHL: + case SLJIT_MSHL: + case SLJIT_LSHR: + case SLJIT_MLSHR: + case SLJIT_ASHR: + case SLJIT_MASHR: + case SLJIT_ROTL: + case SLJIT_ROTR: + if (src2 == SLJIT_IMM) { + if (op & SLJIT_32) + src2w &= 0x1f; + else + src2w &= 0x3f; + } + return emit_op(compiler, op, flags | IMM_OP, dst, dstw, src1, src1w, src2, src2w); + } + + SLJIT_UNREACHABLE(); + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2u(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2(compiler, op, 1, 0, 0, src1, src1w, src2, src2w)); + + SLJIT_SKIP_CHECKS(compiler); + return sljit_emit_op2(compiler, op, 0, 0, src1, src1w, src2, src2w); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2r(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst_reg, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_op2r(compiler, op, dst_reg, src1, src1w, src2, src2w)); + + switch (GET_OPCODE(op)) { + case SLJIT_MULADD: + SLJIT_SKIP_CHECKS(compiler); + FAIL_IF(sljit_emit_op2(compiler, SLJIT_MUL | (op & SLJIT_32), TMP_REG2, 0, src1, src1w, src2, src2w)); + FAIL_IF(push_inst(compiler, SELECT_OP(op, ADDQ, ADDL) | RA(dst_reg) | RB(TMP_REG2) | RC(dst_reg))); + return SLJIT_SUCCESS; + } + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_shift_into(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst_reg, + sljit_s32 src1_reg, + sljit_s32 src2_reg, + sljit_s32 src3, sljit_sw src3w) +{ + sljit_s32 is_left; + sljit_s32 inp_flags = ((op & SLJIT_32) ? INT_DATA : WORD_DATA) | LOAD_DATA; + sljit_sw bit_length = (op & SLJIT_32) ? 32 : 64; + + CHECK_ERROR(); + CHECK(check_sljit_emit_shift_into(compiler, op, dst_reg, src1_reg, src2_reg, src3, src3w)); + + is_left = (GET_OPCODE(op) == SLJIT_SHL || GET_OPCODE(op) == SLJIT_MSHL); + + if (src1_reg == src2_reg) { + SLJIT_SKIP_CHECKS(compiler); + return sljit_emit_op2(compiler, (is_left ? SLJIT_ROTL : SLJIT_ROTR) | (op & SLJIT_32), dst_reg, 0, src1_reg, 0, src3, src3w); + } + + ADJUST_LOCAL_OFFSET(src3, src3w); + + if (op & SLJIT_32) { + /* Zero-extend src2 so the shifted-in bits come from the low 32. */ + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src2_reg) | ALPHA_LIT(0x0f) | RC(EQUAL_FLAG))); + src2_reg = EQUAL_FLAG; + if (!is_left) { + /* A right shift needs a zero-extended low word so SRL brings in + zeros instead of the sign-extended upper bits of src1. */ + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src1_reg) | ALPHA_LIT(0x0f) | RC(OTHER_FLAG))); + src1_reg = OTHER_FLAG; + } + } + + if (src3 == SLJIT_IMM) { + src3w &= bit_length - 1; + + if (src3w == 0) { + FAIL_IF(emit_mov(compiler, dst_reg, src1_reg)); + return emit_sext32(compiler, op, dst_reg); + } + + if (is_left) { + FAIL_IF(push_inst(compiler, SLL | RA(src1_reg) | ALPHA_LIT(src3w) | RC(dst_reg))); + FAIL_IF(push_inst(compiler, SRL | RA(src2_reg) | ALPHA_LIT(bit_length - src3w) | RC(TMP_REG1))); + } else { + FAIL_IF(push_inst(compiler, SRL | RA(src1_reg) | ALPHA_LIT(src3w) | RC(dst_reg))); + FAIL_IF(push_inst(compiler, SLL | RA(src2_reg) | ALPHA_LIT(bit_length - src3w) | RC(TMP_REG1))); + } + FAIL_IF(push_inst(compiler, BIS | RA(dst_reg) | RB(TMP_REG1) | RC(dst_reg))); + return emit_sext32(compiler, op, dst_reg); + } + + if (src3 & SLJIT_MEM) { + FAIL_IF(emit_op_mem(compiler, inp_flags, TMP_REG2, src3, src3w)); + src3 = TMP_REG2; + } else if (dst_reg == src3) { + FAIL_IF(emit_mov(compiler, TMP_REG2, src3)); + src3 = TMP_REG2; + } + + if (op & SLJIT_32) { + FAIL_IF(push_inst(compiler, AND | RA(src3) | ALPHA_LIT(0x1f) | RC(TMP_REG2))); + src3 = TMP_REG2; + } + + if (is_left) { + FAIL_IF(push_inst(compiler, SLL | RA(src1_reg) | RB(src3) | RC(dst_reg))); + FAIL_IF(push_inst(compiler, SRL | RA(src2_reg) | ALPHA_LIT(1) | RC(TMP_REG1))); + } else { + FAIL_IF(push_inst(compiler, SRL | RA(src1_reg) | RB(src3) | RC(dst_reg))); + FAIL_IF(push_inst(compiler, SLL | RA(src2_reg) | ALPHA_LIT(1) | RC(TMP_REG1))); + } + + if (!(op & SLJIT_SHIFT_INTO_NON_ZERO) || (op & SLJIT_32)) { + /* The 32 bit path always uses the (src2 >> 1) form so the complement + count is derived with the 5 bit mask. */ + FAIL_IF(push_inst(compiler, XOR | RA(src3) | ALPHA_LIT(bit_length - 1) | RC(TMP_REG2))); + if (is_left) + FAIL_IF(push_inst(compiler, SRL | RA(TMP_REG1) | RB(TMP_REG2) | RC(TMP_REG1))); + else + FAIL_IF(push_inst(compiler, SLL | RA(TMP_REG1) | RB(TMP_REG2) | RC(TMP_REG1))); + } else { + FAIL_IF(push_inst(compiler, SUBQ | RA(TMP_ZERO) | RB(src3) | RC(TMP_REG2))); + if (is_left) + FAIL_IF(push_inst(compiler, SRL | RA(src2_reg) | RB(TMP_REG2) | RC(TMP_REG1))); + else + FAIL_IF(push_inst(compiler, SLL | RA(src2_reg) | RB(TMP_REG2) | RC(TMP_REG1))); + } + + FAIL_IF(push_inst(compiler, BIS | RA(dst_reg) | RB(TMP_REG1) | RC(dst_reg))); + return emit_sext32(compiler, op, dst_reg); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w, + sljit_sw shift_arg) +{ + sljit_s32 dst_r, tmp_r; + + CHECK_ERROR(); + CHECK(check_sljit_emit_op2_shift(compiler, op, dst, dstw, src1, src1w, src2, src2w, shift_arg)); + ADJUST_LOCAL_OFFSET(dst, dstw); + ADJUST_LOCAL_OFFSET(src1, src1w); + ADJUST_LOCAL_OFFSET(src2, src2w); + + shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); + + if (src2 == SLJIT_IMM) { + src2w = src2w << shift_arg; + shift_arg = 0; + } + + if (shift_arg == 0) { + SLJIT_SKIP_CHECKS(compiler); + return sljit_emit_op2(compiler, GET_OPCODE(op), dst, dstw, src1, src1w, src2, src2w); + } + + if (src2 & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, WORD_DATA | LOAD_DATA, TMP_REG2, src2, src2w)); + src2 = TMP_REG2; + } + + if (src1 == SLJIT_IMM) { + FAIL_IF(load_immediate(compiler, TMP_REG1, src1w, TMP_REG3)); + src1 = TMP_REG1; + } else if (src1 & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, WORD_DATA | LOAD_DATA, TMP_REG1, src1, src1w)); + src1 = TMP_REG1; + } + + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2; + tmp_r = (src1 == TMP_REG1) ? TMP_REG2 : TMP_REG1; + + FAIL_IF(push_inst(compiler, SLL | RA(src2) | ALPHA_LIT(shift_arg) | RC(tmp_r))); + FAIL_IF(push_inst(compiler, ADDQ | RA(src1) | RB(tmp_r) | RC(dst_r))); + + if (dst & SLJIT_MEM) + return emit_op_mem2(compiler, WORD_DATA, dst_r, dst, dstw); + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src, sljit_sw srcw) +{ + sljit_s32 base; + + CHECK_ERROR(); + CHECK(check_sljit_emit_op_src(compiler, op, src, srcw)); + ADJUST_LOCAL_OFFSET(src, srcw); + + switch (op) { + case SLJIT_FAST_RETURN: + if (FAST_IS_REG(src)) + FAIL_IF(emit_mov(compiler, RETURN_ADDR_REG, src)); + else + FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, RETURN_ADDR_REG, src, srcw)); + + return push_inst(compiler, JMP | RA(TMP_ZERO) | RB(RETURN_ADDR_REG)); + case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN: + return SLJIT_SUCCESS; + case SLJIT_PREFETCH_L1: + case SLJIT_PREFETCH_L2: + case SLJIT_PREFETCH_L3: + case SLJIT_PREFETCH_ONCE: + /* PREFETCH = LDL R31, disp(Rb). This is a hint which is discarded when + the address is invalid, so the address is only computed, never + dereferenced by an actual load. */ + base = src & REG_MASK; + + if (src & OFFS_REG_MASK) { + srcw &= 0x3; + + if (srcw) { + FAIL_IF(push_inst(compiler, SLL | RA(OFFS_REG(src)) | ALPHA_LIT(srcw) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, ADDQ | RA(TMP_REG1) | RB(base) | RC(TMP_REG1))); + } else + FAIL_IF(push_inst(compiler, ADDQ | RA(base) | RB(OFFS_REG(src)) | RC(TMP_REG1))); + + return push_inst(compiler, LDL | RA(TMP_ZERO) | RB(TMP_REG1) | DISP16(0)); + } + + if (srcw >= SIMM_MIN && srcw <= SIMM_MAX) + return push_inst(compiler, LDL | RA(TMP_ZERO) | RB(base) | DISP16(srcw)); + + FAIL_IF(load_immediate(compiler, TMP_REG1, TO_ARGW_HI(srcw), TMP_REG3)); + + if (base != 0) + FAIL_IF(push_inst(compiler, ADDQ | RA(TMP_REG1) | RB(base) | RC(TMP_REG1))); + + return push_inst(compiler, LDL | RA(TMP_ZERO) | RB(TMP_REG1) | DISP16(srcw - TO_ARGW_HI(srcw))); + } + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_dst(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw) +{ + sljit_s32 dst_r; + + CHECK_ERROR(); + CHECK(check_sljit_emit_op_dst(compiler, op, dst, dstw)); + ADJUST_LOCAL_OFFSET(dst, dstw); + + switch (op) { + case SLJIT_FAST_ENTER: + if (FAST_IS_REG(dst)) + return emit_mov(compiler, dst, RETURN_ADDR_REG); + + SLJIT_ASSERT(RETURN_ADDR_REG == TMP_REG2); + break; + case SLJIT_GET_RETURN_ADDRESS: + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2; + FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, dst_r, SLJIT_MEM1(SLJIT_SP), compiler->local_size - SSIZE_OF(sw))); + break; + } + + if (dst & SLJIT_MEM) + return emit_op_mem(compiler, WORD_DATA, TMP_REG2, dst, dstw); + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_register_index(sljit_s32 type, sljit_s32 reg) +{ + CHECK_REG_INDEX(check_sljit_get_register_index(type, reg)); + + if (type == SLJIT_GP_REGISTER) + return reg_map[reg]; + + return freg_map[reg]; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler, + void *instruction, sljit_u32 size) +{ + SLJIT_UNUSED_ARG(size); + + CHECK_ERROR(); + CHECK(check_sljit_emit_op_custom(compiler, instruction, size)); + + return push_inst(compiler, *(sljit_ins*)instruction); +} + +/* --------------------------------------------------------------------- */ +/* Floating point operators */ +/* --------------------------------------------------------------------- */ + +#define FLOAT_DATA(op) (DOUBLE_DATA | ((op & SLJIT_32) >> 7)) + +static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_sw_from_f64(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src, sljit_sw srcw) +{ + sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2; + sljit_s32 is_i32 = (GET_OPCODE(op) == SLJIT_CONV_S32_FROM_F64); + /* Double bit patterns for the saturation thresholds 2^(w-1). */ + sljit_sw hi_bits = is_i32 ? (sljit_sw)0x41e0000000000000 : (sljit_sw)0x43e0000000000000; + sljit_sw lo_bits = is_i32 ? (sljit_sw)0xc1e0000000000000 : (sljit_sw)0xc3e0000000000000; + sljit_sw sat_max = is_i32 ? (sljit_sw)0x7fffffff : (sljit_sw)0x7fffffffffffffff; + sljit_sw sat_min = is_i32 ? (sljit_sw)(sljit_s32)0x80000000 : (sljit_sw)((sljit_uw)1 << 63); + + if (src & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src, srcw)); + src = TMP_FREG1; + } + + /* In-range truncation toward zero (valid while the value fits). */ + FAIL_IF(push_inst(compiler, CVTTQ | FB(src) | FC(TMP_FREG2))); + FAIL_IF(emit_float_to_int(compiler, 0, dst_r, TMP_FREG2)); + + /* Saturate high: src >= 2^(w-1) -> max. CMPTLE leaves 2.0/0.0. */ + FAIL_IF(load_immediate(compiler, TMP_REG1, hi_bits, TMP_REG3)); + FAIL_IF(emit_int_to_float(compiler, 0, TMP_FREG2, TMP_REG1)); + FAIL_IF(push_inst(compiler, CMPTLE | FA(TMP_FREG2) | FB(src) | FC(TMP_FREG2))); + FAIL_IF(emit_float_to_int(compiler, 0, OTHER_FLAG, TMP_FREG2)); + FAIL_IF(load_immediate(compiler, TMP_REG1, sat_max, TMP_REG3)); + FAIL_IF(push_inst(compiler, CMOVNE | RA(OTHER_FLAG) | RB(TMP_REG1) | RC(dst_r))); + + /* Saturate low: src < -2^(w-1) -> min. */ + FAIL_IF(load_immediate(compiler, TMP_REG1, lo_bits, TMP_REG3)); + FAIL_IF(emit_int_to_float(compiler, 0, TMP_FREG2, TMP_REG1)); + FAIL_IF(push_inst(compiler, CMPTLT | FA(src) | FB(TMP_FREG2) | FC(TMP_FREG2))); + FAIL_IF(emit_float_to_int(compiler, 0, OTHER_FLAG, TMP_FREG2)); + FAIL_IF(load_immediate(compiler, TMP_REG1, sat_min, TMP_REG3)); + FAIL_IF(push_inst(compiler, CMOVNE | RA(OTHER_FLAG) | RB(TMP_REG1) | RC(dst_r))); + + /* NaN -> 0 (an ordered self-compare is false only for NaN). */ + FAIL_IF(push_inst(compiler, CMPTEQ | FA(src) | FB(src) | FC(TMP_FREG2))); + FAIL_IF(emit_float_to_int(compiler, 0, OTHER_FLAG, TMP_FREG2)); + FAIL_IF(push_inst(compiler, CMOVEQ | RA(OTHER_FLAG) | RB(TMP_ZERO) | RC(dst_r))); + + if (dst & SLJIT_MEM) + return emit_op_mem2(compiler, (is_i32 ? INT_DATA : WORD_DATA), dst_r, dst, dstw); + return SLJIT_SUCCESS; +} + +static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_sw(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src, sljit_sw srcw) +{ + sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; + + if (src & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, ((GET_OPCODE(op) == SLJIT_CONV_F64_FROM_S32) ? INT_DATA : WORD_DATA) | LOAD_DATA, TMP_REG1, src, srcw)); + src = TMP_REG1; + } else if (src == SLJIT_IMM) { + if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_S32) + srcw = (sljit_s32)srcw; + FAIL_IF(load_immediate(compiler, TMP_REG1, srcw, TMP_REG3)); + src = TMP_REG1; + } + + FAIL_IF(emit_int_to_float(compiler, 0, TMP_FREG1, src)); + FAIL_IF(push_inst(compiler, ((op & SLJIT_32) ? CVTQS : CVTQT) | FB(TMP_FREG1) | FC(dst_r))); + + if (dst & SLJIT_MEM) + return emit_op_mem2(compiler, FLOAT_DATA(op), dst_r, dst, dstw); + return SLJIT_SUCCESS; +} + +static SLJIT_INLINE sljit_s32 sljit_emit_fop1_conv_f64_from_uw(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src, sljit_sw srcw) +{ + sljit_s32 dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; + sljit_ins cvt = (op & SLJIT_32) ? CVTQS : CVTQT; + sljit_ins add = (op & SLJIT_32) ? ADDS : ADDT; + + if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_U32) { + if (src & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, INT_DATA | LOAD_DATA, TMP_REG1, src, srcw)); + src = TMP_REG1; + } else if (src == SLJIT_IMM) { + FAIL_IF(load_immediate(compiler, TMP_REG1, (sljit_sw)(sljit_uw)(sljit_u32)srcw, TMP_REG3)); + src = TMP_REG1; + } + + /* An unsigned 32 bit value is a small positive 64 bit integer, so the + signed conversion is exact once the low word is zero-extended. */ + FAIL_IF(push_inst(compiler, ZAPNOT | RA(src) | ALPHA_LIT(0x0f) | RC(TMP_REG1))); + FAIL_IF(emit_int_to_float(compiler, 0, TMP_FREG1, TMP_REG1)); + FAIL_IF(push_inst(compiler, cvt | FB(TMP_FREG1) | FC(dst_r))); + + if (dst & SLJIT_MEM) + return emit_op_mem2(compiler, FLOAT_DATA(op), dst_r, dst, dstw); + return SLJIT_SUCCESS; + } + + if (src & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, WORD_DATA | LOAD_DATA, TMP_REG1, src, srcw)); + src = TMP_REG1; + } else if (src == SLJIT_IMM) { + FAIL_IF(load_immediate(compiler, TMP_REG1, srcw, TMP_REG3)); + src = TMP_REG1; + } + + /* While bit 63 is clear the signed conversion is exact. */ + FAIL_IF(emit_int_to_float(compiler, 0, TMP_FREG1, src)); + FAIL_IF(push_inst(compiler, cvt | FB(TMP_FREG1) | FC(dst_r))); + + /* Otherwise convert (src >> 1) | (src & 1) (round-to-odd keeps the dropped + bit sticky) and double the result. The branch skips the fixup, which is + five instructions plus the integer to float transfer. */ + FAIL_IF(push_inst(compiler, BGE | RA(src) | ((sljit_ins)(5 + int_float_move_size()) & 0x1fffff))); + FAIL_IF(push_inst(compiler, SRL | RA(src) | ALPHA_LIT(1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, AND | RA(src) | ALPHA_LIT(1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG2))); + FAIL_IF(emit_int_to_float(compiler, 0, TMP_FREG1, TMP_REG2)); + FAIL_IF(push_inst(compiler, cvt | FB(TMP_FREG1) | FC(dst_r))); + FAIL_IF(push_inst(compiler, add | FA(dst_r) | FB(dst_r) | FC(dst_r))); + + if (dst & SLJIT_MEM) + return emit_op_mem2(compiler, FLOAT_DATA(op), dst_r, dst, dstw); + return SLJIT_SUCCESS; +} + +static SLJIT_INLINE sljit_s32 sljit_emit_fop1_cmp(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_ins inst; + + if (src1 & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)); + src1 = TMP_FREG1; + } + + if (src2 & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)); + src2 = TMP_FREG2; + } + + /* Compute a canonical comparison per negation pair into TMP_FREG1 + (2.0 = true, 0.0 = false). get_jump_instruction picks the branch + polarity (BNE for the positive member, BEQ for its negation). */ + switch (GET_FLAG_TYPE(op)) { + case SLJIT_F_EQUAL: + case SLJIT_F_NOT_EQUAL: + case SLJIT_ORDERED_EQUAL: + case SLJIT_UNORDERED_OR_NOT_EQUAL: + inst = CMPTEQ | FA(src1) | FB(src2) | FC(TMP_FREG1); + break; + case SLJIT_F_LESS: + case SLJIT_F_GREATER_EQUAL: + case SLJIT_ORDERED_LESS: + case SLJIT_UNORDERED_OR_GREATER_EQUAL: + inst = CMPTLT | FA(src1) | FB(src2) | FC(TMP_FREG1); + break; + case SLJIT_F_GREATER: + case SLJIT_F_LESS_EQUAL: + case SLJIT_ORDERED_GREATER: + case SLJIT_UNORDERED_OR_LESS_EQUAL: + inst = CMPTLT | FA(src2) | FB(src1) | FC(TMP_FREG1); + break; + case SLJIT_ORDERED_LESS_EQUAL: + case SLJIT_UNORDERED_OR_GREATER: + inst = CMPTLE | FA(src1) | FB(src2) | FC(TMP_FREG1); + break; + case SLJIT_ORDERED_GREATER_EQUAL: + case SLJIT_UNORDERED_OR_LESS: + inst = CMPTLE | FA(src2) | FB(src1) | FC(TMP_FREG1); + break; + case SLJIT_ORDERED_NOT_EQUAL: + case SLJIT_UNORDERED_OR_EQUAL: + /* ordered && a != b <=> (a < b) || (a > b). */ + FAIL_IF(push_inst(compiler, CMPTLT | FA(src1) | FB(src2) | FC(TMP_FREG1))); + FAIL_IF(push_inst(compiler, CMPTLT | FA(src2) | FB(src1) | FC(TMP_FREG2))); + FAIL_IF(emit_float_to_int(compiler, 0, OTHER_FLAG, TMP_FREG1)); + FAIL_IF(emit_float_to_int(compiler, 0, TMP_REG1, TMP_FREG2)); + FAIL_IF(push_inst(compiler, BIS | RA(OTHER_FLAG) | RB(TMP_REG1) | RC(OTHER_FLAG))); + /* Normalize the 2.0 bit pattern to a clean 0/1. */ + return push_inst(compiler, CMPULT | RA(TMP_ZERO) | RB(OTHER_FLAG) | RC(OTHER_FLAG)); + default: /* SLJIT_ORDERED, SLJIT_UNORDERED */ + inst = CMPTUN | FA(src1) | FB(src2) | FC(TMP_FREG1); + break; + } + + FAIL_IF(push_inst(compiler, inst)); + /* Move the boolean (2.0 or 0.0) result into OTHER_FLAG and normalize to 0/1. */ + FAIL_IF(emit_float_to_int(compiler, 0, OTHER_FLAG, TMP_FREG1)); + return push_inst(compiler, CMPULT | RA(TMP_ZERO) | RB(OTHER_FLAG) | RC(OTHER_FLAG)); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop1(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src, sljit_sw srcw) +{ + sljit_s32 dst_r; + + CHECK_ERROR(); + SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw); + + if (GET_OPCODE(op) == SLJIT_CONV_F64_FROM_F32) + op ^= SLJIT_32; + + dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG1; + + if (src & SLJIT_MEM) { + FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, dst_r, src, srcw)); + src = dst_r; + } + + switch (GET_OPCODE(op)) { + case SLJIT_MOV_F64: + if (src != dst_r) { + if (!(dst & SLJIT_MEM)) + FAIL_IF(push_inst(compiler, CPYS | FA(src) | FB(src) | FC(dst_r))); + else + dst_r = src; + } + break; + case SLJIT_NEG_F64: + FAIL_IF(push_inst(compiler, CPYSN | FA(src) | FB(src) | FC(dst_r))); + break; + case SLJIT_ABS_F64: + FAIL_IF(push_inst(compiler, CPYS | FA(TMP_ZERO) | FB(src) | FC(dst_r))); + break; + case SLJIT_CONV_F64_FROM_F32: + /* Value already held in double format after the LDS load. */ + if (src != dst_r) + FAIL_IF(push_inst(compiler, CPYS | FA(src) | FB(src) | FC(dst_r))); + op ^= SLJIT_32; + break; + } + + if (dst & SLJIT_MEM) + return emit_op_mem2(compiler, FLOAT_DATA(op), dst_r, dst, dstw); + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fop2(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2, sljit_sw src2w) +{ + sljit_s32 dst_r, flags = 0; + + CHECK_ERROR(); + CHECK(check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w)); + ADJUST_LOCAL_OFFSET(dst, dstw); + ADJUST_LOCAL_OFFSET(src1, src1w); + ADJUST_LOCAL_OFFSET(src2, src2w); + + dst_r = FAST_IS_REG(dst) ? dst : TMP_FREG2; + + if (src1 & SLJIT_MEM) { + if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)) { + FAIL_IF(compiler->error); + src1 = TMP_FREG1; + } else + flags |= SLOW_SRC1; + } + + if (src2 & SLJIT_MEM) { + if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)) { + FAIL_IF(compiler->error); + src2 = TMP_FREG2; + } else + flags |= SLOW_SRC2; + } + + if ((flags & (SLOW_SRC1 | SLOW_SRC2)) == (SLOW_SRC1 | SLOW_SRC2)) { + if ((dst & SLJIT_MEM) && !can_cache(src1, src1w, src2, src2w) && can_cache(src1, src1w, dst, dstw)) { + FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)); + FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)); + } else { + FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)); + FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)); + } + } else if (flags & SLOW_SRC1) + FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)); + else if (flags & SLOW_SRC2) + FAIL_IF(getput_arg(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)); + + if (flags & SLOW_SRC1) + src1 = TMP_FREG1; + if (flags & SLOW_SRC2) + src2 = TMP_FREG2; + + switch (GET_OPCODE(op)) { + case SLJIT_ADD_F64: + FAIL_IF(push_inst(compiler, ((op & SLJIT_32) ? ADDS : ADDT) | FA(src1) | FB(src2) | FC(dst_r))); + break; + case SLJIT_SUB_F64: + FAIL_IF(push_inst(compiler, ((op & SLJIT_32) ? SUBS : SUBT) | FA(src1) | FB(src2) | FC(dst_r))); + break; + case SLJIT_MUL_F64: + FAIL_IF(push_inst(compiler, ((op & SLJIT_32) ? MULS : MULT) | FA(src1) | FB(src2) | FC(dst_r))); + break; + case SLJIT_DIV_F64: + FAIL_IF(push_inst(compiler, ((op & SLJIT_32) ? DIVS : DIVT) | FA(src1) | FB(src2) | FC(dst_r))); + break; + case SLJIT_COPYSIGN_F64: + return push_inst(compiler, CPYS | FA(src2) | FB(src1) | FC(dst_r)); + } + + if (dst_r != dst) + FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op), TMP_FREG2, dst, dstw)); + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fset32(struct sljit_compiler *compiler, + sljit_s32 freg, sljit_f32 value) +{ + union { + sljit_s32 imm; + sljit_f32 value; + } u; + + CHECK_ERROR(); + CHECK(check_sljit_emit_fset32(compiler, freg, value)); + + u.value = value; + + if (u.imm == 0) + return emit_int_to_float(compiler, 1, freg, TMP_ZERO); + + FAIL_IF(load_immediate(compiler, TMP_REG1, u.imm, TMP_REG3)); + return emit_int_to_float(compiler, 1, freg, TMP_REG1); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fset64(struct sljit_compiler *compiler, + sljit_s32 freg, sljit_f64 value) +{ + union { + sljit_sw imm; + sljit_f64 value; + } u; + + CHECK_ERROR(); + CHECK(check_sljit_emit_fset64(compiler, freg, value)); + + u.value = value; + + if (u.imm == 0) + return emit_int_to_float(compiler, 0, freg, TMP_ZERO); + + FAIL_IF(load_immediate(compiler, TMP_REG1, u.imm, TMP_REG3)); + return emit_int_to_float(compiler, 0, freg, TMP_REG1); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fcopy(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 freg, sljit_s32 reg) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_fcopy(compiler, op, freg, reg)); + + if (GET_OPCODE(op) == SLJIT_COPY_TO_F64) + return emit_int_to_float(compiler, op & SLJIT_32, freg, reg); + + return emit_float_to_int(compiler, op & SLJIT_32, reg, freg); +} + +/* --------------------------------------------------------------------- */ +/* Conditional instructions */ +/* --------------------------------------------------------------------- */ + +SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compiler *compiler) +{ + struct sljit_label *label; + + CHECK_ERROR_PTR(); + CHECK_PTR(check_sljit_emit_label(compiler)); + + if (compiler->last_label && compiler->last_label->size == compiler->size) + return compiler->last_label; + + label = (struct sljit_label*)ensure_abuf(compiler, sizeof(struct sljit_label)); + PTR_FAIL_IF(!label); + set_label(label, compiler); + return label; +} + +SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_aligned_label(struct sljit_compiler *compiler, + sljit_s32 alignment, struct sljit_read_only_buffer *buffers) +{ + sljit_uw mask = 0, i; + struct sljit_label *label = NULL; + struct sljit_label *next_label; + struct sljit_extended_label *ext_label; + + CHECK_ERROR_PTR(); + CHECK_PTR(check_sljit_emit_aligned_label(compiler, alignment, buffers)); + + sljit_reset_read_only_buffers(buffers); + + if (alignment <= SLJIT_LABEL_ALIGN_4) { + SLJIT_SKIP_CHECKS(compiler); + label = sljit_emit_label(compiler); + PTR_FAIL_IF(!label); + } else { + mask = ((sljit_uw)1 << alignment) - sizeof(sljit_ins); + + for (i = (mask >> 2); i != 0; i--) + PTR_FAIL_IF(push_inst(compiler, NOP)); + } + + if (label == NULL) { + ext_label = (struct sljit_extended_label*)ensure_abuf(compiler, sizeof(struct sljit_extended_label)); + PTR_FAIL_IF(!ext_label); + set_extended_label(ext_label, compiler, SLJIT_LABEL_ALIGNED, mask); + label = &ext_label->label; + } + + if (buffers == NULL) + return label; + + next_label = label; + + while (1) { + buffers->u.label = next_label; + + for (i = (buffers->size + 3) >> 2; i > 0; i--) + PTR_FAIL_IF(push_inst(compiler, NOP)); + + buffers = buffers->next; + + if (buffers == NULL) + break; + + SLJIT_SKIP_CHECKS(compiler); + next_label = sljit_emit_label(compiler); + PTR_FAIL_IF(!next_label); + } + + return label; +} + +/* Returns the branch instruction that jumps to the target when the + condition is TRUE, testing the appropriate flag register. */ +static sljit_ins get_jump_instruction(sljit_s32 type) +{ + switch (type) { + case SLJIT_EQUAL: + return BEQ | RA(EQUAL_FLAG); + case SLJIT_NOT_EQUAL: + return BNE | RA(EQUAL_FLAG); + case SLJIT_LESS: + case SLJIT_GREATER: + case SLJIT_SIG_LESS: + case SLJIT_SIG_GREATER: + case SLJIT_OVERFLOW: + case SLJIT_CARRY: + case SLJIT_ATOMIC_STORED: + case SLJIT_F_EQUAL: + case SLJIT_ORDERED_EQUAL: + case SLJIT_F_LESS: + case SLJIT_ORDERED_LESS: + case SLJIT_F_GREATER: + case SLJIT_ORDERED_GREATER: + case SLJIT_ORDERED_LESS_EQUAL: + case SLJIT_ORDERED_GREATER_EQUAL: + case SLJIT_ORDERED_NOT_EQUAL: + case SLJIT_UNORDERED: + return BNE | RA(OTHER_FLAG); + case SLJIT_GREATER_EQUAL: + case SLJIT_LESS_EQUAL: + case SLJIT_SIG_GREATER_EQUAL: + case SLJIT_SIG_LESS_EQUAL: + case SLJIT_NOT_OVERFLOW: + case SLJIT_NOT_CARRY: + case SLJIT_ATOMIC_NOT_STORED: + case SLJIT_F_NOT_EQUAL: + case SLJIT_UNORDERED_OR_NOT_EQUAL: + case SLJIT_F_GREATER_EQUAL: + case SLJIT_UNORDERED_OR_GREATER_EQUAL: + case SLJIT_F_LESS_EQUAL: + case SLJIT_UNORDERED_OR_LESS_EQUAL: + case SLJIT_UNORDERED_OR_GREATER: + case SLJIT_UNORDERED_OR_LESS: + case SLJIT_UNORDERED_OR_EQUAL: + case SLJIT_ORDERED: + return BEQ | RA(OTHER_FLAG); + default: + return 0; + } +} + +SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_s32 type) +{ + struct sljit_jump *jump; + sljit_ins inst; + + CHECK_ERROR_PTR(); + CHECK_PTR(check_sljit_emit_jump(compiler, type)); + + jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); + PTR_FAIL_IF(!jump); + set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP); + type &= 0xff; + + inst = get_jump_instruction(type); + + if (inst != 0) { + PTR_FAIL_IF(push_inst(compiler, inst)); + jump->flags |= IS_COND; + } + + if (type >= SLJIT_FAST_CALL) + jump->flags |= IS_CALL; + + jump->addr = compiler->size; + PTR_FAIL_IF(push_inst(compiler, 0)); + compiler->size += JUMP_MAX_SIZE - 1; + return jump; +} + +/* Move call arguments from the sljit scratch registers into the Alpha + argument registers r16-r21 / f16-f21 (positional). */ +static sljit_s32 emit_call_args(struct sljit_compiler *compiler, sljit_s32 arg_types) +{ + sljit_s32 word_arg = 0, float_arg = 0, pos = 0; + + arg_types >>= SLJIT_ARG_SHIFT; + + while (arg_types) { + if (pos < 6) { + switch (arg_types & SLJIT_ARG_MASK) { + case SLJIT_ARG_TYPE_F64: + case SLJIT_ARG_TYPE_F32: + FAIL_IF(push_inst(compiler, CPYS | FA(SLJIT_FR0 + float_arg) | FB(SLJIT_FR0 + float_arg) | (sljit_ins)(16 + pos))); + float_arg++; + break; + default: + FAIL_IF(push_inst(compiler, BIS | RA(SLJIT_R0 + word_arg) | RB(TMP_ZERO) | (sljit_ins)(16 + pos))); + word_arg++; + break; + } + } else + return SLJIT_ERR_UNSUPPORTED; + + pos++; + arg_types >>= SLJIT_ARG_SHIFT; + } + + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_call(struct sljit_compiler *compiler, sljit_s32 type, + sljit_s32 arg_types) +{ + CHECK_ERROR_PTR(); + CHECK_PTR(check_sljit_emit_call(compiler, type, arg_types)); + + if ((type & 0xff) != SLJIT_CALL_REG_ARG) + PTR_FAIL_IF(emit_call_args(compiler, arg_types)); + + if (type & SLJIT_CALL_RETURN) { + PTR_FAIL_IF(emit_stack_frame_release(compiler, 0)); + type = SLJIT_JUMP | (type & SLJIT_REWRITABLE_JUMP); + } + + SLJIT_SKIP_CHECKS(compiler); + return sljit_emit_jump(compiler, type); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compiler, sljit_s32 type, sljit_s32 src, sljit_sw srcw) +{ + struct sljit_jump *jump; + + CHECK_ERROR(); + CHECK(check_sljit_emit_ijump(compiler, type, src, srcw)); + + if (src != SLJIT_IMM) { + if (src & SLJIT_MEM) { + ADJUST_LOCAL_OFFSET(src, srcw); + FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_REG3, src, srcw)); + src = TMP_REG3; + } else if (src != TMP_REG3) + FAIL_IF(emit_mov(compiler, TMP_REG3, src)); + + if (type >= SLJIT_FAST_CALL) + return push_inst(compiler, JSR | RA(RETURN_ADDR_REG) | RB(TMP_REG3)); + return push_inst(compiler, JMP | RA(TMP_ZERO) | RB(TMP_REG3)); + } + + jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); + FAIL_IF(!jump); + set_jump(jump, compiler, JUMP_ADDR | ((type >= SLJIT_FAST_CALL) ? IS_CALL : 0)); + jump->u.target = (sljit_uw)srcw; + + jump->addr = compiler->size; + FAIL_IF(push_inst(compiler, 0)); + compiler->size += JUMP_MAX_SIZE - 1; + return SLJIT_SUCCESS; +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_icall(struct sljit_compiler *compiler, sljit_s32 type, + sljit_s32 arg_types, + sljit_s32 src, sljit_sw srcw) +{ + CHECK_ERROR(); + CHECK(check_sljit_emit_icall(compiler, type, arg_types, src, srcw)); + + if (src & SLJIT_MEM) { + ADJUST_LOCAL_OFFSET(src, srcw); + FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_REG3, src, srcw)); + src = TMP_REG3; + } + + if ((type & 0xff) != SLJIT_CALL_REG_ARG) + FAIL_IF(emit_call_args(compiler, arg_types)); + + if (type & SLJIT_CALL_RETURN) { + if (src >= SLJIT_FIRST_SAVED_REG && src <= (SLJIT_S0 - SLJIT_KEPT_SAVEDS_COUNT(compiler->options))) { + FAIL_IF(emit_mov(compiler, TMP_REG3, src)); + src = TMP_REG3; + } + + FAIL_IF(emit_stack_frame_release(compiler, 0)); + type = SLJIT_JUMP; + } + + SLJIT_SKIP_CHECKS(compiler); + return sljit_emit_ijump(compiler, type, src, srcw); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_s32 type) +{ + sljit_s32 src_r, dst_r, invert; + sljit_s32 saved_op = op; + sljit_s32 mem_type = ((op & SLJIT_32) || op == SLJIT_MOV32) ? (INT_DATA | SIGNED_DATA) : WORD_DATA; + + CHECK_ERROR(); + CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type)); + ADJUST_LOCAL_OFFSET(dst, dstw); + + op = GET_OPCODE(op); + dst_r = (op < SLJIT_ADD && FAST_IS_REG(dst)) ? dst : TMP_REG2; + + if (op >= SLJIT_ADD && (dst & SLJIT_MEM)) + FAIL_IF(emit_op_mem2(compiler, mem_type | LOAD_DATA, TMP_REG1, dst, dstw)); + + /* The boolean condition ends up (0 or non-zero) in src_r. */ + invert = 0; + if (type == SLJIT_EQUAL) { + FAIL_IF(push_inst(compiler, CMPEQ | RA(EQUAL_FLAG) | RB(TMP_ZERO) | RC(dst_r))); + src_r = dst_r; + } else if (type == SLJIT_NOT_EQUAL) { + FAIL_IF(push_inst(compiler, CMPULT | RA(TMP_ZERO) | RB(EQUAL_FLAG) | RC(dst_r))); + src_r = dst_r; + } else { + src_r = OTHER_FLAG; + /* get_jump_instruction returns BEQ OTHER_FLAG for the inverted set. */ + if ((get_jump_instruction(type) & OP(0x3f)) == BEQ) + invert = 1; + } + + if (invert) { + FAIL_IF(push_inst(compiler, CMPEQ | RA(src_r) | RB(TMP_ZERO) | RC(dst_r))); + src_r = dst_r; + } + + if (op < SLJIT_ADD) { + if (dst & SLJIT_MEM) + return emit_op_mem(compiler, mem_type, src_r, dst, dstw); + + return emit_mov(compiler, dst_r, src_r); + } + + mem_type |= CUMULATIVE_OP | IMM_OP | ALT_KEEP_CACHE; + + if (dst & SLJIT_MEM) + return emit_op(compiler, saved_op, mem_type, dst, dstw, TMP_REG1, 0, src_r, 0); + return emit_op(compiler, saved_op, mem_type, dst, dstw, dst, dstw, src_r, 0); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *compiler, sljit_s32 type, + sljit_s32 dst_reg, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2_reg) +{ + sljit_s32 flag_reg; + sljit_ins cmov_true, cmov_false; + sljit_s32 inp_flags = ((type & SLJIT_32) ? INT_DATA : WORD_DATA) | LOAD_DATA; + + CHECK_ERROR(); + CHECK(check_sljit_emit_select(compiler, type, dst_reg, src1, src1w, src2_reg)); + + ADJUST_LOCAL_OFFSET(src1, src1w); + + if (src1 & SLJIT_MEM) { + FAIL_IF(emit_op_mem(compiler, inp_flags, TMP_REG1, src1, src1w)); + src1 = TMP_REG1; + } else if (src1 == SLJIT_IMM) { + if (type & SLJIT_32) + src1w = (sljit_s32)src1w; + FAIL_IF(load_immediate(compiler, TMP_REG1, src1w, TMP_REG3)); + src1 = TMP_REG1; + } + + /* pick_cmov sets dst = src1 when the condition is true. When dst == src1 + invert it and conditionally load src2_reg instead (src1 must survive). */ + if (type & SLJIT_COMPARE_SELECT) { + /* dst = (src1 src2_reg) ? src1 : src2_reg. */ + sljit_ins cmp; + flag_reg = OTHER_FLAG; + cmov_true = CMOVNE; + + switch (type & ~(SLJIT_32 | SLJIT_COMPARE_SELECT)) { + case SLJIT_EQUAL: + cmp = CMPEQ | RA(src1) | RB(src2_reg); + break; + case SLJIT_NOT_EQUAL: + cmp = CMPEQ | RA(src1) | RB(src2_reg); + cmov_true = CMOVEQ; + break; + case SLJIT_LESS: + cmp = CMPULT | RA(src1) | RB(src2_reg); + break; + case SLJIT_GREATER_EQUAL: + cmp = CMPULT | RA(src1) | RB(src2_reg); + cmov_true = CMOVEQ; + break; + case SLJIT_GREATER: + cmp = CMPULT | RA(src2_reg) | RB(src1); + break; + case SLJIT_LESS_EQUAL: + cmp = CMPULT | RA(src2_reg) | RB(src1); + cmov_true = CMOVEQ; + break; + case SLJIT_SIG_LESS: + cmp = CMPLT | RA(src1) | RB(src2_reg); + break; + case SLJIT_SIG_GREATER_EQUAL: + cmp = CMPLT | RA(src1) | RB(src2_reg); + cmov_true = CMOVEQ; + break; + case SLJIT_SIG_GREATER: + cmp = CMPLT | RA(src2_reg) | RB(src1); + break; + default: /* SLJIT_SIG_LESS_EQUAL */ + cmp = CMPLT | RA(src2_reg) | RB(src1); + cmov_true = CMOVEQ; + break; + } + + FAIL_IF(push_inst(compiler, cmp | RC(OTHER_FLAG))); + + if (dst_reg == src1) { + cmov_false = (cmov_true == CMOVNE) ? CMOVEQ : CMOVNE; + return push_inst(compiler, cmov_false | RA(flag_reg) | RB(src2_reg) | RC(dst_reg)); + } + + if (dst_reg != src2_reg) + FAIL_IF(emit_mov(compiler, dst_reg, src2_reg)); + return push_inst(compiler, cmov_true | RA(flag_reg) | RB(src1) | RC(dst_reg)); + } + + /* dst = cond ? src1 : src2_reg (condition from the current flags). */ + type &= ~SLJIT_32; + + if (type == SLJIT_EQUAL) { + flag_reg = EQUAL_FLAG; + cmov_true = CMOVEQ; + } else if (type == SLJIT_NOT_EQUAL) { + flag_reg = EQUAL_FLAG; + cmov_true = CMOVNE; + } else { + flag_reg = OTHER_FLAG; + cmov_true = ((get_jump_instruction(type) & OP(0x3f)) == BEQ) ? CMOVEQ : CMOVNE; + } + + if (dst_reg == src1) { + cmov_false = (cmov_true == CMOVNE) ? CMOVEQ : CMOVNE; + return push_inst(compiler, cmov_false | RA(flag_reg) | RB(src2_reg) | RC(dst_reg)); + } + + if (dst_reg != src2_reg) + FAIL_IF(emit_mov(compiler, dst_reg, src2_reg)); + return push_inst(compiler, cmov_true | RA(flag_reg) | RB(src1) | RC(dst_reg)); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *compiler, sljit_s32 type, + sljit_s32 dst_freg, + sljit_s32 src1, sljit_sw src1w, + sljit_s32 src2_freg) +{ + sljit_ins branch; + + CHECK_ERROR(); + CHECK(check_sljit_emit_fselect(compiler, type, dst_freg, src1, src1w, src2_freg)); + + ADJUST_LOCAL_OFFSET(src1, src1w); + + if (!(src1 & SLJIT_MEM) && dst_freg == src1) { + /* dst holds src1: keep it when the condition is true, else copy src2. + Branch (non-inverted) over the src2 copy when the condition holds. */ + branch = get_jump_instruction(type & ~SLJIT_32); + FAIL_IF(push_inst(compiler, branch | (1 & 0x1fffff))); + return push_inst(compiler, CPYS | FA(src2_freg) | FB(src2_freg) | FC(dst_freg)); + } + + if (dst_freg != src2_freg) + FAIL_IF(push_inst(compiler, CPYS | FA(src2_freg) | FB(src2_freg) | FC(dst_freg))); + + if (src1 & SLJIT_MEM) { + /* Load into TMP_FREG2, avoiding TMP_FREG1: the latter is exposed to the + caller as SLJIT_TMP_DEST_FREG and may hold a value that must survive + when the condition is false (both dst_freg and src2_freg live). */ + sljit_s32 tmp_freg = (dst_freg == TMP_FREG2) ? TMP_FREG1 : TMP_FREG2; + FAIL_IF(emit_op_mem(compiler, FLOAT_DATA(type) | LOAD_DATA, tmp_freg, src1, src1w)); + src1 = tmp_freg; + } + + /* Branch over the copy when the condition is false (invert). */ + branch = get_jump_instruction(type & ~SLJIT_32) ^ ((sljit_ins)0x04 << 26); + FAIL_IF(push_inst(compiler, branch | (1 & 0x1fffff))); + return push_inst(compiler, CPYS | FA(src1) | FB(src1) | FC(dst_freg)); +} + +#undef FLOAT_DATA + +/* Materialize the effective address of (mem, memw) into *mem (a register), *memw=0. + * Uses TMP_REG1 for any computation; TMP_REG3 as scratch for load_immediate. */ +static sljit_s32 update_mem_addr(struct sljit_compiler *compiler, + sljit_s32 *mem, sljit_sw *memw) +{ + sljit_s32 arg = *mem; + sljit_sw argw = *memw; + + if (SLJIT_UNLIKELY(arg & OFFS_REG_MASK)) { + argw &= 0x3; + if (SLJIT_UNLIKELY(argw != 0)) { + FAIL_IF(push_inst(compiler, SLL | RA(OFFS_REG(arg)) | ALPHA_LIT(argw) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, ADDQ | RA(TMP_REG1) | RB(arg & REG_MASK) | RC(TMP_REG1))); + } else + FAIL_IF(push_inst(compiler, ADDQ | RA(arg & REG_MASK) | RB(OFFS_REG(arg)) | RC(TMP_REG1))); + *mem = TMP_REG1; + *memw = 0; + return SLJIT_SUCCESS; + } + + *mem = arg & REG_MASK; + if (argw == 0) + return SLJIT_SUCCESS; + + if (argw >= SIMM_MIN && argw <= SIMM_MAX) { + FAIL_IF(push_inst(compiler, LDA | RA(TMP_REG1) | RB(*mem) | DISP16(argw))); + *mem = TMP_REG1; + *memw = 0; + return SLJIT_SUCCESS; + } + + FAIL_IF(load_immediate(compiler, TMP_REG1, argw, TMP_REG3)); + if (arg & REG_MASK) + FAIL_IF(push_inst(compiler, ADDQ | RA(TMP_REG1) | RB(arg & REG_MASK) | RC(TMP_REG1))); + *mem = TMP_REG1; + *memw = 0; + return SLJIT_SUCCESS; +} + +/* Synthesize an unaligned multi-byte memory access using LDQ_U + EXT/INS/MSK + STQ_U. + * Called only when SLJIT_MEM_UNALIGNED is set and the operand is wider than 8 bits. + * Clobbers TMP_REG1, TMP_REG2, TMP_REG3. */ +static sljit_s32 emit_unaligned_mem(struct sljit_compiler *compiler, + sljit_s32 type, sljit_s32 reg, sljit_s32 mem, sljit_sw memw) +{ + sljit_s32 op = GET_OPCODE(type); + sljit_ins extl, exth, mskl, mskh, insl, insh; + sljit_sw hi_off; + + ADJUST_LOCAL_OFFSET(mem, memw); + FAIL_IF(update_mem_addr(compiler, &mem, &memw)); + + /* Ensure the effective address is in TMP_REG1: used as the LDQ_U/STQ_U + * base and as the byte-position argument (low 3 bits) to EXT/INS/MSK. */ + if (mem != TMP_REG1) + FAIL_IF(push_inst(compiler, BIS | RA(mem) | RB(TMP_ZERO) | RC(TMP_REG1))); + + switch (op) { + case SLJIT_MOV_U16: + case SLJIT_MOV_S16: + extl = EXTWL; exth = EXTWH; + mskl = MSKWL; mskh = MSKWH; + insl = INSWL; insh = INSWH; + hi_off = 1; + break; + case SLJIT_MOV_U32: + case SLJIT_MOV_S32: + case SLJIT_MOV32: + extl = EXTLL; exth = EXTLH; + mskl = MSKLL; mskh = MSKLH; + insl = INSLL; insh = INSLH; + hi_off = 3; + break; + default: /* SLJIT_MOV, SLJIT_MOV_P */ + extl = EXTQL; exth = EXTQH; + mskl = MSKQL; mskh = MSKQH; + insl = INSQL; insh = INSQH; + hi_off = 7; + break; + } + + if (type & SLJIT_MEM_STORE) { + /* Read-modify-write both aligned quadwords that overlap the value. + * Save reg to TMP_REG4 (r29/gp) if it aliases TMP_REG2 or TMP_REG3 + * so the data survives the two LDQ_U/INS sequences. */ + if (reg == TMP_REG2 || reg == TMP_REG3) { + FAIL_IF(push_inst(compiler, BIS | RA(reg) | RB(TMP_ZERO) | RC(TMP_REG4))); + reg = TMP_REG4; + } + + /* Upper aligned quadword. */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(hi_off))); + FAIL_IF(push_inst(compiler, mskh | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, insh | RA(reg) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, STQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(hi_off))); + + /* Lower aligned quadword. */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0))); + FAIL_IF(push_inst(compiler, mskl | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, insl | RA(reg) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG2))); + return push_inst(compiler, STQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0)); + } + + /* Load: extract pieces from two aligned quadwords and combine. + * Extract hi portion first, then lo, so the final BIS can write to any reg. */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0))); + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG3) | RB(TMP_REG1) | DISP16(hi_off))); + FAIL_IF(push_inst(compiler, exth | RA(TMP_REG3) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, extl | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(reg))); + + switch (op) { + case SLJIT_MOV_S16: + FAIL_IF(push_inst(compiler, SLL | RA(reg) | ALPHA_LIT(48) | RC(reg))); + return push_inst(compiler, SRA | RA(reg) | ALPHA_LIT(48) | RC(reg)); + case SLJIT_MOV_S32: + case SLJIT_MOV32: + /* ADDL sign-extends bits 31:0 to 64 bits. */ + return push_inst(compiler, ADDL | RA(reg) | RB(TMP_ZERO) | RC(reg)); + default: + return SLJIT_SUCCESS; + } +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_mem(struct sljit_compiler *compiler, sljit_s32 type, + sljit_s32 reg, + sljit_s32 mem, sljit_sw memw) +{ + sljit_s32 flags; + sljit_s32 op; + + CHECK_ERROR(); + CHECK(check_sljit_emit_mem(compiler, type, reg, mem, memw)); + + if (!(reg & REG_PAIR_MASK)) { + op = GET_OPCODE(type); + /* When any alignment hint is set, check whether the guaranteed alignment + * meets Alpha's natural-alignment requirement for this operand size: + * 16-bit: 2B (ALIGNED_16 or ALIGNED_32 suffices) + * 32-bit: 4B (only ALIGNED_32 suffices) + * 64-bit: 8B (no hint flag provides this guarantee) + * If the guarantee falls short, synthesize with LDQ_U + EXT/INS/MSK. */ + if (type & (SLJIT_MEM_UNALIGNED | SLJIT_MEM_ALIGNED_16 | SLJIT_MEM_ALIGNED_32)) { + if (op == SLJIT_MOV_U8 || op == SLJIT_MOV_S8) + return sljit_emit_mem_unaligned(compiler, type, reg, mem, memw); + if ((op == SLJIT_MOV_U16 || op == SLJIT_MOV_S16) + && !(type & SLJIT_MEM_UNALIGNED)) + return sljit_emit_mem_unaligned(compiler, type, reg, mem, memw); + if ((op == SLJIT_MOV_U32 || op == SLJIT_MOV_S32 || op == SLJIT_MOV32) + && (type & SLJIT_MEM_ALIGNED_32)) + return sljit_emit_mem_unaligned(compiler, type, reg, mem, memw); + return emit_unaligned_mem(compiler, type, reg, mem, memw); + } + return sljit_emit_mem_unaligned(compiler, type, reg, mem, memw); + } + + /* Pair register path. LDQ/STQ require 8B alignment; no hint flag + * provides that guarantee, so synthesize both QW accesses when any + * alignment/unaligned flag is present. After emit_unaligned_mem + * returns, TMP_REG1 always holds the effective address. */ + if (type & (SLJIT_MEM_UNALIGNED | SLJIT_MEM_ALIGNED_16 | SLJIT_MEM_ALIGNED_32)) { + FAIL_IF(emit_unaligned_mem(compiler, type, REG_PAIR_FIRST(reg), mem, memw)); + FAIL_IF(push_inst(compiler, LDA | RA(TMP_REG1) | RB(TMP_REG1) | DISP16(SSIZE_OF(sw)))); + return emit_unaligned_mem(compiler, type, REG_PAIR_SECOND(reg), SLJIT_MEM1(TMP_REG1), 0); + } + + ADJUST_LOCAL_OFFSET(mem, memw); + + if (SLJIT_UNLIKELY(mem & OFFS_REG_MASK)) { + memw &= 0x3; + + if (SLJIT_UNLIKELY(memw != 0)) { + FAIL_IF(push_inst(compiler, SLL | RA(OFFS_REG(mem)) | ALPHA_LIT(memw) | RC(TMP_REG1))); + FAIL_IF(push_inst(compiler, ADDQ | RA(TMP_REG1) | RB(mem & REG_MASK) | RC(TMP_REG1))); + } else + FAIL_IF(push_inst(compiler, ADDQ | RA(mem & REG_MASK) | RB(OFFS_REG(mem)) | RC(TMP_REG1))); + + mem = TMP_REG1; + memw = 0; + } else if (memw > SIMM_MAX - SSIZE_OF(sw) || memw < SIMM_MIN) { + FAIL_IF(load_immediate(compiler, TMP_REG1, memw, TMP_REG3)); + + if (mem & REG_MASK) + FAIL_IF(push_inst(compiler, ADDQ | RA(TMP_REG1) | RB(mem & REG_MASK) | RC(TMP_REG1))); + + mem = TMP_REG1; + memw = 0; + } else + mem &= REG_MASK; + + if (!(type & SLJIT_MEM_STORE) && mem == REG_PAIR_FIRST(reg)) { + FAIL_IF(push_mem_inst(compiler, WORD_DATA | LOAD_DATA, REG_PAIR_SECOND(reg), mem, memw + SSIZE_OF(sw))); + return push_mem_inst(compiler, WORD_DATA | LOAD_DATA, REG_PAIR_FIRST(reg), mem, memw); + } + + flags = WORD_DATA | (!(type & SLJIT_MEM_STORE) ? LOAD_DATA : 0); + + FAIL_IF(push_mem_inst(compiler, flags, REG_PAIR_FIRST(reg), mem, memw)); + return push_mem_inst(compiler, flags, REG_PAIR_SECOND(reg), mem, memw + SSIZE_OF(sw)); +} + +#undef TO_ARGW_HI + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fmem(struct sljit_compiler *compiler, sljit_s32 type, + sljit_s32 freg, + sljit_s32 mem, sljit_sw memw) +{ + sljit_ins extl, exth, mskl, mskh, insl, insh, ftox, itofx; + sljit_sw hi_off; + + CHECK_ERROR(); + CHECK(check_sljit_emit_fmem(compiler, type, freg, mem, memw)); + + /* Alpha FP load/store (LDS/LDT/STS/STT) require natural alignment. + * Synthesize unaligned FP access using integer LDQ_U+EXT/INS/MSK+STQ_U + * combined with ITOFS/ITOFT (FIX extension) for the integer<->FP transfer. + * Without FIX, fall back to the generic path and accept the kernel fixup. */ + if (!cpu_feature_list) + get_cpu_features(); + if (!(cpu_feature_list & ALPHA_HWCAP_FIX)) + return sljit_emit_fmem_unaligned(compiler, type, freg, mem, memw); + + /* F32 = SLJIT_MOV_F64 | SLJIT_32; distinguish by the SLJIT_32 flag, not + * the low opcode byte (which is always SLJIT_MOV_F64 for both widths). */ + if (type & SLJIT_32) { + /* LDS requires 4-byte alignment; ALIGNED_32 guarantees 4B. */ + if ((type & SLJIT_MEM_ALIGNED_32) && !(type & SLJIT_MEM_UNALIGNED)) + return sljit_emit_fmem_unaligned(compiler, type, freg, mem, memw); + ftox = FTOIS; itofx = ITOFS; + extl = EXTLL; exth = EXTLH; + mskl = MSKLL; mskh = MSKLH; + insl = INSLL; insh = INSLH; + hi_off = 3; + } else { + /* LDT requires 8-byte alignment; no hint flag guarantees that. */ + ftox = FTOIT; itofx = ITOFT; + extl = EXTQL; exth = EXTQH; + mskl = MSKQL; mskh = MSKQH; + insl = INSQL; insh = INSQH; + hi_off = 7; + } + + ADJUST_LOCAL_OFFSET(mem, memw); + FAIL_IF(update_mem_addr(compiler, &mem, &memw)); + if (mem != TMP_REG1) + FAIL_IF(push_inst(compiler, BIS | RA(mem) | RB(TMP_ZERO) | RC(TMP_REG1))); + + if (type & SLJIT_MEM_STORE) { + /* Copy FP source to TMP_FREG1 so we can read its integer bits twice + * (once per aligned quadword) using FTOIS/FTOIT without needing a + * spare GPR to hold the value across the two RMW sequences. */ + FAIL_IF(push_inst(compiler, CPYS | FA(freg) | FB(freg) | FC(TMP_FREG1))); + + /* Upper aligned quadword. */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(hi_off))); + FAIL_IF(push_inst(compiler, mskh | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, ftox | FA(TMP_FREG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, insh | RA(TMP_REG3) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, STQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(hi_off))); + + /* Lower aligned quadword. */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0))); + FAIL_IF(push_inst(compiler, mskl | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, ftox | FA(TMP_FREG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, insl | RA(TMP_REG3) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG2))); + return push_inst(compiler, STQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0)); + } + + /* Load: extract pieces from two aligned quadwords, combine, then + * move to the FP register via ITOFS/ITOFT. Write the combined integer + * result to TMP_REG1 (addr is no longer needed after the EXT steps). */ + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG2) | RB(TMP_REG1) | DISP16(0))); + FAIL_IF(push_inst(compiler, LDQ_U | RA(TMP_REG3) | RB(TMP_REG1) | DISP16(hi_off))); + FAIL_IF(push_inst(compiler, exth | RA(TMP_REG3) | RB(TMP_REG1) | RC(TMP_REG3))); + FAIL_IF(push_inst(compiler, extl | RA(TMP_REG2) | RB(TMP_REG1) | RC(TMP_REG2))); + FAIL_IF(push_inst(compiler, BIS | RA(TMP_REG2) | RB(TMP_REG3) | RC(TMP_REG1))); + return push_inst(compiler, itofx | RA(TMP_REG1) | FC(freg)); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_atomic_load(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst_reg, + sljit_s32 mem_reg) +{ + sljit_ins ins; + + CHECK_ERROR(); + CHECK(check_sljit_emit_atomic_load(compiler, op, dst_reg, mem_reg)); + + if (op & SLJIT_ATOMIC_USE_CAS) + return SLJIT_ERR_UNSUPPORTED; + + switch (GET_OPCODE(op)) { + case SLJIT_MOV: + case SLJIT_MOV_P: + ins = LDQ_L; + break; + case SLJIT_MOV_S32: + case SLJIT_MOV32: + ins = LDL_L; + break; + default: + return SLJIT_ERR_UNSUPPORTED; + } + + if (op & SLJIT_ATOMIC_TEST) + return SLJIT_SUCCESS; + + return push_inst(compiler, ins | RA(dst_reg) | RB(mem_reg) | DISP16(0)); +} + +SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_atomic_store(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 src_reg, + sljit_s32 mem_reg, + sljit_s32 temp_reg) +{ + sljit_ins ins; + + CHECK_ERROR(); + CHECK(check_sljit_emit_atomic_store(compiler, op, src_reg, mem_reg, temp_reg)); + + if (op & SLJIT_ATOMIC_USE_CAS) + return SLJIT_ERR_UNSUPPORTED; + + switch (GET_OPCODE(op)) { + case SLJIT_MOV: + case SLJIT_MOV_P: + ins = STQ_C; + break; + case SLJIT_MOV_S32: + case SLJIT_MOV32: + ins = STL_C; + break; + default: + return SLJIT_ERR_UNSUPPORTED; + } + + if (op & SLJIT_ATOMIC_TEST) + return SLJIT_SUCCESS; + + /* STx_C overwrites src_reg with the success flag (1 = stored). */ + FAIL_IF(emit_mov(compiler, TMP_REG1, src_reg)); + FAIL_IF(push_inst(compiler, ins | RA(TMP_REG1) | RB(mem_reg) | DISP16(0))); + /* OTHER_FLAG is set (stored) when TMP_REG1 == 1. */ + return push_inst(compiler, BIS | RA(TMP_ZERO) | RB(TMP_REG1) | RC(OTHER_FLAG)); +} + +SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw, + sljit_sw init_value) +{ + struct sljit_const *const_; + sljit_s32 dst_r; + sljit_s32 mem_flags = WORD_DATA; + + CHECK_ERROR_PTR(); + CHECK_PTR(check_sljit_emit_const(compiler, op, dst, dstw, init_value)); + ADJUST_LOCAL_OFFSET(dst, dstw); + + const_ = (struct sljit_const*)ensure_abuf(compiler, sizeof(struct sljit_const)); + PTR_FAIL_IF(!const_); + set_const(const_, compiler); + + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2; + + switch (GET_OPCODE(op)) { + case SLJIT_MOV_U8: + /* Match the shared patchable-const encoding: bit 8 sign-extends the + byte so a subsequent wider store observes the sign bits. */ + if (init_value & 0x100) + init_value = (init_value & 0xff) | ~(sljit_sw)0xff; + else + init_value &= 0xff; + mem_flags = BYTE_DATA; + break; + case SLJIT_MOV32: + /* Plain 32 bit: store only the low word (keep the upper memory bits). */ + mem_flags = INT_DATA; + /* fallthrough */ + case SLJIT_MOV_S32: + /* Signed 32 bit: sign extend and store the full word. */ + init_value = (sljit_s32)init_value; + break; + } + + PTR_FAIL_IF(emit_const(compiler, dst_r, init_value)); + + if (dst & SLJIT_MEM) + PTR_FAIL_IF(emit_op_mem(compiler, mem_flags, TMP_REG2, dst, dstw)); + + return const_; +} + +SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_op_addr(struct sljit_compiler *compiler, sljit_s32 op, + sljit_s32 dst, sljit_sw dstw) +{ + struct sljit_jump *jump; + sljit_s32 dst_r, target_r; + + CHECK_ERROR_PTR(); + CHECK_PTR(check_sljit_emit_op_addr(compiler, op, dst, dstw)); + ADJUST_LOCAL_OFFSET(dst, dstw); + + dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2; + + if (op != SLJIT_ADD_ABS_ADDR) + target_r = dst_r; + else { + target_r = TMP_REG1; + + if (dst & SLJIT_MEM) + PTR_FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, TMP_REG2, dst, dstw)); + } + + jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump)); + PTR_FAIL_IF(!jump); + set_mov_addr(jump, compiler, 0); + + PTR_FAIL_IF(push_inst(compiler, (sljit_ins)target_r)); + compiler->size += JUMP_MAX_SIZE - 1; + + if (op == SLJIT_ADD_ABS_ADDR) + PTR_FAIL_IF(push_inst(compiler, ADDQ | RA(dst_r) | RB(TMP_REG1) | RC(dst_r))); + + if (dst & SLJIT_MEM) + PTR_FAIL_IF(emit_op_mem(compiler, WORD_DATA, TMP_REG2, dst, dstw)); + + return jump; +} + +SLJIT_API_FUNC_ATTRIBUTE void sljit_set_jump_addr(sljit_uw addr, sljit_uw new_target, sljit_sw executable_offset) +{ + sljit_ins *inst = (sljit_ins *)addr; + sljit_sw high; + sljit_s32 low; + + SLJIT_UNUSED_ARG(executable_offset); + + low = (sljit_s32)new_target; + high = (sljit_sw)new_target >> 32; + if (low < 0) + high++; + + SLJIT_UPDATE_WX_FLAGS(inst, inst + 5, 0); + inst[0] = (inst[0] & ~(sljit_ins)0xffff) | ALPHA_HI16((sljit_s32)high); + inst[1] = (inst[1] & ~(sljit_ins)0xffff) | ALPHA_LO16((sljit_s32)high); + /* inst[2] is the SLL, unchanged. */ + inst[3] = (inst[3] & ~(sljit_ins)0xffff) | ALPHA_HI16(low); + inst[4] = (inst[4] & ~(sljit_ins)0xffff) | ALPHA_LO16(low); + SLJIT_UPDATE_WX_FLAGS(inst, inst + 5, 1); + + inst = (sljit_ins *)SLJIT_ADD_EXEC_OFFSET(inst, executable_offset); + SLJIT_CACHE_FLUSH(inst, inst + 5); +} + +SLJIT_API_FUNC_ATTRIBUTE void sljit_set_const(sljit_uw addr, sljit_s32 op, sljit_sw new_constant, sljit_sw executable_offset) +{ + switch (GET_OPCODE(op)) { + case SLJIT_MOV_U8: + if (new_constant & 0x100) + new_constant = (new_constant & 0xff) | ~(sljit_sw)0xff; + else + new_constant &= 0xff; + break; + case SLJIT_MOV_S32: + case SLJIT_MOV32: + new_constant = (sljit_s32)new_constant; + break; + } + + sljit_set_jump_addr(addr, (sljit_uw)new_constant, executable_offset); +} diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_32.c b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_32.c index 16ef39940..ef2762f39 100644 --- a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_32.c +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_32.c @@ -2650,7 +2650,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= 0x1f; if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_64.c b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_64.c index dabbd3b07..06d94a96a 100644 --- a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_64.c +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_64.c @@ -70,7 +70,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define VM(vm) ((sljit_ins)freg_map[vm] << 16) /* --------------------------------------------------------------------- */ -/* Instruction forms */ +/* Instruction forms */ /* --------------------------------------------------------------------- */ #define ADC 0x9a000000 @@ -157,7 +157,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define SDIV 0x9ac00c00 #define SMADDL 0x9b200000 #define SMOV 0x0e002c00 -#define SMULH 0x9b403c00 +#define SMULH 0x9b407c00 #define SSHLL 0x0f00a400 #define ST1 0x0c007000 #define ST1_s 0x0d000000 @@ -173,7 +173,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define STUR_FI 0x3c000000 #define STURBI 0x38000000 #define STXR 0xc8007c00 -#define STXRB 0x8007c00 +#define STXRB 0x08007c00 #define STXRH 0x48007c00 #define SUB 0xcb000000 #define SUBI 0xd1000000 @@ -184,7 +184,7 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #define UCVTF 0x9e630000 #define UDIV 0x9ac00800 #define UMOV 0x0e003c00 -#define UMULH 0x9bc03c00 +#define UMULH 0x9bc07c00 #define USHLL 0x2f00a400 #define USHR 0x2f000400 #define USRA 0x2f001400 @@ -1893,7 +1893,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= 0x3f; if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_T2_32.c b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_T2_32.c index eab9ec1ff..66084571c 100644 --- a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_T2_32.c +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeARM_T2_32.c @@ -2217,7 +2217,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= 0x1f; if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeLOONGARCH_64.c b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeLOONGARCH_64.c index 13319669a..83e6e297c 100644 --- a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeLOONGARCH_64.c +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeLOONGARCH_64.c @@ -70,9 +70,9 @@ LoongArch instructions are 32 bits wide, belonging to 9 basic instruction format | 1RI21 | Opcode + I21L + Rj + I21H | | I26 | Opcode + I26L + I26H | -Rd is the destination register operand, while Rj, Rk and Ra (“a” stands for “additional”) are the source register operands. +Rd is the destination register operand, while Rj, Rk and Ra ("a" stands for "additional") are the source register operands. I8/I12/I14/I16/I21/I26 are immediate operands of respective width. The longer I21 and I26 are stored in separate higher and -lower parts in the instruction word, denoted by the “L” and “H” suffixes. */ +lower parts in the instruction word, denoted by the "L" and "H" suffixes. */ #define RD(rd) ((sljit_ins)reg_map[rd]) #define RJ(rj) ((sljit_ins)reg_map[rj] << 5) @@ -2191,7 +2191,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeMIPS_common.c b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeMIPS_common.c index 771abfec2..96fa342f9 100644 --- a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeMIPS_common.c +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeMIPS_common.c @@ -2811,7 +2811,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativePPC_common.c b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativePPC_common.c index 07df86f31..ea0597b71 100644 --- a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativePPC_common.c +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativePPC_common.c @@ -292,14 +292,14 @@ static const sljit_u8 freg_map[SLJIT_NUMBER_OF_FLOAT_REGISTERS + 3] = { #endif /* SLJIT_LITTLE_ENDIAN */ #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL) -SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void* func) +SLJIT_API_FUNC_ATTRIBUTE void sljit_set_function_context(void** func_ptr, struct sljit_function_context* context, sljit_uw addr, void (*func)(void)) { sljit_uw* ptrs; if (func_ptr) *func_ptr = (void*)context; - ptrs = (sljit_uw*)func; + ptrs = (sljit_uw*)(sljit_uw)func; context->addr = addr ? addr : ptrs[0]; context->r2 = ptrs[1]; context->r11 = ptrs[2]; @@ -749,7 +749,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compil if (((sljit_sw)code_ptr) & 0x4) code_ptr++; #endif /* SLJIT_CONFIG_PPC_64 */ - sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_uw)code, (void*)sljit_generate_code); + sljit_set_function_context(NULL, (struct sljit_function_context*)code_ptr, (sljit_uw)code, (void (*)(void))sljit_generate_code); } #endif /* SLJIT_INDIRECT_CALL */ @@ -1422,6 +1422,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile op = GET_OPCODE(op); switch (op) { case SLJIT_BREAKPOINT: + return push_inst(compiler, 0x7fe00008); case SLJIT_NOP: return push_inst(compiler, NOP); case SLJIT_LMUL_UW: @@ -1733,7 +1734,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile #define TEST_ADD_IMM(src, srcw) \ ((src) == SLJIT_IMM && (srcw) <= 0x7fff7fffl && (srcw) >= -0x80000000l) #define TEST_UI_IMM(src, srcw) \ - ((src) == SLJIT_IMM && !((srcw) & ~0xffffffff)) + ((src) == SLJIT_IMM && !((srcw) & ~(sljit_sw)0xffffffff)) #define TEST_ADD_FORM1(op) \ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \ @@ -2141,7 +2142,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } @@ -2575,7 +2576,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_aligned_label(struct slj static sljit_ins get_bo_bi_flags(struct sljit_compiler *compiler, sljit_s32 type) { switch (type) { - case SLJIT_NOT_CARRY: + case SLJIT_CARRY: if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB) return (4 << 21) | (2 << 16); SLJIT_FALLTHROUGH @@ -2584,7 +2585,7 @@ static sljit_ins get_bo_bi_flags(struct sljit_compiler *compiler, sljit_s32 type case SLJIT_ATOMIC_STORED: return (12 << 21) | (2 << 16); - case SLJIT_CARRY: + case SLJIT_NOT_CARRY: if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_SUB) return (12 << 21) | (2 << 16); SLJIT_FALLTHROUGH @@ -2675,7 +2676,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile type &= 0xff; if ((type | 0x1) == SLJIT_NOT_CARRY) - PTR_FAIL_IF(push_inst(compiler, ADDE | RC(ALT_SET_FLAGS) | D(TMP_REG2) | A(TMP_ZERO) | B(TMP_ZERO))); + PTR_FAIL_IF(push_inst(compiler, ADDME | RC(ALT_SET_FLAGS) | D(TMP_REG2) | A(TMP_ZERO))); /* In PPC, we don't need to touch the arguments. */ if (type < SLJIT_JUMP) @@ -3033,7 +3034,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_select(struct sljit_compiler *comp } if ((type | 0x1) == SLJIT_NOT_CARRY) - FAIL_IF(push_inst(compiler, ADDE | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO) | B(TMP_ZERO))); + FAIL_IF(push_inst(compiler, ADDME | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO))); size = compiler->size; @@ -3075,7 +3076,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fselect(struct sljit_compiler *com } if (((type & ~SLJIT_32) | 0x1) == SLJIT_NOT_CARRY) - FAIL_IF(push_inst(compiler, ADDE | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO) | B(TMP_ZERO))); + FAIL_IF(push_inst(compiler, ADDME | RC(ALT_SET_FLAGS) | D(TMP_REG1) | A(TMP_ZERO))); size = compiler->size; diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeRISCV_64.c b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeRISCV_64.c index 113d1f887..0b8ccab3e 100644 --- a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeRISCV_64.c +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeRISCV_64.c @@ -76,6 +76,11 @@ static sljit_s32 load_immediate(struct sljit_compiler *compiler, sljit_s32 dst_r if (imm <= 0x7fffffffl && imm >= S32_MIN) return load_immediate32(compiler, dst_r, imm); + if (RISCV_HAS_BITMANIP_A(93) && (sljit_uw)imm <= 0xffffffff) { + FAIL_IF(load_immediate(compiler, dst_r, (sljit_s32)imm, tmp_r)); + return push_inst(compiler, ADD_UW | RD(dst_r) | RS1(dst_r) | RS2(TMP_ZERO)); + } + /* Shifted small immediates. */ high = imm; diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeRISCV_common.c b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeRISCV_common.c index dec12c9a6..1089bddb8 100644 --- a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeRISCV_common.c +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeRISCV_common.c @@ -158,9 +158,9 @@ SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void) { /* The arch string is not entirely correct since 'g' contains 'a'. */ #if (defined SLJIT_CONFIG_RISCV_32 && SLJIT_CONFIG_RISCV_32) - return "RISC-V-32 (rv32g" RISCV_ATOMIC_INFO RISCV_COMPRESSED_INFO RISCV_VECTOR_INFO RISCV_BITMANIP_A_INFO RISCV_BITMANIP_B_INFO RISCV_ICOND_INFO ")" SLJIT_CPUINFO; + return "RISCV (rv32g" RISCV_ATOMIC_INFO RISCV_COMPRESSED_INFO RISCV_VECTOR_INFO RISCV_BITMANIP_A_INFO RISCV_BITMANIP_B_INFO RISCV_ICOND_INFO ")" SLJIT_CPUINFO; #else /* !SLJIT_CONFIG_RISCV_32 */ - return "RISC-V-64 (rv64g" RISCV_ATOMIC_INFO RISCV_COMPRESSED_INFO RISCV_VECTOR_INFO RISCV_BITMANIP_A_INFO RISCV_BITMANIP_B_INFO RISCV_ICOND_INFO ")" SLJIT_CPUINFO; + return "RISCV (rv64g" RISCV_ATOMIC_INFO RISCV_COMPRESSED_INFO RISCV_VECTOR_INFO RISCV_BITMANIP_A_INFO RISCV_BITMANIP_B_INFO RISCV_ICOND_INFO ")" SLJIT_CPUINFO; #endif /* SLJIT_CONFIG_RISCV_32 */ } @@ -248,6 +248,7 @@ static const sljit_u8 vreg_map[SLJIT_NUMBER_OF_VECTOR_REGISTERS + 3] = { #define ADD (F7(0x0) | F3(0x0) | OPC(0x33)) #define ADDI (F3(0x0) | OPC(0x13)) +#define ADD_UW (F7(0x4) | F3(0x0) | OPC(0x3b)) #define AND (F7(0x0) | F3(0x7) | OPC(0x33)) #define ANDI (F3(0x7) | OPC(0x13)) #define AUIPC (OPC(0x17)) @@ -1983,6 +1984,8 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl case SLJIT_MOV_U32: SLJIT_ASSERT(src1 == TMP_ZERO && !(flags & SRC2_IMM)); if ((flags & (REG_DEST | REG2_SOURCE)) == (REG_DEST | REG2_SOURCE)) { + if (RISCV_HAS_BITMANIP_A(93)) + return push_inst(compiler, ADD_UW | RD(dst) | RS1(src2) | RS2(TMP_ZERO)); FAIL_IF(push_inst(compiler, SLLI | RD(dst) | RS1(src2) | IMM_I(32))); return push_inst(compiler, SRLI | RD(dst) | RS1(dst) | IMM_I(32)); } @@ -2046,15 +2049,13 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl if (flags & SRC2_IMM) { if (is_overflow) { - if (src2 >= 0) { + if (dst == src1) { if (RISCV_HAS_COMPRESSED(200)) - FAIL_IF(push_inst16(compiler, C_MV | C_RD(EQUAL_FLAG) | C_RS2(src1))); + FAIL_IF(push_inst16(compiler, C_MV | C_RD(OTHER_FLAG) | C_RS2(src1))); else - FAIL_IF(push_inst(compiler, ADDI | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(0))); - } else - FAIL_IF(push_inst(compiler, XORI | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(-1))); - } - else if (op & SLJIT_SET_Z) + FAIL_IF(push_inst(compiler, ADDI | RD(OTHER_FLAG) | RS1(src1) | IMM_I(0))); + } + } else if (op & SLJIT_SET_Z) FAIL_IF(push_inst(compiler, ADDI | WORD | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(src2))); /* Only the zero flag is needed. */ @@ -2088,7 +2089,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl } /* Carry is zero if a + b >= a or a + b >= b, otherwise it is 1. */ - if (is_overflow || carry_src_r != 0) { + if (carry_src_r != 0 || (is_overflow && !(flags & SRC2_IMM))) { if (flags & SRC2_IMM) FAIL_IF(push_inst(compiler, SLTUI | RD(OTHER_FLAG) | RS1(dst) | IMM_I(src2))); else @@ -2098,6 +2099,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl if (!is_overflow) return SLJIT_SUCCESS; + if (flags & SRC2_IMM) { + if (src2 >= 0) + return push_inst(compiler, SLT | RD(OTHER_FLAG) | RS1(dst) | RS2(dst == src1 ? OTHER_FLAG : src1)); + return push_inst(compiler, SLT | RD(OTHER_FLAG) | RS1(dst == src1 ? OTHER_FLAG : src1) | RS2(dst)); + } + FAIL_IF(push_inst(compiler, XOR | RD(TMP_REG1) | RS1(dst) | RS2(EQUAL_FLAG))); if (op & SLJIT_SET_Z) { if (RISCV_HAS_COMPRESSED(200)) @@ -2234,18 +2241,18 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl if (flags & SRC2_IMM) { if (is_overflow) { - if (src2 >= 0) { + if (dst == src1) { if (RISCV_HAS_COMPRESSED(200)) - FAIL_IF(push_inst16(compiler, C_MV | C_RD(EQUAL_FLAG) | C_RS2(src1))); + FAIL_IF(push_inst16(compiler, C_MV | C_RD(OTHER_FLAG) | C_RS2(src1))); else - FAIL_IF(push_inst(compiler, ADDI | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(0))); - } else - FAIL_IF(push_inst(compiler, XORI | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(-1))); - } else if (op & SLJIT_SET_Z) - FAIL_IF(push_inst(compiler, ADDI | WORD | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(-src2))); - - if (is_overflow || is_carry) - FAIL_IF(push_inst(compiler, SLTUI | RD(OTHER_FLAG) | RS1(src1) | IMM_I(src2))); + FAIL_IF(push_inst(compiler, ADDI | RD(OTHER_FLAG) | RS1(src1) | IMM_I(0))); + } + } else { + if (op & SLJIT_SET_Z) + FAIL_IF(push_inst(compiler, ADDI | WORD | RD(EQUAL_FLAG) | RS1(src1) | IMM_I(-src2))); + if (is_carry) + FAIL_IF(push_inst(compiler, SLTUI | RD(OTHER_FLAG) | RS1(src1) | IMM_I(src2))); + } /* Only the zero flag is needed. */ if (!(flags & UNUSED_DEST) || (op & VARIABLE_FLAG_MASK)) { @@ -2276,6 +2283,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl if (!is_overflow) return SLJIT_SUCCESS; + if (flags & SRC2_IMM) { + if (src2 >= 0) + return push_inst(compiler, SLT | RD(OTHER_FLAG) | RS1(dst) | RS2(dst == src1 ? OTHER_FLAG : src1)); + return push_inst(compiler, SLT | RD(OTHER_FLAG) | RS1(dst == src1 ? OTHER_FLAG : src1) | RS2(dst)); + } + FAIL_IF(push_inst(compiler, XOR | RD(TMP_REG1) | RS1(dst) | RS2(EQUAL_FLAG))); if (op & SLJIT_SET_Z) { if (RISCV_HAS_COMPRESSED(200)) @@ -2901,7 +2914,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeS390X.c b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeS390X.c index 98f671e10..1032ec0ba 100644 --- a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeS390X.c +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeS390X.c @@ -3163,7 +3163,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= 0x3f; if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeX86_common.c b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeX86_common.c index 25085a8f9..840443fd8 100644 --- a/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeX86_common.c +++ b/vendor/core/vendor/pcre2/deps/sljit/sljit_src/sljitNativeX86_common.c @@ -681,6 +681,9 @@ static sljit_u8* detect_near_jump_type(struct sljit_jump *jump, sljit_u8 *code_p sljit_s32 short_jump; sljit_uw label_addr; sljit_uw jump_addr; +#if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) + sljit_uw rel_size; +#endif /* SLJIT_CONFIG_X86_64 */ jump_addr = (sljit_uw)code_ptr; if (!(jump->flags & JUMP_ADDR)) { @@ -692,7 +695,8 @@ static sljit_u8* detect_near_jump_type(struct sljit_jump *jump, sljit_u8 *code_p label_addr = jump->u.target - (sljit_uw)executable_offset; #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64) - if ((sljit_sw)(label_addr - (jump_addr + 6)) > HALFWORD_MAX || (sljit_sw)(label_addr - (jump_addr + 5)) < HALFWORD_MIN) + rel_size = (type < SLJIT_JUMP) ? 6 : 5; + if ((sljit_sw)(label_addr - (jump_addr + rel_size)) > HALFWORD_MAX || (sljit_sw)(label_addr - (jump_addr + rel_size)) < HALFWORD_MIN) return detect_far_jump_type(jump, code_ptr); #endif /* SLJIT_CONFIG_X86_64 */ @@ -1067,7 +1071,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_has_cpu_feature(sljit_s32 feature_type) case SLJIT_HAS_COPY_F32: case SLJIT_HAS_COPY_F64: case SLJIT_HAS_ATOMIC: + return 1; + case SLJIT_HAS_MEMORY_BARRIER: +#if (defined SLJIT_DETECT_SSE2 && SLJIT_DETECT_SSE2) + if (cpu_feature_list == 0) + get_cpu_features(); + return (cpu_feature_list & CPU_FEATURE_SSE2) != 0; +#endif return 1; #if !(defined SLJIT_IS_FPU_AVAILABLE) || SLJIT_IS_FPU_AVAILABLE @@ -3036,7 +3047,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2_shift(struct sljit_compiler *c shift_arg &= (sljit_sw)((sizeof(sljit_sw) * 8) - 1); if (src2 == SLJIT_IMM) { - src2w = src2w << shift_arg; + src2w = (sljit_sw)((sljit_uw)src2w << shift_arg); shift_arg = 0; } diff --git a/vendor/core/vendor/pcre2/src/config-cmake.h.in b/vendor/core/vendor/pcre2/src/config-cmake.h.in index bcc62c046..fb994d828 100644 --- a/vendor/core/vendor/pcre2/src/config-cmake.h.in +++ b/vendor/core/vendor/pcre2/src/config-cmake.h.in @@ -13,6 +13,7 @@ #cmakedefine HAVE_MEMFD_CREATE 1 #cmakedefine HAVE_SECURE_GETENV 1 +#cmakedefine HAVE_SETRLIMIT 1 #cmakedefine SUPPORT_PCRE2_8 1 #cmakedefine SUPPORT_PCRE2_16 1 diff --git a/vendor/core/vendor/pcre2/src/config.h.generic b/vendor/core/vendor/pcre2/src/config.h.generic deleted file mode 100644 index 48da31e1b..000000000 --- a/vendor/core/vendor/pcre2/src/config.h.generic +++ /dev/null @@ -1,494 +0,0 @@ -/* src/config.h. Generated from config.h.in by configure. */ -/* src/config.h.in. Generated from configure.ac by autoheader. */ - -/* PCRE2 is written in Standard C, but there are a few non-standard things it -can cope with, allowing it to run on SunOS4 and other "close to standard" -systems. - -In environments that support the GNU autotools, config.h.in is converted into -config.h by the "configure" script. In environments that use CMake, -config-cmake.in is converted into config.h. If you are going to build PCRE2 "by -hand" without using "configure" or CMake, you should copy the distributed -config.h.generic to config.h, and edit the macro definitions to be the way you -need them. You must then add -DHAVE_CONFIG_H to all of your compile commands, -so that config.h is included at the start of every source. - -Alternatively, you can avoid editing by using -D on the compiler command line -to set the macro values. In this case, you do not have to set -DHAVE_CONFIG_H, -but if you do, default values will be taken from config.h for non-boolean -macros that are not defined on the command line. - -Boolean macros such as HAVE_STDLIB_H and SUPPORT_PCRE2_8 should either be -defined (conventionally to 1) for TRUE, and not defined at all for FALSE. All -such macros are listed as a commented #undef in config.h.generic. Macros such -as MATCH_LIMIT, whose actual value is relevant, have defaults defined, but are -surrounded by #ifndef/#endif lines so that the value can be overridden by -D. */ - -/* By default, the \R escape sequence matches any Unicode line ending - character or sequence of characters. If BSR_ANYCRLF is defined (to any - value), this is changed so that backslash-R matches only CR, LF, or CRLF. - The build-time default can be overridden by the user of PCRE2 at runtime. - */ -/* #undef BSR_ANYCRLF */ - -/* Define to any value to disable the use of the z and t modifiers in - formatting settings such as %zu or %td (this is rarely needed). */ -/* #undef DISABLE_PERCENT_ZT */ - -/* If you are compiling for a system that uses EBCDIC instead of ASCII - character codes, define this macro to any value. When EBCDIC is set, PCRE2 - assumes that all input strings are in EBCDIC. If you do not define this - macro, PCRE2 will assume input strings are ASCII or UTF-8/16/32 Unicode. It - is not possible to build a version of PCRE2 that supports both EBCDIC and - ASCII or UTF-8/16/32. */ -/* #undef EBCDIC */ - -/* To force an EBCDIC environment, define this macro to make the core PCRE2 - library functions use EBCDIC codepage 1047, regardless of whether the - compiler supports it using C character literals. */ -/* #undef EBCDIC_IGNORING_COMPILER */ - -/* In an EBCDIC environment, define this macro to any value to arrange for the - NL character to be 0x25 instead of the default 0x15. NL plays the role that - LF does in an ASCII/Unicode environment. */ -/* #undef EBCDIC_NL25 */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_ASSERT_H */ - -/* Define this if your compiler supports __attribute__((uninitialized)) */ -/* #undef HAVE_ATTRIBUTE_UNINITIALIZED */ - -/* Define this if your compiler provides __assume() */ -/* #undef HAVE_BUILTIN_ASSUME */ - -/* Define this if your compiler provides __builtin_mul_overflow() */ -/* #undef HAVE_BUILTIN_MUL_OVERFLOW */ - -/* Define this if your compiler provides __builtin_unreachable() */ -/* #undef HAVE_BUILTIN_UNREACHABLE */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_BZLIB_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_DIRENT_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_DLFCN_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_EDITLINE_READLINE_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_EDIT_READLINE_READLINE_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_INTTYPES_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_LIMITS_H */ - -/* Define to 1 if you have the `memfd_create' function. */ -/* #undef HAVE_MEMFD_CREATE */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_MINIX_CONFIG_H */ - -/* Define to 1 if you have the `mkostemp' function. */ -/* #undef HAVE_MKOSTEMP */ - -/* Define if you have POSIX threads libraries and header files. */ -/* #undef HAVE_PTHREAD */ - -/* Have PTHREAD_PRIO_INHERIT. */ -/* #undef HAVE_PTHREAD_PRIO_INHERIT */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_READLINE_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_READLINE_HISTORY_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_READLINE_READLINE_H */ - -/* Define to 1 if you have the `realpath' function. */ -/* #undef HAVE_REALPATH */ - -/* Define to 1 if you have the `secure_getenv' function. */ -/* #undef HAVE_SECURE_GETENV */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_STDINT_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_STDIO_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_STDLIB_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_STRINGS_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_STRING_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_STAT_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_TYPES_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_SYS_WAIT_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_UNISTD_H */ - -/* Define to 1 if the compiler supports GCC compatible visibility - declarations. */ -/* #undef HAVE_VISIBILITY */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_WCHAR_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_WINDOWS_H */ - -/* Define to 1 if you have the header file. */ -/* #undef HAVE_ZLIB_H */ - -/* This limits the amount of memory that may be used while matching a pattern. - It applies to both pcre2_match() and pcre2_dfa_match(). It does not apply - to JIT matching. The value is in kibibytes (units of 1024 bytes). */ -#ifndef HEAP_LIMIT -#define HEAP_LIMIT 20000000 -#endif - -/* The value of LINK_SIZE determines the number of bytes used to store links - as offsets within the compiled regex. The default is 2, which allows for - compiled patterns up to 65535 code units long. This covers the vast - majority of cases. However, PCRE2 can also be compiled to use 3 or 4 bytes - instead. This allows for longer patterns in extreme cases. */ -#ifndef LINK_SIZE -#define LINK_SIZE 2 -#endif - -/* Define to the sub-directory where libtool stores uninstalled libraries. */ -/* This is ignored unless you are using libtool. */ -#ifndef LT_OBJDIR -#define LT_OBJDIR ".libs/" -#endif - -/* The value of MATCH_LIMIT determines the default number of times the - pcre2_match() function can record a backtrack position during a single - matching attempt. The value is also used to limit a loop counter in - pcre2_dfa_match(). There is a runtime interface for setting a different - limit. The limit exists in order to catch runaway regular expressions that - take forever to determine that they do not match. The default is set very - large so that it does not accidentally catch legitimate cases. */ -#ifndef MATCH_LIMIT -#define MATCH_LIMIT 10000000 -#endif - -/* The above limit applies to all backtracks, whether or not they are nested. - In some environments it is desirable to limit the nesting of backtracking - (that is, the depth of tree that is searched) more strictly, in order to - restrict the maximum amount of heap memory that is used. The value of - MATCH_LIMIT_DEPTH provides this facility. To have any useful effect, it - must be less than the value of MATCH_LIMIT. The default is to use the same - value as MATCH_LIMIT. There is a runtime method for setting a different - limit. In the case of pcre2_dfa_match(), this limit controls the depth of - the internal nested function calls that are used for pattern recursions, - lookarounds, and atomic groups. */ -#ifndef MATCH_LIMIT_DEPTH -#define MATCH_LIMIT_DEPTH MATCH_LIMIT -#endif - -/* This limit is parameterized just in case anybody ever wants to change it. - Care must be taken if it is increased, because it guards against integer - overflow caused by enormously large patterns. */ -#ifndef MAX_NAME_COUNT -#define MAX_NAME_COUNT 10000 -#endif - -/* This limit is parameterized just in case anybody ever wants to change it. - Care must be taken if it is increased, because it guards against integer - overflow caused by enormously large patterns. */ -#ifndef MAX_NAME_SIZE -#define MAX_NAME_SIZE 128 -#endif - -/* The value of MAX_VARLOOKBEHIND specifies the default maximum length, in - characters, for a variable-length lookbehind assertion. */ -#ifndef MAX_VARLOOKBEHIND -#define MAX_VARLOOKBEHIND 255 -#endif - -/* Defining NEVER_BACKSLASH_C locks out the use of \C in all patterns. */ -/* #undef NEVER_BACKSLASH_C */ - -/* The value of NEWLINE_DEFAULT determines the default newline character - sequence. PCRE2 client programs can override this by selecting other values - at run time. The valid values are 1 (CR), 2 (LF), 3 (CRLF), 4 (ANY), 5 - (ANYCRLF), and 6 (NUL). */ -#ifndef NEWLINE_DEFAULT -#define NEWLINE_DEFAULT 2 -#endif - -/* Name of package */ -#define PACKAGE "pcre2" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "PCRE2" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "PCRE2 10.47" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "pcre2" - -/* Define to the home page for this package. */ -#define PACKAGE_URL "" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "10.47" - -/* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested - parentheses (of any kind) in a pattern. This limits the amount of system - stack that is used while compiling a pattern. */ -#ifndef PARENS_NEST_LIMIT -#define PARENS_NEST_LIMIT 250 -#endif - -/* The value of PCRE2GREP_BUFSIZE is the starting size of the buffer used by - pcre2grep to hold parts of the file it is searching. The buffer will be - expanded up to PCRE2GREP_MAX_BUFSIZE if necessary, for files containing - very long lines. The actual amount of memory used by pcre2grep is three - times this number, because it allows for the buffering of "before" and - "after" lines. */ -#ifndef PCRE2GREP_BUFSIZE -#define PCRE2GREP_BUFSIZE 20480 -#endif - -/* The value of PCRE2GREP_MAX_BUFSIZE specifies the maximum size of the buffer - used by pcre2grep to hold parts of the file it is searching. The actual - amount of memory used by pcre2grep is three times this number, because it - allows for the buffering of "before" and "after" lines. */ -#ifndef PCRE2GREP_MAX_BUFSIZE -#define PCRE2GREP_MAX_BUFSIZE 1048576 -#endif - -/* See PCRE2_EXP_DEFN; but this is applied to functions in the libpcre2-posix - library. */ -/* #undef PCRE2POSIX_EXP_DEFN */ - -/* Define to any value if linking libpcre2-posix dynamically. Ideally, if both - static and shared libraries are being built, then PCRE2POSIX_SHARED would - be defined only for the shared build. Indeed, this is a requirement on - Windows. However, when building with Autoconf and libtool, we compile the - sources once only to create both the static and shared library, so in this - case, PCRE2POSIX_SHARED should only be defined if the shared library is - being built, regardless of whether or not the static library is also being - built. */ -/* #undef PCRE2POSIX_SHARED */ - -/* Define to any value to include debugging code. */ -/* #undef PCRE2_DEBUG */ - -/* Define to the annotation for making a symbol visible. */ -#define PCRE2_EXPORT - -/* If you are compiling for a system other than a Unix-like system or - Win32, and it needs some magic to be inserted before the definition - of a function that is exported by the library, define this macro to - contain the relevant magic. If you do not define this macro, a suitable - __declspec value is used for Windows systems; in other environments - a compiler relevant "extern" is used with any "visibility" related - attributes from PCRE2_EXPORT included. - This macro apears at the start of every exported function that is part - of the external API. It does not appear on functions that are "external" - in the C sense, but which are internal to the library. */ -/* #undef PCRE2_EXP_DEFN */ - -/* Define to any value if linking statically. Ideally, if both static and - shared libraries are being built, then PCRE2_STATIC would be defined only - for the static build. Indeed, this is a requirement on Windows. With - Autoconf and libtool however, it is idiomatic to compile the sources once - to create both the static and shared library, so in this case, PCRE2_STATIC - should only be defined if no shared library is being built. */ -/* #undef PCRE2_STATIC */ - -/* Define to necessary symbol if this constant uses a non-standard name on - your system. */ -/* #undef PTHREAD_CREATE_JOINABLE */ - -/* Define to any non-zero number to enable support for SELinux compatible - executable memory allocator in JIT. Note that this will have no effect - unless SUPPORT_JIT is also defined. */ -/* #undef SLJIT_PROT_EXECUTABLE_ALLOCATOR */ - -/* Define to 1 if all of the C90 standard headers exist (not just the ones - required in a freestanding environment). This macro is provided for - backward compatibility; new code need not use it. */ -/* #undef STDC_HEADERS */ - -/* Define to any value to enable differential fuzzing support. */ -/* #undef SUPPORT_DIFF_FUZZ */ - -/* Define to any value to enable support for Just-In-Time compiling. */ -/* #undef SUPPORT_JIT */ - -/* Define to any value to allow pcre2grep to be linked with libbz2, so that it - is able to handle .bz2 files. */ -/* #undef SUPPORT_LIBBZ2 */ - -/* Define to any value to allow pcre2test to be linked with libedit. */ -/* #undef SUPPORT_LIBEDIT */ - -/* Define to any value to allow pcre2test to be linked with libreadline. */ -/* #undef SUPPORT_LIBREADLINE */ - -/* Define to any value to allow pcre2grep to be linked with libz, so that it - is able to handle .gz files. */ -/* #undef SUPPORT_LIBZ */ - -/* Define to any value to enable callout script support in pcre2grep. */ -/* #undef SUPPORT_PCRE2GREP_CALLOUT */ - -/* Define to any value to enable fork support in pcre2grep callout scripts. - This will have no effect unless SUPPORT_PCRE2GREP_CALLOUT is also defined. - */ -/* #undef SUPPORT_PCRE2GREP_CALLOUT_FORK */ - -/* Define to any value to enable JIT support in pcre2grep. Note that this will - have no effect unless SUPPORT_JIT is also defined. */ -/* #undef SUPPORT_PCRE2GREP_JIT */ - -/* Define to any value to enable the 16 bit PCRE2 library. */ -/* #undef SUPPORT_PCRE2_16 */ - -/* Define to any value to enable the 32 bit PCRE2 library. */ -/* #undef SUPPORT_PCRE2_32 */ - -/* Define to any value to enable the 8 bit PCRE2 library. */ -/* #undef SUPPORT_PCRE2_8 */ - -/* Define to any value to enable support for Unicode and UTF encoding. This - will work even in an EBCDIC environment, but it is incompatible with the - EBCDIC macro. That is, PCRE2 can support *either* EBCDIC code *or* - ASCII/Unicode, but not both at once. */ -/* #undef SUPPORT_UNICODE */ - -/* Define to any value for valgrind support to find invalid memory reads. */ -/* #undef SUPPORT_VALGRIND */ - -/* Enable extensions on AIX 3, Interix. */ -#ifndef _ALL_SOURCE -# define _ALL_SOURCE 1 -#endif -/* Enable general extensions on macOS. */ -#ifndef _DARWIN_C_SOURCE -# define _DARWIN_C_SOURCE 1 -#endif -/* Enable general extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# define __EXTENSIONS__ 1 -#endif -/* Enable GNU extensions on systems that have them. */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif -/* Enable X/Open compliant socket functions that do not require linking - with -lxnet on HP-UX 11.11. */ -#ifndef _HPUX_ALT_XOPEN_SOCKET_API -# define _HPUX_ALT_XOPEN_SOCKET_API 1 -#endif -/* Identify the host operating system as Minix. - This macro does not affect the system headers' behavior. - A future release of Autoconf may stop defining this macro. */ -#ifndef _MINIX -/* # undef _MINIX */ -#endif -/* Enable general extensions on NetBSD. - Enable NetBSD compatibility extensions on Minix. */ -#ifndef _NETBSD_SOURCE -# define _NETBSD_SOURCE 1 -#endif -/* Enable OpenBSD compatibility extensions on NetBSD. - Oddly enough, this does nothing on OpenBSD. */ -#ifndef _OPENBSD_SOURCE -# define _OPENBSD_SOURCE 1 -#endif -/* Define to 1 if needed for POSIX-compatible behavior. */ -#ifndef _POSIX_SOURCE -/* # undef _POSIX_SOURCE */ -#endif -/* Define to 2 if needed for POSIX-compatible behavior. */ -#ifndef _POSIX_1_SOURCE -/* # undef _POSIX_1_SOURCE */ -#endif -/* Enable POSIX-compatible threading on Solaris. */ -#ifndef _POSIX_PTHREAD_SEMANTICS -# define _POSIX_PTHREAD_SEMANTICS 1 -#endif -/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ -#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ -# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 -#endif -/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ -#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ -# define __STDC_WANT_IEC_60559_BFP_EXT__ 1 -#endif -/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ -#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ -# define __STDC_WANT_IEC_60559_DFP_EXT__ 1 -#endif -/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ -#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ -# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 -#endif -/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ -#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ -# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 -#endif -/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ -#ifndef __STDC_WANT_LIB_EXT2__ -# define __STDC_WANT_LIB_EXT2__ 1 -#endif -/* Enable extensions specified by ISO/IEC 24747:2009. */ -#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ -# define __STDC_WANT_MATH_SPEC_FUNCS__ 1 -#endif -/* Enable extensions on HP NonStop. */ -#ifndef _TANDEM_SOURCE -# define _TANDEM_SOURCE 1 -#endif -/* Enable X/Open extensions. Define to 500 only if necessary - to make mbstate_t available. */ -#ifndef _XOPEN_SOURCE -/* # undef _XOPEN_SOURCE */ -#endif - -/* Version number of package */ -#define VERSION "10.47" - -/* Number of bits in a file offset, on hosts where this is settable. */ -/* #undef _FILE_OFFSET_BITS */ - -/* Define for large files, on AIX-style hosts. */ -/* #undef _LARGE_FILES */ - -/* Define to empty if `const' does not conform to ANSI C. */ -/* #undef const */ - -/* Define to the type of a signed integer type of width exactly 64 bits if - such a type exists and the standard includes do not define it. */ -/* #undef int64_t */ - -/* Define to `unsigned int' if does not define. */ -/* #undef size_t */ diff --git a/vendor/core/vendor/pcre2/src/config.h.in b/vendor/core/vendor/pcre2/src/config.h.in deleted file mode 100644 index 0f2ef3834..000000000 --- a/vendor/core/vendor/pcre2/src/config.h.in +++ /dev/null @@ -1,472 +0,0 @@ -/* src/config.h.in. Generated from configure.ac by autoheader. */ - - -/* PCRE2 is written in Standard C, but there are a few non-standard things it -can cope with, allowing it to run on SunOS4 and other "close to standard" -systems. - -In environments that support the GNU autotools, config.h.in is converted into -config.h by the "configure" script. In environments that use CMake, -config-cmake.in is converted into config.h. If you are going to build PCRE2 "by -hand" without using "configure" or CMake, you should copy the distributed -config.h.generic to config.h, and edit the macro definitions to be the way you -need them. You must then add -DHAVE_CONFIG_H to all of your compile commands, -so that config.h is included at the start of every source. - -Alternatively, you can avoid editing by using -D on the compiler command line -to set the macro values. In this case, you do not have to set -DHAVE_CONFIG_H, -but if you do, default values will be taken from config.h for non-boolean -macros that are not defined on the command line. - -Boolean macros such as HAVE_STDLIB_H and SUPPORT_PCRE2_8 should either be -defined (conventionally to 1) for TRUE, and not defined at all for FALSE. All -such macros are listed as a commented #undef in config.h.generic. Macros such -as MATCH_LIMIT, whose actual value is relevant, have defaults defined, but are -surrounded by #ifndef/#endif lines so that the value can be overridden by -D. */ - -/* By default, the \R escape sequence matches any Unicode line ending - character or sequence of characters. If BSR_ANYCRLF is defined (to any - value), this is changed so that backslash-R matches only CR, LF, or CRLF. - The build-time default can be overridden by the user of PCRE2 at runtime. - */ -#undef BSR_ANYCRLF - -/* Define to any value to disable the use of the z and t modifiers in - formatting settings such as %zu or %td (this is rarely needed). */ -#undef DISABLE_PERCENT_ZT - -/* If you are compiling for a system that uses EBCDIC instead of ASCII - character codes, define this macro to any value. When EBCDIC is set, PCRE2 - assumes that all input strings are in EBCDIC. If you do not define this - macro, PCRE2 will assume input strings are ASCII or UTF-8/16/32 Unicode. It - is not possible to build a version of PCRE2 that supports both EBCDIC and - ASCII or UTF-8/16/32. */ -#undef EBCDIC - -/* To force an EBCDIC environment, define this macro to make the core PCRE2 - library functions use EBCDIC codepage 1047, regardless of whether the - compiler supports it using C character literals. */ -#undef EBCDIC_IGNORING_COMPILER - -/* In an EBCDIC environment, define this macro to any value to arrange for the - NL character to be 0x25 instead of the default 0x15. NL plays the role that - LF does in an ASCII/Unicode environment. */ -#undef EBCDIC_NL25 - -/* Define to 1 if you have the header file. */ -#undef HAVE_ASSERT_H - -/* Define this if your compiler supports __attribute__((uninitialized)) */ -#undef HAVE_ATTRIBUTE_UNINITIALIZED - -/* Define this if your compiler provides __assume() */ -#undef HAVE_BUILTIN_ASSUME - -/* Define this if your compiler provides __builtin_mul_overflow() */ -#undef HAVE_BUILTIN_MUL_OVERFLOW - -/* Define this if your compiler provides __builtin_unreachable() */ -#undef HAVE_BUILTIN_UNREACHABLE - -/* Define to 1 if you have the header file. */ -#undef HAVE_BZLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_DIRENT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_EDITLINE_READLINE_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_EDIT_READLINE_READLINE_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_LIMITS_H - -/* Define to 1 if you have the `memfd_create' function. */ -#undef HAVE_MEMFD_CREATE - -/* Define to 1 if you have the header file. */ -#undef HAVE_MINIX_CONFIG_H - -/* Define to 1 if you have the `mkostemp' function. */ -#undef HAVE_MKOSTEMP - -/* Define if you have POSIX threads libraries and header files. */ -#undef HAVE_PTHREAD - -/* Have PTHREAD_PRIO_INHERIT. */ -#undef HAVE_PTHREAD_PRIO_INHERIT - -/* Define to 1 if you have the header file. */ -#undef HAVE_READLINE_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_READLINE_HISTORY_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_READLINE_READLINE_H - -/* Define to 1 if you have the `realpath' function. */ -#undef HAVE_REALPATH - -/* Define to 1 if you have the `secure_getenv' function. */ -#undef HAVE_SECURE_GETENV - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDIO_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_WAIT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to 1 if the compiler supports GCC compatible visibility - declarations. */ -#undef HAVE_VISIBILITY - -/* Define to 1 if you have the header file. */ -#undef HAVE_WCHAR_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_WINDOWS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_ZLIB_H - -/* This limits the amount of memory that may be used while matching a pattern. - It applies to both pcre2_match() and pcre2_dfa_match(). It does not apply - to JIT matching. The value is in kibibytes (units of 1024 bytes). */ -#undef HEAP_LIMIT - -/* The value of LINK_SIZE determines the number of bytes used to store links - as offsets within the compiled regex. The default is 2, which allows for - compiled patterns up to 65535 code units long. This covers the vast - majority of cases. However, PCRE2 can also be compiled to use 3 or 4 bytes - instead. This allows for longer patterns in extreme cases. */ -#undef LINK_SIZE - -/* Define to the sub-directory where libtool stores uninstalled libraries. */ -#undef LT_OBJDIR - -/* The value of MATCH_LIMIT determines the default number of times the - pcre2_match() function can record a backtrack position during a single - matching attempt. The value is also used to limit a loop counter in - pcre2_dfa_match(). There is a runtime interface for setting a different - limit. The limit exists in order to catch runaway regular expressions that - take forever to determine that they do not match. The default is set very - large so that it does not accidentally catch legitimate cases. */ -#undef MATCH_LIMIT - -/* The above limit applies to all backtracks, whether or not they are nested. - In some environments it is desirable to limit the nesting of backtracking - (that is, the depth of tree that is searched) more strictly, in order to - restrict the maximum amount of heap memory that is used. The value of - MATCH_LIMIT_DEPTH provides this facility. To have any useful effect, it - must be less than the value of MATCH_LIMIT. The default is to use the same - value as MATCH_LIMIT. There is a runtime method for setting a different - limit. In the case of pcre2_dfa_match(), this limit controls the depth of - the internal nested function calls that are used for pattern recursions, - lookarounds, and atomic groups. */ -#undef MATCH_LIMIT_DEPTH - -/* This limit is parameterized just in case anybody ever wants to change it. - Care must be taken if it is increased, because it guards against integer - overflow caused by enormously large patterns. */ -#undef MAX_NAME_COUNT - -/* This limit is parameterized just in case anybody ever wants to change it. - Care must be taken if it is increased, because it guards against integer - overflow caused by enormously large patterns. */ -#undef MAX_NAME_SIZE - -/* The value of MAX_VARLOOKBEHIND specifies the default maximum length, in - characters, for a variable-length lookbehind assertion. */ -#undef MAX_VARLOOKBEHIND - -/* Defining NEVER_BACKSLASH_C locks out the use of \C in all patterns. */ -#undef NEVER_BACKSLASH_C - -/* The value of NEWLINE_DEFAULT determines the default newline character - sequence. PCRE2 client programs can override this by selecting other values - at run time. The valid values are 1 (CR), 2 (LF), 3 (CRLF), 4 (ANY), 5 - (ANYCRLF), and 6 (NUL). */ -#undef NEWLINE_DEFAULT - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested - parentheses (of any kind) in a pattern. This limits the amount of system - stack that is used while compiling a pattern. */ -#undef PARENS_NEST_LIMIT - -/* The value of PCRE2GREP_BUFSIZE is the starting size of the buffer used by - pcre2grep to hold parts of the file it is searching. The buffer will be - expanded up to PCRE2GREP_MAX_BUFSIZE if necessary, for files containing - very long lines. The actual amount of memory used by pcre2grep is three - times this number, because it allows for the buffering of "before" and - "after" lines. */ -#undef PCRE2GREP_BUFSIZE - -/* The value of PCRE2GREP_MAX_BUFSIZE specifies the maximum size of the buffer - used by pcre2grep to hold parts of the file it is searching. The actual - amount of memory used by pcre2grep is three times this number, because it - allows for the buffering of "before" and "after" lines. */ -#undef PCRE2GREP_MAX_BUFSIZE - - -/* See PCRE2_EXP_DEFN; but this is applied to functions in the libpcre2-posix - library. */ -#undef PCRE2POSIX_EXP_DEFN - -/* Define to any value if linking libpcre2-posix dynamically. Ideally, if both - static and shared libraries are being built, then PCRE2POSIX_SHARED would - be defined only for the shared build. Indeed, this is a requirement on - Windows. However, when building with Autoconf and libtool, we compile the - sources once only to create both the static and shared library, so in this - case, PCRE2POSIX_SHARED should only be defined if the shared library is - being built, regardless of whether or not the static library is also being - built. */ -#undef PCRE2POSIX_SHARED - -/* Define to any value to include debugging code. */ -#undef PCRE2_DEBUG - -/* Define to the annotation for making a symbol visible. */ -#undef PCRE2_EXPORT - - -/* If you are compiling for a system other than a Unix-like system or - Win32, and it needs some magic to be inserted before the definition - of a function that is exported by the library, define this macro to - contain the relevant magic. If you do not define this macro, a suitable - __declspec value is used for Windows systems; in other environments - a compiler relevant "extern" is used with any "visibility" related - attributes from PCRE2_EXPORT included. - This macro apears at the start of every exported function that is part - of the external API. It does not appear on functions that are "external" - in the C sense, but which are internal to the library. */ -#undef PCRE2_EXP_DEFN - -/* Define to any value if linking statically. Ideally, if both static and - shared libraries are being built, then PCRE2_STATIC would be defined only - for the static build. Indeed, this is a requirement on Windows. With - Autoconf and libtool however, it is idiomatic to compile the sources once - to create both the static and shared library, so in this case, PCRE2_STATIC - should only be defined if no shared library is being built. */ -#undef PCRE2_STATIC - -/* Define to necessary symbol if this constant uses a non-standard name on - your system. */ -#undef PTHREAD_CREATE_JOINABLE - -/* Define to any non-zero number to enable support for SELinux compatible - executable memory allocator in JIT. Note that this will have no effect - unless SUPPORT_JIT is also defined. */ -#undef SLJIT_PROT_EXECUTABLE_ALLOCATOR - -/* Define to 1 if all of the C90 standard headers exist (not just the ones - required in a freestanding environment). This macro is provided for - backward compatibility; new code need not use it. */ -#undef STDC_HEADERS - -/* Define to any value to enable differential fuzzing support. */ -#undef SUPPORT_DIFF_FUZZ - -/* Define to any value to enable support for Just-In-Time compiling. */ -#undef SUPPORT_JIT - -/* Define to any value to allow pcre2grep to be linked with libbz2, so that it - is able to handle .bz2 files. */ -#undef SUPPORT_LIBBZ2 - -/* Define to any value to allow pcre2test to be linked with libedit. */ -#undef SUPPORT_LIBEDIT - -/* Define to any value to allow pcre2test to be linked with libreadline. */ -#undef SUPPORT_LIBREADLINE - -/* Define to any value to allow pcre2grep to be linked with libz, so that it - is able to handle .gz files. */ -#undef SUPPORT_LIBZ - -/* Define to any value to enable callout script support in pcre2grep. */ -#undef SUPPORT_PCRE2GREP_CALLOUT - -/* Define to any value to enable fork support in pcre2grep callout scripts. - This will have no effect unless SUPPORT_PCRE2GREP_CALLOUT is also defined. - */ -#undef SUPPORT_PCRE2GREP_CALLOUT_FORK - -/* Define to any value to enable JIT support in pcre2grep. Note that this will - have no effect unless SUPPORT_JIT is also defined. */ -#undef SUPPORT_PCRE2GREP_JIT - -/* Define to any value to enable the 16 bit PCRE2 library. */ -#undef SUPPORT_PCRE2_16 - -/* Define to any value to enable the 32 bit PCRE2 library. */ -#undef SUPPORT_PCRE2_32 - -/* Define to any value to enable the 8 bit PCRE2 library. */ -#undef SUPPORT_PCRE2_8 - -/* Define to any value to enable support for Unicode and UTF encoding. This - will work even in an EBCDIC environment, but it is incompatible with the - EBCDIC macro. That is, PCRE2 can support *either* EBCDIC code *or* - ASCII/Unicode, but not both at once. */ -#undef SUPPORT_UNICODE - -/* Define to any value for valgrind support to find invalid memory reads. */ -#undef SUPPORT_VALGRIND - -/* Enable extensions on AIX 3, Interix. */ -#ifndef _ALL_SOURCE -# undef _ALL_SOURCE -#endif -/* Enable general extensions on macOS. */ -#ifndef _DARWIN_C_SOURCE -# undef _DARWIN_C_SOURCE -#endif -/* Enable general extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# undef __EXTENSIONS__ -#endif -/* Enable GNU extensions on systems that have them. */ -#ifndef _GNU_SOURCE -# undef _GNU_SOURCE -#endif -/* Enable X/Open compliant socket functions that do not require linking - with -lxnet on HP-UX 11.11. */ -#ifndef _HPUX_ALT_XOPEN_SOCKET_API -# undef _HPUX_ALT_XOPEN_SOCKET_API -#endif -/* Identify the host operating system as Minix. - This macro does not affect the system headers' behavior. - A future release of Autoconf may stop defining this macro. */ -#ifndef _MINIX -# undef _MINIX -#endif -/* Enable general extensions on NetBSD. - Enable NetBSD compatibility extensions on Minix. */ -#ifndef _NETBSD_SOURCE -# undef _NETBSD_SOURCE -#endif -/* Enable OpenBSD compatibility extensions on NetBSD. - Oddly enough, this does nothing on OpenBSD. */ -#ifndef _OPENBSD_SOURCE -# undef _OPENBSD_SOURCE -#endif -/* Define to 1 if needed for POSIX-compatible behavior. */ -#ifndef _POSIX_SOURCE -# undef _POSIX_SOURCE -#endif -/* Define to 2 if needed for POSIX-compatible behavior. */ -#ifndef _POSIX_1_SOURCE -# undef _POSIX_1_SOURCE -#endif -/* Enable POSIX-compatible threading on Solaris. */ -#ifndef _POSIX_PTHREAD_SEMANTICS -# undef _POSIX_PTHREAD_SEMANTICS -#endif -/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ -#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ -# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ -#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ -# undef __STDC_WANT_IEC_60559_BFP_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ -#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ -# undef __STDC_WANT_IEC_60559_DFP_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ -#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ -# undef __STDC_WANT_IEC_60559_FUNCS_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ -#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ -# undef __STDC_WANT_IEC_60559_TYPES_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ -#ifndef __STDC_WANT_LIB_EXT2__ -# undef __STDC_WANT_LIB_EXT2__ -#endif -/* Enable extensions specified by ISO/IEC 24747:2009. */ -#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ -# undef __STDC_WANT_MATH_SPEC_FUNCS__ -#endif -/* Enable extensions on HP NonStop. */ -#ifndef _TANDEM_SOURCE -# undef _TANDEM_SOURCE -#endif -/* Enable X/Open extensions. Define to 500 only if necessary - to make mbstate_t available. */ -#ifndef _XOPEN_SOURCE -# undef _XOPEN_SOURCE -#endif - - -/* Version number of package */ -#undef VERSION - -/* Number of bits in a file offset, on hosts where this is settable. */ -#undef _FILE_OFFSET_BITS - -/* Define for large files, on AIX-style hosts. */ -#undef _LARGE_FILES - -/* Define to empty if `const' does not conform to ANSI C. */ -#undef const - -/* Define to the type of a signed integer type of width exactly 64 bits if - such a type exists and the standard includes do not define it. */ -#undef int64_t - -/* Define to `unsigned int' if does not define. */ -#undef size_t diff --git a/vendor/core/vendor/pcre2/src/libpcre2-16.sym b/vendor/core/vendor/pcre2/src/libpcre2-16.sym deleted file mode 100644 index fd5257db6..000000000 --- a/vendor/core/vendor/pcre2/src/libpcre2-16.sym +++ /dev/null @@ -1,88 +0,0 @@ -# First version of PCRE2 in which symbols were assigned versions. -PCRE2_10.47 { - global: - pcre2_callout_enumerate_16; - pcre2_code_copy_16; - pcre2_code_copy_with_tables_16; - pcre2_code_free_16; - pcre2_compile_16; - pcre2_compile_context_copy_16; - pcre2_compile_context_create_16; - pcre2_compile_context_free_16; - pcre2_config_16; - pcre2_convert_context_copy_16; - pcre2_convert_context_create_16; - pcre2_convert_context_free_16; - pcre2_converted_pattern_free_16; - pcre2_dfa_match_16; - pcre2_general_context_copy_16; - pcre2_general_context_create_16; - pcre2_general_context_free_16; - pcre2_get_error_message_16; - pcre2_get_mark_16; - pcre2_get_match_data_heapframes_size_16; - pcre2_get_match_data_size_16; - pcre2_get_ovector_count_16; - pcre2_get_ovector_pointer_16; - pcre2_get_startchar_16; - pcre2_jit_compile_16; - pcre2_jit_free_unused_memory_16; - pcre2_jit_match_16; - pcre2_jit_stack_assign_16; - pcre2_jit_stack_create_16; - pcre2_jit_stack_free_16; - pcre2_maketables_16; - pcre2_maketables_free_16; - pcre2_match_16; - pcre2_match_context_copy_16; - pcre2_match_context_create_16; - pcre2_match_context_free_16; - pcre2_match_data_create_16; - pcre2_match_data_create_from_pattern_16; - pcre2_match_data_free_16; - pcre2_next_match_16; - pcre2_pattern_convert_16; - pcre2_pattern_info_16; - pcre2_serialize_decode_16; - pcre2_serialize_encode_16; - pcre2_serialize_free_16; - pcre2_serialize_get_number_of_codes_16; - pcre2_set_bsr_16; - pcre2_set_callout_16; - pcre2_set_character_tables_16; - pcre2_set_compile_extra_options_16; - pcre2_set_compile_recursion_guard_16; - pcre2_set_depth_limit_16; - pcre2_set_glob_escape_16; - pcre2_set_glob_separator_16; - pcre2_set_heap_limit_16; - pcre2_set_match_limit_16; - pcre2_set_max_pattern_compiled_length_16; - pcre2_set_max_pattern_length_16; - pcre2_set_max_varlookbehind_16; - pcre2_set_newline_16; - pcre2_set_offset_limit_16; - pcre2_set_optimize_16; - pcre2_set_parens_nest_limit_16; - pcre2_set_recursion_limit_16; - pcre2_set_recursion_memory_management_16; - pcre2_set_substitute_callout_16; - pcre2_set_substitute_case_callout_16; - pcre2_substitute_16; - pcre2_substring_copy_byname_16; - pcre2_substring_copy_bynumber_16; - pcre2_substring_free_16; - pcre2_substring_get_byname_16; - pcre2_substring_get_bynumber_16; - pcre2_substring_length_byname_16; - pcre2_substring_length_bynumber_16; - pcre2_substring_list_free_16; - pcre2_substring_list_get_16; - pcre2_substring_nametable_scan_16; - pcre2_substring_number_from_name_16; - local: - _fini; - _init; -}; - -# PCRE2_10.48 {} PCRE2_10.47; diff --git a/vendor/core/vendor/pcre2/src/libpcre2-32.sym b/vendor/core/vendor/pcre2/src/libpcre2-32.sym deleted file mode 100644 index d4606c2b5..000000000 --- a/vendor/core/vendor/pcre2/src/libpcre2-32.sym +++ /dev/null @@ -1,88 +0,0 @@ -# First version of PCRE2 in which symbols were assigned versions. -PCRE2_10.47 { - global: - pcre2_callout_enumerate_32; - pcre2_code_copy_32; - pcre2_code_copy_with_tables_32; - pcre2_code_free_32; - pcre2_compile_32; - pcre2_compile_context_copy_32; - pcre2_compile_context_create_32; - pcre2_compile_context_free_32; - pcre2_config_32; - pcre2_convert_context_copy_32; - pcre2_convert_context_create_32; - pcre2_convert_context_free_32; - pcre2_converted_pattern_free_32; - pcre2_dfa_match_32; - pcre2_general_context_copy_32; - pcre2_general_context_create_32; - pcre2_general_context_free_32; - pcre2_get_error_message_32; - pcre2_get_mark_32; - pcre2_get_match_data_heapframes_size_32; - pcre2_get_match_data_size_32; - pcre2_get_ovector_count_32; - pcre2_get_ovector_pointer_32; - pcre2_get_startchar_32; - pcre2_jit_compile_32; - pcre2_jit_free_unused_memory_32; - pcre2_jit_match_32; - pcre2_jit_stack_assign_32; - pcre2_jit_stack_create_32; - pcre2_jit_stack_free_32; - pcre2_maketables_32; - pcre2_maketables_free_32; - pcre2_match_32; - pcre2_match_context_copy_32; - pcre2_match_context_create_32; - pcre2_match_context_free_32; - pcre2_match_data_create_32; - pcre2_match_data_create_from_pattern_32; - pcre2_match_data_free_32; - pcre2_next_match_32; - pcre2_pattern_convert_32; - pcre2_pattern_info_32; - pcre2_serialize_decode_32; - pcre2_serialize_encode_32; - pcre2_serialize_free_32; - pcre2_serialize_get_number_of_codes_32; - pcre2_set_bsr_32; - pcre2_set_callout_32; - pcre2_set_character_tables_32; - pcre2_set_compile_extra_options_32; - pcre2_set_compile_recursion_guard_32; - pcre2_set_depth_limit_32; - pcre2_set_glob_escape_32; - pcre2_set_glob_separator_32; - pcre2_set_heap_limit_32; - pcre2_set_match_limit_32; - pcre2_set_max_pattern_compiled_length_32; - pcre2_set_max_pattern_length_32; - pcre2_set_max_varlookbehind_32; - pcre2_set_newline_32; - pcre2_set_offset_limit_32; - pcre2_set_optimize_32; - pcre2_set_parens_nest_limit_32; - pcre2_set_recursion_limit_32; - pcre2_set_recursion_memory_management_32; - pcre2_set_substitute_callout_32; - pcre2_set_substitute_case_callout_32; - pcre2_substitute_32; - pcre2_substring_copy_byname_32; - pcre2_substring_copy_bynumber_32; - pcre2_substring_free_32; - pcre2_substring_get_byname_32; - pcre2_substring_get_bynumber_32; - pcre2_substring_length_byname_32; - pcre2_substring_length_bynumber_32; - pcre2_substring_list_free_32; - pcre2_substring_list_get_32; - pcre2_substring_nametable_scan_32; - pcre2_substring_number_from_name_32; - local: - _fini; - _init; -}; - -# PCRE2_10.48 {} PCRE2_10.47; diff --git a/vendor/core/vendor/pcre2/src/libpcre2-8.sym b/vendor/core/vendor/pcre2/src/libpcre2-8.sym deleted file mode 100644 index 368b4e441..000000000 --- a/vendor/core/vendor/pcre2/src/libpcre2-8.sym +++ /dev/null @@ -1,88 +0,0 @@ -# First version of PCRE2 in which symbols were assigned versions. -PCRE2_10.47 { - global: - pcre2_callout_enumerate_8; - pcre2_code_copy_8; - pcre2_code_copy_with_tables_8; - pcre2_code_free_8; - pcre2_compile_8; - pcre2_compile_context_copy_8; - pcre2_compile_context_create_8; - pcre2_compile_context_free_8; - pcre2_config_8; - pcre2_convert_context_copy_8; - pcre2_convert_context_create_8; - pcre2_convert_context_free_8; - pcre2_converted_pattern_free_8; - pcre2_dfa_match_8; - pcre2_general_context_copy_8; - pcre2_general_context_create_8; - pcre2_general_context_free_8; - pcre2_get_error_message_8; - pcre2_get_mark_8; - pcre2_get_match_data_heapframes_size_8; - pcre2_get_match_data_size_8; - pcre2_get_ovector_count_8; - pcre2_get_ovector_pointer_8; - pcre2_get_startchar_8; - pcre2_jit_compile_8; - pcre2_jit_free_unused_memory_8; - pcre2_jit_match_8; - pcre2_jit_stack_assign_8; - pcre2_jit_stack_create_8; - pcre2_jit_stack_free_8; - pcre2_maketables_8; - pcre2_maketables_free_8; - pcre2_match_8; - pcre2_match_context_copy_8; - pcre2_match_context_create_8; - pcre2_match_context_free_8; - pcre2_match_data_create_8; - pcre2_match_data_create_from_pattern_8; - pcre2_match_data_free_8; - pcre2_next_match_8; - pcre2_pattern_convert_8; - pcre2_pattern_info_8; - pcre2_serialize_decode_8; - pcre2_serialize_encode_8; - pcre2_serialize_free_8; - pcre2_serialize_get_number_of_codes_8; - pcre2_set_bsr_8; - pcre2_set_callout_8; - pcre2_set_character_tables_8; - pcre2_set_compile_extra_options_8; - pcre2_set_compile_recursion_guard_8; - pcre2_set_depth_limit_8; - pcre2_set_glob_escape_8; - pcre2_set_glob_separator_8; - pcre2_set_heap_limit_8; - pcre2_set_match_limit_8; - pcre2_set_max_pattern_compiled_length_8; - pcre2_set_max_pattern_length_8; - pcre2_set_max_varlookbehind_8; - pcre2_set_newline_8; - pcre2_set_offset_limit_8; - pcre2_set_optimize_8; - pcre2_set_parens_nest_limit_8; - pcre2_set_recursion_limit_8; - pcre2_set_recursion_memory_management_8; - pcre2_set_substitute_callout_8; - pcre2_set_substitute_case_callout_8; - pcre2_substitute_8; - pcre2_substring_copy_byname_8; - pcre2_substring_copy_bynumber_8; - pcre2_substring_free_8; - pcre2_substring_get_byname_8; - pcre2_substring_get_bynumber_8; - pcre2_substring_length_byname_8; - pcre2_substring_length_bynumber_8; - pcre2_substring_list_free_8; - pcre2_substring_list_get_8; - pcre2_substring_nametable_scan_8; - pcre2_substring_number_from_name_8; - local: - _fini; - _init; -}; - -# PCRE2_10.48 {} PCRE2_10.47; diff --git a/vendor/core/vendor/pcre2/src/libpcre2-posix.sym b/vendor/core/vendor/pcre2/src/libpcre2-posix.sym deleted file mode 100644 index 04a56cf61..000000000 --- a/vendor/core/vendor/pcre2/src/libpcre2-posix.sym +++ /dev/null @@ -1,13 +0,0 @@ -# First version of PCRE2 in which symbols were assigned versions. -PCRE2_10.47 { - global: - pcre2_regcomp; - pcre2_regerror; - pcre2_regexec; - pcre2_regfree; - local: - _fini; - _init; -}; - -# PCRE2_10.48 {} PCRE2_10.47; diff --git a/vendor/core/vendor/pcre2/src/pcre2.h.generic b/vendor/core/vendor/pcre2/src/pcre2.h.generic deleted file mode 100644 index 4034e5a91..000000000 --- a/vendor/core/vendor/pcre2/src/pcre2.h.generic +++ /dev/null @@ -1,1079 +0,0 @@ -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* This is the public header file for the PCRE library, second API, to be -#included by applications that call PCRE2 functions. - - Copyright (c) 2016-2024 University of Cambridge - ------------------------------------------------------------------------------ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the University of Cambridge nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ -*/ - -#ifndef PCRE2_H_IDEMPOTENT_GUARD -#define PCRE2_H_IDEMPOTENT_GUARD - -/* The current PCRE version information. */ - -#define PCRE2_MAJOR 10 -#define PCRE2_MINOR 47 -#define PCRE2_PRERELEASE -#define PCRE2_DATE 2025-10-21 - -/* When an application links to a PCRE2 DLL in Windows, the symbols that are -imported have to be identified as such. When building PCRE2, the appropriate -export setting is defined in pcre2_internal.h, which includes this file. So, we -don't change existing definitions of PCRE2_EXP_DECL. - -By default, we use the standard "extern" declarations. */ - -#ifndef PCRE2_EXP_DECL -# if defined(_WIN32) && !defined(PCRE2_STATIC) -# define PCRE2_EXP_DECL extern __declspec(dllimport) -# elif defined __cplusplus -# define PCRE2_EXP_DECL extern "C" -# else -# define PCRE2_EXP_DECL extern -# endif -#endif - -/* When compiling with the MSVC compiler, it is sometimes necessary to include -a "calling convention" before exported function names. For example: - - void __cdecl function(....) - -might be needed. In order to make this easy, all the exported functions have -PCRE2_CALL_CONVENTION just before their names. - -PCRE2 normally uses the platform's standard calling convention, so this should -not be set unless you know you need it. */ - -#ifndef PCRE2_CALL_CONVENTION -#define PCRE2_CALL_CONVENTION -#endif - -/* Have to include limits.h, stdlib.h, and inttypes.h to ensure that size_t and -uint8_t, UCHAR_MAX, etc are defined. Some systems that do have inttypes.h do -not have stdint.h, which is why we use inttypes.h, which according to the C -standard is a superset of stdint.h. If inttypes.h is not available the build -will break and the relevant values must be provided by some other means. */ - -#include -#include -#include - -/* Allow for C++ users compiling this directly. */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* The following option bits can be passed to pcre2_compile(), pcre2_match(), -or pcre2_dfa_match(). PCRE2_NO_UTF_CHECK affects only the function to which it -is passed. Put these bits at the most significant end of the options word so -others can be added next to them */ - -#define PCRE2_ANCHORED 0x80000000u -#define PCRE2_NO_UTF_CHECK 0x40000000u -#define PCRE2_ENDANCHORED 0x20000000u - -/* The following option bits can be passed only to pcre2_compile(). However, -they may affect compilation, JIT compilation, and/or interpretive execution. -The following tags indicate which: - -C alters what is compiled by pcre2_compile() -J alters what is compiled by pcre2_jit_compile() -M is inspected during pcre2_match() execution -D is inspected during pcre2_dfa_match() execution -*/ - -#define PCRE2_ALLOW_EMPTY_CLASS 0x00000001u /* C */ -#define PCRE2_ALT_BSUX 0x00000002u /* C */ -#define PCRE2_AUTO_CALLOUT 0x00000004u /* C */ -#define PCRE2_CASELESS 0x00000008u /* C */ -#define PCRE2_DOLLAR_ENDONLY 0x00000010u /* J M D */ -#define PCRE2_DOTALL 0x00000020u /* C */ -#define PCRE2_DUPNAMES 0x00000040u /* C */ -#define PCRE2_EXTENDED 0x00000080u /* C */ -#define PCRE2_FIRSTLINE 0x00000100u /* J M D */ -#define PCRE2_MATCH_UNSET_BACKREF 0x00000200u /* C J M */ -#define PCRE2_MULTILINE 0x00000400u /* C */ -#define PCRE2_NEVER_UCP 0x00000800u /* C */ -#define PCRE2_NEVER_UTF 0x00001000u /* C */ -#define PCRE2_NO_AUTO_CAPTURE 0x00002000u /* C */ -#define PCRE2_NO_AUTO_POSSESS 0x00004000u /* C */ -#define PCRE2_NO_DOTSTAR_ANCHOR 0x00008000u /* C */ -#define PCRE2_NO_START_OPTIMIZE 0x00010000u /* J M D */ -#define PCRE2_UCP 0x00020000u /* C J M D */ -#define PCRE2_UNGREEDY 0x00040000u /* C */ -#define PCRE2_UTF 0x00080000u /* C J M D */ -#define PCRE2_NEVER_BACKSLASH_C 0x00100000u /* C */ -#define PCRE2_ALT_CIRCUMFLEX 0x00200000u /* J M D */ -#define PCRE2_ALT_VERBNAMES 0x00400000u /* C */ -#define PCRE2_USE_OFFSET_LIMIT 0x00800000u /* J M D */ -#define PCRE2_EXTENDED_MORE 0x01000000u /* C */ -#define PCRE2_LITERAL 0x02000000u /* C */ -#define PCRE2_MATCH_INVALID_UTF 0x04000000u /* J M D */ -#define PCRE2_ALT_EXTENDED_CLASS 0x08000000u /* C */ - -/* An additional compile options word is available in the compile context. */ - -#define PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES 0x00000001u /* C */ -#define PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL 0x00000002u /* C */ -#define PCRE2_EXTRA_MATCH_WORD 0x00000004u /* C */ -#define PCRE2_EXTRA_MATCH_LINE 0x00000008u /* C */ -#define PCRE2_EXTRA_ESCAPED_CR_IS_LF 0x00000010u /* C */ -#define PCRE2_EXTRA_ALT_BSUX 0x00000020u /* C */ -#define PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK 0x00000040u /* C */ -#define PCRE2_EXTRA_CASELESS_RESTRICT 0x00000080u /* C */ -#define PCRE2_EXTRA_ASCII_BSD 0x00000100u /* C */ -#define PCRE2_EXTRA_ASCII_BSS 0x00000200u /* C */ -#define PCRE2_EXTRA_ASCII_BSW 0x00000400u /* C */ -#define PCRE2_EXTRA_ASCII_POSIX 0x00000800u /* C */ -#define PCRE2_EXTRA_ASCII_DIGIT 0x00001000u /* C */ -#define PCRE2_EXTRA_PYTHON_OCTAL 0x00002000u /* C */ -#define PCRE2_EXTRA_NO_BS0 0x00004000u /* C */ -#define PCRE2_EXTRA_NEVER_CALLOUT 0x00008000u /* C */ -#define PCRE2_EXTRA_TURKISH_CASING 0x00010000u /* C */ - -/* These are for pcre2_jit_compile(). */ - -#define PCRE2_JIT_COMPLETE 0x00000001u /* For full matching */ -#define PCRE2_JIT_PARTIAL_SOFT 0x00000002u -#define PCRE2_JIT_PARTIAL_HARD 0x00000004u -#define PCRE2_JIT_INVALID_UTF 0x00000100u -#define PCRE2_JIT_TEST_ALLOC 0x00000200u - -/* These are for pcre2_match(), pcre2_dfa_match(), pcre2_jit_match(), and -pcre2_substitute(). Some are allowed only for one of the functions, and in -these cases it is noted below. Note that PCRE2_ANCHORED, PCRE2_ENDANCHORED and -PCRE2_NO_UTF_CHECK can also be passed to these functions (though -pcre2_jit_match() ignores the latter since it bypasses all sanity checks). */ - -#define PCRE2_NOTBOL 0x00000001u -#define PCRE2_NOTEOL 0x00000002u -#define PCRE2_NOTEMPTY 0x00000004u /* ) These two must be kept */ -#define PCRE2_NOTEMPTY_ATSTART 0x00000008u /* ) adjacent to each other. */ -#define PCRE2_PARTIAL_SOFT 0x00000010u -#define PCRE2_PARTIAL_HARD 0x00000020u -#define PCRE2_DFA_RESTART 0x00000040u /* pcre2_dfa_match() only */ -#define PCRE2_DFA_SHORTEST 0x00000080u /* pcre2_dfa_match() only */ -#define PCRE2_SUBSTITUTE_GLOBAL 0x00000100u /* pcre2_substitute() only */ -#define PCRE2_SUBSTITUTE_EXTENDED 0x00000200u /* pcre2_substitute() only */ -#define PCRE2_SUBSTITUTE_UNSET_EMPTY 0x00000400u /* pcre2_substitute() only */ -#define PCRE2_SUBSTITUTE_UNKNOWN_UNSET 0x00000800u /* pcre2_substitute() only */ -#define PCRE2_SUBSTITUTE_OVERFLOW_LENGTH 0x00001000u /* pcre2_substitute() only */ -#define PCRE2_NO_JIT 0x00002000u /* not for pcre2_dfa_match() */ -#define PCRE2_COPY_MATCHED_SUBJECT 0x00004000u -#define PCRE2_SUBSTITUTE_LITERAL 0x00008000u /* pcre2_substitute() only */ -#define PCRE2_SUBSTITUTE_MATCHED 0x00010000u /* pcre2_substitute() only */ -#define PCRE2_SUBSTITUTE_REPLACEMENT_ONLY 0x00020000u /* pcre2_substitute() only */ -#define PCRE2_DISABLE_RECURSELOOP_CHECK 0x00040000u /* not for pcre2_dfa_match() or pcre2_jit_match() */ - -/* Options for pcre2_pattern_convert(). */ - -#define PCRE2_CONVERT_UTF 0x00000001u -#define PCRE2_CONVERT_NO_UTF_CHECK 0x00000002u -#define PCRE2_CONVERT_POSIX_BASIC 0x00000004u -#define PCRE2_CONVERT_POSIX_EXTENDED 0x00000008u -#define PCRE2_CONVERT_GLOB 0x00000010u -#define PCRE2_CONVERT_GLOB_NO_WILD_SEPARATOR 0x00000030u -#define PCRE2_CONVERT_GLOB_NO_STARSTAR 0x00000050u - -/* Newline and \R settings, for use in compile contexts. The newline values -must be kept in step with values set in config.h and both sets must all be -greater than zero. */ - -#define PCRE2_NEWLINE_CR 1 -#define PCRE2_NEWLINE_LF 2 -#define PCRE2_NEWLINE_CRLF 3 -#define PCRE2_NEWLINE_ANY 4 -#define PCRE2_NEWLINE_ANYCRLF 5 -#define PCRE2_NEWLINE_NUL 6 - -#define PCRE2_BSR_UNICODE 1 -#define PCRE2_BSR_ANYCRLF 2 - -/* Error codes for pcre2_compile(). Some of these are also used by -pcre2_pattern_convert(). */ - -#define PCRE2_ERROR_END_BACKSLASH 101 -#define PCRE2_ERROR_END_BACKSLASH_C 102 -#define PCRE2_ERROR_UNKNOWN_ESCAPE 103 -#define PCRE2_ERROR_QUANTIFIER_OUT_OF_ORDER 104 -#define PCRE2_ERROR_QUANTIFIER_TOO_BIG 105 -#define PCRE2_ERROR_MISSING_SQUARE_BRACKET 106 -#define PCRE2_ERROR_ESCAPE_INVALID_IN_CLASS 107 -#define PCRE2_ERROR_CLASS_RANGE_ORDER 108 -#define PCRE2_ERROR_QUANTIFIER_INVALID 109 -#define PCRE2_ERROR_INTERNAL_UNEXPECTED_REPEAT 110 -#define PCRE2_ERROR_INVALID_AFTER_PARENS_QUERY 111 -#define PCRE2_ERROR_POSIX_CLASS_NOT_IN_CLASS 112 -#define PCRE2_ERROR_POSIX_NO_SUPPORT_COLLATING 113 -#define PCRE2_ERROR_MISSING_CLOSING_PARENTHESIS 114 -#define PCRE2_ERROR_BAD_SUBPATTERN_REFERENCE 115 -#define PCRE2_ERROR_NULL_PATTERN 116 -#define PCRE2_ERROR_BAD_OPTIONS 117 -#define PCRE2_ERROR_MISSING_COMMENT_CLOSING 118 -#define PCRE2_ERROR_PARENTHESES_NEST_TOO_DEEP 119 -#define PCRE2_ERROR_PATTERN_TOO_LARGE 120 -#define PCRE2_ERROR_HEAP_FAILED 121 -#define PCRE2_ERROR_UNMATCHED_CLOSING_PARENTHESIS 122 -#define PCRE2_ERROR_INTERNAL_CODE_OVERFLOW 123 -#define PCRE2_ERROR_MISSING_CONDITION_CLOSING 124 -#define PCRE2_ERROR_LOOKBEHIND_NOT_FIXED_LENGTH 125 -#define PCRE2_ERROR_ZERO_RELATIVE_REFERENCE 126 -#define PCRE2_ERROR_TOO_MANY_CONDITION_BRANCHES 127 -#define PCRE2_ERROR_CONDITION_ASSERTION_EXPECTED 128 -#define PCRE2_ERROR_BAD_RELATIVE_REFERENCE 129 -#define PCRE2_ERROR_UNKNOWN_POSIX_CLASS 130 -#define PCRE2_ERROR_INTERNAL_STUDY_ERROR 131 -#define PCRE2_ERROR_UNICODE_NOT_SUPPORTED 132 -#define PCRE2_ERROR_PARENTHESES_STACK_CHECK 133 -#define PCRE2_ERROR_CODE_POINT_TOO_BIG 134 -#define PCRE2_ERROR_LOOKBEHIND_TOO_COMPLICATED 135 -#define PCRE2_ERROR_LOOKBEHIND_INVALID_BACKSLASH_C 136 -#define PCRE2_ERROR_UNSUPPORTED_ESCAPE_SEQUENCE 137 -#define PCRE2_ERROR_CALLOUT_NUMBER_TOO_BIG 138 -#define PCRE2_ERROR_MISSING_CALLOUT_CLOSING 139 -#define PCRE2_ERROR_ESCAPE_INVALID_IN_VERB 140 -#define PCRE2_ERROR_UNRECOGNIZED_AFTER_QUERY_P 141 -#define PCRE2_ERROR_MISSING_NAME_TERMINATOR 142 -#define PCRE2_ERROR_DUPLICATE_SUBPATTERN_NAME 143 -#define PCRE2_ERROR_INVALID_SUBPATTERN_NAME 144 -#define PCRE2_ERROR_UNICODE_PROPERTIES_UNAVAILABLE 145 -#define PCRE2_ERROR_MALFORMED_UNICODE_PROPERTY 146 -#define PCRE2_ERROR_UNKNOWN_UNICODE_PROPERTY 147 -#define PCRE2_ERROR_SUBPATTERN_NAME_TOO_LONG 148 -#define PCRE2_ERROR_TOO_MANY_NAMED_SUBPATTERNS 149 -#define PCRE2_ERROR_CLASS_INVALID_RANGE 150 -#define PCRE2_ERROR_OCTAL_BYTE_TOO_BIG 151 -#define PCRE2_ERROR_INTERNAL_OVERRAN_WORKSPACE 152 -#define PCRE2_ERROR_INTERNAL_MISSING_SUBPATTERN 153 -#define PCRE2_ERROR_DEFINE_TOO_MANY_BRANCHES 154 -#define PCRE2_ERROR_BACKSLASH_O_MISSING_BRACE 155 -#define PCRE2_ERROR_INTERNAL_UNKNOWN_NEWLINE 156 -#define PCRE2_ERROR_BACKSLASH_G_SYNTAX 157 -#define PCRE2_ERROR_PARENS_QUERY_R_MISSING_CLOSING 158 -/* Error 159 is obsolete and should now never occur */ -#define PCRE2_ERROR_VERB_ARGUMENT_NOT_ALLOWED 159 -#define PCRE2_ERROR_VERB_UNKNOWN 160 -#define PCRE2_ERROR_SUBPATTERN_NUMBER_TOO_BIG 161 -#define PCRE2_ERROR_SUBPATTERN_NAME_EXPECTED 162 -#define PCRE2_ERROR_INTERNAL_PARSED_OVERFLOW 163 -#define PCRE2_ERROR_INVALID_OCTAL 164 -#define PCRE2_ERROR_SUBPATTERN_NAMES_MISMATCH 165 -#define PCRE2_ERROR_MARK_MISSING_ARGUMENT 166 -#define PCRE2_ERROR_INVALID_HEXADECIMAL 167 -#define PCRE2_ERROR_BACKSLASH_C_SYNTAX 168 -#define PCRE2_ERROR_BACKSLASH_K_SYNTAX 169 -#define PCRE2_ERROR_INTERNAL_BAD_CODE_LOOKBEHINDS 170 -#define PCRE2_ERROR_BACKSLASH_N_IN_CLASS 171 -#define PCRE2_ERROR_CALLOUT_STRING_TOO_LONG 172 -#define PCRE2_ERROR_UNICODE_DISALLOWED_CODE_POINT 173 -#define PCRE2_ERROR_UTF_IS_DISABLED 174 -#define PCRE2_ERROR_UCP_IS_DISABLED 175 -#define PCRE2_ERROR_VERB_NAME_TOO_LONG 176 -#define PCRE2_ERROR_BACKSLASH_U_CODE_POINT_TOO_BIG 177 -#define PCRE2_ERROR_MISSING_OCTAL_OR_HEX_DIGITS 178 -#define PCRE2_ERROR_VERSION_CONDITION_SYNTAX 179 -#define PCRE2_ERROR_INTERNAL_BAD_CODE_AUTO_POSSESS 180 -#define PCRE2_ERROR_CALLOUT_NO_STRING_DELIMITER 181 -#define PCRE2_ERROR_CALLOUT_BAD_STRING_DELIMITER 182 -#define PCRE2_ERROR_BACKSLASH_C_CALLER_DISABLED 183 -#define PCRE2_ERROR_QUERY_BARJX_NEST_TOO_DEEP 184 -#define PCRE2_ERROR_BACKSLASH_C_LIBRARY_DISABLED 185 -#define PCRE2_ERROR_PATTERN_TOO_COMPLICATED 186 -#define PCRE2_ERROR_LOOKBEHIND_TOO_LONG 187 -#define PCRE2_ERROR_PATTERN_STRING_TOO_LONG 188 -#define PCRE2_ERROR_INTERNAL_BAD_CODE 189 -#define PCRE2_ERROR_INTERNAL_BAD_CODE_IN_SKIP 190 -#define PCRE2_ERROR_NO_SURROGATES_IN_UTF16 191 -#define PCRE2_ERROR_BAD_LITERAL_OPTIONS 192 -#define PCRE2_ERROR_SUPPORTED_ONLY_IN_UNICODE 193 -#define PCRE2_ERROR_INVALID_HYPHEN_IN_OPTIONS 194 -#define PCRE2_ERROR_ALPHA_ASSERTION_UNKNOWN 195 -#define PCRE2_ERROR_SCRIPT_RUN_NOT_AVAILABLE 196 -#define PCRE2_ERROR_TOO_MANY_CAPTURES 197 -#define PCRE2_ERROR_MISSING_OCTAL_DIGIT 198 -#define PCRE2_ERROR_BACKSLASH_K_IN_LOOKAROUND 199 -#define PCRE2_ERROR_MAX_VAR_LOOKBEHIND_EXCEEDED 200 -#define PCRE2_ERROR_PATTERN_COMPILED_SIZE_TOO_BIG 201 -#define PCRE2_ERROR_OVERSIZE_PYTHON_OCTAL 202 -#define PCRE2_ERROR_CALLOUT_CALLER_DISABLED 203 -#define PCRE2_ERROR_EXTRA_CASING_REQUIRES_UNICODE 204 -#define PCRE2_ERROR_TURKISH_CASING_REQUIRES_UTF 205 -#define PCRE2_ERROR_EXTRA_CASING_INCOMPATIBLE 206 -#define PCRE2_ERROR_ECLASS_NEST_TOO_DEEP 207 -#define PCRE2_ERROR_ECLASS_INVALID_OPERATOR 208 -#define PCRE2_ERROR_ECLASS_UNEXPECTED_OPERATOR 209 -#define PCRE2_ERROR_ECLASS_EXPECTED_OPERAND 210 -#define PCRE2_ERROR_ECLASS_MIXED_OPERATORS 211 -#define PCRE2_ERROR_ECLASS_HINT_SQUARE_BRACKET 212 -#define PCRE2_ERROR_PERL_ECLASS_UNEXPECTED_EXPR 213 -#define PCRE2_ERROR_PERL_ECLASS_EMPTY_EXPR 214 -#define PCRE2_ERROR_PERL_ECLASS_MISSING_CLOSE 215 -#define PCRE2_ERROR_PERL_ECLASS_UNEXPECTED_CHAR 216 -#define PCRE2_ERROR_EXPECTED_CAPTURE_GROUP 217 -#define PCRE2_ERROR_MISSING_OPENING_PARENTHESIS 218 -#define PCRE2_ERROR_MISSING_NUMBER_TERMINATOR 219 -#define PCRE2_ERROR_NULL_ERROROFFSET 220 - -/* "Expected" matching error codes: no match and partial match. */ - -#define PCRE2_ERROR_NOMATCH (-1) -#define PCRE2_ERROR_PARTIAL (-2) - -/* Error codes for UTF-8 validity checks */ - -#define PCRE2_ERROR_UTF8_ERR1 (-3) -#define PCRE2_ERROR_UTF8_ERR2 (-4) -#define PCRE2_ERROR_UTF8_ERR3 (-5) -#define PCRE2_ERROR_UTF8_ERR4 (-6) -#define PCRE2_ERROR_UTF8_ERR5 (-7) -#define PCRE2_ERROR_UTF8_ERR6 (-8) -#define PCRE2_ERROR_UTF8_ERR7 (-9) -#define PCRE2_ERROR_UTF8_ERR8 (-10) -#define PCRE2_ERROR_UTF8_ERR9 (-11) -#define PCRE2_ERROR_UTF8_ERR10 (-12) -#define PCRE2_ERROR_UTF8_ERR11 (-13) -#define PCRE2_ERROR_UTF8_ERR12 (-14) -#define PCRE2_ERROR_UTF8_ERR13 (-15) -#define PCRE2_ERROR_UTF8_ERR14 (-16) -#define PCRE2_ERROR_UTF8_ERR15 (-17) -#define PCRE2_ERROR_UTF8_ERR16 (-18) -#define PCRE2_ERROR_UTF8_ERR17 (-19) -#define PCRE2_ERROR_UTF8_ERR18 (-20) -#define PCRE2_ERROR_UTF8_ERR19 (-21) -#define PCRE2_ERROR_UTF8_ERR20 (-22) -#define PCRE2_ERROR_UTF8_ERR21 (-23) - -/* Error codes for UTF-16 validity checks */ - -#define PCRE2_ERROR_UTF16_ERR1 (-24) -#define PCRE2_ERROR_UTF16_ERR2 (-25) -#define PCRE2_ERROR_UTF16_ERR3 (-26) - -/* Error codes for UTF-32 validity checks */ - -#define PCRE2_ERROR_UTF32_ERR1 (-27) -#define PCRE2_ERROR_UTF32_ERR2 (-28) - -/* Miscellaneous error codes for pcre2[_dfa]_match(), substring extraction -functions, context functions, and serializing functions. They are in numerical -order. Originally they were in alphabetical order too, but now that PCRE2 is -released, the numbers must not be changed. */ - -#define PCRE2_ERROR_BADDATA (-29) -#define PCRE2_ERROR_MIXEDTABLES (-30) /* Name was changed */ -#define PCRE2_ERROR_BADMAGIC (-31) -#define PCRE2_ERROR_BADMODE (-32) -#define PCRE2_ERROR_BADOFFSET (-33) -#define PCRE2_ERROR_BADOPTION (-34) -#define PCRE2_ERROR_BADREPLACEMENT (-35) -#define PCRE2_ERROR_BADUTFOFFSET (-36) -#define PCRE2_ERROR_CALLOUT (-37) /* Never used by PCRE2 itself */ -#define PCRE2_ERROR_DFA_BADRESTART (-38) -#define PCRE2_ERROR_DFA_RECURSE (-39) -#define PCRE2_ERROR_DFA_UCOND (-40) -#define PCRE2_ERROR_DFA_UFUNC (-41) -#define PCRE2_ERROR_DFA_UITEM (-42) -#define PCRE2_ERROR_DFA_WSSIZE (-43) -#define PCRE2_ERROR_INTERNAL (-44) -#define PCRE2_ERROR_JIT_BADOPTION (-45) -#define PCRE2_ERROR_JIT_STACKLIMIT (-46) -#define PCRE2_ERROR_MATCHLIMIT (-47) -#define PCRE2_ERROR_NOMEMORY (-48) -#define PCRE2_ERROR_NOSUBSTRING (-49) -#define PCRE2_ERROR_NOUNIQUESUBSTRING (-50) -#define PCRE2_ERROR_NULL (-51) -#define PCRE2_ERROR_RECURSELOOP (-52) -#define PCRE2_ERROR_DEPTHLIMIT (-53) -#define PCRE2_ERROR_RECURSIONLIMIT (-53) /* Obsolete synonym */ -#define PCRE2_ERROR_UNAVAILABLE (-54) -#define PCRE2_ERROR_UNSET (-55) -#define PCRE2_ERROR_BADOFFSETLIMIT (-56) -#define PCRE2_ERROR_BADREPESCAPE (-57) -#define PCRE2_ERROR_REPMISSINGBRACE (-58) -#define PCRE2_ERROR_BADSUBSTITUTION (-59) -#define PCRE2_ERROR_BADSUBSPATTERN (-60) -#define PCRE2_ERROR_TOOMANYREPLACE (-61) -#define PCRE2_ERROR_BADSERIALIZEDDATA (-62) -#define PCRE2_ERROR_HEAPLIMIT (-63) -#define PCRE2_ERROR_CONVERT_SYNTAX (-64) -#define PCRE2_ERROR_INTERNAL_DUPMATCH (-65) -#define PCRE2_ERROR_DFA_UINVALID_UTF (-66) -#define PCRE2_ERROR_INVALIDOFFSET (-67) -#define PCRE2_ERROR_JIT_UNSUPPORTED (-68) -#define PCRE2_ERROR_REPLACECASE (-69) -#define PCRE2_ERROR_TOOLARGEREPLACE (-70) -#define PCRE2_ERROR_DIFFSUBSPATTERN (-71) -#define PCRE2_ERROR_DIFFSUBSSUBJECT (-72) -#define PCRE2_ERROR_DIFFSUBSOFFSET (-73) -#define PCRE2_ERROR_DIFFSUBSOPTIONS (-74) -#define PCRE2_ERROR_BAD_BACKSLASH_K (-75) - - -/* Request types for pcre2_pattern_info() */ - -#define PCRE2_INFO_ALLOPTIONS 0 -#define PCRE2_INFO_ARGOPTIONS 1 -#define PCRE2_INFO_BACKREFMAX 2 -#define PCRE2_INFO_BSR 3 -#define PCRE2_INFO_CAPTURECOUNT 4 -#define PCRE2_INFO_FIRSTCODEUNIT 5 -#define PCRE2_INFO_FIRSTCODETYPE 6 -#define PCRE2_INFO_FIRSTBITMAP 7 -#define PCRE2_INFO_HASCRORLF 8 -#define PCRE2_INFO_JCHANGED 9 -#define PCRE2_INFO_JITSIZE 10 -#define PCRE2_INFO_LASTCODEUNIT 11 -#define PCRE2_INFO_LASTCODETYPE 12 -#define PCRE2_INFO_MATCHEMPTY 13 -#define PCRE2_INFO_MATCHLIMIT 14 -#define PCRE2_INFO_MAXLOOKBEHIND 15 -#define PCRE2_INFO_MINLENGTH 16 -#define PCRE2_INFO_NAMECOUNT 17 -#define PCRE2_INFO_NAMEENTRYSIZE 18 -#define PCRE2_INFO_NAMETABLE 19 -#define PCRE2_INFO_NEWLINE 20 -#define PCRE2_INFO_DEPTHLIMIT 21 -#define PCRE2_INFO_RECURSIONLIMIT 21 /* Obsolete synonym */ -#define PCRE2_INFO_SIZE 22 -#define PCRE2_INFO_HASBACKSLASHC 23 -#define PCRE2_INFO_FRAMESIZE 24 -#define PCRE2_INFO_HEAPLIMIT 25 -#define PCRE2_INFO_EXTRAOPTIONS 26 - -/* Request types for pcre2_config(). */ - -#define PCRE2_CONFIG_BSR 0 -#define PCRE2_CONFIG_JIT 1 -#define PCRE2_CONFIG_JITTARGET 2 -#define PCRE2_CONFIG_LINKSIZE 3 -#define PCRE2_CONFIG_MATCHLIMIT 4 -#define PCRE2_CONFIG_NEWLINE 5 -#define PCRE2_CONFIG_PARENSLIMIT 6 -#define PCRE2_CONFIG_DEPTHLIMIT 7 -#define PCRE2_CONFIG_RECURSIONLIMIT 7 /* Obsolete synonym */ -#define PCRE2_CONFIG_STACKRECURSE 8 /* Obsolete */ -#define PCRE2_CONFIG_UNICODE 9 -#define PCRE2_CONFIG_UNICODE_VERSION 10 -#define PCRE2_CONFIG_VERSION 11 -#define PCRE2_CONFIG_HEAPLIMIT 12 -#define PCRE2_CONFIG_NEVER_BACKSLASH_C 13 -#define PCRE2_CONFIG_COMPILED_WIDTHS 14 -#define PCRE2_CONFIG_TABLES_LENGTH 15 -#define PCRE2_CONFIG_EFFECTIVE_LINKSIZE 16 - -/* Optimization directives for pcre2_set_optimize(). -For binary compatibility, only add to this list; do not renumber. */ - -#define PCRE2_OPTIMIZATION_NONE 0 -#define PCRE2_OPTIMIZATION_FULL 1 - -#define PCRE2_AUTO_POSSESS 64 -#define PCRE2_AUTO_POSSESS_OFF 65 -#define PCRE2_DOTSTAR_ANCHOR 66 -#define PCRE2_DOTSTAR_ANCHOR_OFF 67 -#define PCRE2_START_OPTIMIZE 68 -#define PCRE2_START_OPTIMIZE_OFF 69 - -/* Types used in pcre2_set_substitute_case_callout(). - -PCRE2_SUBSTITUTE_CASE_LOWER and PCRE2_SUBSTITUTE_CASE_UPPER are passed to the -callout to indicate that the case of the entire callout input should be -case-transformed. PCRE2_SUBSTITUTE_CASE_TITLE_FIRST is passed to indicate that -only the first character or glyph should be transformed to Unicode titlecase, -and the rest to lowercase. */ - -#define PCRE2_SUBSTITUTE_CASE_LOWER 1 -#define PCRE2_SUBSTITUTE_CASE_UPPER 2 -#define PCRE2_SUBSTITUTE_CASE_TITLE_FIRST 3 - -/* Types for code units in patterns and subject strings. */ - -typedef uint8_t PCRE2_UCHAR8; -typedef uint16_t PCRE2_UCHAR16; -typedef uint32_t PCRE2_UCHAR32; - -typedef const PCRE2_UCHAR8 *PCRE2_SPTR8; -typedef const PCRE2_UCHAR16 *PCRE2_SPTR16; -typedef const PCRE2_UCHAR32 *PCRE2_SPTR32; - -/* The PCRE2_SIZE type is used for all string lengths and offsets in PCRE2, -including pattern offsets for errors and subject offsets after a match. We -define special values to indicate zero-terminated strings and unset offsets in -the offset vector (ovector). */ - -#define PCRE2_SIZE size_t -#define PCRE2_SIZE_MAX SIZE_MAX -#define PCRE2_ZERO_TERMINATED (~(PCRE2_SIZE)0) -#define PCRE2_UNSET (~(PCRE2_SIZE)0) - -/* Generic types for opaque structures and JIT callback functions. These -declarations are defined in a macro that is expanded for each width later. */ - -#define PCRE2_TYPES_LIST \ -struct pcre2_real_general_context; \ -typedef struct pcre2_real_general_context pcre2_general_context; \ -\ -struct pcre2_real_compile_context; \ -typedef struct pcre2_real_compile_context pcre2_compile_context; \ -\ -struct pcre2_real_match_context; \ -typedef struct pcre2_real_match_context pcre2_match_context; \ -\ -struct pcre2_real_convert_context; \ -typedef struct pcre2_real_convert_context pcre2_convert_context; \ -\ -struct pcre2_real_code; \ -typedef struct pcre2_real_code pcre2_code; \ -\ -struct pcre2_real_match_data; \ -typedef struct pcre2_real_match_data pcre2_match_data; \ -\ -struct pcre2_real_jit_stack; \ -typedef struct pcre2_real_jit_stack pcre2_jit_stack; \ -\ -typedef pcre2_jit_stack *(*pcre2_jit_callback)(void *); - - -/* The structures for passing out data via callout functions. We use structures -so that new fields can be added on the end in future versions, without changing -the API of the function, thereby allowing old clients to work without -modification. Define the generic versions in a macro; the width-specific -versions are generated from this macro below. */ - -/* Flags for the callout_flags field. These are cleared after a callout. */ - -#define PCRE2_CALLOUT_STARTMATCH 0x00000001u /* Set for each bumpalong */ -#define PCRE2_CALLOUT_BACKTRACK 0x00000002u /* Set after a backtrack */ - -#define PCRE2_STRUCTURE_LIST \ -typedef struct pcre2_callout_block { \ - uint32_t version; /* Identifies version of block */ \ - /* ------------------------ Version 0 ------------------------------- */ \ - uint32_t callout_number; /* Number compiled into pattern */ \ - uint32_t capture_top; /* Max current capture */ \ - uint32_t capture_last; /* Most recently closed capture */ \ - PCRE2_SIZE *offset_vector; /* The offset vector */ \ - PCRE2_SPTR mark; /* Pointer to current mark or NULL */ \ - PCRE2_SPTR subject; /* The subject being matched */ \ - PCRE2_SIZE subject_length; /* The length of the subject */ \ - PCRE2_SIZE start_match; /* Offset to start of this match attempt */ \ - PCRE2_SIZE current_position; /* Where we currently are in the subject */ \ - PCRE2_SIZE pattern_position; /* Offset to next item in the pattern */ \ - PCRE2_SIZE next_item_length; /* Length of next item in the pattern */ \ - /* ------------------- Added for Version 1 -------------------------- */ \ - PCRE2_SIZE callout_string_offset; /* Offset to string within pattern */ \ - PCRE2_SIZE callout_string_length; /* Length of string compiled into pattern */ \ - PCRE2_SPTR callout_string; /* String compiled into pattern */ \ - /* ------------------- Added for Version 2 -------------------------- */ \ - uint32_t callout_flags; /* See above for list */ \ - /* ------------------------------------------------------------------ */ \ -} pcre2_callout_block; \ -\ -typedef struct pcre2_callout_enumerate_block { \ - uint32_t version; /* Identifies version of block */ \ - /* ------------------------ Version 0 ------------------------------- */ \ - PCRE2_SIZE pattern_position; /* Offset to next item in the pattern */ \ - PCRE2_SIZE next_item_length; /* Length of next item in the pattern */ \ - uint32_t callout_number; /* Number compiled into pattern */ \ - PCRE2_SIZE callout_string_offset; /* Offset to string within pattern */ \ - PCRE2_SIZE callout_string_length; /* Length of string compiled into pattern */ \ - PCRE2_SPTR callout_string; /* String compiled into pattern */ \ - /* ------------------------------------------------------------------ */ \ -} pcre2_callout_enumerate_block; \ -\ -typedef struct pcre2_substitute_callout_block { \ - uint32_t version; /* Identifies version of block */ \ - /* ------------------------ Version 0 ------------------------------- */ \ - PCRE2_SPTR input; /* Pointer to input subject string */ \ - PCRE2_SPTR output; /* Pointer to output buffer */ \ - PCRE2_SIZE output_offsets[2]; /* Changed portion of the output */ \ - PCRE2_SIZE *ovector; /* Pointer to current ovector */ \ - uint32_t oveccount; /* Count of pairs set in ovector */ \ - uint32_t subscount; /* Substitution number */ \ - /* ------------------------------------------------------------------ */ \ -} pcre2_substitute_callout_block; - - -/* List the generic forms of all other functions in macros, which will be -expanded for each width below. Start with functions that give general -information. */ - -#define PCRE2_GENERAL_INFO_FUNCTIONS \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION pcre2_config(uint32_t, void *); - - -/* Functions for manipulating contexts. */ - -#define PCRE2_GENERAL_CONTEXT_FUNCTIONS \ -PCRE2_EXP_DECL pcre2_general_context *PCRE2_CALL_CONVENTION \ - pcre2_general_context_copy(pcre2_general_context *); \ -PCRE2_EXP_DECL pcre2_general_context *PCRE2_CALL_CONVENTION \ - pcre2_general_context_create(void *(*)(size_t, void *), \ - void (*)(void *, void *), void *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_general_context_free(pcre2_general_context *); - -#define PCRE2_COMPILE_CONTEXT_FUNCTIONS \ -PCRE2_EXP_DECL pcre2_compile_context *PCRE2_CALL_CONVENTION \ - pcre2_compile_context_copy(pcre2_compile_context *); \ -PCRE2_EXP_DECL pcre2_compile_context *PCRE2_CALL_CONVENTION \ - pcre2_compile_context_create(pcre2_general_context *);\ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_compile_context_free(pcre2_compile_context *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_bsr(pcre2_compile_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_character_tables(pcre2_compile_context *, const uint8_t *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_compile_extra_options(pcre2_compile_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_max_pattern_length(pcre2_compile_context *, PCRE2_SIZE); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_max_pattern_compiled_length(pcre2_compile_context *, PCRE2_SIZE); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_max_varlookbehind(pcre2_compile_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_newline(pcre2_compile_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_parens_nest_limit(pcre2_compile_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_compile_recursion_guard(pcre2_compile_context *, \ - int (*)(uint32_t, void *), void *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_optimize(pcre2_compile_context *, uint32_t); - -#define PCRE2_MATCH_CONTEXT_FUNCTIONS \ -PCRE2_EXP_DECL pcre2_match_context *PCRE2_CALL_CONVENTION \ - pcre2_match_context_copy(pcre2_match_context *); \ -PCRE2_EXP_DECL pcre2_match_context *PCRE2_CALL_CONVENTION \ - pcre2_match_context_create(pcre2_general_context *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_match_context_free(pcre2_match_context *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_callout(pcre2_match_context *, \ - int (*)(pcre2_callout_block *, void *), void *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_substitute_callout(pcre2_match_context *, \ - int (*)(pcre2_substitute_callout_block *, void *), void *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_substitute_case_callout(pcre2_match_context *, \ - PCRE2_SIZE (*)(PCRE2_SPTR, PCRE2_SIZE, PCRE2_UCHAR *, PCRE2_SIZE, int, \ - void *), \ - void *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_depth_limit(pcre2_match_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_heap_limit(pcre2_match_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_match_limit(pcre2_match_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_offset_limit(pcre2_match_context *, PCRE2_SIZE); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_recursion_limit(pcre2_match_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_recursion_memory_management(pcre2_match_context *, \ - void *(*)(size_t, void *), void (*)(void *, void *), void *); - -#define PCRE2_CONVERT_CONTEXT_FUNCTIONS \ -PCRE2_EXP_DECL pcre2_convert_context *PCRE2_CALL_CONVENTION \ - pcre2_convert_context_copy(pcre2_convert_context *); \ -PCRE2_EXP_DECL pcre2_convert_context *PCRE2_CALL_CONVENTION \ - pcre2_convert_context_create(pcre2_general_context *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_convert_context_free(pcre2_convert_context *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_glob_escape(pcre2_convert_context *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_set_glob_separator(pcre2_convert_context *, uint32_t); - - -/* Functions concerned with compiling a pattern to PCRE internal code. */ - -#define PCRE2_COMPILE_FUNCTIONS \ -PCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \ - pcre2_compile(PCRE2_SPTR, PCRE2_SIZE, uint32_t, int *, PCRE2_SIZE *, \ - pcre2_compile_context *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_code_free(pcre2_code *); \ -PCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \ - pcre2_code_copy(const pcre2_code *); \ -PCRE2_EXP_DECL pcre2_code *PCRE2_CALL_CONVENTION \ - pcre2_code_copy_with_tables(const pcre2_code *); - - -/* Functions that give information about a compiled pattern. */ - -#define PCRE2_PATTERN_INFO_FUNCTIONS \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_pattern_info(const pcre2_code *, uint32_t, void *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_callout_enumerate(const pcre2_code *, \ - int (*)(pcre2_callout_enumerate_block *, void *), void *); - - -/* Functions for running a match and inspecting the result. */ - -#define PCRE2_MATCH_FUNCTIONS \ -PCRE2_EXP_DECL pcre2_match_data *PCRE2_CALL_CONVENTION \ - pcre2_match_data_create(uint32_t, pcre2_general_context *); \ -PCRE2_EXP_DECL pcre2_match_data *PCRE2_CALL_CONVENTION \ - pcre2_match_data_create_from_pattern(const pcre2_code *, \ - pcre2_general_context *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_match_data_free(pcre2_match_data *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_dfa_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \ - uint32_t, pcre2_match_data *, pcre2_match_context *, int *, PCRE2_SIZE); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \ - uint32_t, pcre2_match_data *, pcre2_match_context *); \ -PCRE2_EXP_DECL PCRE2_SPTR PCRE2_CALL_CONVENTION \ - pcre2_get_mark(pcre2_match_data *); \ -PCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \ - pcre2_get_match_data_size(pcre2_match_data *); \ -PCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \ - pcre2_get_match_data_heapframes_size(pcre2_match_data *); \ -PCRE2_EXP_DECL uint32_t PCRE2_CALL_CONVENTION \ - pcre2_get_ovector_count(pcre2_match_data *); \ -PCRE2_EXP_DECL PCRE2_SIZE *PCRE2_CALL_CONVENTION \ - pcre2_get_ovector_pointer(pcre2_match_data *); \ -PCRE2_EXP_DECL PCRE2_SIZE PCRE2_CALL_CONVENTION \ - pcre2_get_startchar(pcre2_match_data *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_next_match(pcre2_match_data *, PCRE2_SIZE *, uint32_t *); - - -/* Convenience functions for handling matched substrings. */ - -#define PCRE2_SUBSTRING_FUNCTIONS \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_copy_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_UCHAR *, \ - PCRE2_SIZE *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_copy_bynumber(pcre2_match_data *, uint32_t, PCRE2_UCHAR *, \ - PCRE2_SIZE *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_substring_free(PCRE2_UCHAR *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_get_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_UCHAR **, \ - PCRE2_SIZE *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_get_bynumber(pcre2_match_data *, uint32_t, PCRE2_UCHAR **, \ - PCRE2_SIZE *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_length_byname(pcre2_match_data *, PCRE2_SPTR, PCRE2_SIZE *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_length_bynumber(pcre2_match_data *, uint32_t, PCRE2_SIZE *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_nametable_scan(const pcre2_code *, PCRE2_SPTR, PCRE2_SPTR *, \ - PCRE2_SPTR *); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_number_from_name(const pcre2_code *, PCRE2_SPTR); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_substring_list_free(PCRE2_UCHAR **); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substring_list_get(pcre2_match_data *, PCRE2_UCHAR ***, PCRE2_SIZE **); - - -/* Functions for serializing / deserializing compiled patterns. */ - -#define PCRE2_SERIALIZE_FUNCTIONS \ -PCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \ - pcre2_serialize_encode(const pcre2_code **, int32_t, uint8_t **, \ - PCRE2_SIZE *, pcre2_general_context *); \ -PCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \ - pcre2_serialize_decode(pcre2_code **, int32_t, const uint8_t *, \ - pcre2_general_context *); \ -PCRE2_EXP_DECL int32_t PCRE2_CALL_CONVENTION \ - pcre2_serialize_get_number_of_codes(const uint8_t *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_serialize_free(uint8_t *); - - -/* Convenience function for match + substitute. */ - -#define PCRE2_SUBSTITUTE_FUNCTION \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_substitute(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \ - uint32_t, pcre2_match_data *, pcre2_match_context *, PCRE2_SPTR, \ - PCRE2_SIZE, PCRE2_UCHAR *, PCRE2_SIZE *); - - -/* Functions for converting pattern source strings. */ - -#define PCRE2_CONVERT_FUNCTIONS \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_pattern_convert(PCRE2_SPTR, PCRE2_SIZE, uint32_t, PCRE2_UCHAR **, \ - PCRE2_SIZE *, pcre2_convert_context *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_converted_pattern_free(PCRE2_UCHAR *); - - -/* Functions for JIT processing */ - -#define PCRE2_JIT_FUNCTIONS \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_jit_compile(pcre2_code *, uint32_t); \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_jit_match(const pcre2_code *, PCRE2_SPTR, PCRE2_SIZE, PCRE2_SIZE, \ - uint32_t, pcre2_match_data *, pcre2_match_context *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_jit_free_unused_memory(pcre2_general_context *); \ -PCRE2_EXP_DECL pcre2_jit_stack *PCRE2_CALL_CONVENTION \ - pcre2_jit_stack_create(size_t, size_t, pcre2_general_context *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_jit_stack_assign(pcre2_match_context *, pcre2_jit_callback, void *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_jit_stack_free(pcre2_jit_stack *); - - -/* Other miscellaneous functions. */ - -#define PCRE2_OTHER_FUNCTIONS \ -PCRE2_EXP_DECL int PCRE2_CALL_CONVENTION \ - pcre2_get_error_message(int, PCRE2_UCHAR *, PCRE2_SIZE); \ -PCRE2_EXP_DECL const uint8_t *PCRE2_CALL_CONVENTION \ - pcre2_maketables(pcre2_general_context *); \ -PCRE2_EXP_DECL void PCRE2_CALL_CONVENTION \ - pcre2_maketables_free(pcre2_general_context *, const uint8_t *); - -/* Define macros that generate width-specific names from generic versions. The -three-level macro scheme is necessary to get the macros expanded when we want -them to be. First we get the width from PCRE2_LOCAL_WIDTH, which is used for -generating three versions of everything below. After that, PCRE2_SUFFIX will be -re-defined to use PCRE2_CODE_UNIT_WIDTH, for use when macros such as -pcre2_compile are called by application code. */ - -#define PCRE2_JOIN(a,b) a ## b -#define PCRE2_GLUE(a,b) PCRE2_JOIN(a,b) -#define PCRE2_SUFFIX(a) PCRE2_GLUE(a,PCRE2_LOCAL_WIDTH) - - -/* Data types */ - -#define PCRE2_UCHAR PCRE2_SUFFIX(PCRE2_UCHAR) -#define PCRE2_SPTR PCRE2_SUFFIX(PCRE2_SPTR) - -#define pcre2_code PCRE2_SUFFIX(pcre2_code_) -#define pcre2_jit_callback PCRE2_SUFFIX(pcre2_jit_callback_) -#define pcre2_jit_stack PCRE2_SUFFIX(pcre2_jit_stack_) - -#define pcre2_real_code PCRE2_SUFFIX(pcre2_real_code_) -#define pcre2_real_general_context PCRE2_SUFFIX(pcre2_real_general_context_) -#define pcre2_real_compile_context PCRE2_SUFFIX(pcre2_real_compile_context_) -#define pcre2_real_convert_context PCRE2_SUFFIX(pcre2_real_convert_context_) -#define pcre2_real_match_context PCRE2_SUFFIX(pcre2_real_match_context_) -#define pcre2_real_jit_stack PCRE2_SUFFIX(pcre2_real_jit_stack_) -#define pcre2_real_match_data PCRE2_SUFFIX(pcre2_real_match_data_) - - -/* Data blocks */ - -#define pcre2_callout_block PCRE2_SUFFIX(pcre2_callout_block_) -#define pcre2_callout_enumerate_block PCRE2_SUFFIX(pcre2_callout_enumerate_block_) -#define pcre2_substitute_callout_block PCRE2_SUFFIX(pcre2_substitute_callout_block_) -#define pcre2_general_context PCRE2_SUFFIX(pcre2_general_context_) -#define pcre2_compile_context PCRE2_SUFFIX(pcre2_compile_context_) -#define pcre2_convert_context PCRE2_SUFFIX(pcre2_convert_context_) -#define pcre2_match_context PCRE2_SUFFIX(pcre2_match_context_) -#define pcre2_match_data PCRE2_SUFFIX(pcre2_match_data_) - - -/* Functions: the complete list in alphabetical order */ - -#define pcre2_callout_enumerate PCRE2_SUFFIX(pcre2_callout_enumerate_) -#define pcre2_code_copy PCRE2_SUFFIX(pcre2_code_copy_) -#define pcre2_code_copy_with_tables PCRE2_SUFFIX(pcre2_code_copy_with_tables_) -#define pcre2_code_free PCRE2_SUFFIX(pcre2_code_free_) -#define pcre2_compile PCRE2_SUFFIX(pcre2_compile_) -#define pcre2_compile_context_copy PCRE2_SUFFIX(pcre2_compile_context_copy_) -#define pcre2_compile_context_create PCRE2_SUFFIX(pcre2_compile_context_create_) -#define pcre2_compile_context_free PCRE2_SUFFIX(pcre2_compile_context_free_) -#define pcre2_config PCRE2_SUFFIX(pcre2_config_) -#define pcre2_convert_context_copy PCRE2_SUFFIX(pcre2_convert_context_copy_) -#define pcre2_convert_context_create PCRE2_SUFFIX(pcre2_convert_context_create_) -#define pcre2_convert_context_free PCRE2_SUFFIX(pcre2_convert_context_free_) -#define pcre2_converted_pattern_free PCRE2_SUFFIX(pcre2_converted_pattern_free_) -#define pcre2_dfa_match PCRE2_SUFFIX(pcre2_dfa_match_) -#define pcre2_general_context_copy PCRE2_SUFFIX(pcre2_general_context_copy_) -#define pcre2_general_context_create PCRE2_SUFFIX(pcre2_general_context_create_) -#define pcre2_general_context_free PCRE2_SUFFIX(pcre2_general_context_free_) -#define pcre2_get_error_message PCRE2_SUFFIX(pcre2_get_error_message_) -#define pcre2_get_mark PCRE2_SUFFIX(pcre2_get_mark_) -#define pcre2_get_match_data_heapframes_size PCRE2_SUFFIX(pcre2_get_match_data_heapframes_size_) -#define pcre2_get_match_data_size PCRE2_SUFFIX(pcre2_get_match_data_size_) -#define pcre2_get_ovector_pointer PCRE2_SUFFIX(pcre2_get_ovector_pointer_) -#define pcre2_get_ovector_count PCRE2_SUFFIX(pcre2_get_ovector_count_) -#define pcre2_get_startchar PCRE2_SUFFIX(pcre2_get_startchar_) -#define pcre2_jit_compile PCRE2_SUFFIX(pcre2_jit_compile_) -#define pcre2_jit_match PCRE2_SUFFIX(pcre2_jit_match_) -#define pcre2_jit_free_unused_memory PCRE2_SUFFIX(pcre2_jit_free_unused_memory_) -#define pcre2_jit_stack_assign PCRE2_SUFFIX(pcre2_jit_stack_assign_) -#define pcre2_jit_stack_create PCRE2_SUFFIX(pcre2_jit_stack_create_) -#define pcre2_jit_stack_free PCRE2_SUFFIX(pcre2_jit_stack_free_) -#define pcre2_maketables PCRE2_SUFFIX(pcre2_maketables_) -#define pcre2_maketables_free PCRE2_SUFFIX(pcre2_maketables_free_) -#define pcre2_match PCRE2_SUFFIX(pcre2_match_) -#define pcre2_match_context_copy PCRE2_SUFFIX(pcre2_match_context_copy_) -#define pcre2_match_context_create PCRE2_SUFFIX(pcre2_match_context_create_) -#define pcre2_match_context_free PCRE2_SUFFIX(pcre2_match_context_free_) -#define pcre2_match_data_create PCRE2_SUFFIX(pcre2_match_data_create_) -#define pcre2_match_data_create_from_pattern PCRE2_SUFFIX(pcre2_match_data_create_from_pattern_) -#define pcre2_match_data_free PCRE2_SUFFIX(pcre2_match_data_free_) -#define pcre2_next_match PCRE2_SUFFIX(pcre2_next_match_) -#define pcre2_pattern_convert PCRE2_SUFFIX(pcre2_pattern_convert_) -#define pcre2_pattern_info PCRE2_SUFFIX(pcre2_pattern_info_) -#define pcre2_serialize_decode PCRE2_SUFFIX(pcre2_serialize_decode_) -#define pcre2_serialize_encode PCRE2_SUFFIX(pcre2_serialize_encode_) -#define pcre2_serialize_free PCRE2_SUFFIX(pcre2_serialize_free_) -#define pcre2_serialize_get_number_of_codes PCRE2_SUFFIX(pcre2_serialize_get_number_of_codes_) -#define pcre2_set_bsr PCRE2_SUFFIX(pcre2_set_bsr_) -#define pcre2_set_callout PCRE2_SUFFIX(pcre2_set_callout_) -#define pcre2_set_character_tables PCRE2_SUFFIX(pcre2_set_character_tables_) -#define pcre2_set_compile_extra_options PCRE2_SUFFIX(pcre2_set_compile_extra_options_) -#define pcre2_set_compile_recursion_guard PCRE2_SUFFIX(pcre2_set_compile_recursion_guard_) -#define pcre2_set_depth_limit PCRE2_SUFFIX(pcre2_set_depth_limit_) -#define pcre2_set_glob_escape PCRE2_SUFFIX(pcre2_set_glob_escape_) -#define pcre2_set_glob_separator PCRE2_SUFFIX(pcre2_set_glob_separator_) -#define pcre2_set_heap_limit PCRE2_SUFFIX(pcre2_set_heap_limit_) -#define pcre2_set_match_limit PCRE2_SUFFIX(pcre2_set_match_limit_) -#define pcre2_set_max_varlookbehind PCRE2_SUFFIX(pcre2_set_max_varlookbehind_) -#define pcre2_set_max_pattern_length PCRE2_SUFFIX(pcre2_set_max_pattern_length_) -#define pcre2_set_max_pattern_compiled_length PCRE2_SUFFIX(pcre2_set_max_pattern_compiled_length_) -#define pcre2_set_newline PCRE2_SUFFIX(pcre2_set_newline_) -#define pcre2_set_parens_nest_limit PCRE2_SUFFIX(pcre2_set_parens_nest_limit_) -#define pcre2_set_offset_limit PCRE2_SUFFIX(pcre2_set_offset_limit_) -#define pcre2_set_optimize PCRE2_SUFFIX(pcre2_set_optimize_) -#define pcre2_set_substitute_callout PCRE2_SUFFIX(pcre2_set_substitute_callout_) -#define pcre2_set_substitute_case_callout PCRE2_SUFFIX(pcre2_set_substitute_case_callout_) -#define pcre2_substitute PCRE2_SUFFIX(pcre2_substitute_) -#define pcre2_substring_copy_byname PCRE2_SUFFIX(pcre2_substring_copy_byname_) -#define pcre2_substring_copy_bynumber PCRE2_SUFFIX(pcre2_substring_copy_bynumber_) -#define pcre2_substring_free PCRE2_SUFFIX(pcre2_substring_free_) -#define pcre2_substring_get_byname PCRE2_SUFFIX(pcre2_substring_get_byname_) -#define pcre2_substring_get_bynumber PCRE2_SUFFIX(pcre2_substring_get_bynumber_) -#define pcre2_substring_length_byname PCRE2_SUFFIX(pcre2_substring_length_byname_) -#define pcre2_substring_length_bynumber PCRE2_SUFFIX(pcre2_substring_length_bynumber_) -#define pcre2_substring_list_get PCRE2_SUFFIX(pcre2_substring_list_get_) -#define pcre2_substring_list_free PCRE2_SUFFIX(pcre2_substring_list_free_) -#define pcre2_substring_nametable_scan PCRE2_SUFFIX(pcre2_substring_nametable_scan_) -#define pcre2_substring_number_from_name PCRE2_SUFFIX(pcre2_substring_number_from_name_) - -/* Keep this old function name for backwards compatibility */ -#define pcre2_set_recursion_limit PCRE2_SUFFIX(pcre2_set_recursion_limit_) - -/* Keep this obsolete function for backwards compatibility: it is now a noop. */ -#define pcre2_set_recursion_memory_management PCRE2_SUFFIX(pcre2_set_recursion_memory_management_) - -/* Now generate all three sets of width-specific structures and function -prototypes. */ - -#define PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS \ -PCRE2_TYPES_LIST \ -PCRE2_STRUCTURE_LIST \ -PCRE2_GENERAL_INFO_FUNCTIONS \ -PCRE2_GENERAL_CONTEXT_FUNCTIONS \ -PCRE2_COMPILE_CONTEXT_FUNCTIONS \ -PCRE2_CONVERT_CONTEXT_FUNCTIONS \ -PCRE2_CONVERT_FUNCTIONS \ -PCRE2_MATCH_CONTEXT_FUNCTIONS \ -PCRE2_COMPILE_FUNCTIONS \ -PCRE2_PATTERN_INFO_FUNCTIONS \ -PCRE2_MATCH_FUNCTIONS \ -PCRE2_SUBSTRING_FUNCTIONS \ -PCRE2_SERIALIZE_FUNCTIONS \ -PCRE2_SUBSTITUTE_FUNCTION \ -PCRE2_JIT_FUNCTIONS \ -PCRE2_OTHER_FUNCTIONS - -#define PCRE2_LOCAL_WIDTH 8 -PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS -#undef PCRE2_LOCAL_WIDTH - -#define PCRE2_LOCAL_WIDTH 16 -PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS -#undef PCRE2_LOCAL_WIDTH - -#define PCRE2_LOCAL_WIDTH 32 -PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS -#undef PCRE2_LOCAL_WIDTH - -/* Undefine the list macros; they are no longer needed. */ - -#undef PCRE2_TYPES_LIST -#undef PCRE2_STRUCTURE_LIST -#undef PCRE2_GENERAL_INFO_FUNCTIONS -#undef PCRE2_GENERAL_CONTEXT_FUNCTIONS -#undef PCRE2_COMPILE_CONTEXT_FUNCTIONS -#undef PCRE2_CONVERT_CONTEXT_FUNCTIONS -#undef PCRE2_MATCH_CONTEXT_FUNCTIONS -#undef PCRE2_COMPILE_FUNCTIONS -#undef PCRE2_PATTERN_INFO_FUNCTIONS -#undef PCRE2_MATCH_FUNCTIONS -#undef PCRE2_SUBSTRING_FUNCTIONS -#undef PCRE2_SERIALIZE_FUNCTIONS -#undef PCRE2_SUBSTITUTE_FUNCTION -#undef PCRE2_JIT_FUNCTIONS -#undef PCRE2_OTHER_FUNCTIONS -#undef PCRE2_TYPES_STRUCTURES_AND_FUNCTIONS - -/* PCRE2_CODE_UNIT_WIDTH must be defined. If it is 8, 16, or 32, redefine -PCRE2_SUFFIX to use it. If it is 0, undefine the other macros and make -PCRE2_SUFFIX a no-op. Otherwise, generate an error. */ - -#undef PCRE2_SUFFIX -#ifndef PCRE2_CODE_UNIT_WIDTH -#error PCRE2_CODE_UNIT_WIDTH must be defined before including pcre2.h. -#error Use 8, 16, or 32; or 0 for a multi-width application. -#else /* PCRE2_CODE_UNIT_WIDTH is defined */ -#if PCRE2_CODE_UNIT_WIDTH == 8 || \ - PCRE2_CODE_UNIT_WIDTH == 16 || \ - PCRE2_CODE_UNIT_WIDTH == 32 -#define PCRE2_SUFFIX(a) PCRE2_GLUE(a, PCRE2_CODE_UNIT_WIDTH) -#elif PCRE2_CODE_UNIT_WIDTH == 0 -#undef PCRE2_JOIN -#undef PCRE2_GLUE -#define PCRE2_SUFFIX(a) a -#else -#error PCRE2_CODE_UNIT_WIDTH must be 0, 8, 16, or 32. -#endif -#endif /* PCRE2_CODE_UNIT_WIDTH is defined */ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* PCRE2_H_IDEMPOTENT_GUARD */ - -/* End of pcre2.h */ diff --git a/vendor/core/vendor/pcre2/src/pcre2.h.in b/vendor/core/vendor/pcre2/src/pcre2.h.in index 0dffe65fb..06bcfad7d 100644 --- a/vendor/core/vendor/pcre2/src/pcre2.h.in +++ b/vendor/core/vendor/pcre2/src/pcre2.h.in @@ -438,6 +438,7 @@ released, the numbers must not be changed. */ #define PCRE2_ERROR_DIFFSUBSOFFSET (-73) #define PCRE2_ERROR_DIFFSUBSOPTIONS (-74) #define PCRE2_ERROR_BAD_BACKSLASH_K (-75) +#define PCRE2_ERROR_PARTIALSUBS (-76) /* Request types for pcre2_pattern_info() */ diff --git a/vendor/core/vendor/pcre2/src/pcre2_chartables.c.ebcdic-1047-nl15 b/vendor/core/vendor/pcre2/src/pcre2_chartables.c.ebcdic-1047-nl15 deleted file mode 100644 index 071a8f425..000000000 --- a/vendor/core/vendor/pcre2/src/pcre2_chartables.c.ebcdic-1047-nl15 +++ /dev/null @@ -1,196 +0,0 @@ -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* This file was automatically written by the pcre2_dftables auxiliary -program. It contains character tables that are used when no external -tables are passed to PCRE2 by the application that calls it. The tables -are used only for characters whose code values are less than 256, and -only relevant if not in UCP mode. */ - -/* This set of tables was written in the EBCDIC 1047 (NL 0x15) locale. */ - -/* The pcre2_ftables program (which is distributed with PCRE2) can be used -to build alternative versions of this file. This is necessary if you are -running in an EBCDIC environment, or if you want to default to a different -encoding, for example ISO-8859-1. When pcre2_dftables is run, it creates -these tables in the "C" locale by default. This happens automatically if -PCRE2 is configured with --enable-rebuild-chartables. However, you can run -pcre2_dftables manually with the -L option to build tables using the LC_ALL -locale. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "pcre2_internal.h" - -const uint8_t PRIV(default_tables)[] = { - -/* This table is a lower casing table. */ - - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103, - 104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119, - 120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135, - 136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151, - 152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167, - 168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191, - 192,129,130,131,132,133,134,135, - 136,137,202,203,204,205,206,207, - 208,145,146,147,148,149,150,151, - 152,153,218,219,220,221,222,223, - 224,225,162,163,164,165,166,167, - 168,169,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247, - 248,249,250,251,252,253,254,255, - -/* This table is a case flipping table. */ - - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103, - 104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119, - 120,121,122,123,124,125,126,127, - 128,193,194,195,196,197,198,199, - 200,201,138,139,140,141,142,143, - 144,209,210,211,212,213,214,215, - 216,217,154,155,156,157,158,159, - 160,161,226,227,228,229,230,231, - 232,233,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191, - 192,129,130,131,132,133,134,135, - 136,137,202,203,204,205,206,207, - 208,145,146,147,148,149,150,151, - 152,153,218,219,220,221,222,223, - 224,225,162,163,164,165,166,167, - 168,169,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247, - 248,249,250,251,252,253,254,255, - -/* This table contains bit maps for various character classes. Each map is 32 -bytes long and the bits run from the least significant end of each byte. The -classes that have their own maps are: space, xdigit, digit, upper, lower, word, -graph, print, punct, and cntrl. Other classes are built from combinations. */ - - 0x20,0x38,0x20,0x00,0x00,0x00,0x00,0x00, /* space */ - 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* xdigit */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x7e,0x00,0x00,0x00,0x00,0x00,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* digit */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* upper */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* lower */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* word */ - 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, - 0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00, - 0xfe,0x03,0xfe,0x03,0xfc,0x03,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* graph */ - 0x00,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe, - 0xfe,0x03,0xfe,0x03,0xfe,0x23,0x00,0x20, - 0xff,0x03,0xff,0x03,0xfd,0x03,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* print */ - 0x01,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe, - 0xfe,0x03,0xfe,0x03,0xfe,0x23,0x00,0x20, - 0xff,0x03,0xff,0x03,0xfd,0x03,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* punct */ - 0x00,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe, - 0x00,0x00,0x00,0x00,0x02,0x20,0x00,0x20, - 0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00, - - 0xaf,0xf8,0x6f,0xf3,0xc0,0xe0,0x84,0xb0, /* cntrl */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - -/* This table identifies various classes of character by individual bits: - 0x01 white space character - 0x02 letter - 0x04 lower case letter - 0x08 decimal digit - 0x10 word (alphanumeric or '_') -*/ - - 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* 0- 7 */ - 0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00, /* 8- 15 */ - 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* 16- 23 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 24- 31 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* - ' */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ( - / */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0 - 7 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 8 - ? */ - 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* @ - G */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* H - O */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* P - W */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* X - _ */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ` - g */ - 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00, /* h - o */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* p - w */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* x -127 */ - 0x00,0x16,0x16,0x16,0x16,0x16,0x16,0x16, /* 128-135 */ - 0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */ - 0x00,0x16,0x16,0x16,0x16,0x16,0x16,0x16, /* 144-151 */ - 0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */ - 0x00,0x00,0x16,0x16,0x16,0x16,0x16,0x16, /* 160-167 */ - 0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */ - 0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 192-199 */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */ - 0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 208-215 */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */ - 0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /* 224-231 */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */ - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 240-247 */ - 0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */ - -/* End of pcre2_chartables.c */ diff --git a/vendor/core/vendor/pcre2/src/pcre2_chartables.c.ebcdic-1047-nl25 b/vendor/core/vendor/pcre2/src/pcre2_chartables.c.ebcdic-1047-nl25 deleted file mode 100644 index 99ba81b20..000000000 --- a/vendor/core/vendor/pcre2/src/pcre2_chartables.c.ebcdic-1047-nl25 +++ /dev/null @@ -1,196 +0,0 @@ -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* This file was automatically written by the pcre2_dftables auxiliary -program. It contains character tables that are used when no external -tables are passed to PCRE2 by the application that calls it. The tables -are used only for characters whose code values are less than 256, and -only relevant if not in UCP mode. */ - -/* This set of tables was written in the EBCDIC 1047 (NL 0x25) locale. */ - -/* The pcre2_ftables program (which is distributed with PCRE2) can be used -to build alternative versions of this file. This is necessary if you are -running in an EBCDIC environment, or if you want to default to a different -encoding, for example ISO-8859-1. When pcre2_dftables is run, it creates -these tables in the "C" locale by default. This happens automatically if -PCRE2 is configured with --enable-rebuild-chartables. However, you can run -pcre2_dftables manually with the -L option to build tables using the LC_ALL -locale. */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "pcre2_internal.h" - -const uint8_t PRIV(default_tables)[] = { - -/* This table is a lower casing table. */ - - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103, - 104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119, - 120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135, - 136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151, - 152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167, - 168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191, - 192,129,130,131,132,133,134,135, - 136,137,202,203,204,205,206,207, - 208,145,146,147,148,149,150,151, - 152,153,218,219,220,221,222,223, - 224,225,162,163,164,165,166,167, - 168,169,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247, - 248,249,250,251,252,253,254,255, - -/* This table is a case flipping table. */ - - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103, - 104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119, - 120,121,122,123,124,125,126,127, - 128,193,194,195,196,197,198,199, - 200,201,138,139,140,141,142,143, - 144,209,210,211,212,213,214,215, - 216,217,154,155,156,157,158,159, - 160,161,226,227,228,229,230,231, - 232,233,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191, - 192,129,130,131,132,133,134,135, - 136,137,202,203,204,205,206,207, - 208,145,146,147,148,149,150,151, - 152,153,218,219,220,221,222,223, - 224,225,162,163,164,165,166,167, - 168,169,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247, - 248,249,250,251,252,253,254,255, - -/* This table contains bit maps for various character classes. Each map is 32 -bytes long and the bits run from the least significant end of each byte. The -classes that have their own maps are: space, xdigit, digit, upper, lower, word, -graph, print, punct, and cntrl. Other classes are built from combinations. */ - - 0x20,0x38,0x00,0x00,0x20,0x00,0x00,0x00, /* space */ - 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* xdigit */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x7e,0x00,0x00,0x00,0x00,0x00,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* digit */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* upper */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* lower */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* word */ - 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, - 0xfe,0x03,0xfe,0x03,0xfc,0x03,0x00,0x00, - 0xfe,0x03,0xfe,0x03,0xfc,0x03,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* graph */ - 0x00,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe, - 0xfe,0x03,0xfe,0x03,0xfe,0x23,0x00,0x20, - 0xff,0x03,0xff,0x03,0xfd,0x03,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* print */ - 0x01,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe, - 0xfe,0x03,0xfe,0x03,0xfe,0x23,0x00,0x20, - 0xff,0x03,0xff,0x03,0xfd,0x03,0xff,0x03, - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* punct */ - 0x00,0xf8,0x01,0xfc,0x03,0xf8,0x00,0xfe, - 0x00,0x00,0x00,0x00,0x02,0x20,0x00,0x20, - 0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00, - - 0xaf,0xf8,0x4f,0xf3,0xe0,0xe0,0x84,0xb0, /* cntrl */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - -/* This table identifies various classes of character by individual bits: - 0x01 white space character - 0x02 letter - 0x04 lower case letter - 0x08 decimal digit - 0x10 word (alphanumeric or '_') -*/ - - 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* 0- 7 */ - 0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00, /* 8- 15 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 16- 23 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 24- 31 */ - 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* - ' */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ( - / */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0 - 7 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 8 - ? */ - 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* @ - G */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* H - O */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* P - W */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* X - _ */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ` - g */ - 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00, /* h - o */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* p - w */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* x -127 */ - 0x00,0x16,0x16,0x16,0x16,0x16,0x16,0x16, /* 128-135 */ - 0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */ - 0x00,0x16,0x16,0x16,0x16,0x16,0x16,0x16, /* 144-151 */ - 0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */ - 0x00,0x00,0x16,0x16,0x16,0x16,0x16,0x16, /* 160-167 */ - 0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */ - 0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 192-199 */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */ - 0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 208-215 */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */ - 0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /* 224-231 */ - 0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */ - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 240-247 */ - 0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */ - -/* End of pcre2_chartables.c */ diff --git a/vendor/core/vendor/pcre2/src/pcre2_compile.c b/vendor/core/vendor/pcre2/src/pcre2_compile.c index f126e41b7..1081cf647 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_compile.c +++ b/vendor/core/vendor/pcre2/src/pcre2_compile.c @@ -2020,7 +2020,7 @@ else else { *errorcodeptr = ERR64; - goto ESCAPE_FAILED_FORWARD; + if (ptr < ptrend) goto ESCAPE_FAILED_FORWARD; } break; @@ -2107,7 +2107,7 @@ else else { *errorcodeptr = ERR67; - goto ESCAPE_FAILED_FORWARD; + if (ptr < ptrend) goto ESCAPE_FAILED_FORWARD; } } /* End of \x{} processing */ @@ -8066,6 +8066,13 @@ for (;; pptr++) tempcode += GET(tempcode, 1); break; #endif + + case OP_REF: + case OP_REFI: + case OP_DNREF: + case OP_DNREFI: + tempcode += PRIV(OP_lengths)[*tempcode]; + break; } /* If tempcode is equal to code (which points to the end of the repeated @@ -9363,10 +9370,10 @@ return c; /* This function is called to skip parts of the parsed pattern when finding the length of a lookbehind branch. It is called after (*ACCEPT) and (*FAIL) to find -the end of the branch, it is called to skip over an internal lookaround or -(DEFINE) group, and it is also called to skip to the end of a class, during -which it will never encounter nested groups (but there's no need to have -special code for that). +the end of the branch; it is called to skip over an internal lookaround or +(DEFINE) group; and it is also called to skip to the end of a class, during +which it will never encounter nested groups (however extended classes can +themselves be nested, with their own class-nesting level). When called to find the end of a branch or group, pptr must point to the first meta code inside the branch, not the branch-starting code. In other cases it @@ -9387,6 +9394,7 @@ static uint32_t * parsed_skip(uint32_t *pptr, uint32_t skiptype) { uint32_t nestlevel = 0; +uint32_t class_nestlevel = 0; for (;; pptr++) { @@ -9426,12 +9434,19 @@ for (;; pptr++) pptr += pptr[1]; break; - /* These are the "active" items in this loop. */ + /* These are the active items for tracking class nesting. */ + + case META_CLASS: + case META_CLASS_NOT: + if (skiptype == PSKIP_CLASS) class_nestlevel++; + break; case META_CLASS_END: - if (skiptype == PSKIP_CLASS) return pptr; + if (skiptype == PSKIP_CLASS && --class_nestlevel == 0) return pptr; break; + /* These are the "active" items for tracking ALT/KET nesting. */ + case META_ATOMIC: case META_CAPTURE: case META_COND_ASSERT: @@ -10160,6 +10175,11 @@ for (; *pptr != META_END; pptr++) case META_COMMIT: case META_DOLLAR: case META_DOT: + case META_ECLASS_AND: + case META_ECLASS_NOT: + case META_ECLASS_OR: + case META_ECLASS_SUB: + case META_ECLASS_XOR: case META_FAIL: case META_PLUS: case META_PLUS_PLUS: diff --git a/vendor/core/vendor/pcre2/src/pcre2_compile_class.c b/vendor/core/vendor/pcre2/src/pcre2_compile_class.c index 9a1fc022f..c6f30d6fc 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_compile_class.c +++ b/vendor/core/vendor/pcre2/src/pcre2_compile_class.c @@ -721,9 +721,13 @@ while (TRUE) else cranges->char_lists_types |= tmp1 << tmp2; - if (range_start < XCL_CHAR_LIST_LOW_16_START) break; + if (range_end < XCL_CHAR_LIST_LOW_16_START || tmp2 == 0) + { + PCRE2_ASSERT(range_start < XCL_CHAR_LIST_LOW_16_START); + break; + } - PCRE2_ASSERT(tmp2 >= XCL_TYPE_BIT_LEN); + PCRE2_ASSERT((tmp2 % XCL_TYPE_BIT_LEN) == 0); char_list_end = char_list_start - 1; char_list_start = *char_list_next++; tmp1 = 0; @@ -1802,17 +1806,14 @@ if ((xclass_props & XCLASS_REQUIRED) != 0) PUT(code, 0, (uint32_t)(char_lists_size >> 1)); code += LINK_SIZE; -#if defined PCRE2_DEBUG || defined SUPPORT_VALGRIND + /* If we added padding to align the list, initialize the bytes to + defined values, so the library is valgrind-clean. It could also + be a security concern for clients calling into PCRE2 via bindings + from a memory-safe language, if pcre2_serialize_encode() exposes + uninitialized memory that may contain sensitive information. */ + if ((char_lists_size & 0x2) != 0) - { - /* In debug the unused 16 bit value is set - to a fixed value and marked unused. */ - ((uint16_t*)data)[-1] = 0x5555; -#ifdef SUPPORT_VALGRIND - VALGRIND_MAKE_MEM_NOACCESS(data - 2, 2); -#endif - } -#endif + ((uint16_t*)data)[-1] = 0xdead; cb->char_lists_size = CLIST_ALIGN_TO(char_lists_size, sizeof(uint32_t)); diff --git a/vendor/core/vendor/pcre2/src/pcre2_convert.c b/vendor/core/vendor/pcre2/src/pcre2_convert.c index ad7312ab7..8a2b293d5 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_convert.c +++ b/vendor/core/vendor/pcre2/src/pcre2_convert.c @@ -1215,9 +1215,11 @@ for (int i = 0; i < 2; i++) /* Allocate memory for the buffer, with hidden space for an allocator at the start. The next time round the loop runs the conversion for real. */ - allocated = PRIV(memctl_malloc)(sizeof(pcre2_memctl) + - (*bufflenptr + 1)*PCRE2_CODE_UNIT_WIDTH, (pcre2_memctl *)ccontext); - if (allocated == NULL) + if (*bufflenptr > ((PCRE2_SIZE_MAX - sizeof(pcre2_memctl)) / + CU2BYTES(1)) - 1 || + (allocated = PRIV(memctl_malloc)(sizeof(pcre2_memctl) + + CU2BYTES(*bufflenptr + 1), + (pcre2_memctl *)ccontext)) == NULL) { *bufflenptr = 0; /* Error offset */ return PCRE2_ERROR_NOMEMORY; diff --git a/vendor/core/vendor/pcre2/src/pcre2_dfa_match.c b/vendor/core/vendor/pcre2/src/pcre2_dfa_match.c index f507acf8d..314e97754 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_dfa_match.c +++ b/vendor/core/vendor/pcre2/src/pcre2_dfa_match.c @@ -1601,7 +1601,7 @@ for (;;) goto ANYNL01; case CHAR_CR: - if (ptr + 1 < end_subject && UCHAR21TEST(ptr + 1) == CHAR_LF) ncount = 1; + if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1; /* Fall through */ ANYNL01: @@ -1879,7 +1879,7 @@ for (;;) goto ANYNL02; case CHAR_CR: - if (ptr + 1 < end_subject && UCHAR21TEST(ptr + 1) == CHAR_LF) ncount = 1; + if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1; /* Fall through */ ANYNL02: @@ -2160,7 +2160,7 @@ for (;;) goto ANYNL03; case CHAR_CR: - if (ptr + 1 < end_subject && UCHAR21TEST(ptr + 1) == CHAR_LF) ncount = 1; + if (ptr + 1 < end_subject && ptr[1] == CHAR_LF) ncount = 1; /* Fall through */ ANYNL03: @@ -2341,7 +2341,7 @@ for (;;) if ((mb->moptions & PCRE2_PARTIAL_HARD) != 0) reset_could_continue = TRUE; } - else if (UCHAR21TEST(ptr + 1) == CHAR_LF) + else if (ptr[1] == CHAR_LF) { ADD_NEW_DATA(-(state_offset + 1), 0, 1); } @@ -3745,7 +3745,7 @@ for (;;) BOOL ok = start_match < end_subject; if (ok) { - PCRE2_UCHAR c = UCHAR21TEST(start_match); + PCRE2_UCHAR c = *start_match; ok = has_first_cu && (c == first_cu || c == first_cu2); if (!ok && start_bits != NULL) { @@ -3773,7 +3773,7 @@ for (;;) #if PCRE2_CODE_UNIT_WIDTH != 8 PCRE2_UCHAR smc; while (start_match < end_subject && - (smc = UCHAR21TEST(start_match)) != first_cu && + (smc = *start_match) != first_cu && smc != first_cu2) start_match++; #else @@ -3833,7 +3833,7 @@ for (;;) else { #if PCRE2_CODE_UNIT_WIDTH != 8 - while (start_match < end_subject && UCHAR21TEST(start_match) != + while (start_match < end_subject && *start_match != first_cu) start_match++; #else /* 8-bit code units */ @@ -3885,7 +3885,7 @@ for (;;) if (start_match[-1] == CHAR_CR && (mb->nltype == NLTYPE_ANY || mb->nltype == NLTYPE_ANYCRLF) && start_match < end_subject && - UCHAR21TEST(start_match) == CHAR_NL) + *start_match == CHAR_NL) start_match++; } } @@ -3899,7 +3899,7 @@ for (;;) { while (start_match < end_subject) { - uint32_t c = UCHAR21TEST(start_match); + uint32_t c = *start_match; #if PCRE2_CODE_UNIT_WIDTH != 8 if (c > 255) c = 255; #endif @@ -3967,7 +3967,7 @@ for (;;) #if PCRE2_CODE_UNIT_WIDTH != 8 while (p < end_subject) { - uint32_t pp = UCHAR21INCTEST(p); + uint32_t pp = *p++; if (pp == req_cu || pp == req_cu2) { p--; break; } } #else /* 8-bit code units */ @@ -3988,7 +3988,7 @@ for (;;) #if PCRE2_CODE_UNIT_WIDTH != 8 while (p < end_subject) { - if (UCHAR21INCTEST(p) == req_cu) { p--; break; } + if (*p++ == req_cu) { p--; break; } } #else /* 8-bit code units */ @@ -4096,9 +4096,9 @@ for (;;) not contain any explicit matches for \r or \n, and the newline option is CRLF or ANY or ANYCRLF, advance the match position by one more character. */ - if (UCHAR21TEST(start_match - 1) == CHAR_CR && + if (start_match[-1] == CHAR_CR && start_match < end_subject && - UCHAR21TEST(start_match) == CHAR_NL && + *start_match == CHAR_NL && (re->flags & PCRE2_HASCRORLF) == 0 && (mb->nltype == NLTYPE_ANY || mb->nltype == NLTYPE_ANYCRLF || diff --git a/vendor/core/vendor/pcre2/src/pcre2_error.c b/vendor/core/vendor/pcre2/src/pcre2_error.c index df26add2b..46753f079 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_error.c +++ b/vendor/core/vendor/pcre2/src/pcre2_error.c @@ -305,7 +305,9 @@ static const unsigned char match_error_texts[] = "substitute subject differs from prior match call\0" "substitute start offset differs from prior match call\0" "substitute options differ from prior match call\0" + /* 75 */ "disallowed use of \\K in lookaround\0" + "replacement $' or $_ not supported with partial match\0" ; diff --git a/vendor/core/vendor/pcre2/src/pcre2_internal.h b/vendor/core/vendor/pcre2/src/pcre2_internal.h index aa7940957..930c745b4 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_internal.h +++ b/vendor/core/vendor/pcre2/src/pcre2_internal.h @@ -477,8 +477,8 @@ start/end of string field names are. */ &(NLBLOCK->nllen), utf)) \ : \ ((p) <= NLBLOCK->PSEND - NLBLOCK->nllen && \ - UCHAR21TEST(p) == NLBLOCK->nl[0] && \ - (NLBLOCK->nllen == 1 || UCHAR21TEST(p+1) == NLBLOCK->nl[1]) \ + *p == NLBLOCK->nl[0] && \ + (NLBLOCK->nllen == 1 || p[1] == NLBLOCK->nl[1]) \ ) \ ) @@ -491,8 +491,8 @@ start/end of string field names are. */ &(NLBLOCK->nllen), utf)) \ : \ ((p) >= NLBLOCK->PSSTART + NLBLOCK->nllen && \ - UCHAR21TEST(p - NLBLOCK->nllen) == NLBLOCK->nl[0] && \ - (NLBLOCK->nllen == 1 || UCHAR21TEST(p - NLBLOCK->nllen + 1) == NLBLOCK->nl[1]) \ + *(p - NLBLOCK->nllen) == NLBLOCK->nl[0] && \ + (NLBLOCK->nllen == 1 || *(p - NLBLOCK->nllen + 1) == NLBLOCK->nl[1]) \ ) \ ) @@ -1518,7 +1518,7 @@ High16 and High32: the highest bit is always one The items are ordered in increasing order, so binary search can be used to find the lower bound of an input character. The lower bound is the highest item, which value is less or equal than the input -character. If the lower bit of the item is cleard, or the character +character. If the lower bit of the item is cleared, or the character stored in the item equals to the input character, the input character is in the character list. */ @@ -1539,14 +1539,19 @@ character is in the character list. */ #define XCL_CHAR_LIST_HIGH_32_END 0xffffffff #define XCL_CHAR_LIST_HIGH_32_ADD 0x80000000 -/* Mask for getting the descriptors of character list ranges. -Each descriptor has XCL_TYPE_BIT_LEN bits, and can be processed -by XCL_BEGIN_WITH_RANGE and XCL_ITEM_COUNT_MASK macros. */ +/* Mask and length values for getting the descriptors of +all character list ranges. The bit length of each descriptor +is XCL_TYPE_BIT_LEN so the total size is 4*XCL_TYPE_BIT_LEN +(currently 12 bit). This data is stored for all four character +lists, even if no characters are present in a list. */ #define XCL_TYPE_MASK 0xfff #define XCL_TYPE_BIT_LEN 3 -/* If this bit is set, the first item of the character list is the -end of a range, which started before the starting character of the -character list. */ +/* If this bit is set for a character class, the first item of the +character list is the end of a range, which started before the +starting character of the character list. If this bit is set, and +no characters are present in the list, the whole character class +is part of a range. E.g: [\x{500}-\x{12000}] covers the entire +0x8000-0xffff range. */ #define XCL_BEGIN_WITH_RANGE 0x4 /* Number of items in the character list: 0, 1, or 2. The value 3 represents that the item count is stored at the begining of the @@ -2296,6 +2301,7 @@ is available. */ #define _pcre2_is_newline PCRE2_SUFFIX(_pcre2_is_newline_) #define _pcre2_jit_free_rodata PCRE2_SUFFIX(_pcre2_jit_free_rodata_) #define _pcre2_jit_free PCRE2_SUFFIX(_pcre2_jit_free_) +#define _pcre2_jit_check_exec PCRE2_SUFFIX(_pcre2_jit_check_exec_) #define _pcre2_jit_get_size PCRE2_SUFFIX(_pcre2_jit_get_size_) #define _pcre2_jit_get_target PCRE2_SUFFIX(_pcre2_jit_get_target_) #define _pcre2_memctl_malloc PCRE2_SUFFIX(_pcre2_memctl_malloc_) @@ -2325,6 +2331,7 @@ extern BOOL _pcre2_is_newline(PCRE2_SPTR, uint32_t, PCRE2_SPTR, uint32_t *, BOOL); extern void _pcre2_jit_free_rodata(void *, void *); extern void _pcre2_jit_free(void *, pcre2_memctl *); +extern BOOL _pcre2_jit_check_exec(void *, uint32_t); extern size_t _pcre2_jit_get_size(void *); const char * _pcre2_jit_get_target(void); extern void * _pcre2_memctl_malloc(size_t, pcre2_memctl *); diff --git a/vendor/core/vendor/pcre2/src/pcre2_intmodedep.h b/vendor/core/vendor/pcre2/src/pcre2_intmodedep.h index 6cefb61d3..269c418fe 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_intmodedep.h +++ b/vendor/core/vendor/pcre2/src/pcre2_intmodedep.h @@ -250,21 +250,6 @@ check is needed before accessing these tables. */ /* ----------------- Character-handling macros ----------------- */ -/* There is a proposed future special "UTF-21" mode, in which only the lowest -21 bits of a 32-bit character are interpreted as UTF, with the remaining 11 -high-order bits available to the application for other uses. In preparation for -the future implementation of this mode, there are macros that load a data item -and, if in this special mode, mask it to 21 bits. These macros all have names -starting with UCHAR21. In all other modes, including the normal 32-bit -library, the macros all have the same simple definitions. When the new mode is -implemented, it is expected that these definitions will be varied appropriately -using #ifdef when compiling the library that supports the special mode. */ - -#define UCHAR21(eptr) (*(eptr)) -#define UCHAR21TEST(eptr) (*(eptr)) -#define UCHAR21INC(eptr) (*(eptr)++) -#define UCHAR21INCTEST(eptr) (*(eptr)++) - /* When UTF encoding is being used, a character is no longer just a single byte in 8-bit mode or a single short in 16-bit mode. The macros for character handling generate simple sequences when used in the basic mode, and more @@ -891,38 +876,125 @@ we don't generate any code when all is well. */ typedef struct heapframe { /* The first set of fields are variables that have to be preserved over calls - to RRMATCH(), but which do not need to be copied to new frames. */ + to RMATCH(), but which do not need to be copied to new frames. */ PCRE2_SPTR ecode; /* The current position in the pattern */ - PCRE2_SPTR temp_sptr[2]; /* Used for short-term PCRE2_SPTR values */ - PCRE2_SIZE length; /* Used for character, string, or code lengths */ PCRE2_SIZE back_frame; /* Amount to subtract on RRETURN */ - PCRE2_SIZE temp_size; /* Used for short-term PCRE2_SIZE values */ uint32_t rdepth; /* Function "recursion" depth within pcre2_match() */ uint32_t group_frame_type; /* Type information for group frames */ - uint32_t temp_32[4]; /* Used for short-term 32-bit or BOOL values */ uint8_t return_id; /* Where to go on in internal "return" */ uint8_t op; /* Processing opcode */ + uint8_t byte1; /* A temporary byte to store anything */ + uint8_t byte2; /* A temporary byte to store anything */ - /* At this point, the structure is 16-bit aligned. On most architectures + /* At this point, the structure is 32-bit aligned. On most architectures the alignment requirement for a pointer will ensure that the eptr field below is 32-bit or 64-bit aligned. However, on m68k it is fine to have a pointer - that is 16-bit aligned. We must therefore ensure that what comes between here - and eptr is an odd multiple of 16 bits so as to get back into 32-bit - alignment. This happens naturally when PCRE2_UCHAR is 8 bits wide, but needs - fudges in the other cases. In the 32-bit case the padding comes first so that - the occu field itself is 32-bit aligned. Without the padding, this structure - is no longer a multiple of PCRE2_SIZE on m68k, and the check below fails. */ - + that is 16-bit aligned, so all uint8_t members above are required for a 32 + bit alignment. */ + + union { + /* Fields for storing localized data, which + is preserved by RMATCH() calls. */ + + struct { + PCRE2_SPTR start_eptr; + PCRE2_SPTR charptr; + uint32_t min; + uint32_t max; + uint32_t c; + union { + uint32_t oc; + /* Buffer for other case code units. The size of + the buffer is enough to store the longest character. */ #if PCRE2_CODE_UNIT_WIDTH == 8 - PCRE2_UCHAR occu[6]; /* Used for other case code units */ + PCRE2_UCHAR occu[4]; #elif PCRE2_CODE_UNIT_WIDTH == 16 - PCRE2_UCHAR occu[2]; /* Used for other case code units */ - uint8_t unused[2]; /* Ensure 32-bit alignment (see above) */ + PCRE2_UCHAR occu[2]; #else - uint8_t unused[2]; /* Ensure 32-bit alignment (see above) */ - PCRE2_UCHAR occu[1]; /* Used for other case code units */ + PCRE2_UCHAR occu[1]; #endif + } oc; + } char_repeat; + + struct { + PCRE2_SPTR start_eptr; + uint32_t min; + uint32_t max; + uint32_t c; + uint32_t oc; + } charnot_repeat; + + struct { + PCRE2_SPTR start_eptr; + PCRE2_SPTR byte_map_address; + uint32_t min; + uint32_t max; + } class_repeat; + + struct { + PCRE2_SPTR start_eptr; + PCRE2_SPTR xclass_data; + uint32_t min; + uint32_t max; + } xclass_repeat; + + struct { + PCRE2_SPTR start_eptr; + PCRE2_SPTR eclass_data; + PCRE2_SIZE eclass_len; + uint32_t min; + uint32_t max; + } eclass_repeat; + + struct { + PCRE2_SPTR start_eptr; + uint32_t min; + uint32_t max; + uint32_t ctype; + uint32_t propvalue; + } type_repeat; + + struct { + PCRE2_SPTR start; + PCRE2_SIZE offset; + PCRE2_SIZE length; + uint32_t min; + uint32_t max; + } ref_repeat; + + struct { + uint32_t frame_type; /* Set for all that use GROUPLOOP */ + } op_bra; + + struct { + PCRE2_SPTR start_eptr; + PCRE2_SPTR start_group; + uint32_t frame_type; + } op_brapos; + + struct { + PCRE2_SPTR start_branch; + uint32_t frame_type; + } op_recurse; + + struct { + PCRE2_SPTR saved_end_subject; + PCRE2_SPTR saved_eptr; + PCRE2_SIZE true_end_extra; + uint32_t saved_moptions; + } op_assert_scs; + + struct { + PCRE2_SPTR start_branch; + PCRE2_SIZE length; + } op_cond; + + struct { + uint32_t min; + uint32_t max; + } op_vreverse; + } fields; /* The rest have to be copied from the previous frame whenever a new frame becomes current. The final field is specified as a large vector so that diff --git a/vendor/core/vendor/pcre2/src/pcre2_jit_compile.c b/vendor/core/vendor/pcre2/src/pcre2_jit_compile.c index 3ab4592c3..105a1dd35 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_jit_compile.c +++ b/vendor/core/vendor/pcre2/src/pcre2_jit_compile.c @@ -321,6 +321,7 @@ typedef struct ref_iterator_backtrack { backtrack_common common; /* Next iteration. */ struct sljit_label *matchingpath; + BOOL possessive_or_exact; } ref_iterator_backtrack; typedef struct recurse_entry { @@ -1142,7 +1143,11 @@ cc += PRIV(OP_lengths)[*cc]; /* Although do_casefulcmp() uses only one local, the allocate_stack() calls during the repeat destroys LOCAL1 variables. */ if (*cc >= OP_CRSTAR && *cc <= OP_CRPOSRANGE) + { locals_size += 2 * SSIZE_OF(sw); + if (*cc >= OP_CRPOSRANGE && GET2(cc, 1 + IMM2_SIZE + 1) != GET2(cc, 1 + IMM2_SIZE + 1 + IMM2_SIZE)) + locals_size += SSIZE_OF(sw); + } return (current_locals_size >= locals_size) ? current_locals_size : locals_size; } @@ -5413,15 +5418,15 @@ OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); static void do_utfreadchar_invalid(compiler_common *common) { /* Slow decoding a UTF-16 character. TMP1 contains the first half -of the character (>= 0xd800). Return char value in TMP1. STR_PTR is -undefined for invalid characters. */ +of the character (>= 0xd800). TMP2 contains TMP1 - 0xd800. Return +char value in TMP1. STR_PTR is unchanged for invalid characters. */ DEFINE_COMPILER; struct sljit_jump *exit_invalid[3]; sljit_emit_op_dst(compiler, SLJIT_FAST_ENTER, RETURN_ADDR, 0); /* TMP2 contains the high surrogate. */ -exit_invalid[0] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0xdc00); +exit_invalid[0] = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0x400); exit_invalid[1] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(0)); @@ -5435,9 +5440,10 @@ exit_invalid[2] = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, 0x400); OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP2, 0); OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); +JUMPHERE(exit_invalid[2]); +OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); JUMPHERE(exit_invalid[0]); JUMPHERE(exit_invalid[1]); -JUMPHERE(exit_invalid[2]); OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); OP_SRC(SLJIT_FAST_RETURN, RETURN_ADDR, 0); } @@ -5635,7 +5641,6 @@ struct sljit_jump *start; struct sljit_jump *end = NULL; struct sljit_jump *end2 = NULL; #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 -struct sljit_label *loop; struct sljit_jump *jump; #endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 */ jump_list *newline = NULL; @@ -5741,7 +5746,7 @@ mainloop = LABEL(); /* Increasing the STR_PTR here requires one less jump in the most common case. */ #if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 -if (common->utf && !common->invalid_utf) readuchar = TRUE; +if (common->utf) readuchar = TRUE; #endif /* SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32 */ if (newlinecheck) readuchar = TRUE; @@ -5757,13 +5762,11 @@ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); if (common->invalid_utf) { /* Skip continuation code units. */ - loop = LABEL(); - jump = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); - OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0); - OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0x80); - CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x40, loop); - OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); + jump = CMP(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0xc0); + OP1(SLJIT_MOV, TMP3, 0, STR_PTR, 0); + add_jump(compiler, &common->utfreadchar_invalid, JUMP(SLJIT_FAST_CALL)); + OP2U(SLJIT_SUB | SLJIT_SET_Z, TMP1, 0, SLJIT_IMM, INVALID_UTF_CHAR); + SELECT(SLJIT_EQUAL, STR_PTR, TMP3, 0, STR_PTR); JUMPHERE(jump); } else if (common->utf) @@ -5777,13 +5780,9 @@ else if (common->utf) if (common->invalid_utf) { /* Skip continuation code units. */ - loop = LABEL(); - jump = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0); - OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), 0); - OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); - OP2(SLJIT_SUB, TMP1, 0, TMP1, 0, SLJIT_IMM, 0xdc00); - CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, 0x400, loop); - OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1)); + OP2(SLJIT_SUB, TMP2, 0, TMP1, 0, SLJIT_IMM, 0xd800); + jump = CMP(SLJIT_GREATER_EQUAL, TMP2, 0, SLJIT_IMM, 0xe000 - 0xd800); + add_jump(compiler, &common->utfreadchar_invalid, JUMP(SLJIT_FAST_CALL)); JUMPHERE(jump); } else if (common->utf) @@ -6244,6 +6243,7 @@ while (TRUE) repeat = GET2(cc, 1); if (repeat <= 0) { + repeat = 1; chars_end = chars; continue; } @@ -8390,9 +8390,10 @@ int offset = 0; struct sljit_label *label; struct sljit_jump *zerolength; struct sljit_jump *jump = NULL; +jump_list *match_failed = NULL; PCRE2_SPTR ccbegin = cc; int min = 0, max = 0; -BOOL minimize; +BOOL minimize, exact; PUSH_BACKTRACK(sizeof(ref_iterator_backtrack), cc, NULL); @@ -8415,31 +8416,50 @@ type = cc[1 + IMM2_SIZE]; SLJIT_COMPILE_ASSERT((OP_CRSTAR & 0x1) == 0, crstar_opcode_must_be_even); /* Update ref_update_local_size() when this changes. */ SLJIT_ASSERT(local_start + 2 * SSIZE_OF(sw) <= (int)LOCAL0 + common->locals_size); -minimize = (type & 0x1) != 0; +minimize = FALSE; +exact = FALSE; switch(type) { - case OP_CRSTAR: case OP_CRMINSTAR: + minimize = TRUE; + PCRE2_FALLTHROUGH /* Fall through */ + case OP_CRSTAR: + case OP_CRPOSSTAR: min = 0; max = 0; cc += 1 + IMM2_SIZE + 1; break; - case OP_CRPLUS: + case OP_CRMINPLUS: + minimize = TRUE; + PCRE2_FALLTHROUGH /* Fall through */ + case OP_CRPLUS: + case OP_CRPOSPLUS: min = 1; max = 0; cc += 1 + IMM2_SIZE + 1; break; - case OP_CRQUERY: + case OP_CRMINQUERY: + minimize = TRUE; + PCRE2_FALLTHROUGH /* Fall through */ + case OP_CRQUERY: + case OP_CRPOSQUERY: min = 0; max = 1; cc += 1 + IMM2_SIZE + 1; break; - case OP_CRRANGE: + case OP_CRMINRANGE: + minimize = TRUE; + PCRE2_FALLTHROUGH /* Fall through */ + case OP_CRRANGE: + case OP_CRPOSRANGE: min = GET2(cc, 1 + IMM2_SIZE + 1); max = GET2(cc, 1 + IMM2_SIZE + 1 + IMM2_SIZE); + SLJIT_ASSERT(min > 1 || max > 1); + if (min == max) + exact = TRUE; cc += 1 + IMM2_SIZE + 1 + 2 * IMM2_SIZE; break; default: @@ -8447,6 +8467,86 @@ switch(type) break; } +if (type >= OP_CRPOSSTAR || exact) + { + BACKTRACK_AS(ref_iterator_backtrack)->possessive_or_exact = TRUE; + if (ref) + { + OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset)); + if (min > 0 && !common->unset_backref) + add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(1))); + zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset + 1)); + } + else + { + compile_dnref_search(common, ccbegin, min > 0 ? &backtrack->own_backtracks : NULL); + OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), 0); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw), TMP2, 0); + zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw)); + } + + if (exact) + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_IMM, min); + else if (type != OP_CRPOSSTAR) + { + /* STR_PTR is NULL before reaching min. */ + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, min > 0 ? SLJIT_IMM : STR_PTR, 0); + if (type == OP_CRPOSRANGE) + { + SLJIT_ASSERT(local_start + 3 * SSIZE_OF(sw) <= (int)LOCAL0 + common->locals_size); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + 2 * SSIZE_OF(sw), SLJIT_IMM, 0); + } + } + + label = LABEL(); + if (!ref) + OP1(SLJIT_MOV, TMP2, 0, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw)); + + if (type == OP_CRPOSSTAR) + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, STR_PTR, 0); + + compile_ref_matchingpath(common, ccbegin, exact ? &backtrack->own_backtracks : &match_failed, FALSE, FALSE); + + if (type == OP_CRPOSSTAR) + JUMPTO(SLJIT_JUMP, label); + else if (type == OP_CRPOSPLUS || type == OP_CRPOSQUERY) + { + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, STR_PTR, 0); + if (type == OP_CRPOSPLUS) + JUMPTO(SLJIT_JUMP, label); + } + else if (exact) + { + OP2(SLJIT_SUB | SLJIT_SET_Z, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_IMM, 1); + JUMPTO(SLJIT_NOT_ZERO, label); + } + else + { + OP2(SLJIT_ADD, TMP1, 0, SLJIT_MEM1(SLJIT_SP), local_start + 2 * SSIZE_OF(sw), SLJIT_IMM, 1); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + 2 * SSIZE_OF(sw), TMP1, 0); + if (min > 0) + CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, min, label); + OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, STR_PTR, 0); + if (max == 0) + JUMPTO(SLJIT_JUMP, label); + else + CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, max, label); + } + + if (!exact) + { + set_jumps(match_failed, LABEL()); + OP1(SLJIT_MOV, STR_PTR, 0, SLJIT_MEM1(SLJIT_SP), local_start); + + if (type != OP_CRPOSSTAR) + add_jump(compiler, &backtrack->own_backtracks, CMP(SLJIT_EQUAL, STR_PTR, 0, SLJIT_IMM, 0)); + } + + JUMPHERE(zerolength); + count_match(common); + return cc; + } + if (!minimize) { if (min == 0) @@ -8458,6 +8558,7 @@ if (!minimize) OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(1), SLJIT_IMM, 0); /* Temporary release of STR_PTR. */ OP2(SLJIT_ADD, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); + /* Handles both invalid and empty cases. Since the minimum repeat, is zero the invalid case is basically the same as an empty case. */ if (ref) @@ -8469,6 +8570,7 @@ if (!minimize) OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start + SSIZE_OF(sw), TMP2, 0); zerolength = CMP(SLJIT_EQUAL, TMP1, 0, SLJIT_MEM1(TMP2), sizeof(sljit_sw)); } + /* Restore if not zero length. */ OP2(SLJIT_SUB, STACK_TOP, 0, STACK_TOP, 0, SLJIT_IMM, sizeof(sljit_sw)); } @@ -8477,6 +8579,7 @@ if (!minimize) allocate_stack(common, 1); if (ref) OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), OVECTOR(offset)); + OP1(SLJIT_MOV, SLJIT_MEM1(STACK_TOP), STACK(0), SLJIT_IMM, 0); if (ref) @@ -8504,11 +8607,11 @@ if (!minimize) if (min > 1 || max > 1) { - OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), local_start); - OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 1); + OP2(SLJIT_ADD, TMP1, 0, SLJIT_MEM1(SLJIT_SP), local_start, SLJIT_IMM, 1); OP1(SLJIT_MOV, SLJIT_MEM1(SLJIT_SP), local_start, TMP1, 0); if (min > 1) CMPTO(SLJIT_LESS, TMP1, 0, SLJIT_IMM, min, label); + if (max > 1) { jump = CMP(SLJIT_GREATER_EQUAL, TMP1, 0, SLJIT_IMM, max); @@ -12139,6 +12242,12 @@ PCRE2_UCHAR type; type = cc[PRIV(OP_lengths)[*cc]]; +if (CURRENT_AS(ref_iterator_backtrack)->possessive_or_exact) + { + set_jumps(current->own_backtracks, LABEL()); + return; + } + if ((type & 0x1) == 0) { /* Maximize case. */ @@ -12405,6 +12514,8 @@ else if (SLJIT_UNLIKELY(opcode == OP_ASSERT_SCS)) if (common->restore_end_ptr == 0) common->restore_end_ptr = private_data_ptr + sizeof(sljit_sw); } +else if (SLJIT_UNLIKELY(opcode == OP_ASSERTBACK_NA) && PRIVATE_DATA(ccbegin + 1)) + OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), private_data_ptr); if (SLJIT_UNLIKELY(opcode == OP_ONCE)) { diff --git a/vendor/core/vendor/pcre2/src/pcre2_jit_match_inc.h b/vendor/core/vendor/pcre2/src/pcre2_jit_match_inc.h index 32d4c8a5e..ba210007e 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_jit_match_inc.h +++ b/vendor/core/vendor/pcre2/src/pcre2_jit_match_inc.h @@ -117,6 +117,7 @@ jit_arguments arguments; int rc; int index = 0; +/* The same check is performed by jit_check_exec(). */ if ((options & PCRE2_PARTIAL_HARD) != 0) index = 2; else if ((options & PCRE2_PARTIAL_SOFT) != 0) @@ -125,6 +126,16 @@ else if ((options & PCRE2_PARTIAL_SOFT) != 0) if (functions == NULL || functions->executable_funcs[index] == NULL) return match_data->rc = PCRE2_ERROR_JIT_BADOPTION; +/* If the match data block was previously used with PCRE2_COPY_MATCHED_SUBJECT, +free the memory that was obtained. */ + +if ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) != 0) + { + match_data->memctl.free((void *)match_data->subject, + match_data->memctl.memory_data); + match_data->flags &= ~PCRE2_MD_COPIED_SUBJECT; + } + /* Sanity checks should be handled by pcre2_match. */ arguments.str = subject + start_offset; arguments.begin = subject; diff --git a/vendor/core/vendor/pcre2/src/pcre2_jit_misc_inc.h b/vendor/core/vendor/pcre2/src/pcre2_jit_misc_inc.h index 0225fc6ba..16c230e9b 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_jit_misc_inc.h +++ b/vendor/core/vendor/pcre2/src/pcre2_jit_misc_inc.h @@ -200,17 +200,28 @@ if (jit_stack != NULL) /************************************************* -* Get target CPU type * +* Checks function compilation * *************************************************/ -const char* -PRIV(jit_get_target)(void) +BOOL +PRIV(jit_check_exec)(void *executable_jit, uint32_t options) { #ifndef SUPPORT_JIT -return "JIT is not supported"; +(void)executable_jit; +(void)options; +return FALSE; #else /* SUPPORT_JIT */ -return sljit_get_platform_name(); -#endif /* SUPPORT_JIT */ +/* The same check is performed at the beginning of pcre2_jit_match(). */ +executable_functions *functions = (executable_functions *)executable_jit; +int index = 0; + +if ((options & PCRE2_PARTIAL_HARD) != 0) + index = 2; +else if ((options & PCRE2_PARTIAL_SOFT) != 0) + index = 1; + +return functions->executable_funcs[index] != NULL; +#endif } @@ -231,4 +242,19 @@ return executable_sizes[0] + executable_sizes[1] + executable_sizes[2]; #endif } +/************************************************* +* Get target CPU type * +*************************************************/ + +const char* +PRIV(jit_get_target)(void) +{ +#ifndef SUPPORT_JIT +return "JIT is not supported"; +#else /* SUPPORT_JIT */ +return sljit_get_platform_name(); +#endif /* SUPPORT_JIT */ +} + + /* End of pcre2_jit_misc_inc.h */ diff --git a/vendor/core/vendor/pcre2/src/pcre2_match.c b/vendor/core/vendor/pcre2/src/pcre2_match.c index d5574d721..a5a8421f7 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_match.c +++ b/vendor/core/vendor/pcre2/src/pcre2_match.c @@ -169,9 +169,9 @@ enum { RM200=200, RM201, RM202, RM203, RM204, RM205, RM206, RM207, /* Define short names for general fields in the current backtrack frame, which is always pointed to by the F variable. Occasional references to fields in other frames are written out explicitly. There are also some fields in the -current frame whose names start with "temp" that are used for short-term, -localised backtracking memory. These are #defined with Lxxx names at the point -of use and undefined afterwards. */ +current frame that are used for short-term, localised backtracking memory. +These are members of the fields union and #defined with Lxxx names at the +point of use and undefined afterwards. */ #define Fback_frame F->back_frame #define Fcapture_last F->capture_last @@ -180,12 +180,10 @@ of use and undefined afterwards. */ #define Feptr F->eptr #define Fgroup_frame_type F->group_frame_type #define Flast_group_offset F->last_group_offset -#define Flength F->length #define Fmark F->mark #define Frdepth F->rdepth #define Fstart_match F->start_match #define Foffset_top F->offset_top -#define Foccu F->occu #define Fop F->op #define Fovector F->ovector #define Freturn_id F->return_id @@ -457,8 +455,8 @@ if (caseless) { uint32_t cc, cp; if (eptr >= mb->end_subject) return 1; /* Partial match */ - cc = UCHAR21TEST(eptr); - cp = UCHAR21TEST(p); + cc = *eptr; + cp = *p; if (TABLE_GET(cp, mb->lcc, cp) != TABLE_GET(cc, mb->lcc, cc)) return -1; /* No match */ p++; @@ -478,7 +476,7 @@ else for (; length > 0; length--) { if (eptr >= mb->end_subject) return 1; /* Partial match */ - if (UCHAR21INCTEST(p) != UCHAR21INCTEST(eptr)) return -1; /* No match */ + if (*p++ != *eptr++) return -1; /* No match */ } } @@ -697,7 +695,7 @@ heapframe *frames_top; /* End of frames vector */ heapframe *assert_accept_frame = NULL; /* For passing back a frame with captures */ PCRE2_SIZE frame_copy_size; /* Amount to copy when creating a new frame */ -/* Local variables that do not need to be preserved over calls to RRMATCH(). */ +/* Local variables that do not need to be preserved over calls to RMATCH(). */ PCRE2_SPTR branch_end = NULL; PCRE2_SPTR branch_start; @@ -816,11 +814,11 @@ if (group_frame_type != 0) break; case GF_NOCAPTURE: - fprintf(stderr, "nocapture op=%d", GF_DATAMASK(group_frame_type)); + fprintf(stderr, "nocapture op=%d", Fop); break; case GF_CONDASSERT: - fprintf(stderr, "condassert op=%d", GF_DATAMASK(group_frame_type)); + fprintf(stderr, "condassert op=%d", Fop); break; case GF_RECURSE: @@ -1066,7 +1064,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr == mb->end_subject - 1 && NLBLOCK->nltype == NLTYPE_FIXED && NLBLOCK->nllen == 2 && - UCHAR21TEST(Feptr) == NLBLOCK->nl[0]) + *Feptr == NLBLOCK->nl[0]) { mb->hitend = TRUE; if (mb->partial > 1) return PCRE2_ERROR_PARTIAL; @@ -1112,17 +1110,17 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, #ifdef SUPPORT_UNICODE if (utf) { - Flength = 1; + length = 1; Fecode++; - GETCHARLEN(fc, Fecode, Flength); - if (Flength > (PCRE2_SIZE)(mb->end_subject - Feptr)) + GETCHARLEN(fc, Fecode, length); + if (length > (PCRE2_SIZE)(mb->end_subject - Feptr)) { CHECK_PARTIAL(); /* Not SCHECK_PARTIAL() */ RRETURN(MATCH_NOMATCH); } - for (; Flength > 0; Flength--) + for (; length > 0; length--) { - if (*Fecode++ != UCHAR21INC(Feptr)) RRETURN(MATCH_NOMATCH); + if (*Fecode++ != *Feptr++) RRETURN(MATCH_NOMATCH); } } else @@ -1157,9 +1155,9 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, #ifdef SUPPORT_UNICODE if (utf) { - Flength = 1; + length = 1; Fecode++; - GETCHARLEN(fc, Fecode, Flength); + GETCHARLEN(fc, Fecode, length); /* If the pattern character's value is < 128, we know that its other case (if any) is also < 128 (and therefore only one code unit long in all @@ -1168,7 +1166,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, if (fc < 128) { - uint32_t cc = UCHAR21(Feptr); + uint32_t cc = *Feptr; if (mb->lcc[fc] != TABLE_GET(cc, mb->lcc, cc)) RRETURN(MATCH_NOMATCH); Fecode++; Feptr++; @@ -1176,14 +1174,14 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, /* Otherwise we must pick up the subject character and use Unicode property support to test its other case. Note that we cannot use the - value of "Flength" to check for sufficient bytes left, because the other + value of "length" to check for sufficient bytes left, because the other case of the character may have more or fewer code units. */ else { uint32_t dc; GETCHARINC(dc, Feptr); - Fecode += Flength; + Fecode += length; if (dc != fc && dc != UCD_OTHERCASE(fc)) RRETURN(MATCH_NOMATCH); } } @@ -1193,7 +1191,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, else if (ucp) { - uint32_t cc = UCHAR21(Feptr); + uint32_t cc = *Feptr; fc = Fecode[1]; if (fc < 128) { @@ -1257,7 +1255,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, else if (ucp) { uint32_t ch; - fc = UCHAR21INC(Feptr); + fc = *Feptr++; ch = Fecode[1]; Fecode += 2; @@ -1282,7 +1280,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { uint32_t ch = Fecode[1]; - fc = UCHAR21INC(Feptr); + fc = *Feptr++; if (ch == fc || (Fop == OP_NOTI && TABLE_GET(ch, mb->fcc, ch) == fc)) RRETURN(MATCH_NOMATCH); Fecode += 2; @@ -1293,13 +1291,15 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, /* ===================================================================== */ /* Match a single character repeatedly. */ -#define Loclength F->temp_size -#define Lstart_eptr F->temp_sptr[0] -#define Lcharptr F->temp_sptr[1] -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Lc F->temp_32[2] -#define Loc F->temp_32[3] +#define Llength F->byte1 +#define Loclength F->byte2 +#define Lstart_eptr F->fields.char_repeat.start_eptr +#define Lcharptr F->fields.char_repeat.charptr +#define Lmin F->fields.char_repeat.min +#define Lmax F->fields.char_repeat.max +#define Lc F->fields.char_repeat.c +#define Loc F->fields.char_repeat.oc.oc +#define Loccu F->fields.char_repeat.oc.occu case OP_EXACT: case OP_EXACTI: @@ -1393,29 +1393,30 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, #ifdef SUPPORT_UNICODE if (utf) { - Flength = 1; + length = 1; Lcharptr = Fecode; - GETCHARLEN(fc, Fecode, Flength); - Fecode += Flength; + GETCHARLEN(fc, Fecode, length); + Fecode += length; + Llength = (uint8_t)length; /* Handle multi-code-unit character matching, caseful and caseless. */ - if (Flength > 1) + if (length > 1) { uint32_t othercase; if (Fop >= OP_STARI && /* Caseless */ (othercase = UCD_OTHERCASE(fc)) != fc) - Loclength = PRIV(ord2utf)(othercase, Foccu); + Loclength = (uint8_t)PRIV(ord2utf)(othercase, Loccu); else Loclength = 0; for (i = 1; i <= Lmin; i++) { - if (Feptr <= mb->end_subject - Flength && - memcmp(Feptr, Lcharptr, CU2BYTES(Flength)) == 0) Feptr += Flength; + if (Feptr <= mb->end_subject - length && + memcmp(Feptr, Lcharptr, CU2BYTES(length)) == 0) Feptr += length; else if (Loclength > 0 && Feptr <= mb->end_subject - Loclength && - memcmp(Feptr, Foccu, CU2BYTES(Loclength)) == 0) + memcmp(Feptr, Loccu, CU2BYTES(Loclength)) == 0) Feptr += Loclength; else { @@ -1433,11 +1434,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, RMATCH(Fecode, RM202); if (rrc != MATCH_NOMATCH) RRETURN(rrc); if (Lmin++ >= Lmax) RRETURN(MATCH_NOMATCH); - if (Feptr <= mb->end_subject - Flength && - memcmp(Feptr, Lcharptr, CU2BYTES(Flength)) == 0) Feptr += Flength; + if (Feptr <= mb->end_subject - Llength && + memcmp(Feptr, Lcharptr, CU2BYTES(Llength)) == 0) Feptr += Llength; else if (Loclength > 0 && Feptr <= mb->end_subject - Loclength && - memcmp(Feptr, Foccu, CU2BYTES(Loclength)) == 0) + memcmp(Feptr, Loccu, CU2BYTES(Loclength)) == 0) Feptr += Loclength; else { @@ -1447,18 +1448,17 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, } PCRE2_UNREACHABLE(); /* Control never reaches here */ } - else /* Maximize */ { Lstart_eptr = Feptr; for (i = Lmin; i < Lmax; i++) { - if (Feptr <= mb->end_subject - Flength && - memcmp(Feptr, Lcharptr, CU2BYTES(Flength)) == 0) - Feptr += Flength; + if (Feptr <= mb->end_subject - Llength && + memcmp(Feptr, Lcharptr, CU2BYTES(Llength)) == 0) + Feptr += Llength; else if (Loclength > 0 && Feptr <= mb->end_subject - Loclength && - memcmp(Feptr, Foccu, CU2BYTES(Loclength)) == 0) + memcmp(Feptr, Loccu, CU2BYTES(Loclength)) == 0) Feptr += Loclength; else { @@ -1523,7 +1523,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21TEST(Feptr); + cc = *Feptr; if (Lc != cc && Loc != cc) RRETURN(MATCH_NOMATCH); Feptr++; } @@ -1542,7 +1542,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21TEST(Feptr); + cc = *Feptr; if (Lc != cc && Loc != cc) RRETURN(MATCH_NOMATCH); Feptr++; } @@ -1560,7 +1560,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); break; } - cc = UCHAR21TEST(Feptr); + cc = *Feptr; if (Lc != cc && Loc != cc) break; Feptr++; } @@ -1585,7 +1585,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - if (Lc != UCHAR21INCTEST(Feptr)) RRETURN(MATCH_NOMATCH); + if (Lc != *Feptr++) RRETURN(MATCH_NOMATCH); } if (Lmin == Lmax) continue; @@ -1602,7 +1602,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - if (Lc != UCHAR21INCTEST(Feptr)) RRETURN(MATCH_NOMATCH); + if (Lc != *Feptr++) RRETURN(MATCH_NOMATCH); } PCRE2_UNREACHABLE(); /* Control never reaches here */ } @@ -1617,7 +1617,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, break; } - if (Lc != UCHAR21TEST(Feptr)) break; + if (Lc != *Feptr) break; Feptr++; } @@ -1632,6 +1632,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, } break; +#undef Llength #undef Loclength #undef Lstart_eptr #undef Lcharptr @@ -1639,6 +1640,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, #undef Lmax #undef Lc #undef Loc +#undef Loccu /* ===================================================================== */ @@ -1649,11 +1651,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, very much to the time taken, but character matching *is* what this is all about... */ -#define Lstart_eptr F->temp_sptr[0] -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Lc F->temp_32[2] -#define Loc F->temp_32[3] +#define Lstart_eptr F->fields.charnot_repeat.start_eptr +#define Lmin F->fields.charnot_repeat.min +#define Lmax F->fields.charnot_repeat.max +#define Lc F->fields.charnot_repeat.c +#define Loc F->fields.charnot_repeat.oc case OP_NOTEXACT: case OP_NOTEXACTI: @@ -2040,11 +2042,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, OP_CLASS and OP_NCLASS occurs when a data character outside the range is encountered. */ -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Lstart_eptr F->temp_sptr[0] -#define Lbyte_map_address F->temp_sptr[1] +#define Lbyte_map_address F->fields.class_repeat.byte_map_address #define Lbyte_map ((const unsigned char *)Lbyte_map_address) +#define Lstart_eptr F->fields.class_repeat.start_eptr +#define Lmin F->fields.class_repeat.min +#define Lmax F->fields.class_repeat.max case OP_NCLASS: case OP_CLASS: @@ -2283,10 +2285,10 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, 32-bit libraries, codepoints greater than 255 may be encountered even when UTF is not supported. */ -#define Lstart_eptr F->temp_sptr[0] -#define Lxclass_data F->temp_sptr[1] -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] +#define Lstart_eptr F->fields.xclass_repeat.start_eptr +#define Lxclass_data F->fields.xclass_repeat.xclass_data +#define Lmin F->fields.xclass_repeat.min +#define Lmax F->fields.xclass_repeat.max #ifdef SUPPORT_WIDE_CHARS case OP_XCLASS: @@ -2424,11 +2426,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, there is complex nesting or logical operations within the character class. */ -#define Lstart_eptr F->temp_sptr[0] -#define Leclass_data F->temp_sptr[1] -#define Leclass_len F->temp_size -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] +#define Lstart_eptr F->fields.eclass_repeat.start_eptr +#define Leclass_data F->fields.eclass_repeat.eclass_data +#define Leclass_len F->fields.eclass_repeat.eclass_len +#define Lmin F->fields.eclass_repeat.min +#define Lmax F->fields.eclass_repeat.max #ifdef SUPPORT_WIDE_CHARS case OP_ECLASS: @@ -2657,7 +2659,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { SCHECK_PARTIAL(); } - else if (UCHAR21TEST(Feptr) == CHAR_LF) Feptr++; + else if (*Feptr == CHAR_LF) Feptr++; break; case CHAR_LF: @@ -2908,11 +2910,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, does not need to be in a stack frame as it is not used within an RMATCH() loop. */ -#define Lstart_eptr F->temp_sptr[0] -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Lctype F->temp_32[2] -#define Lpropvalue F->temp_32[3] +#define Lstart_eptr F->fields.type_repeat.start_eptr +#define Lmin F->fields.type_repeat.min +#define Lmax F->fields.type_repeat.max +#define Lctype F->fields.type_repeat.ctype +#define Lpropvalue F->fields.type_repeat.propvalue case OP_TYPEEXACT: Lmin = Lmax = GET2(Fecode, 1); @@ -3271,7 +3273,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr + 1 >= mb->end_subject && NLBLOCK->nltype == NLTYPE_FIXED && NLBLOCK->nllen == 2 && - UCHAR21(Feptr) == NLBLOCK->nl[0]) + *Feptr == NLBLOCK->nl[0]) { mb->hitend = TRUE; if (mb->partial > 1) return PCRE2_ERROR_PARTIAL; @@ -3313,7 +3315,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, default: RRETURN(MATCH_NOMATCH); case CHAR_CR: - if (Feptr < mb->end_subject && UCHAR21(Feptr) == CHAR_LF) Feptr++; + if (Feptr < mb->end_subject && *Feptr == CHAR_LF) Feptr++; break; case CHAR_LF: @@ -3423,7 +3425,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21(Feptr); + cc = *Feptr; if (cc >= 128 || (mb->ctypes[cc] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH); Feptr++; @@ -3440,7 +3442,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21(Feptr); + cc = *Feptr; if (cc < 128 && (mb->ctypes[cc] & ctype_space) != 0) RRETURN(MATCH_NOMATCH); Feptr++; @@ -3457,7 +3459,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21(Feptr); + cc = *Feptr; if (cc >= 128 || (mb->ctypes[cc] & ctype_space) == 0) RRETURN(MATCH_NOMATCH); Feptr++; @@ -3474,7 +3476,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21(Feptr); + cc = *Feptr; if (cc < 128 && (mb->ctypes[cc] & ctype_word) != 0) RRETURN(MATCH_NOMATCH); Feptr++; @@ -3491,7 +3493,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, SCHECK_PARTIAL(); RRETURN(MATCH_NOMATCH); } - cc = UCHAR21(Feptr); + cc = *Feptr; if (cc >= 128 || (mb->ctypes[cc] & ctype_word) == 0) RRETURN(MATCH_NOMATCH); Feptr++; @@ -4119,7 +4121,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, default: RRETURN(MATCH_NOMATCH); case CHAR_CR: - if (Feptr < mb->end_subject && UCHAR21(Feptr) == CHAR_LF) Feptr++; + if (Feptr < mb->end_subject && *Feptr == CHAR_LF) Feptr++; break; case CHAR_LF: @@ -4732,7 +4734,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr + 1 >= mb->end_subject && NLBLOCK->nltype == NLTYPE_FIXED && NLBLOCK->nllen == 2 && - UCHAR21(Feptr) == NLBLOCK->nl[0]) + *Feptr == NLBLOCK->nl[0]) { mb->hitend = TRUE; if (mb->partial > 1) return PCRE2_ERROR_PARTIAL; @@ -4788,7 +4790,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, if (fc == CHAR_CR) { if (++Feptr >= mb->end_subject) break; - if (UCHAR21(Feptr) == CHAR_LF) Feptr++; + if (*Feptr == CHAR_LF) Feptr++; } else { @@ -4960,7 +4962,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr--; BACKCHAR(Feptr); if (Lctype == OP_ANYNL && Feptr > Lstart_eptr && - UCHAR21(Feptr) == CHAR_NL && UCHAR21(Feptr - 1) == CHAR_CR) + *Feptr == CHAR_NL && Feptr[-1] == CHAR_CR) Feptr--; } } @@ -5236,17 +5238,18 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, OP_DNREFI are used. In this case we must scan the list of groups to which the name refers, and use the first one that is set. */ -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Lcaseless F->temp_32[2] -#define Lcaseopts F->temp_32[3] -#define Lstart F->temp_sptr[0] -#define Loffset F->temp_size +#define Lstart F->fields.ref_repeat.start +#define Loffset F->fields.ref_repeat.offset +#define Llength F->fields.ref_repeat.length +#define Lmin F->fields.ref_repeat.min +#define Lmax F->fields.ref_repeat.max +#define Lcaseless F->byte1 +#define Lcaseopts F->byte2 case OP_DNREF: case OP_DNREFI: - Lcaseless = (Fop == OP_DNREFI); - Lcaseopts = (Fop == OP_DNREFI)? Fecode[1 + 2*IMM2_SIZE] : 0; + Lcaseless = (uint8_t)(Fop == OP_DNREFI); + Lcaseopts = (uint8_t)((Fop == OP_DNREFI)? Fecode[1 + 2*IMM2_SIZE] : 0); { int count = GET2(Fecode, 1+IMM2_SIZE); PCRE2_SPTR slot = mb->name_table + GET2(Fecode, 1) * mb->name_entry_size; @@ -5281,6 +5284,9 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, case OP_CRMINPLUS: case OP_CRQUERY: case OP_CRMINQUERY: + case OP_CRPOSSTAR: + case OP_CRPOSPLUS: + case OP_CRPOSQUERY: fc = *Fecode++ - OP_CRSTAR; Lmin = rep_min[fc]; Lmax = rep_max[fc]; @@ -5289,6 +5295,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, case OP_CRRANGE: case OP_CRMINRANGE: + case OP_CRPOSRANGE: Lmin = GET2(Fecode, 1); Lmax = GET2(Fecode, 1 + IMM2_SIZE); reptype = rep_typ[*Fecode - OP_CRSTAR]; @@ -5376,7 +5383,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { BOOL samelengths = TRUE; Lstart = Feptr; /* Starting position */ - Flength = Fovector[Loffset+1] - Fovector[Loffset]; + Llength = Fovector[Loffset+1] - Fovector[Loffset]; for (i = Lmin; i < Lmax; i++) { @@ -5396,10 +5403,13 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, break; } - if (slength != Flength) samelengths = FALSE; + if (slength != Llength) samelengths = FALSE; Feptr += slength; } + /* No recursion if the repeat type is possessive. */ + if (reptype == REPTYPE_POS) break; + /* If the length matched for each repetition is the same as the length of the captured group, we can easily work backwards. This is the normal case. However, in caseless UTF-8 mode there are pairs of case-equivalent @@ -5412,7 +5422,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { RMATCH(Fecode, RM21); if (rrc != MATCH_NOMATCH) RRETURN(rrc); - Feptr -= Flength; + Feptr -= Llength; } } @@ -5443,12 +5453,13 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, PCRE2_DEBUG_UNREACHABLE(); /* Control should never reach here */ -#undef Lcaseless -#undef Lmin -#undef Lmax #undef Lstart #undef Loffset - +#undef Llength +#undef Lmin +#undef Lmax +#undef Lcaseless +#undef Lcaseopts /* ========================================================================= */ @@ -5475,30 +5486,37 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, number of copies, with the optional ones preceded by BRAZERO or BRAMINZERO. Possessive groups with possible zero repeats are preceded by BRAPOSZERO. */ -#define Lnext_ecode F->temp_sptr[0] - case OP_BRAZERO: - Lnext_ecode = Fecode + 1; - RMATCH(Lnext_ecode, RM9); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - do Lnext_ecode += GET(Lnext_ecode, 1); while (*Lnext_ecode == OP_ALT); - Fecode = Lnext_ecode + 1 + LINK_SIZE; + { + PCRE2_SPTR next_ecode; + + Fecode++; + RMATCH(Fecode, RM9); + if (rrc != MATCH_NOMATCH) RRETURN(rrc); + next_ecode = Fecode; + do next_ecode += GET(next_ecode, 1); while (*next_ecode == OP_ALT); + Fecode = next_ecode + 1 + LINK_SIZE; + } break; case OP_BRAMINZERO: - Lnext_ecode = Fecode + 1; - do Lnext_ecode += GET(Lnext_ecode, 1); while (*Lnext_ecode == OP_ALT); - RMATCH(Lnext_ecode + 1 + LINK_SIZE, RM10); - if (rrc != MATCH_NOMATCH) RRETURN(rrc); - Fecode++; - break; + { + PCRE2_SPTR next_ecode; -#undef Lnext_ecode + Fecode++; + next_ecode = Fecode; + do next_ecode += GET(next_ecode, 1); while (*next_ecode == OP_ALT); + RMATCH(next_ecode + 1 + LINK_SIZE, RM10); + if (rrc != MATCH_NOMATCH) RRETURN(rrc); + } + break; case OP_SKIPZERO: - Fecode++; - do Fecode += GET(Fecode,1); while (*Fecode == OP_ALT); - Fecode += 1 + LINK_SIZE; + { + PCRE2_SPTR next_ecode = Fecode + 1; + do next_ecode += GET(next_ecode, 1); while (*next_ecode == OP_ALT); + Fecode = next_ecode + 1 + LINK_SIZE; + } break; @@ -5507,11 +5525,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, brackets will always be OP_KETRPOS, which returns MATCH_KETRPOS without going further in the pattern. */ -#define Lframe_type F->temp_32[0] -#define Lmatched_once F->temp_32[1] -#define Lzero_allowed F->temp_32[2] -#define Lstart_eptr F->temp_sptr[0] -#define Lstart_group F->temp_sptr[1] +#define Lstart_eptr F->fields.op_brapos.start_eptr +#define Lstart_group F->fields.op_brapos.start_group +#define Lframe_type F->fields.op_brapos.frame_type +#define Lmatched_once F->byte1 +#define Lzero_allowed F->byte2 case OP_BRAPOSZERO: Lzero_allowed = TRUE; /* Zero repeat is allowed */ @@ -5583,11 +5601,11 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, RRETURN(MATCH_NOMATCH); -#undef Lmatched_once -#undef Lzero_allowed -#undef Lframe_type #undef Lstart_eptr #undef Lstart_group +#undef Lframe_type +#undef Lmatched_once +#undef Lzero_allowed /* ===================================================================== */ @@ -5599,8 +5617,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, however, because that would make handling assertions and once-only brackets messier when there is nothing to go back to. */ -#define Lframe_type F->temp_32[0] /* Set for all that use GROUPLOOP */ -#define Lnext_branch F->temp_sptr[0] /* Used only in OP_BRA handling */ +#define Lframe_type F->fields.op_bra.frame_type case OP_BRA: if (mb->hasthen || Frdepth == 0) @@ -5611,24 +5628,31 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, for (;;) { - Lnext_branch = Fecode + GET(Fecode, 1); - if (*Lnext_branch != OP_ALT) break; + PCRE2_SPTR current_branch = Fecode; + PCRE2_SPTR next_branch = current_branch + GET(current_branch, 1); + + if (*next_branch != OP_ALT) break; /* This is never the final branch. We do not need to test for MATCH_THEN here because this code is not used when there is a THEN in the pattern. */ - RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM1); + Fecode = next_branch; + PCRE2_ASSERT((*current_branch == OP_BRA || *current_branch == OP_ALT) && + PRIV(OP_lengths)[OP_BRA] == 1 + LINK_SIZE && + PRIV(OP_lengths)[OP_ALT] == 1 + LINK_SIZE); + + RMATCH(current_branch + 1 + LINK_SIZE, RM1); if (rrc != MATCH_NOMATCH) RRETURN(rrc); - Fecode = Lnext_branch; } /* Hit the start of the final branch. Continue at this level. */ - Fecode += PRIV(OP_lengths)[*Fecode]; + PCRE2_ASSERT((*Fecode == OP_BRA || *Fecode == OP_ALT) && + PRIV(OP_lengths)[OP_BRA] == 1 + LINK_SIZE && + PRIV(OP_lengths)[OP_ALT] == 1 + LINK_SIZE); + Fecode += 1 + LINK_SIZE; break; -#undef Lnext_branch - /* ===================================================================== */ /* Handle a capturing bracket, other than those that are possessive with an @@ -5647,7 +5671,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, case OP_ONCE: case OP_SCRIPT_RUN: case OP_SBRA: - Lframe_type = GF_NOCAPTURE | Fop; + Lframe_type = GF_NOCAPTURE; GROUPLOOP: for (;;) @@ -5677,8 +5701,8 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, subpatterns. For a whole-pattern recursion, we have to infer the number zero. */ -#define Lframe_type F->temp_32[0] -#define Lstart_branch F->temp_sptr[0] +#define Lstart_branch F->fields.op_recurse.start_branch +#define Lframe_type F->fields.op_recurse.frame_type case OP_RECURSE: bracode = mb->start_code + GET(Fecode, 1); @@ -5752,8 +5776,8 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, } PCRE2_UNREACHABLE(); /* Control never reaches here */ -#undef Lframe_type #undef Lstart_branch +#undef Lframe_type /* ===================================================================== */ @@ -5762,16 +5786,13 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, treated as NOMATCH. (*ACCEPT) is treated as successful assertion, with its captures and mark retained. Any other return is an error. */ -#define Lframe_type F->temp_32[0] - case OP_ASSERT: case OP_ASSERTBACK: case OP_ASSERT_NA: case OP_ASSERTBACK_NA: - Lframe_type = GF_NOCAPTURE | Fop; for (;;) { - group_frame_type = Lframe_type; + group_frame_type = GF_NOCAPTURE; RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM3); if (rrc == MATCH_ACCEPT) { @@ -5791,22 +5812,16 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Fecode += 1 + LINK_SIZE; break; -#undef Lframe_type - /* ===================================================================== */ /* Handle negative assertions. Loop for each non-matching branch as for positive assertions. */ -#define Lframe_type F->temp_32[0] - case OP_ASSERT_NOT: case OP_ASSERTBACK_NOT: - Lframe_type = GF_NOCAPTURE | Fop; - for (;;) { - group_frame_type = Lframe_type; + group_frame_type = GF_NOCAPTURE; RMATCH(Fecode + PRIV(OP_lengths)[*Fecode], RM4); switch(rrc) { @@ -5839,22 +5854,20 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Fecode += 1 + LINK_SIZE; break; -#undef Lframe_type /* ===================================================================== */ /* Handle scan substring operation. */ -#define Lframe_type F->temp_32[0] -#define Lextra_size F->temp_32[1] -#define Lsaved_moptions F->temp_32[2] -#define Lsaved_end_subject F->temp_sptr[0] -#define Lsaved_eptr F->temp_sptr[1] -#define Ltrue_end_extra F->temp_size +#define Lsaved_end_subject F->fields.op_assert_scs.saved_end_subject +#define Lsaved_eptr F->fields.op_assert_scs.saved_eptr +#define Ltrue_end_extra F->fields.op_assert_scs.true_end_extra +#define Lextra_size F->fields.op_assert_scs.extra_size +#define Lsaved_moptions F->fields.op_assert_scs.saved_moptions case OP_ASSERT_SCS: + length = 0; { PCRE2_SPTR ecode = Fecode + 1 + LINK_SIZE; - uint32_t extra_size = 0; int count; PCRE2_SPTR slot; @@ -5866,7 +5879,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { if (*ecode == OP_CREF) { - extra_size += 1+IMM2_SIZE; + length += 1+IMM2_SIZE; offset = (GET2(ecode, 1) << 1) - 2; ecode += 1+IMM2_SIZE; if (offset < Foffset_top && Fovector[offset] != PCRE2_UNSET) @@ -5878,7 +5891,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, count = GET2(ecode, 1 + IMM2_SIZE); slot = mb->name_table + GET2(ecode, 1) * mb->name_entry_size; - extra_size += 1+2*IMM2_SIZE; + length += 1+2*IMM2_SIZE; ecode += 1+2*IMM2_SIZE; while (count > 0) @@ -5898,18 +5911,16 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, { if (*ecode == OP_CREF) { - extra_size += 1+IMM2_SIZE; + length += 1+IMM2_SIZE; ecode += 1+IMM2_SIZE; } else if (*ecode == OP_DNCREF) { - extra_size += 1+2*IMM2_SIZE; + length += 1+2*IMM2_SIZE; ecode += 1+2*IMM2_SIZE; } else break; } - - Lextra_size = extra_size; } Lsaved_end_subject = mb->end_subject; @@ -5922,11 +5933,10 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, mb->start_subject + Fovector[offset + 1]; mb->moptions &= ~PCRE2_NOTEOL; - Lframe_type = GF_NOCAPTURE | Fop; for (;;) { - group_frame_type = Lframe_type; - RMATCH(Fecode + 1 + LINK_SIZE + Lextra_size, RM38); + group_frame_type = GF_NOCAPTURE; + RMATCH(Fecode + 1 + LINK_SIZE + length, RM38); if (rrc == MATCH_ACCEPT) { memcpy(Fovector, @@ -5956,7 +5966,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, mb->moptions = Lsaved_moptions; RRETURN(MATCH_NOMATCH); } - Lextra_size = 0; + length = 0; } do Fecode += GET(Fecode, 1); while (*Fecode == OP_ALT); @@ -5964,13 +5974,13 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr = Lsaved_eptr; break; -#undef Lframe_type -#undef Lextra_size #undef Lsaved_end_subject #undef Lsaved_eptr #undef Ltrue_end_extra +#undef Lextra_size #undef Lsave_moptions + /* ===================================================================== */ /* The callout item calls an external function, if one is provided, passing details of the match so far. This is mainly for debugging, though the @@ -5991,18 +6001,22 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, past the end of the item if there is only one branch, but that's exactly what we want. */ +#define Lstart_branch F->fields.op_cond.start_branch +#define Llength F->fields.op_cond.length +#define Lpositive F->byte1 + case OP_COND: case OP_SCOND: - /* The variable Flength will be added to Fecode when the condition is + /* The variable Llength will be added to Fecode when the condition is false, to get to the second branch. Setting it to the offset to the ALT or KET, then incrementing Fecode achieves this effect. However, if the second branch is non-existent, we must point to the KET so that the end of the group is correctly processed. We now have Fecode pointing to the condition or callout. */ - Flength = GET(Fecode, 1); /* Offset to the second branch */ - if (Fecode[Flength] != OP_ALT) Flength -= 1 + LINK_SIZE; + Llength = GET(Fecode, 1); /* Offset to the second branch */ + if (Fecode[Llength] != OP_ALT) Llength -= 1 + LINK_SIZE; Fecode += 1 + LINK_SIZE; /* From this opcode */ /* Because of the way auto-callout works during compile, a callout item is @@ -6016,10 +6030,10 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, if (rrc < 0) RRETURN(rrc); /* Advance Fecode past the callout, so it now points to the condition. We - must adjust Flength so that the value of Fecode+Flength is unchanged. */ + must adjust Llength so that the value of Fecode+Llength is unchanged. */ Fecode += length; - Flength -= length; + Llength -= length; } /* Test the various possible conditions */ @@ -6080,16 +6094,14 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, /* The condition is an assertion. Run code similar to the assertion code above. */ -#define Lpositive F->temp_32[0] -#define Lstart_branch F->temp_sptr[0] default: - Lpositive = (*Fecode == OP_ASSERT || *Fecode == OP_ASSERTBACK); + Lpositive = (uint8_t)(*Fecode == OP_ASSERT || *Fecode == OP_ASSERTBACK); Lstart_branch = Fecode; for (;;) { - group_frame_type = GF_CONDASSERT | *Fecode; + group_frame_type = GF_CONDASSERT; RMATCH(Lstart_branch + PRIV(OP_lengths)[*Lstart_branch], RM5); switch(rrc) @@ -6142,12 +6154,9 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, break; /* End of assertion condition */ } -#undef Lpositive -#undef Lstart_branch - /* Choose branch according to the condition. */ - Fecode += condition? PRIV(OP_lengths)[*Fecode] : Flength; + Fecode += condition? PRIV(OP_lengths)[*Fecode] : Llength; /* If the opcode is OP_SCOND it means we are at a repeated conditional group that might match an empty string. We must therefore descend a level @@ -6156,12 +6165,15 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, if (Fop == OP_SCOND) { - group_frame_type = GF_NOCAPTURE | Fop; + group_frame_type = GF_NOCAPTURE; RMATCH(Fecode, RM35); RRETURN(rrc); } break; +#undef Lstart_branch +#undef Llength +#undef Lpositive /* ========================================================================= */ @@ -6215,14 +6227,12 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, the start to move back even the minimum amount, fail. When working with UTF-8 we move back a number of characters, not bytes. */ -#define Lmin F->temp_32[0] -#define Lmax F->temp_32[1] -#define Leptr F->temp_sptr[0] +#define Lmin F->fields.op_vreverse.min +#define Lmax F->fields.op_vreverse.max case OP_VREVERSE: Lmin = GET2(Fecode, 1); Lmax = GET2(Fecode, 1 + IMM2_SIZE); - Leptr = Feptr; /* Move back by the maximum branch length and then work forwards. This ensures that items such as \d{3,5} get the maximum length, which is @@ -6273,7 +6283,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, #undef Lmin #undef Lmax -#undef Leptr + /* ===================================================================== */ /* An alternation is the end of a branch; scan along to find the end of the @@ -6328,7 +6338,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, N so that they are set on return. Doing this for all assertions, both positive and negative, seems to match what Perl does. */ - if (GF_IDMASK(N->group_frame_type) == GF_CONDASSERT) + if (N->group_frame_type == GF_CONDASSERT) { if ((*bracode == OP_ASSERTBACK || *bracode == OP_ASSERTBACK_NOT) && branch_start[1 + LINK_SIZE] == OP_VREVERSE && Feptr != P->eptr) @@ -6451,14 +6461,14 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, pattern. */ case OP_ASSERT_SCS: - F->temp_sptr[0] = mb->end_subject; - mb->end_subject = P->temp_sptr[0]; - mb->true_end_subject = mb->end_subject + P->temp_size; - Feptr = P->temp_sptr[1]; + F->fields.op_assert_scs.saved_end_subject = mb->end_subject; + mb->end_subject = P->fields.op_assert_scs.saved_end_subject; + mb->true_end_subject = mb->end_subject + P->fields.op_assert_scs.true_end_extra; + Feptr = P->fields.op_assert_scs.saved_eptr; RMATCH(Fecode + 1 + LINK_SIZE, RM39); - mb->end_subject = F->temp_sptr[0]; + mb->end_subject = F->fields.op_assert_scs.saved_end_subject; mb->true_end_subject = mb->end_subject; RRETURN(rrc); break; @@ -6599,7 +6609,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr + 1 >= mb->end_subject && NLBLOCK->nltype == NLTYPE_FIXED && NLBLOCK->nllen == 2 && - UCHAR21TEST(Feptr) == NLBLOCK->nl[0]) + *Feptr == NLBLOCK->nl[0]) { mb->hitend = TRUE; if (mb->partial > 1) return PCRE2_ERROR_PARTIAL; @@ -6647,7 +6657,7 @@ fprintf(stderr, "++ %2ld op=%3d %s\n", Fecode - mb->start_code, *Fecode, Feptr + 1 >= mb->end_subject && NLBLOCK->nltype == NLTYPE_FIXED && NLBLOCK->nllen == 2 && - UCHAR21TEST(Feptr) == NLBLOCK->nl[0]) + *Feptr == NLBLOCK->nl[0]) { mb->hitend = TRUE; if (mb->partial > 1) return PCRE2_ERROR_PARTIAL; @@ -6995,10 +7005,6 @@ PCRE2_SPTR req_cu_ptr; PCRE2_SPTR start_partial; PCRE2_SPTR match_partial; -#ifdef SUPPORT_JIT -BOOL use_jit; -#endif - /* This flag is needed even when Unicode is not supported for convenience (it is used by the IS_NEWLINE macro). */ @@ -7008,9 +7014,6 @@ BOOL utf = FALSE; BOOL ucp = FALSE; BOOL allow_invalid; uint32_t fragment_options = 0; -#ifdef SUPPORT_JIT -BOOL jit_checked_utf = FALSE; -#endif #endif /* SUPPORT_UNICODE */ PCRE2_SIZE frame_size; @@ -7073,15 +7076,6 @@ options |= (re->flags & FF) / ((FF & (~FF+1)) / (OO & (~OO+1))); #undef FF #undef OO -/* If the pattern was successfully studied with JIT support, we will run the -JIT executable instead of the rest of this function. Most options must be set -at compile time for the JIT code to be usable. */ - -#ifdef SUPPORT_JIT -use_jit = (re->executable_jit != NULL && - (options & ~PUBLIC_JIT_MATCH_OPTIONS) == 0); -#endif - /* Initialize UTF/UCP parameters. */ #ifdef SUPPORT_UNICODE @@ -7128,20 +7122,25 @@ match_data->startchar = 0; /* ============================= JIT matching ============================== */ -/* Prepare for JIT matching. Check a UTF string for validity unless no check is -requested or invalid UTF can be handled. We check only the portion of the -subject that might be be inspected during matching - from the offset minus the -maximum lookbehind to the given length. This saves time when a small part of a -large subject is being matched by the use of a starting offset. Note that the -maximum lookbehind is a number of characters, not code units. */ +/* If the pattern was successfully studied with JIT support, we will run the +JIT executable instead of the rest of this function. Most options must be set +at compile time for the JIT code to be usable. */ #ifdef SUPPORT_JIT -if (use_jit) +if (re->executable_jit != NULL && + (options & ~PUBLIC_JIT_MATCH_OPTIONS) == 0 && + PRIV(jit_check_exec)(re->executable_jit, options)) { + /* Prepare for JIT matching. Check a UTF string for validity unless no check + is requested or invalid UTF can be handled. We check only the portion of the + subject that might be be inspected during matching - from the offset minus + the maximum lookbehind to the given length. This saves time when a small part + of a large subject is being matched by the use of a starting offset. Note that + the maximum lookbehind is a number of characters, not code units. */ + #ifdef SUPPORT_UNICODE if (utf && (options & PCRE2_NO_UTF_CHECK) == 0 && !allow_invalid) { - /* For 8-bit and 16-bit UTF, check that the first code unit is a valid character start. */ @@ -7194,40 +7193,36 @@ if (use_jit) match_data->startchar += start_match - subject; return match_data->rc = rc; } - jit_checked_utf = TRUE; } #endif /* SUPPORT_UNICODE */ - /* If JIT returns BADOPTION, which means that the selected complete or - partial matching mode was not compiled, fall through to the interpreter. */ - rc = pcre2_jit_match(code, subject, length, start_offset, options, match_data, mcontext); - if (rc != PCRE2_ERROR_JIT_BADOPTION) + /* JIT must be able to perform the match. */ + PCRE2_ASSERT(rc != PCRE2_ERROR_JIT_BADOPTION); + + match_data->options = original_options; + if (rc >= 0 && (options & PCRE2_COPY_MATCHED_SUBJECT) != 0) { - match_data->options = original_options; - if (rc >= 0 && (options & PCRE2_COPY_MATCHED_SUBJECT) != 0) + if (length != 0) { - if (length != 0) - { - match_data->subject = match_data->memctl.malloc(CU2BYTES(length), - match_data->memctl.memory_data); - if (match_data->subject == NULL) - return match_data->rc = PCRE2_ERROR_NOMEMORY; - memcpy((void *)match_data->subject, subject, CU2BYTES(length)); - } - else - match_data->subject = NULL; - match_data->flags |= PCRE2_MD_COPIED_SUBJECT; + match_data->subject = match_data->memctl.malloc(CU2BYTES(length), + match_data->memctl.memory_data); + if (match_data->subject == NULL) + return match_data->rc = PCRE2_ERROR_NOMEMORY; + memcpy((void *)match_data->subject, subject, CU2BYTES(length)); } else - { - /* When pcre2_jit_match sets the subject, it doesn't know what the - original passed-in pointer was. */ - if (match_data->subject != NULL) match_data->subject = original_subject; - } - return rc; + match_data->subject = NULL; + match_data->flags |= PCRE2_MD_COPIED_SUBJECT; + } + else + { + /* When pcre2_jit_match sets the subject, it doesn't know what the + original passed-in pointer was. */ + if (match_data->subject != NULL) match_data->subject = original_subject; } + return rc; } #endif /* SUPPORT_JIT */ @@ -7240,12 +7235,8 @@ this. */ mb->check_subject = subject; -/* If a UTF subject string was not checked for validity in the JIT code above, -check it here, and handle support for invalid UTF strings. The check above -happens only when invalid UTF is not supported and PCRE2_NO_CHECK_UTF is unset. -If we get here in those circumstances, it means the subject string is valid, -but for some reason JIT matching was not successful. There is no need to check -the subject again. +/* Check the validity of UTF subject strings. The check happens only when +PCRE2_NO_CHECK_UTF is unset. We check only the portion of the subject that might be be inspected during matching - from the offset minus the maximum lookbehind to the given length. @@ -7257,11 +7248,7 @@ Note also that support for invalid UTF forces a check, overriding the setting of PCRE2_NO_CHECK_UTF. */ #ifdef SUPPORT_UNICODE -if (utf && -#ifdef SUPPORT_JIT - !jit_checked_utf && -#endif - ((options & PCRE2_NO_UTF_CHECK) == 0 || allow_invalid)) +if (utf && ((options & PCRE2_NO_UTF_CHECK) == 0 || allow_invalid)) { #if PCRE2_CODE_UNIT_WIDTH != 32 BOOL skipped_bad_start = FALSE; @@ -7649,7 +7636,7 @@ for(;;) BOOL ok = start_match < end_subject; if (ok) { - PCRE2_UCHAR c = UCHAR21TEST(start_match); + PCRE2_UCHAR c = *start_match; ok = has_first_cu && (c == first_cu || c == first_cu2); if (!ok && start_bits != NULL) { @@ -7681,7 +7668,7 @@ for(;;) #if PCRE2_CODE_UNIT_WIDTH != 8 PCRE2_UCHAR smc; while (start_match < end_subject && - (smc = UCHAR21TEST(start_match)) != first_cu && + (smc = *start_match) != first_cu && smc != first_cu2) start_match++; #else @@ -7741,7 +7728,7 @@ for(;;) else { #if PCRE2_CODE_UNIT_WIDTH != 8 - while (start_match < end_subject && UCHAR21TEST(start_match) != + while (start_match < end_subject && *start_match != first_cu) start_match++; #else @@ -7796,7 +7783,7 @@ for(;;) if (start_match[-1] == CHAR_CR && (mb->nltype == NLTYPE_ANY || mb->nltype == NLTYPE_ANYCRLF) && start_match < end_subject && - UCHAR21TEST(start_match) == CHAR_NL) + *start_match == CHAR_NL) start_match++; } } @@ -7810,7 +7797,7 @@ for(;;) { while (start_match < end_subject) { - uint32_t c = UCHAR21TEST(start_match); + uint32_t c = *start_match; #if PCRE2_CODE_UNIT_WIDTH != 8 if (c > 255) c = 255; #endif @@ -7884,7 +7871,7 @@ for(;;) #if PCRE2_CODE_UNIT_WIDTH != 8 while (p < end_subject) { - uint32_t pp = UCHAR21INCTEST(p); + uint32_t pp = *p++; if (pp == req_cu || pp == req_cu2) { p--; break; } } #else /* 8-bit code units */ @@ -7905,7 +7892,7 @@ for(;;) #if PCRE2_CODE_UNIT_WIDTH != 8 while (p < end_subject) { - if (UCHAR21INCTEST(p) == req_cu) { p--; break; } + if (*p++ == req_cu) { p--; break; } } #else /* 8-bit code units */ diff --git a/vendor/core/vendor/pcre2/src/pcre2_serialize.c b/vendor/core/vendor/pcre2/src/pcre2_serialize.c index f10a3fa0d..725b54099 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_serialize.c +++ b/vendor/core/vendor/pcre2/src/pcre2_serialize.c @@ -166,9 +166,10 @@ const pcre2_memctl *memctl = (gcontext != NULL) ? &gcontext->memctl : &PRIV(default_compile_context).memctl; const uint8_t *src_bytes; -pcre2_real_code *dst_re; +pcre2_real_code *dst_re = NULL; uint8_t *tables; int32_t i, j; +int32_t error; /* Sanity checks. */ @@ -206,7 +207,10 @@ for (i = 0; i < number_of_codes; i++) memcpy(&blocksize, src_bytes + offsetof(pcre2_real_code, blocksize), sizeof(CODE_BLOCKSIZE_TYPE)); if (blocksize <= sizeof(pcre2_real_code)) - return PCRE2_ERROR_BADSERIALIZEDDATA; + { + error = PCRE2_ERROR_BADSERIALIZEDDATA; + goto cleanup; + } /* The allocator provided by gcontext replaces the original one. */ @@ -214,13 +218,8 @@ for (i = 0; i < number_of_codes; i++) (pcre2_memctl *)gcontext); if (dst_re == NULL) { - memctl->free(tables, memctl->memory_data); - for (j = 0; j < i; j++) - { - memctl->free(codes[j], memctl->memory_data); - codes[j] = NULL; - } - return PCRE2_ERROR_NOMEMORY; + error = PCRE2_ERROR_NOMEMORY; + goto cleanup; } /* The new allocator must be preserved. */ @@ -230,10 +229,10 @@ for (i = 0; i < number_of_codes; i++) if (dst_re->magic_number != MAGIC_NUMBER || dst_re->name_entry_size > MAX_NAME_SIZE + IMM2_SIZE + 1 || dst_re->name_count > MAX_NAME_COUNT) - { - memctl->free(dst_re, memctl->memory_data); - return PCRE2_ERROR_BADSERIALIZEDDATA; - } + { + error = PCRE2_ERROR_BADSERIALIZEDDATA; + goto cleanup; + } /* At the moment only one table is supported. */ @@ -242,10 +241,22 @@ for (i = 0; i < number_of_codes; i++) dst_re->flags |= PCRE2_DEREF_TABLES; codes[i] = dst_re; + dst_re = NULL; src_bytes += blocksize; } return number_of_codes; + +cleanup: +if (dst_re != NULL) + memctl->free(dst_re, memctl->memory_data); +memctl->free(tables, memctl->memory_data); +for (j = 0; j < i; j++) + { + memctl->free(codes[j], memctl->memory_data); + codes[j] = NULL; + } +return error; } diff --git a/vendor/core/vendor/pcre2/src/pcre2_substitute.c b/vendor/core/vendor/pcre2/src/pcre2_substitute.c index 5cb84748e..d512f69b6 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_substitute.c +++ b/vendor/core/vendor/pcre2/src/pcre2_substitute.c @@ -115,6 +115,7 @@ for (; ptr < ptrend; ptr++) int erc; int errorcode; uint32_t ch; + PCRE2_SPTR esc_end_ptr; if (ptr < ptrend - 1) switch (ptr[1]) { @@ -137,6 +138,9 @@ for (; ptr < ptrend; ptr++) goto EXIT; } + esc_end_ptr = ptr; + ptr -= 1; /* Rewind by one, because the for-loop will increment it */ + switch(erc) { case 0: /* Data character */ @@ -160,7 +164,8 @@ for (; ptr < ptrend; ptr++) default: if (erc < 0) - break; /* capture group reference */ + break; /* capture group reference */ + ptr = esc_end_ptr; rc = PCRE2_ERROR_BADREPESCAPE; goto EXIT; } @@ -751,6 +756,7 @@ BOOL overflowed = FALSE; BOOL use_existing_match; BOOL replacement_only; BOOL utf = (code->overall_options & PCRE2_UTF) != 0; +BOOL partial = (options & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) != 0; PCRE2_UCHAR temp[6]; PCRE2_UCHAR null_str[1] = { 0xcd }; PCRE2_SPTR original_subject = subject; @@ -778,10 +784,16 @@ if (mcontext != NULL) substitute_case_callout_data = mcontext->substitute_case_callout_data; } -/* Partial matching is not valid. This must come after setting *blength to -PCRE2_UNSET, so as not to imply an offset in the replacement. */ +/* Partial matching is supported, with limitations. We allow matching in partial +mode, however, if a partial match is found, the substitution will fail with a +PCRE2_ERROR_PARTIAL error. Additionally, outputting the after-match text is not +allowed (PCRE2_ERROR_BADOPTION), and certain replacement items such as $' and $_ +are not supported (PCRE2_ERROR_PARTIALSUBS). + +This must come after setting *blength to PCRE2_UNSET, so as not to imply an +offset in the replacement. */ -if ((options & (PCRE2_PARTIAL_HARD|PCRE2_PARTIAL_SOFT)) != 0) +if (partial && (options & PCRE2_SUBSTITUTE_REPLACEMENT_ONLY) == 0) return PCRE2_ERROR_BADOPTION; /* Validate length and find the end of the replacement. A NULL replacement of @@ -854,7 +866,8 @@ if (use_existing_match) if (start_offset != match_data->start_offset) return PCRE2_ERROR_DIFFSUBSOFFSET; - if ((options & ~SUBSTITUTE_OPTIONS) != match_data->options) + if ((options & ~(SUBSTITUTE_OPTIONS|PCRE2_NO_UTF_CHECK)) != + (match_data->options & ~PCRE2_NO_UTF_CHECK)) return PCRE2_ERROR_DIFFSUBSOPTIONS; } @@ -1119,8 +1132,16 @@ for (;;) if (next == CHAR_GRAVE_ACCENT || next == CHAR_APOSTROPHE) { ++ptr; + + /* (Sanity-check ovector before reading from it.) */ rc = pcre2_substring_length_bynumber(match_data, 0, &sublength); - if (rc < 0) goto PTREXIT; /* (Sanity-check ovector before reading from it.) */ + /* LCOV_EXCL_START */ + if (rc < 0) + { + PCRE2_DEBUG_UNREACHABLE(); + goto PTREXIT; + } + /* LCOV_EXCL_STOP */ if (next == CHAR_GRAVE_ACCENT) { @@ -1129,6 +1150,12 @@ for (;;) } else { + if (partial) + { + rc = PCRE2_ERROR_PARTIALSUBS; + goto PTREXIT; + } + subptr = subject + ovector[1]; subptrend = subject + length; } @@ -1139,12 +1166,19 @@ for (;;) { /* Java, .NET support $_ for "entire input string". */ ++ptr; + + if (partial) + { + rc = PCRE2_ERROR_PARTIALSUBS; + goto PTREXIT; + } + subptr = subject; subptrend = subject + length; goto SUBPTR_SUBSTITUTE; } - else if (next == CHAR_PLUS && - !(ptr+1 < repend && ptr[1] == CHAR_LEFT_CURLY_BRACKET)) + if (next == CHAR_PLUS && + !(ptr+1 < repend && ptr[1] == CHAR_LEFT_CURLY_BRACKET)) { /* Perl supports $+ for "highest captured group" (not the same as $^N which is mainly only useful inside Perl's match callbacks). We also diff --git a/vendor/core/vendor/pcre2/src/pcre2_substring.c b/vendor/core/vendor/pcre2/src/pcre2_substring.c index f68b464e0..a6f5277a3 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_substring.c +++ b/vendor/core/vendor/pcre2/src/pcre2_substring.c @@ -210,9 +210,10 @@ PCRE2_SIZE size; PCRE2_UCHAR *yield; rc = pcre2_substring_length_bynumber(match_data, stringnumber, &size); if (rc < 0) return rc; -yield = PRIV(memctl_malloc)(sizeof(pcre2_memctl) + - (size + 1)*PCRE2_CODE_UNIT_WIDTH, (pcre2_memctl *)match_data); -if (yield == NULL) return PCRE2_ERROR_NOMEMORY; +if (size > ((PCRE2_SIZE_MAX - sizeof(pcre2_memctl)) / CU2BYTES(1)) - 1 || + (yield = PRIV(memctl_malloc)(sizeof(pcre2_memctl) + + CU2BYTES(size + 1), (pcre2_memctl *)match_data)) == NULL) + return PCRE2_ERROR_NOMEMORY; yield = (PCRE2_UCHAR *)(((char *)yield) + sizeof(pcre2_memctl)); if (size != 0) memcpy(yield, match_data->subject + match_data->ovector[stringnumber*2], CU2BYTES(size)); diff --git a/vendor/core/vendor/pcre2/src/pcre2_ucd.c b/vendor/core/vendor/pcre2/src/pcre2_ucd.c index 1cbff3afe..7b294a858 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_ucd.c +++ b/vendor/core/vendor/pcre2/src/pcre2_ucd.c @@ -77,9 +77,9 @@ const uint32_t PRIV(ucd_nocase_ranges)[] = {0}; const uint32_t PRIV(ucd_nocase_ranges_size) = 0; #else -/* Total size: 116564 bytes, block size: 128. */ +/* Total size: 116548 bytes, block size: 128. */ -const char *PRIV(unicode_version) = "16.0.0"; +const char *PRIV(unicode_version) = "17.0.0"; /* When recompiling tables with a new Unicode version, please check the types in this structure definition with those in pcre2_internal.h (the actual field @@ -200,20 +200,21 @@ const uint32_t PRIV(ucd_nocase_ranges)[] = { 0x10d65, 0x10d70, /* 10 */ 0x10d85, 0x118a0, /* 2842 */ 0x118df, 0x16e40, /* 21856 */ - 0x16e7f, 0x1e900, /* 31360 */ + 0x16e7f, 0x16ea0, /* 32 */ + 0x16ed3, 0x1e900, /* 31276 */ 0x1e943, 0x110000, /* 988860 */ 0xffffffff, 0xffffffff /* terminator */ }; -/* Total: 1110933 characters. */ -const uint32_t PRIV(ucd_nocase_ranges_size) = 80; +/* Total: 1110881 characters. */ +const uint32_t PRIV(ucd_nocase_ranges_size) = 82; /* This table lists the code points for the '9' characters in each set of decimal digits. It is used to ensure that all the digits in a script run come from the same set. */ const uint32_t PRIV(ucd_digit_sets)[] = { - 76, /* Number of subsequent values */ + 77, /* Number of subsequent values */ 0x00039, 0x00669, 0x006f9, 0x007c9, 0x0096f, 0x009ef, 0x00a6f, 0x00aef, 0x00b6f, 0x00bef, 0x00c6f, 0x00cef, 0x00d6f, 0x00def, 0x00e59, 0x00ed9, 0x00f29, 0x01049, 0x01099, 0x017e9, 0x01819, 0x0194f, 0x019d9, 0x01a89, @@ -221,9 +222,9 @@ const uint32_t PRIV(ucd_digit_sets)[] = { 0x0a9d9, 0x0a9f9, 0x0aa59, 0x0abf9, 0x0ff19, 0x104a9, 0x10d39, 0x10d49, 0x1106f, 0x110f9, 0x1113f, 0x111d9, 0x112f9, 0x11459, 0x114d9, 0x11659, 0x116c9, 0x116d9, 0x116e3, 0x11739, 0x118e9, 0x11959, 0x11bf9, 0x11c59, - 0x11d59, 0x11da9, 0x11f59, 0x16139, 0x16a69, 0x16ac9, 0x16b59, 0x16d79, - 0x1ccf9, 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, 0x1e2f9, - 0x1e4f9, 0x1e5fa, 0x1e959, 0x1fbf9, + 0x11d59, 0x11da9, 0x11de9, 0x11f59, 0x16139, 0x16a69, 0x16ac9, 0x16b59, + 0x16d79, 0x1ccf9, 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, + 0x1e2f9, 0x1e4f9, 0x1e5fa, 0x1e959, 0x1fbf9, }; /* This vector is a list of script bitsets for the Script Extension property. @@ -232,60 +233,60 @@ ucd_script_sets_item_size. */ const uint32_t PRIV(ucd_script_sets)[] = { 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x40200003u, 0x00381901u, 0x00100246u, 0x00000000u, - 0x00040305u, 0x00800000u, 0x08000000u, 0x00000000u, + 0x40200003u, 0x00381901u, 0x00200246u, 0x00000000u, + 0x00040305u, 0x00800000u, 0x10000000u, 0x00000000u, 0x20000001u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00800000u, 0x00000000u, 0x00000000u, 0x00040001u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x01000007u, 0x00000840u, 0x80000200u, 0x00000000u, - 0x01000007u, 0x00000040u, 0x80010000u, 0x00000001u, + 0x01000007u, 0x00000840u, 0x00000200u, 0x00000001u, + 0x01000007u, 0x00000040u, 0x00020000u, 0x00000003u, 0x01000005u, 0x00002000u, 0x00000000u, 0x00000000u, - 0x00040041u, 0x00001000u, 0x80000000u, 0x00000000u, - 0x01000047u, 0x00002801u, 0x00010001u, 0x00000001u, + 0x00040041u, 0x00001000u, 0x00000000u, 0x00000001u, + 0x01000047u, 0x00002801u, 0x00020001u, 0x00000002u, 0x10000001u, 0x00001801u, 0x00000004u, 0x00000000u, - 0x00000007u, 0x00000000u, 0x00000200u, 0x00000000u, - 0x00000051u, 0x00002840u, 0x00000202u, 0x00000001u, - 0x0000005fu, 0x00000041u, 0x00000202u, 0x00000000u, + 0x00000007u, 0x00002000u, 0x00000200u, 0x00000000u, + 0x00000051u, 0x00002840u, 0x00000202u, 0x00000002u, + 0x0000005fu, 0x00002041u, 0x00000202u, 0x00000000u, 0x00000001u, 0x00002000u, 0x00000000u, 0x00000000u, 0x00000041u, 0x00000000u, 0x00000002u, 0x00000000u, - 0x01000005u, 0x00000000u, 0x00010000u, 0x00000000u, + 0x01000005u, 0x00000000u, 0x00020000u, 0x00000000u, 0x01000001u, 0x00000040u, 0x00000000u, 0x00000000u, - 0x00000001u, 0x00000000u, 0x80000000u, 0x00000000u, + 0x00000001u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00800001u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00000005u, 0x00000000u, 0x00000000u, 0x00000001u, - 0x00000003u, 0x00000000u, 0x00000200u, 0x00000001u, - 0x00000041u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x11000041u, 0x00000000u, 0x00000002u, 0x00000000u, + 0x00000005u, 0x00000000u, 0x00000000u, 0x00000002u, + 0x00000003u, 0x00000000u, 0x00000200u, 0x00000002u, + 0x11000041u, 0x00002000u, 0x00000002u, 0x00000000u, 0x01000041u, 0x00000000u, 0x00000002u, 0x00000000u, - 0x00000041u, 0x00000000u, 0x80000000u, 0x00000000u, + 0x00000041u, 0x00000000u, 0x00000000u, 0x00000000u, + 0x00000041u, 0x00000000u, 0x00000000u, 0x00000001u, 0x01000041u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x01040001u, 0x00000001u, 0x80000001u, 0x00000000u, + 0x01040041u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00000002u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00000001u, 0x00000000u, 0x00010000u, 0x00000000u, - 0x00000001u, 0x00000000u, 0x00000001u, 0x00000001u, + 0x00000001u, 0x00000000u, 0x00020000u, 0x00000000u, + 0x00000001u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00000001u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000002u, 0x00000800u, 0x00000000u, 0x00000000u, 0x00000004u, 0x00000000u, 0x00000200u, 0x00000000u, 0x00000004u, 0x00001000u, 0x00000000u, 0x00000000u, 0x00000005u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00200008u, 0x00001000u, 0x00000000u, 0x00000000u, - 0x000000e0u, 0x00010000u, 0x11200000u, 0x00000000u, + 0x000000e0u, 0x00010000u, 0x22400000u, 0x00000000u, 0x000000e0u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x000000e0u, 0x00010000u, 0x11208000u, 0x00000000u, - 0x00000060u, 0x08000000u, 0x04608480u, 0x00000000u, + 0x000000e0u, 0x00010000u, 0x22408000u, 0x00000000u, + 0x00000060u, 0x08000000u, 0x08c08480u, 0x00000000u, 0x00000060u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x000000a0u, 0x00000000u, 0x01000000u, 0x00000000u, - 0x00000020u, 0x00000000u, 0x00200000u, 0x00000000u, - 0x0001ff01u, 0x40000000u, 0x00001008u, 0x00000000u, - 0x0001ff01u, 0x00000000u, 0x00001008u, 0x00000000u, - 0x0003ff00u, 0x80004000u, 0x409c1848u, 0x00000000u, - 0x0003ff00u, 0x80004020u, 0x609c1848u, 0x00000000u, - 0x00000100u, 0x04000000u, 0x00080040u, 0x00000000u, + 0x000000a0u, 0x00000000u, 0x02000000u, 0x00000000u, + 0x00000020u, 0x00000000u, 0x00400000u, 0x00000000u, + 0x0001ff01u, 0x40000000u, 0x01011008u, 0x00000000u, + 0x0001ff01u, 0x00000000u, 0x00011008u, 0x00000000u, + 0x0003ff00u, 0x80004000u, 0x81381848u, 0x00000000u, + 0x0003ff00u, 0x80004020u, 0xc1381848u, 0x00000000u, + 0x00000100u, 0x04000000u, 0x00100040u, 0x00000000u, 0x00000200u, 0x10004000u, 0x00000000u, 0x00000000u, 0x00000400u, 0x00000000u, 0x00002000u, 0x00000000u, 0x00000800u, 0x00000000u, 0x00000010u, 0x00000000u, 0x00002000u, 0x00000000u, 0x00000008u, 0x00000000u, - 0x00008000u, 0x00000000u, 0x00800000u, 0x00000002u, + 0x00008000u, 0x00000000u, 0x01000000u, 0x00000004u, 0x00100000u, 0x10000040u, 0x00000000u, 0x00000000u, 0x00200001u, 0x00001000u, 0x00000000u, 0x00000000u, 0x02000000u, 0x00000000u, 0x00000000u, 0x00000000u, @@ -294,15 +295,23 @@ const uint32_t PRIV(ucd_script_sets)[] = { 0x00008300u, 0x00000000u, 0x00000008u, 0x00000000u, 0x00000100u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00008100u, 0x00000000u, 0x00000008u, 0x00000000u, - 0x00000300u, 0x00000000u, 0x00000000u, 0x00000000u, + 0x00004300u, 0x00000000u, 0x00011000u, 0x00000000u, + 0x00004300u, 0x00000000u, 0x00000000u, 0x00000000u, + 0x00000100u, 0x40000000u, 0x00010000u, 0x00000000u, + 0x00004300u, 0x00000000u, 0x00010000u, 0x00000000u, 0x00000100u, 0x40000000u, 0x00000000u, 0x00000000u, 0x0001f100u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00000100u, 0x00000000u, 0x00800000u, 0x00000000u, - 0x0003d300u, 0x00000000u, 0x00801008u, 0x00000002u, + 0x00000300u, 0x00000000u, 0x00000000u, 0x00000000u, + 0x00000100u, 0x00000000u, 0x00011000u, 0x00000000u, + 0x00000100u, 0x00000000u, 0x01010000u, 0x00000000u, + 0x00000300u, 0x40000000u, 0x00000000u, 0x00000000u, + 0x00000100u, 0x00000000u, 0x00010000u, 0x00000000u, + 0x00000300u, 0x40000000u, 0x00010000u, 0x00000000u, + 0x0003d300u, 0x00000000u, 0x01001008u, 0x00000004u, 0x00000100u, 0x00000000u, 0x00000008u, 0x00000000u, - 0x00008100u, 0x00000000u, 0x00000008u, 0x00000002u, + 0x00008100u, 0x00000000u, 0x00000008u, 0x00000004u, 0x00000200u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00000000u, 0x00000000u, 0x00800000u, 0x00000000u, + 0x00000000u, 0x00000000u, 0x01000000u, 0x00000000u, 0x00000045u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000040u, 0x00000000u, 0x00000000u, 0x00000000u, 0x04000001u, 0x00008000u, 0x00000000u, 0x00000000u, @@ -315,7 +324,7 @@ const uint32_t PRIV(ucd_script_sets)[] = { 0x00200000u, 0x04780000u, 0x00004000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000002u, 0x00000000u, 0x00000020u, 0x00000000u, 0x0000c000u, 0x00000000u, - 0x40000000u, 0x00000000u, 0x00020000u, 0x00000000u, + 0x40000000u, 0x00000000u, 0x00040000u, 0x00000000u, 0xfc400000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xfc400000u, 0x00008000u, 0x00000000u, 0x00000000u, 0x78400000u, 0x00000000u, 0x00000000u, 0x00000000u, @@ -327,21 +336,21 @@ const uint32_t PRIV(ucd_script_sets)[] = { 0x18000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x58000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x40000001u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00018d00u, 0xc4000000u, 0x00881950u, 0x00000002u, - 0x00008d00u, 0xc4000000u, 0x00881950u, 0x00000002u, - 0x00000d00u, 0x84000000u, 0x00081950u, 0x00000000u, - 0x00000d00u, 0xc4000000u, 0x00081950u, 0x00000000u, - 0x00000300u, 0x00000000u, 0x00000000u, 0x00000002u, + 0x00018d00u, 0xc4000000u, 0x01101950u, 0x00000004u, + 0x00008d00u, 0xc4000000u, 0x01101950u, 0x00000004u, + 0x00000d00u, 0x84000000u, 0x00101950u, 0x00000000u, + 0x00000d00u, 0xc4000000u, 0x00101950u, 0x00000000u, + 0x00000300u, 0x00000000u, 0x00000000u, 0x00000004u, 0x00002100u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00100001u, 0x00020000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x01000400u, 0x00000000u, 0x00000000u, 0x00000020u, 0x00010000u, 0x00000000u, 0x00000000u, 0x000000a0u, 0x00000000u, 0x00000000u, 0x00000000u, - 0x00000000u, 0x00000280u, 0x02000000u, 0x00000000u, + 0x00000000u, 0x00000280u, 0x04000000u, 0x00000000u, 0x00000000u, 0x00000280u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000280u, 0x00000020u, 0x00000000u, 0x00000020u, 0x00000800u, 0x00000000u, 0x00000000u, - 0x00000000u, 0x00000000u, 0x04000080u, 0x00000000u, + 0x00000000u, 0x00000000u, 0x08000080u, 0x00000000u, }; /* This vector is a list of bitsets for Boolean properties. The number of @@ -444,6 +453,7 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = { 0x00802004u, 0x01800003u, 0x00800344u, 0x01900003u, 0x03008000u, 0x00800009u, + 0x00804004u, 0x0180000bu, 0x00c00000u, 0x00000000u, 0x01002020u, 0x00a00009u, 0x01000024u, 0x0180000bu, @@ -451,7 +461,6 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = { 0x01408024u, 0x00800009u, 0x00808000u, 0x00000000u, 0x00800044u, 0x01820043u, - 0x00800064u, 0x01820043u, 0x01002020u, 0x00800011u, 0x00022020u, 0x00800019u, 0x00002028u, 0x00000800u, @@ -467,6 +476,7 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = { 0x00002020u, 0x00000080u, 0x00002000u, 0x00000000u, 0x00006020u, 0x00000000u, + 0x00800064u, 0x01820043u, 0x40800000u, 0x00000080u, 0x40801000u, 0x00000080u, 0x40800010u, 0x00000080u, @@ -485,13 +495,11 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = { 0x00801000u, 0x00000480u, 0x00b10000u, 0x00000400u, 0x00804010u, 0x00000400u, - 0x00a00000u, 0x00000400u, 0x00000000u, 0x00000400u, 0x008003c4u, 0x00100000u, 0x00a103c4u, 0x00100000u, 0x00800d44u, 0x00000040u, 0x00b10000u, 0x00000480u, - 0x00a00000u, 0x00000480u, 0x00a90000u, 0x00000400u, 0x00b90000u, 0x00000400u, 0x03000020u, 0x00800009u, @@ -528,9 +536,9 @@ const uint32_t PRIV(ucd_boolprop_sets)[] = { 0x01400020u, 0x00800009u, 0x01000020u, 0x0080000du, 0x01008004u, 0x00800009u, + 0x00c00024u, 0x01800007u, 0x01000000u, 0x00800009u, 0xc0800000u, 0x00000080u, - 0x00a00000u, 0x00000000u, 0x00b10000u, 0x00000000u, 0x00200000u, 0x00000000u, 0x00800044u, 0x00100000u, @@ -549,66 +557,66 @@ offset to multichar other cases or zero (8 bits), offset to other case or zero (32 bits, signed), bidi class (5 bits) and script extension (11 bits) packed into a 16-bit field, and offset in binary properties table (16 bits). */ -const ucd_record PRIV(ucd_records)[] = { /* 18516 bytes, record size 12 */ - { 99, 0, 2, 0, 0, 6144, 2, }, /* 0 */ - { 99, 0, 2, 0, 0, 43008, 4, }, /* 1 */ - { 99, 0, 1, 0, 0, 4096, 4, }, /* 2 */ - { 99, 0, 2, 0, 0, 45056, 4, }, /* 3 */ - { 99, 0, 0, 0, 0, 4096, 4, }, /* 4 */ - { 99, 0, 2, 0, 0, 4096, 2, }, /* 5 */ - { 99, 0, 2, 0, 0, 43008, 2, }, /* 6 */ - { 99, 29, 12, 0, 0, 45056, 6, }, /* 7 */ - { 99, 21, 12, 0, 0, 28672, 8, }, /* 8 */ - { 99, 21, 12, 0, 0, 28672, 10, }, /* 9 */ - { 99, 21, 12, 0, 0, 14336, 12, }, /* 10 */ - { 99, 23, 12, 0, 0, 14336, 14, }, /* 11 */ - { 99, 21, 12, 0, 0, 14336, 14, }, /* 12 */ - { 99, 21, 12, 0, 0, 28672, 14, }, /* 13 */ - { 99, 21, 12, 0, 0, 28672, 16, }, /* 14 */ - { 99, 22, 12, 0, 0, 28672, 18, }, /* 15 */ - { 99, 18, 12, 0, 0, 28672, 18, }, /* 16 */ - { 99, 21, 12, 0, 0, 28672, 12, }, /* 17 */ - { 99, 25, 12, 0, 0, 12288, 20, }, /* 18 */ - { 99, 21, 12, 0, 0, 8192, 22, }, /* 19 */ - { 99, 17, 12, 0, 0, 12288, 24, }, /* 20 */ - { 99, 21, 12, 0, 0, 8192, 26, }, /* 21 */ - { 99, 21, 12, 0, 0, 8192, 14, }, /* 22 */ - { 99, 13, 12, 0, 0, 10240, 28, }, /* 23 */ - { 99, 21, 12, 0, 0, 8192, 30, }, /* 24 */ - { 99, 21, 12, 0, 0, 28672, 22, }, /* 25 */ - { 99, 25, 12, 0, 0, 28672, 32, }, /* 26 */ - { 99, 25, 12, 0, 0, 28672, 20, }, /* 27 */ +const ucd_record PRIV(ucd_records)[] = { /* 18756 bytes, record size 12 */ + { 100, 0, 2, 0, 0, 6144, 2, }, /* 0 */ + { 100, 0, 2, 0, 0, 43008, 4, }, /* 1 */ + { 100, 0, 1, 0, 0, 4096, 4, }, /* 2 */ + { 100, 0, 2, 0, 0, 45056, 4, }, /* 3 */ + { 100, 0, 0, 0, 0, 4096, 4, }, /* 4 */ + { 100, 0, 2, 0, 0, 4096, 2, }, /* 5 */ + { 100, 0, 2, 0, 0, 43008, 2, }, /* 6 */ + { 100, 29, 12, 0, 0, 45056, 6, }, /* 7 */ + { 100, 21, 12, 0, 0, 28672, 8, }, /* 8 */ + { 100, 21, 12, 0, 0, 28672, 10, }, /* 9 */ + { 100, 21, 12, 0, 0, 14336, 12, }, /* 10 */ + { 100, 23, 12, 0, 0, 14336, 14, }, /* 11 */ + { 100, 21, 12, 0, 0, 14336, 14, }, /* 12 */ + { 100, 21, 12, 0, 0, 28672, 14, }, /* 13 */ + { 100, 21, 12, 0, 0, 28672, 16, }, /* 14 */ + { 100, 22, 12, 0, 0, 28672, 18, }, /* 15 */ + { 100, 18, 12, 0, 0, 28672, 18, }, /* 16 */ + { 100, 21, 12, 0, 0, 28672, 12, }, /* 17 */ + { 100, 25, 12, 0, 0, 12288, 20, }, /* 18 */ + { 100, 21, 12, 0, 0, 8192, 22, }, /* 19 */ + { 100, 17, 12, 0, 0, 12288, 24, }, /* 20 */ + { 100, 21, 12, 0, 0, 8192, 26, }, /* 21 */ + { 100, 21, 12, 0, 0, 8192, 14, }, /* 22 */ + { 100, 13, 12, 0, 0, 10240, 28, }, /* 23 */ + { 100, 21, 12, 0, 0, 8192, 30, }, /* 24 */ + { 100, 21, 12, 0, 0, 28672, 22, }, /* 25 */ + { 100, 25, 12, 0, 0, 28672, 32, }, /* 26 */ + { 100, 25, 12, 0, 0, 28672, 20, }, /* 27 */ { 0, 9, 12, 0, 32, 18432, 34, }, /* 28 */ { 0, 9, 12, 0, 32, 18432, 36, }, /* 29 */ { 0, 9, 12, 100, 32, 18432, 36, }, /* 30 */ { 0, 9, 12, 1, 32, 18432, 36, }, /* 31 */ - { 99, 24, 12, 0, 0, 28672, 38, }, /* 32 */ - { 99, 16, 12, 0, 0, 28672, 40, }, /* 33 */ - { 99, 24, 12, 0, 0, 28672, 42, }, /* 34 */ + { 100, 24, 12, 0, 0, 28672, 38, }, /* 32 */ + { 100, 16, 12, 0, 0, 28672, 40, }, /* 33 */ + { 100, 24, 12, 0, 0, 28672, 42, }, /* 34 */ { 0, 5, 12, 0, -32, 18432, 44, }, /* 35 */ { 0, 5, 12, 0, -32, 18432, 46, }, /* 36 */ { 0, 5, 12, 0, -32, 18432, 48, }, /* 37 */ { 0, 5, 12, 100, -32, 18432, 46, }, /* 38 */ { 0, 5, 12, 1, -32, 18432, 46, }, /* 39 */ - { 99, 0, 2, 0, 0, 6144, 0, }, /* 40 */ - { 99, 0, 2, 0, 0, 4096, 50, }, /* 41 */ - { 99, 29, 12, 0, 0, 8192, 52, }, /* 42 */ - { 99, 21, 12, 0, 0, 28672, 54, }, /* 43 */ - { 99, 23, 12, 0, 0, 14336, 54, }, /* 44 */ - { 99, 26, 12, 0, 0, 28672, 54, }, /* 45 */ - { 99, 24, 12, 0, 0, 28672, 56, }, /* 46 */ - { 99, 26, 14, 0, 0, 28672, 58, }, /* 47 */ + { 100, 0, 2, 0, 0, 6144, 0, }, /* 40 */ + { 100, 0, 2, 0, 0, 4096, 50, }, /* 41 */ + { 100, 29, 12, 0, 0, 8192, 52, }, /* 42 */ + { 100, 21, 12, 0, 0, 28672, 54, }, /* 43 */ + { 100, 23, 12, 0, 0, 14336, 54, }, /* 44 */ + { 100, 26, 12, 0, 0, 28672, 54, }, /* 45 */ + { 100, 24, 12, 0, 0, 28672, 56, }, /* 46 */ + { 100, 26, 14, 0, 0, 28672, 58, }, /* 47 */ { 0, 7, 12, 0, 0, 18432, 60, }, /* 48 */ - { 99, 20, 12, 0, 0, 28672, 62, }, /* 49 */ - { 99, 25, 12, 0, 0, 28672, 64, }, /* 50 */ - { 99, 1, 2, 0, 0, 6144, 66, }, /* 51 */ - { 99, 26, 12, 0, 0, 14336, 54, }, /* 52 */ - { 99, 25, 12, 0, 0, 14336, 64, }, /* 53 */ - { 99, 15, 12, 0, 0, 10240, 68, }, /* 54 */ - { 99, 5, 12, 26, 775, 18432, 70, }, /* 55 */ - { 99, 21, 12, 0, 0, 28676, 72, }, /* 56 */ - { 99, 19, 12, 0, 0, 28672, 62, }, /* 57 */ - { 99, 15, 12, 0, 0, 28672, 74, }, /* 58 */ + { 100, 20, 12, 0, 0, 28672, 62, }, /* 49 */ + { 100, 25, 12, 0, 0, 28672, 64, }, /* 50 */ + { 100, 1, 2, 0, 0, 6144, 66, }, /* 51 */ + { 100, 26, 12, 0, 0, 14336, 54, }, /* 52 */ + { 100, 25, 12, 0, 0, 14336, 64, }, /* 53 */ + { 100, 15, 12, 0, 0, 10240, 68, }, /* 54 */ + { 100, 5, 12, 26, 775, 18432, 70, }, /* 55 */ + { 100, 21, 12, 0, 0, 28676, 72, }, /* 56 */ + { 100, 19, 12, 0, 0, 28672, 62, }, /* 57 */ + { 100, 15, 12, 0, 0, 28672, 74, }, /* 58 */ { 0, 9, 12, 0, 32, 18432, 76, }, /* 59 */ { 0, 9, 12, 104, 32, 18432, 76, }, /* 60 */ { 0, 5, 12, 0, 7615, 18432, 70, }, /* 61 */ @@ -701,59 +709,59 @@ const ucd_record PRIV(ucd_records)[] = { /* 18516 bytes, record size 12 */ { 0, 5, 12, 0, 42258, 18432, 78, }, /* 148 */ { 0, 6, 12, 0, 0, 18432, 90, }, /* 149 */ { 0, 6, 12, 0, 0, 18432, 92, }, /* 150 */ - { 99, 6, 12, 0, 0, 28672, 94, }, /* 151 */ - { 99, 6, 12, 0, 0, 18432, 94, }, /* 152 */ - { 99, 6, 12, 0, 0, 18440, 94, }, /* 153 */ - { 99, 6, 12, 0, 0, 18432, 90, }, /* 154 */ - { 99, 6, 12, 0, 0, 28684, 94, }, /* 155 */ - { 99, 6, 12, 0, 0, 28688, 94, }, /* 156 */ - { 99, 6, 12, 0, 0, 18432, 96, }, /* 157 */ - { 99, 24, 12, 0, 0, 28692, 56, }, /* 158 */ - { 99, 24, 12, 0, 0, 28684, 56, }, /* 159 */ + { 100, 6, 12, 0, 0, 28672, 94, }, /* 151 */ + { 100, 6, 12, 0, 0, 18432, 94, }, /* 152 */ + { 100, 6, 12, 0, 0, 18440, 94, }, /* 153 */ + { 100, 6, 12, 0, 0, 18432, 90, }, /* 154 */ + { 100, 6, 12, 0, 0, 28684, 94, }, /* 155 */ + { 100, 6, 12, 0, 0, 28688, 94, }, /* 156 */ + { 100, 6, 12, 0, 0, 18432, 96, }, /* 157 */ + { 100, 24, 12, 0, 0, 28692, 56, }, /* 158 */ + { 100, 24, 12, 0, 0, 28684, 56, }, /* 159 */ { 29, 24, 12, 0, 0, 28672, 56, }, /* 160 */ - { 106, 12, 3, 0, 0, 26648, 98, }, /* 161 */ - { 106, 12, 3, 0, 0, 26652, 98, }, /* 162 */ - { 106, 12, 3, 0, 0, 26656, 98, }, /* 163 */ - { 106, 12, 3, 0, 0, 26660, 98, }, /* 164 */ - { 106, 12, 3, 0, 0, 26664, 98, }, /* 165 */ - { 106, 12, 3, 0, 0, 26668, 98, }, /* 166 */ - { 106, 12, 3, 0, 0, 26672, 98, }, /* 167 */ - { 106, 12, 3, 0, 0, 26676, 98, }, /* 168 */ - { 106, 12, 3, 0, 0, 26680, 98, }, /* 169 */ - { 106, 12, 3, 0, 0, 26684, 98, }, /* 170 */ - { 106, 12, 3, 0, 0, 26688, 98, }, /* 171 */ - { 106, 12, 3, 0, 0, 26692, 98, }, /* 172 */ - { 106, 12, 3, 0, 0, 26696, 98, }, /* 173 */ - { 106, 12, 3, 0, 0, 26700, 98, }, /* 174 */ - { 106, 12, 3, 0, 0, 26704, 98, }, /* 175 */ - { 106, 12, 3, 0, 0, 26624, 98, }, /* 176 */ - { 106, 12, 3, 0, 0, 26708, 98, }, /* 177 */ - { 106, 12, 3, 0, 0, 26712, 98, }, /* 178 */ - { 106, 12, 3, 0, 0, 26716, 98, }, /* 179 */ - { 106, 12, 3, 0, 0, 26720, 98, }, /* 180 */ - { 106, 12, 3, 0, 0, 26724, 98, }, /* 181 */ - { 106, 12, 3, 0, 0, 26728, 98, }, /* 182 */ - { 106, 12, 3, 0, 0, 26732, 98, }, /* 183 */ - { 106, 12, 3, 0, 0, 26736, 98, }, /* 184 */ - { 106, 12, 3, 0, 0, 26740, 98, }, /* 185 */ - { 106, 12, 3, 21, 116, 26740, 100, }, /* 186 */ - { 106, 12, 3, 0, 0, 26624, 102, }, /* 187 */ - { 106, 12, 3, 0, 0, 26744, 104, }, /* 188 */ - { 106, 12, 3, 0, 0, 26624, 104, }, /* 189 */ - { 106, 12, 3, 0, 0, 26748, 98, }, /* 190 */ - { 106, 12, 3, 0, 0, 26752, 106, }, /* 191 */ + { 107, 12, 3, 0, 0, 26648, 98, }, /* 161 */ + { 107, 12, 3, 0, 0, 26652, 98, }, /* 162 */ + { 107, 12, 3, 0, 0, 26656, 98, }, /* 163 */ + { 107, 12, 3, 0, 0, 26660, 98, }, /* 164 */ + { 107, 12, 3, 0, 0, 26664, 98, }, /* 165 */ + { 107, 12, 3, 0, 0, 26668, 98, }, /* 166 */ + { 107, 12, 3, 0, 0, 26672, 98, }, /* 167 */ + { 107, 12, 3, 0, 0, 26676, 98, }, /* 168 */ + { 107, 12, 3, 0, 0, 26680, 98, }, /* 169 */ + { 107, 12, 3, 0, 0, 26684, 98, }, /* 170 */ + { 107, 12, 3, 0, 0, 26688, 98, }, /* 171 */ + { 107, 12, 3, 0, 0, 26692, 98, }, /* 172 */ + { 107, 12, 3, 0, 0, 26696, 98, }, /* 173 */ + { 107, 12, 3, 0, 0, 26700, 98, }, /* 174 */ + { 107, 12, 3, 0, 0, 26704, 98, }, /* 175 */ + { 107, 12, 3, 0, 0, 26624, 98, }, /* 176 */ + { 107, 12, 3, 0, 0, 26708, 98, }, /* 177 */ + { 107, 12, 3, 0, 0, 26712, 98, }, /* 178 */ + { 107, 12, 3, 0, 0, 26716, 98, }, /* 179 */ + { 107, 12, 3, 0, 0, 26720, 98, }, /* 180 */ + { 107, 12, 3, 0, 0, 26724, 98, }, /* 181 */ + { 107, 12, 3, 0, 0, 26728, 98, }, /* 182 */ + { 107, 12, 3, 0, 0, 26732, 98, }, /* 183 */ + { 107, 12, 3, 0, 0, 26736, 98, }, /* 184 */ + { 107, 12, 3, 0, 0, 26740, 98, }, /* 185 */ + { 107, 12, 3, 21, 116, 26740, 100, }, /* 186 */ + { 107, 12, 3, 0, 0, 26624, 102, }, /* 187 */ + { 107, 12, 3, 0, 0, 26744, 104, }, /* 188 */ + { 107, 12, 3, 0, 0, 26624, 104, }, /* 189 */ + { 107, 12, 3, 0, 0, 26748, 98, }, /* 190 */ + { 107, 12, 3, 0, 0, 26752, 106, }, /* 191 */ { 1, 9, 12, 0, 1, 18432, 76, }, /* 192 */ { 1, 5, 12, 0, -1, 18432, 78, }, /* 193 */ - { 99, 6, 12, 0, 0, 28804, 94, }, /* 194 */ + { 100, 6, 12, 0, 0, 28804, 94, }, /* 194 */ { 1, 24, 12, 0, 0, 28804, 56, }, /* 195 */ - { 98, 2, 12, 0, 0, 18432, 0, }, /* 196 */ + { 99, 2, 12, 0, 0, 18432, 0, }, /* 196 */ { 1, 6, 12, 0, 0, 18432, 108, }, /* 197 */ { 1, 5, 12, 0, 130, 18432, 78, }, /* 198 */ - { 99, 21, 12, 0, 0, 28672, 110, }, /* 199 */ + { 100, 21, 12, 0, 0, 28672, 110, }, /* 199 */ { 1, 9, 12, 0, 116, 18432, 76, }, /* 200 */ { 1, 24, 12, 0, 0, 28672, 56, }, /* 201 */ { 1, 9, 12, 0, 38, 18432, 76, }, /* 202 */ - { 99, 21, 12, 0, 0, 28672, 112, }, /* 203 */ + { 100, 21, 12, 0, 0, 28672, 112, }, /* 203 */ { 1, 9, 12, 0, 37, 18432, 76, }, /* 204 */ { 1, 9, 12, 0, 64, 18432, 76, }, /* 205 */ { 1, 9, 12, 0, 63, 18432, 76, }, /* 206 */ @@ -832,7 +840,7 @@ const ucd_record PRIV(ucd_records)[] = { /* 18516 bytes, record size 12 */ { 2, 26, 12, 0, 0, 18432, 74, }, /* 279 */ { 2, 12, 3, 0, 0, 26760, 98, }, /* 280 */ { 2, 12, 3, 0, 0, 26764, 98, }, /* 281 */ - { 106, 12, 3, 0, 0, 26768, 98, }, /* 282 */ + { 107, 12, 3, 0, 0, 26768, 98, }, /* 282 */ { 2, 11, 3, 0, 0, 26624, 124, }, /* 283 */ { 2, 9, 12, 0, 15, 18432, 76, }, /* 284 */ { 2, 5, 12, 0, -15, 18432, 78, }, /* 285 */ @@ -847,1252 +855,1272 @@ const ucd_record PRIV(ucd_records)[] = { /* 18516 bytes, record size 12 */ { 3, 17, 12, 0, 0, 28672, 130, }, /* 294 */ { 3, 26, 12, 0, 0, 28672, 74, }, /* 295 */ { 3, 23, 12, 0, 0, 14336, 74, }, /* 296 */ - { 98, 2, 12, 0, 0, 34816, 0, }, /* 297 */ + { 99, 2, 12, 0, 0, 34816, 0, }, /* 297 */ { 4, 12, 3, 0, 0, 26624, 98, }, /* 298 */ - { 4, 12, 3, 0, 0, 26624, 104, }, /* 299 */ - { 4, 12, 3, 0, 0, 26624, 132, }, /* 300 */ - { 4, 17, 12, 0, 0, 34816, 130, }, /* 301 */ - { 4, 21, 12, 0, 0, 34816, 74, }, /* 302 */ - { 4, 21, 12, 0, 0, 34816, 110, }, /* 303 */ - { 4, 12, 3, 0, 0, 26624, 106, }, /* 304 */ - { 4, 7, 12, 0, 0, 34816, 84, }, /* 305 */ - { 4, 21, 12, 0, 0, 34816, 126, }, /* 306 */ - { 5, 1, 4, 0, 0, 2048, 134, }, /* 307 */ - { 99, 1, 4, 0, 0, 2048, 134, }, /* 308 */ - { 5, 25, 12, 0, 0, 28672, 122, }, /* 309 */ - { 5, 25, 12, 0, 0, 0, 122, }, /* 310 */ - { 5, 21, 12, 0, 0, 14336, 74, }, /* 311 */ - { 5, 23, 12, 0, 0, 0, 74, }, /* 312 */ - { 99, 21, 12, 0, 0, 8344, 110, }, /* 313 */ - { 5, 21, 12, 0, 0, 0, 74, }, /* 314 */ - { 5, 26, 12, 0, 0, 28672, 74, }, /* 315 */ - { 5, 12, 3, 0, 0, 26624, 106, }, /* 316 */ - { 99, 21, 12, 0, 0, 152, 110, }, /* 317 */ - { 5, 1, 2, 0, 0, 156, 136, }, /* 318 */ - { 5, 21, 12, 0, 0, 0, 128, }, /* 319 */ - { 99, 21, 12, 0, 0, 160, 128, }, /* 320 */ - { 5, 7, 12, 0, 0, 0, 84, }, /* 321 */ - { 99, 6, 12, 0, 0, 164, 138, }, /* 322 */ - { 106, 12, 3, 0, 0, 26792, 132, }, /* 323 */ - { 106, 12, 3, 0, 0, 26792, 106, }, /* 324 */ - { 106, 12, 3, 0, 0, 26792, 140, }, /* 325 */ - { 5, 12, 3, 0, 0, 26624, 132, }, /* 326 */ - { 5, 12, 3, 0, 0, 26624, 142, }, /* 327 */ - { 5, 13, 12, 0, 0, 2220, 144, }, /* 328 */ - { 5, 21, 12, 0, 0, 2048, 74, }, /* 329 */ - { 5, 7, 12, 0, 0, 0, 146, }, /* 330 */ - { 5, 21, 12, 0, 0, 176, 128, }, /* 331 */ - { 5, 12, 3, 0, 0, 26624, 140, }, /* 332 */ - { 5, 12, 3, 0, 0, 26624, 98, }, /* 333 */ - { 5, 6, 12, 0, 0, 0, 94, }, /* 334 */ - { 5, 13, 12, 0, 0, 10240, 144, }, /* 335 */ - { 5, 26, 12, 0, 0, 0, 74, }, /* 336 */ - { 6, 21, 12, 0, 0, 0, 128, }, /* 337 */ - { 6, 21, 12, 0, 0, 0, 110, }, /* 338 */ - { 6, 21, 12, 0, 0, 0, 74, }, /* 339 */ - { 98, 2, 12, 0, 0, 0, 0, }, /* 340 */ - { 6, 1, 4, 0, 0, 0, 134, }, /* 341 */ - { 6, 7, 12, 0, 0, 0, 84, }, /* 342 */ - { 6, 12, 3, 0, 0, 26624, 106, }, /* 343 */ - { 6, 12, 3, 0, 0, 26624, 132, }, /* 344 */ - { 6, 12, 3, 0, 0, 26624, 98, }, /* 345 */ - { 7, 7, 12, 0, 0, 0, 84, }, /* 346 */ - { 7, 12, 3, 0, 0, 26624, 132, }, /* 347 */ - { 48, 13, 12, 0, 0, 34816, 144, }, /* 348 */ - { 48, 7, 12, 0, 0, 34816, 84, }, /* 349 */ - { 48, 12, 3, 0, 0, 26624, 98, }, /* 350 */ - { 48, 6, 12, 0, 0, 34816, 94, }, /* 351 */ - { 48, 26, 12, 0, 0, 28672, 74, }, /* 352 */ - { 48, 21, 12, 0, 0, 28672, 74, }, /* 353 */ - { 48, 21, 12, 0, 0, 28672, 110, }, /* 354 */ - { 48, 21, 12, 0, 0, 28672, 128, }, /* 355 */ - { 48, 6, 12, 0, 0, 34816, 138, }, /* 356 */ - { 48, 12, 3, 0, 0, 26624, 104, }, /* 357 */ - { 48, 23, 12, 0, 0, 34816, 74, }, /* 358 */ - { 54, 7, 12, 0, 0, 34816, 84, }, /* 359 */ - { 54, 12, 3, 0, 0, 26624, 106, }, /* 360 */ - { 54, 12, 3, 0, 0, 26624, 98, }, /* 361 */ - { 54, 6, 12, 0, 0, 34816, 148, }, /* 362 */ - { 54, 12, 3, 0, 0, 26624, 104, }, /* 363 */ - { 54, 21, 12, 0, 0, 34816, 110, }, /* 364 */ - { 54, 21, 12, 0, 0, 34816, 74, }, /* 365 */ - { 54, 21, 12, 0, 0, 34816, 128, }, /* 366 */ - { 59, 7, 12, 0, 0, 34816, 84, }, /* 367 */ - { 59, 12, 3, 0, 0, 26624, 104, }, /* 368 */ - { 59, 21, 12, 0, 0, 34816, 110, }, /* 369 */ - { 5, 24, 12, 0, 0, 0, 126, }, /* 370 */ - { 5, 12, 3, 0, 0, 26624, 150, }, /* 371 */ - { 5, 12, 3, 0, 0, 26624, 104, }, /* 372 */ - { 5, 12, 3, 0, 0, 26624, 152, }, /* 373 */ - { 8, 12, 3, 0, 0, 26624, 106, }, /* 374 */ - { 8, 10, 5, 0, 0, 18432, 154, }, /* 375 */ - { 8, 7, 12, 0, 0, 18432, 84, }, /* 376 */ - { 8, 7, 12, 0, 0, 18432, 156, }, /* 377 */ - { 8, 12, 3, 0, 0, 26624, 98, }, /* 378 */ - { 8, 12, 3, 0, 0, 26624, 158, }, /* 379 */ - { 106, 12, 3, 0, 0, 26804, 98, }, /* 380 */ - { 106, 12, 3, 0, 0, 26808, 98, }, /* 381 */ - { 99, 21, 12, 0, 0, 18620, 128, }, /* 382 */ - { 99, 21, 12, 0, 0, 18624, 128, }, /* 383 */ - { 8, 13, 12, 0, 0, 18628, 144, }, /* 384 */ - { 8, 21, 12, 0, 0, 18432, 74, }, /* 385 */ - { 8, 6, 12, 0, 0, 18432, 94, }, /* 386 */ - { 9, 7, 12, 0, 0, 18432, 84, }, /* 387 */ - { 9, 12, 3, 0, 0, 26624, 106, }, /* 388 */ - { 9, 10, 5, 0, 0, 18432, 154, }, /* 389 */ - { 9, 7, 12, 0, 0, 18432, 156, }, /* 390 */ - { 9, 12, 3, 0, 0, 26624, 98, }, /* 391 */ - { 9, 10, 3, 0, 0, 18432, 160, }, /* 392 */ - { 9, 12, 3, 0, 0, 26624, 158, }, /* 393 */ - { 9, 13, 12, 0, 0, 18632, 144, }, /* 394 */ - { 9, 23, 12, 0, 0, 14336, 74, }, /* 395 */ - { 9, 15, 12, 0, 0, 18432, 74, }, /* 396 */ - { 9, 26, 12, 0, 0, 18432, 74, }, /* 397 */ - { 9, 21, 12, 0, 0, 18432, 74, }, /* 398 */ - { 9, 12, 3, 0, 0, 26624, 104, }, /* 399 */ - { 10, 12, 3, 0, 0, 26624, 106, }, /* 400 */ - { 10, 10, 5, 0, 0, 18432, 154, }, /* 401 */ - { 10, 7, 12, 0, 0, 18432, 84, }, /* 402 */ - { 10, 12, 3, 0, 0, 26624, 98, }, /* 403 */ - { 10, 12, 3, 0, 0, 26624, 158, }, /* 404 */ - { 10, 13, 12, 0, 0, 18636, 144, }, /* 405 */ - { 10, 12, 3, 0, 0, 26624, 162, }, /* 406 */ - { 10, 21, 12, 0, 0, 18432, 74, }, /* 407 */ - { 11, 12, 3, 0, 0, 26624, 106, }, /* 408 */ - { 11, 10, 5, 0, 0, 18432, 154, }, /* 409 */ - { 11, 7, 12, 0, 0, 18432, 84, }, /* 410 */ - { 11, 7, 12, 0, 0, 18432, 156, }, /* 411 */ - { 11, 12, 3, 0, 0, 26624, 98, }, /* 412 */ - { 11, 12, 3, 0, 0, 26624, 158, }, /* 413 */ - { 11, 13, 12, 0, 0, 18640, 144, }, /* 414 */ - { 11, 21, 12, 0, 0, 18432, 74, }, /* 415 */ - { 11, 23, 12, 0, 0, 14336, 74, }, /* 416 */ - { 11, 12, 3, 0, 0, 26624, 162, }, /* 417 */ - { 12, 12, 3, 0, 0, 26624, 106, }, /* 418 */ - { 12, 10, 5, 0, 0, 18432, 154, }, /* 419 */ - { 12, 7, 12, 0, 0, 18432, 84, }, /* 420 */ - { 12, 7, 12, 0, 0, 18432, 156, }, /* 421 */ - { 12, 12, 3, 0, 0, 26624, 98, }, /* 422 */ - { 12, 10, 3, 0, 0, 18432, 160, }, /* 423 */ - { 12, 12, 3, 0, 0, 26624, 158, }, /* 424 */ - { 12, 12, 3, 0, 0, 26624, 164, }, /* 425 */ - { 12, 13, 12, 0, 0, 18432, 144, }, /* 426 */ - { 12, 26, 12, 0, 0, 18432, 74, }, /* 427 */ - { 12, 15, 12, 0, 0, 18432, 74, }, /* 428 */ - { 13, 12, 3, 0, 0, 26624, 106, }, /* 429 */ - { 13, 7, 12, 0, 0, 18432, 84, }, /* 430 */ - { 13, 10, 3, 0, 0, 18432, 160, }, /* 431 */ - { 13, 10, 5, 0, 0, 18432, 154, }, /* 432 */ - { 13, 12, 3, 0, 0, 26624, 158, }, /* 433 */ - { 13, 13, 12, 0, 0, 18644, 144, }, /* 434 */ - { 13, 15, 12, 0, 0, 18644, 74, }, /* 435 */ - { 13, 26, 12, 0, 0, 28884, 74, }, /* 436 */ - { 13, 26, 12, 0, 0, 28672, 74, }, /* 437 */ - { 13, 23, 12, 0, 0, 14336, 74, }, /* 438 */ - { 14, 12, 3, 0, 0, 26624, 106, }, /* 439 */ - { 14, 10, 5, 0, 0, 18432, 154, }, /* 440 */ - { 14, 7, 12, 0, 0, 18432, 84, }, /* 441 */ - { 14, 7, 12, 0, 0, 18432, 156, }, /* 442 */ - { 14, 12, 3, 0, 0, 26624, 98, }, /* 443 */ - { 14, 12, 3, 0, 0, 26624, 158, }, /* 444 */ - { 14, 13, 12, 0, 0, 18432, 144, }, /* 445 */ - { 14, 21, 12, 0, 0, 18432, 74, }, /* 446 */ - { 14, 15, 12, 0, 0, 28672, 74, }, /* 447 */ - { 14, 26, 12, 0, 0, 18432, 74, }, /* 448 */ - { 15, 7, 12, 0, 0, 18432, 84, }, /* 449 */ - { 15, 12, 3, 0, 0, 26624, 106, }, /* 450 */ - { 15, 10, 5, 0, 0, 18432, 154, }, /* 451 */ - { 15, 21, 12, 0, 0, 18432, 74, }, /* 452 */ - { 15, 12, 3, 0, 0, 26624, 98, }, /* 453 */ - { 15, 12, 3, 0, 0, 18432, 106, }, /* 454 */ - { 15, 10, 3, 0, 0, 18432, 160, }, /* 455 */ - { 15, 12, 3, 0, 0, 26624, 158, }, /* 456 */ - { 15, 13, 12, 0, 0, 18648, 144, }, /* 457 */ - { 16, 12, 3, 0, 0, 26624, 106, }, /* 458 */ - { 16, 10, 5, 0, 0, 18432, 154, }, /* 459 */ - { 16, 7, 12, 0, 0, 18432, 84, }, /* 460 */ - { 16, 7, 12, 0, 0, 18432, 156, }, /* 461 */ - { 16, 12, 3, 0, 0, 26624, 158, }, /* 462 */ - { 16, 10, 3, 0, 0, 18432, 160, }, /* 463 */ - { 16, 7, 4, 0, 0, 18432, 84, }, /* 464 */ - { 16, 26, 12, 0, 0, 18432, 74, }, /* 465 */ - { 16, 15, 12, 0, 0, 18432, 74, }, /* 466 */ - { 16, 13, 12, 0, 0, 18432, 144, }, /* 467 */ - { 17, 12, 3, 0, 0, 26624, 106, }, /* 468 */ - { 17, 10, 5, 0, 0, 18432, 154, }, /* 469 */ - { 17, 7, 12, 0, 0, 18432, 84, }, /* 470 */ - { 17, 12, 3, 0, 0, 26624, 158, }, /* 471 */ - { 17, 10, 3, 0, 0, 18432, 160, }, /* 472 */ - { 17, 13, 12, 0, 0, 18432, 144, }, /* 473 */ - { 17, 21, 12, 0, 0, 18432, 74, }, /* 474 */ - { 18, 7, 12, 0, 0, 18432, 84, }, /* 475 */ - { 18, 12, 3, 0, 0, 26624, 106, }, /* 476 */ - { 18, 7, 5, 0, 0, 18432, 166, }, /* 477 */ - { 18, 12, 3, 0, 0, 26624, 168, }, /* 478 */ - { 99, 23, 12, 0, 0, 14336, 74, }, /* 479 */ - { 18, 7, 12, 0, 0, 18432, 170, }, /* 480 */ - { 18, 6, 12, 0, 0, 18432, 138, }, /* 481 */ - { 18, 12, 3, 0, 0, 26624, 98, }, /* 482 */ - { 18, 21, 12, 0, 0, 18432, 74, }, /* 483 */ - { 18, 13, 12, 0, 0, 18432, 144, }, /* 484 */ - { 18, 21, 12, 0, 0, 18432, 110, }, /* 485 */ - { 100, 7, 12, 0, 0, 18432, 84, }, /* 486 */ - { 100, 12, 3, 0, 0, 26624, 106, }, /* 487 */ - { 100, 7, 5, 0, 0, 18432, 166, }, /* 488 */ - { 100, 12, 3, 0, 0, 26624, 158, }, /* 489 */ - { 100, 7, 12, 0, 0, 18432, 170, }, /* 490 */ - { 100, 6, 12, 0, 0, 18432, 138, }, /* 491 */ - { 100, 12, 3, 0, 0, 26624, 98, }, /* 492 */ - { 100, 12, 3, 0, 0, 26624, 104, }, /* 493 */ - { 100, 13, 12, 0, 0, 18432, 144, }, /* 494 */ - { 19, 7, 12, 0, 0, 18432, 84, }, /* 495 */ - { 19, 26, 12, 0, 0, 18432, 74, }, /* 496 */ - { 19, 21, 12, 0, 0, 18432, 74, }, /* 497 */ - { 19, 21, 12, 0, 0, 18432, 110, }, /* 498 */ - { 19, 12, 3, 0, 0, 26624, 98, }, /* 499 */ - { 19, 13, 12, 0, 0, 18432, 144, }, /* 500 */ - { 19, 15, 12, 0, 0, 18432, 74, }, /* 501 */ - { 19, 22, 12, 0, 0, 28672, 172, }, /* 502 */ - { 19, 18, 12, 0, 0, 28672, 172, }, /* 503 */ - { 19, 10, 5, 0, 0, 18432, 174, }, /* 504 */ - { 19, 12, 3, 0, 0, 26624, 106, }, /* 505 */ - { 19, 12, 3, 0, 0, 26624, 176, }, /* 506 */ - { 19, 10, 5, 0, 0, 18432, 154, }, /* 507 */ - { 19, 12, 3, 0, 0, 26624, 132, }, /* 508 */ - { 19, 12, 3, 0, 0, 26624, 158, }, /* 509 */ - { 99, 26, 12, 0, 0, 18432, 74, }, /* 510 */ - { 20, 7, 12, 0, 0, 18432, 84, }, /* 511 */ - { 20, 10, 12, 0, 0, 18432, 154, }, /* 512 */ - { 20, 12, 3, 0, 0, 26624, 106, }, /* 513 */ - { 20, 10, 5, 0, 0, 18432, 154, }, /* 514 */ - { 20, 12, 3, 0, 0, 26624, 98, }, /* 515 */ - { 20, 12, 3, 0, 0, 26624, 158, }, /* 516 */ - { 20, 13, 12, 0, 0, 18652, 144, }, /* 517 */ - { 20, 21, 12, 0, 0, 18432, 128, }, /* 518 */ - { 20, 21, 12, 0, 0, 18432, 74, }, /* 519 */ - { 20, 10, 12, 0, 0, 18432, 178, }, /* 520 */ - { 20, 12, 3, 0, 0, 26624, 132, }, /* 521 */ - { 20, 13, 12, 0, 0, 18432, 144, }, /* 522 */ - { 20, 26, 12, 0, 0, 18432, 74, }, /* 523 */ - { 21, 9, 12, 0, 7264, 18432, 76, }, /* 524 */ - { 21, 5, 12, 0, 3008, 18432, 180, }, /* 525 */ - { 99, 21, 12, 0, 0, 18656, 74, }, /* 526 */ - { 21, 6, 12, 0, 0, 18432, 182, }, /* 527 */ - { 22, 7, 6, 0, 0, 18432, 84, }, /* 528 */ - { 22, 7, 6, 0, 0, 18432, 184, }, /* 529 */ - { 22, 7, 7, 0, 0, 18432, 184, }, /* 530 */ - { 22, 7, 7, 0, 0, 18432, 84, }, /* 531 */ - { 22, 7, 8, 0, 0, 18432, 84, }, /* 532 */ - { 23, 7, 12, 0, 0, 18432, 84, }, /* 533 */ - { 23, 12, 3, 0, 0, 26624, 98, }, /* 534 */ - { 23, 21, 12, 0, 0, 18432, 74, }, /* 535 */ - { 23, 21, 12, 0, 0, 18432, 110, }, /* 536 */ - { 23, 21, 12, 0, 0, 18432, 128, }, /* 537 */ - { 23, 15, 12, 0, 0, 18432, 144, }, /* 538 */ - { 23, 15, 12, 0, 0, 18432, 74, }, /* 539 */ - { 23, 26, 12, 0, 0, 28672, 74, }, /* 540 */ - { 24, 9, 12, 0, 38864, 18432, 186, }, /* 541 */ - { 24, 9, 12, 0, 8, 18432, 186, }, /* 542 */ - { 24, 5, 12, 0, -8, 18432, 70, }, /* 543 */ - { 101, 17, 12, 0, 0, 28672, 130, }, /* 544 */ - { 101, 7, 12, 0, 0, 18432, 84, }, /* 545 */ - { 101, 26, 12, 0, 0, 18432, 74, }, /* 546 */ - { 101, 21, 12, 0, 0, 18432, 128, }, /* 547 */ - { 102, 29, 12, 0, 0, 45056, 52, }, /* 548 */ - { 102, 7, 12, 0, 0, 18432, 84, }, /* 549 */ - { 102, 22, 12, 0, 0, 28672, 172, }, /* 550 */ - { 102, 18, 12, 0, 0, 28672, 172, }, /* 551 */ - { 25, 7, 12, 0, 0, 18432, 84, }, /* 552 */ - { 99, 21, 12, 0, 0, 18660, 110, }, /* 553 */ - { 25, 14, 12, 0, 0, 18432, 84, }, /* 554 */ - { 33, 7, 12, 0, 0, 18432, 84, }, /* 555 */ - { 33, 12, 3, 0, 0, 26624, 106, }, /* 556 */ - { 33, 12, 3, 0, 0, 26624, 158, }, /* 557 */ - { 33, 10, 3, 0, 0, 18432, 188, }, /* 558 */ - { 34, 7, 12, 0, 0, 18432, 84, }, /* 559 */ - { 34, 12, 3, 0, 0, 26624, 106, }, /* 560 */ - { 34, 10, 3, 0, 0, 18432, 188, }, /* 561 */ - { 99, 21, 12, 0, 0, 18664, 128, }, /* 562 */ - { 35, 7, 12, 0, 0, 18432, 84, }, /* 563 */ - { 35, 12, 3, 0, 0, 26624, 106, }, /* 564 */ - { 36, 7, 12, 0, 0, 18432, 84, }, /* 565 */ - { 36, 12, 3, 0, 0, 26624, 106, }, /* 566 */ - { 103, 7, 12, 0, 0, 18432, 84, }, /* 567 */ - { 103, 7, 12, 0, 0, 18432, 146, }, /* 568 */ - { 103, 12, 3, 0, 0, 26624, 102, }, /* 569 */ - { 103, 10, 5, 0, 0, 18432, 154, }, /* 570 */ - { 103, 12, 3, 0, 0, 26624, 106, }, /* 571 */ - { 103, 12, 3, 0, 0, 26624, 98, }, /* 572 */ - { 103, 12, 3, 0, 0, 26624, 158, }, /* 573 */ - { 103, 21, 12, 0, 0, 18432, 128, }, /* 574 */ - { 103, 21, 12, 0, 0, 18432, 110, }, /* 575 */ - { 103, 6, 12, 0, 0, 18432, 148, }, /* 576 */ - { 103, 21, 12, 0, 0, 18432, 74, }, /* 577 */ - { 103, 23, 12, 0, 0, 14336, 74, }, /* 578 */ - { 103, 13, 12, 0, 0, 18432, 144, }, /* 579 */ - { 103, 15, 12, 0, 0, 28672, 74, }, /* 580 */ - { 26, 21, 12, 0, 0, 28672, 74, }, /* 581 */ - { 99, 21, 12, 0, 0, 28908, 110, }, /* 582 */ - { 99, 21, 12, 0, 0, 28908, 128, }, /* 583 */ - { 26, 21, 12, 0, 0, 28672, 110, }, /* 584 */ - { 26, 17, 12, 0, 0, 28672, 130, }, /* 585 */ - { 26, 21, 12, 0, 0, 28672, 128, }, /* 586 */ - { 26, 21, 12, 0, 0, 28672, 190, }, /* 587 */ - { 26, 12, 3, 0, 0, 26624, 192, }, /* 588 */ - { 26, 1, 2, 0, 0, 6144, 66, }, /* 589 */ - { 26, 13, 12, 0, 0, 18432, 144, }, /* 590 */ - { 26, 7, 12, 0, 0, 18432, 84, }, /* 591 */ - { 26, 6, 12, 0, 0, 18432, 138, }, /* 592 */ - { 26, 12, 3, 0, 0, 26624, 194, }, /* 593 */ - { 26, 12, 3, 0, 0, 26624, 106, }, /* 594 */ - { 37, 7, 12, 0, 0, 18432, 84, }, /* 595 */ - { 37, 12, 3, 0, 0, 26624, 106, }, /* 596 */ - { 37, 10, 5, 0, 0, 18432, 154, }, /* 597 */ - { 37, 12, 3, 0, 0, 26624, 98, }, /* 598 */ - { 37, 26, 12, 0, 0, 28672, 74, }, /* 599 */ - { 37, 21, 12, 0, 0, 28672, 128, }, /* 600 */ - { 37, 13, 12, 0, 0, 18432, 144, }, /* 601 */ - { 38, 7, 12, 0, 0, 18432, 84, }, /* 602 */ - { 110, 7, 12, 0, 0, 18432, 84, }, /* 603 */ - { 110, 7, 12, 0, 0, 18432, 170, }, /* 604 */ - { 110, 13, 12, 0, 0, 18432, 144, }, /* 605 */ - { 110, 15, 12, 0, 0, 18432, 144, }, /* 606 */ - { 110, 26, 12, 0, 0, 28672, 74, }, /* 607 */ - { 103, 26, 12, 0, 0, 28672, 74, }, /* 608 */ - { 42, 7, 12, 0, 0, 18432, 84, }, /* 609 */ - { 42, 12, 3, 0, 0, 26624, 106, }, /* 610 */ - { 42, 10, 5, 0, 0, 18432, 154, }, /* 611 */ - { 42, 21, 12, 0, 0, 18432, 74, }, /* 612 */ - { 123, 7, 12, 0, 0, 18432, 84, }, /* 613 */ - { 123, 10, 5, 0, 0, 18432, 154, }, /* 614 */ - { 123, 12, 3, 0, 0, 26624, 106, }, /* 615 */ - { 123, 12, 3, 0, 0, 26624, 158, }, /* 616 */ - { 123, 10, 12, 0, 0, 18432, 154, }, /* 617 */ - { 123, 12, 3, 0, 0, 26624, 98, }, /* 618 */ - { 123, 13, 12, 0, 0, 18432, 144, }, /* 619 */ - { 123, 21, 12, 0, 0, 18432, 74, }, /* 620 */ - { 123, 6, 12, 0, 0, 18432, 138, }, /* 621 */ - { 123, 21, 12, 0, 0, 18432, 128, }, /* 622 */ - { 106, 11, 3, 0, 0, 26624, 196, }, /* 623 */ - { 106, 12, 3, 0, 0, 26624, 106, }, /* 624 */ - { 113, 12, 3, 0, 0, 26624, 106, }, /* 625 */ - { 113, 10, 5, 0, 0, 18432, 154, }, /* 626 */ - { 113, 7, 12, 0, 0, 18432, 84, }, /* 627 */ - { 113, 12, 3, 0, 0, 26624, 98, }, /* 628 */ - { 113, 10, 3, 0, 0, 18432, 160, }, /* 629 */ - { 113, 10, 3, 0, 0, 18432, 188, }, /* 630 */ - { 113, 21, 12, 0, 0, 18432, 128, }, /* 631 */ - { 113, 13, 12, 0, 0, 18432, 144, }, /* 632 */ - { 113, 21, 12, 0, 0, 18432, 74, }, /* 633 */ - { 113, 21, 12, 0, 0, 18432, 110, }, /* 634 */ - { 113, 26, 12, 0, 0, 18432, 74, }, /* 635 */ - { 116, 12, 3, 0, 0, 26624, 106, }, /* 636 */ - { 116, 10, 5, 0, 0, 18432, 154, }, /* 637 */ - { 116, 7, 12, 0, 0, 18432, 84, }, /* 638 */ - { 116, 10, 3, 0, 0, 18432, 188, }, /* 639 */ - { 116, 12, 3, 0, 0, 26624, 158, }, /* 640 */ - { 116, 13, 12, 0, 0, 18432, 144, }, /* 641 */ - { 132, 7, 12, 0, 0, 18432, 84, }, /* 642 */ - { 132, 12, 3, 0, 0, 26624, 98, }, /* 643 */ - { 132, 10, 5, 0, 0, 18432, 154, }, /* 644 */ - { 132, 12, 3, 0, 0, 26624, 106, }, /* 645 */ - { 132, 10, 3, 0, 0, 18432, 188, }, /* 646 */ - { 132, 21, 12, 0, 0, 18432, 74, }, /* 647 */ - { 117, 7, 12, 0, 0, 18432, 84, }, /* 648 */ - { 117, 10, 5, 0, 0, 18432, 154, }, /* 649 */ - { 117, 12, 3, 0, 0, 26624, 106, }, /* 650 */ - { 117, 12, 3, 0, 0, 26624, 198, }, /* 651 */ - { 117, 12, 3, 0, 0, 26624, 98, }, /* 652 */ - { 117, 21, 12, 0, 0, 18432, 128, }, /* 653 */ - { 117, 21, 12, 0, 0, 18432, 110, }, /* 654 */ - { 117, 13, 12, 0, 0, 18432, 144, }, /* 655 */ + { 4, 12, 3, 0, 0, 26624, 132, }, /* 299 */ + { 4, 17, 12, 0, 0, 34816, 130, }, /* 300 */ + { 4, 21, 12, 0, 0, 34816, 74, }, /* 301 */ + { 4, 21, 12, 0, 0, 34816, 110, }, /* 302 */ + { 4, 7, 12, 0, 0, 34816, 84, }, /* 303 */ + { 4, 21, 12, 0, 0, 34816, 126, }, /* 304 */ + { 5, 1, 4, 0, 0, 2048, 134, }, /* 305 */ + { 100, 1, 4, 0, 0, 2048, 134, }, /* 306 */ + { 5, 25, 12, 0, 0, 28672, 122, }, /* 307 */ + { 5, 25, 12, 0, 0, 0, 122, }, /* 308 */ + { 5, 21, 12, 0, 0, 14336, 74, }, /* 309 */ + { 5, 23, 12, 0, 0, 0, 74, }, /* 310 */ + { 100, 21, 12, 0, 0, 8344, 110, }, /* 311 */ + { 5, 21, 12, 0, 0, 0, 74, }, /* 312 */ + { 5, 26, 12, 0, 0, 28672, 74, }, /* 313 */ + { 5, 12, 3, 0, 0, 26624, 106, }, /* 314 */ + { 100, 21, 12, 0, 0, 152, 110, }, /* 315 */ + { 5, 1, 2, 0, 0, 156, 136, }, /* 316 */ + { 5, 21, 12, 0, 0, 0, 128, }, /* 317 */ + { 100, 21, 12, 0, 0, 160, 128, }, /* 318 */ + { 5, 7, 12, 0, 0, 0, 84, }, /* 319 */ + { 100, 6, 12, 0, 0, 164, 138, }, /* 320 */ + { 107, 12, 3, 0, 0, 26792, 132, }, /* 321 */ + { 107, 12, 3, 0, 0, 26792, 106, }, /* 322 */ + { 107, 12, 3, 0, 0, 26792, 140, }, /* 323 */ + { 5, 12, 3, 0, 0, 26624, 132, }, /* 324 */ + { 5, 12, 3, 0, 0, 26624, 142, }, /* 325 */ + { 5, 13, 12, 0, 0, 2220, 144, }, /* 326 */ + { 5, 21, 12, 0, 0, 2048, 74, }, /* 327 */ + { 5, 7, 12, 0, 0, 0, 146, }, /* 328 */ + { 5, 21, 12, 0, 0, 176, 128, }, /* 329 */ + { 5, 12, 3, 0, 0, 26624, 140, }, /* 330 */ + { 5, 12, 3, 0, 0, 26624, 98, }, /* 331 */ + { 5, 6, 12, 0, 0, 0, 94, }, /* 332 */ + { 5, 13, 12, 0, 0, 10240, 144, }, /* 333 */ + { 5, 26, 12, 0, 0, 0, 74, }, /* 334 */ + { 6, 21, 12, 0, 0, 0, 128, }, /* 335 */ + { 6, 21, 12, 0, 0, 0, 110, }, /* 336 */ + { 6, 21, 12, 0, 0, 0, 74, }, /* 337 */ + { 99, 2, 12, 0, 0, 0, 0, }, /* 338 */ + { 6, 1, 4, 0, 0, 0, 134, }, /* 339 */ + { 6, 7, 12, 0, 0, 0, 84, }, /* 340 */ + { 6, 12, 3, 0, 0, 26624, 106, }, /* 341 */ + { 6, 12, 3, 0, 0, 26624, 132, }, /* 342 */ + { 6, 12, 3, 0, 0, 26624, 98, }, /* 343 */ + { 7, 7, 12, 0, 0, 0, 84, }, /* 344 */ + { 7, 12, 3, 0, 0, 26624, 132, }, /* 345 */ + { 48, 13, 12, 0, 0, 34816, 144, }, /* 346 */ + { 48, 7, 12, 0, 0, 34816, 84, }, /* 347 */ + { 48, 12, 3, 0, 0, 26624, 98, }, /* 348 */ + { 48, 6, 12, 0, 0, 34816, 94, }, /* 349 */ + { 48, 26, 12, 0, 0, 28672, 74, }, /* 350 */ + { 48, 21, 12, 0, 0, 28672, 74, }, /* 351 */ + { 48, 21, 12, 0, 0, 28672, 110, }, /* 352 */ + { 48, 21, 12, 0, 0, 28672, 128, }, /* 353 */ + { 48, 6, 12, 0, 0, 34816, 138, }, /* 354 */ + { 48, 12, 3, 0, 0, 26624, 104, }, /* 355 */ + { 48, 23, 12, 0, 0, 34816, 74, }, /* 356 */ + { 54, 7, 12, 0, 0, 34816, 84, }, /* 357 */ + { 54, 12, 3, 0, 0, 26624, 106, }, /* 358 */ + { 54, 12, 3, 0, 0, 26624, 98, }, /* 359 */ + { 54, 6, 12, 0, 0, 34816, 148, }, /* 360 */ + { 54, 12, 3, 0, 0, 26624, 104, }, /* 361 */ + { 54, 21, 12, 0, 0, 34816, 110, }, /* 362 */ + { 54, 21, 12, 0, 0, 34816, 74, }, /* 363 */ + { 54, 21, 12, 0, 0, 34816, 128, }, /* 364 */ + { 59, 7, 12, 0, 0, 34816, 84, }, /* 365 */ + { 59, 12, 3, 0, 0, 26624, 104, }, /* 366 */ + { 59, 21, 12, 0, 0, 34816, 110, }, /* 367 */ + { 5, 24, 12, 0, 0, 0, 126, }, /* 368 */ + { 5, 12, 3, 0, 0, 26624, 150, }, /* 369 */ + { 5, 12, 3, 0, 0, 26624, 104, }, /* 370 */ + { 5, 12, 3, 0, 0, 26624, 152, }, /* 371 */ + { 8, 12, 3, 0, 0, 26624, 106, }, /* 372 */ + { 8, 10, 5, 0, 0, 18432, 154, }, /* 373 */ + { 8, 7, 12, 0, 0, 18432, 84, }, /* 374 */ + { 8, 7, 12, 0, 0, 18432, 156, }, /* 375 */ + { 8, 12, 3, 0, 0, 26624, 98, }, /* 376 */ + { 8, 12, 3, 0, 0, 26624, 158, }, /* 377 */ + { 107, 12, 3, 0, 0, 26804, 98, }, /* 378 */ + { 107, 12, 3, 0, 0, 26808, 98, }, /* 379 */ + { 100, 21, 12, 0, 0, 18620, 128, }, /* 380 */ + { 100, 21, 12, 0, 0, 18624, 128, }, /* 381 */ + { 8, 13, 12, 0, 0, 18628, 144, }, /* 382 */ + { 8, 21, 12, 0, 0, 18432, 74, }, /* 383 */ + { 8, 6, 12, 0, 0, 18432, 94, }, /* 384 */ + { 9, 7, 12, 0, 0, 18432, 84, }, /* 385 */ + { 9, 12, 3, 0, 0, 26624, 106, }, /* 386 */ + { 9, 10, 5, 0, 0, 18432, 154, }, /* 387 */ + { 9, 7, 12, 0, 0, 18432, 156, }, /* 388 */ + { 9, 12, 3, 0, 0, 26624, 98, }, /* 389 */ + { 9, 10, 3, 0, 0, 18432, 160, }, /* 390 */ + { 9, 12, 3, 0, 0, 26624, 158, }, /* 391 */ + { 9, 13, 12, 0, 0, 18632, 144, }, /* 392 */ + { 9, 23, 12, 0, 0, 14336, 74, }, /* 393 */ + { 9, 15, 12, 0, 0, 18432, 74, }, /* 394 */ + { 9, 26, 12, 0, 0, 18432, 74, }, /* 395 */ + { 9, 21, 12, 0, 0, 18432, 74, }, /* 396 */ + { 9, 12, 3, 0, 0, 26624, 104, }, /* 397 */ + { 10, 12, 3, 0, 0, 26624, 106, }, /* 398 */ + { 10, 10, 5, 0, 0, 18432, 154, }, /* 399 */ + { 10, 7, 12, 0, 0, 18432, 84, }, /* 400 */ + { 10, 12, 3, 0, 0, 26624, 98, }, /* 401 */ + { 10, 12, 3, 0, 0, 26624, 158, }, /* 402 */ + { 10, 13, 12, 0, 0, 18636, 144, }, /* 403 */ + { 10, 12, 3, 0, 0, 26624, 162, }, /* 404 */ + { 10, 21, 12, 0, 0, 18432, 74, }, /* 405 */ + { 11, 12, 3, 0, 0, 26624, 106, }, /* 406 */ + { 11, 10, 5, 0, 0, 18432, 154, }, /* 407 */ + { 11, 7, 12, 0, 0, 18432, 84, }, /* 408 */ + { 11, 7, 12, 0, 0, 18432, 156, }, /* 409 */ + { 11, 12, 3, 0, 0, 26624, 98, }, /* 410 */ + { 11, 12, 3, 0, 0, 26624, 158, }, /* 411 */ + { 11, 13, 12, 0, 0, 18640, 144, }, /* 412 */ + { 11, 21, 12, 0, 0, 18432, 74, }, /* 413 */ + { 11, 23, 12, 0, 0, 14336, 74, }, /* 414 */ + { 11, 12, 3, 0, 0, 26624, 162, }, /* 415 */ + { 12, 12, 3, 0, 0, 26624, 106, }, /* 416 */ + { 12, 10, 5, 0, 0, 18432, 154, }, /* 417 */ + { 12, 7, 12, 0, 0, 18432, 84, }, /* 418 */ + { 12, 7, 12, 0, 0, 18432, 156, }, /* 419 */ + { 12, 12, 3, 0, 0, 26624, 98, }, /* 420 */ + { 12, 10, 3, 0, 0, 18432, 160, }, /* 421 */ + { 12, 12, 3, 0, 0, 26624, 158, }, /* 422 */ + { 12, 12, 3, 0, 0, 26624, 164, }, /* 423 */ + { 12, 13, 12, 0, 0, 18432, 144, }, /* 424 */ + { 12, 26, 12, 0, 0, 18432, 74, }, /* 425 */ + { 12, 15, 12, 0, 0, 18432, 74, }, /* 426 */ + { 13, 12, 3, 0, 0, 26624, 106, }, /* 427 */ + { 13, 7, 12, 0, 0, 18432, 84, }, /* 428 */ + { 13, 10, 3, 0, 0, 18432, 160, }, /* 429 */ + { 13, 10, 5, 0, 0, 18432, 154, }, /* 430 */ + { 13, 12, 3, 0, 0, 26624, 158, }, /* 431 */ + { 13, 13, 12, 0, 0, 18644, 144, }, /* 432 */ + { 13, 15, 12, 0, 0, 18644, 74, }, /* 433 */ + { 13, 26, 12, 0, 0, 28884, 74, }, /* 434 */ + { 13, 26, 12, 0, 0, 28672, 74, }, /* 435 */ + { 13, 23, 12, 0, 0, 14336, 74, }, /* 436 */ + { 14, 12, 3, 0, 0, 26624, 106, }, /* 437 */ + { 14, 10, 5, 0, 0, 18432, 154, }, /* 438 */ + { 14, 7, 12, 0, 0, 18432, 84, }, /* 439 */ + { 14, 7, 12, 0, 0, 18432, 156, }, /* 440 */ + { 14, 12, 3, 0, 0, 26624, 98, }, /* 441 */ + { 14, 12, 3, 0, 0, 26624, 158, }, /* 442 */ + { 14, 13, 12, 0, 0, 18432, 144, }, /* 443 */ + { 14, 21, 12, 0, 0, 18432, 74, }, /* 444 */ + { 14, 15, 12, 0, 0, 28672, 74, }, /* 445 */ + { 14, 26, 12, 0, 0, 18432, 74, }, /* 446 */ + { 15, 7, 12, 0, 0, 18432, 84, }, /* 447 */ + { 15, 12, 3, 0, 0, 26624, 106, }, /* 448 */ + { 15, 10, 5, 0, 0, 18432, 154, }, /* 449 */ + { 15, 21, 12, 0, 0, 18432, 74, }, /* 450 */ + { 15, 12, 3, 0, 0, 26624, 98, }, /* 451 */ + { 15, 12, 3, 0, 0, 18432, 106, }, /* 452 */ + { 15, 10, 3, 0, 0, 18432, 160, }, /* 453 */ + { 15, 12, 3, 0, 0, 26624, 158, }, /* 454 */ + { 15, 13, 12, 0, 0, 18648, 144, }, /* 455 */ + { 16, 12, 3, 0, 0, 26624, 106, }, /* 456 */ + { 16, 10, 5, 0, 0, 18432, 154, }, /* 457 */ + { 16, 7, 12, 0, 0, 18432, 84, }, /* 458 */ + { 16, 7, 12, 0, 0, 18432, 156, }, /* 459 */ + { 16, 12, 3, 0, 0, 26624, 158, }, /* 460 */ + { 16, 10, 3, 0, 0, 18432, 160, }, /* 461 */ + { 16, 7, 4, 0, 0, 18432, 84, }, /* 462 */ + { 16, 26, 12, 0, 0, 18432, 74, }, /* 463 */ + { 16, 15, 12, 0, 0, 18432, 74, }, /* 464 */ + { 16, 13, 12, 0, 0, 18432, 144, }, /* 465 */ + { 17, 12, 3, 0, 0, 26624, 106, }, /* 466 */ + { 17, 10, 5, 0, 0, 18432, 154, }, /* 467 */ + { 17, 7, 12, 0, 0, 18432, 84, }, /* 468 */ + { 17, 12, 3, 0, 0, 26624, 158, }, /* 469 */ + { 17, 10, 3, 0, 0, 18432, 160, }, /* 470 */ + { 17, 13, 12, 0, 0, 18432, 144, }, /* 471 */ + { 17, 21, 12, 0, 0, 18432, 74, }, /* 472 */ + { 18, 7, 12, 0, 0, 18432, 84, }, /* 473 */ + { 18, 12, 3, 0, 0, 26624, 106, }, /* 474 */ + { 18, 7, 5, 0, 0, 18432, 166, }, /* 475 */ + { 18, 12, 3, 0, 0, 26624, 168, }, /* 476 */ + { 100, 23, 12, 0, 0, 14336, 74, }, /* 477 */ + { 18, 7, 12, 0, 0, 18432, 170, }, /* 478 */ + { 18, 6, 12, 0, 0, 18432, 138, }, /* 479 */ + { 18, 12, 3, 0, 0, 26624, 98, }, /* 480 */ + { 18, 21, 12, 0, 0, 18432, 74, }, /* 481 */ + { 18, 13, 12, 0, 0, 18432, 144, }, /* 482 */ + { 18, 21, 12, 0, 0, 18432, 110, }, /* 483 */ + { 101, 7, 12, 0, 0, 18432, 84, }, /* 484 */ + { 101, 12, 3, 0, 0, 26624, 106, }, /* 485 */ + { 101, 7, 5, 0, 0, 18432, 166, }, /* 486 */ + { 101, 12, 3, 0, 0, 26624, 158, }, /* 487 */ + { 101, 7, 12, 0, 0, 18432, 170, }, /* 488 */ + { 101, 6, 12, 0, 0, 18432, 138, }, /* 489 */ + { 101, 12, 3, 0, 0, 26624, 98, }, /* 490 */ + { 101, 12, 3, 0, 0, 26624, 104, }, /* 491 */ + { 101, 13, 12, 0, 0, 18432, 144, }, /* 492 */ + { 19, 7, 12, 0, 0, 18432, 84, }, /* 493 */ + { 19, 26, 12, 0, 0, 18432, 74, }, /* 494 */ + { 19, 21, 12, 0, 0, 18432, 74, }, /* 495 */ + { 19, 21, 12, 0, 0, 18432, 110, }, /* 496 */ + { 19, 12, 3, 0, 0, 26624, 98, }, /* 497 */ + { 19, 13, 12, 0, 0, 18432, 144, }, /* 498 */ + { 19, 15, 12, 0, 0, 18432, 74, }, /* 499 */ + { 19, 22, 12, 0, 0, 28672, 172, }, /* 500 */ + { 19, 18, 12, 0, 0, 28672, 172, }, /* 501 */ + { 19, 10, 5, 0, 0, 18432, 174, }, /* 502 */ + { 19, 12, 3, 0, 0, 26624, 106, }, /* 503 */ + { 19, 12, 3, 0, 0, 26624, 176, }, /* 504 */ + { 19, 10, 5, 0, 0, 18432, 154, }, /* 505 */ + { 19, 12, 3, 0, 0, 26624, 132, }, /* 506 */ + { 19, 12, 3, 0, 0, 26624, 158, }, /* 507 */ + { 100, 26, 12, 0, 0, 18432, 74, }, /* 508 */ + { 20, 7, 12, 0, 0, 18432, 156, }, /* 509 */ + { 20, 10, 12, 0, 0, 18432, 154, }, /* 510 */ + { 20, 12, 3, 0, 0, 26624, 106, }, /* 511 */ + { 20, 10, 5, 0, 0, 18432, 154, }, /* 512 */ + { 20, 12, 3, 0, 0, 26624, 98, }, /* 513 */ + { 20, 12, 3, 0, 0, 26624, 158, }, /* 514 */ + { 20, 13, 12, 0, 0, 18652, 144, }, /* 515 */ + { 20, 21, 12, 0, 0, 18432, 128, }, /* 516 */ + { 20, 21, 12, 0, 0, 18432, 74, }, /* 517 */ + { 20, 10, 12, 0, 0, 18432, 178, }, /* 518 */ + { 20, 12, 3, 0, 0, 26624, 132, }, /* 519 */ + { 20, 13, 12, 0, 0, 18432, 144, }, /* 520 */ + { 20, 26, 12, 0, 0, 18432, 74, }, /* 521 */ + { 21, 9, 12, 0, 7264, 18432, 76, }, /* 522 */ + { 21, 5, 12, 0, 3008, 18432, 180, }, /* 523 */ + { 100, 21, 12, 0, 0, 18656, 74, }, /* 524 */ + { 21, 6, 12, 0, 0, 18432, 182, }, /* 525 */ + { 22, 7, 6, 0, 0, 18432, 84, }, /* 526 */ + { 22, 7, 6, 0, 0, 18432, 184, }, /* 527 */ + { 22, 7, 7, 0, 0, 18432, 184, }, /* 528 */ + { 22, 7, 7, 0, 0, 18432, 84, }, /* 529 */ + { 22, 7, 8, 0, 0, 18432, 84, }, /* 530 */ + { 23, 7, 12, 0, 0, 18432, 84, }, /* 531 */ + { 23, 12, 3, 0, 0, 26624, 98, }, /* 532 */ + { 23, 21, 12, 0, 0, 18432, 74, }, /* 533 */ + { 23, 21, 12, 0, 0, 18432, 110, }, /* 534 */ + { 23, 21, 12, 0, 0, 18432, 128, }, /* 535 */ + { 23, 15, 12, 0, 0, 18432, 144, }, /* 536 */ + { 23, 15, 12, 0, 0, 18432, 74, }, /* 537 */ + { 23, 26, 12, 0, 0, 28672, 74, }, /* 538 */ + { 24, 9, 12, 0, 38864, 18432, 186, }, /* 539 */ + { 24, 9, 12, 0, 8, 18432, 186, }, /* 540 */ + { 24, 5, 12, 0, -8, 18432, 70, }, /* 541 */ + { 102, 17, 12, 0, 0, 28672, 130, }, /* 542 */ + { 102, 7, 12, 0, 0, 18432, 84, }, /* 543 */ + { 102, 26, 12, 0, 0, 18432, 74, }, /* 544 */ + { 102, 21, 12, 0, 0, 18432, 128, }, /* 545 */ + { 103, 29, 12, 0, 0, 45056, 52, }, /* 546 */ + { 103, 7, 12, 0, 0, 18432, 84, }, /* 547 */ + { 103, 22, 12, 0, 0, 28672, 172, }, /* 548 */ + { 103, 18, 12, 0, 0, 28672, 172, }, /* 549 */ + { 25, 7, 12, 0, 0, 18432, 84, }, /* 550 */ + { 100, 21, 12, 0, 0, 18660, 110, }, /* 551 */ + { 25, 14, 12, 0, 0, 18432, 84, }, /* 552 */ + { 33, 7, 12, 0, 0, 18432, 84, }, /* 553 */ + { 33, 12, 3, 0, 0, 26624, 106, }, /* 554 */ + { 33, 12, 3, 0, 0, 26624, 158, }, /* 555 */ + { 33, 10, 3, 0, 0, 18432, 188, }, /* 556 */ + { 34, 7, 12, 0, 0, 18432, 84, }, /* 557 */ + { 34, 12, 3, 0, 0, 26624, 106, }, /* 558 */ + { 34, 10, 3, 0, 0, 18432, 188, }, /* 559 */ + { 100, 21, 12, 0, 0, 18664, 128, }, /* 560 */ + { 35, 7, 12, 0, 0, 18432, 84, }, /* 561 */ + { 35, 12, 3, 0, 0, 26624, 106, }, /* 562 */ + { 36, 7, 12, 0, 0, 18432, 84, }, /* 563 */ + { 36, 12, 3, 0, 0, 26624, 106, }, /* 564 */ + { 104, 7, 12, 0, 0, 18432, 156, }, /* 565 */ + { 104, 7, 12, 0, 0, 18432, 190, }, /* 566 */ + { 104, 12, 3, 0, 0, 26624, 102, }, /* 567 */ + { 104, 10, 5, 0, 0, 18432, 154, }, /* 568 */ + { 104, 12, 3, 0, 0, 26624, 106, }, /* 569 */ + { 104, 12, 3, 0, 0, 26624, 98, }, /* 570 */ + { 104, 12, 3, 0, 0, 26624, 158, }, /* 571 */ + { 104, 21, 12, 0, 0, 18432, 128, }, /* 572 */ + { 104, 21, 12, 0, 0, 18432, 110, }, /* 573 */ + { 104, 6, 12, 0, 0, 18432, 148, }, /* 574 */ + { 104, 21, 12, 0, 0, 18432, 74, }, /* 575 */ + { 104, 23, 12, 0, 0, 14336, 74, }, /* 576 */ + { 104, 7, 12, 0, 0, 18432, 84, }, /* 577 */ + { 104, 13, 12, 0, 0, 18432, 144, }, /* 578 */ + { 104, 15, 12, 0, 0, 28672, 74, }, /* 579 */ + { 26, 21, 12, 0, 0, 28672, 74, }, /* 580 */ + { 100, 21, 12, 0, 0, 28908, 110, }, /* 581 */ + { 100, 21, 12, 0, 0, 28908, 128, }, /* 582 */ + { 26, 21, 12, 0, 0, 28672, 110, }, /* 583 */ + { 26, 17, 12, 0, 0, 28672, 130, }, /* 584 */ + { 26, 21, 12, 0, 0, 28672, 128, }, /* 585 */ + { 26, 21, 12, 0, 0, 28672, 192, }, /* 586 */ + { 26, 12, 3, 0, 0, 26624, 194, }, /* 587 */ + { 26, 1, 2, 0, 0, 6144, 66, }, /* 588 */ + { 26, 13, 12, 0, 0, 18432, 144, }, /* 589 */ + { 26, 7, 12, 0, 0, 18432, 84, }, /* 590 */ + { 26, 6, 12, 0, 0, 18432, 138, }, /* 591 */ + { 26, 12, 3, 0, 0, 26624, 196, }, /* 592 */ + { 26, 12, 3, 0, 0, 26624, 106, }, /* 593 */ + { 37, 7, 12, 0, 0, 18432, 84, }, /* 594 */ + { 37, 12, 3, 0, 0, 26624, 106, }, /* 595 */ + { 37, 10, 5, 0, 0, 18432, 154, }, /* 596 */ + { 37, 12, 3, 0, 0, 26624, 98, }, /* 597 */ + { 37, 26, 12, 0, 0, 28672, 74, }, /* 598 */ + { 37, 21, 12, 0, 0, 28672, 128, }, /* 599 */ + { 37, 13, 12, 0, 0, 18432, 144, }, /* 600 */ + { 38, 7, 12, 0, 0, 18432, 84, }, /* 601 */ + { 111, 7, 12, 0, 0, 18432, 84, }, /* 602 */ + { 111, 7, 12, 0, 0, 18432, 170, }, /* 603 */ + { 111, 13, 12, 0, 0, 18432, 144, }, /* 604 */ + { 111, 15, 12, 0, 0, 18432, 144, }, /* 605 */ + { 111, 26, 12, 0, 0, 28672, 74, }, /* 606 */ + { 104, 26, 12, 0, 0, 28672, 74, }, /* 607 */ + { 42, 7, 12, 0, 0, 18432, 84, }, /* 608 */ + { 42, 12, 3, 0, 0, 26624, 106, }, /* 609 */ + { 42, 10, 5, 0, 0, 18432, 154, }, /* 610 */ + { 42, 21, 12, 0, 0, 18432, 74, }, /* 611 */ + { 124, 7, 12, 0, 0, 18432, 156, }, /* 612 */ + { 124, 10, 5, 0, 0, 18432, 154, }, /* 613 */ + { 124, 12, 3, 0, 0, 26624, 106, }, /* 614 */ + { 124, 12, 3, 0, 0, 26624, 158, }, /* 615 */ + { 124, 10, 12, 0, 0, 18432, 154, }, /* 616 */ + { 124, 12, 3, 0, 0, 26624, 98, }, /* 617 */ + { 124, 13, 12, 0, 0, 18432, 144, }, /* 618 */ + { 124, 21, 12, 0, 0, 18432, 74, }, /* 619 */ + { 124, 6, 12, 0, 0, 18432, 138, }, /* 620 */ + { 124, 21, 12, 0, 0, 18432, 128, }, /* 621 */ + { 107, 11, 3, 0, 0, 26624, 198, }, /* 622 */ + { 107, 12, 3, 0, 0, 26624, 106, }, /* 623 */ + { 114, 12, 3, 0, 0, 26624, 106, }, /* 624 */ + { 114, 10, 5, 0, 0, 18432, 154, }, /* 625 */ + { 114, 7, 12, 0, 0, 18432, 84, }, /* 626 */ + { 114, 7, 12, 0, 0, 18432, 156, }, /* 627 */ + { 114, 12, 3, 0, 0, 26624, 98, }, /* 628 */ + { 114, 10, 3, 0, 0, 18432, 160, }, /* 629 */ + { 114, 10, 3, 0, 0, 18432, 188, }, /* 630 */ + { 114, 21, 12, 0, 0, 18432, 128, }, /* 631 */ + { 114, 13, 12, 0, 0, 18432, 144, }, /* 632 */ + { 114, 21, 12, 0, 0, 18432, 74, }, /* 633 */ + { 114, 21, 12, 0, 0, 18432, 110, }, /* 634 */ + { 114, 26, 12, 0, 0, 18432, 74, }, /* 635 */ + { 117, 12, 3, 0, 0, 26624, 106, }, /* 636 */ + { 117, 10, 5, 0, 0, 18432, 154, }, /* 637 */ + { 117, 7, 12, 0, 0, 18432, 156, }, /* 638 */ + { 117, 10, 3, 0, 0, 18432, 188, }, /* 639 */ + { 117, 12, 3, 0, 0, 26624, 158, }, /* 640 */ + { 117, 13, 12, 0, 0, 18432, 144, }, /* 641 */ + { 117, 7, 12, 0, 0, 18432, 84, }, /* 642 */ + { 133, 7, 12, 0, 0, 18432, 84, }, /* 643 */ + { 133, 12, 3, 0, 0, 26624, 98, }, /* 644 */ + { 133, 10, 5, 0, 0, 18432, 154, }, /* 645 */ + { 133, 12, 3, 0, 0, 26624, 106, }, /* 646 */ + { 133, 10, 3, 0, 0, 18432, 188, }, /* 647 */ + { 133, 21, 12, 0, 0, 18432, 74, }, /* 648 */ + { 118, 7, 12, 0, 0, 18432, 84, }, /* 649 */ + { 118, 10, 5, 0, 0, 18432, 154, }, /* 650 */ + { 118, 12, 3, 0, 0, 26624, 106, }, /* 651 */ + { 118, 12, 3, 0, 0, 26624, 200, }, /* 652 */ + { 118, 12, 3, 0, 0, 26624, 98, }, /* 653 */ + { 118, 21, 12, 0, 0, 18432, 128, }, /* 654 */ + { 118, 21, 12, 0, 0, 18432, 110, }, /* 655 */ { 118, 13, 12, 0, 0, 18432, 144, }, /* 656 */ - { 118, 7, 12, 0, 0, 18432, 84, }, /* 657 */ - { 118, 6, 12, 0, 0, 18432, 94, }, /* 658 */ - { 118, 6, 12, 0, 0, 18432, 96, }, /* 659 */ - { 118, 21, 12, 0, 0, 18432, 128, }, /* 660 */ - { 2, 5, 12, 63, -6222, 18432, 70, }, /* 661 */ - { 2, 5, 12, 67, -6221, 18432, 70, }, /* 662 */ - { 2, 5, 12, 71, -6212, 18432, 70, }, /* 663 */ - { 2, 5, 12, 75, -6210, 18432, 70, }, /* 664 */ - { 2, 5, 12, 79, -6210, 18432, 70, }, /* 665 */ - { 2, 5, 12, 79, -6211, 18432, 70, }, /* 666 */ - { 2, 5, 12, 84, -6204, 18432, 70, }, /* 667 */ - { 2, 5, 12, 88, -6180, 18432, 70, }, /* 668 */ - { 2, 5, 12, 108, 35267, 18432, 70, }, /* 669 */ - { 21, 9, 12, 0, -3008, 18432, 76, }, /* 670 */ - { 116, 21, 12, 0, 0, 18432, 74, }, /* 671 */ - { 106, 12, 3, 0, 0, 26864, 98, }, /* 672 */ - { 106, 12, 3, 0, 0, 26868, 98, }, /* 673 */ - { 99, 21, 12, 0, 0, 18680, 200, }, /* 674 */ - { 106, 12, 3, 0, 0, 26876, 98, }, /* 675 */ - { 106, 12, 3, 0, 0, 26880, 98, }, /* 676 */ - { 106, 12, 3, 0, 0, 26884, 98, }, /* 677 */ - { 99, 10, 5, 0, 0, 18684, 174, }, /* 678 */ - { 99, 7, 12, 0, 0, 18696, 84, }, /* 679 */ - { 99, 7, 12, 0, 0, 18684, 84, }, /* 680 */ - { 99, 7, 12, 0, 0, 18676, 84, }, /* 681 */ - { 99, 7, 12, 0, 0, 18700, 84, }, /* 682 */ - { 99, 7, 12, 0, 0, 18704, 84, }, /* 683 */ - { 106, 12, 3, 0, 0, 26900, 98, }, /* 684 */ - { 99, 10, 5, 0, 0, 18712, 174, }, /* 685 */ - { 106, 12, 3, 0, 0, 26896, 98, }, /* 686 */ - { 99, 7, 12, 0, 0, 18716, 84, }, /* 687 */ - { 2, 5, 12, 0, 0, 18432, 60, }, /* 688 */ - { 1, 6, 12, 0, 0, 18432, 90, }, /* 689 */ - { 2, 6, 12, 0, 0, 18432, 182, }, /* 690 */ - { 0, 5, 12, 0, 35332, 18432, 78, }, /* 691 */ - { 0, 5, 12, 0, 3814, 18432, 78, }, /* 692 */ - { 0, 5, 12, 0, 35384, 18432, 78, }, /* 693 */ - { 0, 5, 12, 0, 0, 18432, 202, }, /* 694 */ - { 0, 6, 12, 0, 0, 18432, 182, }, /* 695 */ - { 0, 6, 12, 0, 0, 18432, 204, }, /* 696 */ - { 1, 6, 12, 0, 0, 18432, 182, }, /* 697 */ - { 106, 12, 3, 0, 0, 26740, 104, }, /* 698 */ - { 106, 12, 3, 0, 0, 26912, 98, }, /* 699 */ - { 106, 12, 3, 0, 0, 26916, 98, }, /* 700 */ - { 0, 9, 12, 92, 1, 18432, 76, }, /* 701 */ - { 0, 5, 12, 92, -1, 18432, 78, }, /* 702 */ - { 0, 5, 12, 0, 0, 18432, 70, }, /* 703 */ - { 0, 5, 12, 92, -58, 18432, 70, }, /* 704 */ - { 0, 9, 12, 0, -7615, 18432, 76, }, /* 705 */ - { 1, 5, 12, 0, 8, 18432, 78, }, /* 706 */ - { 1, 9, 12, 0, -8, 18432, 76, }, /* 707 */ - { 1, 5, 12, 0, 0, 18432, 78, }, /* 708 */ - { 1, 5, 12, 0, 74, 18432, 78, }, /* 709 */ - { 1, 5, 12, 0, 86, 18432, 78, }, /* 710 */ - { 1, 5, 12, 0, 100, 18432, 78, }, /* 711 */ - { 1, 5, 12, 0, 128, 18432, 78, }, /* 712 */ - { 1, 5, 12, 0, 112, 18432, 78, }, /* 713 */ - { 1, 5, 12, 0, 126, 18432, 78, }, /* 714 */ - { 1, 5, 12, 0, 8, 18432, 70, }, /* 715 */ - { 1, 8, 12, 0, -8, 18432, 88, }, /* 716 */ - { 1, 5, 12, 0, 0, 18432, 70, }, /* 717 */ - { 1, 5, 12, 0, 9, 18432, 70, }, /* 718 */ - { 1, 9, 12, 0, -74, 18432, 76, }, /* 719 */ - { 1, 8, 12, 0, -9, 18432, 88, }, /* 720 */ - { 1, 5, 12, 21, -7173, 18432, 78, }, /* 721 */ - { 1, 9, 12, 0, -86, 18432, 76, }, /* 722 */ - { 1, 5, 12, 0, -7235, 18432, 78, }, /* 723 */ - { 1, 9, 12, 0, -100, 18432, 76, }, /* 724 */ - { 1, 5, 12, 0, -7219, 18432, 78, }, /* 725 */ - { 1, 9, 12, 0, -112, 18432, 76, }, /* 726 */ - { 1, 9, 12, 0, -128, 18432, 76, }, /* 727 */ - { 1, 9, 12, 0, -126, 18432, 76, }, /* 728 */ - { 99, 29, 12, 0, 0, 45056, 52, }, /* 729 */ - { 106, 1, 3, 0, 0, 6144, 206, }, /* 730 */ - { 106, 1, 13, 0, 0, 6144, 208, }, /* 731 */ - { 99, 1, 2, 0, 0, 18432, 210, }, /* 732 */ - { 99, 1, 2, 0, 0, 34816, 210, }, /* 733 */ - { 99, 17, 12, 0, 0, 28672, 212, }, /* 734 */ - { 99, 21, 12, 0, 0, 28672, 64, }, /* 735 */ - { 99, 20, 12, 0, 0, 28672, 214, }, /* 736 */ - { 99, 19, 12, 0, 0, 28672, 214, }, /* 737 */ - { 99, 22, 12, 0, 0, 28672, 216, }, /* 738 */ - { 99, 20, 12, 0, 0, 28672, 216, }, /* 739 */ - { 99, 19, 12, 0, 0, 28672, 216, }, /* 740 */ - { 99, 21, 12, 0, 0, 28672, 218, }, /* 741 */ - { 99, 21, 12, 0, 0, 28672, 220, }, /* 742 */ - { 99, 27, 2, 0, 0, 45056, 50, }, /* 743 */ - { 99, 28, 2, 0, 0, 4096, 50, }, /* 744 */ - { 99, 1, 2, 0, 0, 20480, 136, }, /* 745 */ - { 99, 1, 2, 0, 0, 36864, 136, }, /* 746 */ - { 99, 1, 2, 0, 0, 30720, 136, }, /* 747 */ - { 99, 1, 2, 0, 0, 24576, 136, }, /* 748 */ - { 99, 1, 2, 0, 0, 40960, 136, }, /* 749 */ - { 99, 29, 12, 0, 0, 8488, 52, }, /* 750 */ - { 99, 21, 12, 0, 0, 14336, 54, }, /* 751 */ - { 99, 21, 12, 0, 0, 14336, 64, }, /* 752 */ - { 99, 21, 14, 0, 0, 28672, 222, }, /* 753 */ - { 99, 21, 12, 0, 0, 28672, 224, }, /* 754 */ - { 99, 16, 12, 0, 0, 28672, 144, }, /* 755 */ - { 99, 16, 12, 0, 0, 28672, 226, }, /* 756 */ - { 99, 25, 12, 0, 0, 8192, 64, }, /* 757 */ - { 99, 22, 12, 0, 0, 28672, 228, }, /* 758 */ - { 99, 18, 12, 0, 0, 28672, 228, }, /* 759 */ - { 99, 21, 12, 0, 0, 28972, 54, }, /* 760 */ - { 99, 21, 12, 0, 0, 28672, 212, }, /* 761 */ - { 99, 21, 12, 0, 0, 28976, 54, }, /* 762 */ - { 99, 21, 12, 0, 0, 28980, 54, }, /* 763 */ - { 99, 1, 2, 0, 0, 6144, 230, }, /* 764 */ - { 98, 2, 2, 0, 0, 6144, 232, }, /* 765 */ - { 99, 1, 2, 0, 0, 22528, 136, }, /* 766 */ - { 99, 1, 2, 0, 0, 38912, 136, }, /* 767 */ - { 99, 1, 2, 0, 0, 16384, 136, }, /* 768 */ - { 99, 1, 2, 0, 0, 32768, 136, }, /* 769 */ - { 99, 1, 2, 0, 0, 6144, 234, }, /* 770 */ - { 99, 25, 12, 0, 0, 12288, 236, }, /* 771 */ - { 99, 25, 12, 0, 0, 12288, 238, }, /* 772 */ - { 99, 25, 12, 0, 0, 28672, 236, }, /* 773 */ - { 99, 22, 12, 0, 0, 28672, 240, }, /* 774 */ - { 99, 18, 12, 0, 0, 28672, 240, }, /* 775 */ - { 98, 2, 12, 0, 0, 14336, 0, }, /* 776 */ - { 106, 12, 3, 0, 0, 26624, 242, }, /* 777 */ - { 106, 11, 3, 0, 0, 26624, 124, }, /* 778 */ - { 106, 11, 3, 0, 0, 26624, 244, }, /* 779 */ - { 106, 12, 3, 0, 0, 26936, 104, }, /* 780 */ - { 99, 26, 12, 0, 0, 28672, 74, }, /* 781 */ - { 99, 9, 12, 0, 0, 18432, 116, }, /* 782 */ - { 99, 5, 12, 0, 0, 18432, 246, }, /* 783 */ - { 99, 25, 12, 0, 0, 28672, 248, }, /* 784 */ - { 99, 26, 14, 0, 0, 28672, 250, }, /* 785 */ - { 1, 9, 12, 96, -7517, 18432, 76, }, /* 786 */ - { 99, 26, 12, 0, 0, 28672, 122, }, /* 787 */ - { 0, 9, 12, 100, 0, 18432, 76, }, /* 788 */ - { 0, 9, 12, 104, -8262, 18432, 76, }, /* 789 */ - { 99, 26, 12, 0, 0, 14336, 252, }, /* 790 */ - { 0, 9, 12, 0, 28, 18432, 76, }, /* 791 */ - { 99, 7, 12, 0, 0, 18432, 254, }, /* 792 */ - { 99, 5, 14, 0, 0, 18432, 256, }, /* 793 */ - { 99, 25, 12, 0, 0, 28672, 122, }, /* 794 */ - { 99, 5, 12, 0, 0, 18432, 258, }, /* 795 */ - { 0, 5, 12, 0, -28, 18432, 78, }, /* 796 */ - { 0, 14, 12, 0, 16, 18432, 76, }, /* 797 */ - { 0, 14, 12, 0, -16, 18432, 78, }, /* 798 */ - { 0, 14, 12, 0, 0, 18432, 84, }, /* 799 */ - { 99, 25, 14, 0, 0, 28672, 260, }, /* 800 */ - { 99, 26, 14, 0, 0, 28672, 260, }, /* 801 */ - { 99, 26, 12, 0, 0, 28672, 64, }, /* 802 */ - { 99, 25, 12, 0, 0, 28672, 262, }, /* 803 */ - { 99, 25, 12, 0, 0, 28672, 264, }, /* 804 */ - { 99, 25, 12, 0, 0, 12288, 266, }, /* 805 */ - { 99, 22, 12, 0, 0, 28672, 264, }, /* 806 */ - { 99, 18, 12, 0, 0, 28672, 264, }, /* 807 */ - { 99, 26, 14, 0, 0, 28672, 268, }, /* 808 */ - { 99, 22, 12, 0, 0, 28672, 270, }, /* 809 */ - { 99, 18, 12, 0, 0, 28672, 270, }, /* 810 */ - { 99, 26, 12, 0, 0, 18432, 54, }, /* 811 */ - { 99, 26, 14, 0, 0, 28672, 272, }, /* 812 */ - { 98, 2, 12, 0, 0, 18432, 274, }, /* 813 */ - { 99, 15, 12, 0, 0, 10240, 74, }, /* 814 */ - { 99, 26, 12, 0, 26, 18432, 276, }, /* 815 */ - { 99, 26, 14, 0, 26, 18432, 278, }, /* 816 */ - { 99, 26, 12, 0, -26, 18432, 280, }, /* 817 */ - { 99, 25, 14, 0, 0, 28672, 282, }, /* 818 */ - { 99, 26, 14, 0, 0, 28672, 284, }, /* 819 */ - { 99, 26, 14, 0, 0, 28672, 286, }, /* 820 */ - { 99, 25, 14, 0, 0, 28672, 284, }, /* 821 */ - { 99, 26, 14, 0, 0, 18432, 272, }, /* 822 */ - { 99, 26, 14, 0, 0, 28672, 288, }, /* 823 */ - { 109, 26, 12, 0, 0, 18432, 54, }, /* 824 */ - { 99, 26, 12, 0, 0, 28672, 228, }, /* 825 */ - { 44, 9, 12, 0, 48, 18432, 76, }, /* 826 */ - { 44, 5, 12, 0, -48, 18432, 78, }, /* 827 */ - { 0, 9, 12, 0, -10743, 18432, 76, }, /* 828 */ - { 0, 9, 12, 0, -3814, 18432, 76, }, /* 829 */ - { 0, 9, 12, 0, -10727, 18432, 76, }, /* 830 */ - { 0, 5, 12, 0, -10795, 18432, 78, }, /* 831 */ - { 0, 5, 12, 0, -10792, 18432, 78, }, /* 832 */ - { 0, 9, 12, 0, -10780, 18432, 76, }, /* 833 */ - { 0, 9, 12, 0, -10749, 18432, 76, }, /* 834 */ - { 0, 9, 12, 0, -10783, 18432, 76, }, /* 835 */ - { 0, 9, 12, 0, -10782, 18432, 76, }, /* 836 */ - { 0, 9, 12, 0, -10815, 18432, 76, }, /* 837 */ - { 43, 5, 12, 0, 0, 18432, 60, }, /* 838 */ - { 43, 26, 12, 0, 0, 28672, 74, }, /* 839 */ - { 43, 12, 3, 0, 0, 26624, 98, }, /* 840 */ - { 43, 21, 12, 0, 0, 28672, 128, }, /* 841 */ - { 43, 21, 12, 0, 0, 28672, 74, }, /* 842 */ - { 43, 15, 12, 0, 0, 28672, 74, }, /* 843 */ - { 21, 5, 12, 0, -7264, 18432, 78, }, /* 844 */ - { 45, 7, 12, 0, 0, 18432, 84, }, /* 845 */ - { 45, 6, 12, 0, 0, 18432, 148, }, /* 846 */ - { 45, 21, 12, 0, 0, 18432, 74, }, /* 847 */ - { 45, 12, 3, 0, 0, 26624, 290, }, /* 848 */ - { 2, 12, 3, 0, 0, 26624, 106, }, /* 849 */ - { 99, 20, 12, 0, 0, 28672, 228, }, /* 850 */ - { 99, 19, 12, 0, 0, 28672, 228, }, /* 851 */ - { 99, 17, 12, 0, 0, 28988, 212, }, /* 852 */ - { 99, 6, 12, 0, 0, 28672, 292, }, /* 853 */ - { 99, 21, 12, 0, 0, 28992, 54, }, /* 854 */ - { 99, 21, 12, 0, 0, 28996, 54, }, /* 855 */ - { 99, 21, 12, 0, 0, 29000, 224, }, /* 856 */ - { 99, 21, 12, 0, 0, 29004, 294, }, /* 857 */ - { 99, 21, 12, 0, 0, 28812, 54, }, /* 858 */ - { 99, 21, 12, 0, 0, 28672, 294, }, /* 859 */ - { 30, 26, 12, 0, 0, 28672, 296, }, /* 860 */ - { 99, 26, 12, 0, 0, 29008, 298, }, /* 861 */ - { 99, 26, 12, 0, 0, 29008, 300, }, /* 862 */ - { 99, 26, 12, 0, 0, 29008, 302, }, /* 863 */ - { 99, 21, 12, 0, 0, 29012, 294, }, /* 864 */ - { 99, 21, 12, 0, 0, 29016, 224, }, /* 865 */ - { 99, 21, 12, 0, 0, 29020, 54, }, /* 866 */ - { 30, 6, 12, 0, 0, 18432, 138, }, /* 867 */ - { 99, 7, 12, 0, 0, 18784, 304, }, /* 868 */ - { 30, 14, 12, 0, 0, 18432, 304, }, /* 869 */ - { 99, 22, 12, 0, 0, 29028, 228, }, /* 870 */ - { 99, 18, 12, 0, 0, 29028, 228, }, /* 871 */ - { 99, 22, 12, 0, 0, 29032, 228, }, /* 872 */ - { 99, 18, 12, 0, 0, 29032, 228, }, /* 873 */ - { 99, 22, 12, 0, 0, 29036, 62, }, /* 874 */ - { 99, 18, 12, 0, 0, 29036, 62, }, /* 875 */ - { 99, 22, 12, 0, 0, 29036, 228, }, /* 876 */ - { 99, 18, 12, 0, 0, 29036, 228, }, /* 877 */ - { 99, 26, 12, 0, 0, 29020, 54, }, /* 878 */ - { 99, 17, 12, 0, 0, 29020, 212, }, /* 879 */ - { 99, 22, 12, 0, 0, 29020, 216, }, /* 880 */ - { 99, 18, 12, 0, 0, 29020, 216, }, /* 881 */ - { 106, 12, 3, 0, 0, 26992, 98, }, /* 882 */ - { 22, 10, 3, 0, 0, 18432, 306, }, /* 883 */ - { 99, 17, 14, 0, 0, 29020, 308, }, /* 884 */ - { 99, 6, 12, 0, 0, 18804, 138, }, /* 885 */ - { 99, 26, 12, 0, 0, 29020, 74, }, /* 886 */ - { 30, 6, 12, 0, 0, 18432, 148, }, /* 887 */ - { 99, 7, 12, 0, 0, 18808, 84, }, /* 888 */ - { 99, 21, 14, 0, 0, 29048, 250, }, /* 889 */ - { 99, 26, 12, 0, 0, 29024, 74, }, /* 890 */ - { 27, 7, 12, 0, 0, 18432, 84, }, /* 891 */ - { 106, 12, 3, 0, 0, 26996, 98, }, /* 892 */ - { 99, 24, 12, 0, 0, 29044, 310, }, /* 893 */ - { 27, 6, 12, 0, 0, 18432, 138, }, /* 894 */ - { 99, 17, 12, 0, 0, 29044, 130, }, /* 895 */ - { 28, 7, 12, 0, 0, 18432, 84, }, /* 896 */ - { 99, 21, 12, 0, 0, 29036, 144, }, /* 897 */ - { 99, 6, 12, 0, 0, 18804, 96, }, /* 898 */ - { 28, 6, 12, 0, 0, 18432, 138, }, /* 899 */ - { 29, 7, 12, 0, 0, 18432, 84, }, /* 900 */ - { 22, 7, 12, 0, 0, 18432, 84, }, /* 901 */ - { 22, 7, 12, 0, 0, 18432, 184, }, /* 902 */ - { 99, 26, 12, 0, 0, 18784, 74, }, /* 903 */ - { 99, 15, 12, 0, 0, 18784, 74, }, /* 904 */ - { 22, 26, 12, 0, 0, 18432, 74, }, /* 905 */ - { 22, 26, 12, 0, 0, 28672, 74, }, /* 906 */ - { 99, 15, 12, 0, 0, 18432, 74, }, /* 907 */ - { 99, 26, 14, 0, 0, 18784, 250, }, /* 908 */ - { 28, 26, 12, 0, 0, 18432, 74, }, /* 909 */ - { 30, 7, 12, 0, 0, 18432, 312, }, /* 910 */ - { 31, 7, 12, 0, 0, 18432, 84, }, /* 911 */ - { 31, 6, 12, 0, 0, 18432, 138, }, /* 912 */ - { 31, 26, 12, 0, 0, 28672, 74, }, /* 913 */ - { 55, 7, 12, 0, 0, 18432, 84, }, /* 914 */ - { 55, 6, 12, 0, 0, 18432, 148, }, /* 915 */ - { 55, 21, 12, 0, 0, 18432, 110, }, /* 916 */ - { 55, 21, 12, 0, 0, 18432, 128, }, /* 917 */ - { 119, 7, 12, 0, 0, 18432, 84, }, /* 918 */ - { 119, 6, 12, 0, 0, 18432, 138, }, /* 919 */ - { 119, 21, 12, 0, 0, 28672, 110, }, /* 920 */ - { 119, 21, 12, 0, 0, 28672, 128, }, /* 921 */ - { 119, 13, 12, 0, 0, 18432, 144, }, /* 922 */ - { 2, 9, 12, 108, 1, 18432, 76, }, /* 923 */ - { 2, 5, 12, 108, -35267, 18432, 78, }, /* 924 */ - { 2, 7, 12, 0, 0, 18432, 84, }, /* 925 */ - { 2, 21, 12, 0, 0, 28672, 74, }, /* 926 */ - { 2, 12, 3, 0, 0, 26624, 98, }, /* 927 */ - { 2, 6, 12, 0, 0, 28672, 94, }, /* 928 */ - { 2, 6, 12, 0, 0, 18432, 90, }, /* 929 */ - { 126, 7, 12, 0, 0, 18432, 84, }, /* 930 */ - { 126, 14, 12, 0, 0, 18432, 84, }, /* 931 */ - { 126, 12, 3, 0, 0, 26624, 98, }, /* 932 */ - { 126, 21, 12, 0, 0, 18432, 74, }, /* 933 */ - { 126, 21, 12, 0, 0, 18432, 128, }, /* 934 */ - { 126, 21, 12, 0, 0, 18432, 110, }, /* 935 */ - { 99, 24, 12, 0, 0, 29052, 56, }, /* 936 */ - { 0, 9, 12, 0, -35332, 18432, 76, }, /* 937 */ - { 99, 24, 12, 0, 0, 18432, 56, }, /* 938 */ - { 0, 9, 12, 0, -42280, 18432, 76, }, /* 939 */ - { 0, 5, 12, 0, 48, 18432, 78, }, /* 940 */ - { 0, 9, 12, 0, -42308, 18432, 76, }, /* 941 */ - { 0, 9, 12, 0, -42319, 18432, 76, }, /* 942 */ - { 0, 9, 12, 0, -42315, 18432, 76, }, /* 943 */ - { 0, 9, 12, 0, -42305, 18432, 76, }, /* 944 */ - { 0, 9, 12, 0, -42258, 18432, 76, }, /* 945 */ - { 0, 9, 12, 0, -42282, 18432, 76, }, /* 946 */ - { 0, 9, 12, 0, -42261, 18432, 76, }, /* 947 */ - { 0, 9, 12, 0, 928, 18432, 76, }, /* 948 */ - { 0, 9, 12, 0, -48, 18432, 76, }, /* 949 */ - { 0, 9, 12, 0, -42307, 18432, 76, }, /* 950 */ - { 0, 9, 12, 0, -35384, 18432, 76, }, /* 951 */ - { 0, 9, 12, 0, -42343, 18432, 76, }, /* 952 */ - { 0, 9, 12, 0, -42561, 18432, 76, }, /* 953 */ - { 46, 7, 12, 0, 0, 18432, 84, }, /* 954 */ - { 46, 12, 3, 0, 0, 26624, 106, }, /* 955 */ - { 46, 12, 3, 0, 0, 26624, 158, }, /* 956 */ - { 46, 10, 5, 0, 0, 18432, 154, }, /* 957 */ - { 46, 26, 12, 0, 0, 28672, 74, }, /* 958 */ - { 99, 15, 12, 0, 0, 18816, 74, }, /* 959 */ - { 99, 15, 12, 0, 0, 18820, 74, }, /* 960 */ - { 99, 26, 12, 0, 0, 18824, 74, }, /* 961 */ - { 99, 23, 12, 0, 0, 14732, 74, }, /* 962 */ - { 99, 26, 12, 0, 0, 14728, 74, }, /* 963 */ - { 47, 7, 12, 0, 0, 18432, 84, }, /* 964 */ - { 47, 21, 12, 0, 0, 28672, 74, }, /* 965 */ - { 47, 21, 12, 0, 0, 28672, 128, }, /* 966 */ - { 120, 10, 5, 0, 0, 18432, 154, }, /* 967 */ - { 120, 7, 12, 0, 0, 18432, 84, }, /* 968 */ - { 120, 12, 3, 0, 0, 26624, 158, }, /* 969 */ - { 120, 12, 3, 0, 0, 26624, 106, }, /* 970 */ - { 120, 21, 12, 0, 0, 18432, 128, }, /* 971 */ - { 120, 13, 12, 0, 0, 18432, 144, }, /* 972 */ - { 8, 12, 3, 0, 0, 27024, 98, }, /* 973 */ - { 8, 7, 12, 0, 0, 18836, 84, }, /* 974 */ - { 49, 13, 12, 0, 0, 18432, 144, }, /* 975 */ - { 49, 7, 12, 0, 0, 18432, 84, }, /* 976 */ - { 49, 12, 3, 0, 0, 26624, 106, }, /* 977 */ - { 49, 12, 3, 0, 0, 26624, 98, }, /* 978 */ - { 99, 21, 12, 0, 0, 18840, 200, }, /* 979 */ - { 49, 21, 12, 0, 0, 18432, 128, }, /* 980 */ - { 121, 7, 12, 0, 0, 18432, 84, }, /* 981 */ - { 121, 12, 3, 0, 0, 26624, 106, }, /* 982 */ - { 121, 10, 5, 0, 0, 18432, 154, }, /* 983 */ - { 121, 10, 3, 0, 0, 18432, 188, }, /* 984 */ - { 121, 21, 12, 0, 0, 18432, 74, }, /* 985 */ - { 56, 12, 3, 0, 0, 26624, 106, }, /* 986 */ - { 56, 10, 5, 0, 0, 18432, 154, }, /* 987 */ - { 56, 7, 12, 0, 0, 18432, 84, }, /* 988 */ - { 56, 12, 3, 0, 0, 26624, 98, }, /* 989 */ - { 56, 10, 3, 0, 0, 18432, 188, }, /* 990 */ - { 56, 21, 12, 0, 0, 18432, 74, }, /* 991 */ - { 56, 21, 12, 0, 0, 18432, 110, }, /* 992 */ - { 56, 21, 12, 0, 0, 18432, 128, }, /* 993 */ - { 99, 6, 12, 0, 0, 18844, 138, }, /* 994 */ - { 56, 13, 12, 0, 0, 18432, 144, }, /* 995 */ - { 20, 6, 12, 0, 0, 18432, 138, }, /* 996 */ - { 122, 7, 12, 0, 0, 18432, 84, }, /* 997 */ - { 122, 12, 3, 0, 0, 26624, 106, }, /* 998 */ - { 122, 10, 5, 0, 0, 18432, 154, }, /* 999 */ - { 122, 13, 12, 0, 0, 18432, 144, }, /* 1000 */ - { 122, 21, 12, 0, 0, 18432, 74, }, /* 1001 */ - { 122, 21, 12, 0, 0, 18432, 128, }, /* 1002 */ - { 124, 7, 12, 0, 0, 18432, 84, }, /* 1003 */ - { 124, 12, 3, 0, 0, 26624, 106, }, /* 1004 */ - { 124, 7, 12, 0, 0, 18432, 170, }, /* 1005 */ - { 124, 12, 3, 0, 0, 26624, 98, }, /* 1006 */ - { 124, 7, 12, 0, 0, 18432, 314, }, /* 1007 */ - { 124, 6, 12, 0, 0, 18432, 138, }, /* 1008 */ - { 124, 21, 12, 0, 0, 18432, 74, }, /* 1009 */ - { 124, 21, 12, 0, 0, 18432, 110, }, /* 1010 */ - { 127, 7, 12, 0, 0, 18432, 84, }, /* 1011 */ - { 127, 10, 5, 0, 0, 18432, 154, }, /* 1012 */ - { 127, 12, 3, 0, 0, 26624, 106, }, /* 1013 */ - { 127, 21, 12, 0, 0, 18432, 128, }, /* 1014 */ - { 127, 6, 12, 0, 0, 18432, 138, }, /* 1015 */ - { 127, 12, 3, 0, 0, 26624, 158, }, /* 1016 */ - { 0, 5, 12, 0, -928, 18432, 78, }, /* 1017 */ - { 24, 5, 12, 0, -38864, 18432, 70, }, /* 1018 */ - { 127, 10, 5, 0, 0, 18432, 174, }, /* 1019 */ - { 127, 13, 12, 0, 0, 18432, 144, }, /* 1020 */ - { 22, 7, 9, 0, 0, 18432, 84, }, /* 1021 */ - { 22, 7, 10, 0, 0, 18432, 84, }, /* 1022 */ - { 98, 4, 12, 0, 0, 18432, 0, }, /* 1023 */ - { 98, 3, 12, 0, 0, 18432, 0, }, /* 1024 */ - { 30, 7, 12, 0, 0, 18432, 304, }, /* 1025 */ - { 0, 5, 12, 0, 1, 18432, 70, }, /* 1026 */ - { 0, 5, 12, 0, -1, 18432, 70, }, /* 1027 */ - { 4, 25, 12, 0, 0, 12288, 122, }, /* 1028 */ - { 5, 7, 12, 0, 0, 0, 316, }, /* 1029 */ - { 99, 18, 12, 0, 0, 29088, 54, }, /* 1030 */ - { 99, 22, 12, 0, 0, 29088, 54, }, /* 1031 */ - { 98, 2, 12, 0, 0, 6144, 318, }, /* 1032 */ - { 5, 7, 12, 0, 0, 420, 84, }, /* 1033 */ - { 5, 26, 12, 0, 0, 29092, 74, }, /* 1034 */ - { 106, 12, 3, 0, 0, 26624, 192, }, /* 1035 */ - { 106, 12, 3, 0, 0, 26624, 320, }, /* 1036 */ - { 99, 21, 12, 0, 0, 28672, 74, }, /* 1037 */ - { 99, 21, 12, 0, 0, 28672, 128, }, /* 1038 */ - { 99, 21, 12, 0, 0, 28672, 126, }, /* 1039 */ - { 99, 22, 12, 0, 0, 28672, 74, }, /* 1040 */ - { 99, 18, 12, 0, 0, 28672, 74, }, /* 1041 */ - { 99, 17, 12, 0, 0, 28672, 130, }, /* 1042 */ - { 99, 22, 12, 0, 0, 28672, 322, }, /* 1043 */ - { 99, 18, 12, 0, 0, 28672, 322, }, /* 1044 */ - { 99, 21, 12, 0, 0, 8192, 110, }, /* 1045 */ - { 99, 21, 12, 0, 0, 8192, 324, }, /* 1046 */ - { 99, 21, 12, 0, 0, 8192, 326, }, /* 1047 */ - { 99, 22, 12, 0, 0, 28672, 172, }, /* 1048 */ - { 99, 18, 12, 0, 0, 28672, 172, }, /* 1049 */ - { 99, 21, 12, 0, 0, 14336, 74, }, /* 1050 */ - { 99, 21, 12, 0, 0, 28672, 122, }, /* 1051 */ - { 99, 25, 12, 0, 0, 12288, 122, }, /* 1052 */ - { 99, 17, 12, 0, 0, 12288, 328, }, /* 1053 */ - { 99, 25, 12, 0, 0, 28672, 330, }, /* 1054 */ - { 99, 21, 12, 0, 0, 28672, 322, }, /* 1055 */ - { 99, 21, 12, 0, 0, 28672, 332, }, /* 1056 */ - { 99, 17, 12, 0, 0, 12288, 130, }, /* 1057 */ - { 99, 21, 12, 0, 0, 8192, 74, }, /* 1058 */ - { 99, 13, 12, 0, 0, 10240, 334, }, /* 1059 */ - { 0, 9, 12, 0, 32, 18432, 336, }, /* 1060 */ - { 99, 24, 12, 0, 0, 28672, 338, }, /* 1061 */ - { 0, 5, 12, 0, -32, 18432, 340, }, /* 1062 */ - { 99, 21, 12, 0, 0, 29036, 128, }, /* 1063 */ - { 99, 22, 12, 0, 0, 29036, 342, }, /* 1064 */ - { 99, 18, 12, 0, 0, 29036, 342, }, /* 1065 */ - { 99, 21, 12, 0, 0, 29036, 110, }, /* 1066 */ - { 99, 6, 3, 0, 0, 18804, 344, }, /* 1067 */ - { 99, 1, 2, 0, 0, 28672, 346, }, /* 1068 */ - { 39, 7, 12, 0, 0, 18432, 84, }, /* 1069 */ - { 99, 21, 12, 0, 0, 18856, 74, }, /* 1070 */ - { 99, 21, 12, 0, 0, 29096, 74, }, /* 1071 */ - { 99, 21, 12, 0, 0, 18860, 74, }, /* 1072 */ - { 99, 15, 12, 0, 0, 18864, 74, }, /* 1073 */ - { 99, 26, 12, 0, 0, 18860, 74, }, /* 1074 */ - { 1, 14, 12, 0, 0, 28672, 84, }, /* 1075 */ - { 1, 15, 12, 0, 0, 28672, 74, }, /* 1076 */ - { 1, 26, 12, 0, 0, 28672, 74, }, /* 1077 */ - { 1, 26, 12, 0, 0, 18432, 74, }, /* 1078 */ - { 50, 7, 12, 0, 0, 18432, 84, }, /* 1079 */ - { 51, 7, 12, 0, 0, 18432, 84, }, /* 1080 */ - { 106, 12, 3, 0, 0, 27060, 98, }, /* 1081 */ - { 99, 15, 12, 0, 0, 10676, 74, }, /* 1082 */ - { 104, 7, 12, 0, 0, 18432, 84, }, /* 1083 */ - { 104, 15, 12, 0, 0, 18432, 74, }, /* 1084 */ - { 32, 7, 12, 0, 0, 18432, 84, }, /* 1085 */ - { 32, 14, 12, 0, 0, 18432, 84, }, /* 1086 */ - { 73, 7, 12, 0, 0, 18432, 84, }, /* 1087 */ - { 73, 12, 3, 0, 0, 26624, 106, }, /* 1088 */ - { 107, 7, 12, 0, 0, 18432, 84, }, /* 1089 */ - { 107, 21, 12, 0, 0, 18432, 110, }, /* 1090 */ - { 111, 7, 12, 0, 0, 18432, 84, }, /* 1091 */ - { 111, 21, 12, 0, 0, 18432, 110, }, /* 1092 */ - { 111, 14, 12, 0, 0, 18432, 84, }, /* 1093 */ - { 105, 9, 12, 0, 40, 18432, 76, }, /* 1094 */ - { 105, 5, 12, 0, -40, 18432, 78, }, /* 1095 */ - { 40, 7, 12, 0, 0, 18432, 84, }, /* 1096 */ - { 108, 7, 12, 0, 0, 18432, 84, }, /* 1097 */ - { 108, 13, 12, 0, 0, 18432, 144, }, /* 1098 */ - { 80, 9, 12, 0, 40, 18432, 76, }, /* 1099 */ - { 80, 5, 12, 0, -40, 18432, 78, }, /* 1100 */ - { 66, 7, 12, 0, 0, 18432, 84, }, /* 1101 */ - { 64, 7, 12, 0, 0, 18432, 84, }, /* 1102 */ - { 64, 21, 12, 0, 0, 18432, 74, }, /* 1103 */ - { 167, 9, 12, 0, 39, 18432, 76, }, /* 1104 */ - { 167, 5, 12, 0, -39, 18432, 78, }, /* 1105 */ - { 96, 7, 12, 0, 0, 18432, 84, }, /* 1106 */ - { 69, 7, 12, 0, 0, 18432, 84, }, /* 1107 */ - { 0, 6, 12, 0, 0, 18432, 96, }, /* 1108 */ - { 41, 7, 12, 0, 0, 34816, 84, }, /* 1109 */ - { 128, 7, 12, 0, 0, 34816, 84, }, /* 1110 */ - { 128, 21, 12, 0, 0, 34816, 110, }, /* 1111 */ - { 128, 15, 12, 0, 0, 34816, 74, }, /* 1112 */ - { 143, 7, 12, 0, 0, 34816, 84, }, /* 1113 */ - { 143, 26, 12, 0, 0, 34816, 74, }, /* 1114 */ - { 143, 15, 12, 0, 0, 34816, 74, }, /* 1115 */ - { 142, 7, 12, 0, 0, 34816, 84, }, /* 1116 */ - { 142, 15, 12, 0, 0, 34816, 74, }, /* 1117 */ - { 149, 7, 12, 0, 0, 34816, 84, }, /* 1118 */ - { 149, 15, 12, 0, 0, 34816, 74, }, /* 1119 */ - { 115, 7, 12, 0, 0, 34816, 84, }, /* 1120 */ - { 115, 15, 12, 0, 0, 34816, 74, }, /* 1121 */ - { 115, 21, 12, 0, 0, 28672, 110, }, /* 1122 */ - { 52, 7, 12, 0, 0, 34816, 84, }, /* 1123 */ - { 52, 21, 12, 0, 0, 34816, 74, }, /* 1124 */ - { 61, 7, 12, 0, 0, 34816, 84, }, /* 1125 */ - { 134, 7, 12, 0, 0, 34816, 84, }, /* 1126 */ - { 134, 15, 12, 0, 0, 34816, 74, }, /* 1127 */ - { 112, 7, 12, 0, 0, 34816, 84, }, /* 1128 */ - { 112, 12, 3, 0, 0, 26624, 106, }, /* 1129 */ - { 112, 12, 3, 0, 0, 26624, 98, }, /* 1130 */ - { 112, 12, 3, 0, 0, 26624, 158, }, /* 1131 */ - { 112, 15, 12, 0, 0, 34816, 74, }, /* 1132 */ - { 112, 21, 12, 0, 0, 34816, 74, }, /* 1133 */ - { 112, 21, 12, 0, 0, 34816, 128, }, /* 1134 */ - { 129, 7, 12, 0, 0, 34816, 84, }, /* 1135 */ - { 129, 15, 12, 0, 0, 34816, 74, }, /* 1136 */ - { 129, 21, 12, 0, 0, 34816, 74, }, /* 1137 */ - { 141, 7, 12, 0, 0, 34816, 84, }, /* 1138 */ - { 141, 15, 12, 0, 0, 34816, 74, }, /* 1139 */ - { 71, 7, 12, 0, 0, 34816, 84, }, /* 1140 */ - { 71, 26, 12, 0, 0, 34816, 74, }, /* 1141 */ - { 71, 12, 3, 0, 0, 26624, 98, }, /* 1142 */ - { 71, 15, 12, 0, 0, 34816, 74, }, /* 1143 */ - { 71, 21, 12, 0, 0, 34816, 110, }, /* 1144 */ - { 71, 21, 12, 0, 0, 35256, 110, }, /* 1145 */ - { 71, 21, 12, 0, 0, 34816, 74, }, /* 1146 */ - { 53, 7, 12, 0, 0, 34816, 84, }, /* 1147 */ - { 53, 21, 12, 0, 0, 28672, 74, }, /* 1148 */ - { 53, 21, 12, 0, 0, 28672, 110, }, /* 1149 */ - { 130, 7, 12, 0, 0, 34816, 84, }, /* 1150 */ - { 130, 15, 12, 0, 0, 34816, 74, }, /* 1151 */ - { 131, 7, 12, 0, 0, 34816, 84, }, /* 1152 */ - { 131, 15, 12, 0, 0, 34816, 74, }, /* 1153 */ - { 74, 7, 12, 0, 0, 34816, 84, }, /* 1154 */ - { 74, 21, 12, 0, 0, 34816, 110, }, /* 1155 */ - { 74, 15, 12, 0, 0, 34816, 74, }, /* 1156 */ - { 57, 7, 12, 0, 0, 34816, 84, }, /* 1157 */ - { 78, 9, 12, 0, 64, 34816, 76, }, /* 1158 */ - { 78, 5, 12, 0, -64, 34816, 78, }, /* 1159 */ - { 78, 15, 12, 0, 0, 34816, 74, }, /* 1160 */ - { 85, 7, 12, 0, 0, 0, 84, }, /* 1161 */ - { 85, 7, 12, 0, 0, 0, 314, }, /* 1162 */ - { 85, 12, 3, 0, 0, 26624, 132, }, /* 1163 */ - { 85, 13, 12, 0, 0, 2048, 144, }, /* 1164 */ - { 92, 13, 12, 0, 0, 2048, 144, }, /* 1165 */ - { 92, 7, 12, 0, 0, 34816, 84, }, /* 1166 */ - { 92, 6, 12, 0, 0, 34816, 96, }, /* 1167 */ - { 92, 9, 12, 0, 32, 34816, 76, }, /* 1168 */ - { 92, 12, 3, 0, 0, 26624, 132, }, /* 1169 */ - { 92, 12, 3, 0, 0, 26624, 164, }, /* 1170 */ - { 92, 12, 3, 0, 0, 26624, 98, }, /* 1171 */ - { 92, 17, 12, 0, 0, 28672, 130, }, /* 1172 */ - { 92, 6, 12, 0, 0, 34816, 138, }, /* 1173 */ - { 92, 5, 12, 0, -32, 34816, 78, }, /* 1174 */ - { 92, 25, 12, 0, 0, 34816, 122, }, /* 1175 */ - { 5, 15, 12, 0, 0, 2048, 74, }, /* 1176 */ - { 88, 7, 12, 0, 0, 34816, 84, }, /* 1177 */ - { 88, 12, 3, 0, 0, 26624, 106, }, /* 1178 */ - { 88, 17, 12, 0, 0, 34816, 130, }, /* 1179 */ - { 159, 7, 12, 0, 0, 34816, 84, }, /* 1180 */ - { 159, 15, 12, 0, 0, 34816, 74, }, /* 1181 */ - { 86, 7, 12, 0, 0, 0, 84, }, /* 1182 */ - { 86, 12, 3, 0, 0, 26624, 98, }, /* 1183 */ - { 86, 15, 12, 0, 0, 0, 74, }, /* 1184 */ - { 86, 21, 12, 0, 0, 0, 128, }, /* 1185 */ - { 90, 7, 12, 0, 0, 34816, 84, }, /* 1186 */ - { 90, 12, 3, 0, 0, 26624, 98, }, /* 1187 */ - { 90, 21, 12, 0, 0, 34816, 128, }, /* 1188 */ - { 163, 7, 12, 0, 0, 34816, 84, }, /* 1189 */ - { 163, 15, 12, 0, 0, 34816, 74, }, /* 1190 */ - { 160, 7, 12, 0, 0, 34816, 84, }, /* 1191 */ - { 133, 10, 5, 0, 0, 18432, 154, }, /* 1192 */ - { 133, 12, 3, 0, 0, 26624, 106, }, /* 1193 */ - { 133, 7, 12, 0, 0, 18432, 84, }, /* 1194 */ - { 133, 12, 3, 0, 0, 26624, 158, }, /* 1195 */ - { 133, 21, 12, 0, 0, 18432, 128, }, /* 1196 */ - { 133, 21, 12, 0, 0, 18432, 110, }, /* 1197 */ - { 133, 15, 12, 0, 0, 28672, 74, }, /* 1198 */ - { 133, 13, 12, 0, 0, 18432, 144, }, /* 1199 */ - { 133, 12, 3, 0, 0, 26624, 290, }, /* 1200 */ - { 58, 12, 3, 0, 0, 26624, 106, }, /* 1201 */ - { 58, 10, 5, 0, 0, 18432, 154, }, /* 1202 */ - { 58, 7, 12, 0, 0, 18432, 84, }, /* 1203 */ - { 58, 12, 3, 0, 0, 26624, 158, }, /* 1204 */ - { 58, 12, 3, 0, 0, 26624, 98, }, /* 1205 */ - { 58, 21, 12, 0, 0, 18432, 74, }, /* 1206 */ - { 58, 1, 4, 0, 0, 18432, 134, }, /* 1207 */ - { 58, 21, 12, 0, 0, 18432, 128, }, /* 1208 */ - { 136, 7, 12, 0, 0, 18432, 84, }, /* 1209 */ - { 136, 13, 12, 0, 0, 18432, 144, }, /* 1210 */ - { 60, 12, 3, 0, 0, 26624, 106, }, /* 1211 */ - { 60, 7, 12, 0, 0, 18432, 84, }, /* 1212 */ - { 60, 10, 5, 0, 0, 18432, 154, }, /* 1213 */ - { 60, 12, 3, 0, 0, 26624, 158, }, /* 1214 */ - { 60, 13, 12, 0, 0, 18432, 144, }, /* 1215 */ - { 60, 21, 12, 0, 0, 18432, 74, }, /* 1216 */ - { 60, 21, 12, 0, 0, 18432, 128, }, /* 1217 */ - { 70, 7, 12, 0, 0, 18432, 84, }, /* 1218 */ - { 70, 12, 3, 0, 0, 26624, 98, }, /* 1219 */ - { 70, 21, 12, 0, 0, 18432, 74, }, /* 1220 */ - { 62, 12, 3, 0, 0, 26624, 106, }, /* 1221 */ - { 62, 10, 5, 0, 0, 18432, 154, }, /* 1222 */ - { 62, 7, 12, 0, 0, 18432, 84, }, /* 1223 */ - { 62, 10, 3, 0, 0, 18432, 188, }, /* 1224 */ - { 62, 7, 4, 0, 0, 18432, 84, }, /* 1225 */ - { 62, 21, 12, 0, 0, 18432, 128, }, /* 1226 */ - { 62, 21, 12, 0, 0, 18432, 74, }, /* 1227 */ - { 62, 12, 3, 0, 0, 26624, 104, }, /* 1228 */ - { 62, 12, 3, 0, 0, 26624, 98, }, /* 1229 */ - { 62, 13, 12, 0, 0, 18432, 144, }, /* 1230 */ - { 17, 15, 12, 0, 0, 18432, 74, }, /* 1231 */ - { 68, 7, 12, 0, 0, 18432, 84, }, /* 1232 */ - { 68, 10, 5, 0, 0, 18432, 154, }, /* 1233 */ - { 68, 12, 3, 0, 0, 26624, 106, }, /* 1234 */ - { 68, 10, 3, 0, 0, 18432, 188, }, /* 1235 */ - { 68, 12, 3, 0, 0, 26624, 98, }, /* 1236 */ - { 68, 12, 3, 0, 0, 26624, 162, }, /* 1237 */ - { 68, 21, 12, 0, 0, 18432, 128, }, /* 1238 */ - { 68, 21, 12, 0, 0, 18432, 110, }, /* 1239 */ - { 68, 21, 12, 0, 0, 18432, 74, }, /* 1240 */ - { 77, 7, 12, 0, 0, 18432, 84, }, /* 1241 */ - { 77, 21, 12, 0, 0, 18432, 128, }, /* 1242 */ - { 75, 7, 12, 0, 0, 18432, 84, }, /* 1243 */ - { 75, 12, 3, 0, 0, 26624, 106, }, /* 1244 */ - { 75, 10, 5, 0, 0, 18432, 154, }, /* 1245 */ - { 75, 12, 3, 0, 0, 26624, 98, }, /* 1246 */ - { 75, 12, 3, 0, 0, 26624, 158, }, /* 1247 */ - { 75, 13, 12, 0, 0, 18432, 144, }, /* 1248 */ - { 67, 12, 3, 0, 0, 26624, 106, }, /* 1249 */ - { 67, 12, 3, 0, 0, 26836, 106, }, /* 1250 */ - { 67, 10, 5, 0, 0, 18432, 154, }, /* 1251 */ - { 67, 10, 5, 0, 0, 18644, 154, }, /* 1252 */ - { 67, 7, 12, 0, 0, 18432, 84, }, /* 1253 */ - { 106, 12, 3, 0, 0, 26836, 98, }, /* 1254 */ - { 67, 12, 3, 0, 0, 26836, 98, }, /* 1255 */ - { 67, 10, 3, 0, 0, 18432, 160, }, /* 1256 */ - { 67, 10, 3, 0, 0, 18432, 188, }, /* 1257 */ - { 67, 7, 12, 0, 0, 18432, 348, }, /* 1258 */ - { 67, 12, 3, 0, 0, 26624, 98, }, /* 1259 */ - { 97, 7, 12, 0, 0, 18432, 84, }, /* 1260 */ - { 97, 10, 3, 0, 0, 18432, 160, }, /* 1261 */ - { 97, 10, 5, 0, 0, 18432, 154, }, /* 1262 */ - { 97, 12, 3, 0, 0, 26624, 106, }, /* 1263 */ - { 97, 12, 3, 0, 0, 26624, 158, }, /* 1264 */ - { 97, 10, 3, 0, 0, 18432, 188, }, /* 1265 */ - { 97, 7, 4, 0, 0, 18432, 84, }, /* 1266 */ - { 97, 12, 3, 0, 0, 26624, 164, }, /* 1267 */ - { 97, 7, 12, 0, 0, 18432, 350, }, /* 1268 */ - { 97, 21, 12, 0, 0, 18432, 128, }, /* 1269 */ - { 97, 21, 12, 0, 0, 18432, 74, }, /* 1270 */ - { 97, 12, 3, 0, 0, 26624, 98, }, /* 1271 */ - { 153, 7, 12, 0, 0, 18432, 84, }, /* 1272 */ - { 153, 10, 5, 0, 0, 18432, 154, }, /* 1273 */ - { 153, 12, 3, 0, 0, 26624, 106, }, /* 1274 */ - { 153, 12, 3, 0, 0, 26624, 158, }, /* 1275 */ - { 153, 12, 3, 0, 0, 26624, 98, }, /* 1276 */ - { 153, 21, 12, 0, 0, 18432, 128, }, /* 1277 */ - { 153, 21, 12, 0, 0, 18432, 110, }, /* 1278 */ - { 153, 21, 12, 0, 0, 18432, 74, }, /* 1279 */ - { 153, 13, 12, 0, 0, 18432, 144, }, /* 1280 */ - { 153, 12, 3, 0, 0, 26624, 104, }, /* 1281 */ - { 76, 7, 12, 0, 0, 18432, 84, }, /* 1282 */ - { 76, 10, 3, 0, 0, 18432, 160, }, /* 1283 */ - { 76, 10, 5, 0, 0, 18432, 154, }, /* 1284 */ - { 76, 12, 3, 0, 0, 26624, 106, }, /* 1285 */ - { 76, 12, 3, 0, 0, 26624, 158, }, /* 1286 */ - { 76, 12, 3, 0, 0, 26624, 98, }, /* 1287 */ - { 76, 21, 12, 0, 0, 18432, 74, }, /* 1288 */ - { 76, 13, 12, 0, 0, 18432, 144, }, /* 1289 */ - { 145, 7, 12, 0, 0, 18432, 84, }, /* 1290 */ - { 145, 10, 3, 0, 0, 18432, 160, }, /* 1291 */ - { 145, 10, 5, 0, 0, 18432, 154, }, /* 1292 */ - { 145, 12, 3, 0, 0, 26624, 106, }, /* 1293 */ - { 145, 12, 3, 0, 0, 26624, 158, }, /* 1294 */ - { 145, 12, 3, 0, 0, 26624, 98, }, /* 1295 */ - { 145, 21, 12, 0, 0, 18432, 74, }, /* 1296 */ - { 145, 21, 12, 0, 0, 18432, 128, }, /* 1297 */ - { 145, 21, 12, 0, 0, 18432, 110, }, /* 1298 */ - { 145, 21, 12, 0, 0, 18432, 190, }, /* 1299 */ - { 72, 7, 12, 0, 0, 18432, 84, }, /* 1300 */ - { 72, 10, 5, 0, 0, 18432, 154, }, /* 1301 */ - { 72, 12, 3, 0, 0, 26624, 106, }, /* 1302 */ - { 72, 12, 3, 0, 0, 26624, 158, }, /* 1303 */ - { 72, 21, 12, 0, 0, 18432, 128, }, /* 1304 */ - { 72, 21, 12, 0, 0, 18432, 74, }, /* 1305 */ - { 72, 13, 12, 0, 0, 18432, 144, }, /* 1306 */ - { 63, 7, 12, 0, 0, 18432, 84, }, /* 1307 */ - { 63, 12, 3, 0, 0, 26624, 106, }, /* 1308 */ - { 63, 10, 5, 0, 0, 18432, 154, }, /* 1309 */ - { 63, 10, 3, 0, 0, 18432, 188, }, /* 1310 */ - { 63, 12, 3, 0, 0, 26624, 98, }, /* 1311 */ - { 63, 21, 12, 0, 0, 18432, 74, }, /* 1312 */ - { 63, 13, 12, 0, 0, 18432, 144, }, /* 1313 */ - { 147, 7, 12, 0, 0, 18432, 84, }, /* 1314 */ - { 147, 12, 3, 0, 0, 26624, 106, }, /* 1315 */ - { 147, 10, 5, 0, 0, 18432, 154, }, /* 1316 */ - { 147, 10, 12, 0, 0, 18432, 154, }, /* 1317 */ - { 147, 12, 3, 0, 0, 26624, 158, }, /* 1318 */ - { 147, 13, 12, 0, 0, 18432, 144, }, /* 1319 */ - { 147, 15, 12, 0, 0, 18432, 74, }, /* 1320 */ - { 147, 21, 12, 0, 0, 18432, 128, }, /* 1321 */ - { 147, 26, 12, 0, 0, 18432, 74, }, /* 1322 */ - { 83, 7, 12, 0, 0, 18432, 84, }, /* 1323 */ - { 83, 10, 5, 0, 0, 18432, 154, }, /* 1324 */ - { 83, 12, 3, 0, 0, 26624, 106, }, /* 1325 */ - { 83, 12, 3, 0, 0, 26624, 158, }, /* 1326 */ - { 83, 12, 3, 0, 0, 26624, 98, }, /* 1327 */ - { 83, 21, 12, 0, 0, 18432, 74, }, /* 1328 */ - { 146, 9, 12, 0, 32, 18432, 76, }, /* 1329 */ - { 146, 5, 12, 0, -32, 18432, 78, }, /* 1330 */ - { 146, 13, 12, 0, 0, 18432, 144, }, /* 1331 */ - { 146, 15, 12, 0, 0, 18432, 74, }, /* 1332 */ - { 146, 7, 12, 0, 0, 18432, 84, }, /* 1333 */ - { 164, 7, 12, 0, 0, 18432, 84, }, /* 1334 */ - { 164, 10, 3, 0, 0, 18432, 160, }, /* 1335 */ - { 164, 10, 5, 0, 0, 18432, 154, }, /* 1336 */ - { 164, 12, 3, 0, 0, 26624, 106, }, /* 1337 */ - { 164, 10, 3, 0, 0, 18432, 188, }, /* 1338 */ - { 164, 12, 3, 0, 0, 26624, 158, }, /* 1339 */ - { 164, 7, 4, 0, 0, 18432, 84, }, /* 1340 */ - { 164, 12, 3, 0, 0, 26624, 98, }, /* 1341 */ - { 164, 21, 12, 0, 0, 18432, 128, }, /* 1342 */ - { 164, 21, 12, 0, 0, 18432, 74, }, /* 1343 */ - { 164, 13, 12, 0, 0, 18432, 144, }, /* 1344 */ - { 87, 7, 12, 0, 0, 18432, 84, }, /* 1345 */ - { 87, 10, 5, 0, 0, 18432, 154, }, /* 1346 */ - { 87, 12, 3, 0, 0, 26624, 106, }, /* 1347 */ - { 87, 12, 3, 0, 0, 26624, 158, }, /* 1348 */ - { 87, 21, 12, 0, 0, 18432, 74, }, /* 1349 */ - { 156, 7, 12, 0, 0, 18432, 84, }, /* 1350 */ - { 156, 12, 3, 0, 0, 26624, 106, }, /* 1351 */ - { 156, 12, 3, 0, 0, 18432, 106, }, /* 1352 */ - { 156, 12, 3, 0, 0, 26624, 104, }, /* 1353 */ - { 156, 12, 3, 0, 0, 26624, 158, }, /* 1354 */ - { 156, 10, 5, 0, 0, 18432, 154, }, /* 1355 */ - { 156, 7, 4, 0, 0, 18432, 84, }, /* 1356 */ - { 156, 21, 12, 0, 0, 18432, 74, }, /* 1357 */ - { 156, 21, 12, 0, 0, 18432, 128, }, /* 1358 */ - { 155, 7, 12, 0, 0, 18432, 84, }, /* 1359 */ - { 155, 12, 3, 0, 0, 26624, 106, }, /* 1360 */ - { 155, 10, 5, 0, 0, 18432, 154, }, /* 1361 */ - { 155, 7, 4, 0, 0, 18432, 84, }, /* 1362 */ - { 155, 12, 3, 0, 0, 26624, 352, }, /* 1363 */ - { 155, 12, 3, 0, 0, 26624, 158, }, /* 1364 */ - { 155, 21, 12, 0, 0, 18432, 74, }, /* 1365 */ - { 155, 21, 12, 0, 0, 18432, 128, }, /* 1366 */ - { 155, 21, 12, 0, 0, 18432, 110, }, /* 1367 */ - { 144, 7, 12, 0, 0, 18432, 84, }, /* 1368 */ - { 95, 7, 12, 0, 0, 18432, 84, }, /* 1369 */ - { 95, 21, 12, 0, 0, 18432, 74, }, /* 1370 */ - { 95, 13, 12, 0, 0, 18432, 144, }, /* 1371 */ - { 151, 7, 12, 0, 0, 18432, 84, }, /* 1372 */ - { 151, 10, 5, 0, 0, 18432, 154, }, /* 1373 */ - { 151, 12, 3, 0, 0, 26624, 106, }, /* 1374 */ - { 151, 12, 3, 0, 0, 18432, 158, }, /* 1375 */ - { 151, 21, 12, 0, 0, 18432, 128, }, /* 1376 */ - { 151, 21, 12, 0, 0, 18432, 110, }, /* 1377 */ - { 151, 21, 12, 0, 0, 18432, 74, }, /* 1378 */ - { 151, 13, 12, 0, 0, 18432, 144, }, /* 1379 */ - { 151, 15, 12, 0, 0, 18432, 74, }, /* 1380 */ - { 152, 21, 12, 0, 0, 18432, 74, }, /* 1381 */ - { 152, 21, 12, 0, 0, 18432, 110, }, /* 1382 */ - { 152, 7, 12, 0, 0, 18432, 84, }, /* 1383 */ - { 152, 12, 3, 0, 0, 26624, 106, }, /* 1384 */ + { 119, 13, 12, 0, 0, 18432, 144, }, /* 657 */ + { 119, 7, 12, 0, 0, 18432, 84, }, /* 658 */ + { 119, 6, 12, 0, 0, 18432, 94, }, /* 659 */ + { 119, 6, 12, 0, 0, 18432, 96, }, /* 660 */ + { 119, 21, 12, 0, 0, 18432, 128, }, /* 661 */ + { 2, 5, 12, 63, -6222, 18432, 70, }, /* 662 */ + { 2, 5, 12, 67, -6221, 18432, 70, }, /* 663 */ + { 2, 5, 12, 71, -6212, 18432, 70, }, /* 664 */ + { 2, 5, 12, 75, -6210, 18432, 70, }, /* 665 */ + { 2, 5, 12, 79, -6210, 18432, 70, }, /* 666 */ + { 2, 5, 12, 79, -6211, 18432, 70, }, /* 667 */ + { 2, 5, 12, 84, -6204, 18432, 70, }, /* 668 */ + { 2, 5, 12, 88, -6180, 18432, 70, }, /* 669 */ + { 2, 5, 12, 108, 35267, 18432, 70, }, /* 670 */ + { 21, 9, 12, 0, -3008, 18432, 76, }, /* 671 */ + { 117, 21, 12, 0, 0, 18432, 74, }, /* 672 */ + { 107, 12, 3, 0, 0, 26864, 98, }, /* 673 */ + { 107, 12, 3, 0, 0, 26868, 98, }, /* 674 */ + { 100, 21, 12, 0, 0, 18680, 202, }, /* 675 */ + { 107, 12, 3, 0, 0, 26876, 98, }, /* 676 */ + { 107, 12, 3, 0, 0, 26880, 98, }, /* 677 */ + { 107, 12, 3, 0, 0, 26884, 98, }, /* 678 */ + { 107, 12, 3, 0, 0, 26888, 98, }, /* 679 */ + { 107, 12, 3, 0, 0, 26892, 98, }, /* 680 */ + { 107, 12, 3, 0, 0, 26896, 98, }, /* 681 */ + { 100, 10, 5, 0, 0, 18708, 174, }, /* 682 */ + { 107, 12, 3, 0, 0, 26904, 98, }, /* 683 */ + { 100, 7, 12, 0, 0, 18716, 84, }, /* 684 */ + { 100, 7, 12, 0, 0, 18720, 84, }, /* 685 */ + { 100, 7, 12, 0, 0, 18724, 84, }, /* 686 */ + { 100, 7, 12, 0, 0, 18676, 84, }, /* 687 */ + { 107, 12, 3, 0, 0, 26920, 98, }, /* 688 */ + { 100, 7, 12, 0, 0, 18732, 84, }, /* 689 */ + { 100, 7, 12, 0, 0, 18736, 84, }, /* 690 */ + { 107, 12, 3, 0, 0, 26932, 98, }, /* 691 */ + { 100, 7, 12, 0, 0, 18708, 84, }, /* 692 */ + { 100, 10, 5, 0, 0, 18744, 174, }, /* 693 */ + { 107, 12, 3, 0, 0, 26928, 98, }, /* 694 */ + { 100, 7, 12, 0, 0, 18748, 84, }, /* 695 */ + { 2, 5, 12, 0, 0, 18432, 60, }, /* 696 */ + { 1, 6, 12, 0, 0, 18432, 90, }, /* 697 */ + { 2, 6, 12, 0, 0, 18432, 182, }, /* 698 */ + { 0, 5, 12, 0, 35332, 18432, 78, }, /* 699 */ + { 0, 5, 12, 0, 3814, 18432, 78, }, /* 700 */ + { 0, 5, 12, 0, 35384, 18432, 78, }, /* 701 */ + { 0, 5, 12, 0, 0, 18432, 204, }, /* 702 */ + { 1, 6, 12, 0, 0, 18432, 182, }, /* 703 */ + { 107, 12, 3, 0, 0, 26740, 104, }, /* 704 */ + { 107, 12, 3, 0, 0, 26944, 98, }, /* 705 */ + { 107, 12, 3, 0, 0, 26948, 98, }, /* 706 */ + { 0, 9, 12, 92, 1, 18432, 76, }, /* 707 */ + { 0, 5, 12, 92, -1, 18432, 78, }, /* 708 */ + { 0, 5, 12, 0, 0, 18432, 70, }, /* 709 */ + { 0, 5, 12, 92, -58, 18432, 70, }, /* 710 */ + { 0, 9, 12, 0, -7615, 18432, 76, }, /* 711 */ + { 1, 5, 12, 0, 8, 18432, 78, }, /* 712 */ + { 1, 9, 12, 0, -8, 18432, 76, }, /* 713 */ + { 1, 5, 12, 0, 0, 18432, 78, }, /* 714 */ + { 1, 5, 12, 0, 74, 18432, 78, }, /* 715 */ + { 1, 5, 12, 0, 86, 18432, 78, }, /* 716 */ + { 1, 5, 12, 0, 100, 18432, 78, }, /* 717 */ + { 1, 5, 12, 0, 128, 18432, 78, }, /* 718 */ + { 1, 5, 12, 0, 112, 18432, 78, }, /* 719 */ + { 1, 5, 12, 0, 126, 18432, 78, }, /* 720 */ + { 1, 5, 12, 0, 8, 18432, 70, }, /* 721 */ + { 1, 8, 12, 0, -8, 18432, 88, }, /* 722 */ + { 1, 5, 12, 0, 0, 18432, 70, }, /* 723 */ + { 1, 5, 12, 0, 9, 18432, 70, }, /* 724 */ + { 1, 9, 12, 0, -74, 18432, 76, }, /* 725 */ + { 1, 8, 12, 0, -9, 18432, 88, }, /* 726 */ + { 1, 5, 12, 21, -7173, 18432, 78, }, /* 727 */ + { 1, 9, 12, 0, -86, 18432, 76, }, /* 728 */ + { 1, 5, 12, 0, -7235, 18432, 78, }, /* 729 */ + { 1, 9, 12, 0, -100, 18432, 76, }, /* 730 */ + { 1, 5, 12, 0, -7219, 18432, 78, }, /* 731 */ + { 1, 9, 12, 0, -112, 18432, 76, }, /* 732 */ + { 1, 9, 12, 0, -128, 18432, 76, }, /* 733 */ + { 1, 9, 12, 0, -126, 18432, 76, }, /* 734 */ + { 100, 29, 12, 0, 0, 45056, 52, }, /* 735 */ + { 107, 1, 3, 0, 0, 6144, 206, }, /* 736 */ + { 107, 1, 13, 0, 0, 6144, 208, }, /* 737 */ + { 100, 1, 2, 0, 0, 18432, 210, }, /* 738 */ + { 100, 1, 2, 0, 0, 34816, 210, }, /* 739 */ + { 100, 17, 12, 0, 0, 28672, 212, }, /* 740 */ + { 100, 21, 12, 0, 0, 28672, 64, }, /* 741 */ + { 100, 20, 12, 0, 0, 28672, 214, }, /* 742 */ + { 100, 19, 12, 0, 0, 28672, 214, }, /* 743 */ + { 100, 22, 12, 0, 0, 28672, 216, }, /* 744 */ + { 100, 20, 12, 0, 0, 28672, 216, }, /* 745 */ + { 100, 19, 12, 0, 0, 28672, 216, }, /* 746 */ + { 100, 21, 12, 0, 0, 28672, 218, }, /* 747 */ + { 100, 21, 12, 0, 0, 28672, 220, }, /* 748 */ + { 100, 27, 2, 0, 0, 45056, 50, }, /* 749 */ + { 100, 28, 2, 0, 0, 4096, 50, }, /* 750 */ + { 100, 1, 2, 0, 0, 20480, 136, }, /* 751 */ + { 100, 1, 2, 0, 0, 36864, 136, }, /* 752 */ + { 100, 1, 2, 0, 0, 30720, 136, }, /* 753 */ + { 100, 1, 2, 0, 0, 24576, 136, }, /* 754 */ + { 100, 1, 2, 0, 0, 40960, 136, }, /* 755 */ + { 100, 29, 12, 0, 0, 8520, 52, }, /* 756 */ + { 100, 21, 12, 0, 0, 14336, 54, }, /* 757 */ + { 100, 21, 12, 0, 0, 14336, 64, }, /* 758 */ + { 100, 21, 14, 0, 0, 28672, 222, }, /* 759 */ + { 100, 21, 12, 0, 0, 28672, 224, }, /* 760 */ + { 100, 16, 12, 0, 0, 28672, 144, }, /* 761 */ + { 100, 16, 12, 0, 0, 28672, 226, }, /* 762 */ + { 100, 25, 12, 0, 0, 8192, 64, }, /* 763 */ + { 100, 22, 12, 0, 0, 28672, 228, }, /* 764 */ + { 100, 18, 12, 0, 0, 28672, 228, }, /* 765 */ + { 100, 21, 12, 0, 0, 29004, 54, }, /* 766 */ + { 100, 21, 12, 0, 0, 28672, 212, }, /* 767 */ + { 100, 21, 12, 0, 0, 29008, 54, }, /* 768 */ + { 100, 21, 12, 0, 0, 29012, 54, }, /* 769 */ + { 100, 1, 2, 0, 0, 6144, 230, }, /* 770 */ + { 99, 2, 2, 0, 0, 6144, 232, }, /* 771 */ + { 100, 1, 2, 0, 0, 22528, 136, }, /* 772 */ + { 100, 1, 2, 0, 0, 38912, 136, }, /* 773 */ + { 100, 1, 2, 0, 0, 16384, 136, }, /* 774 */ + { 100, 1, 2, 0, 0, 32768, 136, }, /* 775 */ + { 100, 1, 2, 0, 0, 6144, 234, }, /* 776 */ + { 0, 6, 12, 0, 0, 18432, 236, }, /* 777 */ + { 100, 25, 12, 0, 0, 12288, 238, }, /* 778 */ + { 100, 25, 12, 0, 0, 12288, 240, }, /* 779 */ + { 100, 25, 12, 0, 0, 28672, 238, }, /* 780 */ + { 100, 22, 12, 0, 0, 28672, 242, }, /* 781 */ + { 100, 18, 12, 0, 0, 28672, 242, }, /* 782 */ + { 0, 6, 12, 0, 0, 18432, 182, }, /* 783 */ + { 99, 2, 12, 0, 0, 14336, 0, }, /* 784 */ + { 107, 12, 3, 0, 0, 26624, 244, }, /* 785 */ + { 107, 11, 3, 0, 0, 26624, 124, }, /* 786 */ + { 107, 11, 3, 0, 0, 26624, 246, }, /* 787 */ + { 107, 12, 3, 0, 0, 26968, 104, }, /* 788 */ + { 100, 26, 12, 0, 0, 28672, 74, }, /* 789 */ + { 100, 9, 12, 0, 0, 18432, 116, }, /* 790 */ + { 100, 5, 12, 0, 0, 18432, 248, }, /* 791 */ + { 100, 25, 12, 0, 0, 28672, 250, }, /* 792 */ + { 100, 26, 14, 0, 0, 28672, 252, }, /* 793 */ + { 1, 9, 12, 96, -7517, 18432, 76, }, /* 794 */ + { 100, 26, 12, 0, 0, 28672, 122, }, /* 795 */ + { 0, 9, 12, 100, 0, 18432, 76, }, /* 796 */ + { 0, 9, 12, 104, -8262, 18432, 76, }, /* 797 */ + { 100, 26, 12, 0, 0, 14336, 254, }, /* 798 */ + { 0, 9, 12, 0, 28, 18432, 76, }, /* 799 */ + { 100, 7, 12, 0, 0, 18432, 256, }, /* 800 */ + { 100, 5, 14, 0, 0, 18432, 258, }, /* 801 */ + { 100, 25, 12, 0, 0, 28672, 122, }, /* 802 */ + { 100, 5, 12, 0, 0, 18432, 260, }, /* 803 */ + { 0, 5, 12, 0, -28, 18432, 78, }, /* 804 */ + { 0, 14, 12, 0, 16, 18432, 76, }, /* 805 */ + { 0, 14, 12, 0, -16, 18432, 78, }, /* 806 */ + { 0, 14, 12, 0, 0, 18432, 84, }, /* 807 */ + { 100, 25, 14, 0, 0, 28672, 262, }, /* 808 */ + { 100, 26, 14, 0, 0, 28672, 262, }, /* 809 */ + { 100, 26, 12, 0, 0, 28672, 64, }, /* 810 */ + { 100, 25, 12, 0, 0, 28672, 264, }, /* 811 */ + { 100, 25, 12, 0, 0, 28672, 266, }, /* 812 */ + { 100, 25, 12, 0, 0, 12288, 268, }, /* 813 */ + { 100, 22, 12, 0, 0, 28672, 266, }, /* 814 */ + { 100, 18, 12, 0, 0, 28672, 266, }, /* 815 */ + { 100, 26, 14, 0, 0, 28672, 270, }, /* 816 */ + { 100, 22, 12, 0, 0, 28672, 272, }, /* 817 */ + { 100, 18, 12, 0, 0, 28672, 272, }, /* 818 */ + { 100, 26, 12, 0, 0, 18432, 54, }, /* 819 */ + { 99, 2, 12, 0, 0, 18432, 274, }, /* 820 */ + { 100, 15, 12, 0, 0, 10240, 74, }, /* 821 */ + { 100, 26, 12, 0, 26, 18432, 276, }, /* 822 */ + { 100, 26, 14, 0, 26, 18432, 278, }, /* 823 */ + { 100, 26, 12, 0, -26, 18432, 280, }, /* 824 */ + { 100, 25, 14, 0, 0, 28672, 282, }, /* 825 */ + { 100, 26, 14, 0, 0, 28672, 284, }, /* 826 */ + { 100, 26, 14, 0, 0, 28672, 286, }, /* 827 */ + { 110, 26, 12, 0, 0, 18432, 54, }, /* 828 */ + { 100, 26, 12, 0, 0, 28672, 228, }, /* 829 */ + { 44, 9, 12, 0, 48, 18432, 76, }, /* 830 */ + { 44, 5, 12, 0, -48, 18432, 78, }, /* 831 */ + { 0, 9, 12, 0, -10743, 18432, 76, }, /* 832 */ + { 0, 9, 12, 0, -3814, 18432, 76, }, /* 833 */ + { 0, 9, 12, 0, -10727, 18432, 76, }, /* 834 */ + { 0, 5, 12, 0, -10795, 18432, 78, }, /* 835 */ + { 0, 5, 12, 0, -10792, 18432, 78, }, /* 836 */ + { 0, 9, 12, 0, -10780, 18432, 76, }, /* 837 */ + { 0, 9, 12, 0, -10749, 18432, 76, }, /* 838 */ + { 0, 9, 12, 0, -10783, 18432, 76, }, /* 839 */ + { 0, 9, 12, 0, -10782, 18432, 76, }, /* 840 */ + { 0, 9, 12, 0, -10815, 18432, 76, }, /* 841 */ + { 43, 5, 12, 0, 0, 18432, 60, }, /* 842 */ + { 43, 26, 12, 0, 0, 28672, 74, }, /* 843 */ + { 43, 12, 3, 0, 0, 26624, 98, }, /* 844 */ + { 43, 21, 12, 0, 0, 28672, 128, }, /* 845 */ + { 43, 21, 12, 0, 0, 28672, 74, }, /* 846 */ + { 43, 15, 12, 0, 0, 28672, 74, }, /* 847 */ + { 21, 5, 12, 0, -7264, 18432, 78, }, /* 848 */ + { 45, 7, 12, 0, 0, 18432, 84, }, /* 849 */ + { 45, 6, 12, 0, 0, 18432, 148, }, /* 850 */ + { 45, 21, 12, 0, 0, 18432, 74, }, /* 851 */ + { 45, 12, 3, 0, 0, 26624, 288, }, /* 852 */ + { 2, 12, 3, 0, 0, 26624, 106, }, /* 853 */ + { 100, 20, 12, 0, 0, 28672, 228, }, /* 854 */ + { 100, 19, 12, 0, 0, 28672, 228, }, /* 855 */ + { 100, 17, 12, 0, 0, 29020, 212, }, /* 856 */ + { 100, 6, 12, 0, 0, 28672, 290, }, /* 857 */ + { 100, 21, 12, 0, 0, 29024, 54, }, /* 858 */ + { 100, 21, 12, 0, 0, 29028, 54, }, /* 859 */ + { 100, 21, 12, 0, 0, 29032, 224, }, /* 860 */ + { 100, 21, 12, 0, 0, 29036, 292, }, /* 861 */ + { 100, 21, 12, 0, 0, 28812, 54, }, /* 862 */ + { 100, 21, 12, 0, 0, 28672, 292, }, /* 863 */ + { 30, 26, 12, 0, 0, 28672, 294, }, /* 864 */ + { 100, 26, 12, 0, 0, 29040, 296, }, /* 865 */ + { 100, 26, 12, 0, 0, 29040, 298, }, /* 866 */ + { 100, 26, 12, 0, 0, 29040, 300, }, /* 867 */ + { 100, 21, 12, 0, 0, 29044, 292, }, /* 868 */ + { 100, 21, 12, 0, 0, 29048, 224, }, /* 869 */ + { 100, 21, 12, 0, 0, 29052, 54, }, /* 870 */ + { 30, 6, 12, 0, 0, 18432, 138, }, /* 871 */ + { 100, 7, 12, 0, 0, 18816, 302, }, /* 872 */ + { 30, 14, 12, 0, 0, 18432, 302, }, /* 873 */ + { 100, 22, 12, 0, 0, 29060, 228, }, /* 874 */ + { 100, 18, 12, 0, 0, 29060, 228, }, /* 875 */ + { 100, 22, 12, 0, 0, 29064, 228, }, /* 876 */ + { 100, 18, 12, 0, 0, 29064, 228, }, /* 877 */ + { 100, 22, 12, 0, 0, 29068, 62, }, /* 878 */ + { 100, 18, 12, 0, 0, 29068, 62, }, /* 879 */ + { 100, 22, 12, 0, 0, 29068, 228, }, /* 880 */ + { 100, 18, 12, 0, 0, 29068, 228, }, /* 881 */ + { 100, 26, 12, 0, 0, 29052, 54, }, /* 882 */ + { 100, 17, 12, 0, 0, 29052, 212, }, /* 883 */ + { 100, 22, 12, 0, 0, 29052, 216, }, /* 884 */ + { 100, 18, 12, 0, 0, 29052, 216, }, /* 885 */ + { 107, 12, 3, 0, 0, 27024, 98, }, /* 886 */ + { 22, 10, 3, 0, 0, 18432, 304, }, /* 887 */ + { 100, 17, 14, 0, 0, 29052, 306, }, /* 888 */ + { 100, 6, 12, 0, 0, 18836, 138, }, /* 889 */ + { 100, 26, 12, 0, 0, 29052, 74, }, /* 890 */ + { 30, 6, 12, 0, 0, 18432, 148, }, /* 891 */ + { 100, 7, 12, 0, 0, 18840, 84, }, /* 892 */ + { 100, 21, 14, 0, 0, 29080, 252, }, /* 893 */ + { 100, 26, 12, 0, 0, 29056, 74, }, /* 894 */ + { 27, 7, 12, 0, 0, 18432, 84, }, /* 895 */ + { 107, 12, 3, 0, 0, 27028, 98, }, /* 896 */ + { 100, 24, 12, 0, 0, 29076, 308, }, /* 897 */ + { 27, 6, 12, 0, 0, 18432, 138, }, /* 898 */ + { 100, 17, 12, 0, 0, 29076, 130, }, /* 899 */ + { 28, 7, 12, 0, 0, 18432, 84, }, /* 900 */ + { 100, 21, 12, 0, 0, 29068, 144, }, /* 901 */ + { 100, 6, 12, 0, 0, 18836, 96, }, /* 902 */ + { 28, 6, 12, 0, 0, 18432, 138, }, /* 903 */ + { 29, 7, 12, 0, 0, 18432, 84, }, /* 904 */ + { 22, 7, 12, 0, 0, 18432, 84, }, /* 905 */ + { 22, 7, 12, 0, 0, 18432, 184, }, /* 906 */ + { 100, 26, 12, 0, 0, 18816, 74, }, /* 907 */ + { 100, 15, 12, 0, 0, 18816, 74, }, /* 908 */ + { 22, 26, 12, 0, 0, 18432, 74, }, /* 909 */ + { 22, 26, 12, 0, 0, 28672, 74, }, /* 910 */ + { 100, 15, 12, 0, 0, 18432, 74, }, /* 911 */ + { 100, 26, 14, 0, 0, 18816, 252, }, /* 912 */ + { 28, 26, 12, 0, 0, 18432, 74, }, /* 913 */ + { 30, 7, 12, 0, 0, 18432, 310, }, /* 914 */ + { 31, 7, 12, 0, 0, 18432, 84, }, /* 915 */ + { 31, 6, 12, 0, 0, 18432, 138, }, /* 916 */ + { 31, 26, 12, 0, 0, 28672, 74, }, /* 917 */ + { 55, 7, 12, 0, 0, 18432, 84, }, /* 918 */ + { 55, 6, 12, 0, 0, 18432, 148, }, /* 919 */ + { 55, 21, 12, 0, 0, 18432, 110, }, /* 920 */ + { 55, 21, 12, 0, 0, 18432, 128, }, /* 921 */ + { 120, 7, 12, 0, 0, 18432, 84, }, /* 922 */ + { 120, 6, 12, 0, 0, 18432, 138, }, /* 923 */ + { 120, 21, 12, 0, 0, 28672, 110, }, /* 924 */ + { 120, 21, 12, 0, 0, 28672, 128, }, /* 925 */ + { 120, 13, 12, 0, 0, 18432, 144, }, /* 926 */ + { 2, 9, 12, 108, 1, 18432, 76, }, /* 927 */ + { 2, 5, 12, 108, -35267, 18432, 78, }, /* 928 */ + { 2, 7, 12, 0, 0, 18432, 84, }, /* 929 */ + { 2, 21, 12, 0, 0, 28672, 74, }, /* 930 */ + { 2, 12, 3, 0, 0, 26624, 98, }, /* 931 */ + { 2, 6, 12, 0, 0, 28672, 94, }, /* 932 */ + { 2, 6, 12, 0, 0, 18432, 90, }, /* 933 */ + { 127, 7, 12, 0, 0, 18432, 84, }, /* 934 */ + { 127, 14, 12, 0, 0, 18432, 84, }, /* 935 */ + { 127, 12, 3, 0, 0, 26624, 98, }, /* 936 */ + { 127, 21, 12, 0, 0, 18432, 74, }, /* 937 */ + { 127, 21, 12, 0, 0, 18432, 128, }, /* 938 */ + { 127, 21, 12, 0, 0, 18432, 110, }, /* 939 */ + { 100, 24, 12, 0, 0, 29084, 56, }, /* 940 */ + { 0, 9, 12, 0, -35332, 18432, 76, }, /* 941 */ + { 100, 24, 12, 0, 0, 18432, 56, }, /* 942 */ + { 0, 9, 12, 0, -42280, 18432, 76, }, /* 943 */ + { 0, 5, 12, 0, 48, 18432, 78, }, /* 944 */ + { 0, 9, 12, 0, -42308, 18432, 76, }, /* 945 */ + { 0, 9, 12, 0, -42319, 18432, 76, }, /* 946 */ + { 0, 9, 12, 0, -42315, 18432, 76, }, /* 947 */ + { 0, 9, 12, 0, -42305, 18432, 76, }, /* 948 */ + { 0, 9, 12, 0, -42258, 18432, 76, }, /* 949 */ + { 0, 9, 12, 0, -42282, 18432, 76, }, /* 950 */ + { 0, 9, 12, 0, -42261, 18432, 76, }, /* 951 */ + { 0, 9, 12, 0, 928, 18432, 76, }, /* 952 */ + { 0, 9, 12, 0, -48, 18432, 76, }, /* 953 */ + { 0, 9, 12, 0, -42307, 18432, 76, }, /* 954 */ + { 0, 9, 12, 0, -35384, 18432, 76, }, /* 955 */ + { 0, 9, 12, 0, -42343, 18432, 76, }, /* 956 */ + { 0, 9, 12, 0, -42561, 18432, 76, }, /* 957 */ + { 46, 7, 12, 0, 0, 18432, 84, }, /* 958 */ + { 46, 12, 3, 0, 0, 26624, 106, }, /* 959 */ + { 46, 12, 3, 0, 0, 26624, 158, }, /* 960 */ + { 46, 10, 5, 0, 0, 18432, 154, }, /* 961 */ + { 46, 26, 12, 0, 0, 28672, 74, }, /* 962 */ + { 100, 15, 12, 0, 0, 18848, 74, }, /* 963 */ + { 100, 15, 12, 0, 0, 18852, 74, }, /* 964 */ + { 100, 26, 12, 0, 0, 18856, 74, }, /* 965 */ + { 100, 23, 12, 0, 0, 14764, 74, }, /* 966 */ + { 100, 26, 12, 0, 0, 14760, 74, }, /* 967 */ + { 47, 7, 12, 0, 0, 18432, 84, }, /* 968 */ + { 47, 21, 12, 0, 0, 28672, 74, }, /* 969 */ + { 47, 21, 12, 0, 0, 28672, 128, }, /* 970 */ + { 121, 10, 5, 0, 0, 18432, 154, }, /* 971 */ + { 121, 7, 12, 0, 0, 18432, 84, }, /* 972 */ + { 121, 12, 3, 0, 0, 26624, 158, }, /* 973 */ + { 121, 12, 3, 0, 0, 26624, 106, }, /* 974 */ + { 121, 21, 12, 0, 0, 18432, 128, }, /* 975 */ + { 121, 13, 12, 0, 0, 18432, 144, }, /* 976 */ + { 8, 12, 3, 0, 0, 27056, 98, }, /* 977 */ + { 8, 7, 12, 0, 0, 18868, 84, }, /* 978 */ + { 49, 13, 12, 0, 0, 18432, 144, }, /* 979 */ + { 49, 7, 12, 0, 0, 18432, 84, }, /* 980 */ + { 49, 12, 3, 0, 0, 26624, 106, }, /* 981 */ + { 49, 12, 3, 0, 0, 26624, 98, }, /* 982 */ + { 100, 21, 12, 0, 0, 18872, 202, }, /* 983 */ + { 49, 21, 12, 0, 0, 18432, 128, }, /* 984 */ + { 122, 7, 12, 0, 0, 18432, 84, }, /* 985 */ + { 122, 12, 3, 0, 0, 26624, 106, }, /* 986 */ + { 122, 10, 5, 0, 0, 18432, 154, }, /* 987 */ + { 122, 10, 3, 0, 0, 18432, 188, }, /* 988 */ + { 122, 21, 12, 0, 0, 18432, 74, }, /* 989 */ + { 56, 12, 3, 0, 0, 26624, 106, }, /* 990 */ + { 56, 10, 5, 0, 0, 18432, 154, }, /* 991 */ + { 56, 7, 12, 0, 0, 18432, 84, }, /* 992 */ + { 56, 7, 12, 0, 0, 18432, 156, }, /* 993 */ + { 56, 12, 3, 0, 0, 26624, 98, }, /* 994 */ + { 56, 10, 3, 0, 0, 18432, 188, }, /* 995 */ + { 56, 21, 12, 0, 0, 18432, 74, }, /* 996 */ + { 56, 21, 12, 0, 0, 18432, 110, }, /* 997 */ + { 56, 21, 12, 0, 0, 18432, 128, }, /* 998 */ + { 100, 6, 12, 0, 0, 18876, 138, }, /* 999 */ + { 56, 13, 12, 0, 0, 18432, 144, }, /* 1000 */ + { 20, 6, 12, 0, 0, 18432, 138, }, /* 1001 */ + { 123, 7, 12, 0, 0, 18432, 84, }, /* 1002 */ + { 123, 12, 3, 0, 0, 26624, 106, }, /* 1003 */ + { 123, 10, 5, 0, 0, 18432, 154, }, /* 1004 */ + { 123, 13, 12, 0, 0, 18432, 144, }, /* 1005 */ + { 123, 21, 12, 0, 0, 18432, 74, }, /* 1006 */ + { 123, 21, 12, 0, 0, 18432, 128, }, /* 1007 */ + { 20, 7, 12, 0, 0, 18432, 84, }, /* 1008 */ + { 125, 7, 12, 0, 0, 18432, 84, }, /* 1009 */ + { 125, 12, 3, 0, 0, 26624, 106, }, /* 1010 */ + { 125, 7, 12, 0, 0, 18432, 170, }, /* 1011 */ + { 125, 12, 3, 0, 0, 26624, 98, }, /* 1012 */ + { 125, 7, 12, 0, 0, 18432, 312, }, /* 1013 */ + { 125, 6, 12, 0, 0, 18432, 138, }, /* 1014 */ + { 125, 21, 12, 0, 0, 18432, 74, }, /* 1015 */ + { 125, 21, 12, 0, 0, 18432, 110, }, /* 1016 */ + { 128, 7, 12, 0, 0, 18432, 156, }, /* 1017 */ + { 128, 10, 5, 0, 0, 18432, 154, }, /* 1018 */ + { 128, 12, 3, 0, 0, 26624, 106, }, /* 1019 */ + { 128, 21, 12, 0, 0, 18432, 128, }, /* 1020 */ + { 128, 7, 12, 0, 0, 18432, 84, }, /* 1021 */ + { 128, 6, 12, 0, 0, 18432, 138, }, /* 1022 */ + { 128, 12, 3, 0, 0, 26624, 158, }, /* 1023 */ + { 0, 5, 12, 0, -928, 18432, 78, }, /* 1024 */ + { 24, 5, 12, 0, -38864, 18432, 70, }, /* 1025 */ + { 128, 10, 5, 0, 0, 18432, 174, }, /* 1026 */ + { 128, 13, 12, 0, 0, 18432, 144, }, /* 1027 */ + { 22, 7, 9, 0, 0, 18432, 84, }, /* 1028 */ + { 22, 7, 10, 0, 0, 18432, 84, }, /* 1029 */ + { 99, 4, 12, 0, 0, 18432, 0, }, /* 1030 */ + { 99, 3, 12, 0, 0, 18432, 0, }, /* 1031 */ + { 30, 7, 12, 0, 0, 18432, 302, }, /* 1032 */ + { 0, 5, 12, 0, 1, 18432, 70, }, /* 1033 */ + { 0, 5, 12, 0, -1, 18432, 70, }, /* 1034 */ + { 4, 25, 12, 0, 0, 12288, 122, }, /* 1035 */ + { 5, 7, 12, 0, 0, 0, 314, }, /* 1036 */ + { 100, 18, 12, 0, 0, 29120, 54, }, /* 1037 */ + { 100, 22, 12, 0, 0, 29120, 54, }, /* 1038 */ + { 99, 2, 12, 0, 0, 6144, 316, }, /* 1039 */ + { 5, 7, 12, 0, 0, 452, 84, }, /* 1040 */ + { 5, 26, 12, 0, 0, 29124, 74, }, /* 1041 */ + { 107, 12, 3, 0, 0, 26624, 194, }, /* 1042 */ + { 107, 12, 3, 0, 0, 26624, 318, }, /* 1043 */ + { 100, 21, 12, 0, 0, 28672, 74, }, /* 1044 */ + { 100, 21, 12, 0, 0, 28672, 128, }, /* 1045 */ + { 100, 21, 12, 0, 0, 28672, 126, }, /* 1046 */ + { 100, 22, 12, 0, 0, 28672, 74, }, /* 1047 */ + { 100, 18, 12, 0, 0, 28672, 74, }, /* 1048 */ + { 100, 17, 12, 0, 0, 28672, 130, }, /* 1049 */ + { 100, 22, 12, 0, 0, 28672, 320, }, /* 1050 */ + { 100, 18, 12, 0, 0, 28672, 320, }, /* 1051 */ + { 100, 21, 12, 0, 0, 8192, 110, }, /* 1052 */ + { 100, 21, 12, 0, 0, 8192, 322, }, /* 1053 */ + { 100, 21, 12, 0, 0, 8192, 324, }, /* 1054 */ + { 100, 22, 12, 0, 0, 28672, 172, }, /* 1055 */ + { 100, 18, 12, 0, 0, 28672, 172, }, /* 1056 */ + { 100, 21, 12, 0, 0, 14336, 74, }, /* 1057 */ + { 100, 21, 12, 0, 0, 28672, 122, }, /* 1058 */ + { 100, 25, 12, 0, 0, 12288, 122, }, /* 1059 */ + { 100, 17, 12, 0, 0, 12288, 326, }, /* 1060 */ + { 100, 25, 12, 0, 0, 28672, 328, }, /* 1061 */ + { 100, 21, 12, 0, 0, 28672, 320, }, /* 1062 */ + { 100, 21, 12, 0, 0, 28672, 330, }, /* 1063 */ + { 100, 17, 12, 0, 0, 12288, 130, }, /* 1064 */ + { 100, 21, 12, 0, 0, 8192, 74, }, /* 1065 */ + { 100, 13, 12, 0, 0, 10240, 332, }, /* 1066 */ + { 0, 9, 12, 0, 32, 18432, 334, }, /* 1067 */ + { 100, 24, 12, 0, 0, 28672, 336, }, /* 1068 */ + { 0, 5, 12, 0, -32, 18432, 338, }, /* 1069 */ + { 100, 21, 12, 0, 0, 29068, 128, }, /* 1070 */ + { 100, 22, 12, 0, 0, 29068, 340, }, /* 1071 */ + { 100, 18, 12, 0, 0, 29068, 340, }, /* 1072 */ + { 100, 21, 12, 0, 0, 29068, 110, }, /* 1073 */ + { 100, 6, 3, 0, 0, 18836, 342, }, /* 1074 */ + { 100, 1, 2, 0, 0, 28672, 344, }, /* 1075 */ + { 39, 7, 12, 0, 0, 18432, 84, }, /* 1076 */ + { 100, 21, 12, 0, 0, 18888, 74, }, /* 1077 */ + { 100, 21, 12, 0, 0, 29128, 74, }, /* 1078 */ + { 100, 21, 12, 0, 0, 18892, 74, }, /* 1079 */ + { 100, 15, 12, 0, 0, 18896, 74, }, /* 1080 */ + { 100, 26, 12, 0, 0, 18892, 74, }, /* 1081 */ + { 1, 14, 12, 0, 0, 28672, 84, }, /* 1082 */ + { 1, 15, 12, 0, 0, 28672, 74, }, /* 1083 */ + { 1, 26, 12, 0, 0, 28672, 74, }, /* 1084 */ + { 1, 26, 12, 0, 0, 18432, 74, }, /* 1085 */ + { 50, 7, 12, 0, 0, 18432, 84, }, /* 1086 */ + { 51, 7, 12, 0, 0, 18432, 84, }, /* 1087 */ + { 107, 12, 3, 0, 0, 27092, 98, }, /* 1088 */ + { 100, 15, 12, 0, 0, 10708, 74, }, /* 1089 */ + { 105, 7, 12, 0, 0, 18432, 84, }, /* 1090 */ + { 105, 15, 12, 0, 0, 18432, 74, }, /* 1091 */ + { 32, 7, 12, 0, 0, 18432, 84, }, /* 1092 */ + { 32, 14, 12, 0, 0, 18432, 84, }, /* 1093 */ + { 73, 7, 12, 0, 0, 18432, 84, }, /* 1094 */ + { 73, 12, 3, 0, 0, 26624, 106, }, /* 1095 */ + { 108, 7, 12, 0, 0, 18432, 84, }, /* 1096 */ + { 108, 21, 12, 0, 0, 18432, 110, }, /* 1097 */ + { 112, 7, 12, 0, 0, 18432, 84, }, /* 1098 */ + { 112, 21, 12, 0, 0, 18432, 110, }, /* 1099 */ + { 112, 14, 12, 0, 0, 18432, 84, }, /* 1100 */ + { 106, 9, 12, 0, 40, 18432, 76, }, /* 1101 */ + { 106, 5, 12, 0, -40, 18432, 78, }, /* 1102 */ + { 40, 7, 12, 0, 0, 18432, 84, }, /* 1103 */ + { 109, 7, 12, 0, 0, 18432, 84, }, /* 1104 */ + { 109, 13, 12, 0, 0, 18432, 144, }, /* 1105 */ + { 81, 9, 12, 0, 40, 18432, 76, }, /* 1106 */ + { 81, 5, 12, 0, -40, 18432, 78, }, /* 1107 */ + { 66, 7, 12, 0, 0, 18432, 84, }, /* 1108 */ + { 64, 7, 12, 0, 0, 18432, 84, }, /* 1109 */ + { 64, 21, 12, 0, 0, 18432, 74, }, /* 1110 */ + { 167, 9, 12, 0, 39, 18432, 76, }, /* 1111 */ + { 167, 5, 12, 0, -39, 18432, 78, }, /* 1112 */ + { 97, 7, 12, 0, 0, 18432, 84, }, /* 1113 */ + { 69, 7, 12, 0, 0, 18432, 84, }, /* 1114 */ + { 0, 6, 12, 0, 0, 18432, 96, }, /* 1115 */ + { 41, 7, 12, 0, 0, 34816, 84, }, /* 1116 */ + { 129, 7, 12, 0, 0, 34816, 84, }, /* 1117 */ + { 129, 21, 12, 0, 0, 34816, 110, }, /* 1118 */ + { 129, 15, 12, 0, 0, 34816, 74, }, /* 1119 */ + { 144, 7, 12, 0, 0, 34816, 84, }, /* 1120 */ + { 144, 26, 12, 0, 0, 34816, 74, }, /* 1121 */ + { 144, 15, 12, 0, 0, 34816, 74, }, /* 1122 */ + { 143, 7, 12, 0, 0, 34816, 84, }, /* 1123 */ + { 143, 15, 12, 0, 0, 34816, 74, }, /* 1124 */ + { 150, 7, 12, 0, 0, 34816, 84, }, /* 1125 */ + { 150, 15, 12, 0, 0, 34816, 74, }, /* 1126 */ + { 116, 7, 12, 0, 0, 34816, 84, }, /* 1127 */ + { 116, 15, 12, 0, 0, 34816, 74, }, /* 1128 */ + { 116, 21, 12, 0, 0, 28672, 110, }, /* 1129 */ + { 52, 7, 12, 0, 0, 34816, 84, }, /* 1130 */ + { 52, 21, 12, 0, 0, 34816, 74, }, /* 1131 */ + { 171, 7, 12, 0, 0, 34816, 84, }, /* 1132 */ + { 61, 7, 12, 0, 0, 34816, 84, }, /* 1133 */ + { 135, 7, 12, 0, 0, 34816, 84, }, /* 1134 */ + { 135, 15, 12, 0, 0, 34816, 74, }, /* 1135 */ + { 113, 7, 12, 0, 0, 34816, 156, }, /* 1136 */ + { 113, 12, 3, 0, 0, 26624, 106, }, /* 1137 */ + { 113, 12, 3, 0, 0, 26624, 98, }, /* 1138 */ + { 113, 12, 3, 0, 0, 26624, 158, }, /* 1139 */ + { 113, 15, 12, 0, 0, 34816, 74, }, /* 1140 */ + { 113, 21, 12, 0, 0, 34816, 74, }, /* 1141 */ + { 113, 21, 12, 0, 0, 34816, 128, }, /* 1142 */ + { 130, 7, 12, 0, 0, 34816, 84, }, /* 1143 */ + { 130, 15, 12, 0, 0, 34816, 74, }, /* 1144 */ + { 130, 21, 12, 0, 0, 34816, 74, }, /* 1145 */ + { 142, 7, 12, 0, 0, 34816, 84, }, /* 1146 */ + { 142, 15, 12, 0, 0, 34816, 74, }, /* 1147 */ + { 71, 7, 12, 0, 0, 34816, 84, }, /* 1148 */ + { 71, 26, 12, 0, 0, 34816, 74, }, /* 1149 */ + { 71, 12, 3, 0, 0, 26624, 98, }, /* 1150 */ + { 71, 15, 12, 0, 0, 34816, 74, }, /* 1151 */ + { 71, 21, 12, 0, 0, 34816, 110, }, /* 1152 */ + { 71, 21, 12, 0, 0, 35288, 110, }, /* 1153 */ + { 71, 21, 12, 0, 0, 34816, 74, }, /* 1154 */ + { 53, 7, 12, 0, 0, 34816, 84, }, /* 1155 */ + { 53, 21, 12, 0, 0, 28672, 74, }, /* 1156 */ + { 53, 21, 12, 0, 0, 28672, 110, }, /* 1157 */ + { 131, 7, 12, 0, 0, 34816, 84, }, /* 1158 */ + { 131, 15, 12, 0, 0, 34816, 74, }, /* 1159 */ + { 132, 7, 12, 0, 0, 34816, 84, }, /* 1160 */ + { 132, 15, 12, 0, 0, 34816, 74, }, /* 1161 */ + { 74, 7, 12, 0, 0, 34816, 84, }, /* 1162 */ + { 74, 21, 12, 0, 0, 34816, 110, }, /* 1163 */ + { 74, 15, 12, 0, 0, 34816, 74, }, /* 1164 */ + { 57, 7, 12, 0, 0, 34816, 84, }, /* 1165 */ + { 78, 9, 12, 0, 64, 34816, 76, }, /* 1166 */ + { 78, 5, 12, 0, -64, 34816, 78, }, /* 1167 */ + { 78, 15, 12, 0, 0, 34816, 74, }, /* 1168 */ + { 86, 7, 12, 0, 0, 0, 84, }, /* 1169 */ + { 86, 7, 12, 0, 0, 0, 312, }, /* 1170 */ + { 86, 12, 3, 0, 0, 26624, 132, }, /* 1171 */ + { 86, 13, 12, 0, 0, 2048, 144, }, /* 1172 */ + { 93, 13, 12, 0, 0, 2048, 144, }, /* 1173 */ + { 93, 7, 12, 0, 0, 34816, 84, }, /* 1174 */ + { 93, 6, 12, 0, 0, 34816, 96, }, /* 1175 */ + { 93, 9, 12, 0, 32, 34816, 76, }, /* 1176 */ + { 93, 12, 3, 0, 0, 26624, 132, }, /* 1177 */ + { 93, 12, 3, 0, 0, 26624, 164, }, /* 1178 */ + { 93, 12, 3, 0, 0, 26624, 98, }, /* 1179 */ + { 93, 17, 12, 0, 0, 28672, 130, }, /* 1180 */ + { 93, 6, 12, 0, 0, 34816, 138, }, /* 1181 */ + { 93, 5, 12, 0, -32, 34816, 78, }, /* 1182 */ + { 93, 25, 12, 0, 0, 34816, 122, }, /* 1183 */ + { 5, 15, 12, 0, 0, 2048, 74, }, /* 1184 */ + { 89, 7, 12, 0, 0, 34816, 84, }, /* 1185 */ + { 89, 12, 3, 0, 0, 26624, 106, }, /* 1186 */ + { 89, 17, 12, 0, 0, 34816, 130, }, /* 1187 */ + { 5, 6, 12, 0, 0, 0, 148, }, /* 1188 */ + { 5, 21, 12, 0, 0, 28672, 74, }, /* 1189 */ + { 159, 7, 12, 0, 0, 34816, 84, }, /* 1190 */ + { 159, 15, 12, 0, 0, 34816, 74, }, /* 1191 */ + { 87, 7, 12, 0, 0, 0, 84, }, /* 1192 */ + { 87, 12, 3, 0, 0, 26624, 98, }, /* 1193 */ + { 87, 15, 12, 0, 0, 0, 74, }, /* 1194 */ + { 87, 21, 12, 0, 0, 0, 128, }, /* 1195 */ + { 91, 7, 12, 0, 0, 34816, 84, }, /* 1196 */ + { 91, 12, 3, 0, 0, 26624, 98, }, /* 1197 */ + { 91, 21, 12, 0, 0, 34816, 128, }, /* 1198 */ + { 163, 7, 12, 0, 0, 34816, 84, }, /* 1199 */ + { 163, 15, 12, 0, 0, 34816, 74, }, /* 1200 */ + { 160, 7, 12, 0, 0, 34816, 84, }, /* 1201 */ + { 134, 10, 5, 0, 0, 18432, 154, }, /* 1202 */ + { 134, 12, 3, 0, 0, 26624, 106, }, /* 1203 */ + { 134, 7, 12, 0, 0, 18432, 84, }, /* 1204 */ + { 134, 12, 3, 0, 0, 26624, 158, }, /* 1205 */ + { 134, 21, 12, 0, 0, 18432, 128, }, /* 1206 */ + { 134, 21, 12, 0, 0, 18432, 110, }, /* 1207 */ + { 134, 15, 12, 0, 0, 28672, 74, }, /* 1208 */ + { 134, 13, 12, 0, 0, 18432, 144, }, /* 1209 */ + { 134, 12, 3, 0, 0, 26624, 288, }, /* 1210 */ + { 58, 12, 3, 0, 0, 26624, 106, }, /* 1211 */ + { 58, 10, 5, 0, 0, 18432, 154, }, /* 1212 */ + { 58, 7, 12, 0, 0, 18432, 84, }, /* 1213 */ + { 58, 12, 3, 0, 0, 26624, 158, }, /* 1214 */ + { 58, 12, 3, 0, 0, 26624, 98, }, /* 1215 */ + { 58, 21, 12, 0, 0, 18432, 74, }, /* 1216 */ + { 58, 1, 4, 0, 0, 18432, 134, }, /* 1217 */ + { 58, 21, 12, 0, 0, 18432, 128, }, /* 1218 */ + { 137, 7, 12, 0, 0, 18432, 84, }, /* 1219 */ + { 137, 13, 12, 0, 0, 18432, 144, }, /* 1220 */ + { 60, 12, 3, 0, 0, 26624, 106, }, /* 1221 */ + { 60, 7, 12, 0, 0, 18432, 156, }, /* 1222 */ + { 60, 10, 5, 0, 0, 18432, 154, }, /* 1223 */ + { 60, 12, 3, 0, 0, 26624, 158, }, /* 1224 */ + { 60, 13, 12, 0, 0, 18432, 144, }, /* 1225 */ + { 60, 21, 12, 0, 0, 18432, 74, }, /* 1226 */ + { 60, 21, 12, 0, 0, 18432, 128, }, /* 1227 */ + { 70, 7, 12, 0, 0, 18432, 84, }, /* 1228 */ + { 70, 12, 3, 0, 0, 26624, 98, }, /* 1229 */ + { 70, 21, 12, 0, 0, 18432, 74, }, /* 1230 */ + { 62, 12, 3, 0, 0, 26624, 106, }, /* 1231 */ + { 62, 10, 5, 0, 0, 18432, 154, }, /* 1232 */ + { 62, 7, 12, 0, 0, 18432, 84, }, /* 1233 */ + { 62, 10, 3, 0, 0, 18432, 188, }, /* 1234 */ + { 62, 7, 4, 0, 0, 18432, 84, }, /* 1235 */ + { 62, 21, 12, 0, 0, 18432, 128, }, /* 1236 */ + { 62, 21, 12, 0, 0, 18432, 74, }, /* 1237 */ + { 62, 12, 3, 0, 0, 26624, 104, }, /* 1238 */ + { 62, 12, 3, 0, 0, 26624, 98, }, /* 1239 */ + { 62, 13, 12, 0, 0, 18432, 144, }, /* 1240 */ + { 17, 15, 12, 0, 0, 18432, 74, }, /* 1241 */ + { 68, 7, 12, 0, 0, 18432, 84, }, /* 1242 */ + { 68, 10, 5, 0, 0, 18432, 154, }, /* 1243 */ + { 68, 12, 3, 0, 0, 26624, 106, }, /* 1244 */ + { 68, 10, 3, 0, 0, 18432, 188, }, /* 1245 */ + { 68, 12, 3, 0, 0, 26624, 98, }, /* 1246 */ + { 68, 12, 3, 0, 0, 26624, 162, }, /* 1247 */ + { 68, 21, 12, 0, 0, 18432, 128, }, /* 1248 */ + { 68, 21, 12, 0, 0, 18432, 110, }, /* 1249 */ + { 68, 21, 12, 0, 0, 18432, 74, }, /* 1250 */ + { 77, 7, 12, 0, 0, 18432, 84, }, /* 1251 */ + { 77, 21, 12, 0, 0, 18432, 128, }, /* 1252 */ + { 75, 7, 12, 0, 0, 18432, 84, }, /* 1253 */ + { 75, 12, 3, 0, 0, 26624, 106, }, /* 1254 */ + { 75, 10, 5, 0, 0, 18432, 154, }, /* 1255 */ + { 75, 12, 3, 0, 0, 26624, 98, }, /* 1256 */ + { 75, 12, 3, 0, 0, 26624, 158, }, /* 1257 */ + { 75, 13, 12, 0, 0, 18432, 144, }, /* 1258 */ + { 67, 12, 3, 0, 0, 26624, 106, }, /* 1259 */ + { 67, 12, 3, 0, 0, 26836, 106, }, /* 1260 */ + { 67, 10, 5, 0, 0, 18432, 154, }, /* 1261 */ + { 67, 10, 5, 0, 0, 18644, 154, }, /* 1262 */ + { 67, 7, 12, 0, 0, 18432, 84, }, /* 1263 */ + { 107, 12, 3, 0, 0, 26836, 98, }, /* 1264 */ + { 67, 12, 3, 0, 0, 26836, 98, }, /* 1265 */ + { 67, 10, 3, 0, 0, 18432, 160, }, /* 1266 */ + { 67, 10, 3, 0, 0, 18432, 188, }, /* 1267 */ + { 67, 7, 12, 0, 0, 18432, 346, }, /* 1268 */ + { 67, 12, 3, 0, 0, 26624, 98, }, /* 1269 */ + { 98, 7, 12, 0, 0, 18432, 156, }, /* 1270 */ + { 98, 7, 12, 0, 0, 18432, 84, }, /* 1271 */ + { 98, 10, 3, 0, 0, 18432, 160, }, /* 1272 */ + { 98, 10, 5, 0, 0, 18432, 154, }, /* 1273 */ + { 98, 12, 3, 0, 0, 26624, 106, }, /* 1274 */ + { 98, 12, 3, 0, 0, 26624, 158, }, /* 1275 */ + { 98, 10, 3, 0, 0, 18432, 188, }, /* 1276 */ + { 98, 7, 4, 0, 0, 18432, 84, }, /* 1277 */ + { 98, 12, 3, 0, 0, 26624, 164, }, /* 1278 */ + { 98, 7, 12, 0, 0, 18432, 348, }, /* 1279 */ + { 98, 21, 12, 0, 0, 18432, 128, }, /* 1280 */ + { 98, 21, 12, 0, 0, 18432, 74, }, /* 1281 */ + { 98, 12, 3, 0, 0, 26624, 98, }, /* 1282 */ + { 80, 7, 12, 0, 0, 18432, 84, }, /* 1283 */ + { 80, 10, 5, 0, 0, 18432, 154, }, /* 1284 */ + { 80, 12, 3, 0, 0, 26624, 106, }, /* 1285 */ + { 80, 12, 3, 0, 0, 26624, 158, }, /* 1286 */ + { 80, 12, 3, 0, 0, 26624, 98, }, /* 1287 */ + { 80, 21, 12, 0, 0, 18432, 128, }, /* 1288 */ + { 80, 21, 12, 0, 0, 18432, 110, }, /* 1289 */ + { 80, 21, 12, 0, 0, 18432, 74, }, /* 1290 */ + { 80, 13, 12, 0, 0, 18432, 144, }, /* 1291 */ + { 80, 12, 3, 0, 0, 26624, 104, }, /* 1292 */ + { 76, 7, 12, 0, 0, 18432, 84, }, /* 1293 */ + { 76, 10, 3, 0, 0, 18432, 160, }, /* 1294 */ + { 76, 10, 5, 0, 0, 18432, 154, }, /* 1295 */ + { 76, 12, 3, 0, 0, 26624, 106, }, /* 1296 */ + { 76, 12, 3, 0, 0, 26624, 158, }, /* 1297 */ + { 76, 12, 3, 0, 0, 26624, 98, }, /* 1298 */ + { 76, 21, 12, 0, 0, 18432, 74, }, /* 1299 */ + { 76, 13, 12, 0, 0, 18432, 144, }, /* 1300 */ + { 146, 7, 12, 0, 0, 18432, 84, }, /* 1301 */ + { 146, 10, 3, 0, 0, 18432, 160, }, /* 1302 */ + { 146, 10, 5, 0, 0, 18432, 154, }, /* 1303 */ + { 146, 12, 3, 0, 0, 26624, 106, }, /* 1304 */ + { 146, 12, 3, 0, 0, 26624, 158, }, /* 1305 */ + { 146, 12, 3, 0, 0, 26624, 98, }, /* 1306 */ + { 146, 21, 12, 0, 0, 18432, 74, }, /* 1307 */ + { 146, 21, 12, 0, 0, 18432, 128, }, /* 1308 */ + { 146, 21, 12, 0, 0, 18432, 110, }, /* 1309 */ + { 146, 21, 12, 0, 0, 18432, 192, }, /* 1310 */ + { 72, 7, 12, 0, 0, 18432, 84, }, /* 1311 */ + { 72, 10, 5, 0, 0, 18432, 154, }, /* 1312 */ + { 72, 12, 3, 0, 0, 26624, 106, }, /* 1313 */ + { 72, 12, 3, 0, 0, 26624, 158, }, /* 1314 */ + { 72, 21, 12, 0, 0, 18432, 128, }, /* 1315 */ + { 72, 21, 12, 0, 0, 18432, 74, }, /* 1316 */ + { 72, 13, 12, 0, 0, 18432, 144, }, /* 1317 */ + { 63, 7, 12, 0, 0, 18432, 84, }, /* 1318 */ + { 63, 12, 3, 0, 0, 26624, 106, }, /* 1319 */ + { 63, 10, 5, 0, 0, 18432, 154, }, /* 1320 */ + { 63, 10, 3, 0, 0, 18432, 188, }, /* 1321 */ + { 63, 12, 3, 0, 0, 26624, 98, }, /* 1322 */ + { 63, 21, 12, 0, 0, 18432, 74, }, /* 1323 */ + { 63, 13, 12, 0, 0, 18432, 144, }, /* 1324 */ + { 148, 7, 12, 0, 0, 18432, 84, }, /* 1325 */ + { 148, 12, 3, 0, 0, 26624, 106, }, /* 1326 */ + { 148, 10, 5, 0, 0, 18432, 154, }, /* 1327 */ + { 148, 10, 12, 0, 0, 18432, 154, }, /* 1328 */ + { 148, 12, 3, 0, 0, 26624, 158, }, /* 1329 */ + { 148, 13, 12, 0, 0, 18432, 144, }, /* 1330 */ + { 148, 15, 12, 0, 0, 18432, 74, }, /* 1331 */ + { 148, 21, 12, 0, 0, 18432, 128, }, /* 1332 */ + { 148, 26, 12, 0, 0, 18432, 74, }, /* 1333 */ + { 84, 7, 12, 0, 0, 18432, 84, }, /* 1334 */ + { 84, 10, 5, 0, 0, 18432, 154, }, /* 1335 */ + { 84, 12, 3, 0, 0, 26624, 106, }, /* 1336 */ + { 84, 12, 3, 0, 0, 26624, 158, }, /* 1337 */ + { 84, 12, 3, 0, 0, 26624, 98, }, /* 1338 */ + { 84, 21, 12, 0, 0, 18432, 74, }, /* 1339 */ + { 147, 9, 12, 0, 32, 18432, 76, }, /* 1340 */ + { 147, 5, 12, 0, -32, 18432, 78, }, /* 1341 */ + { 147, 13, 12, 0, 0, 18432, 144, }, /* 1342 */ + { 147, 15, 12, 0, 0, 18432, 74, }, /* 1343 */ + { 147, 7, 12, 0, 0, 18432, 84, }, /* 1344 */ + { 164, 7, 12, 0, 0, 18432, 156, }, /* 1345 */ + { 164, 10, 3, 0, 0, 18432, 160, }, /* 1346 */ + { 164, 10, 5, 0, 0, 18432, 154, }, /* 1347 */ + { 164, 12, 3, 0, 0, 26624, 106, }, /* 1348 */ + { 164, 10, 3, 0, 0, 18432, 188, }, /* 1349 */ + { 164, 12, 3, 0, 0, 26624, 158, }, /* 1350 */ + { 164, 7, 4, 0, 0, 18432, 84, }, /* 1351 */ + { 164, 12, 3, 0, 0, 26624, 98, }, /* 1352 */ + { 164, 21, 12, 0, 0, 18432, 128, }, /* 1353 */ + { 164, 21, 12, 0, 0, 18432, 74, }, /* 1354 */ + { 164, 13, 12, 0, 0, 18432, 144, }, /* 1355 */ + { 88, 7, 12, 0, 0, 18432, 84, }, /* 1356 */ + { 88, 10, 5, 0, 0, 18432, 154, }, /* 1357 */ + { 88, 12, 3, 0, 0, 26624, 106, }, /* 1358 */ + { 88, 12, 3, 0, 0, 26624, 158, }, /* 1359 */ + { 88, 21, 12, 0, 0, 18432, 74, }, /* 1360 */ + { 156, 7, 12, 0, 0, 18432, 156, }, /* 1361 */ + { 156, 12, 3, 0, 0, 26624, 106, }, /* 1362 */ + { 156, 12, 3, 0, 0, 18432, 106, }, /* 1363 */ + { 156, 12, 3, 0, 0, 26624, 104, }, /* 1364 */ + { 156, 12, 3, 0, 0, 26624, 158, }, /* 1365 */ + { 156, 10, 5, 0, 0, 18432, 154, }, /* 1366 */ + { 156, 7, 12, 0, 0, 18432, 84, }, /* 1367 */ + { 156, 21, 12, 0, 0, 18432, 74, }, /* 1368 */ + { 156, 21, 12, 0, 0, 18432, 128, }, /* 1369 */ + { 155, 7, 12, 0, 0, 18432, 156, }, /* 1370 */ + { 155, 12, 3, 0, 0, 26624, 106, }, /* 1371 */ + { 155, 10, 5, 0, 0, 18432, 154, }, /* 1372 */ + { 155, 7, 4, 0, 0, 18432, 84, }, /* 1373 */ + { 155, 12, 3, 0, 0, 26624, 350, }, /* 1374 */ + { 155, 12, 3, 0, 0, 26624, 158, }, /* 1375 */ + { 155, 21, 12, 0, 0, 18432, 74, }, /* 1376 */ + { 155, 21, 12, 0, 0, 18432, 128, }, /* 1377 */ + { 155, 7, 12, 0, 0, 18432, 84, }, /* 1378 */ + { 155, 21, 12, 0, 0, 18432, 110, }, /* 1379 */ + { 145, 7, 12, 0, 0, 18432, 84, }, /* 1380 */ + { 96, 7, 12, 0, 0, 18432, 84, }, /* 1381 */ + { 96, 21, 12, 0, 0, 18432, 74, }, /* 1382 */ + { 96, 13, 12, 0, 0, 18432, 144, }, /* 1383 */ + { 152, 7, 12, 0, 0, 18432, 84, }, /* 1384 */ { 152, 10, 5, 0, 0, 18432, 154, }, /* 1385 */ - { 82, 7, 12, 0, 0, 18432, 84, }, /* 1386 */ - { 82, 12, 3, 0, 0, 26624, 106, }, /* 1387 */ - { 82, 12, 3, 0, 0, 26624, 98, }, /* 1388 */ - { 82, 12, 3, 0, 0, 26624, 158, }, /* 1389 */ - { 82, 7, 4, 0, 0, 18432, 84, }, /* 1390 */ - { 82, 13, 12, 0, 0, 18432, 144, }, /* 1391 */ - { 84, 7, 12, 0, 0, 18432, 84, }, /* 1392 */ - { 84, 10, 5, 0, 0, 18432, 154, }, /* 1393 */ - { 84, 12, 3, 0, 0, 26624, 106, }, /* 1394 */ - { 84, 12, 3, 0, 0, 26624, 158, }, /* 1395 */ - { 84, 13, 12, 0, 0, 18432, 144, }, /* 1396 */ - { 157, 7, 12, 0, 0, 18432, 84, }, /* 1397 */ - { 157, 12, 3, 0, 0, 26624, 106, }, /* 1398 */ - { 157, 10, 5, 0, 0, 18432, 154, }, /* 1399 */ - { 157, 21, 12, 0, 0, 18432, 128, }, /* 1400 */ - { 168, 12, 3, 0, 0, 26624, 106, }, /* 1401 */ - { 168, 7, 4, 0, 0, 18432, 84, }, /* 1402 */ - { 168, 10, 5, 0, 0, 18432, 154, }, /* 1403 */ - { 168, 7, 12, 0, 0, 18432, 84, }, /* 1404 */ - { 168, 10, 3, 0, 0, 18432, 188, }, /* 1405 */ - { 168, 12, 3, 0, 0, 26624, 158, }, /* 1406 */ - { 168, 21, 12, 0, 0, 18432, 128, }, /* 1407 */ - { 168, 21, 12, 0, 0, 18432, 74, }, /* 1408 */ - { 168, 13, 12, 0, 0, 18432, 144, }, /* 1409 */ - { 168, 12, 3, 0, 0, 26624, 98, }, /* 1410 */ - { 13, 15, 12, 0, 0, 18432, 74, }, /* 1411 */ - { 13, 21, 12, 0, 0, 18432, 74, }, /* 1412 */ - { 114, 7, 12, 0, 0, 18432, 84, }, /* 1413 */ - { 114, 14, 12, 0, 0, 18432, 84, }, /* 1414 */ - { 114, 21, 12, 0, 0, 18432, 110, }, /* 1415 */ - { 89, 7, 12, 0, 0, 18432, 84, }, /* 1416 */ - { 89, 21, 12, 0, 0, 18432, 74, }, /* 1417 */ - { 125, 7, 12, 0, 0, 18432, 84, }, /* 1418 */ - { 125, 1, 2, 0, 0, 18432, 346, }, /* 1419 */ - { 125, 12, 3, 0, 0, 26624, 104, }, /* 1420 */ - { 125, 12, 3, 0, 0, 26624, 98, }, /* 1421 */ - { 148, 7, 12, 0, 0, 18432, 84, }, /* 1422 */ - { 93, 7, 12, 0, 0, 18432, 84, }, /* 1423 */ - { 93, 12, 3, 0, 0, 26624, 106, }, /* 1424 */ - { 93, 10, 5, 0, 0, 18432, 154, }, /* 1425 */ - { 93, 12, 3, 0, 0, 26624, 158, }, /* 1426 */ - { 93, 13, 12, 0, 0, 18432, 144, }, /* 1427 */ - { 140, 7, 12, 0, 0, 18432, 84, }, /* 1428 */ - { 140, 13, 12, 0, 0, 18432, 144, }, /* 1429 */ - { 140, 21, 12, 0, 0, 18432, 128, }, /* 1430 */ - { 166, 7, 12, 0, 0, 18432, 84, }, /* 1431 */ - { 166, 13, 12, 0, 0, 18432, 144, }, /* 1432 */ - { 137, 7, 12, 0, 0, 18432, 84, }, /* 1433 */ - { 137, 12, 3, 0, 0, 26624, 98, }, /* 1434 */ - { 137, 21, 12, 0, 0, 18432, 128, }, /* 1435 */ - { 138, 7, 12, 0, 0, 18432, 84, }, /* 1436 */ - { 138, 12, 3, 0, 0, 26624, 98, }, /* 1437 */ - { 138, 21, 12, 0, 0, 18432, 128, }, /* 1438 */ - { 138, 21, 12, 0, 0, 18432, 110, }, /* 1439 */ - { 138, 21, 12, 0, 0, 18432, 74, }, /* 1440 */ - { 138, 26, 12, 0, 0, 18432, 74, }, /* 1441 */ - { 138, 6, 12, 0, 0, 18432, 148, }, /* 1442 */ - { 138, 6, 12, 0, 0, 18432, 138, }, /* 1443 */ - { 138, 13, 12, 0, 0, 18432, 144, }, /* 1444 */ - { 138, 15, 12, 0, 0, 18432, 74, }, /* 1445 */ - { 170, 6, 12, 0, 0, 18432, 148, }, /* 1446 */ - { 170, 7, 12, 0, 0, 18432, 84, }, /* 1447 */ - { 170, 7, 7, 0, 0, 18432, 84, }, /* 1448 */ - { 170, 6, 12, 0, 0, 18432, 94, }, /* 1449 */ - { 170, 21, 12, 0, 0, 18432, 74, }, /* 1450 */ - { 170, 21, 12, 0, 0, 18432, 128, }, /* 1451 */ - { 170, 13, 12, 0, 0, 18432, 144, }, /* 1452 */ - { 158, 9, 12, 0, 32, 18432, 76, }, /* 1453 */ - { 158, 5, 12, 0, -32, 18432, 78, }, /* 1454 */ - { 158, 15, 12, 0, 0, 18432, 74, }, /* 1455 */ - { 158, 21, 12, 0, 0, 18432, 110, }, /* 1456 */ - { 158, 21, 12, 0, 0, 18432, 128, }, /* 1457 */ - { 158, 21, 12, 0, 0, 18432, 74, }, /* 1458 */ - { 135, 7, 12, 0, 0, 18432, 84, }, /* 1459 */ - { 135, 12, 3, 0, 0, 26624, 106, }, /* 1460 */ - { 135, 10, 5, 0, 0, 18432, 154, }, /* 1461 */ - { 135, 12, 3, 0, 0, 26624, 132, }, /* 1462 */ - { 135, 6, 12, 0, 0, 18432, 94, }, /* 1463 */ - { 81, 6, 12, 0, 0, 18432, 138, }, /* 1464 */ - { 154, 6, 12, 0, 0, 18432, 138, }, /* 1465 */ - { 30, 21, 12, 0, 0, 28672, 74, }, /* 1466 */ - { 165, 12, 3, 0, 0, 26624, 354, }, /* 1467 */ - { 30, 10, 3, 0, 0, 18432, 356, }, /* 1468 */ - { 81, 7, 12, 0, 0, 18432, 304, }, /* 1469 */ - { 165, 7, 12, 0, 0, 18432, 304, }, /* 1470 */ - { 28, 6, 12, 0, 0, 18432, 94, }, /* 1471 */ - { 154, 7, 12, 0, 0, 18432, 304, }, /* 1472 */ - { 65, 7, 12, 0, 0, 18432, 84, }, /* 1473 */ - { 65, 26, 12, 0, 0, 18432, 74, }, /* 1474 */ - { 65, 12, 3, 0, 0, 26624, 104, }, /* 1475 */ - { 65, 12, 3, 0, 0, 26624, 106, }, /* 1476 */ - { 65, 21, 12, 0, 0, 18432, 128, }, /* 1477 */ - { 99, 1, 2, 0, 0, 6472, 66, }, /* 1478 */ - { 99, 13, 12, 0, 0, 10240, 144, }, /* 1479 */ - { 99, 10, 3, 0, 0, 18432, 358, }, /* 1480 */ - { 99, 10, 3, 0, 0, 18432, 306, }, /* 1481 */ - { 1, 12, 3, 0, 0, 26624, 104, }, /* 1482 */ - { 99, 25, 12, 0, 0, 28672, 360, }, /* 1483 */ - { 99, 13, 12, 0, 0, 10240, 226, }, /* 1484 */ - { 150, 26, 12, 0, 0, 18432, 74, }, /* 1485 */ - { 150, 12, 3, 0, 0, 26624, 104, }, /* 1486 */ - { 150, 21, 12, 0, 0, 18432, 110, }, /* 1487 */ - { 150, 21, 12, 0, 0, 18432, 128, }, /* 1488 */ - { 150, 21, 12, 0, 0, 18432, 74, }, /* 1489 */ - { 44, 12, 3, 0, 0, 26624, 106, }, /* 1490 */ - { 2, 6, 12, 0, 0, 18432, 92, }, /* 1491 */ - { 161, 7, 12, 0, 0, 18432, 84, }, /* 1492 */ - { 161, 12, 3, 0, 0, 26624, 98, }, /* 1493 */ - { 161, 6, 12, 0, 0, 18432, 148, }, /* 1494 */ - { 161, 6, 12, 0, 0, 18432, 138, }, /* 1495 */ - { 161, 13, 12, 0, 0, 18432, 144, }, /* 1496 */ - { 161, 26, 12, 0, 0, 18432, 74, }, /* 1497 */ - { 91, 7, 12, 0, 0, 18432, 84, }, /* 1498 */ - { 91, 12, 3, 0, 0, 26624, 98, }, /* 1499 */ - { 162, 7, 12, 0, 0, 18432, 84, }, /* 1500 */ - { 162, 12, 3, 0, 0, 26624, 98, }, /* 1501 */ - { 162, 13, 12, 0, 0, 18432, 144, }, /* 1502 */ - { 162, 23, 12, 0, 0, 14336, 74, }, /* 1503 */ - { 169, 7, 12, 0, 0, 18432, 84, }, /* 1504 */ - { 169, 6, 12, 0, 0, 18432, 148, }, /* 1505 */ - { 169, 12, 3, 0, 0, 26624, 104, }, /* 1506 */ - { 169, 13, 12, 0, 0, 18432, 144, }, /* 1507 */ - { 94, 7, 12, 0, 0, 18432, 84, }, /* 1508 */ - { 94, 12, 3, 0, 0, 26624, 98, }, /* 1509 */ - { 94, 12, 3, 0, 0, 26624, 164, }, /* 1510 */ - { 94, 13, 12, 0, 0, 18432, 144, }, /* 1511 */ - { 94, 21, 12, 0, 0, 18432, 74, }, /* 1512 */ - { 139, 7, 12, 0, 0, 34816, 84, }, /* 1513 */ - { 139, 15, 12, 0, 0, 34816, 74, }, /* 1514 */ - { 139, 12, 3, 0, 0, 26624, 98, }, /* 1515 */ - { 79, 9, 12, 0, 34, 34816, 76, }, /* 1516 */ - { 79, 5, 12, 0, -34, 34816, 78, }, /* 1517 */ - { 79, 12, 3, 0, 0, 26624, 164, }, /* 1518 */ - { 79, 12, 3, 0, 0, 26624, 106, }, /* 1519 */ - { 79, 12, 3, 0, 0, 26624, 98, }, /* 1520 */ - { 79, 6, 12, 0, 0, 34816, 148, }, /* 1521 */ - { 79, 13, 12, 0, 0, 34816, 144, }, /* 1522 */ - { 79, 21, 12, 0, 0, 34816, 74, }, /* 1523 */ - { 99, 15, 12, 0, 0, 0, 74, }, /* 1524 */ - { 99, 26, 12, 0, 0, 0, 74, }, /* 1525 */ - { 99, 23, 12, 0, 0, 0, 74, }, /* 1526 */ - { 5, 7, 12, 0, 0, 0, 254, }, /* 1527 */ - { 99, 26, 14, 0, 0, 28672, 362, }, /* 1528 */ - { 99, 26, 14, 0, 0, 28672, 364, }, /* 1529 */ - { 98, 2, 14, 0, 0, 18432, 366, }, /* 1530 */ - { 99, 26, 12, 0, 0, 18432, 368, }, /* 1531 */ - { 99, 26, 14, 0, 0, 18432, 370, }, /* 1532 */ - { 99, 26, 14, 0, 0, 18432, 364, }, /* 1533 */ - { 99, 26, 11, 0, 0, 18432, 372, }, /* 1534 */ - { 27, 26, 12, 0, 0, 18432, 74, }, /* 1535 */ - { 99, 26, 14, 0, 0, 18432, 250, }, /* 1536 */ - { 99, 26, 14, 0, 0, 18784, 364, }, /* 1537 */ - { 99, 26, 14, 0, 0, 28672, 374, }, /* 1538 */ - { 99, 26, 14, 0, 0, 28672, 376, }, /* 1539 */ - { 99, 24, 3, 0, 0, 28672, 378, }, /* 1540 */ - { 99, 26, 14, 0, 0, 28672, 380, }, /* 1541 */ - { 99, 1, 3, 0, 0, 6144, 382, }, /* 1542 */ + { 152, 12, 3, 0, 0, 26624, 106, }, /* 1386 */ + { 152, 12, 3, 0, 0, 18432, 158, }, /* 1387 */ + { 152, 21, 12, 0, 0, 18432, 128, }, /* 1388 */ + { 152, 21, 12, 0, 0, 18432, 110, }, /* 1389 */ + { 152, 21, 12, 0, 0, 18432, 74, }, /* 1390 */ + { 152, 13, 12, 0, 0, 18432, 144, }, /* 1391 */ + { 152, 15, 12, 0, 0, 18432, 74, }, /* 1392 */ + { 153, 21, 12, 0, 0, 18432, 74, }, /* 1393 */ + { 153, 21, 12, 0, 0, 18432, 110, }, /* 1394 */ + { 153, 7, 12, 0, 0, 18432, 84, }, /* 1395 */ + { 153, 12, 3, 0, 0, 26624, 106, }, /* 1396 */ + { 153, 10, 5, 0, 0, 18432, 154, }, /* 1397 */ + { 83, 7, 12, 0, 0, 18432, 84, }, /* 1398 */ + { 83, 12, 3, 0, 0, 26624, 106, }, /* 1399 */ + { 83, 12, 3, 0, 0, 26624, 98, }, /* 1400 */ + { 83, 12, 3, 0, 0, 26624, 158, }, /* 1401 */ + { 83, 7, 4, 0, 0, 18432, 84, }, /* 1402 */ + { 83, 13, 12, 0, 0, 18432, 144, }, /* 1403 */ + { 85, 7, 12, 0, 0, 18432, 84, }, /* 1404 */ + { 85, 10, 5, 0, 0, 18432, 154, }, /* 1405 */ + { 85, 12, 3, 0, 0, 26624, 106, }, /* 1406 */ + { 85, 12, 3, 0, 0, 26624, 158, }, /* 1407 */ + { 85, 13, 12, 0, 0, 18432, 144, }, /* 1408 */ + { 173, 7, 12, 0, 0, 18432, 84, }, /* 1409 */ + { 173, 6, 12, 0, 0, 18432, 96, }, /* 1410 */ + { 173, 13, 12, 0, 0, 18432, 144, }, /* 1411 */ + { 157, 7, 12, 0, 0, 18432, 84, }, /* 1412 */ + { 157, 12, 3, 0, 0, 26624, 106, }, /* 1413 */ + { 157, 10, 5, 0, 0, 18432, 154, }, /* 1414 */ + { 157, 21, 12, 0, 0, 18432, 128, }, /* 1415 */ + { 168, 12, 3, 0, 0, 26624, 106, }, /* 1416 */ + { 168, 7, 4, 0, 0, 18432, 84, }, /* 1417 */ + { 168, 10, 5, 0, 0, 18432, 154, }, /* 1418 */ + { 168, 7, 12, 0, 0, 18432, 156, }, /* 1419 */ + { 168, 10, 3, 0, 0, 18432, 188, }, /* 1420 */ + { 168, 12, 3, 0, 0, 26624, 158, }, /* 1421 */ + { 168, 21, 12, 0, 0, 18432, 128, }, /* 1422 */ + { 168, 21, 12, 0, 0, 18432, 74, }, /* 1423 */ + { 168, 13, 12, 0, 0, 18432, 144, }, /* 1424 */ + { 168, 12, 3, 0, 0, 26624, 98, }, /* 1425 */ + { 13, 15, 12, 0, 0, 18432, 74, }, /* 1426 */ + { 13, 21, 12, 0, 0, 18432, 74, }, /* 1427 */ + { 115, 7, 12, 0, 0, 18432, 84, }, /* 1428 */ + { 115, 14, 12, 0, 0, 18432, 84, }, /* 1429 */ + { 115, 21, 12, 0, 0, 18432, 110, }, /* 1430 */ + { 90, 7, 12, 0, 0, 18432, 84, }, /* 1431 */ + { 90, 21, 12, 0, 0, 18432, 74, }, /* 1432 */ + { 126, 7, 12, 0, 0, 18432, 84, }, /* 1433 */ + { 126, 1, 2, 0, 0, 18432, 344, }, /* 1434 */ + { 126, 12, 3, 0, 0, 26624, 104, }, /* 1435 */ + { 126, 12, 3, 0, 0, 26624, 98, }, /* 1436 */ + { 149, 7, 12, 0, 0, 18432, 84, }, /* 1437 */ + { 94, 7, 12, 0, 0, 18432, 84, }, /* 1438 */ + { 94, 12, 3, 0, 0, 26624, 106, }, /* 1439 */ + { 94, 10, 5, 0, 0, 18432, 154, }, /* 1440 */ + { 94, 12, 3, 0, 0, 26624, 158, }, /* 1441 */ + { 94, 13, 12, 0, 0, 18432, 144, }, /* 1442 */ + { 141, 7, 12, 0, 0, 18432, 84, }, /* 1443 */ + { 141, 13, 12, 0, 0, 18432, 144, }, /* 1444 */ + { 141, 21, 12, 0, 0, 18432, 128, }, /* 1445 */ + { 166, 7, 12, 0, 0, 18432, 84, }, /* 1446 */ + { 166, 13, 12, 0, 0, 18432, 144, }, /* 1447 */ + { 138, 7, 12, 0, 0, 18432, 84, }, /* 1448 */ + { 138, 12, 3, 0, 0, 26624, 98, }, /* 1449 */ + { 138, 21, 12, 0, 0, 18432, 128, }, /* 1450 */ + { 139, 7, 12, 0, 0, 18432, 84, }, /* 1451 */ + { 139, 12, 3, 0, 0, 26624, 98, }, /* 1452 */ + { 139, 21, 12, 0, 0, 18432, 128, }, /* 1453 */ + { 139, 21, 12, 0, 0, 18432, 110, }, /* 1454 */ + { 139, 21, 12, 0, 0, 18432, 74, }, /* 1455 */ + { 139, 26, 12, 0, 0, 18432, 74, }, /* 1456 */ + { 139, 6, 12, 0, 0, 18432, 148, }, /* 1457 */ + { 139, 6, 12, 0, 0, 18432, 138, }, /* 1458 */ + { 139, 13, 12, 0, 0, 18432, 144, }, /* 1459 */ + { 139, 15, 12, 0, 0, 18432, 74, }, /* 1460 */ + { 170, 6, 12, 0, 0, 18432, 148, }, /* 1461 */ + { 170, 7, 12, 0, 0, 18432, 84, }, /* 1462 */ + { 170, 7, 7, 0, 0, 18432, 84, }, /* 1463 */ + { 170, 6, 12, 0, 0, 18432, 94, }, /* 1464 */ + { 170, 21, 12, 0, 0, 18432, 74, }, /* 1465 */ + { 170, 21, 12, 0, 0, 18432, 128, }, /* 1466 */ + { 170, 13, 12, 0, 0, 18432, 144, }, /* 1467 */ + { 158, 9, 12, 0, 32, 18432, 76, }, /* 1468 */ + { 158, 5, 12, 0, -32, 18432, 78, }, /* 1469 */ + { 158, 15, 12, 0, 0, 18432, 74, }, /* 1470 */ + { 158, 21, 12, 0, 0, 18432, 110, }, /* 1471 */ + { 158, 21, 12, 0, 0, 18432, 128, }, /* 1472 */ + { 158, 21, 12, 0, 0, 18432, 74, }, /* 1473 */ + { 174, 9, 12, 0, 27, 18432, 76, }, /* 1474 */ + { 174, 5, 12, 0, -27, 18432, 78, }, /* 1475 */ + { 136, 7, 12, 0, 0, 18432, 84, }, /* 1476 */ + { 136, 12, 3, 0, 0, 26624, 106, }, /* 1477 */ + { 136, 10, 5, 0, 0, 18432, 154, }, /* 1478 */ + { 136, 12, 3, 0, 0, 26624, 132, }, /* 1479 */ + { 136, 6, 12, 0, 0, 18432, 94, }, /* 1480 */ + { 82, 6, 12, 0, 0, 18432, 138, }, /* 1481 */ + { 154, 6, 12, 0, 0, 18432, 138, }, /* 1482 */ + { 30, 21, 12, 0, 0, 28672, 74, }, /* 1483 */ + { 165, 12, 3, 0, 0, 26624, 352, }, /* 1484 */ + { 30, 10, 3, 0, 0, 18432, 354, }, /* 1485 */ + { 30, 6, 12, 0, 0, 18432, 356, }, /* 1486 */ + { 82, 7, 12, 0, 0, 18432, 302, }, /* 1487 */ + { 165, 7, 12, 0, 0, 18432, 302, }, /* 1488 */ + { 28, 6, 12, 0, 0, 18432, 94, }, /* 1489 */ + { 154, 7, 12, 0, 0, 18432, 302, }, /* 1490 */ + { 65, 7, 12, 0, 0, 18432, 84, }, /* 1491 */ + { 65, 26, 12, 0, 0, 18432, 74, }, /* 1492 */ + { 65, 12, 3, 0, 0, 26624, 104, }, /* 1493 */ + { 65, 12, 3, 0, 0, 26624, 106, }, /* 1494 */ + { 65, 21, 12, 0, 0, 18432, 128, }, /* 1495 */ + { 100, 1, 2, 0, 0, 6504, 66, }, /* 1496 */ + { 100, 13, 12, 0, 0, 10240, 144, }, /* 1497 */ + { 100, 10, 3, 0, 0, 18432, 358, }, /* 1498 */ + { 100, 10, 3, 0, 0, 18432, 304, }, /* 1499 */ + { 1, 12, 3, 0, 0, 26624, 104, }, /* 1500 */ + { 100, 25, 12, 0, 0, 28672, 360, }, /* 1501 */ + { 100, 13, 12, 0, 0, 10240, 226, }, /* 1502 */ + { 151, 26, 12, 0, 0, 18432, 74, }, /* 1503 */ + { 151, 12, 3, 0, 0, 26624, 104, }, /* 1504 */ + { 151, 21, 12, 0, 0, 18432, 110, }, /* 1505 */ + { 151, 21, 12, 0, 0, 18432, 128, }, /* 1506 */ + { 151, 21, 12, 0, 0, 18432, 74, }, /* 1507 */ + { 44, 12, 3, 0, 0, 26624, 106, }, /* 1508 */ + { 2, 6, 12, 0, 0, 18432, 92, }, /* 1509 */ + { 161, 7, 12, 0, 0, 18432, 84, }, /* 1510 */ + { 161, 12, 3, 0, 0, 26624, 98, }, /* 1511 */ + { 161, 6, 12, 0, 0, 18432, 148, }, /* 1512 */ + { 161, 6, 12, 0, 0, 18432, 138, }, /* 1513 */ + { 161, 13, 12, 0, 0, 18432, 144, }, /* 1514 */ + { 161, 26, 12, 0, 0, 18432, 74, }, /* 1515 */ + { 92, 7, 12, 0, 0, 18432, 84, }, /* 1516 */ + { 92, 12, 3, 0, 0, 26624, 98, }, /* 1517 */ + { 162, 7, 12, 0, 0, 18432, 84, }, /* 1518 */ + { 162, 12, 3, 0, 0, 26624, 98, }, /* 1519 */ + { 162, 13, 12, 0, 0, 18432, 144, }, /* 1520 */ + { 162, 23, 12, 0, 0, 14336, 74, }, /* 1521 */ + { 169, 7, 12, 0, 0, 18432, 84, }, /* 1522 */ + { 169, 6, 12, 0, 0, 18432, 148, }, /* 1523 */ + { 169, 12, 3, 0, 0, 26624, 104, }, /* 1524 */ + { 169, 13, 12, 0, 0, 18432, 144, }, /* 1525 */ + { 95, 7, 12, 0, 0, 18432, 84, }, /* 1526 */ + { 95, 12, 3, 0, 0, 26624, 98, }, /* 1527 */ + { 95, 12, 3, 0, 0, 26624, 164, }, /* 1528 */ + { 95, 13, 12, 0, 0, 18432, 144, }, /* 1529 */ + { 95, 21, 12, 0, 0, 18432, 74, }, /* 1530 */ + { 172, 7, 12, 0, 0, 18432, 84, }, /* 1531 */ + { 172, 12, 3, 0, 0, 26624, 106, }, /* 1532 */ + { 172, 6, 12, 0, 0, 18432, 148, }, /* 1533 */ + { 140, 7, 12, 0, 0, 34816, 84, }, /* 1534 */ + { 140, 15, 12, 0, 0, 34816, 74, }, /* 1535 */ + { 140, 12, 3, 0, 0, 26624, 98, }, /* 1536 */ + { 79, 9, 12, 0, 34, 34816, 76, }, /* 1537 */ + { 79, 5, 12, 0, -34, 34816, 78, }, /* 1538 */ + { 79, 12, 3, 0, 0, 26624, 164, }, /* 1539 */ + { 79, 12, 3, 0, 0, 26624, 106, }, /* 1540 */ + { 79, 12, 3, 0, 0, 26624, 98, }, /* 1541 */ + { 79, 6, 12, 0, 0, 34816, 148, }, /* 1542 */ + { 79, 13, 12, 0, 0, 34816, 144, }, /* 1543 */ + { 79, 21, 12, 0, 0, 34816, 74, }, /* 1544 */ + { 100, 15, 12, 0, 0, 0, 74, }, /* 1545 */ + { 100, 26, 12, 0, 0, 0, 74, }, /* 1546 */ + { 100, 23, 12, 0, 0, 0, 74, }, /* 1547 */ + { 5, 7, 12, 0, 0, 0, 256, }, /* 1548 */ + { 100, 26, 14, 0, 0, 28672, 362, }, /* 1549 */ + { 99, 2, 14, 0, 0, 18432, 364, }, /* 1550 */ + { 100, 26, 12, 0, 0, 18432, 366, }, /* 1551 */ + { 100, 26, 14, 0, 0, 18432, 368, }, /* 1552 */ + { 100, 26, 14, 0, 0, 18432, 362, }, /* 1553 */ + { 100, 26, 11, 0, 0, 18432, 370, }, /* 1554 */ + { 27, 26, 12, 0, 0, 18432, 74, }, /* 1555 */ + { 100, 26, 14, 0, 0, 18432, 252, }, /* 1556 */ + { 100, 26, 14, 0, 0, 18816, 362, }, /* 1557 */ + { 100, 26, 14, 0, 0, 28672, 372, }, /* 1558 */ + { 100, 26, 14, 0, 0, 28672, 374, }, /* 1559 */ + { 100, 24, 3, 0, 0, 28672, 376, }, /* 1560 */ + { 100, 26, 14, 0, 0, 28672, 378, }, /* 1561 */ + { 100, 1, 3, 0, 0, 6144, 380, }, /* 1562 */ }; const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ @@ -2144,8 +2172,8 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 213,213,213,213,214,215,216,217,146,146,218,146,219,220,221,222, /* U+16800 */ 223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, /* U+17000 */ 223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, /* U+17800 */ -223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,224, /* U+18000 */ -223,223,223,223,223,223,225,225,225,226,227,146,146,146,146,146, /* U+18800 */ +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, /* U+18000 */ +223,223,223,223,223,223,224,224,224,225,226,227,146,146,146,146, /* U+18800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+19000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+19800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+1A000 */ @@ -2156,10 +2184,10 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,236,237,236,236,236,238,239,240, /* U+1C800 */ 241,242,243,244,245,246,247,146,248,249,250,251,252,253,254,255, /* U+1D000 */ 256,256,256,256,257,258,146,146,146,146,146,146,146,146,259,146, /* U+1D800 */ -260,261,262,146,146,263,146,146,146,264,146,265,146,146,146,266, /* U+1E000 */ -267,268,269,270,270,270,270,270,271,272,273,270,274,275,270,270, /* U+1E800 */ -276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291, /* U+1F000 */ -292,293,294,295,296,297,236,298,281,281,281,281,281,281,281,299, /* U+1F800 */ +260,261,262,146,146,263,146,146,146,264,146,265,146,266,146,267, /* U+1E000 */ +268,269,270,271,271,271,271,271,272,273,274,271,275,276,271,271, /* U+1E800 */ +277,278,279,280,281,282,283,284,285,286,287,288,289,290,236,291, /* U+1F000 */ +292,293,294,295,296,297,236,298,282,282,282,282,282,282,282,299, /* U+1F800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+20000 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+20800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+21000 */ @@ -2182,23 +2210,23 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+29800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,300,101,101, /* U+2A000 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2A800 */ -101,101,101,101,101,101,101,101,101,101,101,101,101,101,301,101, /* U+2B000 */ -302,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2B800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2B000 */ +301,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2B800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2C000 */ -101,101,101,101,101,101,101,101,101,101,101,101,101,303,101,101, /* U+2C800 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,302,101,101, /* U+2C800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2D000 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2D800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+2E000 */ -101,101,101,101,101,101,101,304,101,101,101,101,305,146,146,146, /* U+2E800 */ +101,101,101,101,101,101,101,303,101,101,101,101,304,146,146,146, /* U+2E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+2F000 */ -129,129,129,129,306,146,146,146,146,146,146,146,146,146,146,307, /* U+2F800 */ +129,129,129,129,305,146,146,146,146,146,146,146,146,146,146,306, /* U+2F800 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+30000 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+30800 */ -101,101,101,101,101,101,308,101,101,101,101,101,101,101,101,101, /* U+31000 */ +101,101,101,101,101,101,307,101,101,101,101,101,101,101,101,101, /* U+31000 */ 101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+31800 */ -101,101,101,101,101,101,101,309,146,146,146,146,146,146,146,146, /* U+32000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+32800 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+33000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+32000 */ +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, /* U+32800 */ +101,101,101,101,101,101,101,101,308,146,146,146,146,146,146,146, /* U+33000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+33800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+34000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+34800 */ @@ -2223,7 +2251,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+3F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+3F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+3F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+40000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+40800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+41000 */ @@ -2255,7 +2283,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+4F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+4F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+4F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+50000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+50800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+51000 */ @@ -2287,7 +2315,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+5F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+5F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+5F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+60000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+60800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+61000 */ @@ -2319,7 +2347,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+6F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+6F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+6F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+70000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+70800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+71000 */ @@ -2351,7 +2379,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+7F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+7F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+7F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+80000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+80800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+81000 */ @@ -2383,7 +2411,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+8F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+8F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+8F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+90000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+90800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+91000 */ @@ -2415,7 +2443,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9E000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9E800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+9F000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+9F800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+9F800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A0000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A0800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+A1000 */ @@ -2447,7 +2475,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AE000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AE800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+AF000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+AF800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+AF800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B0000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B0800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+B1000 */ @@ -2479,7 +2507,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BE000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BE800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+BF000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+BF800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+BF800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C0000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C0800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+C1000 */ @@ -2511,7 +2539,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CE000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CE800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+CF000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+CF800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+CF800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D0000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D0800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+D1000 */ @@ -2543,9 +2571,9 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DE000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DE800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+DF000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+DF800 */ -310,311,312,313,311,311,311,311,311,311,311,311,311,311,311,311, /* U+E0000 */ -311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311, /* U+E0800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+DF800 */ +309,310,311,312,310,310,310,310,310,310,310,310,310,310,310,310, /* U+E0000 */ +310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310, /* U+E0800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E1000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E1800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+E2000 */ @@ -2575,7 +2603,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EE000 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EE800 */ 146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, /* U+EF000 */ -146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,307, /* U+EF800 */ +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,306, /* U+EF800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F0000 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F0800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+F1000 */ @@ -2607,7 +2635,7 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FE000 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FE800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+FF000 */ -128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,314, /* U+FF800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,313, /* U+FF800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+100000 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+100800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+101000 */ @@ -2639,10 +2667,10 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10E000 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10E800 */ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, /* U+10F000 */ -128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,314, /* U+10F800 */ +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,313, /* U+10F800 */ }; -const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ +const uint16_t PRIV(ucd_stage2)[] = { /* 80384 bytes, block = 128 */ /* block 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 3, 4, 0, 0, @@ -2696,7 +2724,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 5 */ 140, 70,141,140, 70, 70, 70,142,140,143,144,144,145, 70, 70, 70, - 70, 70,146, 70, 93, 70, 70, 70, 70, 70, 70, 70, 70,147,148, 70, + 70, 70,146, 70, 93, 93, 70, 70, 70, 70, 70, 70, 70,147,148, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 149,149,150,149,149,149,149,149,149,151,151,152,153,152,152,152, 154,154, 46, 46, 46, 46,151,155,151,155,155,155,151,156,151,151, @@ -2707,7 +2735,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 6 */ 161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176, 174,177,176,178,176,176,176,176,176,176,176,176,176,176,176,176, -179,176,176,180,181,179,176,176,176,176,176,176,176,182,179,176, +176,176,176,179,180,181,176,176,176,176,176,176,176,182,181,176, 183,184,176,176,176,176,176,176,176,176,176,176,176,176,176,176, 176,176,185,176,176,186,176,176,176,176,176,176,176,176,176,187, 176,176,176,176,176,176,176,176,188,189,189,189,189,176,190,176, @@ -2757,419 +2785,419 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 11 */ 291,291,291,291,291,291,291,292,290,293,294,196,196,295,295,296, 297,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298, -298,298,299,298,298,298,298,298,298,298,298,298,298,298,298,298, -300,300,300,300,300,300,300,300,300,300,300,300,300,300,301,300, -302,300,300,303,300,304,302,304,297,297,297,297,297,297,297,297, -305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305, -305,305,305,305,305,305,305,305,305,305,305,297,297,297,297,305, -305,305,305,302,306,297,297,297,297,297,297,297,297,297,297,297, +298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298, +299,299,299,299,299,299,299,299,299,299,299,299,299,299,300,299, +301,299,299,302,299,299,301,299,297,297,297,297,297,297,297,297, +303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303, +303,303,303,303,303,303,303,303,303,303,303,297,297,297,297,303, +303,303,303,301,304,297,297,297,297,297,297,297,297,297,297,297, /* block 12 */ -307,307,307,307,307,308,309,309,310,311,311,312,313,314,315,315, -316,316,316,316,316,316,316,316,316,316,316,317,318,319,319,320, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -322,321,321,321,321,321,321,321,321,321,321,323,323,323,323,323, -323,323,323,324,325,325,316,326,327,316,316,316,316,316,316,316, -328,328,328,328,328,328,328,328,328,328,311,329,329,314,321,321, -324,321,321,330,321,321,321,321,321,321,321,321,321,321,321,321, +305,305,305,305,305,306,307,307,308,309,309,310,311,312,313,313, +314,314,314,314,314,314,314,314,314,314,314,315,316,317,317,318, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +320,319,319,319,319,319,319,319,319,319,319,321,321,321,321,321, +321,321,321,322,323,323,314,324,325,314,314,314,314,314,314,314, +326,326,326,326,326,326,326,326,326,326,309,327,327,312,319,319, +322,319,319,328,319,319,319,319,319,319,319,319,319,319,319,319, /* block 13 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,331,321,316,316,316,316,316,316,332,308,315,333, -333,316,316,332,316,334,334,332,332,315,333,333,333,316,321,321, -335,335,335,335,335,335,335,335,335,335,321,321,321,336,336,321, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,329,319,314,314,314,314,314,314,330,306,313,331, +331,314,314,330,314,332,332,330,330,313,331,331,331,314,319,319, +333,333,333,333,333,333,333,333,333,333,319,319,319,334,334,319, /* block 14 */ -337,337,337,338,338,338,338,338,338,338,338,339,338,339,340,341, -342,343,342,342,342,342,342,342,342,342,342,342,342,342,342,342, +335,335,335,336,336,336,336,336,336,336,336,337,336,337,338,339, +340,341,340,340,340,340,340,340,340,340,340,340,340,340,340,340, +340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, 342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342, -344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344, -345,345,345,345,345,345,345,345,345,345,345,340,340,342,342,342, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +343,343,343,343,343,343,343,343,343,343,343,338,338,340,340,340, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 15 */ -346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346, -346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346, -346,346,346,346,346,346,347,347,347,347,347,347,347,347,347,347, -347,346,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -348,348,348,348,348,348,348,348,348,348,349,349,349,349,349,349, -349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349, -349,349,349,349,349,349,349,349,349,349,349,350,350,350,350,350, -350,350,350,350,351,351,352,353,354,355,356,297,297,357,358,358, +344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344, +344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344, +344,344,344,344,344,344,345,345,345,345,345,345,345,345,345,345, +345,344,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +346,346,346,346,346,346,346,346,346,346,347,347,347,347,347,347, +347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347, +347,347,347,347,347,347,347,347,347,347,347,348,348,348,348,348, +348,348,348,348,349,349,350,351,352,353,354,297,297,355,356,356, /* block 16 */ -359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359, -359,359,359,359,359,359,360,360,361,361,362,360,360,360,360,360, -360,360,360,360,362,360,360,360,362,360,360,360,360,363,297,297, -364,364,364,364,364,364,365,366,364,366,364,364,364,366,366,297, -367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367, -367,367,367,367,367,367,367,367,367,368,368,368,297,297,369,297, -342,342,342,342,342,342,342,342,342,342,342,340,340,340,340,340, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357, +357,357,357,357,357,357,358,358,359,359,360,358,358,358,358,358, +358,358,358,358,360,358,358,358,360,358,358,358,358,361,297,297, +362,362,362,362,362,362,363,364,362,364,362,362,362,364,364,297, +365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365, +365,365,365,365,365,365,365,365,365,366,366,366,297,297,367,297, +340,340,340,340,340,340,340,340,340,340,340,338,338,338,338,338, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 17 */ -321,321,321,321,321,321,321,321,370,321,321,321,321,321,321,340, -307,307,340,340,340,340,340,316,333,333,333,333,333,333,333,333, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,334,327,327,333,327,327,327, -333,333,333,371,316,316,316,316,316,316,316,316,316,316,316,316, -372,372,308,326,326,326,326,326,326,326,333,333,333,333,333,333, -326,326,326,373,326,326,326,326,326,326,326,326,326,326,326,316, +319,319,319,319,319,319,319,319,368,319,319,319,319,319,319,319, +305,305,338,338,338,338,338,314,331,331,331,331,331,331,331,331, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,332,325,325,331,325,325,325, +331,331,331,369,314,314,314,314,314,314,314,314,314,314,314,314, +370,370,306,324,324,324,324,324,324,324,331,331,331,331,331,331, +324,324,324,371,324,324,324,324,324,324,324,324,324,324,324,314, /* block 18 */ -374,374,374,375,376,376,376,376,376,376,376,376,376,376,376,376, -376,376,376,376,376,377,377,377,377,377,377,377,377,377,377,377, -377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377, -377,377,377,377,377,377,377,377,377,377,374,375,378,376,375,375, -375,374,374,374,374,374,374,374,374,375,375,375,375,379,375,375, -376,380,381,176,176,374,374,374,377,377,377,377,377,377,377,377, -376,376,374,374,382,383,384,384,384,384,384,384,384,384,384,384, -385,386,376,376,376,376,376,376,377,377,377,377,377,377,377,377, +372,372,372,373,374,374,374,374,374,374,374,374,374,374,374,374, +374,374,374,374,374,375,375,375,375,375,375,375,375,375,375,375, +375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375, +375,375,375,375,375,375,375,375,375,375,372,373,376,374,373,373, +373,372,372,372,372,372,372,372,372,373,373,373,373,377,373,373, +374,378,379,176,176,372,372,372,375,375,375,375,375,375,375,375, +374,374,372,372,380,381,382,382,382,382,382,382,382,382,382,382, +383,384,374,374,374,374,374,374,375,375,375,375,375,375,375,375, /* block 19 */ -387,388,389,389,196,387,387,387,387,387,387,387,387,196,196,387, -387,196,196,387,387,390,390,390,390,390,390,390,390,390,390,390, -390,390,390,390,390,390,390,390,390,196,390,390,390,390,390,390, -390,196,390,196,196,196,390,390,390,390,196,196,391,387,392,389, -389,388,388,388,388,196,196,389,389,196,196,389,389,393,387,196, -196,196,196,196,196,196,196,392,196,196,196,196,390,390,196,390, -387,387,388,388,196,196,394,394,394,394,394,394,394,394,394,394, -390,390,395,395,396,396,396,396,396,396,397,395,387,398,399,196, +385,386,387,387,196,385,385,385,385,385,385,385,385,196,196,385, +385,196,196,385,385,388,388,388,388,388,388,388,388,388,388,388, +388,388,388,388,388,388,388,388,388,196,388,388,388,388,388,388, +388,196,388,196,196,196,388,388,388,388,196,196,389,385,390,387, +387,386,386,386,386,196,196,387,387,196,196,387,387,391,385,196, +196,196,196,196,196,196,196,390,196,196,196,196,388,388,196,388, +385,385,386,386,196,196,392,392,392,392,392,392,392,392,392,392, +388,388,393,393,394,394,394,394,394,394,395,393,385,396,397,196, /* block 20 */ -196,400,400,401,196,402,402,402,402,402,402,196,196,196,196,402, -402,196,196,402,402,402,402,402,402,402,402,402,402,402,402,402, -402,402,402,402,402,402,402,402,402,196,402,402,402,402,402,402, -402,196,402,402,196,402,402,196,402,402,196,196,403,196,401,401, -401,400,400,196,196,196,196,400,400,196,196,400,400,404,196,196, -196,400,196,196,196,196,196,196,196,402,402,402,402,196,402,196, -196,196,196,196,196,196,405,405,405,405,405,405,405,405,405,405, -400,406,402,402,402,400,407,196,196,196,196,196,196,196,196,196, +196,398,398,399,196,400,400,400,400,400,400,196,196,196,196,400, +400,196,196,400,400,400,400,400,400,400,400,400,400,400,400,400, +400,400,400,400,400,400,400,400,400,196,400,400,400,400,400,400, +400,196,400,400,196,400,400,196,400,400,196,196,401,196,399,399, +399,398,398,196,196,196,196,398,398,196,196,398,398,402,196,196, +196,398,196,196,196,196,196,196,196,400,400,400,400,196,400,196, +196,196,196,196,196,196,403,403,403,403,403,403,403,403,403,403, +398,404,400,400,400,398,405,196,196,196,196,196,196,196,196,196, /* block 21 */ -196,408,408,409,196,410,410,410,410,410,410,410,410,410,196,410, -410,410,196,410,410,411,411,411,411,411,411,411,411,411,411,411, -411,411,411,411,411,411,411,411,411,196,411,411,411,411,411,411, -411,196,411,411,196,411,411,411,411,411,196,196,412,410,409,409, -409,408,408,408,408,408,196,408,408,409,196,409,409,413,196,196, -410,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -410,410,408,408,196,196,414,414,414,414,414,414,414,414,414,414, -415,416,196,196,196,196,196,196,196,411,408,417,408,412,412,412, +196,406,406,407,196,408,408,408,408,408,408,408,408,408,196,408, +408,408,196,408,408,409,409,409,409,409,409,409,409,409,409,409, +409,409,409,409,409,409,409,409,409,196,409,409,409,409,409,409, +409,196,409,409,196,409,409,409,409,409,196,196,410,408,407,407, +407,406,406,406,406,406,196,406,406,407,196,407,407,411,196,196, +408,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +408,408,406,406,196,196,412,412,412,412,412,412,412,412,412,412, +413,414,196,196,196,196,196,196,196,409,406,415,406,410,410,410, /* block 22 */ -196,418,419,419,196,420,420,420,420,420,420,420,420,196,196,420, -420,196,196,420,420,421,421,421,421,421,421,421,421,421,421,421, -421,421,421,421,421,421,421,421,421,196,421,421,421,421,421,421, -421,196,421,421,196,421,421,421,421,421,196,196,422,420,423,418, -419,418,418,418,418,196,196,419,419,196,196,419,419,424,196,196, -196,196,196,196,196,425,418,423,196,196,196,196,421,421,196,421, -420,420,418,418,196,196,426,426,426,426,426,426,426,426,426,426, -427,421,428,428,428,428,428,428,196,196,196,196,196,196,196,196, +196,416,417,417,196,418,418,418,418,418,418,418,418,196,196,418, +418,196,196,418,418,419,419,419,419,419,419,419,419,419,419,419, +419,419,419,419,419,419,419,419,419,196,419,419,419,419,419,419, +419,196,419,419,196,419,419,419,419,419,196,196,420,418,421,416, +417,416,416,416,416,196,196,417,417,196,196,417,417,422,196,196, +196,196,196,196,196,423,416,421,196,196,196,196,419,419,196,419, +418,418,416,416,196,196,424,424,424,424,424,424,424,424,424,424, +425,419,426,426,426,426,426,426,196,196,196,196,196,196,196,196, /* block 23 */ -196,196,429,430,196,430,430,430,430,430,430,196,196,196,430,430, -430,196,430,430,430,430,196,196,196,430,430,196,430,196,430,430, -196,196,196,430,430,196,196,196,430,430,430,196,196,196,430,430, -430,430,430,430,430,430,430,430,430,430,196,196,196,196,431,432, -429,432,432,196,196,196,432,432,432,196,432,432,432,433,196,196, -430,196,196,196,196,196,196,431,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,434,434,434,434,434,434,434,434,434,434, -435,435,435,436,437,437,437,437,437,438,437,196,196,196,196,196, +196,196,427,428,196,428,428,428,428,428,428,196,196,196,428,428, +428,196,428,428,428,428,196,196,196,428,428,196,428,196,428,428, +196,196,196,428,428,196,196,196,428,428,428,196,196,196,428,428, +428,428,428,428,428,428,428,428,428,428,196,196,196,196,429,430, +427,430,430,196,196,196,430,430,430,196,430,430,430,431,196,196, +428,196,196,196,196,196,196,429,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,432,432,432,432,432,432,432,432,432,432, +433,433,433,434,435,435,435,435,435,436,435,196,196,196,196,196, /* block 24 */ -439,440,440,440,439,441,441,441,441,441,441,441,441,196,441,441, -441,196,441,441,441,442,442,442,442,442,442,442,442,442,442,442, -442,442,442,442,442,442,442,442,442,196,442,442,442,442,442,442, -442,442,442,442,442,442,442,442,442,442,196,196,443,441,439,439, -439,440,440,440,440,196,439,439,439,196,439,439,439,444,196,196, -196,196,196,196,196,439,439,196,442,442,442,196,196,441,196,196, -441,441,439,439,196,196,445,445,445,445,445,445,445,445,445,445, -196,196,196,196,196,196,196,446,447,447,447,447,447,447,447,448, +437,438,438,438,437,439,439,439,439,439,439,439,439,196,439,439, +439,196,439,439,439,440,440,440,440,440,440,440,440,440,440,440, +440,440,440,440,440,440,440,440,440,196,440,440,440,440,440,440, +440,440,440,440,440,440,440,440,440,440,196,196,441,439,437,437, +437,438,438,438,438,196,437,437,437,196,437,437,437,442,196,196, +196,196,196,196,196,437,437,196,440,440,440,196,439,439,196,196, +439,439,437,437,196,196,443,443,443,443,443,443,443,443,443,443, +196,196,196,196,196,196,196,444,445,445,445,445,445,445,445,446, /* block 25 */ -449,450,451,451,452,449,449,449,449,449,449,449,449,196,449,449, -449,196,449,449,449,449,449,449,449,449,449,449,449,449,449,449, -449,449,449,449,449,449,449,449,449,196,449,449,449,449,449,449, -449,449,449,449,196,449,449,449,449,449,196,196,453,449,451,454, -455,451,455,451,451,196,454,455,455,196,455,455,450,456,196,196, -196,196,196,196,196,455,455,196,196,196,196,196,196,449,449,196, -449,449,450,450,196,196,457,457,457,457,457,457,457,457,457,457, -196,449,449,451,196,196,196,196,196,196,196,196,196,196,196,196, +447,448,449,449,450,447,447,447,447,447,447,447,447,196,447,447, +447,196,447,447,447,447,447,447,447,447,447,447,447,447,447,447, +447,447,447,447,447,447,447,447,447,196,447,447,447,447,447,447, +447,447,447,447,196,447,447,447,447,447,196,196,451,447,449,452, +453,449,453,449,449,196,452,453,453,196,453,453,448,454,196,196, +196,196,196,196,196,453,453,196,196,196,196,196,447,447,447,196, +447,447,448,448,196,196,455,455,455,455,455,455,455,455,455,455, +196,447,447,449,196,196,196,196,196,196,196,196,196,196,196,196, /* block 26 */ -458,458,459,459,460,460,460,460,460,460,460,460,460,196,460,460, -460,196,460,460,460,461,461,461,461,461,461,461,461,461,461,461, -461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461, -461,461,461,461,461,461,461,461,461,461,461,462,462,460,463,459, -459,458,458,458,458,196,459,459,459,196,459,459,459,462,464,465, -196,196,196,196,460,460,460,463,466,466,466,466,466,466,466,460, -460,460,458,458,196,196,467,467,467,467,467,467,467,467,467,467, -466,466,466,466,466,466,466,466,466,465,460,460,460,460,460,460, +456,456,457,457,458,458,458,458,458,458,458,458,458,196,458,458, +458,196,458,458,458,459,459,459,459,459,459,459,459,459,459,459, +459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459, +459,459,459,459,459,459,459,459,459,459,459,460,460,458,461,457, +457,456,456,456,456,196,457,457,457,196,457,457,457,460,462,463, +196,196,196,196,458,458,458,461,464,464,464,464,464,464,464,458, +458,458,456,456,196,196,465,465,465,465,465,465,465,465,465,465, +464,464,464,464,464,464,464,464,464,463,458,458,458,458,458,458, /* block 27 */ -196,468,469,469,196,470,470,470,470,470,470,470,470,470,470,470, -470,470,470,470,470,470,470,196,196,196,470,470,470,470,470,470, -470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470, -470,470,196,470,470,470,470,470,470,470,470,470,196,470,196,196, -470,470,470,470,470,470,470,196,196,196,471,196,196,196,196,472, -469,469,468,468,468,196,468,196,469,469,469,469,469,469,469,472, -196,196,196,196,196,196,473,473,473,473,473,473,473,473,473,473, -196,196,469,469,474,196,196,196,196,196,196,196,196,196,196,196, +196,466,467,467,196,468,468,468,468,468,468,468,468,468,468,468, +468,468,468,468,468,468,468,196,196,196,468,468,468,468,468,468, +468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468, +468,468,196,468,468,468,468,468,468,468,468,468,196,468,196,196, +468,468,468,468,468,468,468,196,196,196,469,196,196,196,196,470, +467,467,466,466,466,196,466,196,467,467,467,467,467,467,467,470, +196,196,196,196,196,196,471,471,471,471,471,471,471,471,471,471, +196,196,467,467,472,196,196,196,196,196,196,196,196,196,196,196, /* block 28 */ -196,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475, -475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475, -475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475, -475,476,475,477,476,476,476,476,476,476,478,196,196,196,196,479, -480,480,480,480,480,475,481,482,482,482,482,482,482,476,482,483, -484,484,484,484,484,484,484,484,484,484,485,485,196,196,196,196, +196,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473, +473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473, +473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473, +473,474,473,475,474,474,474,474,474,474,476,196,196,196,196,477, +478,478,478,478,478,473,479,480,480,480,480,480,480,474,480,481, +482,482,482,482,482,482,482,482,482,482,483,483,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 29 */ -196,486,486,196,486,196,486,486,486,486,486,196,486,486,486,486, -486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486, -486,486,486,486,196,486,196,486,486,486,486,486,486,486,486,486, -486,487,486,488,487,487,487,487,487,487,489,487,487,486,196,196, -490,490,490,490,490,196,491,196,492,492,492,492,492,487,493,196, -494,494,494,494,494,494,494,494,494,494,196,196,486,486,486,486, +196,484,484,196,484,196,484,484,484,484,484,196,484,484,484,484, +484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484, +484,484,484,484,196,484,196,484,484,484,484,484,484,484,484,484, +484,485,484,486,485,485,485,485,485,485,487,485,485,484,196,196, +488,488,488,488,488,196,489,196,490,490,490,490,490,485,491,196, +492,492,492,492,492,492,492,492,492,492,196,196,484,484,484,484, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 30 */ -495,496,496,496,497,497,497,497,498,497,497,497,497,498,498,498, -498,498,498,496,497,496,496,496,499,499,496,496,496,496,496,496, -500,500,500,500,500,500,500,500,500,500,501,501,501,501,501,501, -501,501,501,501,496,499,496,499,496,499,502,503,502,503,504,504, -495,495,495,495,495,495,495,495,196,495,495,495,495,495,495,495, -495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495, -495,495,495,495,495,495,495,495,495,495,495,495,495,196,196,196, -196,505,505,505,505,505,505,506,505,506,505,505,505,505,505,507, +493,494,494,494,495,495,495,495,496,495,495,495,495,496,496,496, +496,496,496,494,495,494,494,494,497,497,494,494,494,494,494,494, +498,498,498,498,498,498,498,498,498,498,499,499,499,499,499,499, +499,499,499,499,494,497,494,497,494,497,500,501,500,501,502,502, +493,493,493,493,493,493,493,493,196,493,493,493,493,493,493,493, +493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493, +493,493,493,493,493,493,493,493,493,493,493,493,493,196,196,196, +196,503,503,503,503,503,503,504,503,504,503,503,503,503,503,505, /* block 31 */ -505,505,508,508,509,497,499,499,495,495,495,495,495,505,505,505, -505,505,505,505,505,505,505,505,196,505,505,505,505,505,505,505, -505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505, -505,505,505,505,505,505,505,505,505,505,505,505,505,196,496,496, -496,496,496,496,496,496,499,496,496,496,496,496,496,196,496,496, -497,497,497,497,497,510,510,510,510,497,497,196,196,196,196,196, +503,503,506,506,507,495,497,497,493,493,493,493,493,503,503,503, +503,503,503,503,503,503,503,503,196,503,503,503,503,503,503,503, +503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503, +503,503,503,503,503,503,503,503,503,503,503,503,503,196,494,494, +494,494,494,494,494,494,497,494,494,494,494,494,494,196,494,494, +495,495,495,495,495,508,508,508,508,495,495,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 32 */ -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -511,511,511,511,511,511,511,511,511,511,511,512,512,513,513,513, -513,514,513,513,513,513,513,515,512,516,516,514,514,513,513,511, -517,517,517,517,517,517,517,517,517,517,518,518,519,519,519,519, -511,511,511,511,511,511,514,514,513,513,511,511,511,511,513,513, -513,511,512,520,520,511,511,512,512,520,520,520,520,520,511,511, -511,513,513,513,513,511,511,511,511,511,511,511,511,511,511,511, +509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509, +509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509, +509,509,509,509,509,509,509,509,509,509,509,510,510,511,511,511, +511,512,511,511,511,511,511,513,510,514,514,512,512,511,511,509, +515,515,515,515,515,515,515,515,515,515,516,516,517,517,517,517, +509,509,509,509,509,509,512,512,511,511,509,509,509,509,511,511, +511,509,510,518,518,509,509,510,510,518,518,518,518,518,509,509, +509,511,511,511,511,509,509,509,509,509,509,509,509,509,509,509, /* block 33 */ -511,511,513,512,514,513,513,520,520,520,520,520,520,521,511,520, -522,522,522,522,522,522,522,522,522,522,520,520,512,513,523,523, -524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524, -524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524, -524,524,524,524,524,524,196,524,196,196,196,196,196,524,196,196, -525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525, -525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525, -525,525,525,525,525,525,525,525,525,525,525,526,527,525,525,525, +509,509,511,510,512,511,511,518,518,518,518,518,518,519,509,518, +520,520,520,520,520,520,520,520,520,520,518,518,510,511,521,521, +522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522, +522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522, +522,522,522,522,522,522,196,522,196,196,196,196,196,522,196,196, +523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523, +523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523, +523,523,523,523,523,523,523,523,523,523,523,524,525,523,523,523, /* block 34 */ -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,529, -530,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, -531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,527, +528,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, +529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, /* block 35 */ -531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, -531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, -531,531,531,531,531,531,531,531,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, +529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, +529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, +529,529,529,529,529,529,529,529,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, /* block 36 */ -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,196,533,533,533,533,196,196, -533,533,533,533,533,533,533,196,533,196,533,533,533,533,196,196, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,196,531,531,531,531,196,196, +531,531,531,531,531,531,531,196,531,196,531,531,531,531,196,196, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, /* block 37 */ -533,533,533,533,533,533,533,533,533,196,533,533,533,533,196,196, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,196,533,533,533,533,196,196,533,533,533,533,533,533,533,196, -533,196,533,533,533,533,196,196,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, +531,531,531,531,531,531,531,531,531,196,531,531,531,531,196,196, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,196,531,531,531,531,196,196,531,531,531,531,531,531,531,196, +531,196,531,531,531,531,196,196,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, /* block 38 */ -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,196,533,533,533,533,196,196,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,533,533,533,533,196,196,534,534,534, -535,536,537,536,536,536,536,537,537,538,538,538,538,538,538,538, -538,538,539,539,539,539,539,539,539,539,539,539,539,196,196,196, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,196,531,531,531,531,196,196,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,531,531,531,531,196,196,532,532,532, +533,534,535,534,534,534,534,535,535,536,536,536,536,536,536,536, +536,536,537,537,537,537,537,537,537,537,537,537,537,196,196,196, /* block 39 */ -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -540,540,540,540,540,540,540,540,540,540,196,196,196,196,196,196, -541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541, -541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541, -541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541, -541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541, -541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541, -542,542,542,542,542,542,196,196,543,543,543,543,543,543,196,196, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +538,538,538,538,538,538,538,538,538,538,196,196,196,196,196,196, +539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539, +539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539, +539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539, +539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539, +539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539, +540,540,540,540,540,540,196,196,541,541,541,541,541,541,196,196, /* block 40 */ -544,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, +542,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, /* block 41 */ -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, /* block 42 */ -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,546,547,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,544,545,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, /* block 43 */ -548,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549, -549,549,549,549,549,549,549,549,549,549,549,550,551,196,196,196, -552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, -552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, -552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, -552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552, -552,552,552,552,552,552,552,552,552,552,552,553,553,553,554,554, -554,552,552,552,552,552,552,552,552,196,196,196,196,196,196,196, +546,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547, +547,547,547,547,547,547,547,547,547,547,547,548,549,196,196,196, +550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550, +550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550, +550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550, +550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550, +550,550,550,550,550,550,550,550,550,550,550,551,551,551,552,552, +552,550,550,550,550,550,550,550,550,196,196,196,196,196,196,196, /* block 44 */ -555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555, -555,555,556,556,557,558,196,196,196,196,196,196,196,196,196,555, -559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559, -559,559,560,560,561,562,562,196,196,196,196,196,196,196,196,196, -563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563, -563,563,564,564,196,196,196,196,196,196,196,196,196,196,196,196, -565,565,565,565,565,565,565,565,565,565,565,565,565,196,565,565, -565,196,566,566,196,196,196,196,196,196,196,196,196,196,196,196, +553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553, +553,553,554,554,555,556,196,196,196,196,196,196,196,196,196,553, +557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557, +557,557,558,558,559,560,560,196,196,196,196,196,196,196,196,196, +561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561, +561,561,562,562,196,196,196,196,196,196,196,196,196,196,196,196, +563,563,563,563,563,563,563,563,563,563,563,563,563,196,563,563, +563,196,564,564,196,196,196,196,196,196,196,196,196,196,196,196, /* block 45 */ -567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567, -567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567, -567,567,567,568,568,567,567,567,567,567,567,567,567,567,567,567, -567,567,567,567,569,569,570,571,571,571,571,571,571,571,570,570, -570,570,570,570,570,570,571,570,570,572,572,572,572,572,572,572, -572,572,573,572,574,574,575,576,577,577,575,578,567,572,196,196, +565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565, +565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565, +565,565,565,566,566,565,565,565,565,565,565,565,565,565,565,565, +565,565,565,565,567,567,568,569,569,569,569,569,569,569,568,568, +568,568,568,568,568,568,569,568,568,570,570,570,570,570,570,570, +570,570,571,570,572,572,573,574,575,575,573,576,577,570,196,196, +578,578,578,578,578,578,578,578,578,578,196,196,196,196,196,196, 579,579,579,579,579,579,579,579,579,579,196,196,196,196,196,196, -580,580,580,580,580,580,580,580,580,580,196,196,196,196,196,196, /* block 46 */ -581,581,582,583,584,582,585,581,584,586,587,588,588,588,589,588, -590,590,590,590,590,590,590,590,590,590,196,196,196,196,196,196, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,592,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,196,196,196,196,196,196,196, +580,580,581,582,583,581,584,580,583,585,586,587,587,587,588,587, +589,589,589,589,589,589,589,589,589,589,196,196,196,196,196,196, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,591,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,196,196,196,196,196,196,196, /* block 47 */ -591,591,591,591,591,593,593,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591, -591,591,591,591,591,591,591,591,591,594,591,196,196,196,196,196, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -545,545,545,545,545,545,196,196,196,196,196,196,196,196,196,196, +590,590,590,590,590,592,592,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590, +590,590,590,590,590,590,590,590,590,593,590,196,196,196,196,196, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +543,543,543,543,543,543,196,196,196,196,196,196,196,196,196,196, /* block 48 */ -595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595, -595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,196, -596,596,596,597,597,597,597,596,596,597,597,597,196,196,196,196, -597,597,596,597,597,597,597,597,597,598,598,598,196,196,196,196, -599,196,196,196,600,600,601,601,601,601,601,601,601,601,601,601, -602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602, -602,602,602,602,602,602,602,602,602,602,602,602,602,602,196,196, -602,602,602,602,602,196,196,196,196,196,196,196,196,196,196,196, +594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594, +594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,196, +595,595,595,596,596,596,596,595,595,596,596,596,196,196,196,196, +596,596,595,596,596,596,596,596,596,597,597,597,196,196,196,196, +598,196,196,196,599,599,600,600,600,600,600,600,600,600,600,600, +601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601, +601,601,601,601,601,601,601,601,601,601,601,601,601,601,196,196, +601,601,601,601,601,196,196,196,196,196,196,196,196,196,196,196, /* block 49 */ -603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603, -603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603, -603,603,603,603,603,603,603,603,603,603,603,603,196,196,196,196, -603,603,603,603,603,604,604,604,603,603,604,603,603,603,603,603, -603,603,603,603,603,603,603,603,603,603,196,196,196,196,196,196, -605,605,605,605,605,605,605,605,605,605,606,196,196,196,607,607, -608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608, -608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608, +602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602, +602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602, +602,602,602,602,602,602,602,602,602,602,602,602,196,196,196,196, +602,602,602,602,602,603,603,603,602,602,603,602,602,602,602,602, +602,602,602,602,602,602,602,602,602,602,196,196,196,196,196,196, +604,604,604,604,604,604,604,604,604,604,605,196,196,196,606,606, +607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607, +607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607, /* block 50 */ -609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609, -609,609,609,609,609,609,609,610,610,611,611,610,196,196,612,612, -613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613, -613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613, -613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613, -613,613,613,613,613,614,615,614,615,615,615,615,615,615,615,196, -616,617,615,617,617,615,615,615,615,615,615,615,615,614,614,614, -614,614,614,615,615,618,618,618,618,618,618,618,618,196,196,618, +608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608, +608,608,608,608,608,608,608,609,609,610,610,609,196,196,611,611, +612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612, +612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612, +612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612, +612,612,612,612,612,613,614,613,614,614,614,614,614,614,614,196, +615,616,614,616,616,614,614,614,614,614,614,614,614,613,613,613, +613,613,613,614,614,617,617,617,617,617,617,617,617,196,196,617, /* block 51 */ -619,619,619,619,619,619,619,619,619,619,196,196,196,196,196,196, -619,619,619,619,619,619,619,619,619,619,196,196,196,196,196,196, -620,620,620,620,620,620,620,621,622,622,622,622,620,620,196,196, -176,176,176,176,176,176,176,176,176,176,176,176,176,176,623,624, -624,176,176,176,176,176,176,176,176,176,176,176,624,624,624,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +618,618,618,618,618,618,618,618,618,618,196,196,196,196,196,196, +618,618,618,618,618,618,618,618,618,618,196,196,196,196,196,196, +619,619,619,619,619,619,619,620,621,621,621,621,619,619,196,196, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,622,623, +623,176,176,176,176,176,176,176,176,176,176,176,623,623,623,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,196,196, +176,176,176,176,176,176,176,176,176,176,176,176,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 52 */ -625,625,625,625,626,627,627,627,627,627,627,627,627,627,627,627, +624,624,624,624,625,626,626,626,626,626,626,627,627,626,626,626, +626,626,626,627,627,627,627,627,627,627,627,627,627,627,627,627, 627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627, -627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627, -627,627,627,627,628,629,625,625,625,625,625,629,625,629,626,626, -626,626,625,629,630,627,627,627,627,627,627,627,627,196,631,631, +627,627,627,627,628,629,624,624,624,624,624,629,624,629,625,625, +625,625,624,629,630,627,627,627,627,627,627,627,627,196,631,631, 632,632,632,632,632,632,632,632,632,632,631,631,633,634,631,631, 633,635,635,635,635,635,635,635,635,635,635,628,628,628,628,628, 628,628,628,628,635,635,635,635,635,635,635,635,635,631,631,631, @@ -3178,51 +3206,51 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 636,636,637,638,638,638,638,638,638,638,638,638,638,638,638,638, 638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638, 638,637,636,636,636,636,637,637,636,636,639,640,636,636,638,638, -641,641,641,641,641,641,641,641,641,641,638,638,638,638,638,638, -642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642, -642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642, -642,642,642,642,642,642,643,644,645,645,644,644,644,645,644,645, -645,645,646,646,196,196,196,196,196,196,196,196,647,647,647,647, +641,641,641,641,641,641,641,641,641,641,642,638,638,638,642,642, +643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643, +643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643, +643,643,643,643,643,643,644,645,646,646,645,645,645,646,645,646, +646,646,647,647,196,196,196,196,196,196,196,196,648,648,648,648, /* block 54 */ -648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648, -648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648, -648,648,648,648,649,649,649,649,649,649,649,649,650,650,650,650, -650,650,650,650,649,649,651,652,196,196,196,653,653,654,654,654, -655,655,655,655,655,655,655,655,655,655,196,196,196,648,648,648, -656,656,656,656,656,656,656,656,656,656,657,657,657,657,657,657, -657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657, -657,657,657,657,657,657,657,657,658,658,658,659,658,658,660,660, +649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649, +649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649, +649,649,649,649,650,650,650,650,650,650,650,650,651,651,651,651, +651,651,651,651,650,650,652,653,196,196,196,654,654,655,655,655, +656,656,656,656,656,656,656,656,656,656,196,196,196,649,649,649, +657,657,657,657,657,657,657,657,657,657,658,658,658,658,658,658, +658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658, +658,658,658,658,658,658,658,658,659,659,659,660,659,659,661,661, /* block 55 */ -661,662,663,664,665,666,667,668,669,275,276,196,196,196,196,196, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670, -670,670,670,670,670,670,670,670,670,670,670,196,196,670,670,670, -671,671,671,671,671,671,671,671,196,196,196,196,196,196,196,196, -672,673,672,674,673,675,675,676,675,676,677,673,676,676,673,673, -676,678,673,673,673,673,673,673,673,679,680,681,681,675,681,681, -681,681,682,683,684,680,680,685,686,686,687,196,196,196,196,196, +662,663,664,665,666,667,668,669,670,275,276,196,196,196,196,196, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671, +671,671,671,671,671,671,671,671,671,671,671,196,196,671,671,671, +672,672,672,672,672,672,672,672,196,196,196,196,196,196,196,196, +673,674,673,675,674,676,677,678,679,680,681,674,680,680,674,674, +680,682,683,674,674,674,674,674,674,684,685,686,687,688,687,687, +687,687,689,690,691,692,692,693,694,694,695,196,196,196,196,196, /* block 56 */ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70,256,256,256,256,256,688,149,149,149,149, + 70, 70, 70, 70, 70, 70,256,256,256,256,256,696,149,149,149,149, 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, -149,149,149,149,149,149,149,149,149,149,149,149,149,689,689,689, -689,689,150,149,149,149,689,689,689,689,689, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70,690,691, 70, 70, 70,692, 70, 70, +149,149,149,149,149,149,149,149,149,149,149,149,149,697,697,697, +697,697,150,149,149,149,697,697,697,697,697, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70,698,699, 70, 70, 70,700, 70, 70, /* block 57 */ - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,693, 70, - 70, 70, 70, 70, 70, 70,694, 70, 70, 70, 70,695,695,695,695,695, -695,695,695,695,696,695,695,695,696,695,695,695,695,695,695,695, -695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,697, -698,698,189,189,176,176,176,176,176,176,176,176,176,176,176,176, -189,189,189,624,624,624,624,624,624,624,624,624,624,624,624,624, -624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624, -624,624,624,624,624,176,176,176,699,176,700,176,176,176,176,176, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,701, 70, + 70, 70, 70, 70, 70, 70,702, 70, 70, 70, 70,149,149,149,149,149, +149,149,149,149,150,149,149,149,150,149,149,149,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,703, +704,704,189,189,176,176,176,176,176,176,176,176,176,176,176,176, +189,189,189,623,623,623,623,623,623,623,623,623,623,623,623,623, +623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623, +623,623,623,623,623,176,176,176,705,176,706,176,176,176,176,176, /* block 58 */ 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, @@ -3231,12 +3259,12 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, -701,702, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, +707,708, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, /* block 59 */ 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, - 65, 66, 65, 66, 65, 66, 69, 69, 69, 69,703,704, 70, 70,705, 70, + 65, 66, 65, 66, 65, 66, 69, 69, 69, 69,709,710, 70, 70,711, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 67, 65, 66, 65, 66, @@ -3245,123 +3273,123 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, /* block 60 */ -706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707, -706,706,706,706,706,706,196,196,707,707,707,707,707,707,196,196, -706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707, -706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707, -706,706,706,706,706,706,196,196,707,707,707,707,707,707,196,196, -708,706,708,706,708,706,708,706,196,707,196,707,196,707,196,707, -706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707, -709,709,710,710,710,710,711,711,712,712,713,713,714,714,196,196, +712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713, +712,712,712,712,712,712,196,196,713,713,713,713,713,713,196,196, +712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713, +712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713, +712,712,712,712,712,712,196,196,713,713,713,713,713,713,196,196, +714,712,714,712,714,712,714,712,196,713,196,713,196,713,196,713, +712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713, +715,715,716,716,716,716,717,717,718,718,719,719,720,720,196,196, /* block 61 */ -715,715,715,715,715,715,715,715,716,716,716,716,716,716,716,716, -715,715,715,715,715,715,715,715,716,716,716,716,716,716,716,716, -715,715,715,715,715,715,715,715,716,716,716,716,716,716,716,716, -706,706,717,718,717,196,708,717,707,707,719,719,720,201,721,201, -201,201,717,718,717,196,708,717,722,722,722,722,720,201,201,201, -706,706,708,723,196,196,708,708,707,707,724,724,196,201,201,201, -706,706,708,725,708,250,708,708,707,707,726,726,255,201,201,201, -196,196,717,718,717,196,708,717,727,727,728,728,720,201,201,196, +721,721,721,721,721,721,721,721,722,722,722,722,722,722,722,722, +721,721,721,721,721,721,721,721,722,722,722,722,722,722,722,722, +721,721,721,721,721,721,721,721,722,722,722,722,722,722,722,722, +712,712,723,724,723,196,714,723,713,713,725,725,726,201,727,201, +201,201,723,724,723,196,714,723,728,728,728,728,726,201,201,201, +712,712,714,729,196,196,714,714,713,713,730,730,196,201,201,201, +712,712,714,731,714,250,714,714,713,713,732,732,255,201,201,201, +196,196,723,724,723,196,714,723,733,733,734,734,726,201,201,196, /* block 62 */ -729,729,729,729,729,729,729,729,729,729,729, 51,730,731,732,733, -734,734,734,734,734,734,735, 43,736,737,738,739,739,740,738,739, - 43, 43, 43, 43,741, 43, 43,742,743,744,745,746,747,748,749,750, -751,751,752,752,752, 43, 43, 43, 43, 49, 57, 43,753,754, 43,755, -756, 43, 43, 43,757,758,759,754,754,753, 43, 43, 43, 43, 43,760, - 43, 43, 50,761,755, 43, 43, 43, 43, 43,762, 43, 43,763, 43,729, - 51,764,764,764,764,765,766,767,768,769,770,770,770,770,770,770, - 54,696,196,196, 54, 54, 54, 54, 54, 54,771,772,773,774,775,695, +735,735,735,735,735,735,735,735,735,735,735, 51,736,737,738,739, +740,740,740,740,740,740,741, 43,742,743,744,745,745,746,744,745, + 43, 43, 43, 43,747, 43, 43,748,749,750,751,752,753,754,755,756, +757,757,758,758,758, 43, 43, 43, 43, 49, 57, 43,759,760, 43,761, +762, 43, 43, 43,763,764,765,760,760,759, 43, 43, 43, 43, 43,766, + 43, 43, 50,767,761, 43, 43, 43, 43, 43,768, 43, 43,769, 43,735, + 51,770,770,770,770,771,772,773,774,775,776,776,776,776,776,776, + 54,777,196,196, 54, 54, 54, 54, 54, 54,778,779,780,781,782,783, /* block 63 */ - 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,771,772,773,774,775,196, -695,695,695,695,695,695,695,695,695,695,695,695,695,196,196,196, -479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479, -479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479, -479,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776, -777,777,777,777,777,777,777,777,777,777,777,777,777,778,778,778, -778,777,778,779,778,777,777,189,189,189,189,777,777,777,777,777, -780,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,778,779,780,781,782,196, +783,783,783,783,783,783,783,783,783,783,783,783,783,196,196,196, +477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477, +477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477, +477,477,784,784,784,784,784,784,784,784,784,784,784,784,784,784, +785,785,785,785,785,785,785,785,785,785,785,785,785,786,786,786, +786,785,786,787,786,785,785,189,189,189,189,785,785,785,785,785, +788,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 64 */ -781,781,782,781,781,781,781,782,781,781,783,782,782,782,783,783, -782,782,782,783,781,782,781,781,784,782,782,782,782,782,781,781, -781,781,785,781,782,781,786,781,782,787,788,789,782,782,790,783, -782,782,791,782,783,792,792,792,792,793,781,781,783,783,782,782, -794,794,794,794,794,782,783,783,795,795,781,794,781,781,796,510, +789,789,790,789,789,789,789,790,789,789,791,790,790,790,791,791, +790,790,790,791,789,790,789,789,792,790,790,790,790,790,789,789, +789,789,793,789,790,789,794,789,790,795,796,797,790,790,798,791, +790,790,799,790,791,800,800,800,800,801,789,789,791,791,790,790, +802,802,802,802,802,790,791,791,803,803,789,802,789,789,804,508, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, -797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797, -798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798, +805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805, +806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806, /* block 65 */ -799,799,799, 65, 66,799,799,799,799, 58,781,781,196,196,196,196, - 50, 50, 50, 50,800,801,801,801,801,801, 50, 50,802,802,802,802, - 50,802,802, 50,802,802, 50,802, 45,801,801,802,802,802, 50, 45, -802,802, 45, 45, 45, 45,802,802, 45, 45, 45, 45,802,802,802,802, -802,802,802,802,802,802,802,802,802,802,802,802,802,802, 50, 50, -802,802, 50,802, 50,802,802,802,802,802,802,802, 45,802, 45, 45, - 45, 45, 45, 45,802,802, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, +807,807,807, 65, 66,807,807,807,807, 58,789,789,196,196,196,196, + 50, 50, 50, 50,808,809,809,809,809,809, 50, 50,810,810,810,810, + 50,810,810, 50,810,810, 50,810, 45,809,809,810,810,810, 50, 45, +810,810, 45, 45, 45, 45,810,810, 45, 45, 45, 45,810,810,810,810, +810,810,810,810,810,810,810,810,810,810,810,810,810,810, 50, 50, +810,810, 50,810, 50,810,810,810,810,810,810,810, 45,810, 45, 45, + 45, 45, 45, 45,810,810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, /* block 66 */ - 50, 50,803, 50, 50, 50, 50,803,804,804,804,804,804,804, 50, 50, - 50, 50,805, 53, 50,804, 50, 50, 50, 50, 50, 50, 50, 50,803,804, -804,804,804, 50,804, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,804,804, 50, 50, - 50, 50, 50,804, 50,804, 50, 50, 50, 50, 50, 50,804, 50, 50, 50, - 50, 50,804,804,804,804, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50,804,804,804,804,804,804,804,804, 50, 50,804,804, -804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804, + 50, 50,811, 50, 50, 50, 50,811,812,812,812,812,812,812, 50, 50, + 50, 50,813, 53, 50,812, 50, 50, 50, 50, 50, 50, 50, 50,811,812, +812,812,812, 50,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812, 50, 50, + 50, 50, 50,812, 50,812, 50, 50, 50, 50, 50, 50,812, 50, 50, 50, + 50, 50,812,812,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50,812,812,812,812,812,812,812,812, 50, 50,812,812, +812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812, /* block 67 */ -804,804,804,804,804,804,804,804,804,804,804,804, 50, 50, 50,804, -804,804,804, 50, 50, 50, 50, 50,804, 50, 50, 50, 50, 50, 50, 50, - 50, 50,804,804, 50, 50,804, 50,804,804, 50,804, 50, 50, 50, 50, -804,804,804,804,804,804,804,804,804, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50,804,804,804,804,804, 50, 50, -804,804, 50, 50, 50, 50,804,804,804,804,804,804,804,804,804,804, -804,804,804,804,804,804,804,804,804,804,804,804,804,804, 50, 50, -804,804,804,804,804, 50,804,804, 50, 50,804,804,804,804,804, 50, +812,812,812,812,812,812,812,812,812,812,812,812, 50, 50, 50,812, +812,812,812, 50, 50, 50, 50, 50,812, 50, 50, 50, 50, 50, 50, 50, + 50, 50,812,812, 50, 50,812, 50,812,812, 50,812, 50, 50, 50, 50, +812,812,812,812,812,812,812,812,812, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812,812,812,812, 50, 50, +812,812, 50, 50, 50, 50,812,812,812,812,812,812,812,812,812,812, +812,812,812,812,812,812,812,812,812,812,812,812,812,812, 50, 50, +812,812,812,812,812, 50,812,812, 50, 50,812,812,812,812,812, 50, /* block 68 */ - 45, 45, 45, 45, 45, 45, 45, 45,806,807,806,807, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,808,808, 45, 45, 45, 45, - 50, 50, 45, 45, 45, 45, 45, 45, 47,809,810, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45,811,811,811,811,811,811,811,811,811,811, -811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811, -811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811, -811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811, -811,811,811,811,811,811,811,811,811,811,811, 45, 50, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45,814,815,814,815, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,816, 45, 45, 45, 45, + 50, 50, 45, 45, 45, 45, 45, 45, 47,817,818, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819, +819,819,819,819,819,819,819,819,819,819,819, 45, 50, 45, 45, 45, /* block 69 */ - 45, 45, 45, 45, 45, 45, 45, 45,812, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45,811, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45,819, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50,802,802, 45,802, 45, 45, 45, 45, 45, 45, 45, 45, + 50, 50, 50, 50,810,810, 45,810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, -802, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50, - 50, 50,802, 45, 45, 45, 45, 45, 45,808,808,808,808, 47, 47, 47, -808, 47, 47,808, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45, +810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50, + 50, 50,810, 45, 45, 45, 45, 45, 45,816,816,816,816, 47, 47, 47, +816, 47, 47,816, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45, /* block 70 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,813,813,813,813,813,813, -813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,813,813,813,813,813, -813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,820,820,820,820,820,820, +820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,820,820,820,820,820, +820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, /* block 71 */ - 58, 58, 58, 58, 58, 58, 58, 58,814,814,814,814,814,814,814,814, -814,814,814,814,814,814,814,814,814,814,814,814,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,815,815,815,815,815,815,815,815,815,815, -815,815,816,815,815,815,815,815,815,815,815,815,815,815,815,815, -817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817, -817,817,817,817,817,817,817,817,817,817, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58,821,821,821,821,821,821,821,821, +821,821,821,821,821,821,821,821,821,821,821,821,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,822,822,822,822,822,822,822,822,822,822, +822,822,823,822,822,822,822,822,822,822,822,822,822,822,822,822, +824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, +824,824,824,824,824,824,824,824,824,824, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, /* block 72 */ @@ -3377,132 +3405,132 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 73 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -802,802, 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 45, 45,802,802, -802,802,802,802,802,802,801, 50, 45, 45, 45, 45,802,802,802,802, -801, 50, 45, 45, 45, 45,802,802, 45, 45,802,802, 45, 45, 45,802, -802,802,802,802, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45,802, 45,802, 45, 45,802,802,802,802,802,802, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50,800,800,818,818, 50, +810,810, 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 45, 45,810,810, +810,810,810,810,810,810,809, 50, 45, 45, 45, 45,810,810,810,810, +809, 50, 45, 45, 45, 45,810,810, 45, 45,810,810, 45, 45, 45,810, +810,810,810,810, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45,810, 45,810, 45, 45,810,810,810,810,810,810, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50,808,808,825,825, 50, /* block 74 */ - 47, 47, 47, 47, 47,819,802,812,812,812,812,812,812,812, 47,812, -812, 47,812, 45,808,808,812,812, 47,812,812,812,812,820,812,812, - 47,812, 47, 47,812,812, 47,812,812,812, 47,812,812,812, 47, 47, -812,812,812,812,812,812,812,812, 47, 47, 47,812,812,812,812,812, -801,812,801,812,812,812,812,812,808,808,808,808,808,808,808,808, -808,808,808,808,812,812,812,812,812,812,812,812,812,812,812, 47, -801,819,819,801,812, 47, 47,812, 47,812,812,812,812,819,819,821, -812,812,812,812,812,812,812,812,812,812,812, 47,812,812, 47,808, + 47, 47, 47, 47, 47,810,810, 45, 45, 45, 45, 45, 45, 45, 47, 45, + 45, 47, 45, 45,816,816, 45, 45, 47, 45, 45, 45, 45,826, 45, 45, + 47, 45, 47, 47, 45, 45, 47, 45, 45, 45, 47, 45, 45, 45, 47, 47, + 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45, +809, 45,809, 45, 45, 45, 45, 45,816,816,816,816,816,816,816,816, +816,816,816,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, +809,810,810,809, 45, 47, 47, 45, 47, 45, 45, 45, 45,810,810, 50, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 45, 45, 47,816, /* block 75 */ -812,812,812,812,812,812, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -812,812, 47,808, 47, 47, 47, 47,812, 47,812, 47, 47,812,812,812, - 47,808,812,812,812,812,812, 47,812,812,808,808,822,812,812,812, - 47, 47,812,812,812,812,812,812,812,812,812,812,812,808,808,812, -812,812,812,812,808,808,812,812, 47,812,812,812,812,812,808, 47, -812, 47,812, 47,808,812,812,812,812,812,812,812,812,812,812,812, -812,812,812,812,812,812,812,812,812, 47,808,812,812,812,812,812, - 47, 47,808,808, 47,808,812, 47, 47,820,808,812,812,808,812,812, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 47,816, 47, 47, 47, 47, 45, 47, 45, 47, 47, 45, 45, 45, + 47,816, 45, 45, 45, 45, 45, 47, 45, 45,816,816,819, 45, 45, 45, + 47, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,816, 45, + 45, 45, 45, 45,816,816, 45, 45, 47, 45, 45, 45, 45, 45,816, 47, + 45, 47, 45, 47,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 47,816, 45, 45, 45, 45, 45, + 47, 47,816,816, 47,816, 45, 47, 47,826,816, 45, 45,816, 45, 45, /* block 76 */ -812,812, 47,812,812,808, 45, 45, 47, 47,823,823,820,820,812, 47, -812,812, 47, 45, 47, 45, 47, 45, 45, 45, 45, 45, 45, 47, 45, 45, - 45, 47, 45, 45, 45, 45, 45, 45,808, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 47, 45, 45,816, 45, 45, 47, 47,827,827,826,826, 45, 47, + 45, 45, 47, 45, 47, 45, 47, 45, 45, 45, 45, 45, 45, 47, 45, 45, + 45, 47, 45, 45, 45, 45, 45, 45,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 47, 45, 45, 47, 45, 45, 45, 45,808, 45,808, 45, - 45, 45, 45,808,808,808, 45,808, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 47, 47,812,812,812,758,759,758,759,758,759,758,759, -758,759,758,759,758,759, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 45, 45, 45, 45, 47, 45, 45, 47, 45, 45, 45, 45,816, 45,816, 45, + 45, 45, 45,816,816,816, 45,816, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 47, 47, 45, 45, 45,764,765,764,765,764,765,764,765, +764,765,764,765,764,765, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, /* block 77 */ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 45,808,808,808, 45, 45, 45, 45, 45, 45, 45, 45, + 58, 58, 58, 58, 45,816,816,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 47, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, -808, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,808, - 50, 50, 50,804,804,806,807, 50,804,804, 50,804, 50,804, 50, 50, - 50, 50, 50, 50, 50,804,804, 50, 50, 50, 50, 50,804,804,804, 50, - 50, 50,804,804,804,804,806,807,806,807,806,807,806,807,806,807, +816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816, + 50, 50, 50,812,812,814,815, 50,812,812, 50,812, 50,812, 50, 50, + 50, 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50,812,812,812, 50, + 50, 50,812,812,812,812,814,815,814,815,814,815,814,815,814,815, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, /* block 78 */ -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, -824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, +828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828, /* block 79 */ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50,800,800, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50,808,808, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, /* block 80 */ - 50, 50, 50,806,807,806,807,806,807,806,807,806,807,806,807,806, -807,806,807,806,807,806,807,806,807, 50, 50,804, 50, 50, 50, 50, -804, 50, 50,804,804,804, 50, 50,804,804,804,804,804,804,804,804, - 50, 50, 50, 50, 50, 50, 50, 50,804, 50, 50, 50, 50, 50, 50, 50, -804,804, 50, 50,804,804, 50, 50, 50, 50, 50, 50, 50, 50, 50,804, -804,804,804, 50,804,804, 50, 50,806,807,806,807, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50,804,804, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50,804, 50, 50,804,804, 50, 50,806,807, 50, 50, + 50, 50, 50,814,815,814,815,814,815,814,815,814,815,814,815,814, +815,814,815,814,815,814,815,814,815, 50, 50,812, 50, 50, 50, 50, +812, 50, 50,812,812,812, 50, 50,812,812,812,812,812,812,812,812, + 50, 50, 50, 50, 50, 50, 50, 50,812, 50, 50, 50, 50, 50, 50, 50, +812,812, 50, 50,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50,812, +812,812,812, 50,812,812, 50, 50,814,815,814,815, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50,812, 50, 50,812,812, 50, 50,814,815, 50, 50, /* block 81 */ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,804,804,804,804, 50, - 50, 50, 50, 50,804,804, 50, 50, 50, 50, 50, 50,804,804, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812,812,812, 50, + 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50,804,804, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50,804,804,804,804,804,804,804, + 50, 50, 50, 50,812,812, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50,812,812,812,812,812,812,812, /* block 82 */ -804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804, -804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804, -804,804,804, 50, 50, 50,804,804,804,804,804,804,804,804, 50,804, -804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804, -804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804, -804,804,804,804,804,804,804, 50, 50, 50, 50, 50, 50, 50,804, 50, - 50, 50, 50,804,804,804, 50, 50, 50, 50, 50, 50,804,804,804, 50, - 50, 50, 50, 50, 50, 50, 50,804,804,804,804, 50, 50, 50, 50, 50, +812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812, +812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812, +812,812,812, 50, 50, 50,812,812,812,812,812,812,812,812, 50,812, +812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812, +812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812, +812,812,812,812,812,812,812, 50, 50, 50, 50, 50, 50, 50,812, 50, + 50, 50, 50,812,812,812, 50, 50, 50, 50, 50, 50,812,812,812, 50, + 50, 50, 50, 50, 50, 50, 50,812,812,812,812, 50, 50, 50, 50, 50, /* block 83 */ 45, 45, 45, 45, 45, 47, 47, 47, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,808,808, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,816,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 45, 45, 50, 50, 50, 50, 50, 50, 45, 45, 45, -808, 45, 45, 45, 45,808, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, +816, 45, 45, 45, 45,816, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45,813,813, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45,820,820, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, /* block 84 */ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45,813, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,825, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,829, 45, /* block 85 */ -826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826, -826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826, -826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826, -827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827, -827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827, -827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827, - 65, 66,828,829,830,831,832, 65, 66, 65, 66, 65, 66,833,834,835, -836, 70, 65, 66, 70, 65, 66, 70, 70, 70, 70, 70,696,695,837,837, +830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830, +830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830, +830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830, +831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831, +831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831, +831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831, + 65, 66,832,833,834,835,836, 65, 66, 65, 66, 65, 66,837,838,839, +840, 70, 65, 66, 70, 65, 66, 70, 70, 70, 70, 70,777,783,841,841, /* block 86 */ 246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247, @@ -3511,598 +3539,598 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247, 246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247, 246,247,246,247,246,247,246,247,246,247,246,247,246,247,246,247, -246,247,246,247,838,839,839,839,839,839,839,246,247,246,247,840, -840,840,246,247,196,196,196,196,196,841,841,841,842,843,842,842, +246,247,246,247,842,843,843,843,843,843,843,246,247,246,247,844, +844,844,246,247,196,196,196,196,196,845,845,845,846,847,846,846, /* block 87 */ -844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844, -844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844, -844,844,844,844,844,844,196,844,196,196,196,196,196,844,196,196, -845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845, -845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845, -845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845, -845,845,845,845,845,845,845,845,196,196,196,196,196,196,196,846, -847,196,196,196,196,196,196,196,196,196,196,196,196,196,196,848, - -/* block 88 */ -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533, -533,533,533,533,533,533,533,196,196,196,196,196,196,196,196,196, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196, +848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848, +848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848, +848,848,848,848,848,848,196,848,196,196,196,196,196,848,196,196, +849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849, 849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849, 849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849, +849,849,849,849,849,849,849,849,196,196,196,196,196,196,196,850, +851,196,196,196,196,196,196,196,196,196,196,196,196,196,196,852, + +/* block 88 */ +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, +531,531,531,531,531,531,531,196,196,196,196,196,196,196,196,196, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196, +853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853, +853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853, /* block 89 */ - 43, 43,850,851,850,851, 43, 43, 43,850,851, 43,850,851, 43, 43, - 43, 43, 43, 43, 43, 43, 43,852, 43, 43,734, 43,850,851, 43, 43, -850,851,758,759,758,759,758,759,758,759, 43, 43, 43, 43,754,853, -854,855, 43, 43, 43, 43, 43, 43, 43, 43,734,734,856, 43, 43, 43, -734,857,738,858, 43, 43, 43, 43, 43, 43, 43, 43,859, 43,859,859, - 45, 45, 43,754,754,758,759,758,759,758,759,758,759,734,813,813, -813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813, -813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813, + 43, 43,854,855,854,855, 43, 43, 43,854,855, 43,854,855, 43, 43, + 43, 43, 43, 43, 43, 43, 43,856, 43, 43,740, 43,854,855, 43, 43, +854,855,764,765,764,765,764,765,764,765, 43, 43, 43, 43,760,857, +858,859, 43, 43, 43, 43, 43, 43, 43, 43,740,740,860, 43, 43, 43, +740,861,744,862, 43, 43, 43, 43, 43, 43, 43, 43,863, 43,863,863, + 45, 45, 43,760,760,764,765,764,765,764,765,764,765,740,820,820, +820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820, +820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820, /* block 90 */ -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,196,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,196,196,196,196,196,196,196,196,196,196,196,196, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,196,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,196,196,196,196,196,196,196,196,196,196,196,196, /* block 91 */ -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, /* block 92 */ -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860, -860,860,860,860,860,860,196,196,196,196,196,196,196,196,196,196, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,864,864,864,864,864,864,864,864,864,864, +864,864,864,864,864,864,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -861,861,862,862,861,861,861,861,861,861,861,861,861,861,863,863, +865,865,866,866,865,865,865,865,865,865,865,865,865,865,867,867, /* block 93 */ -729,864,865,866,781,867,868,869,870,871,872,873,874,875,874,875, -876,877, 45,878,876,877,876,877,876,877,876,877,879,880,881,881, - 45,869,869,869,869,869,869,869,869,869,882,882,882,882,883,883, -884,885,885,885,885,885,781,886,869,869,869,887,888,889,890,890, -196,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, +735,868,869,870,789,871,872,873,874,875,876,877,878,879,878,879, +880,881, 45,882,880,881,880,881,880,881,880,881,883,884,885,885, + 45,873,873,873,873,873,873,873,873,873,886,886,886,886,887,887, +888,889,889,889,889,889,789,890,873,873,873,891,892,893,894,894, +196,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, /* block 94 */ -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,196,196,892,892,893,893,894,894,891, -895,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,897,898,899,899,896, - -/* block 95 */ -196,196,196,196,196,900,900,900,900,900,900,900,900,900,900,900, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,196,196,896,896,897,897,898,898,895, +899,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, 900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, 900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, -196,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901, -901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901, -901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901, -901,901,901,901,902,901,901,901,901,901,901,901,901,901,901,901, -901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901, - -/* block 96 */ -901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,196, -903,903,904,904,904,904,903,903,903,903,903,903,903,903,903,903, 900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, 900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, -890,890,890,890,890,890,890,890,890,890,890,890,890,890,890,890, -890,890,890,890,890,890,890,890,890,890,890,890,890,890,890,890, -890,890,890,890,890,890,196,196,196,196,196,196,196,196,196,861, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, +900,900,900,900,900,900,900,900,900,900,900,901,902,903,903,900, -/* block 97 */ +/* block 95 */ +196,196,196,196,196,904,904,904,904,904,904,904,904,904,904,904, +904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, +904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, +196,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, 905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, -905,905,905,905,905,905,905,905,905,905,905,905,905,906,906,196, -904,904,904,904,904,904,904,904,904,904,903,903,903,903,903,903, -903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903, -903,903,903,903,903,903,903,903,907,907,907,907,907,907,907,907, -781, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, -905,905,905,905,905,905,905,905,905,905,905,905,906,906,906,510, +905,905,905,905,906,905,905,905,905,905,905,905,905,905,905,905, +905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, -/* block 98 */ -904,904,904,904,904,904,904,904,904,904,903,903,903,903,903,903, -903,903,903,903,903,903,903,908,903,908,903,903,903,903,903,903, -903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903, -903, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, -903,903,903,903,903,903,903,903,903,903,903,903,781,781,781,781, +/* block 96 */ +905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,196, +907,907,908,908,908,908,907,907,907,907,907,907,907,907,907,907, +904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, +904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, +894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,894, +894,894,894,894,894,894,894,894,894,894,894,894,894,894,894,894, +894,894,894,894,894,894,196,196,196,196,196,196,196,196,196,865, +900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, + +/* block 97 */ 909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, +909,909,909,909,909,909,909,909,909,909,909,909,909,910,910,196, +908,908,908,908,908,908,908,908,908,908,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,911,911,911,911,911,911,911,911, +789, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,903, +909,909,909,909,909,909,909,909,909,909,909,909,910,910,910,508, + +/* block 98 */ +908,908,908,908,908,908,908,908,908,908,907,907,907,907,907,907, +907,907,907,907,907,907,907,912,907,912,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, +907,907,907,907,907,907,907,907,907,907,907,907,789,789,789,789, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,907, /* block 99 */ -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909, -909,909,909,909,909,909,909,909,903,903,903,903,903,903,903,903, -903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903, -903,510,510,510,510,510,510,781,781,781,781,903,903,903,903,903, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, +913,913,913,913,913,913,913,913,907,907,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,508,508,508,508,508,508,789,789,789,789,907,907,907,907,907, /* block 100 */ -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,781,781, -903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,903, -903,903,903,903,903,903,903,903,903,903,903,903,903,903,903,781, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,789,789, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, +907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,789, /* block 101 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, /* block 102 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, /* block 103 */ -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,912,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,916,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, /* block 104 */ -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, -911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, +915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915, /* block 105 */ -911,911,911,911,911,911,911,911,911,911,911,911,911,196,196,196, -913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, -913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, -913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913, -913,913,913,913,913,913,913,196,196,196,196,196,196,196,196,196, -914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, -914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, -914,914,914,914,914,914,914,914,915,915,915,915,915,915,916,917, - -/* block 106 */ -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, +915,915,915,915,915,915,915,915,915,915,915,915,915,196,196,196, +917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917, +917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917, +917,917,917,917,917,917,917,917,917,917,917,917,917,917,917,917, +917,917,917,917,917,917,917,196,196,196,196,196,196,196,196,196, 918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, 918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, +918,918,918,918,918,918,918,918,919,919,919,919,919,919,920,921, + +/* block 106 */ +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, /* block 107 */ -918,918,918,918,918,918,918,918,918,918,918,918,919,920,921,921, -918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918, -922,922,922,922,922,922,922,922,922,922,918,918,196,196,196,196, +922,922,922,922,922,922,922,922,922,922,922,922,923,924,925,925, +922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922, +926,926,926,926,926,926,926,926,926,926,922,922,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -275,276,275,276,275,276,275,276,275,276,923,924,275,276,275,276, +275,276,275,276,275,276,275,276,275,276,927,928,275,276,275,276, 275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276, -275,276,275,276,275,276,275,276,275,276,275,276,275,276,925,281, -283,283,283,926,849,849,849,849,849,849,849,849,927,927,926,928, +275,276,275,276,275,276,275,276,275,276,275,276,275,276,929,281, +283,283,283,930,853,853,853,853,853,853,853,853,931,931,930,932, /* block 108 */ 275,276,275,276,275,276,275,276,275,276,275,276,275,276,275,276, -275,276,275,276,275,276,275,276,275,276,275,276,929,929,849,849, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,931,931,931,931,931,931,931,931,931,931, -932,932,933,934,935,935,935,934,196,196,196,196,196,196,196,196, +275,276,275,276,275,276,275,276,275,276,275,276,933,933,853,853, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,935,935,935,935,935,935,935,935,935,935, +936,936,937,938,939,939,939,938,196,196,196,196,196,196,196,196, /* block 109 */ -936,936,936,936,936,936,936,936, 46, 46, 46, 46, 46, 46, 46, 46, +940,940,940,940,940,940,940,940, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,151,151,151,151,151,151,151,151,151, 46, 46, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 70, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, -695, 70, 70, 70, 70, 70, 70, 70, 70, 65, 66, 65, 66,937, 65, 66, +783, 70, 70, 70, 70, 70, 70, 70, 70, 65, 66, 65, 66,941, 65, 66, /* block 110 */ - 65, 66, 65, 66, 65, 66, 65, 66,151,938,938, 65, 66,939, 70, 93, - 65, 66, 65, 66,940, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, - 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,941,942,943,944,941, 70, -945,946,947,948, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, - 65, 66, 65, 66,949,950,951, 65, 66, 65, 66,952, 65, 66,196,196, - 65, 66,196, 70,196, 70, 65, 66, 65, 66, 65, 66,953,196,196,196, + 65, 66, 65, 66, 65, 66, 65, 66,151,942,942, 65, 66,943, 70, 93, + 65, 66, 65, 66,944, 70, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,945,946,947,948,945, 70, +949,950,951,952, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, + 65, 66, 65, 66,953,954,955, 65, 66, 65, 66,956, 65, 66, 65, 66, + 65, 66, 65, 66, 65, 66, 65, 66, 65, 66, 65, 66,957,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,695,695,695, 65, 66, 93,149,149, 70, 93, 93, 93, 93, 93, +196,149,783,783,783, 65, 66, 93,149,149, 70, 93, 93, 93, 93, 93, /* block 111 */ -954,954,955,954,954,954,956,954,954,954,954,955,954,954,954,954, -954,954,954,954,954,954,954,954,954,954,954,954,954,954,954,954, -954,954,954,957,957,955,955,957,958,958,958,958,956,196,196,196, -959,959,959,960,960,960,961,961,962,963,196,196,196,196,196,196, -964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964, -964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964, -964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964, -964,964,964,964,965,965,966,966,196,196,196,196,196,196,196,196, - -/* block 112 */ -967,967,968,968,968,968,968,968,968,968,968,968,968,968,968,968, +958,958,959,958,958,958,960,958,958,958,958,959,958,958,958,958, +958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958, +958,958,958,961,961,959,959,961,962,962,962,962,960,196,196,196, +963,963,963,964,964,964,965,965,966,967,196,196,196,196,196,196, 968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, 968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, -968,968,968,968,967,967,967,967,967,967,967,967,967,967,967,967, -967,967,967,967,969,970,196,196,196,196,196,196,196,196,971,971, -972,972,972,972,972,972,972,972,972,972,196,196,196,196,196,196, -378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378, -378,973,376,974,376,376,376,376,385,385,385,376,385,376,376,374, +968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968, +968,968,968,968,969,969,970,970,196,196,196,196,196,196,196,196, + +/* block 112 */ +971,971,972,972,972,972,972,972,972,972,972,972,972,972,972,972, +972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972, +972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972, +972,972,972,972,971,971,971,971,971,971,971,971,971,971,971,971, +971,971,971,971,973,974,196,196,196,196,196,196,196,196,975,975, +976,976,976,976,976,976,976,976,976,976,196,196,196,196,196,196, +376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376, +376,977,374,978,374,374,374,374,383,383,383,374,383,374,374,372, /* block 113 */ -975,975,975,975,975,975,975,975,975,975,976,976,976,976,976,976, -976,976,976,976,976,976,976,976,976,976,976,976,976,976,976,976, -976,976,976,976,976,976,977,977,977,977,977,978,978,978,979,980, -981,981,981,981,981,981,981,981,981,981,981,981,981,981,981,981, -981,981,981,981,981,981,981,982,982,982,982,982,982,982,982,982, -982,982,983,984,196,196,196,196,196,196,196,196,196,196,196,985, -528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528, -528,528,528,528,528,528,528,528,528,528,528,528,528,196,196,196, +979,979,979,979,979,979,979,979,979,979,980,980,980,980,980,980, +980,980,980,980,980,980,980,980,980,980,980,980,980,980,980,980, +980,980,980,980,980,980,981,981,981,981,981,982,982,982,983,984, +985,985,985,985,985,985,985,985,985,985,985,985,985,985,985,985, +985,985,985,985,985,985,985,986,986,986,986,986,986,986,986,986, +986,986,987,988,196,196,196,196,196,196,196,196,196,196,196,989, +526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526, +526,526,526,526,526,526,526,526,526,526,526,526,526,196,196,196, /* block 114 */ -986,986,986,987,988,988,988,988,988,988,988,988,988,988,988,988, -988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988, -988,988,988,988,988,988,988,988,988,988,988,988,988,988,988,988, -988,988,988,989,987,987,986,986,986,986,987,987,986,986,987,987, -990,991,991,991,991,991,991,992,993,993,991,991,991,991,196,994, -995,995,995,995,995,995,995,995,995,995,196,196,196,196,991,991, -511,511,511,511,511,521,996,511,511,511,511,511,511,511,511,511, -522,522,522,522,522,522,522,522,522,522,511,511,511,511,511,196, +990,990,990,991,992,992,992,992,992,993,993,993,992,992,992,993, +993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,993, +993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,993, +993,993,993,994,991,991,990,990,990,990,991,991,990,990,991,991, +995,996,996,996,996,996,996,997,998,998,996,996,996,996,196,999, +1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,196,196,196,196,996,996, +509,509,509,509,509,519,1001,509,509,509,509,509,509,509,509,509, +520,520,520,520,520,520,520,520,520,520,509,509,509,509,509,196, /* block 115 */ -997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997, -997,997,997,997,997,997,997,997,997,997,997,997,997,997,997,997, -997,997,997,997,997,997,997,997,997,998,998,998,998,998,998,999, -999,998,998,999,999,998,998,196,196,196,196,196,196,196,196,196, -997,997,997,998,997,997,997,997,997,997,997,997,998,999,196,196, -1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,196,196,1001,1002,1002,1002, -511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511, -996,511,511,511,511,511,511,523,523,523,511,520,521,520,511,511, +1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002, +1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002,1002, +1002,1002,1002,1002,1002,1002,1002,1002,1002,1003,1003,1003,1003,1003,1003,1004, +1004,1003,1003,1004,1004,1003,1003,196,196,196,196,196,196,196,196,196, +1002,1002,1002,1003,1002,1002,1002,1002,1002,1002,1002,1002,1003,1004,196,196, +1005,1005,1005,1005,1005,1005,1005,1005,1005,1005,196,196,1006,1007,1007,1007, +509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509, +1001,509,509,509,1008,1008,1008,521,521,521,509,518,519,518,509,509, /* block 116 */ -1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003, -1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003, -1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003,1003, -1004,1003,1004,1004,1004,1005,1005,1004,1004,1005,1003,1005,1005,1003,1004,1006, -1007,1006,1007,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,1003,1003,1008,1009,1010, -1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1012,1013,1013,1012,1012, -1014,1014,1011,1015,1015,1012,1016,196,196,196,196,196,196,196,196,196, +1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009, +1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009, +1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009, +1010,1009,1010,1010,1010,1011,1011,1010,1010,1011,1009,1011,1011,1009,1010,1012, +1013,1012,1013,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,1009,1009,1014,1015,1016, +1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1018,1019,1019,1018,1018, +1020,1020,1021,1022,1022,1018,1023,196,196,196,196,196,196,196,196,196, /* block 117 */ -196,533,533,533,533,533,533,196,196,533,533,533,533,533,533,196, -196,533,533,533,533,533,533,196,196,196,196,196,196,196,196,196, -533,533,533,533,533,533,533,196,533,533,533,533,533,533,533,196, +196,531,531,531,531,531,531,196,196,531,531,531,531,531,531,196, +196,531,531,531,531,531,531,196,196,196,196,196,196,196,196,196, +531,531,531,531,531,531,531,196,531,531,531,531,531,531,531,196, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70,1017, 70, 70, 70, 70, 70, 70, 70,938,149,149,149,149, + 70, 70, 70,1024, 70, 70, 70, 70, 70, 70, 70,942,149,149,149,149, 70, 70, 70, 70, 70,256, 70, 70, 70,149, 46, 46,196,196,196,196, -1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, /* block 118 */ -1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018, -1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018, -1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018, -1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018,1018, -1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011, -1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011,1011, -1011,1011,1011,1012,1012,1013,1012,1012,1013,1012,1012,1014,1019,1016,196,196, -1020,1020,1020,1020,1020,1020,1020,1020,1020,1020,196,196,196,196,196,196, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017, +1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017,1021,1021,1021,1021,1021, +1021,1021,1021,1018,1018,1019,1018,1018,1019,1018,1018,1020,1026,1023,196,196, +1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,196,196,196,196,196,196, /* block 119 */ -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, /* block 120 */ -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, /* block 121 */ -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, /* block 122 */ -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, /* block 123 */ -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, /* block 124 */ -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, /* block 125 */ -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, /* block 126 */ -1022,1022,1022,1022,1022,1022,1022,1022,1021,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022,1022, -1022,1022,1022,1022,196,196,196,196,196,196,196,196,196,196,196,196, -531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531, -531,531,531,531,531,531,531,196,196,196,196,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532, -532,532,532,532,532,532,532,532,532,532,532,532,196,196,196,196, +1029,1029,1029,1029,1029,1029,1029,1029,1028,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029,1029, +1029,1029,1029,1029,196,196,196,196,196,196,196,196,196,196,196,196, +529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529, +529,529,529,529,529,529,529,196,196,196,196,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530, +530,530,530,530,530,530,530,530,530,530,530,530,196,196,196,196, /* block 127 */ -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, -1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023,1023, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, +1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030,1030, /* block 128 */ -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, /* block 129 */ -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, /* block 130 */ -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,910,910, -1025,910,1025,910,910,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,910, -1025,910,1025,910,910,1025,1025,910,910,910,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,196,196, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,914,914, +1032,914,1032,914,914,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,914, +1032,914,1032,914,914,1032,1032,914,914,914,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,196,196, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, /* block 131 */ -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,196,196,196,196,196,196, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 132 */ -703,703,703,703,703,1026,1027,196,196,196,196,196,196,196,196,196, -196,196,196,292,292,292,292,292,196,196,196,196,196,305,300,305, -305,305,305,305,305,305,305,305,305,1028,305,305,305,305,305,305, -305,305,305,305,305,305,305,297,305,305,305,305,305,297,305,297, -305,305,297,305,305,297,305,305,305,305,305,305,305,305,305,305, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +709,709,709,709,709,1033,1034,196,196,196,196,196,196,196,196,196, +196,196,196,292,292,292,292,292,196,196,196,196,196,303,299,303, +303,303,303,303,303,303,303,303,303,1035,303,303,303,303,303,303, +303,303,303,303,303,303,303,297,303,303,303,303,303,297,303,297, +303,303,297,303,303,297,303,303,303,303,303,303,303,303,303,303, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 133 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,370,370,370,370,370,370,370,370,370,370,370,370,370,370, -370,370,370,340,340,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,368,368,368,368,368,368,368,368,368,368,368,368,368,368, +368,368,368,313,313,313,313,313,313,313,313,313,313,313,313,313, +313,313,313,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 134 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,1029,1029, -1029,1029,1029,1029,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,1036,1036, +1036,1036,1036,1036,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 135 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 136 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,1030,1031, -315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,1037,1038, +313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, /* block 137 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -340,340,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,340,340,340,340,340,340,340,315, -1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, -1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, -321,321,1033,321,321,321,321,321,321,321,1029,1029,312,1034,315,315, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +313,313,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,313,313,313,313,313,313,313,313, +1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039, +1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039,1039, +319,319,1040,319,319,319,319,319,319,319,1036,1036,310,1041,313,313, /* block 138 */ -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1036, -1037,1037,1038,1039,1037,1038,1038,1040,1041,1037,196,196,196,196,196,196, -176,176,176,176,176,176,176,176,176,176,176,176,176,176,927,927, -1037,1042,1042,755,755,1040,1041,1040,1041,1040,1041,1040,1041,1040,1041,1040, -1041,1043,1044,1043,1044,866,866,1040,1041,1037,1037,1037,1037,755,755,755, -1045,199,1046,196,199,1047,1038,1038,1042,1048,1049,1048,1049,1048,1049,1050, -1037,1051,1052,1053,1054,1054,794,196,1051,479,1050,1037,196,196,196,196, -1029,321,1029,321,1029,340,1029,321,1029,321,1029,321,1029,321,1029,321, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1043, +1044,1044,1045,1046,1044,1045,1045,1047,1048,1044,196,196,196,196,196,196, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,931,931, +1044,1049,1049,761,761,1047,1048,1047,1048,1047,1048,1047,1048,1047,1048,1047, +1048,1050,1051,1050,1051,870,870,1047,1048,1044,1044,1044,1044,761,761,761, +1052,199,1053,196,199,1054,1045,1045,1049,1055,1056,1055,1056,1055,1056,1057, +1044,1058,1059,1060,1061,1061,802,196,1058,477,1057,1044,196,196,196,196, +1036,319,1036,319,1036,338,1036,319,1036,319,1036,319,1036,319,1036,319, /* block 139 */ -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321, -321,321,321,321,321,321,321,321,321,321,321,321,321,340,340, 51, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319, +319,319,319,319,319,319,319,319,319,319,319,319,319,338,338, 51, /* block 140 */ -196,1038,1055,1050,479,1050,1037,1056,1048,1049,1037,1052,1045,1057,1046,1058, -1059,1059,1059,1059,1059,1059,1059,1059,1059,1059,1047,199,1054,794,1054,1038, -1037,1060,1060,1060,1060,1060,1060, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,1048,1051,1049,1061,755, - 46,1062,1062,1062,1062,1062,1062, 62, 62, 62, 62, 62, 62, 62, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,1048,794,1049,794,1048, -1049,1063,1064,1065,1066,897,896,896,896,896,896,896,896,896,896,896, -898,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, +196,1045,1062,1057,477,1057,1044,1063,1055,1056,1044,1059,1052,1064,1053,1065, +1066,1066,1066,1066,1066,1066,1066,1066,1066,1066,1054,199,1061,802,1061,1045, +1044,1067,1067,1067,1067,1067,1067, 59, 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,1055,1058,1056,1068,761, + 46,1069,1069,1069,1069,1069,1069, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,1055,802,1056,802,1055, +1056,1070,1071,1072,1073,901,900,900,900,900,900,900,900,900,900,900, +902,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, /* block 141 */ -896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896, -896,896,896,896,896,896,896,896,896,896,896,896,896,896,1067,1067, -902,901,901,901,901,901,901,901,901,901,901,901,901,901,901,901, -901,901,901,901,901,901,901,901,901,901,901,901,901,901,901,196, -196,196,901,901,901,901,901,901,196,196,901,901,901,901,901,901, -196,196,901,901,901,901,901,901,196,196,901,901,901,196,196,196, -479,479,794, 46,781,479,479,196,781,794,794,794,794,781,781,196, -765,765,765,765,765,765,765,765,765,1068,1068,1068,781,781,1032,1032, +900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900, +900,900,900,900,900,900,900,900,900,900,900,900,900,900,1074,1074, +906,905,905,905,905,905,905,905,905,905,905,905,905,905,905,905, +905,905,905,905,905,905,905,905,905,905,905,905,905,905,905,196, +196,196,905,905,905,905,905,905,196,196,905,905,905,905,905,905, +196,196,905,905,905,905,905,905,196,196,905,905,905,196,196,196, +477,477,802, 46,789,477,477,196,789,802,802,802,802,789,789,196, +771,771,771,771,771,771,771,771,771,1075,1075,1075,789,789,1039,1039, /* block 142 */ -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,196,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,1069,1069,196,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,196, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,196, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,196,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,1076,1076,196,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,196, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 143 */ -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069, -1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,1069,196,196,196,196,196, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076, +1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,1076,196,196,196,196,196, /* block 144 */ -1070,1071,1072,196,196,196,196,1073,1073,1073,1073,1073,1073,1073,1073,1073, -1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073, -1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073,1073, -1073,1073,1073,1073,196,196,196,1074,1074,1074,1074,1074,1074,1074,1074,1074, -1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075, -1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075, -1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075,1075, -1075,1075,1075,1075,1075,1076,1076,1076,1076,1077,1077,1077,1077,1077,1077,1077, +1077,1078,1079,196,196,196,196,1080,1080,1080,1080,1080,1080,1080,1080,1080, +1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080, +1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080, +1080,1080,1080,1080,196,196,196,1081,1081,1081,1081,1081,1081,1081,1081,1081, +1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082, +1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082, +1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082, +1082,1082,1082,1082,1082,1083,1083,1083,1083,1084,1084,1084,1084,1084,1084,1084, /* block 145 */ -1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1076,1076,1077,1078,1078,196, -781,781,781,781,781,781,781,781,781,781,781,781,781,196,196,196, -1077,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1083,1083,1084,1085,1085,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,196,196,196, +1084,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,189,196,196, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,189,196,196, /* block 146 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4115,97 +4143,97 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 147 */ -1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079, -1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,1079,196,196,196, -1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080, -1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080, -1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080,1080, -1080,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1081,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082, -1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,1082,196,196,196,196, - -/* block 148 */ -1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083, -1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083,1083, -1084,1084,1084,1084,196,196,196,196,196,196,196,196,196,1083,1083,1083, -1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085,1085, -1085,1086,1085,1085,1085,1085,1085,1085,1085,1085,1086,196,196,196,196,196, +1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086, +1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,1086,196,196,196, +1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087, 1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087, 1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087,1087, -1087,1087,1087,1087,1087,1087,1088,1088,1088,1088,1088,196,196,196,196,196, +1087,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1088,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089, +1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,196,196,196,196, + +/* block 148 */ +1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090, +1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090,1090, +1091,1091,1091,1091,196,196,196,196,196,196,196,196,196,1090,1090,1090, +1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092,1092, +1092,1093,1092,1092,1092,1092,1092,1092,1092,1092,1093,196,196,196,196,196, +1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094, +1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094, +1094,1094,1094,1094,1094,1094,1095,1095,1095,1095,1095,196,196,196,196,196, /* block 149 */ -1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089, -1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,1089,196,1090, -1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091, -1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091,1091, -1091,1091,1091,1091,196,196,196,196,1091,1091,1091,1091,1091,1091,1091,1091, -1092,1093,1093,1093,1093,1093,196,196,196,196,196,196,196,196,196,196, +1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096, +1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,196,1097, +1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098, +1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,1098, +1098,1098,1098,1098,196,196,196,196,1098,1098,1098,1098,1098,1098,1098,1098, +1099,1100,1100,1100,1100,1100,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 150 */ -1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094, -1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094,1094, -1094,1094,1094,1094,1094,1094,1094,1094,1095,1095,1095,1095,1095,1095,1095,1095, -1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095, -1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095,1095, -1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096, -1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096, -1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096,1096, - -/* block 151 */ -1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097, -1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,1097,196,196, -1098,1098,1098,1098,1098,1098,1098,1098,1098,1098,196,196,196,196,196,196, -1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099, -1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099,1099, -1099,1099,1099,1099,196,196,196,196,1100,1100,1100,1100,1100,1100,1100,1100, -1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100, -1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,1100,196,196,196,196, - -/* block 152 */ 1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101, 1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101,1101, -1101,1101,1101,1101,1101,1101,1101,1101,196,196,196,196,196,196,196,196, +1101,1101,1101,1101,1101,1101,1101,1101,1102,1102,1102,1102,1102,1102,1102,1102, 1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102, 1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102, -1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102,1102, -1102,1102,1102,1102,196,196,196,196,196,196,196,196,196,196,196,1103, -1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,196,1104,1104,1104,1104, +1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103, +1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103, +1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103,1103, -/* block 153 */ -1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,196,1104,1104,1104,1104, -1104,1104,1104,196,1104,1104,196,1105,1105,1105,1105,1105,1105,1105,1105,1105, -1105,1105,196,1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,1105, -1105,1105,196,1105,1105,1105,1105,1105,1105,1105,196,1105,1105,196,196,196, -1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106, +/* block 151 */ +1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104, +1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,1104,196,196, +1105,1105,1105,1105,1105,1105,1105,1105,1105,1105,196,196,196,196,196,196, 1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106, 1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106,1106, -1106,1106,1106,1106,196,196,196,196,196,196,196,196,196,196,196,196, +1106,1106,1106,1106,196,196,196,196,1107,1107,1107,1107,1107,1107,1107,1107, +1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, +1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,196,196,196,196, + +/* block 152 */ +1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108, +1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108,1108, +1108,1108,1108,1108,1108,1108,1108,1108,196,196,196,196,196,196,196,196, +1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109, +1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109, +1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109, +1109,1109,1109,1109,196,196,196,196,196,196,196,196,196,196,196,1110, +1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,196,1111,1111,1111,1111, + +/* block 153 */ +1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111,196,1111,1111,1111,1111, +1111,1111,1111,196,1111,1111,196,1112,1112,1112,1112,1112,1112,1112,1112,1112, +1112,1112,196,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112,1112, +1112,1112,196,1112,1112,1112,1112,1112,1112,1112,196,1112,1112,196,196,196, +1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113, +1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113, +1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113, +1113,1113,1113,1113,196,196,196,196,196,196,196,196,196,196,196,196, /* block 154 */ -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, /* block 155 */ -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,1107,196,196,196,196,196,196,196,196,196, -1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107, -1107,1107,1107,1107,1107,1107,196,196,196,196,196,196,196,196,196,196, -1107,1107,1107,1107,1107,1107,1107,1107,196,196,196,196,196,196,196,196, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,1114,196,196,196,196,196,196,196,196,196, +1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114,1114, +1114,1114,1114,1114,1114,1114,196,196,196,196,196,196,196,196,196,196, +1114,1114,1114,1114,1114,1114,1114,1114,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 156 */ -149,1108,1108,149,149,149,196,149,149,149,149,149,149,149,149,149, +149,1115,1115,149,149,149,196,149,149,149,149,149,149,149,149,149, 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, 149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, 149,196,149,149,149,149,149,149,149,149,149,196,196,196,196,196, @@ -4215,79 +4243,79 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 157 */ -1109,1109,1109,1109,1109,1109,297,297,1109,297,1109,1109,1109,1109,1109,1109, -1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109, -1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109,1109, -1109,1109,1109,1109,1109,1109,297,1109,1109,297,297,297,1109,297,297,1109, -1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110,1110, -1110,1110,1110,1110,1110,1110,297,1111,1112,1112,1112,1112,1112,1112,1112,1112, -1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113,1113, -1113,1113,1113,1113,1113,1113,1113,1114,1114,1115,1115,1115,1115,1115,1115,1115, +1116,1116,1116,1116,1116,1116,297,297,1116,297,1116,1116,1116,1116,1116,1116, +1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116, +1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116, +1116,1116,1116,1116,1116,1116,297,1116,1116,297,297,297,1116,297,297,1116, +1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117,1117, +1117,1117,1117,1117,1117,1117,297,1118,1119,1119,1119,1119,1119,1119,1119,1119, +1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120, +1120,1120,1120,1120,1120,1120,1120,1121,1121,1122,1122,1122,1122,1122,1122,1122, /* block 158 */ -1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116, -1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,1116,297, -297,297,297,297,297,297,297,1117,1117,1117,1117,1117,1117,1117,1117,1117, +1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123, +1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,297, +297,297,297,297,297,297,297,1124,1124,1124,1124,1124,1124,1124,1124,1124, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118,1118, -1118,1118,1118,297,1118,1118,297,297,297,297,297,1119,1119,1119,1119,1119, +1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125, +1125,1125,1125,297,1125,1125,297,297,297,297,297,1126,1126,1126,1126,1126, /* block 159 */ -1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120,1120, -1120,1120,1120,1120,1120,1120,1121,1121,1121,1121,1121,1121,297,297,297,1122, -1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,1123, -1123,1123,1123,1123,1123,1123,1123,1123,1123,1123,297,297,297,297,297,1124, -297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, +1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127, +1127,1127,1127,1127,1127,1127,1128,1128,1128,1128,1128,1128,297,297,297,1129, +1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,1130, +1130,1130,1130,1130,1130,1130,1130,1130,1130,1130,297,297,297,297,297,1131, +1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,1132, +1132,1132,1132,1132,1132,1132,1132,1132,1132,1132,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, /* block 160 */ -1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125, -1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125,1125, -1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126,1126, -1126,1126,1126,1126,1126,1126,1126,1126,297,297,297,297,1127,1127,1126,1126, -1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127, -297,297,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127, -1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127, -1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127,1127, +1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133, +1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133,1133, +1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134,1134, +1134,1134,1134,1134,1134,1134,1134,1134,297,297,297,297,1135,1135,1134,1134, +1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135, +297,297,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135, +1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135, +1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135, /* block 161 */ -1128,1129,1129,1129,297,1129,1129,297,297,297,297,297,1129,1129,1129,1129, -1128,1128,1128,1128,297,1128,1128,1128,297,1128,1128,1128,1128,1128,1128,1128, -1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128, -1128,1128,1128,1128,1128,1128,297,297,1130,1130,1130,297,297,297,297,1131, -1132,1132,1132,1132,1132,1132,1132,1132,1132,297,297,297,297,297,297,297, -1133,1133,1133,1133,1133,1133,1134,1134,1133,297,297,297,297,297,297,297, -1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135, -1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1135,1136,1136,1137, +1136,1137,1137,1137,297,1137,1137,297,297,297,297,297,1137,1137,1137,1137, +1136,1136,1136,1136,297,1136,1136,1136,297,1136,1136,1136,1136,1136,1136,1136, +1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136,1136, +1136,1136,1136,1136,1136,1136,297,297,1138,1138,1138,297,297,297,297,1139, +1140,1140,1140,1140,1140,1140,1140,1140,1140,297,297,297,297,297,297,297, +1141,1141,1141,1141,1141,1141,1142,1142,1141,297,297,297,297,297,297,297, +1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143, +1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1143,1144,1144,1145, /* block 162 */ -1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138, -1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1138,1139,1139,1139, +1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146, +1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1146,1147,1147,1147, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -1140,1140,1140,1140,1140,1140,1140,1140,1141,1140,1140,1140,1140,1140,1140,1140, -1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140,1140, -1140,1140,1140,1140,1140,1142,1142,297,297,297,297,1143,1143,1143,1143,1143, -1144,1144,1145,1144,1144,1144,1146,297,297,297,297,297,297,297,297,297, +1148,1148,1148,1148,1148,1148,1148,1148,1149,1148,1148,1148,1148,1148,1148,1148, +1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148,1148, +1148,1148,1148,1148,1148,1150,1150,297,297,297,297,1151,1151,1151,1151,1151, +1152,1152,1153,1152,1152,1152,1154,297,297,297,297,297,297,297,297,297, /* block 163 */ -1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147, -1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147, -1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147,1147, -1147,1147,1147,1147,1147,1147,297,297,297,1148,1149,1149,1149,1149,1149,1149, -1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150,1150, -1150,1150,1150,1150,1150,1150,297,297,1151,1151,1151,1151,1151,1151,1151,1151, -1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152,1152, -1152,1152,1152,297,297,297,297,297,1153,1153,1153,1153,1153,1153,1153,1153, +1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155, +1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155, +1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155, +1155,1155,1155,1155,1155,1155,297,297,297,1156,1157,1157,1157,1157,1157,1157, +1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158, +1158,1158,1158,1158,1158,1158,297,297,1159,1159,1159,1159,1159,1159,1159,1159, +1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160,1160, +1160,1160,1160,297,297,297,297,297,1161,1161,1161,1161,1161,1161,1161,1161, /* block 164 */ -1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154,1154, -1154,1154,297,297,297,297,297,297,297,1155,1155,1155,1155,297,297,297, -297,297,297,297,297,297,297,297,297,1156,1156,1156,1156,1156,1156,1156, +1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162,1162, +1162,1162,297,297,297,297,297,297,297,1163,1163,1163,1163,297,297,297, +297,297,297,297,297,297,297,297,297,1164,1164,1164,1164,1164,1164,1164, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, @@ -4295,37 +4323,37 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, /* block 165 */ -1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157, -1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157, -1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157, -1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157, -1157,1157,1157,1157,1157,1157,1157,1157,1157,297,297,297,297,297,297,297, +1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165, +1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165, +1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165, +1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1165, +1165,1165,1165,1165,1165,1165,1165,1165,1165,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, /* block 166 */ -1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158, -1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158, -1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158,1158, -1158,1158,1158,297,297,297,297,297,297,297,297,297,297,297,297,297, -1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159, -1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159, -1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159,1159, -1159,1159,1159,297,297,297,297,297,297,297,1160,1160,1160,1160,1160,1160, +1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166, +1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166, +1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166,1166, +1166,1166,1166,297,297,297,297,297,297,297,297,297,297,297,297,297, +1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167, +1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167, +1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167,1167, +1167,1167,1167,297,297,297,297,297,297,297,1168,1168,1168,1168,1168,1168, /* block 167 */ -1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161, -1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161,1161, -1161,1161,1162,1162,1163,1163,1163,1163,340,340,340,340,340,340,340,340, -1164,1164,1164,1164,1164,1164,1164,1164,1164,1164,340,340,340,340,340,340, -1165,1165,1165,1165,1165,1165,1165,1165,1165,1165,1166,1166,1166,1166,1167,1166, -1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168,1168, -1168,1168,1168,1168,1168,1168,297,297,297,1169,1170,1171,1171,1171,1172,1173, -1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174,1174, +1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169, +1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169,1169, +1169,1169,1170,1170,1171,1171,1171,1171,338,338,338,338,338,338,338,338, +1172,1172,1172,1172,1172,1172,1172,1172,1172,1172,338,338,338,338,338,338, +1173,1173,1173,1173,1173,1173,1173,1173,1173,1173,1174,1174,1174,1174,1175,1174, +1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176, +1176,1176,1176,1176,1176,1176,297,297,297,1177,1178,1179,1179,1179,1180,1181, +1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182, /* block 168 */ -1174,1174,1174,1174,1174,1174,297,297,297,297,297,297,297,297,1175,1175, +1182,1182,1182,1182,1182,1182,297,297,297,297,297,297,297,297,1183,1183, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, @@ -4341,184 +4369,184 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176, -1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,1176,297, +1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184, +1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,1184,297, /* block 170 */ -1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177, -1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,1177, -1177,1177,1177,1177,1177,1177,1177,1177,1177,1177,297,1178,1178,1179,297,297, -1177,1177,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -340,340,321,321,321,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,316,333,333,333, +1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185, +1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,1185, +1185,1185,1185,1185,1185,1185,1185,1185,1185,1185,297,1186,1186,1187,297,297, +1185,1185,297,297,297,297,297,297,297,297,297,297,297,297,297,297, +338,338,319,319,319,1188,319,319,338,338,338,338,338,338,338,338, +1189,313,313,313,313,313,313,313,313,338,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,324,314,314,331,331,331, /* block 171 */ -1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180, -1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1180,1181,1181,1181, -1181,1181,1181,1181,1181,1181,1181,1180,297,297,297,297,297,297,297,297, -1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182,1182, -1182,1182,1182,1182,1182,1182,1183,1183,1183,1183,1183,1183,1183,1183,1183,1183, -1183,1184,1184,1184,1184,1185,1185,1185,1185,1185,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186,1186, +1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190, +1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1191,1191,1191, +1191,1191,1191,1191,1191,1191,1191,1190,297,297,297,297,297,297,297,297, +1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192,1192, +1192,1192,1192,1192,1192,1192,1193,1193,1193,1193,1193,1193,1193,1193,1193,1193, +1193,1194,1194,1194,1194,1195,1195,1195,1195,1195,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196, /* block 172 */ -1186,1186,1187,1187,1187,1187,1188,1188,1188,1188,297,297,297,297,297,297, +1196,1196,1197,1197,1197,1197,1198,1198,1198,1198,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189,1189, -1189,1189,1189,1189,1189,1190,1190,1190,1190,1190,1190,1190,297,297,297,297, +1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199, +1199,1199,1199,1199,1199,1200,1200,1200,1200,1200,1200,1200,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191,1191, -1191,1191,1191,1191,1191,1191,1191,297,297,297,297,297,297,297,297,297, +1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201,1201, +1201,1201,1201,1201,1201,1201,1201,297,297,297,297,297,297,297,297,297, /* block 173 */ -1192,1193,1192,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194, -1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194, -1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194,1194, -1194,1194,1194,1194,1194,1194,1194,1194,1193,1193,1193,1193,1193,1193,1193,1193, -1193,1193,1193,1193,1193,1193,1195,1196,1196,1197,1197,1197,1197,1197,196,196, -196,196,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198,1198, -1198,1198,1198,1198,1198,1198,1199,1199,1199,1199,1199,1199,1199,1199,1199,1199, -1195,1194,1194,1193,1193,1194,196,196,196,196,196,196,196,196,196,1200, +1202,1203,1202,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204, +1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204, +1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204,1204, +1204,1204,1204,1204,1204,1204,1204,1204,1203,1203,1203,1203,1203,1203,1203,1203, +1203,1203,1203,1203,1203,1203,1205,1206,1206,1207,1207,1207,1207,1207,196,196, +196,196,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208,1208, +1208,1208,1208,1208,1208,1208,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209, +1205,1204,1204,1203,1203,1204,196,196,196,196,196,196,196,196,196,1210, /* block 174 */ -1201,1201,1202,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203, -1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203, -1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203,1203, -1202,1202,1202,1201,1201,1201,1201,1202,1202,1204,1205,1206,1206,1207,1208,1208, -1208,1208,1201,196,196,196,196,196,196,196,196,196,196,1207,196,196, -1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209,1209, -1209,1209,1209,1209,1209,1209,1209,1209,1209,196,196,196,196,196,196,196, -1210,1210,1210,1210,1210,1210,1210,1210,1210,1210,196,196,196,196,196,196, +1211,1211,1212,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213, +1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213, +1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213,1213, +1212,1212,1212,1211,1211,1211,1211,1212,1212,1214,1215,1216,1216,1217,1218,1218, +1218,1218,1211,196,196,196,196,196,196,196,196,196,196,1217,196,196, +1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219,1219, +1219,1219,1219,1219,1219,1219,1219,1219,1219,196,196,196,196,196,196,196, +1220,1220,1220,1220,1220,1220,1220,1220,1220,1220,196,196,196,196,196,196, /* block 175 */ -1211,1211,1211,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212, -1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212,1212, -1212,1212,1212,1212,1212,1212,1212,1211,1211,1211,1211,1211,1213,1211,1211,1211, -1211,1211,1211,1214,1214,196,1215,1215,1215,1215,1215,1215,1215,1215,1215,1215, -1216,1217,1217,1217,1212,1213,1213,1212,196,196,196,196,196,196,196,196, -1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218, -1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218,1218, -1218,1218,1218,1219,1220,1220,1218,196,196,196,196,196,196,196,196,196, +1221,1221,1221,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222, +1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222,1222, +1222,1222,1222,1222,1222,1222,1222,1221,1221,1221,1221,1221,1223,1221,1221,1221, +1221,1221,1221,1224,1224,196,1225,1225,1225,1225,1225,1225,1225,1225,1225,1225, +1226,1227,1227,1227,1222,1223,1223,1222,196,196,196,196,196,196,196,196, +1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228, +1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228,1228, +1228,1228,1228,1229,1230,1230,1228,196,196,196,196,196,196,196,196,196, /* block 176 */ -1221,1221,1222,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223, -1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223, -1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223,1223, -1223,1223,1223,1222,1222,1222,1221,1221,1221,1221,1221,1221,1221,1221,1221,1222, -1224,1223,1225,1225,1223,1226,1226,1227,1227,1228,1229,1229,1229,1226,1222,1221, -1230,1230,1230,1230,1230,1230,1230,1230,1230,1230,1223,1227,1223,1227,1226,1226, -196,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231,1231, -1231,1231,1231,1231,1231,196,196,196,196,196,196,196,196,196,196,196, +1231,1231,1232,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233, +1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233, +1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233,1233, +1233,1233,1233,1232,1232,1232,1231,1231,1231,1231,1231,1231,1231,1231,1231,1232, +1234,1233,1235,1235,1233,1236,1236,1237,1237,1238,1239,1239,1239,1236,1232,1231, +1240,1240,1240,1240,1240,1240,1240,1240,1240,1240,1233,1237,1233,1237,1236,1236, +196,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241, +1241,1241,1241,1241,1241,196,196,196,196,196,196,196,196,196,196,196, /* block 177 */ -1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232, -1232,1232,196,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232, -1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1232,1233,1233,1233,1234, -1234,1234,1233,1233,1234,1235,1236,1237,1238,1238,1239,1238,1238,1240,1234,1232, -1232,1234,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242, +1242,1242,196,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242, +1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1242,1243,1243,1243,1244, +1244,1244,1243,1243,1244,1245,1246,1247,1248,1248,1249,1248,1248,1250,1244,1242, +1242,1244,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 178 */ -1241,1241,1241,1241,1241,1241,1241,196,1241,196,1241,1241,1241,1241,196,1241, -1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,1241,196,1241, -1241,1241,1241,1241,1241,1241,1241,1241,1241,1242,196,196,196,196,196,196, -1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243, -1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243, -1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1243,1244, -1245,1245,1245,1244,1244,1244,1244,1244,1244,1246,1247,196,196,196,196,196, -1248,1248,1248,1248,1248,1248,1248,1248,1248,1248,196,196,196,196,196,196, +1251,1251,1251,1251,1251,1251,1251,196,1251,196,1251,1251,1251,1251,196,1251, +1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,1251,196,1251, +1251,1251,1251,1251,1251,1251,1251,1251,1251,1252,196,196,196,196,196,196, +1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253, +1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253, +1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1254, +1255,1255,1255,1254,1254,1254,1254,1254,1254,1256,1257,196,196,196,196,196, +1258,1258,1258,1258,1258,1258,1258,1258,1258,1258,196,196,196,196,196,196, /* block 179 */ -1249,1250,1251,1252,196,1253,1253,1253,1253,1253,1253,1253,1253,196,196,1253, -1253,196,196,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253,1253, -1253,1253,1253,1253,1253,1253,1253,1253,1253,196,1253,1253,1253,1253,1253,1253, -1253,196,1253,1253,196,1253,1253,1253,1253,1253,196,1254,1255,1253,1256,1251, -1249,1251,1251,1251,1251,196,196,1251,1251,196,196,1251,1251,1257,196,196, -1253,196,196,196,196,196,196,1256,196,196,196,196,196,1258,1253,1253, -1253,1253,1251,1251,196,196,1259,1259,1259,1259,1259,1259,1259,196,196,196, -1259,1259,1259,1259,1259,196,196,196,196,196,196,196,196,196,196,196, +1259,1260,1261,1262,196,1263,1263,1263,1263,1263,1263,1263,1263,196,196,1263, +1263,196,196,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263,1263, +1263,1263,1263,1263,1263,1263,1263,1263,1263,196,1263,1263,1263,1263,1263,1263, +1263,196,1263,1263,196,1263,1263,1263,1263,1263,196,1264,1265,1263,1266,1261, +1259,1261,1261,1261,1261,196,196,1261,1261,196,196,1261,1261,1267,196,196, +1263,196,196,196,196,196,196,1266,196,196,196,196,196,1268,1263,1263, +1263,1263,1261,1261,196,196,1269,1269,1269,1269,1269,1269,1269,196,196,196, +1269,1269,1269,1269,1269,196,196,196,196,196,196,196,196,196,196,196, /* block 180 */ -1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,196,1260,196,196,1260,196, -1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260, -1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260,1260, -1260,1260,1260,1260,1260,1260,196,1260,1261,1262,1262,1263,1263,1263,1263,1263, -1263,196,1261,196,196,1261,196,1261,1261,1261,1262,196,1262,1262,1264,1265, -1264,1266,1267,1268,1269,1269,196,1270,1270,196,196,196,196,196,196,196, -196,1271,1271,196,196,196,196,196,196,196,196,196,196,196,196,196, +1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,196,1270,196,196,1270,196, +1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270, +1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270,1270, +1270,1270,1270,1270,1270,1270,196,1271,1272,1273,1273,1274,1274,1274,1274,1274, +1274,196,1272,196,196,1272,196,1272,1272,1272,1273,196,1273,1273,1275,1276, +1275,1277,1278,1279,1280,1280,196,1281,1281,196,196,196,196,196,196,196, +196,1282,1282,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 181 */ -1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272, -1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272, -1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272,1272, -1272,1272,1272,1272,1272,1273,1273,1273,1274,1274,1274,1274,1274,1274,1274,1274, -1273,1273,1275,1274,1274,1273,1276,1272,1272,1272,1272,1277,1277,1278,1279,1279, -1280,1280,1280,1280,1280,1280,1280,1280,1280,1280,1278,1278,196,1279,1281,1272, -1272,1272,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283, +1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283, +1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283,1283, +1283,1283,1283,1283,1283,1284,1284,1284,1285,1285,1285,1285,1285,1285,1285,1285, +1284,1284,1286,1285,1285,1284,1287,1283,1283,1283,1283,1288,1288,1289,1290,1290, +1291,1291,1291,1291,1291,1291,1291,1291,1291,1291,1289,1289,196,1290,1292,1283, +1283,1283,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 182 */ -1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282, -1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282, -1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282,1282, -1283,1284,1284,1285,1285,1285,1285,1285,1285,1284,1285,1284,1284,1283,1284,1285, -1285,1284,1286,1287,1282,1282,1288,1282,196,196,196,196,196,196,196,196, -1289,1289,1289,1289,1289,1289,1289,1289,1289,1289,196,196,196,196,196,196, +1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293, +1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293, +1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293,1293, +1294,1295,1295,1296,1296,1296,1296,1296,1296,1295,1296,1295,1295,1294,1295,1296, +1296,1295,1297,1298,1293,1293,1299,1293,196,196,196,196,196,196,196,196, +1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 183 */ -1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290, -1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290, -1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1290,1291, -1292,1292,1293,1293,1293,1293,196,196,1292,1292,1292,1292,1293,1293,1292,1294, -1295,1296,1297,1297,1298,1298,1299,1299,1299,1297,1297,1297,1297,1297,1297,1297, -1297,1297,1297,1297,1297,1297,1297,1297,1290,1290,1290,1290,1293,1293,196,196, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301, +1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1301,1302, +1303,1303,1304,1304,1304,1304,196,196,1303,1303,1303,1303,1304,1304,1303,1305, +1306,1307,1308,1308,1309,1309,1310,1310,1310,1308,1308,1308,1308,1308,1308,1308, +1308,1308,1308,1308,1308,1308,1308,1308,1301,1301,1301,1301,1304,1304,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 184 */ -1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300, -1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300, -1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300,1300, -1301,1301,1301,1302,1302,1302,1302,1302,1302,1302,1302,1301,1301,1302,1301,1303, -1302,1304,1304,1305,1300,196,196,196,196,196,196,196,196,196,196,196, -1306,1306,1306,1306,1306,1306,1306,1306,1306,1306,196,196,196,196,196,196, -581,581,581,581,581,581,581,581,581,581,581,581,581,196,196,196, +1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311, +1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311, +1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311,1311, +1312,1312,1312,1313,1313,1313,1313,1313,1313,1313,1313,1312,1312,1313,1312,1314, +1313,1315,1315,1316,1311,196,196,196,196,196,196,196,196,196,196,196, +1317,1317,1317,1317,1317,1317,1317,1317,1317,1317,196,196,196,196,196,196, +580,580,580,580,580,580,580,580,580,580,580,580,580,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 185 */ -1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307, -1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307, -1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1307,1308,1309,1308,1309,1309, -1308,1308,1308,1308,1308,1308,1310,1311,1307,1312,196,196,196,196,196,196, -1313,1313,1313,1313,1313,1313,1313,1313,1313,1313,196,196,196,196,196,196, -522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522, -522,522,522,522,196,196,196,196,196,196,196,196,196,196,196,196, +1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318, +1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318, +1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1318,1319,1320,1319,1320,1320, +1319,1319,1319,1319,1319,1319,1321,1322,1318,1323,196,196,196,196,196,196, +1324,1324,1324,1324,1324,1324,1324,1324,1324,1324,196,196,196,196,196,196, +520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520, +520,520,520,520,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 186 */ -1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314, -1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,1314,196,196,1315,1316,1315, -1317,1317,1315,1315,1315,1315,1316,1315,1315,1315,1315,1318,196,196,196,196, -1319,1319,1319,1319,1319,1319,1319,1319,1319,1319,1320,1320,1321,1321,1321,1322, -1314,1314,1314,1314,1314,1314,1314,196,196,196,196,196,196,196,196,196, +1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325, +1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,1325,196,196,1326,1327,1326, +1328,1328,1326,1326,1326,1326,1327,1326,1326,1326,1326,1329,196,196,196,196, +1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1331,1331,1332,1332,1332,1333, +1325,1325,1325,1325,1325,1325,1325,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 187 */ -1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323, -1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323, -1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1323,1324,1324,1324,1325, -1325,1325,1325,1325,1325,1325,1325,1325,1324,1326,1327,1328,196,196,196,196, +1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334, +1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334, +1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1335,1335,1335,1336, +1336,1336,1336,1336,1336,1336,1336,1336,1335,1337,1338,1339,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4527,61 +4555,61 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 188 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329, -1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329,1329, -1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330, -1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330,1330, -1331,1331,1331,1331,1331,1331,1331,1331,1331,1331,1332,1332,1332,1332,1332,1332, -1332,1332,1332,196,196,196,196,196,196,196,196,196,196,196,196,1333, +1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340, +1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340,1340, +1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341, +1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341,1341, +1342,1342,1342,1342,1342,1342,1342,1342,1342,1342,1343,1343,1343,1343,1343,1343, +1343,1343,1343,196,196,196,196,196,196,196,196,196,196,196,196,1344, /* block 189 */ -1334,1334,1334,1334,1334,1334,1334,196,196,1334,196,196,1334,1334,1334,1334, -1334,1334,1334,1334,196,1334,1334,196,1334,1334,1334,1334,1334,1334,1334,1334, -1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334,1334, -1335,1336,1336,1336,1336,1336,196,1336,1336,196,196,1337,1337,1338,1339,1340, -1336,1340,1336,1341,1342,1343,1342,196,196,196,196,196,196,196,196,196, -1344,1344,1344,1344,1344,1344,1344,1344,1344,1344,196,196,196,196,196,196, +1345,1345,1345,1345,1345,1345,1345,196,196,1345,196,196,1345,1345,1345,1345, +1345,1345,1345,1345,196,1345,1345,196,1345,1345,1345,1345,1345,1345,1345,1345, +1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345, +1346,1347,1347,1347,1347,1347,196,1347,1347,196,196,1348,1348,1349,1350,1351, +1347,1351,1347,1352,1353,1354,1353,196,196,196,196,196,196,196,196,196, +1355,1355,1355,1355,1355,1355,1355,1355,1355,1355,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 190 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1345,1345,1345,1345,1345,1345,1345,1345,196,196,1345,1345,1345,1345,1345,1345, -1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345, -1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345,1345, -1345,1346,1346,1346,1347,1347,1347,1347,196,196,1347,1347,1346,1346,1346,1346, -1348,1345,1349,1345,1346,196,196,196,196,196,196,196,196,196,196,196, +1356,1356,1356,1356,1356,1356,1356,1356,196,196,1356,1356,1356,1356,1356,1356, +1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356, +1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356,1356, +1356,1357,1357,1357,1358,1358,1358,1358,196,196,1358,1358,1357,1357,1357,1357, +1359,1356,1360,1356,1357,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 191 */ -1350,1351,1351,1351,1351,1351,1351,1352,1352,1351,1351,1350,1350,1350,1350,1350, -1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350, -1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350,1350, -1350,1350,1350,1353,1354,1351,1351,1351,1351,1355,1356,1351,1351,1351,1351,1357, -1357,1357,1358,1358,1357,1357,1357,1354,196,196,196,196,196,196,196,196, -1359,1360,1360,1360,1360,1360,1360,1361,1361,1360,1360,1360,1359,1359,1359,1359, -1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359, -1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359,1359, +1361,1362,1362,1362,1362,1362,1362,1363,1363,1362,1362,1361,1361,1361,1361,1361, +1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361, +1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361,1361, +1361,1361,1361,1364,1365,1362,1362,1362,1362,1366,1367,1362,1362,1362,1362,1368, +1368,1368,1369,1369,1368,1368,1368,1365,196,196,196,196,196,196,196,196, +1370,1371,1371,1371,1371,1371,1371,1372,1372,1371,1371,1371,1370,1370,1370,1370, +1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370, +1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370,1370, /* block 192 */ -1359,1359,1359,1359,1362,1362,1362,1362,1362,1362,1360,1360,1360,1360,1360,1360, -1360,1360,1360,1360,1360,1360,1360,1361,1363,1364,1365,1366,1366,1359,1365,1365, -1365,1367,1367,196,196,196,196,196,196,196,196,196,196,196,196,196, -545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545, -1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368, -1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368, -1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368,1368, -1368,1368,1368,1368,1368,1368,1368,1368,1368,196,196,196,196,196,196,196, +1370,1370,1370,1370,1373,1373,1373,1373,1373,1373,1371,1371,1371,1371,1371,1371, +1371,1371,1371,1371,1371,1371,1371,1372,1374,1375,1376,1377,1377,1378,1376,1376, +1376,1379,1379,196,196,196,196,196,196,196,196,196,196,196,196,196, +543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543, +1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380, +1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380, +1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380, +1380,1380,1380,1380,1380,1380,1380,1380,1380,196,196,196,196,196,196,196, /* block 193 */ -385,385,385,385,385,385,385,385,385,385,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +383,383,383,383,383,383,383,383,383,383,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1231,1232,1231,1231,1231,1232,1231,1232,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 194 */ @@ -4589,49 +4617,49 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369, -1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369,1369, -1369,1370,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1371,1371,1371,1371,1371,1371,1371,1371,1371,1371,196,196,196,196,196,196, +1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381, +1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381,1381, +1381,1382,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,196,196,196,196,196,196, /* block 195 */ -1372,1372,1372,1372,1372,1372,1372,1372,1372,196,1372,1372,1372,1372,1372,1372, -1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372, -1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1372,1373, -1374,1374,1374,1374,1374,1374,1374,196,1374,1374,1374,1374,1374,1374,1373,1375, -1372,1376,1376,1377,1378,1378,196,196,196,196,196,196,196,196,196,196, -1379,1379,1379,1379,1379,1379,1379,1379,1379,1379,1380,1380,1380,1380,1380,1380, -1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,1380,196,196,196, -1381,1382,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383, +1384,1384,1384,1384,1384,1384,1384,1384,1384,196,1384,1384,1384,1384,1384,1384, +1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384, +1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1385, +1386,1386,1386,1386,1386,1386,1386,196,1386,1386,1386,1386,1386,1386,1385,1387, +1384,1388,1388,1389,1390,1390,196,196,196,196,196,196,196,196,196,196, +1391,1391,1391,1391,1391,1391,1391,1391,1391,1391,1392,1392,1392,1392,1392,1392, +1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,196,196,196, +1393,1394,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, /* block 196 */ -1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383,1383, -196,196,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384,1384, -1384,1384,1384,1384,1384,1384,1384,1384,196,1385,1384,1384,1384,1384,1384,1384, -1384,1385,1384,1384,1385,1384,1384,196,196,196,196,196,196,196,196,196, +1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395,1395, +196,196,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,1396, +1396,1396,1396,1396,1396,1396,1396,1396,196,1397,1396,1396,1396,1396,1396,1396, +1396,1397,1396,1396,1397,1396,1396,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 197 */ -1386,1386,1386,1386,1386,1386,1386,196,1386,1386,196,1386,1386,1386,1386,1386, -1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386, -1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386,1386, -1386,1387,1387,1387,1387,1387,1387,196,196,196,1387,196,1387,1387,196,1387, -1387,1387,1388,1387,1389,1389,1390,1387,196,196,196,196,196,196,196,196, -1391,1391,1391,1391,1391,1391,1391,1391,1391,1391,196,196,196,196,196,196, -1392,1392,1392,1392,1392,1392,196,1392,1392,196,1392,1392,1392,1392,1392,1392, -1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1392, +1398,1398,1398,1398,1398,1398,1398,196,1398,1398,196,1398,1398,1398,1398,1398, +1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398, +1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398,1398, +1398,1399,1399,1399,1399,1399,1399,196,196,196,1399,196,1399,1399,196,1399, +1399,1399,1400,1399,1401,1401,1402,1399,196,196,196,196,196,196,196,196, +1403,1403,1403,1403,1403,1403,1403,1403,1403,1403,196,196,196,196,196,196, +1404,1404,1404,1404,1404,1404,196,1404,1404,196,1404,1404,1404,1404,1404,1404, +1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404, /* block 198 */ -1392,1392,1392,1392,1392,1392,1392,1392,1392,1392,1393,1393,1393,1393,1393,196, -1394,1394,196,1393,1393,1394,1393,1395,1392,196,196,196,196,196,196,196, -1396,1396,1396,1396,1396,1396,1396,1396,1396,1396,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1405,1405,1405,1405,1405,196, +1406,1406,196,1405,1405,1406,1405,1407,1404,196,196,196,196,196,196,196, +1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,196,196,196,196,196,196, +1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409, +1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1409, +1409,1409,1409,1409,1409,1409,1409,1409,1409,1410,1409,1409,196,196,196,196, +1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 199 */ @@ -4641,16 +4669,16 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397,1397, -1397,1397,1397,1398,1398,1399,1399,1400,1400,196,196,196,196,196,196,196, +1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412,1412, +1412,1412,1412,1413,1413,1414,1414,1415,1415,196,196,196,196,196,196,196, /* block 200 */ -1401,1401,1402,1403,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404, -1404,196,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404, -1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404,1404, -1404,1404,1404,1404,1403,1403,1401,1401,1401,1401,1401,196,196,196,1403,1403, -1401,1405,1406,1407,1407,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408,1408, -1409,1409,1409,1409,1409,1409,1409,1409,1409,1409,1410,196,196,196,196,196, +1416,1416,1417,1418,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419, +1419,196,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419, +1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419, +1419,1419,1419,1419,1418,1418,1416,1416,1416,1416,1416,196,196,196,1418,1418, +1416,1420,1421,1422,1422,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423, +1424,1424,1424,1424,1424,1424,1424,1424,1424,1424,1425,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4658,25 +4686,25 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -914,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411,1411, -435,435,1411,435,1411,437,437,437,437,437,437,437,437,438,438,438, -438,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437, -437,437,196,196,196,196,196,196,196,196,196,196,196,196,196,1412, +918,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426,1426, +433,433,1426,433,1426,435,435,435,435,435,435,435,435,436,436,436, +436,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435, +435,435,196,196,196,196,196,196,196,196,196,196,196,196,196,1427, /* block 202 */ -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, /* block 203 */ -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,196,196,196,196,196,196, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4685,137 +4713,137 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 204 */ -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414, -1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,1414,196, -1415,1415,1415,1415,1415,196,196,196,196,196,196,196,196,196,196,196, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429, +1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,196, +1430,1430,1430,1430,1430,196,196,196,196,196,196,196,196,196,196,196, /* block 205 */ -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413,1413, -1413,1413,1413,1413,196,196,196,196,196,196,196,196,196,196,196,196, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, +1428,1428,1428,1428,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 206 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416,1416, -1416,1417,1417,196,196,196,196,196,196,196,196,196,196,196,196,196, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +1431,1432,1432,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 207 */ -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, /* block 208 */ -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419,1419, -1420,1418,1418,1418,1418,1418,1418,1421,1421,1421,1421,1421,1421,1421,1421,1421, -1421,1421,1421,1421,1421,1421,196,196,196,196,196,196,196,196,196,196, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434,1434, +1435,1433,1433,1433,1433,1433,1433,1436,1436,1436,1436,1436,1436,1436,1436,1436, +1436,1436,1436,1436,1436,1436,196,196,196,196,196,196,196,196,196,196, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, /* block 209 */ -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418, -1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,1418,196,196,196,196,196, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, +1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,196,196,196,196,196, /* block 210 */ -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, /* block 211 */ -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422,1422, -1422,1422,1422,1422,1422,1422,1422,196,196,196,196,196,196,196,196,196, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437,1437, +1437,1437,1437,1437,1437,1437,1437,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 212 */ -1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423, -1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1423,1424,1424, -1424,1424,1424,1424,1424,1424,1424,1424,1424,1424,1425,1425,1425,1424,1424,1426, -1427,1427,1427,1427,1427,1427,1427,1427,1427,1427,196,196,196,196,196,196, +1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438, +1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1438,1439,1439, +1439,1439,1439,1439,1439,1439,1439,1439,1439,1439,1440,1440,1440,1439,1439,1441, +1442,1442,1442,1442,1442,1442,1442,1442,1442,1442,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 213 */ -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, /* block 214 */ -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,930,930,930,930,930,930,930, -930,930,930,930,930,930,930,930,930,196,196,196,196,196,196,196, -1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428, -1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,1428,196, -1429,1429,1429,1429,1429,1429,1429,1429,1429,1429,196,196,196,196,1430,1430, -1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934, +934,934,934,934,934,934,934,934,934,196,196,196,196,196,196,196, +1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443, +1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,1443,196, +1444,1444,1444,1444,1444,1444,1444,1444,1444,1444,196,196,196,196,1445,1445, +1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446, /* block 215 */ -1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, -1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, -1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431, -1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,1431,196, -1432,1432,1432,1432,1432,1432,1432,1432,1432,1432,196,196,196,196,196,196, -1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433, -1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,1433,196,196, -1434,1434,1434,1434,1434,1435,196,196,196,196,196,196,196,196,196,196, +1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446, +1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446, +1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446, +1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,196, +1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,196,196,196,196,196,196, +1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448, +1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,1448,196,196, +1449,1449,1449,1449,1449,1450,196,196,196,196,196,196,196,196,196,196, /* block 216 */ -1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436, -1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436, -1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436, -1437,1437,1437,1437,1437,1437,1437,1438,1438,1439,1440,1440,1441,1441,1441,1441, -1442,1442,1443,1443,1438,1441,196,196,196,196,196,196,196,196,196,196, -1444,1444,1444,1444,1444,1444,1444,1444,1444,1444,196,1445,1445,1445,1445,1445, -1445,1445,196,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436, -1436,1436,1436,1436,1436,1436,1436,1436,196,196,196,196,196,1436,1436,1436, +1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451, +1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451, +1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451, +1452,1452,1452,1452,1452,1452,1452,1453,1453,1454,1455,1455,1456,1456,1456,1456, +1457,1457,1458,1458,1453,1456,196,196,196,196,196,196,196,196,196,196, +1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,196,1460,1460,1460,1460,1460, +1460,1460,196,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451, +1451,1451,1451,1451,1451,1451,1451,1451,196,196,196,196,196,1451,1451,1451, /* block 217 */ -1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436,1436, +1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451,1451, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4829,94 +4857,84 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1446,1446,1446,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447, -1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447,1447, -1447,1447,1447,1448,1447,1447,1447,1448,1448,1448,1448,1449,1449,1450,1451,1451, -1452,1452,1452,1452,1452,1452,1452,1452,1452,1452,196,196,196,196,196,196, +1461,1461,1461,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462, +1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462,1462, +1462,1462,1462,1463,1462,1462,1462,1463,1463,1463,1463,1464,1464,1465,1466,1466, +1467,1467,1467,1467,1467,1467,1467,1467,1467,1467,196,196,196,196,196,196, /* block 219 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453, -1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453,1453, -1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454, -1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454,1454, +1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468, +1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468,1468, +1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, +1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, /* block 220 */ -1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455,1455, -1455,1455,1455,1455,1455,1455,1455,1456,1457,1458,1458,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, +1470,1470,1470,1470,1470,1470,1470,1471,1472,1473,1473,196,196,196,196,196, +1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474,1474, +1474,1474,1474,1474,1474,1474,1474,1474,1474,196,196,1475,1475,1475,1475,1475, +1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475,1475, +1475,1475,1475,1475,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 221 */ -1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459, -1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459, -1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459, -1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459, -1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,1459,196,196,196,196,1460, -1459,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461, -1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461, -1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461,1461, +1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476, +1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476, +1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476, +1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476, +1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,1476,196,196,196,196,1477, +1476,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478, +1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478, +1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478,1478, /* block 222 */ -1461,1461,1461,1461,1461,1461,1461,1461,196,196,196,196,196,196,196,1462, -1462,1462,1462,1463,1463,1463,1463,1463,1463,1463,1463,1463,1463,1463,1463,1463, +1478,1478,1478,1478,1478,1478,1478,1478,196,196,196,196,196,196,196,1479, +1479,1479,1479,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480,1480, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1464,1465,1466,867,1467,196,196,196,196,196,196,196,196,196,196,196, -1468,1468,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +1481,1482,1483,871,1484,196,196,196,196,196,196,196,196,196,196,196, +1485,1485,1486,1486,873,873,873,196,196,196,196,196,196,196,196,196, /* block 223 */ -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, /* block 224 */ -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469,1469, -1469,1469,1469,1469,1469,1469,1469,1469,196,196,196,196,196,196,196,196, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, /* block 225 */ -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, - -/* block 226 */ -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470,1470, -1470,1470,1470,1470,1470,1470,196,196,196,196,196,196,196,196,196,196, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488,1488, +1488,1488,1488,1488,1488,1488,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,1470, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,1488, -/* block 227 */ -1469,1469,1469,1469,1469,1469,1469,1469,1469,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +/* block 226 */ +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4924,6 +4942,16 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +/* block 227 */ +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487,1487, +1487,1487,1487,196,196,196,196,196,196,196,196,196,196,196,196,196, + /* block 228 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -4932,72 +4960,72 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1471,1471,1471,1471,196,1471,1471,1471,1471,1471,1471,1471,196,1471,1471,196, +1489,1489,1489,1489,196,1489,1489,1489,1489,1489,1489,1489,196,1489,1489,196, /* block 229 */ -896,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, +900,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, /* block 230 */ -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, /* block 231 */ -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891, -896,896,896,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,891,196,196,196,196,196,196,196,196,196,196,196,196,196, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +895,895,895,895,895,895,895,895,895,895,895,895,895,895,895,895, +900,900,900,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,895,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -891,891,891,196,196,896,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,896,896,896,896,196,196,196,196,196,196,196,196, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, +895,895,895,196,196,900,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,900,900,900,900,196,196,196,196,196,196,196,196, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, /* block 232 */ -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, /* block 233 */ -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472, -1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,1472,196,196,196,196, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490, +1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,1490,196,196,196,196, /* block 234 */ -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,196,196,196,196,196, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,196,196,196, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,196,196,196, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,196, /* block 235 */ -1473,1473,1473,1473,1473,1473,1473,1473,1473,196,196,196,196,196,196,196, -1473,1473,1473,1473,1473,1473,1473,1473,1473,1473,196,196,1474,1475,1476,1477, -1478,1478,1478,1478,196,196,196,196,196,196,196,196,196,196,196,196, +1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,196,196,196,196,196, +1491,1491,1491,1491,1491,1491,1491,1491,1491,1491,196,196,1492,1493,1494,1495, +1496,1496,1496,1496,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5005,34 +5033,34 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 236 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, /* block 237 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -1479,1479,1479,1479,1479,1479,1479,1479,1479,1479,196,196,196,196,196,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +1497,1497,1497,1497,1497,1497,1497,1497,1497,1497,789,789,789,196,196,196, /* block 238 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,196,196,196,196,196,196,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +802,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 239 */ 176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, @@ -5040,66 +5068,66 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 176,176,176,176,176,176,176,176,176,176,176,176,176,176,196,196, 176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, 176,176,176,176,176,176,176,196,196,196,196,196,196,196,196,196, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, /* block 240 */ -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,196,196,196,196,196,196,196,196,196,196,196,196, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 241 */ -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, /* block 242 */ -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,196,196,196,196,196,196,196,196,196,196, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,196,196,196,196,196,196,196,196,196,196, /* block 243 */ -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,196,196,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,1480,1480,176,176,176,510,510,510,1481,1481,1481, -1481,1481,1481, 51, 51, 51, 51, 51, 51, 51, 51,176,176,176,176,176, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,196,196,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,1498,1498,176,176,176,508,508,508,1499,1499,1499, +1499,1499,1499, 51, 51, 51, 51, 51, 51, 51, 51,176,176,176,176,176, /* block 244 */ -176,176,176,510,510,176,176,176,176,176,176,176,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,176,176,176,176,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,781,781,196,196,196,196,196, +176,176,176,508,508,176,176,176,176,176,176,176,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,176,176,176,176,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,789,789,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 245 */ -1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077, -1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077, -1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077, -1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077,1077, -1077,1077,1482,1482,1482,1077,196,196,196,196,196,196,196,196,196,196, +1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084, +1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084, +1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084, +1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084,1084, +1084,1084,1500,1500,1500,1084,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5109,125 +5137,125 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, -907,907,907,907,196,196,196,196,196,196,196,196,196,196,196,196, -907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907, -907,907,907,907,196,196,196,196,196,196,196,196,196,196,196,196, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,196,196,196,196,196,196,196,196,196,196,196,196, +911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911, +911,911,911,911,196,196,196,196,196,196,196,196,196,196,196,196, /* block 247 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,196,196,196,196,196,196,196,196,196, -904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904, -904,904,907,907,907,907,907,907,907,196,196,196,196,196,196,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,196,196,196,196,196,196,196,196,196, +908,908,908,908,908,908,908,908,908,908,908,908,908,908,908,908, +908,908,911,911,911,911,911,911,911,196,196,196,196,196,196,196, /* block 248 */ -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783, -783,783,795,795,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,783,783, -783,783,783,783,783,196,795,795,783,783,783,783,783,783,783,783, -783,783,783,783,783,783,783,783,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791, +791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,791,791, +791,791,791,791,791,196,803,803,791,791,791,791,791,791,791,791, +791,791,791,791,791,791,791,791,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, /* block 249 */ -782,782,783,783,783,783,783,783,783,783,795,795,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,783,782,196,782,782, -196,196,782,196,196,782,782,196,196,782,782,782,782,196,782,782, -782,782,782,782,782,782,783,783,783,783,196,783,196,783,795,795, -783,783,783,783,196,783,783,783,783,783,783,783,783,783,783,783, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783, -783,783,795,795,783,783,783,783,783,783,783,783,783,783,783,783, +790,790,791,791,791,791,791,791,791,791,803,803,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,791,790,196,790,790, +196,196,790,196,196,790,790,196,196,790,790,790,790,196,790,790, +790,790,790,790,790,790,791,791,791,791,196,791,196,791,803,803, +791,791,791,791,196,791,791,791,791,791,791,791,791,791,791,791, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791, +791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791, /* block 250 */ -783,783,783,783,782,782,196,782,782,782,782,196,196,782,782,782, -782,782,782,782,782,196,782,782,782,782,782,782,782,196,783,783, -783,783,783,783,783,783,795,795,783,783,783,783,783,783,783,783, -783,783,783,783,783,783,783,783,782,782,196,782,782,782,782,196, -782,782,782,782,782,196,782,196,196,196,782,782,782,782,782,782, -782,196,783,783,783,783,783,783,783,783,795,795,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,783,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, +791,791,791,791,790,790,196,790,790,790,790,196,196,790,790,790, +790,790,790,790,790,196,790,790,790,790,790,790,790,196,791,791, +791,791,791,791,791,791,803,803,791,791,791,791,791,791,791,791, +791,791,791,791,791,791,791,791,790,790,196,790,790,790,790,196, +790,790,790,790,790,196,790,196,196,196,790,790,790,790,790,790, +790,196,791,791,791,791,791,791,791,791,803,803,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,791,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, /* block 251 */ -782,782,782,782,782,782,783,783,783,783,783,783,783,783,795,795, -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783, -783,783,795,795,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,783,783, -783,783,783,783,783,783,795,795,783,783,783,783,783,783,783,783, +790,790,790,790,790,790,791,791,791,791,791,791,791,791,803,803, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791, +791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,791,791, +791,791,791,791,791,791,803,803,791,791,791,791,791,791,791,791, /* block 252 */ -783,783,783,783,783,783,783,783,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,783,783,783,783,783,783,783,783,795,795,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,783,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,783,783,783,783,783,783,783,783,795,795, -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, +791,791,791,791,791,791,791,791,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,791,791,791,791,791,791,791,791,803,803,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,791,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,791,791,791,791,791,791,791,791,803,803, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, /* block 253 */ -782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783, -783,783,795,795,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,783,783,196,196,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,1483,783,783,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,1483,783,783,783,783, -783,783,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,1483,783,783,783,783, +790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791, +791,791,803,803,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,791,791,196,196,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,1501,791,791,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,1501,791,791,791,791, +791,791,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,1501,791,791,791,791, /* block 254 */ -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,783,1483,783,783,783,783,783,783,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,1483,783,783,783,783,783,783,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,1483, -783,783,783,783,783,783,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,1483, -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,791,1501,791,791,791,791,791,791,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,1501,791,791,791,791,791,791,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,1501, +791,791,791,791,791,791,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,1501, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, /* block 255 */ -783,783,783,783,783,783,783,783,783,1483,783,783,783,783,783,783, -782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782, -782,782,782,782,782,782,782,782,782,1483,783,783,783,783,783,783, -783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783, -783,783,783,1483,783,783,783,783,783,783,782,783,196,196,1484,1484, -1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484, -1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484, -1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484,1484, +791,791,791,791,791,791,791,791,791,1501,791,791,791,791,791,791, +790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790, +790,790,790,790,790,790,790,790,790,1501,791,791,791,791,791,791, +791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791, +791,791,791,1501,791,791,791,791,791,791,790,791,196,196,1502,1502, +1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502, +1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502, +1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,1502, /* block 256 */ -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, -1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, +1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, /* block 257 */ -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1485,1485,1485,1485,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, -1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1485,1485,1485, -1485,1485,1485,1485,1485,1486,1485,1485,1485,1485,1485,1485,1485,1485,1485,1485, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1503,1503,1503,1503,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, +1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1503,1503,1503, +1503,1503,1503,1503,1503,1504,1503,1503,1503,1503,1503,1503,1503,1503,1503,1503, /* block 258 */ -1485,1485,1485,1485,1486,1485,1485,1487,1488,1487,1487,1489,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,1486,1486,1486,1486,1486, -196,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486,1486, +1503,1503,1503,1503,1504,1503,1503,1505,1506,1505,1505,1507,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,1504,1504,1504,1504,1504, +196,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5236,7 +5264,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ /* block 259 */ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 93, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,694, 70, 70, 70, 70,196, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,702, 70, 70, 70, 70,196, 196,196,196,196,196, 70, 70, 70, 70, 70, 70,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5245,17 +5273,17 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 260 */ -1490,1490,1490,1490,1490,1490,1490,196,1490,1490,1490,1490,1490,1490,1490,1490, -1490,1490,1490,1490,1490,1490,1490,1490,1490,196,196,1490,1490,1490,1490,1490, -1490,1490,196,1490,1490,196,1490,1490,1490,1490,1490,196,196,196,196,196, -929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929, -929,929,929,929,929,929,929,929,929,929,929,929,1491,1491,929,929, -929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929, -929,929,929,929,929,929,929,929,1491,929,929,929,929,929,196,196, +1508,1508,1508,1508,1508,1508,1508,196,1508,1508,1508,1508,1508,1508,1508,1508, +1508,1508,1508,1508,1508,1508,1508,1508,1508,196,196,1508,1508,1508,1508,1508, +1508,1508,196,1508,1508,196,1508,1508,1508,1508,1508,196,196,196,196,196, +933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933, +933,933,933,933,933,933,933,933,933,933,933,933,1509,1509,933,933, +933,933,933,933,933,933,933,933,933,933,933,933,933,933,933,933, +933,933,933,933,933,933,933,933,1509,933,933,933,933,933,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 261 */ -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,849, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,853, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5265,24 +5293,24 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 262 */ -1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492, -1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492, -1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,1492,196,196,196, -1493,1493,1493,1493,1493,1493,1493,1494,1494,1494,1494,1494,1495,1495,196,196, -1496,1496,1496,1496,1496,1496,1496,1496,1496,1496,196,196,196,196,1492,1497, +1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510, +1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510, +1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,1510,196,196,196, +1511,1511,1511,1511,1511,1511,1511,1512,1512,1512,1512,1512,1513,1513,196,196, +1514,1514,1514,1514,1514,1514,1514,1514,1514,1514,196,196,196,196,1510,1515, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 263 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498, -1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1498,1499,196, +1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516, +1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1517,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500, -1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500, -1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1501,1501,1501,1501, -1502,1502,1502,1502,1502,1502,1502,1502,1502,1502,196,196,196,196,196,1503, +1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518, +1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518, +1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1518,1519,1519,1519,1519, +1520,1520,1520,1520,1520,1520,1520,1520,1520,1520,196,196,196,196,196,1521, /* block 264 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5290,9 +5318,9 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504, -1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1504,1505,1506,1506,1506,1506, -1507,1507,1507,1507,1507,1507,1507,1507,1507,1507,196,196,196,196,196,196, +1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522, +1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,1523,1524,1524,1524,1524, +1525,1525,1525,1525,1525,1525,1525,1525,1525,1525,196,196,196,196,196,196, /* block 265 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5300,51 +5328,61 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508, -1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1508,1509,1510, -1508,1511,1511,1511,1511,1511,1511,1511,1511,1511,1511,196,196,196,196,1512, +1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526, +1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1526,1527,1528, +1526,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,196,196,196,196,1530, /* block 266 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -533,533,533,533,533,533,533,196,533,533,533,533,196,533,533,196, -533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,196, +1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531, +1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,196, +1531,1531,1531,1532,1531,1531,1532,1531,1531,1531,1531,1531,1531,1531,1532,1532, +1531,1531,1531,1531,1531,1532,196,196,196,196,196,196,196,196,1531,1533, /* block 267 */ -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +531,531,531,531,531,531,531,196,531,531,531,531,196,531,531,196, +531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,196, /* block 268 */ -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513,1513, -1513,1513,1513,1513,1513,297,297,1514,1514,1514,1514,1514,1514,1514,1514,1514, -1515,1515,1515,1515,1515,1515,1515,297,297,297,297,297,297,297,297,297, -297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, /* block 269 */ -1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516, -1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516,1516, -1516,1516,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517, -1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517,1517, -1517,1517,1517,1517,1518,1518,1518,1519,1520,1520,1520,1521,297,297,297,297, -1522,1522,1522,1522,1522,1522,1522,1522,1522,1522,297,297,297,297,1523,1523, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +1534,1534,1534,1534,1534,297,297,1535,1535,1535,1535,1535,1535,1535,1535,1535, +1536,1536,1536,1536,1536,1536,1536,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, /* block 270 */ +1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537, +1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537,1537, +1537,1537,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538, +1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538, +1538,1538,1538,1538,1539,1539,1539,1540,1541,1541,1541,1542,297,297,297,297, +1543,1543,1543,1543,1543,1543,1543,1543,1543,1543,297,297,297,297,1544,1544, +297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, +297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, + +/* block 271 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, @@ -5354,7 +5392,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -/* block 271 */ +/* block 272 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, @@ -5362,351 +5400,331 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -340,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524, +338,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545, -/* block 272 */ -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524, -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524, -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1525,1524,1524,1524, -1526,1524,1524,1524,1524,340,340,340,340,340,340,340,340,340,340,340, +/* block 273 */ +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545, +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545, +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1546,1545,1545,1545, +1547,1545,1545,1545,1545,338,338,338,338,338,338,338,338,338,338,338, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -/* block 273 */ -340,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524, -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524, -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1525,1524, -1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,1524,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, +/* block 274 */ +338,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545, +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545, +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1546,1545, +1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,1545,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, 297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297, -/* block 274 */ -1527,1527,1527,1527,340,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527, -1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527, -340,1527,1527,340,1527,340,340,1527,340,1527,1527,1527,1527,1527,1527,1527, -1527,1527,1527,340,1527,1527,1527,1527,340,1527,340,1527,340,340,340,340, -340,340,1527,340,340,340,340,1527,340,1527,340,1527,340,1527,1527,1527, -340,1527,1527,340,1527,340,340,1527,340,1527,340,1527,340,1527,340,1527, -340,1527,1527,340,1527,340,340,1527,1527,1527,1527,340,1527,1527,1527,1527, -1527,1527,1527,340,1527,1527,1527,1527,340,1527,1527,1527,1527,340,1527,340, - /* block 275 */ -1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,340,1527,1527,1527,1527,1527, -1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,340,340,340,340, -340,1527,1527,1527,340,1527,1527,1527,1527,1527,340,1527,1527,1527,1527,1527, -1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,1527,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340, -309,309,340,340,340,340,340,340,340,340,340,340,340,340,340,340, +1548,1548,1548,1548,338,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548, +1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548, +338,1548,1548,338,1548,338,338,1548,338,1548,1548,1548,1548,1548,1548,1548, +1548,1548,1548,338,1548,1548,1548,1548,338,1548,338,1548,338,338,338,338, +338,338,1548,338,338,338,338,1548,338,1548,338,1548,338,1548,1548,1548, +338,1548,1548,338,1548,338,338,1548,338,1548,338,1548,338,1548,338,1548, +338,1548,1548,338,1548,338,338,1548,1548,1548,1548,338,1548,1548,1548,1548, +1548,1548,1548,338,1548,1548,1548,1548,338,1548,1548,1548,1548,338,1548,338, /* block 276 */ -1528,1528,1528,1528,1529,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1530,1530,1530,1530, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, +1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,338,1548,1548,1548,1548,1548, +1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,338,338,338,338, +338,1548,1548,1548,338,1548,1548,1548,1548,1548,338,1548,1548,1548,1548,1548, +1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,1548,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338, +307,307,338,338,338,338,338,338,338,338,338,338,338,338,338,338, /* block 277 */ -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1530, -1530,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1530,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1529, -1530,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, +789,789,789,789,1549,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, /* block 278 */ -814,814,814,814,814,814,814,814,814,814,814, 58, 58,1528,1528,1528, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,1528, -1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531, -1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,510,510,510,510,510,510, -1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531, -1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,781,781,1528,1528,1528,1528, -1532,1532,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,1532,1532, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,1550, +1550,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +1550,789,789,789,789,789,789,789,789,789,789,789,789,789,789,1549, +1550,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, /* block 279 */ -1531,1531,1531,1531,1531,1531,1531,1531,1531,1531,510,510,510,510,1533,510, -510,1533,1533,1533,1533,1533,1533,1533,1533,1533,1533,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,1528,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, -1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534,1534, +821,821,821,821,821,821,821,821,821,821,821, 58, 58,789,789,789, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,789, +1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551, +1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,508,508,508,508,508,508, +1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551, +1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,789,789,789,789,789,789, +1552,1552,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,1552,1552, /* block 280 */ -1535,1533,1536,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -510,510,510,510,510,510,510,510,510,510,1533,510,510,510,510,510, -510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,1533, -510,510,1533,1533,1533,1533,1533,1536,1533,1533,1533,510,1530,1530,1530,1530, -510,510,510,510,510,510,510,510,510,1530,1530,1530,1530,1530,1530,1530, -1537,1537,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1528,1528,1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, +1551,1551,1551,1551,1551,1551,1551,1551,1551,1551,508,508,508,508,1553,508, +508,1553,1553,1553,1553,1553,1553,1553,1553,1553,1553,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,789,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554, +1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554,1554, /* block 281 */ -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, +1555,1553,1556,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +508,508,508,508,508,508,508,508,508,508,1553,508,508,508,508,508, +508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,1553, +508,508,1553,1553,1553,1553,1553,1556,1553,1553,1553,508,1550,1550,1550,1550, +508,508,508,508,508,508,508,508,508,1550,1550,1550,1550,1550,1550,1550, +1557,1557,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, /* block 282 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,785,1528,1528,785,785,785,785,785,785,785,785,785,1529,1529,1529, -1529,1529,1529,1529,1529,1529,785,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,785,1529,1529, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, /* block 283 */ -1529,1529,1529,1529,1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1528,1528,785,785,1528,785,785,785,1528,1528,785,785, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1538,1538,1538,1529,1529,1538,1529,1529,1538,1539,1539,785,785,1529, -1529,1529,1529,1529,785,785,785,785,785,785,785,785,785,785,785,785, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1528,1528,785,1529,785,1528,785,1529,1529,1529,1540,1540,1540,1540,1540, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,793,789,789,793,793,793,793,793,793,793,793,793,1549,1549,1549, +1549,1549,1549,1549,1549,1549,793,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,793,1549,1549, /* block 284 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,785, -1529,785,1538,1538,1529,1529,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538, -1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538, -1538,1538,1538,1538,1538,1538,1538,1538,1538,1529,1529,1529,1538,1529,1529,1529, +1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,789,789,793,793,789,793,793,793,789,789,793,793, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1558,1558,1558,1549,1549,1558,1549,1549,1558,1559,1559,793,793,1549, +1549,1549,1549,1549,793,793,793,793,793,793,793,793,793,793,793,793, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,789,789,793,1549,793,789,793,1549,1549,1549,1560,1560,1560,1560,1560, /* block 285 */ -1529,1538,1538,1538,1529,1538,1538,1538,1529,1529,1529,1529,1529,1529,1529,1538, -1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1538,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,785,1528,1529, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,793, +1549,793,1558,1558,1549,1549,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558, +1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558, +1558,1558,1558,1558,1558,1558,1558,1558,1558,1549,1549,1549,1558,1549,1549,1549, /* block 286 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,781,781, -781,781,781,781,781,781,1528,1528,1528,785,785,1529,1529,1529,1529,1528, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1528,1528,1528,1528,1528,1528,1528,785, -785,1528,1528,785,1539,1539,785,785,785,785,1538,1528,1528,1528,1528,1528, +1549,1558,1558,1558,1549,1558,1558,1558,1549,1549,1549,1549,1549,1549,1549,1558, +1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,793,789,1549, /* block 287 */ -1528,1528,1528,1528,1528,1528,1528,785,1528,1528,785,785,785,785,1528,1528, -1539,1528,1528,1528,1528,1538,1538,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1529,785,1528,1528,785,1528,1528,1528,1528,1528,1528,1528, -1528,785,785,1528,1528,1528,1528,1528,1528,1528,1528,1528,785,1528,1528,1528, -1528,1528,785,785,785,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,785,785,785,1528,1528,1528,1528,1528,1528,1528,1528,785,785,785,1528, -1528,785,1528,785,1528,1528,1528,1528,785,1528,1528,1528,1528,1528,1528,785, -1528,1528,1528,785,1528,1528,1528,1528,1528,1528,785,1529,1529,1529,1529,1529, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,789,789, +789,789,789,789,789,789,789,789,789,793,793,1549,1549,1549,1549,789, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,789,789,789,789,789,789,789,793, +793,789,789,793,1559,1559,793,793,793,793,1558,789,789,789,789,789, /* block 288 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1538,1538,1538,1529,1529,1529,1538,1538,1538,1538,1538, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, +789,789,789,789,789,789,789,793,789,789,793,793,793,793,789,789, +1559,789,789,789,789,1558,1558,789,789,789,789,789,789,789,789,789, +789,789,789,789,1549,793,789,789,793,789,789,789,789,789,789,789, +789,793,793,789,789,789,789,789,789,789,789,789,793,789,789,789, +789,789,793,793,793,789,789,789,789,789,789,789,789,789,789,789, +789,793,793,793,789,789,789,789,789,789,789,789,793,793,793,789, +789,793,789,793,789,789,789,789,793,789,789,789,789,789,789,793, +789,789,789,793,789,789,789,789,789,789,793,1549,1549,1549,1549,1549, /* block 289 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1538,1538,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1538,1529,1529,1529,1529,1529,1528,1528,1528,1528,1528,785,1538,785,785,785, -1529,1529,1529,1528,1528,1529,1529,1529,1530,1530,1530,1530,1529,1529,1529,1529, -785,785,785,785,785,785,1528,1528,1528,785,1528,1529,1529,1530,1530,1530, -785,1528,1528,785,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1558,1558,1558,1549,1549,1549,1558,1558,1558,1558,1558, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, /* block 290 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,1528,1528,1528,1530,1530,1530,1530,1528,1528,1528,1528,1528, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1558,1558,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1558,1549,1549,1549,1549,1549,789,789,789,789,789,793,1558,793,793,793, +1549,1549,1549,789,789,1549,1549,1549,1549,1550,1550,1550,1549,1549,1549,1549, +793,793,793,793,793,793,789,789,789,793,789,1549,1549,1550,1550,1550, +793,789,789,793,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550, /* block 291 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,1528,1528,1528,1528,1528,1530,1530,1530,1530,1530,1530, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530,1530, -1529,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,1550, +1549,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, /* block 292 */ -781,781,781,781,781,781,781,781,781,781,781,781,1530,1530,1530,1530, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,1530,1530,1530,1530,1530,1530,1530,1530, -781,781,781,781,781,781,781,781,781,781,1530,1530,1530,1530,1530,1530, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, +789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, /* block 293 */ -781,781,781,781,781,781,781,781,1530,1530,1530,1530,1530,1530,1530,1530, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,1530,1530, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1530,1530,1530,1530, -1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, +789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,1550,1550,1550,1550, +789,789,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +802,802,802,802,802,802,802,802,802,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, /* block 294 */ -781,781,781,781,781,781,781,781,781,781,781,781,1538,1529,1529,1538, -1529,1529,1529,1529,1529,1529,1529,1529,1538,1538,1538,1538,1538,1538,1538,1538, -1529,1529,1529,1529,1529,1529,1538,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1529,781,1538,1538,1538,1529, -1529,1529,1529,1529,1529,1529,781,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1538,1529,1529,1529,1529,1529,1529,1529,1529, +789,789,789,789,789,789,789,789,789,789,789,789,1558,1549,1549,1558, +1549,1549,1549,1549,1549,1549,1549,1549,1558,1558,1558,1558,1558,1558,1558,1558, +1549,1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1549,789,1558,1558,1558,1549, +1549,1549,1549,1549,1549,1549,789,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1558,1549,1549,1549,1549,1549,1549,1549,1549, /* block 295 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1541,1541,1541,1541,1529,1538,1538,1529,1538,1538,1529,1538,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1538,1538,1538, -1529,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1538,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1561,1561,1561,1561,1549,1558,1558,1549,1558,1558,1549,1558,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1558,1558,1558, +1549,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1558,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, /* block 296 */ -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528, -1528,1528,1528,1528,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1528,1530,1530, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,1550,1550,1550,1550,1550,1550,1550,1550, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,1550,1550, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550, /* block 297 */ -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530,1530,1530,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529, -1529,1529,1529,1538,1538,1538,1529,1530,1530,1530,1530,1530,1530,1530,1529,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1529, -1529,1529,1529,1529,1529,1529,1529,1529,1529,1529,1530,1530,1530,1530,1530,1530, -1538,1538,1538,1538,1538,1538,1538,1538,1538,1530,1530,1530,1530,1530,1530,1530, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549, +1549,1549,1549,1558,1558,1558,1549,1550,1549,1550,1550,1550,1550,1549,1549,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1549, +1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1549,1550,1550,1550,1550,1549, +1558,1558,1558,1558,1558,1558,1558,1558,1558,1550,1550,1550,1550,1550,1550,1550, /* block 298 */ -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,196,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781, -1479,1479,1479,1479,1479,1479,1479,1479,1479,1479,196,196,196,196,196,196, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,196,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789, +1497,1497,1497,1497,1497,1497,1497,1497,1497,1497,789,196,196,196,196,196, /* block 299 */ -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530, -1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1530,1032,1032, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550, +1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1550,1039,1039, /* block 300 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, /* block 301 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,196,196,196,196,196,196, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,196,196, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, /* block 302 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,196,196, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,196,196, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, /* block 303 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, /* block 304 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, - -/* block 305 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,196,196, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -/* block 306 */ -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025, -1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,1025,196,196, +/* block 305 */ +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032, +1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,1032,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5714,7 +5732,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -/* block 307 */ +/* block 306 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, @@ -5722,77 +5740,77 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 80640 bytes, block = 128 */ 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,1032,1032, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,1039,1039, + +/* block 307 */ +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,196,196,196,196,196, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, /* block 308 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,196,196,196,196,196, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,914,914,914,914,914,914, +914,914,914,914,914,914,914,914,914,914,196,196,196,196,196,196, /* block 309 */ -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -910,910,910,910,910,910,910,910,910,910,910,910,910,910,910,910, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, -196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +771,776,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, +1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562,1562, /* block 310 */ -765,770,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, -1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542,1542, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, /* block 311 */ -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, /* block 312 */ -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042,1042, +771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771, /* block 313 */ -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035,1035, -765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765, - -/* block 314 */ -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024, -1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1024,1032,1032, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031, +1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1031,1039,1039, }; #if UCD_BLOCK_SIZE != 128 diff --git a/vendor/core/vendor/pcre2/src/pcre2_ucp.h b/vendor/core/vendor/pcre2/src/pcre2_ucp.h index 513c54e29..74c1cc539 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_ucp.h +++ b/vendor/core/vendor/pcre2/src/pcre2_ucp.h @@ -42,6 +42,7 @@ POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ + #ifndef PCRE2_UCP_H_IDEMPOTENT_GUARD #define PCRE2_UCP_H_IDEMPOTENT_GUARD @@ -301,6 +302,7 @@ enum { ucp_Multani, ucp_Old_Hungarian, ucp_Adlam, + ucp_Newa, ucp_Osage, ucp_Tangut, ucp_Masaram_Gondi, @@ -376,7 +378,6 @@ enum { ucp_SignWriting, ucp_Bhaiksuki, ucp_Marchen, - ucp_Newa, ucp_Nushu, ucp_Soyombo, ucp_Zanabazar_Square, @@ -394,6 +395,10 @@ enum { ucp_Kawi, ucp_Nag_Mundari, ucp_Kirat_Rai, + ucp_Sidetic, + ucp_Tai_Yo, + ucp_Tolong_Siki, + ucp_Beria_Erfe, /* This must be last */ ucp_Script_Count diff --git a/vendor/core/vendor/pcre2/src/pcre2_ucptables_inc.h b/vendor/core/vendor/pcre2/src/pcre2_ucptables_inc.h index 6f1731d32..06a5c0e56 100644 --- a/vendor/core/vendor/pcre2/src/pcre2_ucptables_inc.h +++ b/vendor/core/vendor/pcre2/src/pcre2_ucptables_inc.h @@ -42,6 +42,7 @@ POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ + #ifdef SUPPORT_UNICODE /* The PRIV(utt)[] table below translates Unicode property names into type and @@ -81,6 +82,8 @@ the "loose matching" rules that Unicode advises and Perl uses. */ #define STRING_batk0 STR_b STR_a STR_t STR_k "\0" #define STRING_beng0 STR_b STR_e STR_n STR_g "\0" #define STRING_bengali0 STR_b STR_e STR_n STR_g STR_a STR_l STR_i "\0" +#define STRING_berf0 STR_b STR_e STR_r STR_f "\0" +#define STRING_beriaerfe0 STR_b STR_e STR_r STR_i STR_a STR_e STR_r STR_f STR_e "\0" #define STRING_bhaiksuki0 STR_b STR_h STR_a STR_i STR_k STR_s STR_u STR_k STR_i "\0" #define STRING_bhks0 STR_b STR_h STR_k STR_s "\0" #define STRING_bidial0 STR_b STR_i STR_d STR_i STR_a STR_l "\0" @@ -459,6 +462,8 @@ the "loose matching" rules that Unicode advises and Perl uses. */ #define STRING_shrd0 STR_s STR_h STR_r STR_d "\0" #define STRING_sidd0 STR_s STR_i STR_d STR_d "\0" #define STRING_siddham0 STR_s STR_i STR_d STR_d STR_h STR_a STR_m "\0" +#define STRING_sidetic0 STR_s STR_i STR_d STR_e STR_t STR_i STR_c "\0" +#define STRING_sidt0 STR_s STR_i STR_d STR_t "\0" #define STRING_signwriting0 STR_s STR_i STR_g STR_n STR_w STR_r STR_i STR_t STR_i STR_n STR_g "\0" #define STRING_sind0 STR_s STR_i STR_n STR_d "\0" #define STRING_sinh0 STR_s STR_i STR_n STR_h "\0" @@ -490,6 +495,7 @@ the "loose matching" rules that Unicode advises and Perl uses. */ #define STRING_taile0 STR_t STR_a STR_i STR_l STR_e "\0" #define STRING_taitham0 STR_t STR_a STR_i STR_t STR_h STR_a STR_m "\0" #define STRING_taiviet0 STR_t STR_a STR_i STR_v STR_i STR_e STR_t "\0" +#define STRING_taiyo0 STR_t STR_a STR_i STR_y STR_o "\0" #define STRING_takr0 STR_t STR_a STR_k STR_r "\0" #define STRING_takri0 STR_t STR_a STR_k STR_r STR_i "\0" #define STRING_tale0 STR_t STR_a STR_l STR_e "\0" @@ -500,6 +506,7 @@ the "loose matching" rules that Unicode advises and Perl uses. */ #define STRING_tangsa0 STR_t STR_a STR_n STR_g STR_s STR_a "\0" #define STRING_tangut0 STR_t STR_a STR_n STR_g STR_u STR_t "\0" #define STRING_tavt0 STR_t STR_a STR_v STR_t "\0" +#define STRING_tayo0 STR_t STR_a STR_y STR_o "\0" #define STRING_telu0 STR_t STR_e STR_l STR_u "\0" #define STRING_telugu0 STR_t STR_e STR_l STR_u STR_g STR_u "\0" #define STRING_term0 STR_t STR_e STR_r STR_m "\0" @@ -517,6 +524,8 @@ the "loose matching" rules that Unicode advises and Perl uses. */ #define STRING_tnsa0 STR_t STR_n STR_s STR_a "\0" #define STRING_todhri0 STR_t STR_o STR_d STR_h STR_r STR_i "\0" #define STRING_todr0 STR_t STR_o STR_d STR_r "\0" +#define STRING_tolongsiki0 STR_t STR_o STR_l STR_o STR_n STR_g STR_s STR_i STR_k STR_i "\0" +#define STRING_tols0 STR_t STR_o STR_l STR_s "\0" #define STRING_toto0 STR_t STR_o STR_t STR_o "\0" #define STRING_tulutigalari0 STR_t STR_u STR_l STR_u STR_t STR_i STR_g STR_a STR_l STR_a STR_r STR_i "\0" #define STRING_tutg0 STR_t STR_u STR_t STR_g "\0" @@ -593,6 +602,8 @@ const char PRIV(utt_names)[] = STRING_batk0 STRING_beng0 STRING_bengali0 + STRING_berf0 + STRING_beriaerfe0 STRING_bhaiksuki0 STRING_bhks0 STRING_bidial0 @@ -971,6 +982,8 @@ const char PRIV(utt_names)[] = STRING_shrd0 STRING_sidd0 STRING_siddham0 + STRING_sidetic0 + STRING_sidt0 STRING_signwriting0 STRING_sind0 STRING_sinh0 @@ -1002,6 +1015,7 @@ const char PRIV(utt_names)[] = STRING_taile0 STRING_taitham0 STRING_taiviet0 + STRING_taiyo0 STRING_takr0 STRING_takri0 STRING_tale0 @@ -1012,6 +1026,7 @@ const char PRIV(utt_names)[] = STRING_tangsa0 STRING_tangut0 STRING_tavt0 + STRING_tayo0 STRING_telu0 STRING_telugu0 STRING_term0 @@ -1029,6 +1044,8 @@ const char PRIV(utt_names)[] = STRING_tnsa0 STRING_todhri0 STRING_todr0 + STRING_tolongsiki0 + STRING_tols0 STRING_toto0 STRING_tulutigalari0 STRING_tutg0 @@ -1105,488 +1122,496 @@ const ucp_type_table PRIV(utt)[] = { { 177, PT_SC, ucp_Batak }, { 182, PT_SCX, ucp_Bengali }, { 187, PT_SCX, ucp_Bengali }, - { 195, PT_SC, ucp_Bhaiksuki }, - { 205, PT_SC, ucp_Bhaiksuki }, - { 210, PT_BIDICL, ucp_bidiAL }, - { 217, PT_BIDICL, ucp_bidiAN }, - { 224, PT_BIDICL, ucp_bidiB }, - { 230, PT_BIDICL, ucp_bidiBN }, - { 237, PT_BOOL, ucp_Bidi_Control }, - { 243, PT_BOOL, ucp_Bidi_Control }, - { 255, PT_BIDICL, ucp_bidiCS }, - { 262, PT_BIDICL, ucp_bidiEN }, - { 269, PT_BIDICL, ucp_bidiES }, - { 276, PT_BIDICL, ucp_bidiET }, - { 283, PT_BIDICL, ucp_bidiFSI }, - { 291, PT_BIDICL, ucp_bidiL }, - { 297, PT_BIDICL, ucp_bidiLRE }, - { 305, PT_BIDICL, ucp_bidiLRI }, - { 313, PT_BIDICL, ucp_bidiLRO }, - { 321, PT_BOOL, ucp_Bidi_Mirrored }, - { 327, PT_BOOL, ucp_Bidi_Mirrored }, - { 340, PT_BIDICL, ucp_bidiNSM }, - { 348, PT_BIDICL, ucp_bidiON }, - { 355, PT_BIDICL, ucp_bidiPDF }, - { 363, PT_BIDICL, ucp_bidiPDI }, - { 371, PT_BIDICL, ucp_bidiR }, - { 377, PT_BIDICL, ucp_bidiRLE }, - { 385, PT_BIDICL, ucp_bidiRLI }, - { 393, PT_BIDICL, ucp_bidiRLO }, - { 401, PT_BIDICL, ucp_bidiS }, - { 407, PT_BIDICL, ucp_bidiWS }, - { 414, PT_SCX, ucp_Bopomofo }, - { 419, PT_SCX, ucp_Bopomofo }, - { 428, PT_SC, ucp_Brahmi }, - { 433, PT_SC, ucp_Brahmi }, - { 440, PT_SC, ucp_Braille }, - { 445, PT_SC, ucp_Braille }, - { 453, PT_SCX, ucp_Buginese }, - { 458, PT_SCX, ucp_Buginese }, - { 467, PT_SCX, ucp_Buhid }, - { 472, PT_SCX, ucp_Buhid }, - { 478, PT_GC, ucp_C }, - { 480, PT_SCX, ucp_Chakma }, - { 485, PT_SC, ucp_Canadian_Aboriginal }, - { 504, PT_SC, ucp_Canadian_Aboriginal }, - { 509, PT_SCX, ucp_Carian }, - { 514, PT_SCX, ucp_Carian }, - { 521, PT_BOOL, ucp_Cased }, - { 527, PT_BOOL, ucp_Case_Ignorable }, - { 541, PT_SCX, ucp_Caucasian_Albanian }, - { 559, PT_PC, ucp_Cc }, - { 562, PT_PC, ucp_Cf }, - { 565, PT_SCX, ucp_Chakma }, - { 572, PT_SC, ucp_Cham }, - { 577, PT_BOOL, ucp_Changes_When_Casefolded }, - { 599, PT_BOOL, ucp_Changes_When_Casemapped }, - { 621, PT_BOOL, ucp_Changes_When_Lowercased }, - { 643, PT_BOOL, ucp_Changes_When_Titlecased }, - { 665, PT_BOOL, ucp_Changes_When_Uppercased }, - { 687, PT_SCX, ucp_Cherokee }, - { 692, PT_SCX, ucp_Cherokee }, - { 701, PT_SC, ucp_Chorasmian }, - { 712, PT_SC, ucp_Chorasmian }, - { 717, PT_BOOL, ucp_Case_Ignorable }, - { 720, PT_PC, ucp_Cn }, - { 723, PT_PC, ucp_Co }, - { 726, PT_SC, ucp_Common }, - { 733, PT_SCX, ucp_Coptic }, - { 738, PT_SCX, ucp_Coptic }, - { 745, PT_SCX, ucp_Cypro_Minoan }, - { 750, PT_SCX, ucp_Cypriot }, - { 755, PT_PC, ucp_Cs }, - { 758, PT_SC, ucp_Cuneiform }, - { 768, PT_BOOL, ucp_Changes_When_Casefolded }, - { 773, PT_BOOL, ucp_Changes_When_Casemapped }, - { 778, PT_BOOL, ucp_Changes_When_Lowercased }, - { 782, PT_BOOL, ucp_Changes_When_Titlecased }, - { 786, PT_BOOL, ucp_Changes_When_Uppercased }, - { 790, PT_SCX, ucp_Cypriot }, - { 798, PT_SCX, ucp_Cypro_Minoan }, - { 810, PT_SCX, ucp_Cyrillic }, - { 819, PT_SCX, ucp_Cyrillic }, - { 824, PT_BOOL, ucp_Dash }, - { 829, PT_BOOL, ucp_Default_Ignorable_Code_Point }, - { 855, PT_BOOL, ucp_Deprecated }, - { 859, PT_BOOL, ucp_Deprecated }, - { 870, PT_SC, ucp_Deseret }, - { 878, PT_SCX, ucp_Devanagari }, - { 883, PT_SCX, ucp_Devanagari }, - { 894, PT_BOOL, ucp_Default_Ignorable_Code_Point }, - { 897, PT_BOOL, ucp_Diacritic }, - { 901, PT_BOOL, ucp_Diacritic }, - { 911, PT_SC, ucp_Dives_Akuru }, - { 916, PT_SC, ucp_Dives_Akuru }, - { 927, PT_SCX, ucp_Dogra }, - { 932, PT_SCX, ucp_Dogra }, - { 938, PT_SC, ucp_Deseret }, - { 943, PT_SCX, ucp_Duployan }, - { 948, PT_SCX, ucp_Duployan }, - { 957, PT_BOOL, ucp_Emoji_Modifier_Base }, - { 963, PT_BOOL, ucp_Emoji_Component }, - { 969, PT_SC, ucp_Egyptian_Hieroglyphs }, - { 974, PT_SC, ucp_Egyptian_Hieroglyphs }, - { 994, PT_SCX, ucp_Elbasan }, - { 999, PT_SCX, ucp_Elbasan }, - { 1007, PT_SC, ucp_Elymaic }, - { 1012, PT_SC, ucp_Elymaic }, - { 1020, PT_BOOL, ucp_Emoji_Modifier }, - { 1025, PT_BOOL, ucp_Emoji }, - { 1031, PT_BOOL, ucp_Emoji_Component }, - { 1046, PT_BOOL, ucp_Emoji_Modifier }, - { 1060, PT_BOOL, ucp_Emoji_Modifier_Base }, - { 1078, PT_BOOL, ucp_Emoji_Presentation }, - { 1096, PT_BOOL, ucp_Emoji_Presentation }, - { 1102, PT_SCX, ucp_Ethiopic }, - { 1107, PT_SCX, ucp_Ethiopic }, - { 1116, PT_BOOL, ucp_Extender }, - { 1120, PT_BOOL, ucp_Extended_Pictographic }, - { 1141, PT_BOOL, ucp_Extender }, - { 1150, PT_BOOL, ucp_Extended_Pictographic }, - { 1158, PT_SCX, ucp_Garay }, - { 1163, PT_SCX, ucp_Garay }, - { 1169, PT_SCX, ucp_Georgian }, - { 1174, PT_SCX, ucp_Georgian }, - { 1183, PT_SCX, ucp_Glagolitic }, - { 1188, PT_SCX, ucp_Glagolitic }, - { 1199, PT_SCX, ucp_Gunjala_Gondi }, - { 1204, PT_SCX, ucp_Masaram_Gondi }, - { 1209, PT_SCX, ucp_Gothic }, - { 1214, PT_SCX, ucp_Gothic }, - { 1221, PT_SCX, ucp_Grantha }, - { 1226, PT_SCX, ucp_Grantha }, - { 1234, PT_BOOL, ucp_Grapheme_Base }, - { 1247, PT_BOOL, ucp_Grapheme_Extend }, - { 1262, PT_BOOL, ucp_Grapheme_Link }, - { 1275, PT_BOOL, ucp_Grapheme_Base }, - { 1282, PT_SCX, ucp_Greek }, - { 1288, PT_SCX, ucp_Greek }, - { 1293, PT_BOOL, ucp_Grapheme_Extend }, - { 1299, PT_BOOL, ucp_Grapheme_Link }, - { 1306, PT_SCX, ucp_Gujarati }, - { 1315, PT_SCX, ucp_Gujarati }, - { 1320, PT_SCX, ucp_Gurung_Khema }, - { 1325, PT_SCX, ucp_Gunjala_Gondi }, - { 1338, PT_SCX, ucp_Gurmukhi }, - { 1347, PT_SCX, ucp_Gurmukhi }, - { 1352, PT_SCX, ucp_Gurung_Khema }, - { 1364, PT_SCX, ucp_Han }, - { 1368, PT_SCX, ucp_Hangul }, - { 1373, PT_SCX, ucp_Hangul }, - { 1380, PT_SCX, ucp_Han }, - { 1385, PT_SCX, ucp_Hanifi_Rohingya }, - { 1400, PT_SCX, ucp_Hanunoo }, - { 1405, PT_SCX, ucp_Hanunoo }, - { 1413, PT_SC, ucp_Hatran }, - { 1418, PT_SC, ucp_Hatran }, - { 1425, PT_SCX, ucp_Hebrew }, - { 1430, PT_SCX, ucp_Hebrew }, - { 1437, PT_BOOL, ucp_Hex_Digit }, - { 1441, PT_BOOL, ucp_Hex_Digit }, - { 1450, PT_SCX, ucp_Hiragana }, - { 1455, PT_SCX, ucp_Hiragana }, - { 1464, PT_SC, ucp_Anatolian_Hieroglyphs }, - { 1469, PT_SC, ucp_Pahawh_Hmong }, - { 1474, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, - { 1479, PT_SCX, ucp_Old_Hungarian }, - { 1484, PT_BOOL, ucp_ID_Continue }, - { 1488, PT_BOOL, ucp_ID_Compat_Math_Continue }, - { 1509, PT_BOOL, ucp_ID_Compat_Math_Start }, - { 1527, PT_BOOL, ucp_ID_Continue }, - { 1538, PT_BOOL, ucp_Ideographic }, - { 1543, PT_BOOL, ucp_Ideographic }, - { 1555, PT_BOOL, ucp_ID_Start }, - { 1559, PT_BOOL, ucp_IDS_Binary_Operator }, - { 1564, PT_BOOL, ucp_IDS_Binary_Operator }, - { 1582, PT_BOOL, ucp_IDS_Trinary_Operator }, - { 1587, PT_BOOL, ucp_ID_Start }, - { 1595, PT_BOOL, ucp_IDS_Trinary_Operator }, - { 1614, PT_BOOL, ucp_IDS_Unary_Operator }, - { 1619, PT_BOOL, ucp_IDS_Unary_Operator }, - { 1636, PT_SC, ucp_Imperial_Aramaic }, - { 1652, PT_BOOL, ucp_InCB }, - { 1657, PT_SC, ucp_Inherited }, - { 1667, PT_SC, ucp_Inscriptional_Pahlavi }, - { 1688, PT_SC, ucp_Inscriptional_Parthian }, - { 1710, PT_SC, ucp_Old_Italic }, - { 1715, PT_SCX, ucp_Javanese }, - { 1720, PT_SCX, ucp_Javanese }, - { 1729, PT_BOOL, ucp_Join_Control }, - { 1735, PT_BOOL, ucp_Join_Control }, - { 1747, PT_SCX, ucp_Kaithi }, - { 1754, PT_SCX, ucp_Kayah_Li }, - { 1759, PT_SCX, ucp_Katakana }, - { 1764, PT_SCX, ucp_Kannada }, - { 1772, PT_SCX, ucp_Katakana }, - { 1781, PT_SC, ucp_Kawi }, - { 1786, PT_SCX, ucp_Kayah_Li }, - { 1794, PT_SC, ucp_Kharoshthi }, - { 1799, PT_SC, ucp_Kharoshthi }, - { 1810, PT_SC, ucp_Khitan_Small_Script }, - { 1828, PT_SC, ucp_Khmer }, - { 1834, PT_SC, ucp_Khmer }, - { 1839, PT_SCX, ucp_Khojki }, - { 1844, PT_SCX, ucp_Khojki }, - { 1851, PT_SCX, ucp_Khudawadi }, - { 1861, PT_SC, ucp_Kirat_Rai }, - { 1870, PT_SC, ucp_Khitan_Small_Script }, - { 1875, PT_SCX, ucp_Kannada }, - { 1880, PT_SC, ucp_Kirat_Rai }, - { 1885, PT_SCX, ucp_Kaithi }, - { 1890, PT_GC, ucp_L }, - { 1892, PT_LAMP, 0 }, - { 1895, PT_SC, ucp_Tai_Tham }, - { 1900, PT_SC, ucp_Lao }, - { 1904, PT_SC, ucp_Lao }, - { 1909, PT_SCX, ucp_Latin }, - { 1915, PT_SCX, ucp_Latin }, - { 1920, PT_LAMP, 0 }, - { 1923, PT_SC, ucp_Lepcha }, - { 1928, PT_SC, ucp_Lepcha }, - { 1935, PT_SCX, ucp_Limbu }, - { 1940, PT_SCX, ucp_Limbu }, - { 1946, PT_SCX, ucp_Linear_A }, - { 1951, PT_SCX, ucp_Linear_B }, - { 1956, PT_SCX, ucp_Linear_A }, - { 1964, PT_SCX, ucp_Linear_B }, - { 1972, PT_SCX, ucp_Lisu }, - { 1977, PT_PC, ucp_Ll }, - { 1980, PT_PC, ucp_Lm }, - { 1983, PT_PC, ucp_Lo }, - { 1986, PT_BOOL, ucp_Logical_Order_Exception }, - { 1990, PT_BOOL, ucp_Logical_Order_Exception }, - { 2012, PT_BOOL, ucp_Lowercase }, - { 2018, PT_BOOL, ucp_Lowercase }, - { 2028, PT_PC, ucp_Lt }, - { 2031, PT_PC, ucp_Lu }, - { 2034, PT_SCX, ucp_Lycian }, - { 2039, PT_SCX, ucp_Lycian }, - { 2046, PT_SCX, ucp_Lydian }, - { 2051, PT_SCX, ucp_Lydian }, - { 2058, PT_GC, ucp_M }, - { 2060, PT_SCX, ucp_Mahajani }, - { 2069, PT_SCX, ucp_Mahajani }, - { 2074, PT_SC, ucp_Makasar }, - { 2079, PT_SC, ucp_Makasar }, - { 2087, PT_SCX, ucp_Malayalam }, - { 2097, PT_SCX, ucp_Mandaic }, - { 2102, PT_SCX, ucp_Mandaic }, - { 2110, PT_SCX, ucp_Manichaean }, - { 2115, PT_SCX, ucp_Manichaean }, - { 2126, PT_SC, ucp_Marchen }, - { 2131, PT_SC, ucp_Marchen }, - { 2139, PT_SCX, ucp_Masaram_Gondi }, - { 2152, PT_BOOL, ucp_Math }, - { 2157, PT_PC, ucp_Mc }, - { 2160, PT_BOOL, ucp_Modifier_Combining_Mark }, - { 2164, PT_PC, ucp_Me }, - { 2167, PT_SC, ucp_Medefaidrin }, - { 2179, PT_SC, ucp_Medefaidrin }, - { 2184, PT_SC, ucp_Meetei_Mayek }, - { 2196, PT_SC, ucp_Mende_Kikakui }, - { 2201, PT_SC, ucp_Mende_Kikakui }, - { 2214, PT_SC, ucp_Meroitic_Cursive }, - { 2219, PT_SCX, ucp_Meroitic_Hieroglyphs }, - { 2224, PT_SC, ucp_Meroitic_Cursive }, - { 2240, PT_SCX, ucp_Meroitic_Hieroglyphs }, - { 2260, PT_SC, ucp_Miao }, - { 2265, PT_SCX, ucp_Malayalam }, - { 2270, PT_PC, ucp_Mn }, - { 2273, PT_SCX, ucp_Modi }, - { 2278, PT_BOOL, ucp_Modifier_Combining_Mark }, - { 2300, PT_SCX, ucp_Mongolian }, - { 2305, PT_SCX, ucp_Mongolian }, - { 2315, PT_SC, ucp_Mro }, - { 2319, PT_SC, ucp_Mro }, - { 2324, PT_SC, ucp_Meetei_Mayek }, - { 2329, PT_SCX, ucp_Multani }, - { 2334, PT_SCX, ucp_Multani }, - { 2342, PT_SCX, ucp_Myanmar }, - { 2350, PT_SCX, ucp_Myanmar }, - { 2355, PT_GC, ucp_N }, - { 2357, PT_SC, ucp_Nabataean }, - { 2367, PT_SC, ucp_Nag_Mundari }, - { 2372, PT_SC, ucp_Nag_Mundari }, - { 2383, PT_SCX, ucp_Nandinagari }, - { 2388, PT_SCX, ucp_Nandinagari }, - { 2400, PT_SC, ucp_Old_North_Arabian }, - { 2405, PT_SC, ucp_Nabataean }, - { 2410, PT_BOOL, ucp_Noncharacter_Code_Point }, - { 2416, PT_PC, ucp_Nd }, - { 2419, PT_SC, ucp_Newa }, - { 2424, PT_SC, ucp_New_Tai_Lue }, - { 2434, PT_SCX, ucp_Nko }, - { 2438, PT_SCX, ucp_Nko }, - { 2443, PT_PC, ucp_Nl }, - { 2446, PT_PC, ucp_No }, - { 2449, PT_BOOL, ucp_Noncharacter_Code_Point }, - { 2471, PT_SC, ucp_Nushu }, - { 2476, PT_SC, ucp_Nushu }, - { 2482, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, - { 2503, PT_SC, ucp_Ogham }, - { 2508, PT_SC, ucp_Ogham }, - { 2514, PT_SC, ucp_Ol_Chiki }, - { 2522, PT_SC, ucp_Ol_Chiki }, - { 2527, PT_SCX, ucp_Old_Hungarian }, - { 2540, PT_SC, ucp_Old_Italic }, - { 2550, PT_SC, ucp_Old_North_Arabian }, - { 2566, PT_SCX, ucp_Old_Permic }, - { 2576, PT_SC, ucp_Old_Persian }, - { 2587, PT_SC, ucp_Old_Sogdian }, - { 2598, PT_SC, ucp_Old_South_Arabian }, - { 2614, PT_SCX, ucp_Old_Turkic }, - { 2624, PT_SCX, ucp_Old_Uyghur }, - { 2634, PT_SCX, ucp_Ol_Onal }, - { 2641, PT_SCX, ucp_Ol_Onal }, - { 2646, PT_SCX, ucp_Oriya }, - { 2652, PT_SCX, ucp_Old_Turkic }, - { 2657, PT_SCX, ucp_Oriya }, - { 2662, PT_SCX, ucp_Osage }, - { 2668, PT_SCX, ucp_Osage }, - { 2673, PT_SC, ucp_Osmanya }, - { 2678, PT_SC, ucp_Osmanya }, - { 2686, PT_SCX, ucp_Old_Uyghur }, - { 2691, PT_GC, ucp_P }, - { 2693, PT_SC, ucp_Pahawh_Hmong }, - { 2705, PT_SC, ucp_Palmyrene }, - { 2710, PT_SC, ucp_Palmyrene }, - { 2720, PT_BOOL, ucp_Pattern_Syntax }, - { 2727, PT_BOOL, ucp_Pattern_Syntax }, - { 2741, PT_BOOL, ucp_Pattern_White_Space }, - { 2759, PT_BOOL, ucp_Pattern_White_Space }, - { 2765, PT_SC, ucp_Pau_Cin_Hau }, - { 2770, PT_SC, ucp_Pau_Cin_Hau }, - { 2780, PT_PC, ucp_Pc }, - { 2783, PT_BOOL, ucp_Prepended_Concatenation_Mark }, - { 2787, PT_PC, ucp_Pd }, - { 2790, PT_PC, ucp_Pe }, - { 2793, PT_SCX, ucp_Old_Permic }, - { 2798, PT_PC, ucp_Pf }, - { 2801, PT_SCX, ucp_Phags_Pa }, - { 2806, PT_SCX, ucp_Phags_Pa }, - { 2814, PT_SC, ucp_Inscriptional_Pahlavi }, - { 2819, PT_SCX, ucp_Psalter_Pahlavi }, - { 2824, PT_SC, ucp_Phoenician }, - { 2829, PT_SC, ucp_Phoenician }, - { 2840, PT_PC, ucp_Pi }, - { 2843, PT_SC, ucp_Miao }, - { 2848, PT_PC, ucp_Po }, - { 2851, PT_BOOL, ucp_Prepended_Concatenation_Mark }, - { 2878, PT_SC, ucp_Inscriptional_Parthian }, - { 2883, PT_PC, ucp_Ps }, - { 2886, PT_SCX, ucp_Psalter_Pahlavi }, - { 2901, PT_SCX, ucp_Coptic }, - { 2906, PT_SC, ucp_Inherited }, - { 2911, PT_BOOL, ucp_Quotation_Mark }, - { 2917, PT_BOOL, ucp_Quotation_Mark }, - { 2931, PT_BOOL, ucp_Radical }, - { 2939, PT_BOOL, ucp_Regional_Indicator }, - { 2957, PT_SC, ucp_Rejang }, - { 2964, PT_BOOL, ucp_Regional_Indicator }, - { 2967, PT_SC, ucp_Rejang }, - { 2972, PT_SCX, ucp_Hanifi_Rohingya }, - { 2977, PT_SCX, ucp_Runic }, - { 2983, PT_SCX, ucp_Runic }, - { 2988, PT_GC, ucp_S }, - { 2990, PT_SCX, ucp_Samaritan }, - { 3000, PT_SCX, ucp_Samaritan }, - { 3005, PT_SC, ucp_Old_South_Arabian }, - { 3010, PT_SC, ucp_Saurashtra }, - { 3015, PT_SC, ucp_Saurashtra }, - { 3026, PT_PC, ucp_Sc }, - { 3029, PT_BOOL, ucp_Soft_Dotted }, - { 3032, PT_BOOL, ucp_Sentence_Terminal }, - { 3049, PT_SC, ucp_SignWriting }, - { 3054, PT_SCX, ucp_Sharada }, - { 3062, PT_SCX, ucp_Shavian }, - { 3070, PT_SCX, ucp_Shavian }, - { 3075, PT_SCX, ucp_Sharada }, - { 3080, PT_SC, ucp_Siddham }, - { 3085, PT_SC, ucp_Siddham }, - { 3093, PT_SC, ucp_SignWriting }, - { 3105, PT_SCX, ucp_Khudawadi }, - { 3110, PT_SCX, ucp_Sinhala }, - { 3115, PT_SCX, ucp_Sinhala }, - { 3123, PT_PC, ucp_Sk }, - { 3126, PT_PC, ucp_Sm }, - { 3129, PT_PC, ucp_So }, - { 3132, PT_BOOL, ucp_Soft_Dotted }, - { 3143, PT_SCX, ucp_Sogdian }, - { 3148, PT_SCX, ucp_Sogdian }, - { 3156, PT_SC, ucp_Old_Sogdian }, - { 3161, PT_SC, ucp_Sora_Sompeng }, - { 3166, PT_SC, ucp_Sora_Sompeng }, - { 3178, PT_SC, ucp_Soyombo }, - { 3183, PT_SC, ucp_Soyombo }, - { 3191, PT_BOOL, ucp_White_Space }, - { 3197, PT_BOOL, ucp_Sentence_Terminal }, - { 3203, PT_SC, ucp_Sundanese }, - { 3208, PT_SC, ucp_Sundanese }, - { 3218, PT_SCX, ucp_Sunuwar }, - { 3223, PT_SCX, ucp_Sunuwar }, - { 3231, PT_SCX, ucp_Syloti_Nagri }, - { 3236, PT_SCX, ucp_Syloti_Nagri }, - { 3248, PT_SCX, ucp_Syriac }, - { 3253, PT_SCX, ucp_Syriac }, - { 3260, PT_SCX, ucp_Tagalog }, - { 3268, PT_SCX, ucp_Tagbanwa }, - { 3273, PT_SCX, ucp_Tagbanwa }, - { 3282, PT_SCX, ucp_Tai_Le }, - { 3288, PT_SC, ucp_Tai_Tham }, - { 3296, PT_SC, ucp_Tai_Viet }, - { 3304, PT_SCX, ucp_Takri }, - { 3309, PT_SCX, ucp_Takri }, - { 3315, PT_SCX, ucp_Tai_Le }, - { 3320, PT_SC, ucp_New_Tai_Lue }, - { 3325, PT_SCX, ucp_Tamil }, - { 3331, PT_SCX, ucp_Tamil }, - { 3336, PT_SCX, ucp_Tangut }, - { 3341, PT_SC, ucp_Tangsa }, - { 3348, PT_SCX, ucp_Tangut }, - { 3355, PT_SC, ucp_Tai_Viet }, - { 3360, PT_SCX, ucp_Telugu }, - { 3365, PT_SCX, ucp_Telugu }, - { 3372, PT_BOOL, ucp_Terminal_Punctuation }, - { 3377, PT_BOOL, ucp_Terminal_Punctuation }, - { 3397, PT_SCX, ucp_Tifinagh }, - { 3402, PT_SCX, ucp_Tagalog }, - { 3407, PT_SCX, ucp_Thaana }, - { 3412, PT_SCX, ucp_Thaana }, - { 3419, PT_SCX, ucp_Thai }, - { 3424, PT_SCX, ucp_Tibetan }, - { 3432, PT_SCX, ucp_Tibetan }, - { 3437, PT_SCX, ucp_Tifinagh }, - { 3446, PT_SCX, ucp_Tirhuta }, - { 3451, PT_SCX, ucp_Tirhuta }, - { 3459, PT_SC, ucp_Tangsa }, - { 3464, PT_SCX, ucp_Todhri }, - { 3471, PT_SCX, ucp_Todhri }, - { 3476, PT_SCX, ucp_Toto }, - { 3481, PT_SCX, ucp_Tulu_Tigalari }, - { 3494, PT_SCX, ucp_Tulu_Tigalari }, - { 3499, PT_SC, ucp_Ugaritic }, - { 3504, PT_SC, ucp_Ugaritic }, - { 3513, PT_BOOL, ucp_Unified_Ideograph }, - { 3519, PT_BOOL, ucp_Unified_Ideograph }, - { 3536, PT_SC, ucp_Unknown }, - { 3544, PT_BOOL, ucp_Uppercase }, - { 3550, PT_BOOL, ucp_Uppercase }, - { 3560, PT_SC, ucp_Vai }, - { 3564, PT_SC, ucp_Vai }, - { 3569, PT_BOOL, ucp_Variation_Selector }, - { 3587, PT_SC, ucp_Vithkuqi }, - { 3592, PT_SC, ucp_Vithkuqi }, - { 3601, PT_BOOL, ucp_Variation_Selector }, - { 3604, PT_SC, ucp_Wancho }, - { 3611, PT_SC, ucp_Warang_Citi }, - { 3616, PT_SC, ucp_Warang_Citi }, - { 3627, PT_SC, ucp_Wancho }, - { 3632, PT_BOOL, ucp_White_Space }, - { 3643, PT_BOOL, ucp_White_Space }, - { 3650, PT_ALNUM, 0 }, - { 3654, PT_BOOL, ucp_XID_Continue }, - { 3659, PT_BOOL, ucp_XID_Continue }, - { 3671, PT_BOOL, ucp_XID_Start }, - { 3676, PT_BOOL, ucp_XID_Start }, - { 3685, PT_SC, ucp_Old_Persian }, - { 3690, PT_PXSPACE, 0 }, - { 3694, PT_SPACE, 0 }, - { 3698, PT_SC, ucp_Cuneiform }, - { 3703, PT_UCNC, 0 }, - { 3707, PT_WORD, 0 }, - { 3711, PT_SCX, ucp_Yezidi }, - { 3716, PT_SCX, ucp_Yezidi }, - { 3723, PT_SCX, ucp_Yi }, - { 3726, PT_SCX, ucp_Yi }, - { 3731, PT_GC, ucp_Z }, - { 3733, PT_SC, ucp_Zanabazar_Square }, - { 3749, PT_SC, ucp_Zanabazar_Square }, - { 3754, PT_SC, ucp_Inherited }, - { 3759, PT_PC, ucp_Zl }, - { 3762, PT_PC, ucp_Zp }, - { 3765, PT_PC, ucp_Zs }, - { 3768, PT_SC, ucp_Common }, - { 3773, PT_SC, ucp_Unknown } + { 195, PT_SC, ucp_Beria_Erfe }, + { 200, PT_SC, ucp_Beria_Erfe }, + { 210, PT_SC, ucp_Bhaiksuki }, + { 220, PT_SC, ucp_Bhaiksuki }, + { 225, PT_BIDICL, ucp_bidiAL }, + { 232, PT_BIDICL, ucp_bidiAN }, + { 239, PT_BIDICL, ucp_bidiB }, + { 245, PT_BIDICL, ucp_bidiBN }, + { 252, PT_BOOL, ucp_Bidi_Control }, + { 258, PT_BOOL, ucp_Bidi_Control }, + { 270, PT_BIDICL, ucp_bidiCS }, + { 277, PT_BIDICL, ucp_bidiEN }, + { 284, PT_BIDICL, ucp_bidiES }, + { 291, PT_BIDICL, ucp_bidiET }, + { 298, PT_BIDICL, ucp_bidiFSI }, + { 306, PT_BIDICL, ucp_bidiL }, + { 312, PT_BIDICL, ucp_bidiLRE }, + { 320, PT_BIDICL, ucp_bidiLRI }, + { 328, PT_BIDICL, ucp_bidiLRO }, + { 336, PT_BOOL, ucp_Bidi_Mirrored }, + { 342, PT_BOOL, ucp_Bidi_Mirrored }, + { 355, PT_BIDICL, ucp_bidiNSM }, + { 363, PT_BIDICL, ucp_bidiON }, + { 370, PT_BIDICL, ucp_bidiPDF }, + { 378, PT_BIDICL, ucp_bidiPDI }, + { 386, PT_BIDICL, ucp_bidiR }, + { 392, PT_BIDICL, ucp_bidiRLE }, + { 400, PT_BIDICL, ucp_bidiRLI }, + { 408, PT_BIDICL, ucp_bidiRLO }, + { 416, PT_BIDICL, ucp_bidiS }, + { 422, PT_BIDICL, ucp_bidiWS }, + { 429, PT_SCX, ucp_Bopomofo }, + { 434, PT_SCX, ucp_Bopomofo }, + { 443, PT_SC, ucp_Brahmi }, + { 448, PT_SC, ucp_Brahmi }, + { 455, PT_SC, ucp_Braille }, + { 460, PT_SC, ucp_Braille }, + { 468, PT_SCX, ucp_Buginese }, + { 473, PT_SCX, ucp_Buginese }, + { 482, PT_SCX, ucp_Buhid }, + { 487, PT_SCX, ucp_Buhid }, + { 493, PT_GC, ucp_C }, + { 495, PT_SCX, ucp_Chakma }, + { 500, PT_SC, ucp_Canadian_Aboriginal }, + { 519, PT_SC, ucp_Canadian_Aboriginal }, + { 524, PT_SCX, ucp_Carian }, + { 529, PT_SCX, ucp_Carian }, + { 536, PT_BOOL, ucp_Cased }, + { 542, PT_BOOL, ucp_Case_Ignorable }, + { 556, PT_SCX, ucp_Caucasian_Albanian }, + { 574, PT_PC, ucp_Cc }, + { 577, PT_PC, ucp_Cf }, + { 580, PT_SCX, ucp_Chakma }, + { 587, PT_SC, ucp_Cham }, + { 592, PT_BOOL, ucp_Changes_When_Casefolded }, + { 614, PT_BOOL, ucp_Changes_When_Casemapped }, + { 636, PT_BOOL, ucp_Changes_When_Lowercased }, + { 658, PT_BOOL, ucp_Changes_When_Titlecased }, + { 680, PT_BOOL, ucp_Changes_When_Uppercased }, + { 702, PT_SCX, ucp_Cherokee }, + { 707, PT_SCX, ucp_Cherokee }, + { 716, PT_SC, ucp_Chorasmian }, + { 727, PT_SC, ucp_Chorasmian }, + { 732, PT_BOOL, ucp_Case_Ignorable }, + { 735, PT_PC, ucp_Cn }, + { 738, PT_PC, ucp_Co }, + { 741, PT_SC, ucp_Common }, + { 748, PT_SCX, ucp_Coptic }, + { 753, PT_SCX, ucp_Coptic }, + { 760, PT_SCX, ucp_Cypro_Minoan }, + { 765, PT_SCX, ucp_Cypriot }, + { 770, PT_PC, ucp_Cs }, + { 773, PT_SC, ucp_Cuneiform }, + { 783, PT_BOOL, ucp_Changes_When_Casefolded }, + { 788, PT_BOOL, ucp_Changes_When_Casemapped }, + { 793, PT_BOOL, ucp_Changes_When_Lowercased }, + { 797, PT_BOOL, ucp_Changes_When_Titlecased }, + { 801, PT_BOOL, ucp_Changes_When_Uppercased }, + { 805, PT_SCX, ucp_Cypriot }, + { 813, PT_SCX, ucp_Cypro_Minoan }, + { 825, PT_SCX, ucp_Cyrillic }, + { 834, PT_SCX, ucp_Cyrillic }, + { 839, PT_BOOL, ucp_Dash }, + { 844, PT_BOOL, ucp_Default_Ignorable_Code_Point }, + { 870, PT_BOOL, ucp_Deprecated }, + { 874, PT_BOOL, ucp_Deprecated }, + { 885, PT_SC, ucp_Deseret }, + { 893, PT_SCX, ucp_Devanagari }, + { 898, PT_SCX, ucp_Devanagari }, + { 909, PT_BOOL, ucp_Default_Ignorable_Code_Point }, + { 912, PT_BOOL, ucp_Diacritic }, + { 916, PT_BOOL, ucp_Diacritic }, + { 926, PT_SC, ucp_Dives_Akuru }, + { 931, PT_SC, ucp_Dives_Akuru }, + { 942, PT_SCX, ucp_Dogra }, + { 947, PT_SCX, ucp_Dogra }, + { 953, PT_SC, ucp_Deseret }, + { 958, PT_SCX, ucp_Duployan }, + { 963, PT_SCX, ucp_Duployan }, + { 972, PT_BOOL, ucp_Emoji_Modifier_Base }, + { 978, PT_BOOL, ucp_Emoji_Component }, + { 984, PT_SC, ucp_Egyptian_Hieroglyphs }, + { 989, PT_SC, ucp_Egyptian_Hieroglyphs }, + { 1009, PT_SCX, ucp_Elbasan }, + { 1014, PT_SCX, ucp_Elbasan }, + { 1022, PT_SC, ucp_Elymaic }, + { 1027, PT_SC, ucp_Elymaic }, + { 1035, PT_BOOL, ucp_Emoji_Modifier }, + { 1040, PT_BOOL, ucp_Emoji }, + { 1046, PT_BOOL, ucp_Emoji_Component }, + { 1061, PT_BOOL, ucp_Emoji_Modifier }, + { 1075, PT_BOOL, ucp_Emoji_Modifier_Base }, + { 1093, PT_BOOL, ucp_Emoji_Presentation }, + { 1111, PT_BOOL, ucp_Emoji_Presentation }, + { 1117, PT_SCX, ucp_Ethiopic }, + { 1122, PT_SCX, ucp_Ethiopic }, + { 1131, PT_BOOL, ucp_Extender }, + { 1135, PT_BOOL, ucp_Extended_Pictographic }, + { 1156, PT_BOOL, ucp_Extender }, + { 1165, PT_BOOL, ucp_Extended_Pictographic }, + { 1173, PT_SCX, ucp_Garay }, + { 1178, PT_SCX, ucp_Garay }, + { 1184, PT_SCX, ucp_Georgian }, + { 1189, PT_SCX, ucp_Georgian }, + { 1198, PT_SCX, ucp_Glagolitic }, + { 1203, PT_SCX, ucp_Glagolitic }, + { 1214, PT_SCX, ucp_Gunjala_Gondi }, + { 1219, PT_SCX, ucp_Masaram_Gondi }, + { 1224, PT_SCX, ucp_Gothic }, + { 1229, PT_SCX, ucp_Gothic }, + { 1236, PT_SCX, ucp_Grantha }, + { 1241, PT_SCX, ucp_Grantha }, + { 1249, PT_BOOL, ucp_Grapheme_Base }, + { 1262, PT_BOOL, ucp_Grapheme_Extend }, + { 1277, PT_BOOL, ucp_Grapheme_Link }, + { 1290, PT_BOOL, ucp_Grapheme_Base }, + { 1297, PT_SCX, ucp_Greek }, + { 1303, PT_SCX, ucp_Greek }, + { 1308, PT_BOOL, ucp_Grapheme_Extend }, + { 1314, PT_BOOL, ucp_Grapheme_Link }, + { 1321, PT_SCX, ucp_Gujarati }, + { 1330, PT_SCX, ucp_Gujarati }, + { 1335, PT_SCX, ucp_Gurung_Khema }, + { 1340, PT_SCX, ucp_Gunjala_Gondi }, + { 1353, PT_SCX, ucp_Gurmukhi }, + { 1362, PT_SCX, ucp_Gurmukhi }, + { 1367, PT_SCX, ucp_Gurung_Khema }, + { 1379, PT_SCX, ucp_Han }, + { 1383, PT_SCX, ucp_Hangul }, + { 1388, PT_SCX, ucp_Hangul }, + { 1395, PT_SCX, ucp_Han }, + { 1400, PT_SCX, ucp_Hanifi_Rohingya }, + { 1415, PT_SCX, ucp_Hanunoo }, + { 1420, PT_SCX, ucp_Hanunoo }, + { 1428, PT_SC, ucp_Hatran }, + { 1433, PT_SC, ucp_Hatran }, + { 1440, PT_SCX, ucp_Hebrew }, + { 1445, PT_SCX, ucp_Hebrew }, + { 1452, PT_BOOL, ucp_Hex_Digit }, + { 1456, PT_BOOL, ucp_Hex_Digit }, + { 1465, PT_SCX, ucp_Hiragana }, + { 1470, PT_SCX, ucp_Hiragana }, + { 1479, PT_SC, ucp_Anatolian_Hieroglyphs }, + { 1484, PT_SC, ucp_Pahawh_Hmong }, + { 1489, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, + { 1494, PT_SCX, ucp_Old_Hungarian }, + { 1499, PT_BOOL, ucp_ID_Continue }, + { 1503, PT_BOOL, ucp_ID_Compat_Math_Continue }, + { 1524, PT_BOOL, ucp_ID_Compat_Math_Start }, + { 1542, PT_BOOL, ucp_ID_Continue }, + { 1553, PT_BOOL, ucp_Ideographic }, + { 1558, PT_BOOL, ucp_Ideographic }, + { 1570, PT_BOOL, ucp_ID_Start }, + { 1574, PT_BOOL, ucp_IDS_Binary_Operator }, + { 1579, PT_BOOL, ucp_IDS_Binary_Operator }, + { 1597, PT_BOOL, ucp_IDS_Trinary_Operator }, + { 1602, PT_BOOL, ucp_ID_Start }, + { 1610, PT_BOOL, ucp_IDS_Trinary_Operator }, + { 1629, PT_BOOL, ucp_IDS_Unary_Operator }, + { 1634, PT_BOOL, ucp_IDS_Unary_Operator }, + { 1651, PT_SC, ucp_Imperial_Aramaic }, + { 1667, PT_BOOL, ucp_InCB }, + { 1672, PT_SC, ucp_Inherited }, + { 1682, PT_SC, ucp_Inscriptional_Pahlavi }, + { 1703, PT_SC, ucp_Inscriptional_Parthian }, + { 1725, PT_SC, ucp_Old_Italic }, + { 1730, PT_SCX, ucp_Javanese }, + { 1735, PT_SCX, ucp_Javanese }, + { 1744, PT_BOOL, ucp_Join_Control }, + { 1750, PT_BOOL, ucp_Join_Control }, + { 1762, PT_SCX, ucp_Kaithi }, + { 1769, PT_SCX, ucp_Kayah_Li }, + { 1774, PT_SCX, ucp_Katakana }, + { 1779, PT_SCX, ucp_Kannada }, + { 1787, PT_SCX, ucp_Katakana }, + { 1796, PT_SC, ucp_Kawi }, + { 1801, PT_SCX, ucp_Kayah_Li }, + { 1809, PT_SC, ucp_Kharoshthi }, + { 1814, PT_SC, ucp_Kharoshthi }, + { 1825, PT_SC, ucp_Khitan_Small_Script }, + { 1843, PT_SC, ucp_Khmer }, + { 1849, PT_SC, ucp_Khmer }, + { 1854, PT_SCX, ucp_Khojki }, + { 1859, PT_SCX, ucp_Khojki }, + { 1866, PT_SCX, ucp_Khudawadi }, + { 1876, PT_SC, ucp_Kirat_Rai }, + { 1885, PT_SC, ucp_Khitan_Small_Script }, + { 1890, PT_SCX, ucp_Kannada }, + { 1895, PT_SC, ucp_Kirat_Rai }, + { 1900, PT_SCX, ucp_Kaithi }, + { 1905, PT_GC, ucp_L }, + { 1907, PT_LAMP, 0 }, + { 1910, PT_SC, ucp_Tai_Tham }, + { 1915, PT_SC, ucp_Lao }, + { 1919, PT_SC, ucp_Lao }, + { 1924, PT_SCX, ucp_Latin }, + { 1930, PT_SCX, ucp_Latin }, + { 1935, PT_LAMP, 0 }, + { 1938, PT_SC, ucp_Lepcha }, + { 1943, PT_SC, ucp_Lepcha }, + { 1950, PT_SCX, ucp_Limbu }, + { 1955, PT_SCX, ucp_Limbu }, + { 1961, PT_SCX, ucp_Linear_A }, + { 1966, PT_SCX, ucp_Linear_B }, + { 1971, PT_SCX, ucp_Linear_A }, + { 1979, PT_SCX, ucp_Linear_B }, + { 1987, PT_SCX, ucp_Lisu }, + { 1992, PT_PC, ucp_Ll }, + { 1995, PT_PC, ucp_Lm }, + { 1998, PT_PC, ucp_Lo }, + { 2001, PT_BOOL, ucp_Logical_Order_Exception }, + { 2005, PT_BOOL, ucp_Logical_Order_Exception }, + { 2027, PT_BOOL, ucp_Lowercase }, + { 2033, PT_BOOL, ucp_Lowercase }, + { 2043, PT_PC, ucp_Lt }, + { 2046, PT_PC, ucp_Lu }, + { 2049, PT_SCX, ucp_Lycian }, + { 2054, PT_SCX, ucp_Lycian }, + { 2061, PT_SCX, ucp_Lydian }, + { 2066, PT_SCX, ucp_Lydian }, + { 2073, PT_GC, ucp_M }, + { 2075, PT_SCX, ucp_Mahajani }, + { 2084, PT_SCX, ucp_Mahajani }, + { 2089, PT_SC, ucp_Makasar }, + { 2094, PT_SC, ucp_Makasar }, + { 2102, PT_SCX, ucp_Malayalam }, + { 2112, PT_SCX, ucp_Mandaic }, + { 2117, PT_SCX, ucp_Mandaic }, + { 2125, PT_SCX, ucp_Manichaean }, + { 2130, PT_SCX, ucp_Manichaean }, + { 2141, PT_SC, ucp_Marchen }, + { 2146, PT_SC, ucp_Marchen }, + { 2154, PT_SCX, ucp_Masaram_Gondi }, + { 2167, PT_BOOL, ucp_Math }, + { 2172, PT_PC, ucp_Mc }, + { 2175, PT_BOOL, ucp_Modifier_Combining_Mark }, + { 2179, PT_PC, ucp_Me }, + { 2182, PT_SC, ucp_Medefaidrin }, + { 2194, PT_SC, ucp_Medefaidrin }, + { 2199, PT_SC, ucp_Meetei_Mayek }, + { 2211, PT_SC, ucp_Mende_Kikakui }, + { 2216, PT_SC, ucp_Mende_Kikakui }, + { 2229, PT_SC, ucp_Meroitic_Cursive }, + { 2234, PT_SCX, ucp_Meroitic_Hieroglyphs }, + { 2239, PT_SC, ucp_Meroitic_Cursive }, + { 2255, PT_SCX, ucp_Meroitic_Hieroglyphs }, + { 2275, PT_SC, ucp_Miao }, + { 2280, PT_SCX, ucp_Malayalam }, + { 2285, PT_PC, ucp_Mn }, + { 2288, PT_SCX, ucp_Modi }, + { 2293, PT_BOOL, ucp_Modifier_Combining_Mark }, + { 2315, PT_SCX, ucp_Mongolian }, + { 2320, PT_SCX, ucp_Mongolian }, + { 2330, PT_SC, ucp_Mro }, + { 2334, PT_SC, ucp_Mro }, + { 2339, PT_SC, ucp_Meetei_Mayek }, + { 2344, PT_SCX, ucp_Multani }, + { 2349, PT_SCX, ucp_Multani }, + { 2357, PT_SCX, ucp_Myanmar }, + { 2365, PT_SCX, ucp_Myanmar }, + { 2370, PT_GC, ucp_N }, + { 2372, PT_SC, ucp_Nabataean }, + { 2382, PT_SC, ucp_Nag_Mundari }, + { 2387, PT_SC, ucp_Nag_Mundari }, + { 2398, PT_SCX, ucp_Nandinagari }, + { 2403, PT_SCX, ucp_Nandinagari }, + { 2415, PT_SC, ucp_Old_North_Arabian }, + { 2420, PT_SC, ucp_Nabataean }, + { 2425, PT_BOOL, ucp_Noncharacter_Code_Point }, + { 2431, PT_PC, ucp_Nd }, + { 2434, PT_SCX, ucp_Newa }, + { 2439, PT_SC, ucp_New_Tai_Lue }, + { 2449, PT_SCX, ucp_Nko }, + { 2453, PT_SCX, ucp_Nko }, + { 2458, PT_PC, ucp_Nl }, + { 2461, PT_PC, ucp_No }, + { 2464, PT_BOOL, ucp_Noncharacter_Code_Point }, + { 2486, PT_SC, ucp_Nushu }, + { 2491, PT_SC, ucp_Nushu }, + { 2497, PT_SC, ucp_Nyiakeng_Puachue_Hmong }, + { 2518, PT_SC, ucp_Ogham }, + { 2523, PT_SC, ucp_Ogham }, + { 2529, PT_SC, ucp_Ol_Chiki }, + { 2537, PT_SC, ucp_Ol_Chiki }, + { 2542, PT_SCX, ucp_Old_Hungarian }, + { 2555, PT_SC, ucp_Old_Italic }, + { 2565, PT_SC, ucp_Old_North_Arabian }, + { 2581, PT_SCX, ucp_Old_Permic }, + { 2591, PT_SC, ucp_Old_Persian }, + { 2602, PT_SC, ucp_Old_Sogdian }, + { 2613, PT_SC, ucp_Old_South_Arabian }, + { 2629, PT_SCX, ucp_Old_Turkic }, + { 2639, PT_SCX, ucp_Old_Uyghur }, + { 2649, PT_SCX, ucp_Ol_Onal }, + { 2656, PT_SCX, ucp_Ol_Onal }, + { 2661, PT_SCX, ucp_Oriya }, + { 2667, PT_SCX, ucp_Old_Turkic }, + { 2672, PT_SCX, ucp_Oriya }, + { 2677, PT_SCX, ucp_Osage }, + { 2683, PT_SCX, ucp_Osage }, + { 2688, PT_SC, ucp_Osmanya }, + { 2693, PT_SC, ucp_Osmanya }, + { 2701, PT_SCX, ucp_Old_Uyghur }, + { 2706, PT_GC, ucp_P }, + { 2708, PT_SC, ucp_Pahawh_Hmong }, + { 2720, PT_SC, ucp_Palmyrene }, + { 2725, PT_SC, ucp_Palmyrene }, + { 2735, PT_BOOL, ucp_Pattern_Syntax }, + { 2742, PT_BOOL, ucp_Pattern_Syntax }, + { 2756, PT_BOOL, ucp_Pattern_White_Space }, + { 2774, PT_BOOL, ucp_Pattern_White_Space }, + { 2780, PT_SC, ucp_Pau_Cin_Hau }, + { 2785, PT_SC, ucp_Pau_Cin_Hau }, + { 2795, PT_PC, ucp_Pc }, + { 2798, PT_BOOL, ucp_Prepended_Concatenation_Mark }, + { 2802, PT_PC, ucp_Pd }, + { 2805, PT_PC, ucp_Pe }, + { 2808, PT_SCX, ucp_Old_Permic }, + { 2813, PT_PC, ucp_Pf }, + { 2816, PT_SCX, ucp_Phags_Pa }, + { 2821, PT_SCX, ucp_Phags_Pa }, + { 2829, PT_SC, ucp_Inscriptional_Pahlavi }, + { 2834, PT_SCX, ucp_Psalter_Pahlavi }, + { 2839, PT_SC, ucp_Phoenician }, + { 2844, PT_SC, ucp_Phoenician }, + { 2855, PT_PC, ucp_Pi }, + { 2858, PT_SC, ucp_Miao }, + { 2863, PT_PC, ucp_Po }, + { 2866, PT_BOOL, ucp_Prepended_Concatenation_Mark }, + { 2893, PT_SC, ucp_Inscriptional_Parthian }, + { 2898, PT_PC, ucp_Ps }, + { 2901, PT_SCX, ucp_Psalter_Pahlavi }, + { 2916, PT_SCX, ucp_Coptic }, + { 2921, PT_SC, ucp_Inherited }, + { 2926, PT_BOOL, ucp_Quotation_Mark }, + { 2932, PT_BOOL, ucp_Quotation_Mark }, + { 2946, PT_BOOL, ucp_Radical }, + { 2954, PT_BOOL, ucp_Regional_Indicator }, + { 2972, PT_SC, ucp_Rejang }, + { 2979, PT_BOOL, ucp_Regional_Indicator }, + { 2982, PT_SC, ucp_Rejang }, + { 2987, PT_SCX, ucp_Hanifi_Rohingya }, + { 2992, PT_SCX, ucp_Runic }, + { 2998, PT_SCX, ucp_Runic }, + { 3003, PT_GC, ucp_S }, + { 3005, PT_SCX, ucp_Samaritan }, + { 3015, PT_SCX, ucp_Samaritan }, + { 3020, PT_SC, ucp_Old_South_Arabian }, + { 3025, PT_SC, ucp_Saurashtra }, + { 3030, PT_SC, ucp_Saurashtra }, + { 3041, PT_PC, ucp_Sc }, + { 3044, PT_BOOL, ucp_Soft_Dotted }, + { 3047, PT_BOOL, ucp_Sentence_Terminal }, + { 3064, PT_SC, ucp_SignWriting }, + { 3069, PT_SCX, ucp_Sharada }, + { 3077, PT_SCX, ucp_Shavian }, + { 3085, PT_SCX, ucp_Shavian }, + { 3090, PT_SCX, ucp_Sharada }, + { 3095, PT_SC, ucp_Siddham }, + { 3100, PT_SC, ucp_Siddham }, + { 3108, PT_SC, ucp_Sidetic }, + { 3116, PT_SC, ucp_Sidetic }, + { 3121, PT_SC, ucp_SignWriting }, + { 3133, PT_SCX, ucp_Khudawadi }, + { 3138, PT_SCX, ucp_Sinhala }, + { 3143, PT_SCX, ucp_Sinhala }, + { 3151, PT_PC, ucp_Sk }, + { 3154, PT_PC, ucp_Sm }, + { 3157, PT_PC, ucp_So }, + { 3160, PT_BOOL, ucp_Soft_Dotted }, + { 3171, PT_SCX, ucp_Sogdian }, + { 3176, PT_SCX, ucp_Sogdian }, + { 3184, PT_SC, ucp_Old_Sogdian }, + { 3189, PT_SC, ucp_Sora_Sompeng }, + { 3194, PT_SC, ucp_Sora_Sompeng }, + { 3206, PT_SC, ucp_Soyombo }, + { 3211, PT_SC, ucp_Soyombo }, + { 3219, PT_BOOL, ucp_White_Space }, + { 3225, PT_BOOL, ucp_Sentence_Terminal }, + { 3231, PT_SC, ucp_Sundanese }, + { 3236, PT_SC, ucp_Sundanese }, + { 3246, PT_SCX, ucp_Sunuwar }, + { 3251, PT_SCX, ucp_Sunuwar }, + { 3259, PT_SCX, ucp_Syloti_Nagri }, + { 3264, PT_SCX, ucp_Syloti_Nagri }, + { 3276, PT_SCX, ucp_Syriac }, + { 3281, PT_SCX, ucp_Syriac }, + { 3288, PT_SCX, ucp_Tagalog }, + { 3296, PT_SCX, ucp_Tagbanwa }, + { 3301, PT_SCX, ucp_Tagbanwa }, + { 3310, PT_SCX, ucp_Tai_Le }, + { 3316, PT_SC, ucp_Tai_Tham }, + { 3324, PT_SC, ucp_Tai_Viet }, + { 3332, PT_SC, ucp_Tai_Yo }, + { 3338, PT_SCX, ucp_Takri }, + { 3343, PT_SCX, ucp_Takri }, + { 3349, PT_SCX, ucp_Tai_Le }, + { 3354, PT_SC, ucp_New_Tai_Lue }, + { 3359, PT_SCX, ucp_Tamil }, + { 3365, PT_SCX, ucp_Tamil }, + { 3370, PT_SCX, ucp_Tangut }, + { 3375, PT_SC, ucp_Tangsa }, + { 3382, PT_SCX, ucp_Tangut }, + { 3389, PT_SC, ucp_Tai_Viet }, + { 3394, PT_SC, ucp_Tai_Yo }, + { 3399, PT_SCX, ucp_Telugu }, + { 3404, PT_SCX, ucp_Telugu }, + { 3411, PT_BOOL, ucp_Terminal_Punctuation }, + { 3416, PT_BOOL, ucp_Terminal_Punctuation }, + { 3436, PT_SCX, ucp_Tifinagh }, + { 3441, PT_SCX, ucp_Tagalog }, + { 3446, PT_SCX, ucp_Thaana }, + { 3451, PT_SCX, ucp_Thaana }, + { 3458, PT_SCX, ucp_Thai }, + { 3463, PT_SCX, ucp_Tibetan }, + { 3471, PT_SCX, ucp_Tibetan }, + { 3476, PT_SCX, ucp_Tifinagh }, + { 3485, PT_SCX, ucp_Tirhuta }, + { 3490, PT_SCX, ucp_Tirhuta }, + { 3498, PT_SC, ucp_Tangsa }, + { 3503, PT_SCX, ucp_Todhri }, + { 3510, PT_SCX, ucp_Todhri }, + { 3515, PT_SC, ucp_Tolong_Siki }, + { 3526, PT_SC, ucp_Tolong_Siki }, + { 3531, PT_SCX, ucp_Toto }, + { 3536, PT_SCX, ucp_Tulu_Tigalari }, + { 3549, PT_SCX, ucp_Tulu_Tigalari }, + { 3554, PT_SC, ucp_Ugaritic }, + { 3559, PT_SC, ucp_Ugaritic }, + { 3568, PT_BOOL, ucp_Unified_Ideograph }, + { 3574, PT_BOOL, ucp_Unified_Ideograph }, + { 3591, PT_SC, ucp_Unknown }, + { 3599, PT_BOOL, ucp_Uppercase }, + { 3605, PT_BOOL, ucp_Uppercase }, + { 3615, PT_SC, ucp_Vai }, + { 3619, PT_SC, ucp_Vai }, + { 3624, PT_BOOL, ucp_Variation_Selector }, + { 3642, PT_SC, ucp_Vithkuqi }, + { 3647, PT_SC, ucp_Vithkuqi }, + { 3656, PT_BOOL, ucp_Variation_Selector }, + { 3659, PT_SC, ucp_Wancho }, + { 3666, PT_SC, ucp_Warang_Citi }, + { 3671, PT_SC, ucp_Warang_Citi }, + { 3682, PT_SC, ucp_Wancho }, + { 3687, PT_BOOL, ucp_White_Space }, + { 3698, PT_BOOL, ucp_White_Space }, + { 3705, PT_ALNUM, 0 }, + { 3709, PT_BOOL, ucp_XID_Continue }, + { 3714, PT_BOOL, ucp_XID_Continue }, + { 3726, PT_BOOL, ucp_XID_Start }, + { 3731, PT_BOOL, ucp_XID_Start }, + { 3740, PT_SC, ucp_Old_Persian }, + { 3745, PT_PXSPACE, 0 }, + { 3749, PT_SPACE, 0 }, + { 3753, PT_SC, ucp_Cuneiform }, + { 3758, PT_UCNC, 0 }, + { 3762, PT_WORD, 0 }, + { 3766, PT_SCX, ucp_Yezidi }, + { 3771, PT_SCX, ucp_Yezidi }, + { 3778, PT_SCX, ucp_Yi }, + { 3781, PT_SCX, ucp_Yi }, + { 3786, PT_GC, ucp_Z }, + { 3788, PT_SC, ucp_Zanabazar_Square }, + { 3804, PT_SC, ucp_Zanabazar_Square }, + { 3809, PT_SC, ucp_Inherited }, + { 3814, PT_PC, ucp_Zl }, + { 3817, PT_PC, ucp_Zp }, + { 3820, PT_PC, ucp_Zs }, + { 3823, PT_SC, ucp_Common }, + { 3828, PT_SC, ucp_Unknown } }; const size_t PRIV(utt_size) = sizeof(PRIV(utt)) / sizeof(ucp_type_table); diff --git a/vendor/core/vendor/pcre2/src/pcre2posix.h b/vendor/core/vendor/pcre2/src/pcre2posix.h deleted file mode 100644 index 198612afc..000000000 --- a/vendor/core/vendor/pcre2/src/pcre2posix.h +++ /dev/null @@ -1,184 +0,0 @@ -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* PCRE2 is a library of functions to support regular expressions whose syntax -and semantics are as close as possible to those of the Perl 5 language. This is -the public header file to be #included by applications that call PCRE2 via the -POSIX wrapper interface. - - Written by Philip Hazel - Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2023 University of Cambridge - ------------------------------------------------------------------------------ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the University of Cambridge nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ -*/ - -#ifndef PCRE2POSIX_H_IDEMPOTENT_GUARD -#define PCRE2POSIX_H_IDEMPOTENT_GUARD - -/* Have to include stdlib.h in order to ensure that size_t is defined. */ - -#include - -/* Allow for C++ users */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Options, mostly defined by POSIX, but with some extras. */ - -#define REG_ICASE 0x0001 /* Maps to PCRE2_CASELESS */ -#define REG_NEWLINE 0x0002 /* Maps to PCRE2_MULTILINE */ -#define REG_NOTBOL 0x0004 /* Maps to PCRE2_NOTBOL */ -#define REG_NOTEOL 0x0008 /* Maps to PCRE2_NOTEOL */ -#define REG_DOTALL 0x0010 /* NOT defined by POSIX; maps to PCRE2_DOTALL */ -#define REG_NOSUB 0x0020 /* Do not report what was matched */ -#define REG_UTF 0x0040 /* NOT defined by POSIX; maps to PCRE2_UTF */ -#define REG_STARTEND 0x0080 /* BSD feature: pass subject string by so,eo */ -#define REG_NOTEMPTY 0x0100 /* NOT defined by POSIX; maps to PCRE2_NOTEMPTY */ -#define REG_UNGREEDY 0x0200 /* NOT defined by POSIX; maps to PCRE2_UNGREEDY */ -#define REG_UCP 0x0400 /* NOT defined by POSIX; maps to PCRE2_UCP */ -#define REG_PEND 0x0800 /* GNU feature: pass end pattern by re_endp */ -#define REG_NOSPEC 0x1000 /* Maps to PCRE2_LITERAL */ - -/* This is not used by PCRE2, but by defining it we make it easier -to slot PCRE2 into existing programs that make POSIX calls. */ - -#define REG_EXTENDED 0 - -/* Error values. Not all these are relevant or used by the wrapper. */ - -enum { - REG_ASSERT = 1, /* internal error ? */ - REG_BADBR, /* invalid repeat counts in {} */ - REG_BADPAT, /* pattern error */ - REG_BADRPT, /* ? * + invalid */ - REG_EBRACE, /* unbalanced {} */ - REG_EBRACK, /* unbalanced [] */ - REG_ECOLLATE, /* collation error - not relevant */ - REG_ECTYPE, /* bad class */ - REG_EESCAPE, /* bad escape sequence */ - REG_EMPTY, /* empty expression */ - REG_EPAREN, /* unbalanced () */ - REG_ERANGE, /* bad range inside [] */ - REG_ESIZE, /* expression too big */ - REG_ESPACE, /* failed to get memory */ - REG_ESUBREG, /* bad back reference */ - REG_INVARG, /* bad argument */ - REG_NOMATCH /* match failed */ -}; - - -/* The structure representing a compiled regular expression. It is also used -for passing the pattern end pointer when REG_PEND is set. */ - -typedef struct { - void *re_pcre2_code; - void *re_match_data; - const char *re_endp; - size_t re_nsub; - size_t re_erroffset; - int re_cflags; -} regex_t; - -/* The structure in which a captured offset is returned. */ - -typedef int regoff_t; - -typedef struct { - regoff_t rm_so; - regoff_t rm_eo; -} regmatch_t; - -/* When an application links to a PCRE2 DLL in Windows, the symbols that are -imported have to be identified as such. When building PCRE2, the appropriate -export settings are needed, and are set in pcre2posix.c before including this -file. So, we don't change existing definitions of PCRE2POSIX_EXP_DECL. - -By default, we use the standard "extern" declarations. */ - -#ifndef PCRE2POSIX_EXP_DECL -# if defined(_WIN32) && defined(PCRE2POSIX_SHARED) -# define PCRE2POSIX_EXP_DECL extern __declspec(dllimport) -# elif defined __cplusplus -# define PCRE2POSIX_EXP_DECL extern "C" -# else -# define PCRE2POSIX_EXP_DECL extern -# endif -#endif - -/* When compiling with the MSVC compiler, it is sometimes necessary to include -a "calling convention" before exported function names. For example: - - void __cdecl function(....) - -might be needed. In order to make this easy, all the exported functions have -PCRE2_CALL_CONVENTION just before their names. - -PCRE2 normally uses the platform's standard calling convention, so this should -not be set unless you know you need it. */ - -#ifndef PCRE2_CALL_CONVENTION -#define PCRE2_CALL_CONVENTION -#endif - -/* The functions. The actual code is in functions with pcre2_xxx names for -uniqueness. POSIX names are provided as macros for API compatibility with POSIX -regex functions. It's done this way to ensure to they are always linked from -the PCRE2 library and not by accident from elsewhere (regex_t differs in size -elsewhere). */ - -PCRE2POSIX_EXP_DECL int PCRE2_CALL_CONVENTION pcre2_regcomp(regex_t *, const char *, int); -PCRE2POSIX_EXP_DECL int PCRE2_CALL_CONVENTION pcre2_regexec(const regex_t *, const char *, size_t, - regmatch_t *, int); -PCRE2POSIX_EXP_DECL size_t PCRE2_CALL_CONVENTION pcre2_regerror(int, const regex_t *, char *, size_t); -PCRE2POSIX_EXP_DECL void PCRE2_CALL_CONVENTION pcre2_regfree(regex_t *); - -#define regcomp pcre2_regcomp -#define regexec pcre2_regexec -#define regerror pcre2_regerror -#define regfree pcre2_regfree - -/* Debian had a patch that used different names. These are now here to save -them having to maintain their own patch, but are not documented by PCRE2. */ - -#define PCRE2regcomp pcre2_regcomp -#define PCRE2regexec pcre2_regexec -#define PCRE2regerror pcre2_regerror -#define PCRE2regfree pcre2_regfree - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* PCRE2POSIX_H_IDEMPOTENT_GUARD */ - -/* End of pcre2posix.h */ diff --git a/vendor/core/vendor/pcre2/src/pcre2test_inc.h b/vendor/core/vendor/pcre2/src/pcre2test_inc.h deleted file mode 100644 index 8124e9ca6..000000000 --- a/vendor/core/vendor/pcre2/src/pcre2test_inc.h +++ /dev/null @@ -1,6349 +0,0 @@ -/************************************************* -* Perl-Compatible Regular Expressions * -*************************************************/ - -/* PCRE is a library of functions to support regular expressions whose syntax -and semantics are as close as possible to those of the Perl 5 language. - - Written by Philip Hazel - Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2024 University of Cambridge - ------------------------------------------------------------------------------ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the University of Cambridge nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------ -*/ - - -/* This module contains the mode-dependent code which is used by pcre2test.c. -It is #included in pcre2test.c at each supported code unit width, with -PCRE2_SUFFIX set appropriately, just like the functions that comprise the -library. */ - - -/* ------- Macros for hiding the bit width of this file's members ---------- */ - -#define pbuffer PCRE2_SUFFIX(pbuffer) -#define pbuffer_size G(pbuffer,_size) - -#if PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16 -#define utf_to_ord G(G(utf,PCRE2_CODE_UNIT_WIDTH),_to_ord) -#endif - -#define compiled_code PCRE2_SUFFIX(compiled_code_) -#define general_context PCRE2_SUFFIX(general_context_) -#define general_context_copy PCRE2_SUFFIX(general_context_copy_) -#define pat_context PCRE2_SUFFIX(pat_context_) -#define default_pat_context PCRE2_SUFFIX(default_pat_context_) -#define con_context PCRE2_SUFFIX(con_context_) -#define default_con_context PCRE2_SUFFIX(default_con_context_) -#define dat_context PCRE2_SUFFIX(dat_context_) -#define default_dat_context PCRE2_SUFFIX(default_dat_context_) -#define match_data PCRE2_SUFFIX(match_data_) -#define jit_stack PCRE2_SUFFIX(jit_stack_) -#define jit_stack_size PCRE2_SUFFIX(jit_stack_size_) -#define patstack PCRE2_SUFFIX(patstack_) -#define patstacknext PCRE2_SUFFIX(patstacknext_) -#define rep_in_buffer PCRE2_SUFFIX(rep_in_buffer_) -#define rep_in_buffer_size PCRE2_SUFFIX(rep_in_buffer_size_) -#define rep_out_buffer PCRE2_SUFFIX(rep_out_buffer_) -#define rep_out_buffer_size PCRE2_SUFFIX(rep_out_buffer_size_) - -#define jit_callback PCRE2_SUFFIX(jit_callback_) -#define pcre2_strcmp_c8 PCRE2_SUFFIX(pcre2_strcmp_c8_) -#define pcre2_strlen PCRE2_SUFFIX(pcre2_strlen_) -#define pchars PCRE2_SUFFIX(pchars_) -#define ptrunc PCRE2_SUFFIX(ptrunc_) -#define config_str PCRE2_SUFFIX(config_str_) -#define check_modifier PCRE2_SUFFIX(check_modifier_) -#define decode_modifiers PCRE2_SUFFIX(decode_modifiers_) -#define pattern_info PCRE2_SUFFIX(pattern_info_) -#define show_memory_info PCRE2_SUFFIX(show_memory_info_) -#define show_framesize PCRE2_SUFFIX(show_framesize_) -#define show_heapframes_size PCRE2_SUFFIX(show_heapframes_size_) -#define print_error_message_file PCRE2_SUFFIX(print_error_message_file_) -#define print_error_message PCRE2_SUFFIX(print_error_message_) -#define callout_enumerate_function PCRE2_SUFFIX(callout_enumerate_function_) -#define callout_enumerate_function_void PCRE2_SUFFIX(callout_enumerate_function_void_) -#define callout_enumerate_function_fail PCRE2_SUFFIX(callout_enumerate_function_fail_) -#define show_pattern_info PCRE2_SUFFIX(show_pattern_info_) -#define serial_error PCRE2_SUFFIX(serial_error_) -#define process_command PCRE2_SUFFIX(process_command_) -#define process_pattern PCRE2_SUFFIX(process_pattern_) -#define have_active_pattern PCRE2_SUFFIX(have_active_pattern_) -#define free_active_pattern PCRE2_SUFFIX(free_active_pattern_) -#define check_match_limit PCRE2_SUFFIX(check_match_limit_) -#define substitute_callout_function PCRE2_SUFFIX(substitute_callout_function_) -#define substitute_case_callout_function PCRE2_SUFFIX(substitute_case_callout_function_) -#define callout_function PCRE2_SUFFIX(callout_function_) -#define copy_and_get PCRE2_SUFFIX(copy_and_get_) -#define copy_substitute_string PCRE2_SUFFIX(copy_substitute_string_) -#define process_data PCRE2_SUFFIX(process_data_) -#define init_globals PCRE2_SUFFIX(init_globals_) -#define free_globals PCRE2_SUFFIX(free_globals_) -#define unittest PCRE2_SUFFIX(unittest_) - - -/* ---------------------- Mode-dependent variables ------------------------- */ - -static pcre2_code *compiled_code = NULL; -static pcre2_general_context *general_context = NULL, *general_context_copy = NULL; -static pcre2_compile_context *pat_context = NULL, *default_pat_context = NULL; -static pcre2_convert_context *con_context = NULL, *default_con_context = NULL; -static pcre2_match_context *dat_context = NULL, *default_dat_context = NULL; -static pcre2_match_data *match_data = NULL; - -static pcre2_jit_stack *jit_stack = NULL; -static size_t jit_stack_size = 0; - -static pcre2_code *patstack[PATSTACKSIZE]; -static int patstacknext = 0; - -static PCRE2_UCHAR *rep_in_buffer = NULL; -static size_t rep_in_buffer_size = REPLACE_MODSIZE; /* Code units */ -static PCRE2_UCHAR *rep_out_buffer = NULL; -static size_t rep_out_buffer_size = REPLACE_BUFFSIZE; /* Code units */ - - - -/************************************************* -* JIT memory callback * -*************************************************/ - -static pcre2_jit_stack* -jit_callback(void *arg) -{ -jit_was_used = TRUE; -return (pcre2_jit_stack *)arg; -} - - - -/************************************************* -* Compare zero-terminated PCRE2 & 8-bit strings * -*************************************************/ - -static int -pcre2_strcmp_c8(PCRE2_SPTR str1, const char *str2) -{ -PCRE2_UCHAR c1, c2; -while (*str1 != '\0' || *str2 != '\0') - { - c1 = *str1++; - c2 = *str2++; - if (c1 != c2) return ((c1 > c2) << 1) - 1; - } -return 0; -} - - - -/************************************************* -* Find the length of a PCRE2 string * -*************************************************/ - -static size_t -pcre2_strlen(PCRE2_SPTR str) -{ -size_t c = 0; -while (*str++ != 0) c++; -return c; -} - - - -/************************************************* -* Print character string * -*************************************************/ - -/* Must handle Unicode strings in UTF mode. Yields number of characters printed. -For printing *MARK strings, a negative length is given, indicating that the -length is in the first code unit. If handed a NULL file, this function just -counts chars without printing (because pchar() does that). */ - -static int pchars(int clr, PCRE2_SPTR p, ptrdiff_t length, BOOL utf, FILE *f) -{ -#if PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16 -PCRE2_SPTR end; -uint32_t c = 0; -int yield = 0; - -colour_begin(clr, f); - -if (length < 0) length = *p++; -end = p + length; -while (length-- > 0) - { - if (utf) - { - int rc = utf_to_ord(p, end, &c); - if (rc > 0 && rc <= length + 1) /* Mustn't run over the end */ - { - length -= rc - 1; - p += rc; - yield += pchar(c, utf, f); - continue; - } - } - c = *p++; - yield += pchar(c, utf, f); - } - -colour_end(f); -return yield; - -#else -int yield = 0; - -colour_begin(clr, f); - -if (length < 0) length = *p++; -while (length-- > 0) - { - uint32_t c = *p++; - yield += pchar(c, utf, f); - } - -colour_end(f); -return yield; - -#endif -} - - - -/************************************************* -* Print truncated character string * -*************************************************/ - -/* Must handle Unicode strings in UTF mode. Passed the total input string, and -the offset to print from/to. If left is true, prints up to the offset, -truncated; otherwise prints from the offset to the right, truncated. */ - -#if PCRE2_CODE_UNIT_WIDTH == 8 -static void ptrunc_8(int clr, PCRE2_SPTR p, size_t p_len, size_t offset, - BOOL left, BOOL utf, FILE *f) -{ -PCRE2_SPTR start = p + offset; -PCRE2_SPTR end = p + offset; -size_t printed = 0; - -colour_begin(clr, f); - -if (left) - { - while (start > p && printed < 10) - { - printed++; - start--; - if (utf) - { while(start > p && (*start & 0xc0u) == 0x80u) start--; } - } - } -else - { - while (end < p + p_len && printed < 10) - { - printed++; - end++; - if (utf) - { while(end < p + p_len && (*end & 0xc0u) == 0x80u) end++; } - } - } - -if (left && start > p) fprintf(f, "..."); -for (; start < end; start++) fprintf(f, "%c", CHAR_OUTPUT(*start)); -if (!left && end < p + p_len) fprintf(f, "..."); - -colour_end(f); -} - -#elif PCRE2_CODE_UNIT_WIDTH == 16 -static void ptrunc_16(int clr, PCRE2_SPTR p, size_t p_len, size_t offset, - BOOL left, BOOL utf, FILE *f) -{ -PCRE2_SPTR start = p + offset; -PCRE2_SPTR end = p + offset; -size_t printed = 0; - -colour_begin(clr, f); - -if (left) - { - while (start > p && printed < 10) - { - printed++; - start--; - if (utf) - { while(start > p && (*start & 0xfc00u) == 0xdc00u) start--; } - } - } -else - { - while (end < p + p_len && printed < 10) - { - printed++; - end++; - if (utf) - { while(end < p + p_len && (*end & 0xfc00u) == 0xdc00u) end++; } - } - } - -if (left && start > p) fprintf(f, "..."); -while (start < end) - { - uint32_t c; - int rc = utf16_to_ord(start, end, &c); - if (rc < 0) c = *start++; - else start += rc; - if (c > 0xff || (utf && c > 0x7f)) - { - uint8_t u8buff[6]; - int clen = ord_to_utf8(c, u8buff); - fprintf(f, "%.*s", clen, u8buff); - continue; - } - fputc((int)c, f); - } -if (!left && end < p + p_len) fprintf(f, "..."); - -colour_end(f); -} - -#elif PCRE2_CODE_UNIT_WIDTH == 32 -static void ptrunc_32(int clr, PCRE2_SPTR p, size_t p_len, size_t offset, - BOOL left, BOOL utf, FILE *f) -{ -PCRE2_SPTR start = p + offset; -PCRE2_SPTR end = p + offset; - -colour_begin(clr, f); - -if (left) - { - start -= (offset > 10)? 10 : offset; - } -else - { - end += (p + p_len - end > 10)? 10 : p + p_len - end; - } - -if (left && start > p) fprintf(f, "..."); -while (start < end) - { - uint32_t c = *start++; - if (c > 0xff || (utf && c > 0x7f)) - { - uint8_t u8buff[6]; - int clen = ord_to_utf8(c, u8buff); - fprintf(f, "%.*s", clen, u8buff); - continue; - } - fputc((int)c, f); - } -if (!left && end < p + p_len) fprintf(f, "..."); - -colour_end(f); -} -#endif - -#if PCRE2_CODE_UNIT_WIDTH == 16 -/************************************************* -* Convert string to 16-bit * -*************************************************/ - -/* In UTF mode the input is always interpreted as a string of UTF-8 bytes using -the original UTF-8 definition of RFC 2279, which allows for up to 6 bytes, and -code values from 0 to 0x7fffffff. However, values greater than the later UTF -limit of 0x10ffff cause an error. In non-UTF mode the input is interpreted as -UTF-8 if the utf8_input modifier is set, but an error is generated for values -greater than 0xffff. - -If all the input bytes are ASCII, the space needed for a 16-bit string is -exactly double the 8-bit size. Otherwise, the size needed for a 16-bit string -is no more than double, because up to 0xffff uses no more than 3 bytes in UTF-8 -but possibly 4 in UTF-16. Higher values use 4 bytes in UTF-8 and up to 4 bytes -in UTF-16. The result is always left in pbuffer16. Impose a minimum size to -save repeated re-sizing. - -Note that this function does not object to surrogate values. This is -deliberate; it makes it possible to construct UTF-16 strings that are invalid, -for the purpose of testing that they are correctly faulted. - -Arguments: - p points to a byte string - utf true in UTF mode - lenptr points to number of bytes in the string (excluding trailing zero) - -Returns: 0 on success, with the length updated to the number of 16-bit - data items used (excluding the trailing zero) - OR -1 if a UTF-8 string is malformed - OR -2 if a value > 0x10ffff is encountered in UTF mode - OR -3 if a value > 0xffff is encountered when not in UTF mode -*/ - -static int -to16(uint8_t *p, int utf, PCRE2_SIZE *lenptr) -{ -uint16_t *pp; -PCRE2_SIZE len = *lenptr; - -if (pbuffer16_size < 2*len + 2) - { - if (pbuffer16 != NULL) free(pbuffer16); - pbuffer16_size = 2*len + 2; - if (pbuffer16_size < 4096) pbuffer16_size = 4096; - pbuffer16 = (uint16_t *)malloc(pbuffer16_size); - if (pbuffer16 == NULL) - { - cfprintf(clr_test_error, stderr, "pcre2test: malloc(%" SIZ_FORM ") failed for pbuffer16\n", - pbuffer16_size); - exit(1); - } - } - -pp = pbuffer16; -if (!utf && (pat_patctl.control & CTL_UTF8_INPUT) == 0) - { - for (; len > 0; len--) *pp++ = *p++; - } - -else while (len > 0) - { - uint32_t c; - const uint8_t *end = p + len; - int chlen = utf8_to_ord(p, end, &c); - if (chlen <= 0) return -1; - if (!utf && c > 0xffff) return -3; - if (c > 0x10ffff) return -2; - p += chlen; - len -= chlen; - if (c < 0x10000) *pp++ = c; else - { - c -= 0x10000; - *pp++ = 0xd800 | (c >> 10); - *pp++ = 0xdc00 | (c & 0x3ff); - } - } - -*pp = 0; -*lenptr = pp - pbuffer16; -return 0; -} -#endif /* PCRE2_CODE_UNIT_WIDTH == 16 */ - - - -#if PCRE2_CODE_UNIT_WIDTH == 32 -/************************************************* -* Convert string to 32-bit * -*************************************************/ - -/* In UTF mode the input is always interpreted as a string of UTF-8 bytes using -the original UTF-8 definition of RFC 2279, which allows for up to 6 bytes, and -code values from 0 to 0x7fffffff. However, values greater than the later UTF -limit of 0x10ffff cause an error. - -In non-UTF mode the input is interpreted as UTF-8 if the utf8_input modifier -is set, and no limit is imposed. There is special interpretation of the 0xff -byte (which is illegal in UTF-8) in this case: it causes the top bit of the -next character to be set. This provides a way of generating 32-bit characters -greater than 0x7fffffff. - -If all the input bytes are ASCII, the space needed for a 32-bit string is -exactly four times the 8-bit size. Otherwise, the size needed for a 32-bit -string is no more than four times, because the number of characters must be -less than the number of bytes. The result is always left in pbuffer32. Impose a -minimum size to save repeated re-sizing. - -Note that this function does not object to surrogate values. This is -deliberate; it makes it possible to construct UTF-32 strings that are invalid, -for the purpose of testing that they are correctly faulted. - -Arguments: - p points to a byte string - utf true in UTF mode - lenptr points to number of bytes in the string (excluding trailing zero) - -Returns: 0 on success, with the length updated to the number of 32-bit - data items used (excluding the trailing zero) - OR -1 if a UTF-8 string is malformed - OR -2 if a value > 0x10ffff is encountered in UTF mode -*/ - -static int -to32(uint8_t *p, int utf, PCRE2_SIZE *lenptr) -{ -uint32_t *pp; -PCRE2_SIZE len = *lenptr; - -if (pbuffer32_size < 4*len + 4) - { - if (pbuffer32 != NULL) free(pbuffer32); - pbuffer32_size = 4*len + 4; - if (pbuffer32_size < 8192) pbuffer32_size = 8192; - pbuffer32 = (uint32_t *)malloc(pbuffer32_size); - if (pbuffer32 == NULL) - { - cfprintf(clr_test_error, stderr, "pcre2test: malloc(%" SIZ_FORM ") failed for pbuffer32\n", - pbuffer32_size); - exit(1); - } - } - -pp = pbuffer32; -if (!utf && (pat_patctl.control & CTL_UTF8_INPUT) == 0) - { - for (; len > 0; len--) *pp++ = *p++; - } - -else while (len > 0) - { - int chlen; - uint32_t c; - uint32_t topbit = 0; - const uint8_t *end = p + len; - if (!utf && *p == 0xff && len > 1) - { - topbit = 0x80000000u; - p++; - len--; - } - chlen = utf8_to_ord(p, end, &c); - if (chlen <= 0) return -1; - if (utf && c > 0x10ffff) return -2; - p += chlen; - len -= chlen; - *pp++ = c | topbit; - } - -*pp = 0; -*lenptr = pp - pbuffer32; -return 0; -} -#endif /* PCRE2_CODE_UNIT_WIDTH == 32 */ - - - -/************************************************* -* Read a string from pcre2_config() * -*************************************************/ - -/* Read out a version string from pcre2_config(), transcoding it into an -8-bit buffer. - -Arguments: - what the item to read - where the 8-bit buffer to receive the string -*/ - -static void -config_str(uint32_t what, char *where) -{ -int r1, r2; -PCRE2_UCHAR buf[VERSION_SIZE]; - -r1 = pcre2_config(what, NULL); -r2 = pcre2_config(what, buf); -if (r1 < 0 || r1 != r2 || r1 >= VERSION_SIZE) - { - cfprintf(clr_test_error, stderr, "pcre2test: Error in pcre2_config(%d)\n", what); - exit(1); - } - -while (r1-- > 0) where[r1] = (char)buf[r1]; -} - - - -/************************************************* -* Check a modifier and find its field * -*************************************************/ - -/* This function is called when a modifier has been identified. We check that -it is allowed here and find the field that is to be changed. - -Arguments: - m the modifier list entry - ctx CTX_PAT => pattern context - CTX_POPPAT => pattern context for popped pattern - CTX_DEFPAT => default pattern context - CTX_DAT => data context - CTX_DEFDAT => default data context - pctl point to pattern control block - dctl point to data control block - c a single character or 0 - -Returns: a field pointer or NULL -*/ - -static void * -check_modifier(modstruct *m, int ctx, patctl *pctl, datctl *dctl, uint32_t c) -{ -void *field = NULL; -PCRE2_SIZE offset = m->offset; - -if (restrict_for_perl_test) switch(m->which) - { - case MOD_PNDP: - case MOD_PATP: - case MOD_DATP: - case MOD_PDP: - break; - - default: - cfprintf(clr_test_error, outfile, "** \"%s\" is not allowed in a Perl-compatible test\n", - m->name); - return NULL; - } - -switch (m->which) - { - case MOD_CTC: /* Compile context modifier */ - if (ctx == CTX_DEFPAT) field = default_pat_context; - else if (ctx == CTX_PAT) field = pat_context; - break; - - case MOD_CTM: /* Match context modifier */ - if (ctx == CTX_DEFDAT) field = default_dat_context; - else if (ctx == CTX_DAT) field = dat_context; - break; - - case MOD_DAT: /* Data line modifier */ - case MOD_DATP: /* Allowed for Perl test */ - if (dctl != NULL) field = dctl; - break; - - case MOD_PAT: /* Pattern modifier */ - case MOD_PATP: /* Allowed for Perl test */ - if (pctl != NULL) field = pctl; - break; - - case MOD_PD: /* Pattern or data line modifier */ - case MOD_PDP: /* Ditto, allowed for Perl test */ - case MOD_PND: /* Ditto, but not default pattern */ - case MOD_PNDP: /* Ditto, allowed for Perl test */ - if (dctl != NULL) field = dctl; - else if (pctl != NULL && (m->which == MOD_PD || m->which == MOD_PDP || - ctx != CTX_DEFPAT)) - field = pctl; - break; - } - -if (field == NULL) - { - if (c == 0) - cfprintf(clr_test_error, outfile, "** \"%s\" is not valid here\n", m->name); - else - cfprintf(clr_test_error, outfile, "** /%c is not valid here\n", c); - return NULL; - } - -return (char *)field + offset; -} - - - -/************************************************* -* Decode a modifier list * -*************************************************/ - -/* A pointer to a control block is NULL when called in cases when that block is -not relevant. They are never all relevant in one call. At least one of patctl -and datctl is NULL. The second argument specifies which context to use for -modifiers that apply to contexts. - -Arguments: - p point to modifier string - ctx CTX_PAT => pattern context - CTX_POPPAT => pattern context for popped pattern - CTX_DEFPAT => default pattern context - CTX_DAT => data context - CTX_DEFDAT => default data context - pctl point to pattern control block - dctl point to data control block - -Returns: TRUE if successful decode, FALSE otherwise -*/ - -static BOOL -decode_modifiers(uint8_t *p, int ctx, patctl *pctl, datctl *dctl) -{ -uint8_t *ep, *pp; -long li; -unsigned long uli; -BOOL first = TRUE; - -for (;;) - { - void *field; - modstruct *m; - BOOL off = FALSE; - unsigned int i; - size_t len; - int index; - char *endptr; - - /* Skip white space and commas. */ - - while (isspace(*p) || *p == ',') p++; - if (*p == 0) break; - - /* Find the end of the item; lose trailing whitespace at end of line. */ - - for (ep = p; *ep != 0 && *ep != ','; ep++); - if (*ep == 0) - { - while (ep > p && isspace(ep[-1])) ep--; - *ep = 0; - } - - /* Remember if the first character is '-'. */ - - if (*p == '-') - { - off = TRUE; - p++; - } - - /* Find the length of a full-length modifier name, and scan for it. */ - - pp = p; - while (pp < ep && *pp != '=') pp++; - index = scan_modifiers(p, pp - p); - - /* If the first modifier is unrecognized, try to interpret it as a sequence - of single-character abbreviated modifiers. None of these modifiers have any - associated data. They just set options or control bits. */ - - if (index < 0) - { - uint32_t cc; - uint8_t *mp = p; - - if (!first) - { - cfprintf(clr_test_error, outfile, "** Unrecognized modifier \"%.*s\"\n", (int)(ep-p), p); - if (ep - p == 1) - cfprintf(clr_test_error, outfile, "** Single-character modifiers must come first\n"); - return FALSE; - } - - first = FALSE; - - for (cc = *p; cc != ',' && cc != '\n' && cc != 0; cc = *(++p)) - { - for (i = 0; i < C1MODLISTCOUNT; i++) - if (cc == c1modlist[i].onechar) break; - - if (i >= C1MODLISTCOUNT) - { - cfprintf(clr_test_error, outfile, "** Unrecognized modifier '%c' in modifier string " - "\"%.*s\"\n", *p, (int)(ep-mp), mp); - return FALSE; - } - - if (c1modlist[i].index >= 0) - { - index = c1modlist[i].index; - } - - else - { - index = scan_modifiers((const uint8_t *)(c1modlist[i].fullname), - strlen(c1modlist[i].fullname)); - if (index < 0) - { - cfprintf(clr_test_error, outfile, "** Internal error: single-character equivalent " - "modifier \"%s\" not found\n", c1modlist[i].fullname); - return FALSE; - } - c1modlist[i].index = index; /* Cache for next time */ - } - - field = check_modifier(modlist + index, ctx, pctl, dctl, *p); - if (field == NULL) return FALSE; - - /* /x is a special case; a second appearance changes PCRE2_EXTENDED to - PCRE2_EXTENDED_MORE. */ - - if (cc == 'x' && (*((uint32_t *)field) & PCRE2_EXTENDED) != 0) - { - *((uint32_t *)field) &= ~PCRE2_EXTENDED; - *((uint32_t *)field) |= PCRE2_EXTENDED_MORE; - } - else - *((uint32_t *)field) |= modlist[index].value; - } - - continue; /* With the next (fullname) modifier */ - } - - /* We have a match on a full-name modifier. Check for the existence of data - when needed. */ - - m = modlist + index; /* Save typing */ - if (m->type != MOD_CTL && m->type != MOD_OPT && m->type != MOD_OPTMZ && - (m->type != MOD_IND || *pp == '=')) - { - if (*pp++ != '=') - { - cfprintf(clr_test_error, outfile, "** '=' expected after \"%s\"\n", m->name); - return FALSE; - } - if (off) - { - cfprintf(clr_test_error, outfile, "** '-' is not valid for \"%s\"\n", m->name); - return FALSE; - } - } - - /* These on/off types have no data. */ - - else if (*pp != ',' && *pp != '\n' && *pp != ' ' && *pp != 0) - { - cfprintf(clr_test_error, outfile, "** Unrecognized modifier '%.*s'\n", (int)(ep-p), p); - return FALSE; - } - - /* Set the data length for those types that have data. Then find the field - that is to be set. If check_modifier() returns NULL, it has already output an - error message. */ - - len = ep - pp; - field = check_modifier(m, ctx, pctl, dctl, 0); - if (field == NULL) return FALSE; - - /* Process according to data type. */ - - switch (m->type) - { - case MOD_CTL: - case MOD_OPT: - if (off) *((uint32_t *)field) &= ~m->value; - else *((uint32_t *)field) |= m->value; - break; - - case MOD_OPTMZ: - pcre2_set_optimize(field, m->value); - break; - - case MOD_BSR: - if (len == 7 && strncmpic(pp, (const uint8_t *)"default", 7) == 0) - { -#ifdef BSR_ANYCRLF - *((uint16_t *)field) = PCRE2_BSR_ANYCRLF; -#else - *((uint16_t *)field) = PCRE2_BSR_UNICODE; -#endif - if (ctx == CTX_PAT || ctx == CTX_DEFPAT) pctl->control2 &= ~CTL2_BSR_SET; - else dctl->control2 &= ~CTL2_BSR_SET; - } - else - { - if (len == 7 && strncmpic(pp, (const uint8_t *)"anycrlf", 7) == 0) - *((uint16_t *)field) = PCRE2_BSR_ANYCRLF; - else if (len == 7 && strncmpic(pp, (const uint8_t *)"unicode", 7) == 0) - *((uint16_t *)field) = PCRE2_BSR_UNICODE; - else goto INVALID_VALUE; - if (ctx == CTX_PAT || ctx == CTX_DEFPAT) pctl->control2 |= CTL2_BSR_SET; - else dctl->control2 |= CTL2_BSR_SET; - } - pp = ep; - break; - - case MOD_CHR: /* A single character */ - *((uint32_t *)field) = *pp++; - break; - - case MOD_CON: /* A convert type/options list */ - for (;; pp++) - { - uint8_t *colon = (uint8_t *)strchr((const char *)pp, ':'); - len = ((colon != NULL && colon < ep)? colon:ep) - pp; - for (i = 0; i < convertlistcount; i++) - { - if (strncmpic(pp, (const uint8_t *)convertlist[i].name, len) == 0) - { - if (*((uint32_t *)field) == CONVERT_UNSET) - *((uint32_t *)field) = convertlist[i].option; - else - *((uint32_t *)field) |= convertlist[i].option; - break; - } - } - if (i >= convertlistcount) goto INVALID_VALUE; - pp += len; - if (*pp != ':') break; - } - break; - - case MOD_IN2: /* One or two unsigned integers */ - if (!isdigit(*pp)) goto INVALID_VALUE; - uli = strtoul((const char *)pp, &endptr, 10); - if (U32OVERFLOW(uli)) goto INVALID_VALUE; - ((uint32_t *)field)[0] = (uint32_t)uli; - if (*endptr == ':') - { - uli = strtoul((const char *)endptr+1, &endptr, 10); - if (U32OVERFLOW(uli)) goto INVALID_VALUE; - ((uint32_t *)field)[1] = (uint32_t)uli; - } - else ((uint32_t *)field)[1] = 0; - pp = (uint8_t *)endptr; - break; - - /* PCRE2_SIZE_MAX is usually SIZE_MAX, which may be greater, equal to, or - less than ULONG_MAX. So first test for overflowing the long int, and then - test for overflowing PCRE2_SIZE_MAX if it is smaller than ULONG_MAX. */ - - case MOD_SIZ: /* PCRE2_SIZE value */ - if (!isdigit(*pp)) goto INVALID_VALUE; - uli = strtoul((const char *)pp, &endptr, 10); - if (uli == ULONG_MAX) goto INVALID_VALUE; -#if ULONG_MAX > PCRE2_SIZE_MAX - if (uli > PCRE2_SIZE_MAX) goto INVALID_VALUE; -#endif - *((PCRE2_SIZE *)field) = (PCRE2_SIZE)uli; - pp = (uint8_t *)endptr; - break; - - case MOD_IND: /* Unsigned integer with default */ - if (len == 0) - { - *((uint32_t *)field) = (uint32_t)(m->value); - break; - } - PCRE2_FALLTHROUGH /* Fall through */ - - case MOD_INT: /* Unsigned integer */ - if (!isdigit(*pp)) goto INVALID_VALUE; - uli = strtoul((const char *)pp, &endptr, 10); - if (U32OVERFLOW(uli)) goto INVALID_VALUE; - *((uint32_t *)field) = (uint32_t)uli; - pp = (uint8_t *)endptr; - break; - - case MOD_INS: /* Signed integer */ - if (!isdigit(*pp) && *pp != '-') goto INVALID_VALUE; - li = strtol((const char *)pp, &endptr, 10); - if (S32OVERFLOW(li)) goto INVALID_VALUE; - *((int32_t *)field) = (int32_t)li; - pp = (uint8_t *)endptr; - break; - - case MOD_NL: - for (i = 0; i < sizeof(newlines)/sizeof(char *); i++) - if (len == strlen(newlines[i]) && - strncmpic(pp, (const uint8_t *)newlines[i], len) == 0) break; - if (i >= sizeof(newlines)/sizeof(char *)) goto INVALID_VALUE; - if (i == 0) - { - pcre2_set_newline(field, NEWLINE_DEFAULT); - if (ctx == CTX_PAT || ctx == CTX_DEFPAT) pctl->control2 &= ~CTL2_NL_SET; - else dctl->control2 &= ~CTL2_NL_SET; - } - else - { - pcre2_set_newline(field, i); - if (ctx == CTX_PAT || ctx == CTX_DEFPAT) pctl->control2 |= CTL2_NL_SET; - else dctl->control2 |= CTL2_NL_SET; - } - pp = ep; - break; - - case MOD_NN: /* Name or (signed) number; may be several */ - if (isdigit(*pp) || *pp == '-') - { - int ct = MAXCPYGET - 1; - int32_t value; - li = strtol((const char *)pp, &endptr, 10); - if (S32OVERFLOW(li)) goto INVALID_VALUE; - value = (int32_t)li; - field = (char *)field - m->offset + m->value; /* Adjust field ptr */ - if (value >= 0) /* Add new number */ - { - while (*((int32_t *)field) >= 0 && ct-- > 0) /* Skip previous */ - field = (char *)field + sizeof(int32_t); - if (ct <= 0) - { - cfprintf(clr_test_error, outfile, "** Too many numeric \"%s\" modifiers\n", m->name); - return FALSE; - } - } - *((int32_t *)field) = value; - if (ct > 0) ((int32_t *)field)[1] = -1; - pp = (uint8_t *)endptr; - } - - /* Multiple strings are put end to end. */ - - else - { - char *nn = (char *)field; - if (len > 0) /* Add new name */ - { - if (len > MAX_NAME_SIZE) - { - cfprintf(clr_test_error, outfile, "** Group name in \"%s\" is too long\n", m->name); - return FALSE; - } - while (*nn != 0) nn += strlen(nn) + 1; - if (nn + len + 2 - (char *)field > LENCPYGET) - { - cfprintf(clr_test_error, outfile, "** Too many characters in named \"%s\" modifiers\n", - m->name); - return FALSE; - } - memcpy(nn, pp, len); - } - nn[len] = 0 ; - nn[len+1] = 0; - pp = ep; - } - break; - - case MOD_STR: - if (len + 1 > m->value) - { - cfprintf(clr_test_error, outfile, "** Overlong value for \"%s\" (max %d code units)\n", - m->name, m->value - 1); - return FALSE; - } - ((uint8_t *)field)[0] = len; - memcpy(((uint8_t *)field)+1, pp, len); - ((uint8_t *)field)[len+1] = 0; - pp = ep; - break; - } - - if (*pp != ',' && *pp != '\n' && *pp != ' ' && *pp != 0) - { - cfprintf(clr_test_error, outfile, "** Comma expected after modifier item \"%s\"\n", m->name); - return FALSE; - } - - p = pp; - - if (ctx == CTX_POPPAT && - (pctl->options != 0 || - pctl->tables_id != 0 || - pctl->locale[0] != MOD_STR_UNSET || - (pctl->control & NOTPOP_CONTROLS) != 0)) - { - cfprintf(clr_test_error, outfile, "** \"%s\" is not valid here\n", m->name); - return FALSE; - } - } - -return TRUE; - -INVALID_VALUE: -cfprintf(clr_test_error, outfile, "** Invalid value in \"%.*s\"\n", (int)(ep-p), p); -return FALSE; -} - - - -/************************************************* -* Get info from a pattern * -*************************************************/ - -/* A wrapped call to pcre2_pattern_info(), applied to the current compiled -pattern. - -Arguments: - what code for the required information - where where to put the answer - unsetok PCRE2_ERROR_UNSET is an "expected" result - -Returns: the return from pcre2_pattern_info() -*/ - -static int -pattern_info(int what, void *where, BOOL unsetok) -{ -int rc; -(void)pcre2_pattern_info(compiled_code, what, NULL); /* Exercise the code */ -rc = pcre2_pattern_info(compiled_code, what, where); -if (rc >= 0) return 0; -if (rc != PCRE2_ERROR_UNSET || !unsetok) - { - cfprintf(clr_api_error, outfile, "Error %d from " - "pcre2_pattern_info_" STR(PCRE2_CODE_UNIT_WIDTH) "(%d)\n", rc, what); - } -return rc; -} - - - -/************************************************* -* Show memory usage info for a pattern * -*************************************************/ - -static void -show_memory_info(void) -{ -uint32_t name_count, name_entry_size; -PCRE2_SIZE size, cblock_size, data_size; - -cblock_size = sizeof(pcre2_real_code); - -(void)pattern_info(PCRE2_INFO_SIZE, &size, FALSE); -(void)pattern_info(PCRE2_INFO_NAMECOUNT, &name_count, FALSE); -(void)pattern_info(PCRE2_INFO_NAMEENTRYSIZE, &name_entry_size, FALSE); - -/* The uint32_t variables are cast before multiplying to avoid potential - integer overflow. */ -data_size = CU2BYTES((PCRE2_SIZE)name_count * (PCRE2_SIZE)name_entry_size); - -cfprintf(clr_profiling, outfile, "Memory allocation - code size : %" SIZ_FORM "\n", size - - cblock_size - data_size); -if (data_size != 0) - cfprintf(clr_profiling, outfile, "Memory allocation - data size : %" SIZ_FORM "\n", data_size); - -if (pat_patctl.jit != 0) - { - (void)pattern_info(PCRE2_INFO_JITSIZE, &size, FALSE); - cfprintf(clr_profiling, outfile, "Memory allocation - JIT code : %" SIZ_FORM "\n", size); - } -} - - - -/************************************************* -* Show frame size info for a pattern * -*************************************************/ - -static void -show_framesize(void) -{ -PCRE2_SIZE frame_size; -(void)pattern_info(PCRE2_INFO_FRAMESIZE, &frame_size, FALSE); -cfprintf(clr_profiling, outfile, "Frame size for pcre2_match(): %" SIZ_FORM "\n", frame_size); -} - - - -/************************************************* -* Show heapframes size info for a match_data * -*************************************************/ - -static void -show_heapframes_size(void) -{ -PCRE2_SIZE heapframes_size; -heapframes_size = pcre2_get_match_data_heapframes_size(match_data); -cfprintf(clr_profiling, outfile, "Heapframes size in match_data: %" SIZ_FORM "\n", - heapframes_size); -} - - - -/************************************************* -* Get and output an error message * -*************************************************/ - -static BOOL -print_error_message_file(FILE *file, int errorcode, const char *before, - const char *after, BOOL badcode_ok) -{ -int len; -PCRE2_UCHAR buf[128]; - -len = pcre2_get_error_message(errorcode, buf, sizeof(buf)/sizeof(*buf)); -if (len == PCRE2_ERROR_BADDATA && badcode_ok) - { - cfprintf(clr_api_error, file, "%sPCRE2_ERROR_BADDATA (unknown error number)%s", before, - after); - } -else if (len < 0) - { - cfprintf(clr_test_error, file, "\n** pcre2test internal error: cannot interpret error " - "number\n** Unexpected return (%d) from pcre2_get_error_message()\n", len); - } -else if ((unsigned)len != pcre2_strlen(buf)) - { - cfprintf(clr_test_error, file, "\n** pcre2test: unexpected length %d from pcre2_get_error_message()\n", len); - return FALSE; - } -else - { - cfprintf(clr_api_error, file, "%s", before); - pchars(clr_api_error, buf, len, FALSE, file); - cfprintf(clr_api_error, file, "%s", after); - } -return len >= 0; -} - -static BOOL -print_error_message(int errorcode, const char *before, const char *after) -{ -return print_error_message_file(outfile, errorcode, before, after, FALSE); -} - - -/************************************************* -* Callback function for callout enumeration * -*************************************************/ - -/* Testing function to log data inside callout enumeration callbacks. - -Argument: - cb pointer to enumerate block - callout_data user data - -Returns: 0 -*/ - -static int callout_enumerate_function(pcre2_callout_enumerate_block *cb, - void *callout_data) -{ -uint32_t i; -PCRE2_SPTR pattern_string = pbuffer; -BOOL utf = (compiled_code->overall_options & PCRE2_UTF) != 0; -PCRE2_SIZE next_item_length = cb->next_item_length; - -(void)callout_data; /* Not currently displayed */ - -fprintf(outfile, "Callout "); -if (cb->callout_string != NULL) - { - uint32_t delimiter = cb->callout_string[-1]; - fprintf(outfile, "%c", CHAR_OUTPUT(delimiter)); - pchars(clr_none, cb->callout_string, cb->callout_string_length, utf, outfile); - for (i = 0; callout_start_delims[i] != 0; i++) - if (delimiter == callout_start_delims[i]) - { - delimiter = callout_end_delims[i]; - break; - } - fprintf(outfile, "%c ", CHAR_OUTPUT(delimiter)); - } -else fprintf(outfile, "%d ", cb->callout_number); - -if (next_item_length == 0 && pattern_string[cb->pattern_position] != 0) - next_item_length = 1; -pchars(clr_none, pattern_string+cb->pattern_position, next_item_length, utf, outfile); -fprintf(outfile, "\n"); - -return 0; -} - -static int callout_enumerate_function_void(pcre2_callout_enumerate_block *cb, - void *callout_data) -{ -(void)cb; -(void)callout_data; -return 0; -} - -static int callout_enumerate_function_fail(pcre2_callout_enumerate_block *cb, - void *callout_data) -{ -(void)cb; -return *(int *)callout_data; -} - - - -/************************************************* -* Show information about a pattern * -*************************************************/ - -/* This function is called after a pattern has been compiled if any of the -information-requesting controls have been set. - -Arguments: none - -Returns: PR_OK continue processing next line - PR_SKIP skip to a blank line - PR_ABEND abort the pcre2test run -*/ - -static int -show_pattern_info(void) -{ -int rc; -uint32_t compile_options, overall_options, extra_options; -BOOL utf = (compiled_code->overall_options & PCRE2_UTF) != 0; - -if ((pat_patctl.control & CTL_MEMORY) != 0) - show_memory_info(); - -if ((pat_patctl.control2 & CTL2_FRAMESIZE) != 0) - show_framesize(); - -if ((pat_patctl.control & (CTL_BINCODE|CTL_FULLBINCODE)) != 0) - { - fprintf(outfile, "------------------------------------------------------------------\n"); - pcre2_printint(compiled_code, outfile, - (pat_patctl.control & CTL_FULLBINCODE) != 0); - } - -if ((pat_patctl.control & CTL_INFO) != 0) - { - PCRE2_SPTR nametable; - uint8_t *start_bits; - BOOL heap_limit_set, match_limit_set, depth_limit_set; - uint32_t backrefmax, bsr_convention, capture_count, first_ctype, first_cunit, - hasbackslashc, hascrorlf, jchanged, last_ctype, last_cunit, match_empty, - depth_limit, heap_limit, match_limit, minlength, nameentrysize, namecount, - newline_convention; - - /* These info requests may return PCRE2_ERROR_UNSET. */ - - switch(pattern_info(PCRE2_INFO_HEAPLIMIT, &heap_limit, TRUE)) - { - case 0: - heap_limit_set = TRUE; - break; - - case PCRE2_ERROR_UNSET: - heap_limit_set = FALSE; - break; - - default: - return PR_ABEND; - } - - switch(pattern_info(PCRE2_INFO_MATCHLIMIT, &match_limit, TRUE)) - { - case 0: - match_limit_set = TRUE; - break; - - case PCRE2_ERROR_UNSET: - match_limit_set = FALSE; - break; - - default: - return PR_ABEND; - } - - switch(pattern_info(PCRE2_INFO_DEPTHLIMIT, &depth_limit, TRUE)) - { - case 0: - depth_limit_set = TRUE; - break; - - case PCRE2_ERROR_UNSET: - depth_limit_set = FALSE; - break; - - default: - return PR_ABEND; - } - - /* These info requests should always succeed. */ - - if (pattern_info(PCRE2_INFO_BACKREFMAX, &backrefmax, FALSE) + - pattern_info(PCRE2_INFO_BSR, &bsr_convention, FALSE) + - pattern_info(PCRE2_INFO_CAPTURECOUNT, &capture_count, FALSE) + - pattern_info(PCRE2_INFO_FIRSTBITMAP, &start_bits, FALSE) + - pattern_info(PCRE2_INFO_FIRSTCODEUNIT, &first_cunit, FALSE) + - pattern_info(PCRE2_INFO_FIRSTCODETYPE, &first_ctype, FALSE) + - pattern_info(PCRE2_INFO_HASBACKSLASHC, &hasbackslashc, FALSE) + - pattern_info(PCRE2_INFO_HASCRORLF, &hascrorlf, FALSE) + - pattern_info(PCRE2_INFO_JCHANGED, &jchanged, FALSE) + - pattern_info(PCRE2_INFO_LASTCODEUNIT, &last_cunit, FALSE) + - pattern_info(PCRE2_INFO_LASTCODETYPE, &last_ctype, FALSE) + - pattern_info(PCRE2_INFO_MATCHEMPTY, &match_empty, FALSE) + - pattern_info(PCRE2_INFO_MINLENGTH, &minlength, FALSE) + - pattern_info(PCRE2_INFO_NAMECOUNT, &namecount, FALSE) + - pattern_info(PCRE2_INFO_NAMEENTRYSIZE, &nameentrysize, FALSE) + - pattern_info(PCRE2_INFO_NAMETABLE, &nametable, FALSE) + - pattern_info(PCRE2_INFO_NEWLINE, &newline_convention, FALSE) - != 0) - return PR_ABEND; - - fprintf(outfile, "Capture group count = %d\n", capture_count); - - if (backrefmax > 0) - fprintf(outfile, "Max back reference = %d\n", backrefmax); - - if (maxlookbehind > 0) - fprintf(outfile, "Max lookbehind = %d\n", maxlookbehind); - - if (heap_limit_set) - fprintf(outfile, "Heap limit = %u\n", heap_limit); - - if (match_limit_set) - fprintf(outfile, "Match limit = %u\n", match_limit); - - if (depth_limit_set) - fprintf(outfile, "Depth limit = %u\n", depth_limit); - - if (namecount > 0) - { - fprintf(outfile, "Named capture groups:\n"); - for (; namecount > 0; namecount--) - { - size_t length = pcre2_strlen(nametable + IMM2_SIZE); - fprintf(outfile, " "); - - /* In UTF mode the name may be a UTF string containing non-ASCII - letters and digits. We must output it as a UTF-8 string. In non-UTF mode, - use the normal string printing functions, which use escapes for all - non-ASCII characters. */ - - if (utf) - { -#if PCRE2_CODE_UNIT_WIDTH == 32 - PCRE2_SPTR nameptr = nametable + IMM2_SIZE; - while (*nameptr != 0) - { - uint8_t u8buff[6]; - int len = ord_to_utf8(*nameptr++, u8buff); - fprintf(outfile, "%.*s", len, u8buff); - } -#endif -#if PCRE2_CODE_UNIT_WIDTH == 16 - PCRE2_SPTR nameptr = nametable + IMM2_SIZE; - PCRE2_SPTR nameptr_end = nameptr + pcre2_strlen(nameptr); - while (*nameptr != 0) - { - int len; - uint8_t u8buff[6]; - uint32_t c; - int ord_rc = utf16_to_ord(nameptr, nameptr_end, &c); - if (ord_rc > 0) nameptr += ord_rc; - else c = *nameptr++; - len = ord_to_utf8(c, u8buff); - fprintf(outfile, "%.*s", len, u8buff); - } -#endif -#if PCRE2_CODE_UNIT_WIDTH == 8 - fprintf(outfile, "%s", nametable + IMM2_SIZE); -#endif - } - else /* Not UTF mode */ - { - pchars(clr_none, nametable + IMM2_SIZE, length, FALSE, outfile); - } - - while (length++ < nameentrysize - IMM2_SIZE) putc(' ', outfile); - - fprintf(outfile, "%3d\n", GET2(nametable, 0)); - - nametable = nametable + nameentrysize; - } - } - - if (hascrorlf) fprintf(outfile, "Contains explicit CR or LF match\n"); - if (hasbackslashc) fprintf(outfile, "Contains \\C\n"); - if (match_empty) fprintf(outfile, "May match empty string\n"); - - pattern_info(PCRE2_INFO_ARGOPTIONS, &compile_options, FALSE); - pattern_info(PCRE2_INFO_ALLOPTIONS, &overall_options, FALSE); - pattern_info(PCRE2_INFO_EXTRAOPTIONS, &extra_options, FALSE); - - /* Remove UTF/UCP if they were there only because of forbid_utf. This saves - cluttering up the verification output of non-UTF test files. */ - - if ((pat_patctl.options & PCRE2_NEVER_UTF) == 0) - { - compile_options &= ~PCRE2_NEVER_UTF; - overall_options &= ~PCRE2_NEVER_UTF; - } - - if ((pat_patctl.options & PCRE2_NEVER_UCP) == 0) - { - compile_options &= ~PCRE2_NEVER_UCP; - overall_options &= ~PCRE2_NEVER_UCP; - } - - if ((compile_options|overall_options) != 0) - { - if (compile_options == overall_options) - show_compile_options(clr_none, compile_options, "Options:", "\n"); - else - { - show_compile_options(clr_none, compile_options, "Compile options:", "\n"); - show_compile_options(clr_none, overall_options, "Overall options:", "\n"); - } - } - - if (extra_options != 0) - show_compile_extra_options(clr_none, extra_options, "Extra options:", "\n"); - - if (compiled_code->optimization_flags != PCRE2_OPTIMIZATION_ALL) - show_optimize_flags(clr_none, compiled_code->optimization_flags, "Optimizations: ", "\n"); - - if (jchanged) fprintf(outfile, "Duplicate name status changes\n"); - - if ((pat_patctl.control2 & CTL2_BSR_SET) != 0 || - (compiled_code->flags & PCRE2_BSR_SET) != 0) - fprintf(outfile, "\\R matches %s\n", (bsr_convention == PCRE2_BSR_UNICODE)? - "any Unicode newline" : "CR, LF, or CRLF"); - - if ((compiled_code->flags & PCRE2_NL_SET) != 0) - { - switch (newline_convention) - { - case PCRE2_NEWLINE_CR: - fprintf(outfile, "Forced newline is CR\n"); - break; - - case PCRE2_NEWLINE_LF: - fprintf(outfile, "Forced newline is LF\n"); - break; - - case PCRE2_NEWLINE_CRLF: - fprintf(outfile, "Forced newline is CRLF\n"); - break; - - case PCRE2_NEWLINE_ANYCRLF: - fprintf(outfile, "Forced newline is CR, LF, or CRLF\n"); - break; - - case PCRE2_NEWLINE_ANY: - fprintf(outfile, "Forced newline is any Unicode newline\n"); - break; - - case PCRE2_NEWLINE_NUL: - fprintf(outfile, "Forced newline is NUL\n"); - break; - - default: - break; - } - } - - if (first_ctype == 2) - { - fprintf(outfile, "First code unit at start or follows newline\n"); - } - else if (first_ctype == 1) - { - const char *caseless = - ((compiled_code->flags & PCRE2_FIRSTCASELESS) == 0)? - "" : " (caseless)"; - if (first_cunit != 0xff && PRINTABLE(first_cunit)) - fprintf(outfile, "First code unit = \'%c\'%s\n", CHAR_OUTPUT(first_cunit), - caseless); - else - { - fprintf(outfile, "First code unit = "); - if (first_cunit == 0xff) - fprintf(outfile, "\\xff"); - else - pchar(first_cunit, FALSE, outfile); - fprintf(outfile, "%s\n", caseless); - } - } - else if (start_bits != NULL) - { - int input; - int c = 24; - fprintf(outfile, "Starting code units:"); - for (input = 0; input < 256; input++) - { - int i = CHAR_INPUT_HEX(input); - if ((start_bits[i/8] & (1u << (i&7))) != 0) - { - if (c > 75) - { - fprintf(outfile, "\n "); - c = 2; - } - if (PRINTABLE(i) && i != CHAR_SPACE) - { - fprintf(outfile, " %c", CHAR_OUTPUT(i)); - c += 2; - } - else - { - fprintf(outfile, " \\x%02x", CHAR_OUTPUT_HEX(i)); - c += 5; - } - } - } - fprintf(outfile, "\n"); - } - - if (last_ctype != 0) - { - const char *caseless = - ((compiled_code->flags & PCRE2_LASTCASELESS) == 0)? - "" : " (caseless)"; - if (PRINTABLE(last_cunit)) - fprintf(outfile, "Last code unit = \'%c\'%s\n", CHAR_OUTPUT(last_cunit), - caseless); - else - { - fprintf(outfile, "Last code unit = "); - pchar(last_cunit, FALSE, outfile); - fprintf(outfile, "%s\n", caseless); - } - } - - if ((compiled_code->optimization_flags & PCRE2_OPTIM_START_OPTIMIZE) != 0) - fprintf(outfile, "Subject length lower bound = %d\n", minlength); - - if (pat_patctl.jit != 0 && (pat_patctl.control & CTL_JITVERIFY) != 0) - { -#ifdef SUPPORT_JIT - if (compiled_code->executable_jit != NULL) - fprintf(outfile, "JIT compilation was successful\n"); - else - { - cfprintf(clr_api_error, outfile, "JIT compilation was not successful"); - if (jitrc != 0 && !print_error_message(jitrc, " (", ")")) - return PR_ABEND; - fprintf(outfile, "\n"); - } -#else - cfprintf(clr_api_error, outfile, "JIT support is not available in this version of PCRE2\n"); -#endif - } - } - -rc = pcre2_callout_enumerate(compiled_code, - ((pat_patctl.control & CTL_CALLOUT_INFO) != 0)? callout_enumerate_function : - /* Exercise the callout enumeration code with a dummy callback to make sure - it works. */ - callout_enumerate_function_void, NULL); -if (rc != 0) - { - cfprintf(clr_api_error, outfile, "Callout enumerate failed: error %d: ", rc); - if (rc < 0 && !print_error_message(rc, "", "\n")) - return PR_ABEND; - return PR_SKIP; - } - -return PR_OK; -} - - - -/************************************************* -* Handle serialization error * -*************************************************/ - -/* Print an error message after a serialization failure. - -Arguments: - rc the error code - msg an initial message for what failed - -Returns: FALSE if print_error_message() fails -*/ - -static BOOL -serial_error(int rc, const char *msg) -{ -cfprintf(clr_api_error, outfile, "%s failed: error %d: ", msg, rc); -return print_error_message(rc, "", "\n"); -} - - - -/************************************************* -* Process command line * -*************************************************/ - -/* This function is called for lines beginning with # and a character that is -not ! or whitespace, when encountered between tests, which means that there is -no compiled pattern (compiled_code is NULL). The line is in buffer. - -Arguments: none - -Returns: PR_OK continue processing next line - PR_SKIP skip to a blank line - PR_ABEND abort the pcre2test run -*/ - -static int -process_command(void) -{ -FILE *f; -PCRE2_SIZE serial_size; -size_t i; -int rc, cmd, yield; -uint16_t first_listed_newline; -const char *cmdname; -size_t cmdlen; -uint8_t *argptr, *serial; -BOOL if_inverted; - -yield = PR_OK; -cmd = CMD_UNKNOWN; -cmdlen = 0; - -for (i = 0; i < cmdlistcount; i++) - { - cmdname = cmdlist[i].name; - cmdlen = strlen(cmdname); - if (strncmp((char *)(buffer+1), cmdname, cmdlen) == 0 && - (buffer[cmdlen+1] == 0 || isspace(buffer[cmdlen+1]))) - { - cmd = cmdlist[i].value; - break; - } - } - -if (preprocess_only && cmd != CMD_IF && cmd != CMD_ENDIF) - return PR_OK; - -argptr = buffer + cmdlen + 1; - -if (restrict_for_perl_test && cmd != CMD_PATTERN && cmd != CMD_SUBJECT && - cmd != CMD_IF && cmd != CMD_ENDIF) - { - cfprintf(clr_test_error, outfile, "** #%s is not allowed after #perltest\n", cmdname); - return PR_ABEND; - } - -switch(cmd) - { - case CMD_UNKNOWN: - cfprintf(clr_test_error, outfile, "** Unknown command: %s", buffer); - break; - - case CMD_FORBID_UTF: - forbid_utf = PCRE2_NEVER_UTF|PCRE2_NEVER_UCP; - break; - - case CMD_PERLTEST: - restrict_for_perl_test = TRUE; - break; - - /* Set default pattern modifiers */ - - case CMD_PATTERN: - (void)decode_modifiers(argptr, CTX_DEFPAT, &def_patctl, NULL); - if (def_patctl.jit == 0 && (def_patctl.control & CTL_JITVERIFY) != 0) - def_patctl.jit = JIT_DEFAULT; - break; - - /* Set default subject modifiers */ - - case CMD_SUBJECT: - (void)decode_modifiers(argptr, CTX_DEFDAT, NULL, &def_datctl); - break; - - /* Check the default newline, and if not one of those listed, set up the - first one to be forced. An empty list unsets. */ - - case CMD_NEWLINE_DEFAULT: - local_newline_default = 0; /* Unset */ - first_listed_newline = 0; - for (;;) - { - while (isspace(*argptr)) argptr++; - if (*argptr == 0) break; - for (uint16_t j = 1; j < sizeof(newlines)/sizeof(char *); j++) - { - size_t nlen = strlen(newlines[j]); - if (strncmpic(argptr, (const uint8_t *)newlines[j], nlen) == 0 && - isspace(argptr[nlen])) - { - if (j == NEWLINE_DEFAULT) return PR_OK; /* Default is valid */ - if (first_listed_newline == 0) first_listed_newline = j; - } - } - while (*argptr != 0 && !isspace(*argptr)) argptr++; - } - local_newline_default = first_listed_newline; - break; - - /* Pop or copy a compiled pattern off the stack. Modifiers that do not affect - the compiled pattern (e.g. to give information) are permitted. The default - pattern modifiers are ignored. */ - - case CMD_POP: - case CMD_POPCOPY: - if (patstacknext <= 0) - { - cfprintf(clr_test_error, outfile, "** Can't pop off an empty stack\n"); - return PR_SKIP; - } - patctl_zero(&pat_patctl); /* Completely unset */ - if (!decode_modifiers(argptr, CTX_POPPAT, &pat_patctl, NULL)) - return PR_SKIP; - - if (cmd == CMD_POP) - { - compiled_code = patstack[--patstacknext]; - } - else - { - compiled_code = pcre2_code_copy(patstack[patstacknext - 1]); - } - - if (pat_patctl.jit != 0) - { - jitrc = pcre2_jit_compile(compiled_code, pat_patctl.jit); - } - - rc = show_pattern_info(); - if (rc != PR_OK) return rc; - break; - - /* Save the stack of compiled patterns to a file, then empty the stack. */ - - case CMD_SAVE: - if (patstacknext <= 0) - { - cfprintf(clr_test_error, outfile, "** No stacked patterns to save\n"); - return PR_OK; - } - - rc = open_file(argptr+1, BINARY_OUTPUT_MODE, &f, "#save"); - if (rc != PR_OK) return rc; - - rc = pcre2_serialize_encode((const pcre2_code **)patstack, patstacknext, - &serial, &serial_size, general_context); - if (rc < 0) - { - fclose(f); - if (!serial_error(rc, "Serialization")) return PR_ABEND; - break; - } - - /* Write the length at the start of the file to make it straightforward to - get the right memory when re-loading. This saves having to read the file size - in different operating systems. To allow for different endianness (even - though reloading with the opposite endianness does not work), write the - length byte-by-byte. */ - - for (i = 0; i < 4; i++) fputc((serial_size >> (i*8)) & 255, f); - if (fwrite(serial, 1, serial_size, f) != serial_size) - { - cfprintf(clr_test_error, outfile, "** Wrong return from fwrite()\n"); - fclose(f); - return PR_ABEND; - } - - fclose(f); - pcre2_serialize_free(serial); - while(patstacknext > 0) - { - compiled_code = patstack[--patstacknext]; - pcre2_code_free(compiled_code); - } - compiled_code = NULL; - break; - - /* Load a set of compiled patterns from a file onto the stack */ - - case CMD_LOAD: - rc = open_file(argptr+1, BINARY_INPUT_MODE, &f, "#load"); - if (rc != PR_OK) return rc; - - serial_size = 0; - for (i = 0; i < 4; i++) serial_size |= fgetc(f) << (i*8); - - serial = malloc(serial_size); - if (serial == NULL) - { - cfprintf(clr_test_error, outfile, "** Failed to get memory (size %" SIZ_FORM ") for #load\n", - serial_size); - fclose(f); - return PR_ABEND; - } - - i = fread(serial, 1, serial_size, f); - fclose(f); - - if (i != serial_size) - { - cfprintf(clr_test_error, outfile, "** Wrong return from fread()\n"); - yield = PR_ABEND; - } - else - { - rc = pcre2_serialize_get_number_of_codes(serial); - if (rc < 0) - { - if (!serial_error(rc, "Get number of codes")) yield = PR_ABEND; - } - else - { - if (rc + patstacknext > PATSTACKSIZE) - { - cfprintf(clr_test_error, outfile, "** Not enough space on pattern stack for %d pattern%s\n", - rc, (rc == 1)? "" : "s"); - rc = PATSTACKSIZE - patstacknext; - cfprintf(clr_test_error, outfile, "** Decoding %d pattern%s\n", rc, - (rc == 1)? "" : "s"); - } - rc = pcre2_serialize_decode(patstack + patstacknext, rc, serial, - general_context); - if (rc < 0) - { - if (!serial_error(rc, "Deserialization")) yield = PR_ABEND; - } - else patstacknext += rc; - } - } - - free(serial); - break; - - /* Load a set of binary tables into tables3. */ - - case CMD_LOADTABLES: - rc = open_file(argptr+1, BINARY_INPUT_MODE, &f, "#loadtables"); - if (rc != PR_OK) return rc; - - if (tables3 == NULL) - { - int r; - r = pcre2_config(PCRE2_CONFIG_TABLES_LENGTH, &loadtables_length); - if (r >= 0) tables3 = malloc(loadtables_length); - } - - if (tables3 == NULL) - { - cfprintf(clr_test_error, outfile, "** Failed: malloc/config for #loadtables\n"); - yield = PR_ABEND; - } - else if (fread(tables3, 1, loadtables_length, f) != loadtables_length) - { - cfprintf(clr_test_error, outfile, "** Wrong return from fread()\n"); - yield = PR_ABEND; - } - - fclose(f); - break; - - case CMD_IF: - if (inside_if) - { - cfprintf(clr_test_error, outfile, "** Nested #if not supported\n"); - return PR_ABEND; - } - - while (isspace(*argptr)) argptr++; - if_inverted = FALSE; - if (*argptr == '!') - { - argptr++; - if_inverted = TRUE; - } - while (isspace(*argptr)) argptr++; - for (i = 0; i < COPTLISTCOUNT; i++) - { - size_t optlen = strlen(coptlist[i].name); - const uint8_t *argptr_trail; - if (coptlist[i].type != CONF_FIX) - continue; - if (strncmp((const char*)argptr, coptlist[i].name, optlen) != 0) - continue; - argptr_trail = argptr + optlen; - while (isspace(*argptr_trail)) argptr_trail++; - if (*argptr_trail == 0 || *argptr_trail == '\n') - break; - } - if (i == COPTLISTCOUNT) - { - cfprintf(clr_test_error, outfile, "** Unknown condition: %s\n", buffer); - return PR_ABEND; - } - - /* Condition FALSE - skip this line and everything until #endif. */ - if ((coptlist[i].value != 0) == if_inverted) - yield = PR_ENDIF; - - inside_if = TRUE; - break; - - case CMD_ENDIF: - if (!inside_if) - { - cfprintf(clr_test_error, outfile, "** Unexpected #endif\n"); - return PR_ABEND; - } - inside_if = FALSE; - break; - } - -return yield; -} - - - -/************************************************* -* Process pattern line * -*************************************************/ - -/* This function is called when the input buffer contains the start of a -pattern. The first character is known to be a valid delimiter. The pattern is -read, modifiers are interpreted, and a suitable local context is set up for -this test. The pattern is then compiled. - -Arguments: none - -Returns: PR_OK continue processing next line - PR_SKIP skip to a blank line - PR_ABEND abort the pcre2test run -*/ - -static int -process_pattern(void) -{ -BOOL utf; -uint32_t k; -uint8_t *p = buffer; -unsigned int delimiter = *p++; -int rc, errorcode; -pcre2_compile_context *use_pat_context; -PCRE2_SPTR use_pbuffer; -uint32_t use_forbid_utf = forbid_utf; -PCRE2_SIZE patlen, full_patlen; -PCRE2_SIZE valgrind_access_length; -PCRE2_SIZE erroroffset; - -/* The perltest.sh script supports only / as a delimiter. */ - -if (restrict_for_perl_test && delimiter != '/') - { - cfprintf(clr_test_error, outfile, "** The only allowed delimiter after #perltest is '/'\n"); - return PR_ABEND; - } - -/* Initialize the context and pattern/data controls for this test from the -defaults. */ - -memcpy(pat_context, default_pat_context, sizeof(pcre2_compile_context)); -memcpy(&pat_patctl, &def_patctl, sizeof(patctl)); - -/* Find the end of the pattern, reading more lines if necessary. */ - -for(;;) - { - while (*p != 0) - { - if (*p == '\\' && p[1] != 0) p++; - else if (*p == delimiter) break; - p++; - } - if (*p != 0) break; - if ((p = extend_inputline(infile, p, " > ")) == NULL) - { - cfprintf(clr_test_error, outfile, "** Unexpected EOF\n"); - return PR_ABEND; - } - if (!INTERACTIVE(infile)) cfprintf(clr_input, outfile, "%s", (char *)p); - } - -/* If the first character after the delimiter is backslash, make the pattern -end with backslash. This is purely to provide a way of testing for the error -message when a pattern ends with backslash. */ - -if (p[1] == '\\') *p++ = '\\'; - -/* Terminate the pattern at the delimiter, and compute the length. */ - -*p++ = 0; -patlen = p - buffer - 2; - -/* Look for modifiers and options after the final delimiter. */ - -if (!decode_modifiers(p, CTX_PAT, &pat_patctl, NULL)) return PR_SKIP; - -/* Note that the match_invalid_utf option also sets utf when passed to -pcre2_compile(). */ - -utf = (pat_patctl.options & (PCRE2_UTF|PCRE2_MATCH_INVALID_UTF)) != 0; - -/* The utf8_input modifier is not allowed in 8-bit mode, and is mutually -exclusive with the utf modifier. */ - -if ((pat_patctl.control & CTL_UTF8_INPUT) != 0) - { -#if PCRE2_CODE_UNIT_WIDTH == 8 - cfprintf(clr_test_error, outfile, "** The utf8_input modifier is not allowed in 8-bit mode\n"); - return PR_SKIP; -#else - if (utf) - { - cfprintf(clr_test_error, outfile, "** The utf and utf8_input modifiers are mutually exclusive\n"); - return PR_SKIP; - } -#endif - } - -/* The convert and posix modifiers are mutually exclusive. */ - -if (pat_patctl.convert_type != CONVERT_UNSET && - (pat_patctl.control & CTL_POSIX) != 0) - { - cfprintf(clr_test_error, outfile, "** The convert and posix modifiers are mutually exclusive\n"); - return PR_SKIP; - } - -/* Check for mutually exclusive control modifiers. At present, these are all in -the first control word. */ - -for (k = 0; k < sizeof(exclusive_pat_controls)/sizeof(uint32_t); k++) - { - uint32_t c = pat_patctl.control & exclusive_pat_controls[k]; - if (c != 0 && c != (c & (~c+1))) - { - show_controls(clr_test_error, c, 0, "** Not allowed together:"); - fprintf(outfile, "\n"); - return PR_SKIP; - } - } - -/* Assume full JIT compile for jitverify and/or jitfast if nothing else was -specified. */ - -if (pat_patctl.jit == 0 && - (pat_patctl.control & (CTL_JITVERIFY|CTL_JITFAST)) != 0) - pat_patctl.jit = JIT_DEFAULT; - -/* Now copy the pattern to pbuffer8 for use in 8-bit testing. Convert from hex -if requested (literal strings in quotes may be present within the hexadecimal -pairs). The result must necessarily be fewer characters so will always fit in -pbuffer8. */ - -if ((pat_patctl.control & CTL_HEXPAT) != 0) - { - uint8_t *pp, *pt; - uint32_t c, d; - - pt = pbuffer8; - for (pp = buffer + 1; *pp != 0; pp++) - { - if (isspace(*pp)) continue; - c = *pp++; - - /* Handle a literal substring */ - - if (c == '\'' || c == '"') - { - uint8_t *pq = pp; - for (;; pp++) - { - d = *pp; - if (d == 0) - { - cfprintf(clr_test_error, outfile, "** Missing closing quote in hex pattern: " - "opening quote is at offset %" PTR_FORM ".\n", pq - buffer - 2); - return PR_SKIP; - } - if (d == c) break; - *pt++ = d; - } - } - - /* Expect a hex pair */ - - else - { - if (!isxdigit(c)) - { - cfprintf(clr_test_error, outfile, "** Unexpected non-hex-digit '%c' at offset %" - PTR_FORM " in hex pattern: quote missing?\n", c, pp - buffer - 2); - return PR_SKIP; - } - if (*pp == 0) - { - cfprintf(clr_test_error, outfile, "** Odd number of digits in hex pattern\n"); - return PR_SKIP; - } - d = *pp; - if (!isxdigit(d)) - { - cfprintf(clr_test_error, outfile, "** Unexpected non-hex-digit '%c' at offset %" - PTR_FORM " in hex pattern: quote missing?\n", d, pp - buffer - 1); - return PR_SKIP; - } - c = toupper(c); - d = toupper(d); - c = isdigit(c)? (c - '0') : (c - 'A' + 10); - d = isdigit(d)? (d - '0') : (d - 'A' + 10); - *pt++ = CHAR_OUTPUT(CHAR_INPUT_HEX((c << 4) + d)); - } - } - *pt = 0; - patlen = pt - pbuffer8; - } - -/* If not a hex string, process for repetition expansion if requested. */ - -else if ((pat_patctl.control & CTL_EXPAND) != 0) - { - uint8_t *pp, *pt; - - pt = pbuffer8; - for (pp = buffer + 1; *pp != 0; pp++) - { - uint8_t *pc = pp; - uint32_t count = 1; - size_t length = 1; - - /* Check for replication syntax; if not found, the defaults just set will - prevail and one character will be copied. */ - - if (pp[0] == '\\' && pp[1] == '[') - { - uint8_t *pe; - for (pe = pp + 2; *pe != 0; pe++) - { - if (pe[0] == ']' && pe[1] == '{') - { - size_t clen = pe - pc - 2; - uint32_t i = 0; - unsigned long uli; - char *endptr; - - pe += 2; - uli = strtoul((const char *)pe, &endptr, 10); - if (U32OVERFLOW(uli)) - { - cfprintf(clr_test_error, outfile, "** Pattern repeat count too large\n"); - return PR_SKIP; - } - - i = (uint32_t)uli; - pe = (uint8_t *)endptr; - if (*pe == '}') - { - if (i == 0) - { - cfprintf(clr_test_error, outfile, "** Zero repeat not allowed\n"); - return PR_SKIP; - } - pc += 2; - count = i; - length = clen; - pp = pe; - break; - } - } - } - } - - /* Add to output. If the buffer is too small expand it. The function for - expanding buffers always keeps buffer and pbuffer8 in step as far as their - size goes. */ - - while (pt + count * length > pbuffer8 + pbuffer8_size) - { - size_t pc_offset = pc - buffer; - size_t pp_offset = pp - buffer; - size_t pt_offset = pt - pbuffer8; - expand_input_buffers(); - pc = buffer + pc_offset; - pp = buffer + pp_offset; - pt = pbuffer8 + pt_offset; - } - - for (; count > 0; count--) - { - memcpy(pt, pc, length); - pt += length; - } - } - - *pt = 0; - patlen = pt - pbuffer8; - - if ((pat_patctl.control & CTL_INFO) != 0) - fprintf(outfile, "Expanded: %s\n", pbuffer8); - } - -/* Neither hex nor expanded, just copy the input verbatim. */ - -else - { - strncpy((char *)pbuffer8, (char *)(buffer+1), patlen + 1); - } - -/* Sort out character tables */ - -if (pat_patctl.locale[0] != MOD_STR_UNSET) - { - if (pat_patctl.tables_id != 0) - { - cfprintf(clr_test_error, outfile, "** 'Locale' and 'tables' must not both be set\n"); - return PR_SKIP; - } - if (setlocale(LC_CTYPE, (const char *)pat_patctl.locale+1) == NULL) - { - cfprintf(clr_test_error, outfile, "** Failed to set locale \"%s\"\n", pat_patctl.locale+1); - return PR_SKIP; - } - if (strcmp((const char *)pat_patctl.locale+1, (const char *)locale_name) != 0) - { - strncpy((char *)locale_name, (char *)pat_patctl.locale + 1, sizeof(locale_name)); - locale_name[sizeof(locale_name) - 1] = '\0'; - if (locale_tables != NULL) - { - pcre2_maketables_free(general_context, locale_tables); - } - locale_tables = pcre2_maketables(general_context); - } - use_tables = locale_tables; - } - -else switch (pat_patctl.tables_id) - { - case 0: use_tables = NULL; break; - case 1: use_tables = tables1; break; - case 2: use_tables = tables2; break; - - case 3: - if (tables3 == NULL) - { - cfprintf(clr_test_error, outfile, "** 'Tables = 3' is invalid: binary tables have not " - "been loaded\n"); - return PR_SKIP; - } - use_tables = tables3; - break; - - default: - cfprintf(clr_test_error, outfile, "** 'Tables' must specify 0, 1, 2, or 3.\n"); - return PR_SKIP; - } - -pcre2_set_character_tables(pat_context, use_tables); - -/* Set up for the stackguard test. */ - -if (pat_patctl.stackguard_test != 0) - { - pcre2_set_compile_recursion_guard(pat_context, stack_guard, NULL); - } - -/* Handle compiling via the POSIX interface, which doesn't support the -timing, showing, or debugging options, nor the ability to pass over -local character tables. Neither does it have 16-bit or 32-bit support. */ - -if ((pat_patctl.control & CTL_POSIX) != 0) - { -#if PCRE2_CODE_UNIT_WIDTH != 8 - cfprintf(clr_test_error, outfile, "** The POSIX interface is available only in 8-bit mode\n"); - return PR_SKIP; - -#else - int cflags = 0; - const char *msg = "** Ignored with POSIX interface:"; - - /* Check for features that the POSIX interface does not support. */ - - if (pat_patctl.locale[0] != MOD_STR_UNSET) prmsg(&msg, "locale"); - if (pat_patctl.replacement[0] != MOD_STR_UNSET) prmsg(&msg, "replace"); - if (pat_patctl.tables_id != 0) prmsg(&msg, "tables"); - if (pat_patctl.stackguard_test != 0) prmsg(&msg, "stackguard"); - if (timeit > 0) prmsg(&msg, "timing"); - if (pat_patctl.jit != 0) prmsg(&msg, "JIT"); - - if ((pat_patctl.options & ~POSIX_SUPPORTED_COMPILE_OPTIONS) != 0) - { - show_compile_options( - clr_test_error, - pat_patctl.options & (uint32_t)(~POSIX_SUPPORTED_COMPILE_OPTIONS), - msg, ""); - msg = ""; - } - - if ((pat_context->extra_options & - (uint32_t)(~POSIX_SUPPORTED_COMPILE_EXTRA_OPTIONS)) != 0) - { - show_compile_extra_options( - clr_test_error, - pat_context->extra_options & - (uint32_t)(~POSIX_SUPPORTED_COMPILE_EXTRA_OPTIONS), - msg, ""); - msg = ""; - } - - if ((pat_patctl.control & (uint32_t)(~POSIX_SUPPORTED_COMPILE_CONTROLS)) != 0 || - (pat_patctl.control2 & (uint32_t)(~POSIX_SUPPORTED_COMPILE_CONTROLS2)) != 0) - { - show_controls( - clr_test_error, - pat_patctl.control & (uint32_t)(~POSIX_SUPPORTED_COMPILE_CONTROLS), - pat_patctl.control2 & (uint32_t)(~POSIX_SUPPORTED_COMPILE_CONTROLS2), - msg); - msg = ""; - - /* Remove ignored options so as not to get a repeated message for those - that are actually subject controls. */ - - pat_patctl.control &= (uint32_t)(POSIX_SUPPORTED_COMPILE_CONTROLS); - pat_patctl.control2 &= (uint32_t)(POSIX_SUPPORTED_COMPILE_CONTROLS2); - } - - if (local_newline_default != 0) prmsg(&msg, "#newline_default"); - if (pat_context->max_pattern_length != PCRE2_UNSET) - prmsg(&msg, "max_pattern_length"); - if (pat_context->max_pattern_compiled_length != PCRE2_UNSET) - prmsg(&msg, "max_pattern_compiled_length"); - if (pat_context->parens_nest_limit != PARENS_NEST_DEFAULT) - prmsg(&msg, "parens_nest_limit"); - - if (msg[0] == 0) fprintf(outfile, "\n"); - - /* Translate PCRE2 options to POSIX options and then compile. */ - - if (utf) cflags |= REG_UTF; - if ((pat_patctl.control & CTL_POSIX_NOSUB) != 0) cflags |= REG_NOSUB; - if ((pat_patctl.options & PCRE2_UCP) != 0) cflags |= REG_UCP; - if ((pat_patctl.options & PCRE2_CASELESS) != 0) cflags |= REG_ICASE; - if ((pat_patctl.options & PCRE2_LITERAL) != 0) cflags |= REG_NOSPEC; - if ((pat_patctl.options & PCRE2_MULTILINE) != 0) cflags |= REG_NEWLINE; - if ((pat_patctl.options & PCRE2_DOTALL) != 0) cflags |= REG_DOTALL; - if ((pat_patctl.options & PCRE2_UNGREEDY) != 0) cflags |= REG_UNGREEDY; - - if ((pat_patctl.control & (CTL_HEXPAT|CTL_USE_LENGTH)) != 0) - { - preg.re_endp = (char *)pbuffer8 + patlen; - cflags |= REG_PEND; - } - -#if defined(EBCDIC) && !EBCDIC_IO - ascii_to_ebcdic_str(pbuffer8, patlen); -#endif - - rc = regcomp(&preg, (char *)pbuffer8, cflags); - - /* Compiling failed */ - - if (rc != 0) - { - char *regbuffer; - size_t bsize, usize, strsize; - - preg.re_pcre2_code = NULL; /* In case something was left in there */ - preg.re_match_data = NULL; - - bsize = (pat_patctl.regerror_buffsize >= 0 && - (unsigned)pat_patctl.regerror_buffsize <= pbuffer8_size)? - (unsigned)pat_patctl.regerror_buffsize : pbuffer8_size; - regbuffer = (char *)pbuffer8 + (pbuffer8_size - bsize); - usize = regerror(rc, &preg, regbuffer, bsize); - strsize = ((usize > bsize)? bsize : usize) - 1; - - cfprintf(clr_api_error, outfile, "Failed: POSIX code %d: ", rc); - if (bsize > 0) pchars(clr_api_error, (PCRE2_SPTR8)regbuffer, strsize, utf, outfile); - fputs("\n", outfile); - if (usize > bsize) - { - cfprintf(clr_test_error, outfile, "** regerror() message truncated\n"); - } - if (bsize > 0 && strlen(regbuffer) != strsize) - { - cfprintf(clr_test_error, outfile, "** regerror() strlen incorrect\n"); - return PR_ABEND; - } - return PR_SKIP; - } - - /* Compiling succeeded. Check that the values in the preg block are sensible. - It can happen that pcre2test is accidentally linked with a different POSIX - library which succeeds, but of course puts different things into preg. In - this situation, calling regfree() may cause a segfault (or invalid free() in - valgrind), so ensure that preg.re_pcre2_code is NULL, which suppresses the - calling of regfree() on exit. */ - - if (preg.re_pcre2_code == NULL || - ((pcre2_real_code_8 *)preg.re_pcre2_code)->magic_number != MAGIC_NUMBER || - ((pcre2_real_code_8 *)preg.re_pcre2_code)->top_bracket != preg.re_nsub || - preg.re_match_data == NULL || - preg.re_cflags != cflags) - { - cfprintf(clr_test_error, outfile, - "** The regcomp() function returned zero (success), but the values set\n" - "** in the preg block are not valid for PCRE2. Check that pcre2test is\n" - "** linked with PCRE2's pcre2posix module (-lpcre2-posix) and not with\n" - "** some other POSIX regex library.\n**\n"); - preg.re_pcre2_code = NULL; - return PR_ABEND; - } - - return PR_OK; -#endif /* PCRE2_CODE_UNIT_WIDTH != 8 */ - } - -/* Handle compiling via the native interface. Controls that act later are -ignored with "push". Replacements are locked out. */ - -if ((pat_patctl.control & (CTL_PUSH|CTL_PUSHCOPY|CTL_PUSHTABLESCOPY)) != 0) - { - if (pat_patctl.replacement[0] != MOD_STR_UNSET) - { - cfprintf(clr_test_error, outfile, "** Replacement text is not supported with 'push'.\n"); - return PR_OK; - } - if ((pat_patctl.control & ~PUSH_SUPPORTED_COMPILE_CONTROLS) != 0 || - (pat_patctl.control2 & ~PUSH_SUPPORTED_COMPILE_CONTROLS2) != 0) - { - show_controls(clr_test_error, pat_patctl.control & ~PUSH_SUPPORTED_COMPILE_CONTROLS, - pat_patctl.control2 & ~PUSH_SUPPORTED_COMPILE_CONTROLS2, - "** Ignored when compiled pattern is stacked with 'push':"); - fprintf(outfile, "\n"); - } - if ((pat_patctl.control & PUSH_COMPILE_ONLY_CONTROLS) != 0 || - (pat_patctl.control2 & PUSH_COMPILE_ONLY_CONTROLS2) != 0) - { - show_controls(clr_test_error, pat_patctl.control & PUSH_COMPILE_ONLY_CONTROLS, - pat_patctl.control2 & PUSH_COMPILE_ONLY_CONTROLS2, - "** Applies only to compile when pattern is stacked with 'push':"); - fprintf(outfile, "\n"); - } - } - -/* Convert the input in non-8-bit modes. */ - -errorcode = 0; - -#if defined(EBCDIC) && !EBCDIC_IO -ascii_to_ebcdic_str(pbuffer8, patlen); -#endif - -#if PCRE2_CODE_UNIT_WIDTH != 8 -errorcode = G(to,PCRE2_CODE_UNIT_WIDTH)(pbuffer8, utf, &patlen); -switch(errorcode) - { - case -1: - cfprintf(clr_test_error, outfile, "** Failed: invalid UTF-8 string cannot be " - "converted to " STR(PCRE2_CODE_UNIT_WIDTH) "-bit string\n"); - return PR_SKIP; - - case -2: - cfprintf(clr_test_error, outfile, "** Failed: character value greater than 0x10ffff " - "cannot be converted to UTF\n"); - return PR_SKIP; - - case -3: - cfprintf(clr_test_error, outfile, "** Failed: character value greater than 0xffff " - "cannot be converted to 16-bit in non-UTF mode\n"); - return PR_SKIP; - - default: - break; - } -#endif - -/* When valgrind is supported, detect accesses to the 8-bit buffer now that we -have finished with it. */ - -#if defined SUPPORT_VALGRIND && PCRE2_CODE_UNIT_WIDTH != 8 -VALGRIND_MAKE_MEM_UNDEFINED(pbuffer8, pbuffer8_size); -#endif - -/* The pattern is now in pbuffer[8|16|32], with the length in code units in -patlen. If it is to be converted, copy the result back afterwards so that it -ends up back in the usual place. */ - -if (pat_patctl.convert_type != CONVERT_UNSET) - { - int convert_return = PR_OK; - uint32_t convert_options = pat_patctl.convert_type; - PCRE2_UCHAR *converted_pattern; - PCRE2_SIZE converted_length = JUNK_OFFSET; - BOOL zero_terminate; - - if (pat_patctl.convert_length != CONVERT_UNSET) - { - converted_length = pat_patctl.convert_length; - converted_pattern = malloc(converted_length? CU2BYTES(converted_length) : 1); - if (converted_pattern == NULL) - { - cfprintf(clr_test_error, outfile, "** Failed: malloc failed for converted pattern\n"); - return PR_ABEND; - } - } - else converted_pattern = NULL; /* Let the library allocate */ - - if (utf) convert_options |= PCRE2_CONVERT_UTF; - if ((pat_patctl.options & PCRE2_NO_UTF_CHECK) != 0) - convert_options |= PCRE2_CONVERT_NO_UTF_CHECK; - - memcpy(con_context, default_con_context, sizeof(pcre2_convert_context)); - - if (pat_patctl.convert_glob_escape != 0) - { - uint32_t escape = (pat_patctl.convert_glob_escape == '0')? 0 : - pat_patctl.convert_glob_escape; - rc = pcre2_set_glob_escape(con_context, CHAR_INPUT(escape)); - if (rc != 0) - { - cfprintf(clr_test_error, outfile, "** Invalid glob escape '%c'\n", - pat_patctl.convert_glob_escape); - convert_return = PR_SKIP; - goto CONVERT_FINISH; - } - } - - if (pat_patctl.convert_glob_separator != 0) - { - uint32_t separator = pat_patctl.convert_glob_separator; - rc = pcre2_set_glob_separator(con_context, CHAR_INPUT(separator)); - if (rc != 0) - { - cfprintf(clr_test_error, outfile, "** Invalid glob separator '%c'\n", - pat_patctl.convert_glob_separator); - convert_return = PR_SKIP; - goto CONVERT_FINISH; - } - } - - /* Set up the input buffer in the same way as for pcre2_compile() below. */ - - zero_terminate = (pat_patctl.control & (CTL_HEXPAT|CTL_USE_LENGTH)) == 0; - -#ifdef SUPPORT_VALGRIND - VALGRIND_MAKE_MEM_NOACCESS(pbuffer + CU2BYTES(patlen + zero_terminate), - pbuffer_size - CU2BYTES(patlen + zero_terminate)); -#endif - - if (zero_terminate) patlen = PCRE2_ZERO_TERMINATED; - use_pbuffer = ((pat_patctl.control2 & CTL2_NULL_PATTERN) == 0)? pbuffer : NULL; - - rc = pcre2_pattern_convert(use_pbuffer, patlen, convert_options, - &converted_pattern, &converted_length, con_context); - -#ifdef SUPPORT_VALGRIND - VALGRIND_MAKE_MEM_UNDEFINED(pbuffer, pbuffer_size); -#endif - - if (rc != 0) - { - cfprintf(clr_api_error, outfile, "** Pattern conversion error at offset %" SIZ_FORM ": ", - converted_length); - convert_return = print_error_message(rc, "", "\n")? PR_SKIP:PR_ABEND; - } - - /* Output the converted pattern, then copy it. */ - - else - { - pchars(clr_none, converted_pattern, converted_length, utf, outfile); - fprintf(outfile, "\n"); - - if (CU2BYTES(converted_length + 1) > pbuffer_size) - { - // TODO This seems... unfortunate? There must be some patterns that can - // expand when converted from glob to regex, but we aren't allowing for - // that here. Presumably we should expand the buffer rather than moan. - cfprintf(clr_test_error, outfile, "** Pattern conversion is too long for the buffer\n"); - convert_return = PR_SKIP; - } - else - { - memcpy(pbuffer, converted_pattern, CU2BYTES(converted_length + 1)); - patlen = converted_length; - } - } - - /* Free the converted pattern. */ - - CONVERT_FINISH: - if (pat_patctl.convert_length != CONVERT_UNSET) - free(converted_pattern); - else - pcre2_converted_pattern_free(converted_pattern); - - /* Return if conversion was unsuccessful. */ - - if (convert_return != PR_OK) return convert_return; - } - -/* By default we pass a zero-terminated pattern, but a length is passed if -"use_length" was specified or this is a hex pattern (which might contain binary -zeros). When valgrind is supported, arrange for the unused part of the buffer -to be marked as no-access. */ - -full_patlen = patlen; -valgrind_access_length = patlen; -if ((pat_patctl.control & (CTL_HEXPAT|CTL_USE_LENGTH)) == 0) - { - patlen = PCRE2_ZERO_TERMINATED; - valgrind_access_length += 1; /* For the terminating zero */ - } - -#ifdef SUPPORT_VALGRIND -VALGRIND_MAKE_MEM_NOACCESS(pbuffer + valgrind_access_length, - pbuffer_size - CU2BYTES(valgrind_access_length)); -#else /* Valgrind not supported */ -(void)valgrind_access_length; /* Avoid compiler warning */ -#endif - -/* If #newline_default has been used and the library was not compiled with an -appropriate default newline setting, local_newline_default will be non-zero. We -use this if there is no explicit newline modifier. */ - -if ((pat_patctl.control2 & CTL2_NL_SET) == 0 && local_newline_default != 0) - { - pcre2_set_newline(pat_context, local_newline_default); - } - -/* The null_context modifier is used to test calling pcre2_compile() with a -NULL context. */ - -use_pat_context = ((pat_patctl.control & CTL_NULLCONTEXT) != 0)? - NULL : pat_context; - -/* If PCRE2_LITERAL is set, set use_forbid_utf zero because PCRE2_NEVER_UTF -and PCRE2_NEVER_UCP are invalid with it. */ - -if ((pat_patctl.options & PCRE2_LITERAL) != 0) use_forbid_utf = 0; - -/* Set use_pbuffer to the input buffer or NULL as requested. */ - -use_pbuffer = ((pat_patctl.control2 & CTL2_NULL_PATTERN) == 0)? pbuffer : NULL; - -/* Compile many times when timing. */ - -if (timeit > 0) - { - int i; - clock_t time_taken = 0; - for (i = 0; i < timeit; i++) - { - clock_t start_time = clock(); - compiled_code = pcre2_compile(use_pbuffer, patlen, - pat_patctl.options|use_forbid_utf, &errorcode, &erroroffset, - use_pat_context); - time_taken += clock() - start_time; - if (compiled_code != NULL) - pcre2_code_free(compiled_code); - } - total_compile_time += time_taken; - cfprintf(clr_profiling, outfile, "Compile time %8.4f microseconds\n", - ((1000000 / CLOCKS_PER_SEC) * (double)time_taken) / timeit); - } - -/* A final compile that is used "for real". */ - -mallocs_called = 0; -compiled_code = pcre2_compile(use_pbuffer, patlen, - pat_patctl.options|use_forbid_utf, &errorcode, &erroroffset, use_pat_context); - -/* For malloc testing, we repeat the compilation. */ - -if (malloc_testing) - { - for (int i = 0, target_mallocs = mallocs_called; i <= target_mallocs; i++) - { - if (compiled_code != NULL) - pcre2_code_free(compiled_code); - - errorcode = 0; - erroroffset = 0; - mallocs_until_failure = i; - compiled_code = pcre2_compile(use_pbuffer, patlen, - pat_patctl.options|use_forbid_utf, &errorcode, &erroroffset, use_pat_context); - mallocs_until_failure = INT_MAX; - - if (i < target_mallocs && - !(compiled_code == NULL && errorcode == PCRE2_ERROR_HEAP_FAILED)) - { - cfprintf(clr_test_error, outfile, "** malloc() compile test did not fail as expected (%d)\n", - errorcode); - return PR_ABEND; - } - } - } - -/* If valgrind is supported, mark the pbuffer as accessible again. We leave the -pattern in the test-mode's buffer defined because it may be read from a callout -during matching. */ - -#ifdef SUPPORT_VALGRIND -VALGRIND_MAKE_MEM_UNDEFINED(pbuffer + valgrind_access_length, - pbuffer_size - CU2BYTES(valgrind_access_length)); -#endif - -/* Call the JIT compiler if requested. When timing, or testing malloc failures, -we must free and recompile the pattern each time because that is the only way to -free the JIT compiled code. We know that compilation will always succeed. */ - -if (compiled_code != NULL && pat_patctl.jit != 0) - { - if (timeit > 0) - { - int i; - clock_t time_taken = 0; - - for (i = 0; i < timeit; i++) - { - clock_t start_time = clock(); - jitrc = pcre2_jit_compile(compiled_code, pat_patctl.jit); - time_taken += clock() - start_time; - - pcre2_code_free(compiled_code); - compiled_code = pcre2_compile(use_pbuffer, patlen, - pat_patctl.options|use_forbid_utf, &errorcode, &erroroffset, - use_pat_context); - if (compiled_code == NULL) - { - cfprintf(clr_test_error, outfile, "** Unexpected - pattern compilation not successful\n"); - return PR_ABEND; - } - - if (jitrc != 0) - { - cfprintf(clr_api_error, outfile, "JIT compilation was not successful"); - if (!print_error_message(jitrc, " (", ")\n")) return PR_ABEND; - break; - } - } - total_jit_compile_time += time_taken; - if (jitrc == 0) - cfprintf(clr_profiling, outfile, "JIT compile %8.4f microseconds\n", - ((1000000 / CLOCKS_PER_SEC) * (double)time_taken) / timeit); - } - - mallocs_called = 0; - jitrc = pcre2_jit_compile(compiled_code, pat_patctl.jit); - - /* For malloc testing, we repeat the compilation. */ - - if (malloc_testing) - { - for (int i = 0, target_mallocs = mallocs_called; i <= target_mallocs; i++) - { - pcre2_code_free(compiled_code); - compiled_code = pcre2_compile(use_pbuffer, patlen, - pat_patctl.options|use_forbid_utf, &errorcode, &erroroffset, - use_pat_context); - if (compiled_code == NULL) - { - cfprintf(clr_test_error, outfile, "** Unexpected - pattern compilation not successful\n"); - return PR_ABEND; - } - - mallocs_until_failure = i; - jitrc = pcre2_jit_compile(compiled_code, pat_patctl.jit); - mallocs_until_failure = INT_MAX; - - if (i < target_mallocs && jitrc != PCRE2_ERROR_NOMEMORY) - { - cfprintf(clr_test_error, outfile, "** malloc() JIT compile test did not fail as expected (%d)\n", - jitrc); - return PR_ABEND; - } - } - } - - /* Check whether JIT compilation failed; but continue with an error message - if not. */ - - if (jitrc != 0 && (pat_patctl.control & CTL_JITVERIFY) != 0) - { - cfprintf(clr_api_error, outfile, "JIT compilation was not successful"); - if (!print_error_message(jitrc, " (", ")\n")) return PR_ABEND; - } - } - -/* Compilation failed; go back for another re, skipping to blank line -if non-interactive. */ - -if (compiled_code == NULL) - { - int direction = error_direction(errorcode, erroroffset); - - cfprintf(clr_api_error, outfile, "Failed: error %d at offset %d: ", errorcode, - (int)erroroffset); - if (!print_error_message(errorcode, "", "\n")) return PR_ABEND; - - /* It's important that the erroroffset doesn't slice halfway through a UTF-8 - or UTF-16 character. We can verify this by checking that the input left of the - erroroffset is valid. Note that if the input is invalid (which is exercised in - some tests) then the offset will be positioned with the valid part to the left - of erroroffset. */ - -#if PCRE2_CODE_UNIT_WIDTH == 8 || PCRE2_CODE_UNIT_WIDTH == 16 - if (utf) - { - uint32_t cc; - int n = 1; - for (PCRE2_UCHAR *q = pbuffer, *q_end = q + erroroffset; q < q_end && n > 0; q += n) - n = utf_to_ord(q, q_end, &cc); - if (n <= 0) - { - cfprintf(clr_test_error, outfile, "** Erroroffset %d splits a UTF character\n", (int)erroroffset); - return PR_ABEND; - } - } -#endif - - /* Print the surrounding context around the erroroffset. */ - - if (direction < 0) - { - cfprintf(clr_test_error, outfile, "** Error code %d not implemented in error_direction().\n", errorcode); - cfprintf(clr_test_error, outfile, " error_direction() should usually return '1' for newly-added errors,\n"); - cfprintf(clr_test_error, outfile, " and the offset should be just to the right of the bad character.\n"); - return PR_ABEND; - } - - else if (direction != 0) - { - cfprintf(clr_api_error, outfile, " here: "); - if (erroroffset > 0) - { - ptrunc(clr_input, pbuffer, full_patlen, erroroffset, TRUE, utf, outfile); - fprintf(outfile, " "); - } - cfprintf(clr_api_error, outfile, (direction == 1)? "|<--|" : (direction == 2)? "|-->|" : "|<-->|"); - if (erroroffset < full_patlen) - { - fprintf(outfile, " "); - ptrunc(clr_input, pbuffer, full_patlen, erroroffset, FALSE, utf, outfile); - } - fprintf(outfile, "\n"); - } - - else if (erroroffset != 0) - { - cfprintf(clr_test_error, outfile, "** Unexpected non-zero erroroffset %d for error code %d\n", - (int)erroroffset, errorcode); - return PR_ABEND; - } - - return PR_SKIP; - } - -/* If forbid_utf is non-zero, we are running a non-UTF test. UTF and UCP are -locked out at compile time, but we must also check for occurrences of \P, \p, -and \X, which are only supported when Unicode is supported. */ - -if (forbid_utf != 0) - { - if ((compiled_code->flags & PCRE2_HASBKPORX) != 0) - { - cfprintf(clr_test_error, outfile, "** \\P, \\p, and \\X are not allowed after the " - "#forbid_utf command\n"); - return PR_SKIP; - } - } - -/* Remember the maximum lookbehind, for partial matching. */ - -if (pattern_info(PCRE2_INFO_MAXLOOKBEHIND, &maxlookbehind, FALSE) != 0) - return PR_ABEND; - -/* Remember the number of captures. */ - -if (pattern_info(PCRE2_INFO_CAPTURECOUNT, &maxcapcount, FALSE) < 0) - return PR_ABEND; - -/* If an explicit newline modifier was given, set the information flag in the -pattern so that it is preserved over push/pop. */ - -if ((pat_patctl.control2 & CTL2_NL_SET) != 0) - { - compiled_code->flags |= PCRE2_NL_SET; - } - -/* Output code size and other information if requested. */ - -rc = show_pattern_info(); -if (rc != PR_OK) return rc; - -/* The "push" control requests that the compiled pattern be remembered on a -stack. This is mainly for testing the serialization functionality. */ - -if ((pat_patctl.control & CTL_PUSH) != 0) - { - if (patstacknext >= PATSTACKSIZE) - { - cfprintf(clr_test_error, outfile, "** Too many pushed patterns (max %d)\n", PATSTACKSIZE); - return PR_ABEND; - } - patstack[patstacknext++] = compiled_code; - compiled_code = NULL; - } - -/* The "pushcopy" and "pushtablescopy" controls are similar, but push a -copy of the pattern, the latter with a copy of its character tables. This tests -the pcre2_code_copy() and pcre2_code_copy_with_tables() functions. */ - -if ((pat_patctl.control & (CTL_PUSHCOPY|CTL_PUSHTABLESCOPY)) != 0) - { - if (patstacknext >= PATSTACKSIZE) - { - cfprintf(clr_test_error, outfile, "** Too many pushed patterns (max %d)\n", PATSTACKSIZE); - return PR_ABEND; - } - if ((pat_patctl.control & CTL_PUSHCOPY) != 0) - { - patstack[patstacknext++] = pcre2_code_copy(compiled_code); - } - else - { - patstack[patstacknext++] = pcre2_code_copy_with_tables(compiled_code); - } - } - -return PR_OK; -} - - - -/* Helper to test for an active pattern. */ - -static BOOL -have_active_pattern(void) -{ -return compiled_code != NULL; -} - - -/* Helper to free (and null-out) the active pattern. Safe to call even if there -is no active pattern. */ - -static void -free_active_pattern(void) -{ -pcre2_code_free(compiled_code); -compiled_code = NULL; -} - - - -/************************************************* -* Check heap, match or depth limit * -*************************************************/ - -/* This is used for DFA, normal, and JIT fast matching. For DFA matching it -should only be called with the third argument set to PCRE2_ERROR_DEPTHLIMIT. - -Arguments: - pp the subject string - ulen length of subject or PCRE2_ZERO_TERMINATED - errnumber defines which limit to test - msg string to include in final message - -Returns: the return from the final match function call -*/ - -static int -check_match_limit(PCRE2_SPTR pp, PCRE2_SIZE ulen, int errnumber, const char *msg) -{ -int capcount; -uint32_t min = 0; -uint32_t mid = 64; -uint32_t max = UINT32_MAX; -FILE *saved_outfile = outfile; - -pcre2_set_match_limit(dat_context, max); -pcre2_set_depth_limit(dat_context, max); -pcre2_set_heap_limit(dat_context, max); - -for (;;) - { - uint32_t stack_start = 0; - - /* If we are checking the heap limit, free any frames vector that is cached - in the match_data so we always start without one. */ - - if (errnumber == PCRE2_ERROR_HEAPLIMIT) - { - pcre2_set_heap_limit(dat_context, mid); - - match_data->memctl.free(match_data->heapframes, - match_data->memctl.memory_data); - match_data->heapframes = NULL; - match_data->heapframes_size = 0; - } - - /* No need to mess with the frames vector for match or depth limits. */ - - else if (errnumber == PCRE2_ERROR_MATCHLIMIT) - { - pcre2_set_match_limit(dat_context, mid); - } - else - { - pcre2_set_depth_limit(dat_context, mid); - } - - /* Do the appropriate match */ - - reset_callout_state(); - outfile = NULL; /* Suppress callout output during the repeated search */ - - if ((dat_datctl.control & CTL_DFA) != 0) - { - stack_start = DFA_START_RWS_SIZE/1024; - if (dfa_workspace == NULL) - dfa_workspace = (int *)malloc(DFA_WS_DIMENSION*sizeof(int)); - if (dfa_matched++ == 0) - dfa_workspace[0] = -1; /* To catch bad restart */ - capcount = pcre2_dfa_match(compiled_code, pp, ulen, dat_datctl.offset, - dat_datctl.options, match_data, - dat_context, dfa_workspace, DFA_WS_DIMENSION); - } - - else if ((pat_patctl.control & CTL_JITFAST) != 0) - capcount = pcre2_jit_match(compiled_code, pp, ulen, dat_datctl.offset, - dat_datctl.options, match_data, dat_context); - - else - { - capcount = pcre2_match(compiled_code, pp, ulen, dat_datctl.offset, - dat_datctl.options, match_data, dat_context); - } - - outfile = saved_outfile; - - if (capcount == errnumber) - { - if ((mid & 0x80000000u) != 0) - { - cfprintf(clr_test_error, outfile, "** Can't find minimum %s limit: check pattern for " - "restriction\n", msg); - break; - } - - min = mid; - mid = (mid == max - 1)? max : (max != UINT32_MAX)? (min + max)/2 : mid*2; - } - else if (capcount >= 0 || - capcount == PCRE2_ERROR_NOMATCH || - capcount == PCRE2_ERROR_PARTIAL) - { - /* If we've not hit the error with a heap limit less than the size of the - initial stack frame vector (for pcre2_match()) or the initial stack - workspace vector (for pcre2_dfa_match()), the heap is not being used, so - the minimum limit is zero; there's no need to go on. The other limits are - always greater than zero. */ - - if (errnumber == PCRE2_ERROR_HEAPLIMIT && mid < stack_start) - { - fprintf(outfile, "Minimum %s limit = 0\n", msg); - break; - } - if (mid == min + 1) - { - fprintf(outfile, "Minimum %s limit = %d\n", msg, mid); - break; - } - max = mid; - mid = (min + max)/2; - } - else break; /* Some other error */ - } - -return capcount; -} - - - -/************************************************* -* Substitute callout function * -*************************************************/ - -/* Called from pcre2_substitute() when the substitute_callout modifier is set. -Print out the data that is passed back. - -Arguments: - scb pointer to substitute callout block - data_ptr callout data - -Returns: nothing -*/ - -static int -substitute_callout_function(pcre2_substitute_callout_block *scb, - void *data_ptr) -{ -int yield = 0; -BOOL utf = (compiled_code->overall_options & PCRE2_UTF) != 0; -(void)data_ptr; /* Not used */ - -if (outfile == NULL) goto YIELD; - -fprintf(outfile, "%2d(%d) Old %" SIZ_FORM " %" SIZ_FORM " \"", - scb->subscount, scb->oveccount, - scb->ovector[0], scb->ovector[1]); - -pchars(clr_none, scb->input + scb->ovector[0], scb->ovector[1] - scb->ovector[0], - utf, outfile); - -fprintf(outfile, "\" New %" SIZ_FORM " %" SIZ_FORM " \"", - scb->output_offsets[0], scb->output_offsets[1]); - -pchars(clr_none, scb->output + scb->output_offsets[0], - scb->output_offsets[1] - scb->output_offsets[0], utf, outfile); - -YIELD: - -if (scb->subscount == dat_datctl.substitute_stop) - { - yield = -1; - if (outfile != NULL) fprintf(outfile, " STOPPED"); - } -else if (scb->subscount == dat_datctl.substitute_skip) - { - yield = +1; - if (outfile != NULL) fprintf(outfile, " SKIPPED"); - } - -if (outfile != NULL) fprintf(outfile, "\"\n"); -return yield; -} - - - -/************************************************* -* Substitute case callout function * -*************************************************/ - -/* Called from pcre2_substitute() when the substitute_case_callout -modifier is set. The substitute callout block is not identical for all code unit -widths, so we have to duplicate the function for each supported width. - -Arguments: - input the input character - input_len the length of the input - output the output buffer - output_cap the output buffer capacity - to_case the case conversion type - data_ptr callout data (unused) - -Returns: the number of code units of the output -*/ - -static PCRE2_SIZE -substitute_case_callout_function( - PCRE2_SPTR input, PCRE2_SIZE input_len, - PCRE2_UCHAR *output, PCRE2_SIZE output_cap, - int to_case, void *data_ptr) -{ -PCRE2_UCHAR buf[16]; -PCRE2_SPTR input_copy; -PCRE2_SIZE written = 0; - -(void)data_ptr; /* Not used */ - -if (input_len > sizeof(buf)/sizeof(*buf)) - { - PCRE2_UCHAR *input_buf = malloc(CU2BYTES(input_len)); - if (input_buf == NULL) return ~(PCRE2_SIZE)0; - memcpy(input_buf, input, CU2BYTES(input_len)); - input_copy = input_buf; - } -else - { - memcpy(buf, input, CU2BYTES(input_len)); - input_copy = buf; - } - -for (PCRE2_SIZE i = 0; i < input_len; ) - { - int num_in = i + 1 < input_len ? 2 : 1; - uint32_t c1 = input_copy[i]; - uint32_t c2 = i + 1 < input_len ? input_copy[i + 1] : 0; - int num_read; - int num_write; - - if (!case_transform(to_case, num_in, &num_read, &num_write, &c1, &c2)) - { - written = ~(PCRE2_SIZE)0; - goto END; - } - - i += num_read; - if (to_case == PCRE2_SUBSTITUTE_CASE_TITLE_FIRST) - to_case = PCRE2_SUBSTITUTE_CASE_LOWER; - - if (written + num_write > output_cap) - { - written += num_write; - } - else - { - if (num_write > 0) output[written++] = c1; - if (num_write > 1) output[written++] = c2; - } - } - -END: -if (input_copy != buf) free((PCRE2_UCHAR *)input_copy); - -/* Let's be maximally cruel. The case callout is allowed to leave the output -buffer in any state at all if it overflows, so let's use random garbage. */ -if (written > output_cap) - memset(output, time(NULL) & 1 ? 0xcd : 0xdc, - CU2BYTES(output_cap)); - -return written; -} - - - -/************************************************* -* Callout function * -*************************************************/ - -/* Called from a PCRE2 library as a result of the (?C) item. We print out where -we are in the match (unless suppressed). Yield zero unless more callouts than -the fail count, or the callout data is not zero. The only differences in the -callout block for different code unit widths are that the pointers to the -subject, the most recent MARK, and a callout argument string point to strings -of the appropriate width. Casts can be used to deal with this. - -Arguments: - cb a pointer to a callout block - callout_data_ptr the provided callout data - -Returns: 0 or 1 or an error, as determined by settings -*/ - -static int -callout_function(pcre2_callout_block *cb, void *callout_data_ptr) -{ -FILE *f, *fdefault; -uint32_t i, pre_start, post_start, subject_length; -PCRE2_SIZE current_position; -BOOL utf = (compiled_code->overall_options & PCRE2_UTF) != 0; -BOOL callout_capture = (dat_datctl.control & CTL_CALLOUT_CAPTURE) != 0; -BOOL callout_where = (dat_datctl.control2 & CTL2_CALLOUT_NO_WHERE) == 0; - -if (outfile == NULL) goto YIELD; - -/* The FILE f is used for echoing the subject string if it is non-NULL. This -happens only once in simple cases, but we want to repeat after any additional -output caused by CALLOUT_EXTRA. */ - -fdefault = (!first_callout && !callout_capture && cb->callout_string == NULL)? - NULL : outfile; - -if ((dat_datctl.control2 & CTL2_CALLOUT_EXTRA) != 0) - { - f = outfile; - switch (cb->callout_flags) - { - case PCRE2_CALLOUT_BACKTRACK: - fprintf(f, "Backtrack\n"); - break; - - case PCRE2_CALLOUT_STARTMATCH|PCRE2_CALLOUT_BACKTRACK: - fprintf(f, "Backtrack\nNo other matching paths\n"); - PCRE2_FALLTHROUGH /* Fall through */ - - case PCRE2_CALLOUT_STARTMATCH: - fprintf(f, "New match attempt\n"); - break; - - default: - f = fdefault; - break; - } - } -else f = fdefault; - -/* For a callout with a string argument, show the string first because there -isn't a tidy way to fit it in the rest of the data. */ - -if (cb->callout_string != NULL) - { - uint32_t delimiter = cb->callout_string[-1]; - fprintf(outfile, "Callout (%" SIZ_FORM "): %c", - cb->callout_string_offset, CHAR_OUTPUT(delimiter)); - pchars(clr_none, cb->callout_string, cb->callout_string_length, utf, outfile); - for (i = 0; callout_start_delims[i] != 0; i++) - if (delimiter == callout_start_delims[i]) - { - delimiter = callout_end_delims[i]; - break; - } - fprintf(outfile, "%c", CHAR_OUTPUT(delimiter)); - if (!callout_capture) fprintf(outfile, "\n"); - } - -/* Show captured strings if required */ - -if (callout_capture) - { - if (cb->callout_string == NULL) - fprintf(outfile, "Callout %d:", cb->callout_number); - fprintf(outfile, " last capture = %d\n", cb->capture_last); - for (i = 2; i < cb->capture_top * 2; i += 2) - { - fprintf(outfile, "%2d: ", i/2); - if (cb->offset_vector[i] == PCRE2_UNSET) - fprintf(outfile, ""); - else - { - pchars(clr_none, cb->subject + cb->offset_vector[i], - cb->offset_vector[i+1] - cb->offset_vector[i], utf, f); - } - fprintf(outfile, "\n"); - } - } - -/* Unless suppressed, re-print the subject in canonical form (with escapes for -non-printing characters), the first time, or if giving full details. On -subsequent calls in the same match, we use pchars() just to find the printed -lengths of the substrings. */ - -if (callout_where) - { - if (f != NULL) fprintf(f, "--->"); - - /* The subject before the match start. */ - - pre_start = pchars(clr_none, cb->subject, cb->start_match, utf, f); - - /* If a lookbehind is involved, the current position may be earlier than the - match start. If so, use the match start instead. */ - - current_position = (cb->current_position >= cb->start_match)? - cb->current_position : cb->start_match; - - /* The subject between the match start and the current position. */ - - post_start = pchars(clr_none, cb->subject + cb->start_match, - current_position - cb->start_match, utf, f); - - /* Print from the current position to the end. */ - - pchars(clr_none, cb->subject + current_position, cb->subject_length - current_position, - utf, f); - - /* Calculate the total subject printed length (no print). */ - - subject_length = pchars(clr_none, cb->subject, cb->subject_length, utf, NULL); - - if (f != NULL) fprintf(f, "\n"); - - /* For automatic callouts, show the pattern offset. Otherwise, for a - numerical callout whose number has not already been shown with captured - strings, show the number here. A callout with a string argument has been - displayed above. */ - - if (cb->callout_number == 255) - { - fprintf(outfile, "%+3d ", (int)cb->pattern_position); - if (cb->pattern_position > 99) fprintf(outfile, "\n "); - } - else - { - if (callout_capture || cb->callout_string != NULL) fprintf(outfile, " "); - else fprintf(outfile, "%3d ", cb->callout_number); - } - - /* Now show position indicators */ - - for (i = 0; i < pre_start; i++) fprintf(outfile, " "); - fprintf(outfile, "^"); - - if (post_start > 0) - { - for (i = 0; i < post_start - 1; i++) fprintf(outfile, " "); - fprintf(outfile, "^"); - } - - for (i = 0; i < subject_length - pre_start - post_start + 4; i++) - fprintf(outfile, " "); - - if (cb->next_item_length != 0) - { - pchars(clr_none, pbuffer + cb->pattern_position, cb->next_item_length, utf, outfile); - } - else - fprintf(outfile, "End of pattern"); - - fprintf(outfile, "\n"); - } - -/* Show any mark info */ - -if (cb->mark != last_callout_mark) - { - if (cb->mark == NULL) - fprintf(outfile, "Latest Mark: \n"); - else - { - fprintf(outfile, "Latest Mark: "); - pchars(clr_none, cb->mark - 1, -1, utf, outfile); - putc('\n', outfile); - } - } - -YIELD: - -/* Keep count */ - -first_callout = FALSE; -last_callout_mark = cb->mark; -callout_count++; - -/* Show callout data if that determines the return code */ - -if (callout_data_ptr != NULL) - { - int callout_data = *((int32_t *)callout_data_ptr); - if (callout_data != 0) - { - if (outfile != NULL) fprintf(outfile, "Callout data = %d\n", callout_data); - return callout_data; - } - } - -/* Otherwise, the callout_error and callout_fail settings provide the return -code. */ - -if (cb->callout_number == dat_datctl.cerror[0] && - callout_count >= dat_datctl.cerror[1]) - return PCRE2_ERROR_CALLOUT; - -if (cb->callout_number == dat_datctl.cfail[0] && - callout_count >= dat_datctl.cfail[1]) - return 1; - -return 0; -} - - - -/************************************************* -* Handle *MARK and copy/get tests * -*************************************************/ - -/* This function is called after complete and partial matches. It runs the -tests for substring extraction. - -Arguments: - utf TRUE for utf - capcount return from pcre2_match() - -Returns: FALSE if print_error_message() fails -*/ - -static BOOL -copy_and_get(BOOL utf, int capcount) -{ -int i; -uint8_t *nptr; - -/* Test copy strings by number */ - -for (i = 0; i < MAXCPYGET && dat_datctl.copy_numbers[i] >= 0; i++) - { - int rc, rc2; - PCRE2_SIZE length, length2; - PCRE2_UCHAR copybuffer[256]; - uint32_t n = (uint32_t)(dat_datctl.copy_numbers[i]); - length = sizeof(copybuffer)/sizeof(*copybuffer); - rc = pcre2_substring_copy_bynumber(match_data, n, copybuffer, &length); - if (rc < 0) - { - cfprintf(clr_api_error, outfile, "Copy substring %d failed (%d): ", n, rc); - if (!print_error_message(rc, "", "\n")) return FALSE; - } - else - { - fprintf(outfile, "%2dC ", n); - pchars(clr_none, copybuffer, length, utf, outfile); - fprintf(outfile, " (%" SIZ_FORM ")\n", length); - } - rc2 = pcre2_substring_length_bynumber(match_data, n, &length2); - if (rc2 < 0) - { - cfprintf(clr_api_error, outfile, "Get substring %d length failed (%d): ", n, rc2); - if (!print_error_message(rc2, "", "\n")) return FALSE; - } - else if (rc >= 0 && length2 != length) - { - cfprintf(clr_test_error, outfile, "** Mismatched substring lengths: %" - SIZ_FORM " %" SIZ_FORM "\n", length, length2); - } - } - -/* Test copy strings by name */ - -nptr = dat_datctl.copy_names; -for (;;) - { - int rc, rc2; - int groupnumber; - PCRE2_SIZE length, length2; - PCRE2_UCHAR copybuffer[256]; - size_t namelen = strlen((const char *)nptr); -#if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 - PCRE2_SIZE cnl = namelen; -#endif - if (namelen == 0) break; - -#if PCRE2_CODE_UNIT_WIDTH == 8 - strcpy((char *)pbuffer8, (char *)nptr); -#endif -#if defined(EBCDIC) && !EBCDIC_IO - ascii_to_ebcdic_str(pbuffer8, namelen); -#endif -#if PCRE2_CODE_UNIT_WIDTH == 16 - (void)to16(nptr, utf, &cnl); -#endif -#if PCRE2_CODE_UNIT_WIDTH == 32 - (void)to32(nptr, utf, &cnl); -#endif - - groupnumber = pcre2_substring_number_from_name(compiled_code, pbuffer); - if (groupnumber < 0 && groupnumber != PCRE2_ERROR_NOUNIQUESUBSTRING) - cfprintf(clr_api_error, outfile, "Number not found for group \"%s\"\n", nptr); - - length = sizeof(copybuffer)/sizeof(*copybuffer); - rc = pcre2_substring_copy_byname(match_data, pbuffer, copybuffer, &length); - if (rc < 0) - { - cfprintf(clr_api_error, outfile, "Copy substring \"%s\" failed (%d): ", nptr, rc); - if (!print_error_message(rc, "", "\n")) return FALSE; - } - else - { - fprintf(outfile, " C "); - pchars(clr_none, copybuffer, length, utf, outfile); - fprintf(outfile, " (%" SIZ_FORM ") %s", length, nptr); - if (groupnumber >= 0) fprintf(outfile, " (group %d)\n", groupnumber); - else fprintf(outfile, " (non-unique)\n"); - } - rc2 = pcre2_substring_length_byname(match_data, pbuffer, &length2); - if (rc2 < 0) - { - cfprintf(clr_api_error, outfile, "Get substring \"%s\" length failed (%d): ", nptr, rc2); - if (!print_error_message(rc2, "", "\n")) return FALSE; - } - else if (rc >= 0 && length2 != length) - { - cfprintf(clr_test_error, outfile, "** Mismatched substring lengths: %" - SIZ_FORM " %" SIZ_FORM "\n", length, length2); - } - nptr += namelen + 1; - } - -/* Test get strings by number */ - -for (i = 0; i < MAXCPYGET && dat_datctl.get_numbers[i] >= 0; i++) - { - int rc; - PCRE2_SIZE length; - PCRE2_UCHAR *gotbuffer; - uint32_t n = (uint32_t)(dat_datctl.get_numbers[i]); - rc = pcre2_substring_get_bynumber(match_data, n, &gotbuffer, &length); - if (rc < 0) - { - cfprintf(clr_api_error, outfile, "Get substring %d failed (%d): ", n, rc); - if (!print_error_message(rc, "", "\n")) return FALSE; - } - else - { - fprintf(outfile, "%2dG ", n); - pchars(clr_none, gotbuffer, length, utf, outfile); - fprintf(outfile, " (%" SIZ_FORM ")\n", length); - pcre2_substring_free(gotbuffer); - } - } - -/* Test get strings by name */ - -nptr = dat_datctl.get_names; -for (;;) - { - PCRE2_SIZE length; - PCRE2_UCHAR *gotbuffer; - int rc; - int groupnumber; - size_t namelen = strlen((const char *)nptr); -#if PCRE2_CODE_UNIT_WIDTH == 16 || PCRE2_CODE_UNIT_WIDTH == 32 - PCRE2_SIZE cnl = namelen; -#endif - if (namelen == 0) break; - -#if PCRE2_CODE_UNIT_WIDTH == 8 - strcpy((char *)pbuffer8, (char *)nptr); -#endif -#if defined(EBCDIC) && !EBCDIC_IO - ascii_to_ebcdic_str(pbuffer8, namelen); -#endif -#if PCRE2_CODE_UNIT_WIDTH == 16 - (void)to16(nptr, utf, &cnl); -#endif -#if PCRE2_CODE_UNIT_WIDTH == 32 - (void)to32(nptr, utf, &cnl); -#endif - - groupnumber = pcre2_substring_number_from_name(compiled_code, pbuffer); - if (groupnumber < 0 && groupnumber != PCRE2_ERROR_NOUNIQUESUBSTRING) - cfprintf(clr_api_error, outfile, "Number not found for group \"%s\"\n", nptr); - - rc = pcre2_substring_get_byname(match_data, pbuffer, &gotbuffer, &length); - if (rc < 0) - { - cfprintf(clr_api_error, outfile, "Get substring \"%s\" failed (%d): ", nptr, rc); - if (!print_error_message(rc, "", "\n")) return FALSE; - } - else - { - fprintf(outfile, " G "); - pchars(clr_none, gotbuffer, length, utf, outfile); - fprintf(outfile, " (%" SIZ_FORM ") %s", length, nptr); - if (groupnumber >= 0) fprintf(outfile, " (group %d)\n", groupnumber); - else fprintf(outfile, " (non-unique)\n"); - pcre2_substring_free(gotbuffer); - } - nptr += namelen + 1; - } - -/* Test getting the complete list of captured strings. */ - -if ((dat_datctl.control & CTL_GETALL) != 0) - { - int rc; - PCRE2_UCHAR **stringlist; - PCRE2_SIZE *lengths; - rc = pcre2_substring_list_get(match_data, &stringlist, &lengths); - if (rc < 0) - { - cfprintf(clr_api_error, outfile, "get substring list failed (%d): ", rc); - if (!print_error_message(rc, "", "\n")) return FALSE; - } - else - { - for (i = 0; i < capcount; i++) - { - fprintf(outfile, "%2dL ", i); - pchars(clr_none, stringlist[i], lengths[i], utf, outfile); - putc('\n', outfile); - } - if (stringlist[i] != NULL) - cfprintf(clr_test_error, outfile, "** string list not terminated by NULL\n"); - pcre2_substring_list_free(stringlist); - } - } - -return TRUE; -} - - - -/************************************************* -* Copy a substitution string * -*************************************************/ - -/* Copy one of the string arguments to pcre2_substitute() from its uint8_t -test input to the appropriate width buffer. -*/ - -static void -copy_substitute_string(BOOL utf, uint8_t *input, PCRE2_SIZE inlen, - PCRE2_UCHAR *output, PCRE2_SIZE *outlen) -{ -uint32_t c; -uint8_t *input_end = input + inlen; -PCRE2_UCHAR *output_start = output; -PCRE2_SIZE erroroffset; -BOOL badutf = FALSE; - -/* When copying the replacement string to a buffer of the appropriate width, no -escape processing is done. - -In UTF mode, check for an invalid UTF-8 input string, and if it is invalid, just -copy its code units without UTF interpretation. This provides a means of -checking that an invalid string is detected. Otherwise, UTF-8 can be used to -include wide characters in a replacement. */ - -if (utf) badutf = valid_utf(input, inlen, &erroroffset); - -/* Not UTF or invalid UTF-8: just copy the code units. */ - -if (!utf || badutf) - { - while (input < input_end) - { - c = *input++; -#if defined(EBCDIC) && !EBCDIC_IO - c = ascii_to_ebcdic(c); -#endif - *output++ = c; - } - } - -/* Valid UTF-8 replacement string */ - -else while (input < input_end) - { - c = *input++; - if (HASUTF8EXTRALEN(c)) { GETUTF8INC(c, input); } - -#if PCRE2_CODE_UNIT_WIDTH == 8 - output += ord_to_utf8(c, output); - -#elif PCRE2_CODE_UNIT_WIDTH == 16 - if (c >= 0x10000u) - { - c-= 0x10000u; - *output++ = 0xd800 | (c >> 10); - *output++ = 0xdc00 | (c & 0x3ff); - } - else *output++ = c; - -#elif PCRE2_CODE_UNIT_WIDTH == 32 - *output++ = c; -#endif - } - -*output = 0; -*outlen = output - output_start; -} - - - -/************************************************* -* Process a data line * -*************************************************/ - -/* The line is in buffer; it will not be empty. - -Arguments: none - -Returns: PR_OK continue processing next line - PR_SKIP skip to a blank line - PR_ABEND abort the pcre2test run -*/ - -static int -process_data(void) -{ -PCRE2_SIZE ulen, arg_ulen; -uint32_t gmatched; -uint32_t c, k; -uint32_t g_notempty = 0; -uint8_t *p; /* Position within buffer (raw input line) */ -size_t len; -size_t needlen; /* Bytes, for sizing dbuffer */ -pcre2_match_context *use_dat_context; -BOOL utf; -BOOL subject_literal; - -PCRE2_SIZE *ovector; -PCRE2_SPTR ovecsave[2] = { NULL, NULL }; -uint32_t oveccount; - -PCRE2_UCHAR *q = NULL; /* Typed pointer within dbuffer */ -PCRE2_UCHAR *start_rep; /* Position within dbuffer; stashed value of q */ -PCRE2_UCHAR *pp; /* Subject pointer within dbuffer */ - -subject_literal = (pat_patctl.control2 & CTL2_SUBJECT_LITERAL) != 0; - -/* Copy the default context and data control blocks to the active ones. Then -copy from the pattern the controls that can be set in either the pattern or the -data. This allows them to be overridden in the data line. We do not do this for -options because those that are common apply separately to compiling and -matching. */ - -memcpy(dat_context, default_dat_context, sizeof(pcre2_match_context)); -memcpy(&dat_datctl, &def_datctl, sizeof(datctl)); -dat_datctl.control |= (pat_patctl.control & CTL_ALLPD); -dat_datctl.control2 |= (pat_patctl.control2 & CTL2_ALLPD); -dat_datctl.replacement[0] = pat_patctl.replacement[0]; -if (pat_patctl.replacement[0] != MOD_STR_UNSET) - memcpy(dat_datctl.replacement + 1, pat_patctl.replacement + 1, - pat_patctl.replacement[0] + 1); -if (dat_datctl.jitstack == 0) dat_datctl.jitstack = pat_patctl.jitstack; - -if (dat_datctl.substitute_skip == 0) - dat_datctl.substitute_skip = pat_patctl.substitute_skip; -if (dat_datctl.substitute_stop == 0) - dat_datctl.substitute_stop = pat_patctl.substitute_stop; - -/* Initialize for scanning the data line. */ - -#if PCRE2_CODE_UNIT_WIDTH == 8 -utf = ((((pat_patctl.control & CTL_POSIX) != 0)? - ((pcre2_real_code *)preg.re_pcre2_code)->overall_options : - compiled_code->overall_options) & PCRE2_UTF) != 0; -#else -utf = (compiled_code->overall_options & PCRE2_UTF) != 0; -#endif - -start_rep = NULL; -len = strlen((const char *)buffer); -while (len > 0 && isspace(buffer[len-1])) len--; -buffer[len] = 0; -p = buffer; -while (isspace(*p)) - { - p++; - len--; - } - -/* Check that the data is well-formed UTF-8 if we're in UTF mode. To create -invalid input to pcre2_match(), you must use \x?? or \x{} sequences. */ - -if (utf) - { - uint8_t *ptmp; - uint32_t cc; - int n = 1; - uint8_t *ptmp_end = p + len; - - for (ptmp = p; n > 0 && *ptmp; ptmp += n) - n = utf8_to_ord(ptmp, ptmp_end, &cc); - if (n <= 0) - { - cfprintf(clr_test_error, outfile, "** Failed: invalid UTF-8 string cannot be used as input " - "in UTF mode\n"); - return PR_OK; - } - } - -#ifdef SUPPORT_VALGRIND -/* Mark the dbuffer as addressable but undefined again. */ -if (dbuffer != NULL) - { - VALGRIND_MAKE_MEM_UNDEFINED(dbuffer, dbuffer_size); - } -#endif - -/* Allocate a buffer to hold the data line; len+1 is an upper bound on -the number of code units that will be needed (though the buffer may have to be -extended if replication is involved). */ - -needlen = CU2BYTES(len+1); -if (dbuffer == NULL || needlen >= dbuffer_size) - { - while (needlen >= dbuffer_size) - { - if (dbuffer_size < SIZE_MAX/2) dbuffer_size *= 2; - else dbuffer_size = needlen + 1; - } - dbuffer = (uint8_t *)realloc(dbuffer, dbuffer_size); - if (dbuffer == NULL) - { - cfprintf(clr_test_error, stderr, "pcre2test: realloc(%" SIZ_FORM ") failed\n", dbuffer_size); - exit(1); - } - } -q = (PCRE2_UCHAR *)dbuffer; - -/* Scan the data line, interpreting data escapes, and put the result into a -buffer of the appropriate width. In UTF mode, input is always UTF-8; otherwise, -in 16- and 32-bit modes, it can be forced to UTF-8 by the utf8_input modifier. -*/ - -while ((c = *p++) != 0) - { - int i = 0; - size_t replen; /* Bytes, for sizing dbuffer */ - enum force_encoding encoding = FORCE_NONE; - - /* ] may mark the end of a replicated sequence */ - - if (c == ']' && start_rep != NULL) - { - long li; - char *endptr; - - if (*p++ != '{') - { - cfprintf(clr_test_error, outfile, "** Expected '{' after \\[....]\n"); - return PR_OK; - } - - li = strtol((const char *)p, &endptr, 10); - if (S32OVERFLOW(li)) - { - cfprintf(clr_test_error, outfile, "** Repeat count too large\n"); - return PR_OK; - } - i = (int)li; - - p = (uint8_t *)endptr; - if (*p++ != '}') - { - cfprintf(clr_test_error, outfile, "** Expected '}' after \\[...]{...\n"); - return PR_OK; - } - - if (i-- <= 0) - { - cfprintf(clr_test_error, outfile, "** Zero or negative repeat not allowed\n"); - return PR_OK; - } - - replen = (uint8_t *)q - (uint8_t *)start_rep; - if (i > 0 && replen > (SIZE_MAX - needlen) / i) - { - cfprintf(clr_test_error, outfile, "** Expanded content too large\n"); - return PR_OK; - } - needlen += replen * i; - - if (needlen >= dbuffer_size) - { - size_t qoffset = (uint8_t *)q - dbuffer; - size_t rep_offset = (uint8_t *)start_rep - dbuffer; - while (needlen >= dbuffer_size) - { - if (dbuffer_size < SIZE_MAX/2) dbuffer_size *= 2; - else dbuffer_size = needlen + 1; - } - dbuffer = (uint8_t *)realloc(dbuffer, dbuffer_size); - if (dbuffer == NULL) - { - cfprintf(clr_test_error, stderr, "pcre2test: realloc(%" SIZ_FORM ") failed\n", - dbuffer_size); - exit(1); - } - q = (PCRE2_UCHAR *)(dbuffer + qoffset); - start_rep = (PCRE2_UCHAR *)(dbuffer + rep_offset); - } - - while (i-- > 0) - { - memcpy(q, start_rep, replen); - q += BYTES2CU(replen); - } - - start_rep = NULL; - continue; - } - - /* Handle a non-escaped character. In non-UTF 32-bit mode with utf8_input - set, do the fudge for setting the top bit. */ - - if (c != '\\' || subject_literal) - { - uint32_t topbit = 0; -#if PCRE2_CODE_UNIT_WIDTH == 32 - if (c == 0xff && *p != 0) - { - topbit = 0x80000000; - c = *p++; - } -#endif - if ((utf || (pat_patctl.control & CTL_UTF8_INPUT) != 0) && - HASUTF8EXTRALEN(c)) - { - GETUTF8INC(c, p); - } - c |= topbit; - } - - /* Handle backslash escapes */ - - else switch ((c = *p++)) - { - case '\\': break; - case 'a': c = '\a'; break; - case 'b': c = '\b'; break; -#if defined(EBCDIC) && !EBCDIC_IO - /* \e is the odd one out since it's not defined in the C standard, - precisely because of EBCDIC (apparently EBCDIC 'ESC' character isn't - an exact match to Latin-1 'ESC', hence '\e' isn't necessarily - supported by EBCDIC compilers). */ - case 'e': c = '\x1b'; break; -#else - case 'e': c = CHAR_ESC; break; -#endif - case 'f': c = '\f'; break; - case 'n': c = '\n'; break; - case 'r': c = '\r'; break; - case 't': c = '\t'; break; - case 'v': c = '\v'; break; - - case '0': case '1': case '2': case '3': - case '4': case '5': case '6': case '7': - c -= '0'; - while (i++ < 2 && *p >= '0' && *p < '8') - c = c * 8 + (*p++ - '0'); - c = CHAR_OUTPUT(CHAR_INPUT_HEX(c)); - - encoding = (utf && c > 255)? FORCE_UTF : FORCE_RAW; - break; - - case 'o': - if (*p == '{') - { - uint8_t *pt = p; - c = 0; - for (pt++; isdigit(*pt) && *pt < '8'; ++i, pt++) - { - if (c >= 0x20000000u) - { - cfprintf(clr_test_error, outfile, "** \\o{ escape too large\n"); - return PR_OK; - } - else c = c * 8 + (*pt - '0'); - } - c = CHAR_OUTPUT(CHAR_INPUT_HEX(c)); - if (i == 0 || *pt != '}') - { - cfprintf(clr_test_error, outfile, "** Malformed \\o{ escape\n"); - return PR_OK; - } - else p = pt + 1; - } - break; - - case 'x': - c = 0; - if (*p == '{') - { - uint8_t *pt = p; - - /* We used to have "while (isxdigit(*(++pt)))" here, but it fails - when isxdigit() is a macro that refers to its argument more than - once. This is banned by the C Standard, but apparently happens in at - least one macOS environment. */ - - for (pt++; isxdigit(*pt); pt++) - { - if (++i == 9) - { - cfprintf(clr_test_error, outfile, "** Too many hex digits in \\x{...} item; " - "using only the first eight.\n"); - while (isxdigit(*pt)) pt++; - break; - } - else c = c * 16 + (tolower(*pt) - (isdigit(*pt)? '0' : 'a' - 10)); - } - c = CHAR_OUTPUT(CHAR_INPUT_HEX(c)); - if (i == 0 || *pt != '}') - { - cfprintf(clr_test_error, outfile, "** Malformed \\x{ escape\n"); - return PR_OK; - } - else p = pt + 1; - } - else - { - /* \x without {} always defines just one byte in 8-bit mode. This - allows UTF-8 characters to be constructed byte by byte, and also allows - invalid UTF-8 sequences to be made. Just copy the byte in UTF-8 mode. - Otherwise, pass it down as data. */ - - while (i++ < 2 && isxdigit(*p)) - { - c = c * 16 + (tolower(*p) - (isdigit(*p)? '0' : 'a' - 10)); - p++; - } - c = CHAR_OUTPUT(CHAR_INPUT_HEX(c)); -#if PCRE2_CODE_UNIT_WIDTH == 8 - if (utf) encoding = FORCE_RAW; -#endif - } - break; - - case 'N': -#ifndef EBCDIC - if (memcmp(p, "{U+", 3) == 0 && isxdigit(p[3])) - { - char *endptr; - unsigned long uli; - - p += 3; - errno = 0; - uli = strtoul((const char *)p, &endptr, 16); - if (errno == 0 && *endptr == '}' && uli <= UINT32_MAX) - { - c = (uint32_t)uli; - p = (uint8_t *)endptr + 1; - encoding = FORCE_UTF; - break; - } - } -#endif - cfprintf(clr_test_error, outfile, "** Malformed \\N{U+ escape\n"); - return PR_OK; - - case 0: /* \ followed by EOF allows for an empty line */ - p--; - continue; - - case '=': /* \= terminates the data, starts modifiers */ - goto ENDSTRING; - - case '[': /* \[ introduces a replicated character sequence */ - if (start_rep != NULL) - { - cfprintf(clr_test_error, outfile, "** Nested replication is not supported\n"); - return PR_OK; - } - start_rep = q; - continue; - - default: - if (isalnum(c)) - { - cfprintf(clr_test_error, outfile, "** Unrecognized escape sequence \"\\%c\"\n", c); - return PR_OK; - } - } - - /* We now have a character value in c that may be greater than 255. - Depending of how we got it, the encoding enum could be set to tell - us how to encode it, otherwise follow the utf modifier. */ - -#if PCRE2_CODE_UNIT_WIDTH == 8 - if (encoding == FORCE_RAW || !(utf || encoding == FORCE_UTF)) - { - if (c > 0xffu) - { - cfprintf(clr_test_error, outfile, "** Character \\x{%x} is greater than 255 " - "and UTF-8 mode is not enabled.\n", c); - cfprintf(clr_test_error, outfile, "** Truncation will probably give the wrong " - "result.\n"); - } - *q++ = (uint8_t)c; - } - else - { - if (c > 0x7fffffff) - { - cfprintf(clr_test_error, outfile, "** Character \\N{U+%x} is greater than 0x7fffffff " - "and therefore cannot be encoded as UTF-8\n", c); - return PR_OK; - } - else if (encoding == FORCE_UTF && c > MAX_UTF_CODE_POINT) - cfprintf(clr_test_error, outfile, "** Warning: character \\N{U+%x} is greater than " - "0x%x and should not be encoded as UTF-8\n", - c, MAX_UTF_CODE_POINT); - q += ord_to_utf8(c, q); - } -#endif -#if PCRE2_CODE_UNIT_WIDTH == 16 - /* Unlike the 8-bit code, there are no forced raw suggestions for the - 16-bit mode, so assume raw unless utf is preferred */ - - if (!(encoding == FORCE_UTF || utf)) - { - if (c > 0xffffu) - { - cfprintf(clr_test_error, outfile, "** Character \\x{%x} is greater than 0xffff " - "and UTF-16 mode is not enabled.\n", c); - cfprintf(clr_test_error, outfile, "** Truncation will probably give the wrong " - "result.\n"); - } - *q++ = (uint16_t)c; - } - else - { - if (c > MAX_UTF_CODE_POINT) - { - cfprintf(clr_test_error, outfile, "** Failed: character \\N{U+%x} is greater than " - "0x%x and therefore cannot be encoded as UTF-16\n", - c, MAX_UTF_CODE_POINT); - return PR_OK; - } - else if (c >= 0x10000u) - { - c -= 0x10000u; - *q++ = 0xd800 | (c >> 10); - *q++ = 0xdc00 | (c & 0x3ff); - } - else - { - if (encoding == FORCE_UTF && 0xe000u > c && c >= 0xd800u) - cfprintf(clr_test_error, outfile, "** Warning: character \\N{U+%x} is a surrogate " - "and should not be encoded as UTF-16\n", c); - *q++ = c; - } - } -#endif -#if PCRE2_CODE_UNIT_WIDTH == 32 - if (encoding == FORCE_UTF && c > MAX_UTF_CODE_POINT) - cfprintf(clr_test_error, outfile, "** Warning: character \\N{U+%x} is greater than " - "0x%x and should not be encoded as UTF-32\n", - c, MAX_UTF_CODE_POINT); - *q++ = c; -#endif - } - -ENDSTRING: -*q = 0; -len = (uint8_t *)q - dbuffer; /* Length in bytes */ -ulen = BYTES2CU(len); /* Length in code units */ -arg_ulen = ulen; /* Value to use in match arg */ - -/* If the string was terminated by \= we must now interpret modifiers. */ - -if (p[-1] != 0 && !decode_modifiers(p, CTX_DAT, NULL, &dat_datctl)) - return PR_OK; - -/* Setting substitute_{skip,fail} implies a substitute callout. */ - -if (dat_datctl.substitute_skip != 0 || dat_datctl.substitute_stop != 0) - dat_datctl.control2 |= CTL2_SUBSTITUTE_CALLOUT; - -/* Check for mutually exclusive modifiers. At present, these are all in the -first control word. */ - -for (k = 0; k < sizeof(exclusive_dat_controls)/sizeof(uint32_t); k++) - { - c = dat_datctl.control & exclusive_dat_controls[k]; - if (c != 0 && c != (c & (~c+1))) - { - show_controls(clr_test_error, c, 0, "** Not allowed together:"); - fprintf(outfile, "\n"); - return PR_OK; - } - } - -if (dat_datctl.replacement[0] != MOD_STR_UNSET) - { - if ((dat_datctl.control2 & CTL2_SUBSTITUTE_CALLOUT) != 0 && - (dat_datctl.control & CTL_NULLCONTEXT) != 0) - { - cfprintf(clr_test_error, outfile, "** Replacement callouts are not supported with null_context.\n"); - return PR_OK; - } - - if ((dat_datctl.control2 & CTL2_SUBSTITUTE_CASE_CALLOUT) != 0 && - (dat_datctl.control & CTL_NULLCONTEXT) != 0) - { - cfprintf(clr_test_error, outfile, "** Replacement case callouts are not supported with null_context.\n"); - return PR_OK; - } - - if ((dat_datctl.control & CTL_ALLCAPTURES) != 0) - cfprintf(clr_test_error, outfile, "** Ignored with replacement text: allcaptures\n"); - - if (dat_datctl.substitute_subject[0] != MOD_STR_UNSET && - (dat_datctl.control2 & CTL2_SUBSTITUTE_MATCHED) == 0) - { - cfprintf(clr_test_error, outfile, "** substitute_subject requires substitute_matched.\n"); - return PR_OK; - } - } - -else - { - if (dat_datctl.substitute_subject[0] != MOD_STR_UNSET) - { - cfprintf(clr_test_error, outfile, "** substitute_subject requires replacement text.\n"); - return PR_OK; - } - } - -/* Warn for modifiers that are ignored for DFA. */ - -if ((dat_datctl.control & CTL_DFA) != 0) - { - if ((dat_datctl.control & CTL_ALLCAPTURES) != 0) - cfprintf(clr_test_error, outfile, "** Ignored for DFA matching: allcaptures\n"); - if ((dat_datctl.control2 & CTL2_HEAPFRAMES_SIZE) != 0) - cfprintf(clr_test_error, outfile, "** Ignored for DFA matching: heapframes_size\n"); - } - -/* We now have the subject in dbuffer, with len containing the byte length, and -ulen containing the code unit length, with a copy in arg_ulen for use in match -function arguments (this gets changed to PCRE2_ZERO_TERMINATED when the -zero_terminate modifier is present). - -Move the data to the end of the buffer so that a read over the end can be -caught by valgrind or other means. If we have explicit valgrind support, mark -the unused start of the buffer unaddressable. If we are using the POSIX -interface, or testing zero-termination, we must include the terminating zero in -the usable data. */ - -c = ((pat_patctl.control & CTL_POSIX) != 0 || - (dat_datctl.control & CTL_ZERO_TERMINATE) != 0)? CU2BYTES(1) : 0; -pp = memmove(dbuffer + dbuffer_size - (len + c), dbuffer, len + c); -#ifdef SUPPORT_VALGRIND -VALGRIND_MAKE_MEM_NOACCESS(dbuffer, dbuffer_size - (len + c)); -#endif - -#if defined(EBCDIC) && !EBCDIC_IO -ascii_to_ebcdic_str(pp, len); -#endif - -/* Now pp points to the subject string, but if null_subject was specified, set -it to NULL to test PCRE2's behaviour. */ - -if ((dat_datctl.control2 & CTL2_NULL_SUBJECT) != 0) pp = NULL; - -/* POSIX matching is only possible in 8-bit mode, and it does not support -timing or other fancy features. Some were checked at compile time, but we need -to check the match-time settings here. */ - -#if PCRE2_CODE_UNIT_WIDTH == 8 -if ((pat_patctl.control & CTL_POSIX) != 0) - { - int rc; - int eflags = 0; - regmatch_t *pmatch = NULL; - regmatch_t startend_buf; - const char *msg = "** Ignored with POSIX interface:"; - - if (dat_datctl.cerror[0] != CFORE_UNSET || dat_datctl.cerror[1] != CFORE_UNSET) - prmsg(&msg, "callout_error"); - if (dat_datctl.cfail[0] != CFORE_UNSET || dat_datctl.cfail[1] != CFORE_UNSET) - prmsg(&msg, "callout_fail"); - if (dat_datctl.copy_numbers[0] >= 0 || dat_datctl.copy_names[0] != 0) - prmsg(&msg, "copy"); - if (dat_datctl.get_numbers[0] >= 0 || dat_datctl.get_names[0] != 0) - prmsg(&msg, "get"); - if (dat_datctl.jitstack != 0) prmsg(&msg, "jitstack"); - if (dat_datctl.offset != 0) prmsg(&msg, "offset"); - - if ((dat_datctl.options & ~POSIX_SUPPORTED_MATCH_OPTIONS) != 0) - { - cfprintf(clr_test_error, outfile, "%s", msg); - show_match_options(clr_test_error, dat_datctl.options & ~POSIX_SUPPORTED_MATCH_OPTIONS); - msg = ""; - } - - if ((dat_datctl.control & ~POSIX_SUPPORTED_MATCH_CONTROLS) != 0 || - (dat_datctl.control2 & ~POSIX_SUPPORTED_MATCH_CONTROLS2) != 0) - { - show_controls(clr_test_error, dat_datctl.control & ~POSIX_SUPPORTED_MATCH_CONTROLS, - dat_datctl.control2 & ~POSIX_SUPPORTED_MATCH_CONTROLS2, msg); - msg = ""; - } - - if (msg[0] == 0) fprintf(outfile, "\n"); - - if (dat_datctl.oveccount > 0) - { - pmatch = (regmatch_t *)malloc(sizeof(regmatch_t) * dat_datctl.oveccount); - if (pmatch == NULL) - { - cfprintf(clr_test_error, outfile, "** Failed to get memory for recording matching " - "information (size set = %du)\n", dat_datctl.oveccount); - return PR_ABEND; - } - } - - if (dat_datctl.startend[0] != CFORE_UNSET) - { - if (pmatch == NULL) pmatch = &startend_buf; - pmatch[0].rm_so = (regoff_t)dat_datctl.startend[0]; - pmatch[0].rm_eo = (dat_datctl.startend[1] != 0)? - (regoff_t)dat_datctl.startend[1] : (regoff_t)len; - eflags |= REG_STARTEND; - } - - if ((dat_datctl.options & PCRE2_NOTBOL) != 0) eflags |= REG_NOTBOL; - if ((dat_datctl.options & PCRE2_NOTEOL) != 0) eflags |= REG_NOTEOL; - if ((dat_datctl.options & PCRE2_NOTEMPTY) != 0) eflags |= REG_NOTEMPTY; - - rc = regexec(&preg, (const char *)pp, dat_datctl.oveccount, pmatch, eflags); - if (rc != 0) - { - size_t usize = regerror(rc, &preg, (char *)pbuffer8, pbuffer8_size); - cfprintf(clr_api_error, outfile, "No match: POSIX code %d: ", rc); - pchars(clr_api_error, (PCRE2_SPTR8)pbuffer8, usize - 1, utf, outfile); - fputs("\n", outfile); - } - else if ((pat_patctl.control & CTL_POSIX_NOSUB) != 0) - fprintf(outfile, "Matched with REG_NOSUB\n"); - else if (dat_datctl.oveccount == 0) - fprintf(outfile, "Matched without capture\n"); - else - { - size_t i, j; - size_t last_printed = (size_t)dat_datctl.oveccount; - for (i = 0; i < (size_t)dat_datctl.oveccount; i++) - { - if (pmatch[i].rm_so >= 0) - { - PCRE2_SIZE start = pmatch[i].rm_so; - PCRE2_SIZE end = pmatch[i].rm_eo; - for (j = last_printed + 1; j < i; j++) - fprintf(outfile, "%2d: \n", (int)j); - last_printed = i; - if (start > end) - { - start = pmatch[i].rm_eo; - end = pmatch[i].rm_so; - cfprintf(clr_api_error, outfile, "Start of matched string is beyond its end - " - "displaying from end to start.\n"); - } - fprintf(outfile, "%2d: ", (int)i); - pchars(clr_none, pp + start, end - start, utf, outfile); - fprintf(outfile, "\n"); - - if ((i == 0 && (dat_datctl.control & CTL_AFTERTEXT) != 0) || - (dat_datctl.control & CTL_ALLAFTERTEXT) != 0) - { - fprintf(outfile, "%2d+ ", (int)i); - /* Note: don't use the start/end variables here because we want to - show the text from what is reported as the end. */ - pchars(clr_none, pp + pmatch[i].rm_eo, len - pmatch[i].rm_eo, utf, outfile); - fprintf(outfile, "\n"); - } - } - } - } - if (pmatch != &startend_buf) free(pmatch); - return PR_OK; - } -#endif /* PCRE2_CODE_UNIT_WIDTH == 8 */ - - /* Handle matching via the native interface. Check for consistency of -modifiers. */ - -if (dat_datctl.startend[0] != CFORE_UNSET) - cfprintf(clr_test_error, outfile, "** \\=posix_startend ignored for non-POSIX matching\n"); - -/* ALLUSEDTEXT is not supported with JIT, but JIT is not used with DFA -matching, even if the JIT compiler was used. */ - -if ((dat_datctl.control & (CTL_ALLUSEDTEXT|CTL_DFA)) == CTL_ALLUSEDTEXT && - compiled_code->executable_jit != NULL) - { - cfprintf(clr_test_error, outfile, "** Showing all consulted text is not supported by JIT: ignored\n"); - dat_datctl.control &= ~CTL_ALLUSEDTEXT; - } - -/* Handle passing the subject as zero-terminated. */ - -if ((dat_datctl.control & CTL_ZERO_TERMINATE) != 0) - arg_ulen = PCRE2_ZERO_TERMINATED; - -/* The nullcontext modifier is used to test calling pcre2_[jit_]match() with a -NULL context. */ - -use_dat_context = ((dat_datctl.control & CTL_NULLCONTEXT) != 0)? - NULL : dat_context; - -/* Enable display of malloc/free if wanted. We can do this only if either the -pattern or the subject is processed with a context. */ - -show_memory = (dat_datctl.control & CTL_MEMORY) != 0; - -if (show_memory && - (pat_patctl.control & dat_datctl.control & CTL_NULLCONTEXT) != 0) - cfprintf(clr_test_error, outfile, "** \\=memory requires either a pattern or a subject " - "context: ignored\n"); - -/* Create and assign a JIT stack if requested. */ - -if (dat_datctl.jitstack != 0) - { - if (dat_datctl.jitstack != jit_stack_size) - { - pcre2_jit_stack_free(jit_stack); - jit_stack = pcre2_jit_stack_create(1, dat_datctl.jitstack * 1024, NULL); - jit_stack_size = dat_datctl.jitstack; - } - pcre2_jit_stack_assign(dat_context, jit_callback, jit_stack); - } - -/* Or de-assign */ - -else if (jit_stack != NULL) - { - pcre2_jit_stack_assign(dat_context, NULL, NULL); - pcre2_jit_stack_free(jit_stack); - jit_stack = NULL; - jit_stack_size = 0; - } - -/* When no JIT stack is assigned, we must ensure that there is a JIT callback -if we want to verify that JIT was actually used. */ - -if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_stack == NULL) - { - pcre2_jit_stack_assign(dat_context, jit_callback, NULL); - } - -/* Set up the match callout. The pattern remains in pbuffer8/16/32 after -compilation, for use by the callout. */ - -if ((dat_datctl.control & CTL_CALLOUT_NONE) == 0) - { - pcre2_set_callout(dat_context, callout_function, - (void *)(&dat_datctl.callout_data)); - } -else - { - pcre2_set_callout(dat_context, NULL, NULL); /* No callout */ - } - -/* Adjust match_data according to size of offsets required. A size of zero -causes a new match data block to be obtained that exactly fits the pattern. */ - -if (dat_datctl.oveccount == 0) - { - pcre2_match_data_free(match_data); - match_data = pcre2_match_data_create_from_pattern(compiled_code, - general_context); - max_oveccount = pcre2_get_ovector_count(match_data); - } -else if (dat_datctl.oveccount <= max_oveccount) - { - match_data->oveccount = dat_datctl.oveccount; - } -else - { - max_oveccount = dat_datctl.oveccount; - pcre2_match_data_free(match_data); - match_data = pcre2_match_data_create(max_oveccount, general_context); - } - -if (match_data == NULL) - { - cfprintf(clr_test_error, outfile, "** Failed to get memory for recording matching " - "information (size requested: %d)\n", dat_datctl.oveccount); - max_oveccount = 0; - return PR_ABEND; - } - -ovector = match_data->ovector; -oveccount = pcre2_get_ovector_count(match_data); - -/* Helper to clear any cached heap frames from the match_data. */ - -#define CLEAR_HEAP_FRAMES() \ - do { \ - void *heapframes = (void *)(match_data->heapframes); \ - void *memory_data = match_data->memctl.memory_data; \ - match_data->memctl.free(heapframes, memory_data); \ - match_data->heapframes = NULL; \ - match_data->heapframes_size = 0; \ - } \ - while (0) - -/* Replacement processing is ignored for DFA matching. Allow this for -replacements with PCRE2_SUBSTITUTE_MATCHED, even though it won't work, in order -to exercise the error condition. */ - -if (dat_datctl.replacement[0] != MOD_STR_UNSET && - (dat_datctl.control & CTL_DFA) != 0 && - (dat_datctl.control2 & CTL2_SUBSTITUTE_MATCHED) == 0) - { - cfprintf(clr_test_error, outfile, "** Ignored for DFA matching: replace\n"); - dat_datctl.replacement[0] = MOD_STR_UNSET; - } - -/* If a replacement string is provided, call pcre2_substitute() instead of or -after one of the matching functions. First we have to convert the replacement -string to the appropriate width. */ - -if (dat_datctl.replacement[0] != MOD_STR_UNSET) - { - int rc; - uint8_t *pr, *prend; - PCRE2_UCHAR sbuffer[SUBSTITUTE_SUBJECT_MODSIZE]; /* Staging, not seen by pcre2_substitute() */ - PCRE2_UCHAR *rbptr; - PCRE2_UCHAR *sbptr; - uint32_t xoptions; - uint32_t emoption; /* External match option */ - PCRE2_SIZE j, rlen, full_rlen, nsize, nsize_input, slen; - pcre2_match_data *smatch_data; - - /* Fill the ovector with junk to detect elements that do not get set - when they should be (relevant only when "allvector" is specified). */ - - for (j = 0; j < 2*oveccount; j++) ovector[j] = JUNK_OFFSET; - - if (timeitm) - cfprintf(clr_test_error, outfile, "** Timing is not supported with replace: ignored\n"); - - if ((dat_datctl.control & CTL_ALTGLOBAL) != 0) - cfprintf(clr_test_error, outfile, "** Altglobal is not supported with replace: ignored\n"); - - /* Check for a test that does substitution after an initial external match. - If this is set, we run the external match, but leave the interpretation of - its output to pcre2_substitute(). */ - - emoption = ((dat_datctl.control2 & CTL2_SUBSTITUTE_MATCHED) == 0)? 0 : - PCRE2_SUBSTITUTE_MATCHED; - - if (emoption != 0) - { - reset_callout_state(); - if ((dat_datctl.control & CTL_DFA) != 0) - { - if (dfa_workspace == NULL) - dfa_workspace = (int *)malloc(DFA_WS_DIMENSION*sizeof(int)); - dfa_workspace[0] = -1; - (void)pcre2_dfa_match(compiled_code, pp, arg_ulen, - dat_datctl.offset, dat_datctl.options, match_data, - use_dat_context, dfa_workspace, DFA_WS_DIMENSION); - } - else if ((pat_patctl.control & CTL_JITFAST) != 0) - { - (void)pcre2_jit_match(compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options, match_data, use_dat_context); - } - else - { - (void)pcre2_match(compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options, match_data, use_dat_context); - } - } - - xoptions = emoption | - (((dat_datctl.control & CTL_GLOBAL) == 0)? 0 : - PCRE2_SUBSTITUTE_GLOBAL) | - (((dat_datctl.control2 & CTL2_SUBSTITUTE_EXTENDED) == 0)? 0 : - PCRE2_SUBSTITUTE_EXTENDED) | - (((dat_datctl.control2 & CTL2_SUBSTITUTE_LITERAL) == 0)? 0 : - PCRE2_SUBSTITUTE_LITERAL) | - (((dat_datctl.control2 & CTL2_SUBSTITUTE_OVERFLOW_LENGTH) == 0)? 0 : - PCRE2_SUBSTITUTE_OVERFLOW_LENGTH) | - (((dat_datctl.control2 & CTL2_SUBSTITUTE_REPLACEMENT_ONLY) == 0)? 0 : - PCRE2_SUBSTITUTE_REPLACEMENT_ONLY) | - (((dat_datctl.control2 & CTL2_SUBSTITUTE_UNKNOWN_UNSET) == 0)? 0 : - PCRE2_SUBSTITUTE_UNKNOWN_UNSET) | - (((dat_datctl.control2 & CTL2_SUBSTITUTE_UNSET_EMPTY) == 0)? 0 : - PCRE2_SUBSTITUTE_UNSET_EMPTY); - - pr = dat_datctl.replacement+1; - prend = pr + dat_datctl.replacement[0]; - - /* If the replacement starts with '[]' we interpret that as length - value for the replacement buffer. */ - - nsize = rep_out_buffer_size; - if (pr < prend && *pr == '[') - { - PCRE2_SIZE n = 0; - ++pr; - for (; pr < prend && (c = *pr) >= '0' && c <= '9'; ++pr) - n = n * 10 + (c - '0'); - if (pr >= prend || *pr != ']') - { - cfprintf(clr_test_error, outfile, "** Bad buffer size in replacement string\n"); - return PR_OK; - } - ++pr; - if (n > nsize) - { - cfprintf(clr_test_error, outfile, "** Replacement buffer setting (%" SIZ_FORM ") is too " - "large (max %" SIZ_FORM ")\n", n, nsize); - return PR_OK; - } - nsize = n; - } - -#ifdef SUPPORT_VALGRIND - VALGRIND_MAKE_MEM_UNDEFINED(rep_out_buffer, CU2BYTES(nsize)); - VALGRIND_MAKE_MEM_NOACCESS(rep_out_buffer + nsize, - CU2BYTES(rep_out_buffer_size - nsize)); -#endif - - /* Now copy the rest of the replacement string to the buffer. */ - -#ifdef SUPPORT_VALGRIND - VALGRIND_MAKE_MEM_UNDEFINED(rep_in_buffer, CU2BYTES(rep_in_buffer_size)); -#endif - - copy_substitute_string(utf, pr, prend-pr, rep_in_buffer, &rlen); - -#ifdef SUPPORT_VALGRIND - c = ((dat_datctl.control & CTL_ZERO_TERMINATE) != 0)? 1 : 0; - VALGRIND_MAKE_MEM_NOACCESS(rep_in_buffer + rlen + c, - CU2BYTES(rep_in_buffer_size - rlen + c)); -#endif - - full_rlen = rlen; - if ((dat_datctl.control & CTL_ZERO_TERMINATE) != 0) - rlen = PCRE2_ZERO_TERMINATED; - rbptr = ((dat_datctl.control2 & CTL2_NULL_REPLACEMENT) == 0)? rep_in_buffer : NULL; - - /* If the substitute_subject modifier is set, then we will modify the - subject in between the call to pcre2_match and pcre2_substitute. */ - - sbptr = pp; - slen = arg_ulen; - - if (dat_datctl.substitute_subject[0] != MOD_STR_UNSET) - { - copy_substitute_string(utf, dat_datctl.substitute_subject+1, - dat_datctl.substitute_subject[0], sbuffer, &slen); - - /* The buffer pointed to by pp has exactly the correct length (butted up - against the end of the memory allocation) so it would be possible but - awkward to extend the subject. However, since pcre2_substitute() won't allow - changing the length of the subject, and also early-exits if the subject - pointer changes, we can test all the branches just by supporting shrinking - the subject. */ - if (slen > ulen) - { - cfprintf(clr_test_error, outfile, "** substitute_subject is longer than match subject buffer\n"); - return PR_OK; - } - - /* In the null-subject case, there's no need to copy. */ - if (pp != NULL) - { - memcpy(pp, sbuffer, CU2BYTES(slen)); - if (slen < ulen) ((PCRE2_UCHAR *)pp)[slen] = 0; - - /* If we shrank the subject, adjust the Valgrind readable area. */ -#ifdef SUPPORT_VALGRIND - c = ((dat_datctl.control & CTL_ZERO_TERMINATE) != 0)? 1 : 0; - VALGRIND_MAKE_MEM_NOACCESS((uint8_t *)pp + CU2BYTES(slen+c), - (dbuffer + dbuffer_size) - ((uint8_t *)pp + CU2BYTES(slen+c))); -#endif - } - - if ((dat_datctl.control & CTL_ZERO_TERMINATE) != 0) - slen = PCRE2_ZERO_TERMINATED; - } - - /* Set up the required callouts and context, and call pcre2_substitute(). */ - - smatch_data = ((CTL2_NULL_SUBSTITUTE_MATCH_DATA & dat_datctl.control2) == 0)? - match_data : NULL; - - if ((dat_datctl.control2 & CTL2_SUBSTITUTE_CALLOUT) != 0) - { - pcre2_set_substitute_callout(dat_context, substitute_callout_function, NULL); - } - else - { - pcre2_set_substitute_callout(dat_context, NULL, NULL); /* No callout */ - } - - if ((dat_datctl.control2 & CTL2_SUBSTITUTE_CASE_CALLOUT) != 0) - { - pcre2_set_substitute_case_callout(dat_context, substitute_case_callout_function, NULL); - } - else - { - pcre2_set_substitute_case_callout(dat_context, NULL, NULL); /* No callout */ - } - - if (malloc_testing) CLEAR_HEAP_FRAMES(); - reset_callout_state(); - nsize_input = nsize; - rc = pcre2_substitute(compiled_code, sbptr, slen, dat_datctl.offset, - dat_datctl.options|xoptions, smatch_data, use_dat_context, - rbptr, rlen, rep_out_buffer, &nsize); - - /* For malloc testing, we repeat the substitution. */ - - if (malloc_testing && (dat_datctl.control2 & CTL2_SUBSTITUTE_CALLOUT) == 0) - { - for (int i = 0, target_mallocs = mallocs_called; i <= target_mallocs; i++) - { - FILE *saved_outfile = outfile; - CLEAR_HEAP_FRAMES(); - reset_callout_state(); - mallocs_until_failure = i; - outfile = NULL; /* Suppress callout output during the malloc repetitions */ - nsize = nsize_input; - rc = pcre2_substitute(compiled_code, sbptr, slen, dat_datctl.offset, - dat_datctl.options|xoptions, smatch_data, use_dat_context, - rbptr, rlen, rep_out_buffer, &nsize); - mallocs_until_failure = INT_MAX; - outfile = saved_outfile; - - if (i < target_mallocs && rc != PCRE2_ERROR_NOMEMORY) - { - cfprintf(clr_test_error, outfile, "** malloc() Substitution test did not fail as expected (%d)\n", - rc); - return PR_ABEND; - } - } - } - - if (rc < 0) - { - cfprintf(clr_api_error, outfile, "Failed: error %d", rc); - if (rc != PCRE2_ERROR_NOMEMORY && nsize != PCRE2_UNSET) - cfprintf(clr_api_error, outfile, " at offset %ld in replacement", (long int)nsize); - cfprintf(clr_api_error, outfile, ": "); - if (!print_error_message(rc, "", "")) return PR_ABEND; - if (rc == PCRE2_ERROR_NOMEMORY && - (xoptions & PCRE2_SUBSTITUTE_OVERFLOW_LENGTH) != 0) - cfprintf(clr_api_error, outfile, ": %ld code units are needed", (long int)nsize); - - if (rc != PCRE2_ERROR_NOMEMORY && nsize != PCRE2_UNSET) - { - cfprintf(clr_api_error, outfile, "\n here: "); - if (nsize > 0) - { - ptrunc(clr_input, rbptr, full_rlen, nsize, TRUE, utf, outfile); - fprintf(outfile, " "); - } - cfprintf(clr_api_error, outfile, "|<--|"); - if (nsize < full_rlen) - { - fprintf(outfile, " "); - ptrunc(clr_input, rbptr, full_rlen, nsize, FALSE, utf, outfile); - } - } - } - else - { - cfprintf(clr_api_error, outfile, "%2d: ", rc); - pchars(clr_api_error, rep_out_buffer, nsize, utf, outfile); - } - - fprintf(outfile, "\n"); - show_memory = FALSE; - - /* Show final ovector contents and resulting heapframe size if requested. */ - - if ((dat_datctl.control2 & CTL2_ALLVECTOR) != 0) - show_ovector(ovector, oveccount); - - if ((dat_datctl.control2 & CTL2_HEAPFRAMES_SIZE) != 0 && - (dat_datctl.control & CTL_DFA) == 0) - show_heapframes_size(); - - return PR_OK; - } /* End of substitution handling */ - -/* When a replacement string is not provided, run a loop for global matching -with one of the basic matching functions. */ - -for (gmatched = 0;; gmatched++) - { - PCRE2_SIZE j; - int capcount; - - /* Fill the ovector with junk to detect elements that do not get set - when they should be. */ - - for (j = 0; j < 2*oveccount; j++) ovector[j] = JUNK_OFFSET; - - /* When matching is via pcre2_match(), we will detect the use of JIT via the - stack callback function. */ - - jit_was_used = (pat_patctl.control & CTL_JITFAST) != 0; - - /* Do timing if required. */ - - if (timeitm > 0) - { - int i; - clock_t start_time, time_taken; - FILE *saved_outfile = outfile; - - outfile = NULL; /* Suppress callout output during the timing repetitions */ - - if ((dat_datctl.control & CTL_DFA) != 0) - { - if ((dat_datctl.options & PCRE2_DFA_RESTART) != 0) - { - outfile = saved_outfile; - cfprintf(clr_test_error, outfile, "** Timing DFA restarts is not supported\n"); - return PR_ABEND; - } - if (dfa_workspace == NULL) - dfa_workspace = (int *)malloc(DFA_WS_DIMENSION*sizeof(int)); - start_time = clock(); - for (i = 0; i < timeitm; i++) - { - (void)pcre2_dfa_match(compiled_code, pp, arg_ulen, - dat_datctl.offset, dat_datctl.options | g_notempty, match_data, - use_dat_context, dfa_workspace, DFA_WS_DIMENSION); - } - } - - else if ((pat_patctl.control & CTL_JITFAST) != 0) - { - start_time = clock(); - for (i = 0; i < timeitm; i++) - { - (void)pcre2_jit_match(compiled_code, pp, arg_ulen, - dat_datctl.offset, dat_datctl.options | g_notempty, match_data, - use_dat_context); - } - } - - else - { - start_time = clock(); - for (i = 0; i < timeitm; i++) - { - (void)pcre2_match(compiled_code, pp, arg_ulen, - dat_datctl.offset, dat_datctl.options | g_notempty, match_data, - use_dat_context); - } - } - total_match_time += (time_taken = clock() - start_time); - - outfile = saved_outfile; - cfprintf(clr_profiling, outfile, "Match time %7.4f microseconds\n", - ((1000000 / CLOCKS_PER_SEC) * (double)time_taken) / timeitm); - } - - /* Find the heap, match and depth limits if requested. The depth and heap - limits are not relevant for JIT. The return from check_match_limit() is the - return from the final call to pcre2_match() or pcre2_dfa_match(). */ - - if ((dat_datctl.control & (CTL_FINDLIMITS|CTL_FINDLIMITS_NOHEAP)) != 0) - { - if ((dat_datctl.control & CTL_FINDLIMITS_NOHEAP) == 0 && - (compiled_code->executable_jit == NULL || - (dat_datctl.options & PCRE2_NO_JIT) != 0)) - { - (void)check_match_limit(pp, arg_ulen, PCRE2_ERROR_HEAPLIMIT, "heap"); - } - - capcount = check_match_limit(pp, arg_ulen, PCRE2_ERROR_MATCHLIMIT, - "match"); - - if (compiled_code->executable_jit == NULL || - (dat_datctl.options & PCRE2_NO_JIT) != 0 || - (dat_datctl.control & CTL_DFA) != 0) - { - capcount = check_match_limit(pp, arg_ulen, PCRE2_ERROR_DEPTHLIMIT, - "depth"); - } - - if (capcount == 0) - { - cfprintf(clr_api_error, outfile, "Matched, but offsets vector is too small to show all matches\n"); - capcount = dat_datctl.oveccount; - } - } - - /* Otherwise just run a single match. */ - - else - { - /* Run a single DFA or NFA match. */ - - if (malloc_testing) CLEAR_HEAP_FRAMES(); - reset_callout_state(); - if ((dat_datctl.control & CTL_DFA) != 0) - { - if (dfa_workspace == NULL) - dfa_workspace = (int *)malloc(DFA_WS_DIMENSION*sizeof(int)); - if (dfa_matched++ == 0) - dfa_workspace[0] = -1; /* To catch bad restart */ - capcount = pcre2_dfa_match(compiled_code, pp, arg_ulen, - dat_datctl.offset, dat_datctl.options | g_notempty, match_data, - use_dat_context, dfa_workspace, DFA_WS_DIMENSION); - if (capcount == 0) - { - cfprintf(clr_api_error, outfile, "Matched, but offsets vector is too small to show all matches\n"); - capcount = dat_datctl.oveccount; - } - } - else - { - if ((pat_patctl.control & CTL_JITFAST) != 0) - capcount = pcre2_jit_match(compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options | g_notempty, match_data, use_dat_context); - else - capcount = pcre2_match(compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options | g_notempty, match_data, use_dat_context); - if (capcount == 0) - { - cfprintf(clr_api_error, outfile, "Matched, but too many substrings\n"); - capcount = dat_datctl.oveccount; - } - } - - /* For malloc testing, we repeat the matching. */ - - if (malloc_testing && (dat_datctl.control & CTL_CALLOUT_NONE) != 0) - { - for (int i = 0, target_mallocs = mallocs_called; i <= target_mallocs; i++) - { - FILE *saved_outfile = outfile; - - CLEAR_HEAP_FRAMES(); - reset_callout_state(); - - mallocs_until_failure = i; - outfile = NULL; /* Suppress callout output during the malloc repetitions */ - - if ((dat_datctl.control & CTL_DFA) != 0) - { - if (dfa_matched++ == 0) - dfa_workspace[0] = -1; /* To catch bad restart */ - capcount = pcre2_dfa_match(compiled_code, pp, arg_ulen, - dat_datctl.offset, dat_datctl.options | g_notempty, match_data, - use_dat_context, dfa_workspace, DFA_WS_DIMENSION); - } - else - { - if ((pat_patctl.control & CTL_JITFAST) != 0) - capcount = pcre2_jit_match(compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options | g_notempty, match_data, use_dat_context); - else - capcount = pcre2_match(compiled_code, pp, arg_ulen, dat_datctl.offset, - dat_datctl.options | g_notempty, match_data, use_dat_context); - } - - mallocs_until_failure = INT_MAX; - outfile = saved_outfile; - - if (capcount == 0) - capcount = dat_datctl.oveccount; - - if (i < target_mallocs && capcount != PCRE2_ERROR_NOMEMORY) - { - cfprintf(clr_test_error, outfile, "** malloc() match test did not fail as expected (%d)\n", - capcount); - return PR_ABEND; - } - } - } - } - - /* Verify that it's safe to call pcre2_next_match with rc < 0. */ - - if (capcount < 0 && (dat_datctl.control & CTL_ANYGLOB) != 0) - { - BOOL rc_nextmatch; - PCRE2_SIZE tmp_offset = 0xcd; - uint32_t tmp_options = 0xcd; - rc_nextmatch = pcre2_next_match(match_data, &tmp_offset, &tmp_options); - if (rc_nextmatch || tmp_offset != 0xcd || tmp_options != 0xcd) - { - cfprintf(clr_test_error, outfile, "** unexpected pcre2_next_match() for rc < 0\n"); - return PR_ABEND; - } - } - - /* The result of the match is now in capcount. First handle a successful - match. If pp was forced to be NULL (to test NULL handling) it will have been - treated as an empty string if the length was zero. So, re-create that for - outputting, preserving the invariant that pp is a valid pointer to a region - of length len followed by a null. */ - - if (capcount >= 0) - { - if (pp == NULL) - { -#ifdef SUPPORT_VALGRIND - /* Mark the start of dbuffer addressable again. */ - VALGRIND_MAKE_MEM_UNDEFINED(dbuffer, CU2BYTES(1)); -#endif - pp = (PCRE2_UCHAR *)dbuffer; - *pp = 0; - } - - if ((unsigned)capcount > oveccount) /* Check for lunatic return value */ - { - cfprintf(clr_test_error, outfile, - "** PCRE2 error: returned count %d is too big for ovector count %d\n", - capcount, oveccount); - return PR_ABEND; - } - - /* If PCRE2_COPY_MATCHED_SUBJECT was set, check that things are as they - should be, but not for fast JIT, where it isn't supported. */ - - if ((dat_datctl.options & PCRE2_COPY_MATCHED_SUBJECT) != 0 && - (pat_patctl.control & CTL_JITFAST) == 0) - { - if ((match_data->flags & PCRE2_MD_COPIED_SUBJECT) == 0) - cfprintf(clr_test_error, outfile, - "** PCRE2 error: flag not set after copy_matched_subject\n"); - - if (match_data->subject == pp) - cfprintf(clr_test_error, outfile, - "** PCRE2 error: copy_matched_subject has not copied\n"); - - if (memcmp(match_data->subject, pp, ulen) != 0) - cfprintf(clr_test_error, outfile, - "** PCRE2 error: copy_matched_subject mismatch\n"); - } - - /* If this is not the first time round a global loop, check that the - returned string has advanced. - - There is one known case where this doesn't happen: when you have a - "badly-behaved" pattern which uses \K in a lookaround, and breaks the core - sanity rule that start_offset <= ovector[0] <= ovector[1]. An example would - be /(?<=\Ka)/g matching "aaa". - * first attempt, start_offset=0: ovector[0]=0, ovector[1]=1 - * second attempt, start_offset=1: ovector[0]=0, ovector[1]=1 - - You can see that even though we *always* ensure that start_offset advances, - this doesn't guarantee to avoid duplicate matches. - - The pcre2test behaviour is to return all the matches found, except in the - case where two adjacent matches are an exact duplicate. */ - - if (gmatched > 0 && - !(dat_datctl.offset <= ovector[0] && ovector[0] <= ovector[1]) && - pp + ovector[0] == ovecsave[0] && pp + ovector[1] == ovecsave[1]) - { - cfprintf(clr_api_error, outfile, "global repeat returned the same match as previous\n"); - goto NEXT_MATCH; - } - - /* Outside of this exceptional case, we check that either we have a - "badly-behaved" match (note that not all badly-behaved matches are caught - above, only *duplicate* ones); or else in the well-behaved case the match - must make progress. - - "Progress" is measured as ovector[1] strictly advancing, or, an empty match - after a non-empty match. */ - - if (gmatched > 0 && - (dat_datctl.offset <= ovector[0] && ovector[0] <= ovector[1]) && - !(pp + ovector[1] > ovecsave[1] || - (ovector[1] == ovector[0] && ovecsave[1] != ovecsave[0] && - pp + ovector[1] == ovecsave[1]))) - { - cfprintf(clr_test_error, outfile, - "** PCRE2 error: global repeat did not make progress\n"); - return PR_ABEND; - } - - ovecsave[0] = pp + ovector[0]; - ovecsave[1] = pp + ovector[1]; - - /* "allcaptures" requests showing of all captures in the pattern, to check - unset ones at the end. It may be set on the pattern or the data. Implement - by setting capcount to the maximum. This is not relevant for DFA matching, - so ignore it (warning given above). */ - - if ((dat_datctl.control & (CTL_ALLCAPTURES|CTL_DFA)) == CTL_ALLCAPTURES) - { - capcount = maxcapcount + 1; /* Allow for full match */ - if ((unsigned)capcount > oveccount) capcount = oveccount; - } - - /* "allvector" request showing the entire ovector. */ - - if ((dat_datctl.control2 & CTL2_ALLVECTOR) != 0) capcount = oveccount; - - /* Output the captured substrings. Note that, for the matched string, - the use of \K in an assertion can make the start later than the end. */ - - for (int i = 0; i < 2*capcount; i += 2) - { - PCRE2_SIZE lleft, lmiddle, lright; - PCRE2_SIZE start = ovector[i]; - PCRE2_SIZE end = ovector[i+1]; - - if (start > end) - { - start = ovector[i+1]; - end = ovector[i]; - cfprintf(clr_api_error, outfile, "Start of matched string is beyond its end - " - "displaying from end to start.\n"); - } - - fprintf(outfile, "%2d: ", i/2); - - /* Check for an unset group */ - - if (start == PCRE2_UNSET && end == PCRE2_UNSET) - { - fprintf(outfile, "\n"); - continue; - } - - /* Check for silly offsets, in particular, values that have not been - set when they should have been. However, if we are past the end of the - captures for this pattern ("allvector" causes this), or if we are DFA - matching, it isn't an error if the entry is unchanged. */ - - if (start > ulen || end > ulen) - { - if (((dat_datctl.control & CTL_DFA) != 0 || - i >= (int)(2*maxcapcount + 2)) && - start == JUNK_OFFSET && end == JUNK_OFFSET) - fprintf(outfile, "\n"); - else - cfprintf(clr_test_error, outfile, "** ERROR: bad value(s) for offset(s): 0x%lx 0x%lx\n", - (unsigned long int)start, (unsigned long int)end); - continue; - } - - /* When JIT is not being used, ALLUSEDTEXT may be set. (It if is set with - JIT, it is disabled above, with a comment.) When the match is done by the - interpreter, leftchar and rightchar are available, and if ALLUSEDTEXT is - set, and if the leftmost consulted character is before the start of the - match or the rightmost consulted character is past the end of the match, - we want to show all consulted characters for the main matched string, and - indicate which were lookarounds. */ - - if (i == 0) - { - BOOL showallused; - PCRE2_SIZE leftchar, rightchar; - - if ((dat_datctl.control & CTL_ALLUSEDTEXT) != 0) - { - leftchar = match_data->leftchar; - rightchar = match_data->rightchar; - showallused = i == 0 && (leftchar < start || rightchar > end); - } - else showallused = FALSE; - - if (showallused) - { - lleft = pchars(clr_none, pp + leftchar, start - leftchar, utf, outfile); - lmiddle = pchars(clr_none, pp + start, end - start, utf, outfile); - lright = pchars(clr_none, pp + end, rightchar - end, utf, outfile); - if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_was_used) - fprintf(outfile, " (JIT)"); - fprintf(outfile, "\n "); - for (j = 0; j < lleft; j++) fprintf(outfile, "<"); - for (j = 0; j < lmiddle; j++) fprintf(outfile, " "); - for (j = 0; j < lright; j++) fprintf(outfile, ">"); - } - - /* When a pattern contains \K, the start of match position may be - different to the start of the matched string. When this is the case, - show it when requested. */ - - else if ((dat_datctl.control & CTL_STARTCHAR) != 0) - { - PCRE2_SIZE startchar; - startchar = pcre2_get_startchar(match_data); - lleft = pchars(clr_none, pp + startchar, start - startchar, utf, outfile); - pchars(clr_none, pp+start, end - start, utf, outfile); - if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_was_used) - fprintf(outfile, " (JIT)"); - if (startchar != start) - { - fprintf(outfile, "\n "); - for (j = 0; j < lleft; j++) fprintf(outfile, "^"); - } - } - - /* Otherwise, just show the matched string. */ - - else - { - pchars(clr_none, pp + start, end - start, utf, outfile); - if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_was_used) - fprintf(outfile, " (JIT)"); - } - } - - /* Not the main matched string. Just show it unadorned. */ - - else - { - pchars(clr_none, pp + start, end - start, utf, outfile); - } - - fprintf(outfile, "\n"); - - /* Note: don't use the start/end variables here because we want to - show the text from what is reported as the end. */ - - if ((dat_datctl.control & CTL_ALLAFTERTEXT) != 0 || - (i == 0 && (dat_datctl.control & CTL_AFTERTEXT) != 0)) - { - fprintf(outfile, "%2d+ ", i/2); - pchars(clr_none, pp + ovector[i+1], ulen - ovector[i+1], utf, outfile); - fprintf(outfile, "\n"); - } - } - - /* Output (*MARK) data if requested */ - - if ((dat_datctl.control & CTL_MARK) != 0 && - match_data->mark != NULL) - { - fprintf(outfile, "MK: "); - pchars(clr_none, match_data->mark - 1, -1, utf, outfile); - fprintf(outfile, "\n"); - } - - /* Process copy/get strings */ - - if (!copy_and_get(utf, capcount)) return PR_ABEND; - - } /* End of handling a successful match */ - - /* There was a partial match. The value of ovector[0] is the bumpalong point, - that is, startchar, not any \K point that might have been passed. When JIT is - not in use, "allusedtext" may be set, in which case we indicate the leftmost - consulted character. */ - - else if (capcount == PCRE2_ERROR_PARTIAL) - { - PCRE2_SIZE leftchar; - int backlength; - int rubriclength = 0; - - if ((dat_datctl.control & CTL_ALLUSEDTEXT) != 0) - { - leftchar = match_data->leftchar; - } - else leftchar = ovector[0]; - - cfprintf(clr_api_error, outfile, "Partial match"); - if ((dat_datctl.control & CTL_MARK) != 0 && - match_data->mark != NULL) - { - fprintf(outfile, ", mark="); - rubriclength = pchars(clr_none, match_data->mark - 1, -1, utf, outfile); - rubriclength += 7; - } - fprintf(outfile, ": "); - rubriclength += 15; - - backlength = pchars(clr_input, pp + leftchar, ovector[0] - leftchar, utf, outfile); - pchars(clr_input, pp + ovector[0], ovector[1] - ovector[0], utf, outfile); - - if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_was_used) - fprintf(outfile, " (JIT)"); - fprintf(outfile, "\n"); - - if (backlength != 0) - { - for (int i = 0; i < rubriclength; i++) fprintf(outfile, " "); - for (int i = 0; i < backlength; i++) fprintf(outfile, "<"); - fprintf(outfile, "\n"); - } - - if (ulen != ovector[1]) - cfprintf(clr_test_error, outfile, "** ovector[1] is not equal to the subject length: " - "%ld != %ld\n", (unsigned long int)ovector[1], (unsigned long int)ulen); - - /* Process copy/get strings */ - - if (!copy_and_get(utf, 1)) return PR_ABEND; - - /* "allvector" outputs the entire vector */ - - if ((dat_datctl.control2 & CTL2_ALLVECTOR) != 0) - show_ovector(ovector, oveccount); - - break; /* Out of the /g loop */ - } /* End of handling partial match */ - - /* A "normal" match failure. There will be a negative error number in - capcount. */ - - else - { - switch(capcount) - { - case PCRE2_ERROR_NOMATCH: - if (gmatched == 0) - { - cfprintf(clr_api_error, outfile, "No match"); - if ((dat_datctl.control & CTL_MARK) != 0 && - match_data->mark != NULL) - { - fprintf(outfile, ", mark = "); - pchars(clr_none, match_data->mark - 1, -1, utf, outfile); - } - if ((pat_patctl.control & CTL_JITVERIFY) != 0 && jit_was_used) - fprintf(outfile, " (JIT)"); - fprintf(outfile, "\n"); - - /* "allvector" outputs the entire vector */ - - if ((dat_datctl.control2 & CTL2_ALLVECTOR) != 0) - show_ovector(ovector, oveccount); - } - break; - - case PCRE2_ERROR_BADUTFOFFSET: - cfprintf(clr_api_error, outfile, "Error %d (bad UTF-" STR(PCRE2_CODE_UNIT_WIDTH) - " offset)\n", capcount); - break; - - default: - cfprintf(clr_api_error, outfile, "Failed: error %d: ", capcount); - if (!print_error_message(capcount, "", "")) return PR_ABEND; - if (capcount <= PCRE2_ERROR_UTF8_ERR1 && - capcount >= PCRE2_ERROR_UTF32_ERR2) - { - PCRE2_SIZE startchar; - startchar = pcre2_get_startchar(match_data); - cfprintf(clr_api_error, outfile, " at offset %" SIZ_FORM, startchar); - } - fprintf(outfile, "\n"); - break; - } - - break; /* Out of the /g loop */ - } /* End of failed match handling */ - - /* Control reaches here after a match. If we are not doing a global search, - we are done. Otherwise, we adjust the parameters for the next match and - continue the matching loop. */ - - NEXT_MATCH: - - if ((dat_datctl.control & CTL_ANYGLOB) == 0) - break; - else - { - PCRE2_SIZE new_start_offset = (PCRE2_SIZE)-1; - BOOL rc_nextmatch; - - /* Use pcre2_next_match() to safely advance. This guarantees that the start - offset will advance, except after an empty match, in which case it sets - the PCRE2_NOTEMPTY_ATSTART flag to ensure the next match does not return a - duplicate. */ - - rc_nextmatch = pcre2_next_match(match_data, &new_start_offset, &g_notempty); - if (!rc_nextmatch) break; /* Out of the /g loop */ - - /* For a normal global (/g) iteration, update the start offset, leaving - other parameters alone. */ - - if ((dat_datctl.control & CTL_GLOBAL) != 0) - { - dat_datctl.offset = new_start_offset; - } - - /* For altglobal, just update the pointer and length. */ - - else - { - pp += new_start_offset; - len -= CU2BYTES(new_start_offset); - ulen -= new_start_offset; - if (arg_ulen != PCRE2_ZERO_TERMINATED) arg_ulen -= new_start_offset; - } - } - } /* End of global loop */ - -/* All matching is done; show the resulting heapframe size if requested. */ - -if ((dat_datctl.control2 & CTL2_HEAPFRAMES_SIZE) != 0 && - (dat_datctl.control & CTL_DFA) == 0) - show_heapframes_size(); - -show_memory = FALSE; -return PR_OK; -} - - - -/************************************************* -* Initialise the mode-dependent globals * -*************************************************/ - -/* Sets up the global variables used for the current test mode. */ - -static void -init_globals(void) -{ -general_context = pcre2_general_context_create(&my_malloc, &my_free, NULL); -general_context_copy = pcre2_general_context_copy(general_context); -default_pat_context = pcre2_compile_context_create(general_context); -pat_context = pcre2_compile_context_copy(default_pat_context); -default_dat_context = pcre2_match_context_create(general_context); -dat_context = pcre2_match_context_copy(default_dat_context); -default_con_context = pcre2_convert_context_create(general_context); -con_context = pcre2_convert_context_copy(default_con_context); -match_data = pcre2_match_data_create(max_oveccount, general_context); -rep_in_buffer = malloc(sizeof(PCRE2_UCHAR) * rep_in_buffer_size); -rep_out_buffer = malloc(sizeof(PCRE2_UCHAR) * rep_out_buffer_size); - -/* Set a default parentheses nest limit that is large enough to run the -standard tests (this also exercises the function). */ - -pcre2_set_parens_nest_limit(default_pat_context, PARENS_NEST_DEFAULT); -} - -/* Frees the global variables used for the current test mode. */ - -static void -free_globals(void) -{ -pcre2_maketables_free(general_context, locale_tables); -pcre2_match_data_free(match_data); -pcre2_code_free(compiled_code); - -while(patstacknext-- > 0) - { - compiled_code = patstack[patstacknext]; - pcre2_code_free(compiled_code); - } - -pcre2_jit_free_unused_memory(general_context); -if (jit_stack != NULL) - { - pcre2_jit_stack_free(jit_stack); - } - -pcre2_general_context_free(general_context); -pcre2_general_context_free(general_context_copy); -pcre2_compile_context_free(pat_context); -pcre2_compile_context_free(default_pat_context); -pcre2_match_context_free(dat_context); -pcre2_match_context_free(default_dat_context); -pcre2_convert_context_free(default_con_context); -pcre2_convert_context_free(con_context); -free(rep_in_buffer); -free(rep_out_buffer); -} - - - -/************************************************* -* Specific function tests * -*************************************************/ - -/* For tests exercising a mismatched bitmode, identify a suitable API. */ - -#if (defined(SUPPORT_PCRE2_8) + defined(SUPPORT_PCRE2_16) + \ - defined(SUPPORT_PCRE2_32)) >= 2 - -#if defined(SUPPORT_PCRE2_8) && PCRE2_CODE_UNIT_WIDTH != 8 -#define BITOTHER 8 -#elif defined(SUPPORT_PCRE2_16) && PCRE2_CODE_UNIT_WIDTH != 16 -#define BITOTHER 16 -#elif defined(SUPPORT_PCRE2_32) && PCRE2_CODE_UNIT_WIDTH != 32 -#define BITOTHER 32 -#else -#error "One other bit width must be supported" -#endif - -#endif - -/* These are tests of the public API functions in PCRE2, which wouldn't -otherwise be covered by pcre2test. This usually implies they are error cases, -or edge cases that are hard to hit in the standard flow of compile-match or -compile-substitute. - -I think of them as perhaps more like unit tests, although they are still testing -the public API, rather than internal modules. - -Inside pcre2test, which can be dynamically linked to lib-pcreX.so, we don't -have access to any non-exported functions. */ - -static void -unittest(void) -{ -int rc; -uint32_t uval; -PCRE2_SIZE sizeval; -PCRE2_UCHAR *sptrval; -const char *failure = NULL; -pcre2_general_context *test_gen_context = NULL, *test_gen_context_copy = NULL; -pcre2_compile_context *test_pat_context = NULL, *test_pat_context_copy = NULL; -pcre2_match_context *test_dat_context = NULL, *test_dat_context_copy = NULL; -pcre2_convert_context *test_con_context = NULL, *test_con_context_copy = NULL; -pcre2_match_data *test_match_data = NULL; -pcre2_code *test_compiled_code = NULL; -PCRE2_UCHAR pattern[] = { CHAR_A, CHAR_B, CHAR_C, 0 }; -PCRE2_UCHAR callout_int_pattern[] = { - CHAR_LEFT_PARENTHESIS, CHAR_QUESTION_MARK, CHAR_C, CHAR_RIGHT_PARENTHESIS, 0 }; -PCRE2_UCHAR callout_str_pattern[] = { - CHAR_LEFT_PARENTHESIS, CHAR_QUESTION_MARK, CHAR_C, CHAR_QUOTATION_MARK, - CHAR_Z, CHAR_QUOTATION_MARK, CHAR_RIGHT_PARENTHESIS, 0 }; -PCRE2_UCHAR capture_pattern[] = { - CHAR_A, CHAR_LEFT_PARENTHESIS, CHAR_QUESTION_MARK, CHAR_LESS_THAN_SIGN, - CHAR_N, CHAR_GREATER_THAN_SIGN, CHAR_DOT, CHAR_ASTERISK, - CHAR_RIGHT_PARENTHESIS, CHAR_Z, 0 }; -PCRE2_UCHAR subject_abcz[] = { - CHAR_A, CHAR_B, CHAR_C, CHAR_Z, 0 }; -PCRE2_UCHAR substitute_subject[6]; -PCRE2_UCHAR name_n[] = { CHAR_N, 0 }; -#ifdef BITOTHER -G(pcre2_code_,BITOTHER) *bitother_code = NULL; -G(PCRE2_,G(UCHAR,BITOTHER)) bitother_pattern[] = { CHAR_A, CHAR_B, CHAR_C, 0 }; -#endif -int errorcode; -PCRE2_SIZE erroroffset; -PCRE2_UCHAR errorbuffer[256]; -#if PCRE2_CODE_UNIT_WIDTH == 8 -char errorbuffer8[256]; -regex_t test_preg; -#endif -void *invalid_code = NULL; -const uint8_t *test_tables = NULL; -PCRE2_UCHAR copy_buf[64]; -PCRE2_UCHAR **stringlist; -PCRE2_SIZE *lengthslist; -PCRE2_UCHAR replace_buf[64]; -pcre2_code *subs_other_code = NULL; - -#if PCRE2_CODE_UNIT_WIDTH == 8 -memset(&test_preg, 0, sizeof(test_preg)); -#endif - -#if defined PCRE2_DEBUG && !defined NDEBUG -#define ASSERT(cond, msg) \ - do { \ - if (!(cond)) { failure = msg " at " __FILE__ ":" STR(__LINE__); goto EXIT; } \ - } while (0) -#else -#define ASSERT(cond, msg) \ - do { \ - if (!(cond)) { failure = msg; goto EXIT; } \ - } while (0) -#endif - -/* -------------------------- pcre2_config --------------------------------- */ - -rc = pcre2_config(PCRE2_CONFIG_BSR, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_COMPILED_WIDTHS, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_DEPTHLIMIT, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_EFFECTIVE_LINKSIZE, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_HEAPLIMIT, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_JIT, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_LINKSIZE, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_MATCHLIMIT, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_NEVER_BACKSLASH_C, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_NEWLINE, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_PARENSLIMIT, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_STACKRECURSE, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_TABLES_LENGTH, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_UNICODE, NULL); -ASSERT(rc == (int)sizeof(uint32_t), "pcre2_config(NULL)"); - -#ifdef SUPPORT_JIT -rc = pcre2_config(PCRE2_CONFIG_JITTARGET, NULL); -ASSERT(rc > 0, "pcre2_config(NULL)"); -#endif -rc = pcre2_config(PCRE2_CONFIG_UNICODE_VERSION, NULL); -ASSERT(rc > 4, "pcre2_config(NULL)"); -rc = pcre2_config(PCRE2_CONFIG_VERSION, NULL); -ASSERT(rc > 4, "pcre2_config(NULL)"); - -rc = pcre2_config(PCRE2_CONFIG_MATCHLIMIT, &uval); -ASSERT(rc == 0, "pcre2_config(PCRE2_CONFIG_MATCHLIMIT)"); - -rc = pcre2_config(999, NULL); -ASSERT(rc == PCRE2_ERROR_BADOPTION, "pcre2_config(bad option)"); - -rc = pcre2_config(999, &uval); -ASSERT(rc == PCRE2_ERROR_BADOPTION, "pcre2_config(bad option)"); - -rc = pcre2_config(PCRE2_CONFIG_STACKRECURSE, &uval); -ASSERT(rc == 0, "pcre2_config(PCRE2_CONFIG_STACKRECURSE)"); - -rc = pcre2_config(PCRE2_CONFIG_LINKSIZE, &uval); -ASSERT(rc == 0, "pcre2_config(PCRE2_CONFIG_LINKSIZE)"); - -/* ------------------------ Context functions ------------------------------ */ - -test_gen_context = pcre2_general_context_create(NULL, NULL, NULL); -ASSERT(test_gen_context != NULL, "pcre2_general_context_create(null)"); -pcre2_general_context_free(test_gen_context); - -mallocs_until_failure = 0; -test_gen_context = pcre2_general_context_create(&my_malloc, &my_free, NULL); -ASSERT(test_gen_context == NULL, "pcre2_general_context_create(malloc)"); - -mallocs_until_failure = 1; -test_gen_context = pcre2_general_context_create(&my_malloc, &my_free, NULL); -ASSERT(test_gen_context != NULL, "pcre2_general_context_create(malloc)"); - -test_pat_context = pcre2_compile_context_create(test_gen_context); -ASSERT(test_pat_context == NULL, "pcre2_compile_context_create()"); -test_dat_context = pcre2_match_context_create(test_gen_context); -ASSERT(test_dat_context == NULL, "pcre2_match_context_create()"); -test_con_context = pcre2_convert_context_create(test_gen_context); -ASSERT(test_con_context == NULL, "pcre2_convert_context_create()"); - -test_pat_context = pcre2_compile_context_create(NULL); -ASSERT(test_pat_context != NULL, "pcre2_compile_context_create(null)"); -pcre2_compile_context_free(test_pat_context); -test_dat_context = pcre2_match_context_create(NULL); -ASSERT(test_dat_context != NULL, "pcre2_match_context_create(null)"); -pcre2_match_context_free(test_dat_context); -test_con_context = pcre2_convert_context_create(NULL); -ASSERT(test_con_context != NULL, "pcre2_convert_context_create(null)"); -pcre2_convert_context_free(test_con_context); - -mallocs_until_failure = INT_MAX; -test_pat_context = pcre2_compile_context_create(test_gen_context); -ASSERT(test_pat_context != NULL, "pcre2_compile_context_create()"); -test_dat_context = pcre2_match_context_create(test_gen_context); -ASSERT(test_dat_context != NULL, "pcre2_match_context_create()"); -test_con_context = pcre2_convert_context_create(test_gen_context); -ASSERT(test_con_context != NULL, "pcre2_convert_context_create()"); - -mallocs_until_failure = 0; -test_gen_context_copy = pcre2_general_context_copy(test_gen_context); -ASSERT(test_gen_context_copy == NULL, "pcre2_general_context_copy()"); -test_pat_context_copy = pcre2_compile_context_copy(test_pat_context); -ASSERT(test_pat_context_copy == NULL, "pcre2_compile_context_copy()"); -test_dat_context_copy = pcre2_match_context_copy(test_dat_context); -ASSERT(test_dat_context_copy == NULL, "pcre2_match_context_copy()"); -test_con_context_copy = pcre2_convert_context_copy(test_con_context); -ASSERT(test_con_context_copy == NULL, "pcre2_convert_context_copy()"); - -mallocs_until_failure = INT_MAX; -test_gen_context_copy = pcre2_general_context_copy(test_gen_context); -ASSERT(test_gen_context_copy != NULL, "pcre2_general_context_copy()"); -test_pat_context_copy = pcre2_compile_context_copy(test_pat_context); -ASSERT(test_pat_context_copy != NULL, "pcre2_compile_context_copy()"); -test_dat_context_copy = pcre2_match_context_copy(test_dat_context); -ASSERT(test_dat_context_copy != NULL, "pcre2_match_context_copy()"); -test_con_context_copy = pcre2_convert_context_copy(test_con_context); -ASSERT(test_con_context_copy != NULL, "pcre2_convert_context_copy()"); - -rc = pcre2_set_compile_extra_options(test_pat_context, 0); -ASSERT(rc == 0, "pcre2_set_compile_extra_options()"); - -rc = pcre2_set_max_pattern_length(test_pat_context, 10); -ASSERT(rc == 0, "pcre2_set_max_pattern_length()"); - -rc = pcre2_set_max_pattern_compiled_length(test_pat_context, 256); -ASSERT(rc == 0, "pcre2_set_max_pattern_compiled_length()"); - -rc = pcre2_set_max_varlookbehind(test_pat_context, 0); -ASSERT(rc == 0, "pcre2_set_max_varlookbehind()"); - -rc = pcre2_set_offset_limit(test_dat_context, 0); -ASSERT(rc == 0, "pcre2_set_offset_limit()"); - -rc = pcre2_set_bsr(test_pat_context, 999); -ASSERT(rc == PCRE2_ERROR_BADDATA, "pcre2_set_bsr()"); - -rc = pcre2_set_newline(test_pat_context, 999); -ASSERT(rc == PCRE2_ERROR_BADDATA, "pcre2_set_newline()"); - -rc = pcre2_set_recursion_limit(test_dat_context, 10); -ASSERT(rc == 0, "pcre2_set_recursion_limit()"); - -rc = pcre2_set_recursion_memory_management(test_dat_context, NULL, NULL, NULL); -ASSERT(rc == 0, "pcre2_set_recursion_memory_management()"); - -rc = pcre2_set_optimize(NULL, PCRE2_OPTIMIZATION_NONE); -ASSERT(rc == PCRE2_ERROR_NULL, "pcre2_set_optimize(null)"); - -rc = pcre2_set_optimize(test_pat_context, PCRE2_AUTO_POSSESS - 1); -ASSERT(rc == PCRE2_ERROR_BADOPTION, "pcre2_set_optimize(bad option)"); - -rc = pcre2_set_optimize(test_pat_context, PCRE2_START_OPTIMIZE_OFF + 1); -ASSERT(rc == PCRE2_ERROR_BADOPTION, "pcre2_set_optimize(bad option)"); - -rc = pcre2_set_glob_escape(test_con_context, 0); -ASSERT(rc == 0, "pcre2_set_glob_escape(0)"); - -rc = pcre2_set_glob_escape(test_con_context, 1); -ASSERT(rc == PCRE2_ERROR_BADDATA, "pcre2_set_glob_escape(1)"); - -rc = pcre2_set_glob_escape(test_con_context, 256); -ASSERT(rc == PCRE2_ERROR_BADDATA, "pcre2_set_glob_escape(256)"); - -/* ----------------------- pcre2_compile ----------------------------------- */ - -test_compiled_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, - 0, NULL, &erroroffset, test_pat_context); -ASSERT(test_compiled_code == NULL, "test pattern compilation"); - -test_compiled_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, - 0, &errorcode, NULL, test_pat_context); -ASSERT(test_compiled_code == NULL && errorcode == PCRE2_ERROR_NULL_ERROROFFSET, "test pattern compilation"); - -test_compiled_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, - 0, &errorcode, &erroroffset, test_pat_context); -ASSERT(test_compiled_code != NULL && errorcode == 100 && erroroffset == 0, "test pattern compilation"); - -#ifdef BITOTHER -bitother_code = G(pcre2_compile_,BITOTHER)(bitother_pattern, - PCRE2_ZERO_TERMINATED, 0, &errorcode, &erroroffset, NULL); -ASSERT(bitother_code != NULL, "bitmode mismatch compile"); -#endif - -/* ---------------------- Match data functions ----------------------------- */ - -mallocs_until_failure = 0; -test_match_data = pcre2_match_data_create(10, test_gen_context); -ASSERT(test_match_data == NULL, "pcre2_match_data_create()"); - -test_match_data = pcre2_match_data_create(10, NULL); -ASSERT(test_match_data != NULL, "pcre2_match_data_create()"); -ASSERT(pcre2_get_ovector_count(test_match_data) == 10, "pcre2_get_ovector_count()"); - -sizeval = pcre2_get_match_data_size(test_match_data); -ASSERT(sizeval >= 2, "pcre2_get_match_data_size()"); - -mallocs_until_failure = INT_MAX; - -pcre2_match_data_free(test_match_data); -test_match_data = pcre2_match_data_create(0, test_gen_context); -ASSERT(test_match_data != NULL, "pcre2_match_data_create()"); -ASSERT(pcre2_get_ovector_count(test_match_data) == 1, "pcre2_get_ovector_count()"); - -pcre2_match_data_free(test_match_data); -test_match_data = pcre2_match_data_create_from_pattern(NULL, NULL); -ASSERT(test_match_data == NULL, "pcre2_match_data_create_from_pattern(null)"); - -test_match_data = pcre2_match_data_create_from_pattern(test_compiled_code, NULL); -ASSERT(test_match_data != NULL, "pcre2_match_data_create_from_pattern()"); -ASSERT(pcre2_get_ovector_count(test_match_data) == 1, "pcre2_get_ovector_count()"); - -mallocs_until_failure = 0; -pcre2_match_data_free(test_match_data); -test_match_data = pcre2_match_data_create_from_pattern(test_compiled_code, - test_gen_context); -ASSERT(test_match_data == NULL, "pcre2_match_data_create_from_pattern()"); - -mallocs_until_failure = INT_MAX; -pcre2_match_data_free(test_match_data); -test_match_data = pcre2_match_data_create_from_pattern(test_compiled_code, - test_gen_context); -ASSERT(test_match_data != NULL, "pcre2_match_data_create_from_pattern()"); - -rc = pcre2_match(test_compiled_code, pattern, PCRE2_ZERO_TERMINATED, 0, - PCRE2_COPY_MATCHED_SUBJECT, test_match_data, NULL); -ASSERT(rc == 1, "pcre2_match()"); - -pcre2_match_data_free(test_match_data); -test_match_data = NULL; - -/* ----------------------- pcre2_pattern_info ------------------------------ */ - -rc = pcre2_pattern_info(NULL, PCRE2_INFO_NEWLINE, &uval); -ASSERT(rc == PCRE2_ERROR_NULL, "pcre2_pattern_info(null)"); - -rc = pcre2_pattern_info(test_compiled_code, 999, NULL); -ASSERT(rc == PCRE2_ERROR_BADOPTION, "pcre2_pattern_info(bad option)"); - -rc = pcre2_pattern_info(test_compiled_code, 999, &uval); -ASSERT(rc == PCRE2_ERROR_BADOPTION, "pcre2_pattern_info(bad option)"); - -invalid_code = malloc(1024); -ASSERT(invalid_code != NULL, "malloc()"); -memset(invalid_code, 0, 1024); -rc = pcre2_pattern_info(invalid_code, PCRE2_INFO_NEWLINE, &uval); -ASSERT(rc == PCRE2_ERROR_BADMAGIC, "pcre2_pattern_info(bad magic)"); - -#ifdef BITOTHER -rc = pcre2_pattern_info((pcre2_code *)bitother_code, PCRE2_INFO_NEWLINE, &uval); -ASSERT(rc == PCRE2_ERROR_BADMODE, "pcre2_pattern_info(bitmode mismatch)"); -#endif - -#ifdef SUPPORT_JIT -sizeval = 0xcdcdcdcd; -rc = pcre2_pattern_info(test_compiled_code, PCRE2_INFO_JITSIZE, &sizeval); -ASSERT(rc == 0 && sizeval == 0, "pcre2_pattern_info(JIT)"); - -if (pcre2_jit_compile(test_compiled_code, PCRE2_JIT_COMPLETE) == 0) - { - rc = pcre2_pattern_info(test_compiled_code, PCRE2_INFO_JITSIZE, &sizeval); - ASSERT(rc == 0 && sizeval > 0, "pcre2_pattern_info(JIT after compile)"); - } -#endif - -/* ----------------------- POSIX functions --------------------------------- */ - -#if PCRE2_CODE_UNIT_WIDTH == 8 - -#if defined(EBCDIC) && !EBCDIC_IO -#define BUFFER_OUTPUT ebcdic_to_ascii_str((uint8_t *)errorbuffer8, sizeof(errorbuffer8)); -#else -#define BUFFER_OUTPUT -#endif - -rc = pcre2_regcomp(&test_preg, "abc", 0); -ASSERT(rc == 0, "pcre2_regcomp()"); - -rc = pcre2_regexec(&test_preg, "zabcz", 0, NULL, 0); -ASSERT(rc == 0, "pcre2_regexec(0)"); - -rc = pcre2_regexec(&test_preg, "zabcz", 0, NULL, REG_STARTEND); -ASSERT(rc == REG_INVARG, "pcre2_regexec(REG_STARTEND)"); - -memset(errorbuffer8, 0, sizeof(errorbuffer8)); -rc = regerror(REG_ASSERT, NULL, errorbuffer8, sizeof(errorbuffer8)); -BUFFER_OUTPUT -ASSERT(rc > 0 && rc <= (int)sizeof(errorbuffer8) && rc == (int)strlen(errorbuffer8) + 1, "regerror()"); - -rc = regerror(REG_NOMATCH, NULL, errorbuffer8, sizeof(errorbuffer8)); -BUFFER_OUTPUT -ASSERT(rc > 0 && rc <= (int)sizeof(errorbuffer8) && rc == (int)strlen(errorbuffer8) + 1, "regerror()"); - -rc = regerror(REG_ASSERT-1, NULL, errorbuffer8, sizeof(errorbuffer8)); -BUFFER_OUTPUT -ASSERT(rc == (int)strlen("unknown error code")+1 && strcmp(errorbuffer8, "unknown error code") == 0, "regerror(bad error code)"); - -rc = regerror(REG_NOMATCH+1, NULL, errorbuffer8, sizeof(errorbuffer8)); -BUFFER_OUTPUT -ASSERT(rc == (int)strlen("unknown error code")+1 && strcmp(errorbuffer8, "unknown error code") == 0, "regerror(bad error code)"); - -#undef BUFFER_OUTPUT - -#endif - -/* -------------------- pcre2_get_error_message ---------------------------- */ - -#if defined(EBCDIC) && !EBCDIC_IO -#define BUFFER_OUTPUT ebcdic_to_ascii_str(errorbuffer, sizeof(errorbuffer)); -#else -#define BUFFER_OUTPUT -#endif - -rc = pcre2_get_error_message(PCRE2_ERROR_BADDATA, NULL, 0); -ASSERT(rc == PCRE2_ERROR_NOMEMORY, "pcre2_get_error_message(null)"); - -memset(errorbuffer, 0, sizeof(errorbuffer)); -rc = pcre2_get_error_message(PCRE2_ERROR_BADDATA, errorbuffer, 0); -BUFFER_OUTPUT -ASSERT(rc == PCRE2_ERROR_NOMEMORY, "pcre2_get_error_message(null)"); - -rc = pcre2_get_error_message(PCRE2_ERROR_BADDATA, errorbuffer, 4); -BUFFER_OUTPUT -ASSERT(rc == PCRE2_ERROR_NOMEMORY && pcre2_strcmp_c8(errorbuffer, "bad") == 0, "pcre2_get_error_message(null)"); - -rc = pcre2_get_error_message(PCRE2_ERROR_BADDATA, errorbuffer, 14); -BUFFER_OUTPUT -ASSERT(rc == PCRE2_ERROR_NOMEMORY && pcre2_strcmp_c8(errorbuffer, "bad data valu") == 0, "pcre2_get_error_message(null)"); - -rc = pcre2_get_error_message(PCRE2_ERROR_BADDATA, errorbuffer, 15); -BUFFER_OUTPUT -ASSERT(rc == 14 && pcre2_strcmp_c8(errorbuffer, "bad data value") == 0, "pcre2_get_error_message(null)"); - -#undef BUFFER_OUTPUT - -/* ----------------------- pcre2_maketables -------------------------------- */ - -test_tables = pcre2_maketables(NULL); -ASSERT(test_tables != NULL, "pcre2_maketables(null)"); -pcre2_maketables_free(NULL, test_tables); - -test_tables = pcre2_maketables(test_gen_context); -ASSERT(test_tables != NULL, "pcre2_maketables()"); -pcre2_maketables_free(test_gen_context, test_tables); - -mallocs_until_failure = 0; -test_tables = pcre2_maketables(test_gen_context); -ASSERT(test_tables == NULL, "pcre2_maketables()"); - -mallocs_until_failure = INT_MAX; - -/* -------------------- pcre2_callout_enumerate ---------------------------- */ - -rc = pcre2_callout_enumerate(NULL, callout_enumerate_function_void, NULL); -ASSERT(rc == PCRE2_ERROR_NULL, "pcre2_callout_enumerate(null)"); - -rc = pcre2_callout_enumerate(invalid_code, callout_enumerate_function_void, NULL); -ASSERT(rc == PCRE2_ERROR_BADMAGIC, "pcre2_callout_enumerate(invalid)"); - -#ifdef BITOTHER -rc = pcre2_callout_enumerate((pcre2_code *)bitother_code, callout_enumerate_function_void, NULL); -ASSERT(rc == PCRE2_ERROR_BADMODE, "pcre2_callout_enumerate(bitmode mismatch)"); -#endif - -pcre2_code_free(test_compiled_code); -test_compiled_code = pcre2_compile(callout_int_pattern, PCRE2_ZERO_TERMINATED, - 0, &errorcode, &erroroffset, NULL); -ASSERT(test_compiled_code != NULL, "test pattern compilation"); - -rc = pcre2_callout_enumerate(test_compiled_code, callout_enumerate_function_void, &errorcode); -ASSERT(rc == 0, "pcre2_callout_enumerate(void)"); - -errorcode = -12; -rc = pcre2_callout_enumerate(test_compiled_code, callout_enumerate_function_fail, &errorcode); -ASSERT(rc == -12, "pcre2_callout_enumerate(fail)"); - -pcre2_code_free(test_compiled_code); -test_compiled_code = pcre2_compile(callout_str_pattern, PCRE2_ZERO_TERMINATED, - 0, &errorcode, &erroroffset, NULL); -ASSERT(test_compiled_code != NULL, "test pattern compilation"); - -errorcode = -123; -rc = pcre2_callout_enumerate(test_compiled_code, callout_enumerate_function_fail, &errorcode); -ASSERT(rc == -123, "pcre2_callout_enumerate(fail)"); - -/* ---------------------- Substring functions ------------------------------ */ - -/* Must handle NULL without crashing. */ -pcre2_substring_free(NULL); -pcre2_substring_list_free(NULL); - -pcre2_code_free(test_compiled_code); -test_compiled_code = pcre2_compile(capture_pattern, PCRE2_ZERO_TERMINATED, - 0, &errorcode, &erroroffset, NULL); -ASSERT(test_compiled_code != NULL, "test pattern compilation"); - -pcre2_match_data_free(test_match_data); -test_match_data = pcre2_match_data_create_from_pattern( - test_compiled_code, test_gen_context); -ASSERT(test_match_data != NULL, "pcre2_match_data_create()"); - -rc = pcre2_match(test_compiled_code, subject_abcz, PCRE2_ZERO_TERMINATED, 0, - 0, test_match_data, NULL); -ASSERT(rc == 2, "pcre2_match()"); - -/* Test the functions with insufficient buffer size. It hardly seems worth -adding controls to the pcre2test input file format to exercise this case. */ - -sizeval = 2; -rc = pcre2_substring_copy_byname(test_match_data, name_n, copy_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_NOMEMORY && sizeval == 2, "pcre2_substring_copy_byname(small buffer)"); -sizeval = 3; -rc = pcre2_substring_copy_byname(test_match_data, name_n, copy_buf, &sizeval); -ASSERT(rc == 0 && sizeval == 2, "pcre2_substring_copy_byname(small buffer)"); -sizeval = 4; -rc = pcre2_substring_copy_byname(test_match_data, name_n, copy_buf, &sizeval); -ASSERT(rc == 0 && sizeval == 2, "pcre2_substring_copy_byname(small buffer)"); - -sizeval = 2; -rc = pcre2_substring_copy_bynumber(test_match_data, 1, copy_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_NOMEMORY && sizeval == 2, "pcre2_substring_copy_bynumber(small buffer)"); -sizeval = 3; -rc = pcre2_substring_copy_bynumber(test_match_data, 1, copy_buf, &sizeval); -ASSERT(rc == 0 && sizeval == 2, "pcre2_substring_copy_bynumber(small buffer)"); - -mallocs_until_failure = 0; - -sizeval = 0; -sptrval = NULL; -rc = pcre2_substring_get_byname(test_match_data, name_n, &sptrval, &sizeval); -ASSERT(rc == PCRE2_ERROR_NOMEMORY && sptrval == NULL, "pcre2_substring_get_byname(small buffer)"); - -sizeval = 0; -rc = pcre2_substring_get_bynumber(test_match_data, 1, &sptrval, &sizeval); -ASSERT(rc == PCRE2_ERROR_NOMEMORY && sptrval == NULL, "pcre2_substring_get_bynumber(small buffer)"); - -mallocs_until_failure = INT_MAX; - -/* Test some unusual conditions, for which again it doesn't seem worth adding -pcre2test controls. */ - -sizeval = 0; -rc = pcre2_substring_length_bynumber(test_match_data, 1, &sizeval); -ASSERT(rc == 0 && sizeval == 2, "pcre2_substring_length_bynumber()"); -rc = pcre2_substring_length_bynumber(test_match_data, 1, NULL); -ASSERT(rc == 0, "pcre2_substring_length_bynumber()"); - -sizeval = 0; -rc = pcre2_substring_length_byname(test_match_data, name_n, &sizeval); -ASSERT(rc == 0 && sizeval == 2, "pcre2_substring_length_byname()"); -rc = pcre2_substring_length_byname(test_match_data, name_n, NULL); -ASSERT(rc == 0, "pcre2_substring_length_byname()"); - -/* Test pcre2_substring_list_get() with some NULL inputs. */ - -rc = pcre2_substring_list_get(test_match_data, &stringlist, &lengthslist); -ASSERT(rc == 0 && stringlist != NULL && lengthslist != NULL, "pcre2_substring_list_get()"); -pcre2_substring_list_free(stringlist); - -stringlist = NULL; -rc = pcre2_substring_list_get(test_match_data, &stringlist, NULL); -ASSERT(rc == 0 && stringlist != NULL, "pcre2_substring_list_get()"); -pcre2_substring_list_free(stringlist); - -mallocs_until_failure = 0; - -stringlist = NULL; -rc = pcre2_substring_list_get(test_match_data, &stringlist, &lengthslist); -ASSERT(rc == PCRE2_ERROR_NOMEMORY && stringlist == NULL, "pcre2_substring_list_get()"); - -mallocs_until_failure = INT_MAX; - -/* Test after an unsuccessful match. */ - -rc = pcre2_match(test_compiled_code, subject_abcz, PCRE2_ZERO_TERMINATED, 2, - 0, test_match_data, NULL); -ASSERT(rc == PCRE2_ERROR_NOMATCH, "pcre2_match()"); - -sizeval = 4; -rc = pcre2_substring_copy_byname(test_match_data, name_n, copy_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_NOMATCH, "pcre2_substring_copy_byname(no match)"); -rc = pcre2_substring_copy_bynumber(test_match_data, 1, copy_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_NOMATCH, "pcre2_substring_copy_bynumber(no match)"); -rc = pcre2_substring_get_byname(test_match_data, name_n, &sptrval, &sizeval); -ASSERT(rc == PCRE2_ERROR_NOMATCH && sptrval == NULL, "pcre2_substring_get_byname(no match)"); -rc = pcre2_substring_get_bynumber(test_match_data, 1, &sptrval, &sizeval); -ASSERT(rc == PCRE2_ERROR_NOMATCH && sptrval == NULL, "pcre2_substring_get_bynumber(no match)"); - -/* ------------- pcre2_substitute with PCRE2_SUBSTITUTE_MATCHED ------------ */ - -/* There are some specific edge cases here that would be a pain to exercise via -the standard pcre2test modifiers. The documentation is clear that when you do -a match externally and pass it in with PCRE2_SUBSTITUTE_MATCHED, you must also -pass the same match options. Here we test what happens when you don't. */ - -pcre2_code_free(test_compiled_code); -test_compiled_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, - 0, &errorcode, &erroroffset, NULL); -ASSERT(test_compiled_code != NULL, "test pattern compilation"); - -subs_other_code = pcre2_compile(pattern, PCRE2_ZERO_TERMINATED, - 0, &errorcode, &erroroffset, NULL); -ASSERT(subs_other_code != NULL, "test pattern compilation"); - -pcre2_match_data_free(test_match_data); -test_match_data = pcre2_match_data_create_from_pattern( - test_compiled_code, NULL); -ASSERT(test_match_data != NULL, "pcre2_match_data_create()"); - -memcpy(substitute_subject, subject_abcz, sizeof(subject_abcz)); -rc = pcre2_match(test_compiled_code, substitute_subject, PCRE2_ZERO_TERMINATED, - 0, 0, test_match_data, NULL); -ASSERT(rc == 1, "pcre2_match()"); - -/* Baseline, should succeed */ -memcpy(substitute_subject, subject_abcz, sizeof(subject_abcz)); -sizeval = sizeof(replace_buf)/sizeof(*replace_buf); -rc = pcre2_substitute(test_compiled_code, substitute_subject, - PCRE2_ZERO_TERMINATED, 0, PCRE2_SUBSTITUTE_MATCHED, test_match_data, NULL, - NULL, 0, replace_buf, &sizeval); -ASSERT(rc == 1, "pcre2_substitute(baseline)"); - -/* Move the subject pointer, but keep the contents and length the same */ -memcpy(substitute_subject+1, subject_abcz, sizeof(subject_abcz)); -sizeval = sizeof(replace_buf)/sizeof(*replace_buf); -rc = pcre2_substitute(test_compiled_code, substitute_subject+1, - PCRE2_ZERO_TERMINATED, 0, PCRE2_SUBSTITUTE_MATCHED, test_match_data, NULL, - NULL, 0, replace_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_DIFFSUBSSUBJECT, "pcre2_substitute(moved)"); - -/* Keep the subject pointer the same but extend its length */ -memcpy(substitute_subject, subject_abcz, sizeof(subject_abcz)); -substitute_subject[4] = CHAR_Y; -substitute_subject[5] = 0; -sizeval = sizeof(replace_buf)/sizeof(*replace_buf); -rc = pcre2_substitute(test_compiled_code, substitute_subject, - PCRE2_ZERO_TERMINATED, 0, PCRE2_SUBSTITUTE_MATCHED, test_match_data, NULL, - NULL, 0, replace_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_DIFFSUBSSUBJECT, "pcre2_substitute(extended)"); - -/* Change the offset */ -memcpy(substitute_subject, subject_abcz, sizeof(subject_abcz)); -sizeval = sizeof(replace_buf)/sizeof(*replace_buf); -rc = pcre2_substitute(test_compiled_code, substitute_subject, - PCRE2_ZERO_TERMINATED, 1, PCRE2_SUBSTITUTE_MATCHED, test_match_data, NULL, - NULL, 0, replace_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_DIFFSUBSOFFSET, "pcre2_substitute(offset)"); - -/* Change the options */ -memcpy(substitute_subject, subject_abcz, sizeof(subject_abcz)); -sizeval = sizeof(replace_buf)/sizeof(*replace_buf); -rc = pcre2_substitute(test_compiled_code, substitute_subject, - PCRE2_ZERO_TERMINATED, 0, PCRE2_SUBSTITUTE_MATCHED | PCRE2_NOTEMPTY, - test_match_data, NULL, NULL, 0, replace_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_DIFFSUBSOPTIONS, "pcre2_substitute(options)"); - -/* Change the pattern */ -memcpy(substitute_subject, subject_abcz, sizeof(subject_abcz)); -sizeval = sizeof(replace_buf)/sizeof(*replace_buf); -rc = pcre2_substitute(subs_other_code, substitute_subject, - PCRE2_ZERO_TERMINATED, 0, PCRE2_SUBSTITUTE_MATCHED, test_match_data, NULL, - NULL, 0, replace_buf, &sizeval); -ASSERT(rc == PCRE2_ERROR_DIFFSUBSPATTERN, "pcre2_substitute(pattern)"); - -/* ------------------------------------------------------------------------- */ - -#undef ASSERT -EXIT: - -mallocs_until_failure = INT_MAX; - -#if PCRE2_CODE_UNIT_WIDTH == 8 -pcre2_regfree(&test_preg); -#endif - -if (test_compiled_code != NULL) pcre2_code_free(test_compiled_code); -#ifdef BITOTHER -if (bitother_code != NULL) G(pcre2_code_free_,BITOTHER)(bitother_code); -#endif -if (subs_other_code != NULL) pcre2_code_free(subs_other_code); - -if (test_match_data != NULL) pcre2_match_data_free(test_match_data); - -if (test_con_context_copy != NULL) pcre2_convert_context_free(test_con_context_copy); -if (test_dat_context_copy != NULL) pcre2_match_context_free(test_dat_context_copy); -if (test_pat_context_copy != NULL) pcre2_compile_context_free(test_pat_context_copy); -if (test_gen_context_copy != NULL) pcre2_general_context_free(test_gen_context_copy); -if (test_con_context != NULL) pcre2_convert_context_free(test_con_context); -if (test_dat_context != NULL) pcre2_match_context_free(test_dat_context); -if (test_pat_context != NULL) pcre2_compile_context_free(test_pat_context); -if (test_gen_context != NULL) pcre2_general_context_free(test_gen_context); - -free(invalid_code); - -if (failure != NULL) - { - cfprintf(clr_test_error, stderr, "pcre2test: Unit test error in %s\n", failure); - exit(1); - } -} - -#undef BITOTHER - - -/* -------------------- Undo the macro definitions --------------------------*/ - -#undef pbuffer -#undef pbuffer_size - -#undef utf_to_ord - -#undef compiled_code -#undef general_context -#undef general_context_copy -#undef pat_context -#undef default_pat_context -#undef con_context -#undef default_con_context -#undef dat_context -#undef default_dat_context -#undef match_data -#undef jit_stack -#undef jit_stack_size -#undef patstack -#undef patstacknext -#undef rep_in_buffer -#undef rep_in_buffer_size -#undef rep_out_buffer -#undef rep_out_buffer_size - -#undef jit_callback -#undef pcre2_strcmp_c8 -#undef pcre2_strlen -#undef pchars -#undef ptrunc -#undef config_str -#undef check_modifier -#undef decode_modifiers -#undef pattern_info -#undef show_memory_info -#undef show_framesize -#undef show_heapframes_size -#undef print_error_message_file -#undef print_error_message -#undef callout_enumerate_function -#undef callout_enumerate_function_void -#undef callout_enumerate_function_fail -#undef show_pattern_info -#undef serial_error -#undef process_command -#undef process_pattern -#undef have_active_pattern -#undef free_active_pattern -#undef check_match_limit -#undef substitute_callout_function -#undef substitute_case_callout_function -#undef callout_function -#undef copy_and_get -#undef copy_substitute_string -#undef process_data -#undef init_globals -#undef free_globals -#undef unittest - - - -/* End of pcre2test_inc.h */ diff --git a/vendor/core/vendor/unicodetools/unicodetools/data/ucd/dev/DerivedCoreProperties.txt b/vendor/core/vendor/unicodetools/unicodetools/data/ucd/dev/DerivedCoreProperties.txt new file mode 100644 index 000000000..f327784bf --- /dev/null +++ b/vendor/core/vendor/unicodetools/unicodetools/data/ucd/dev/DerivedCoreProperties.txt @@ -0,0 +1,13601 @@ +# DerivedCoreProperties-17.0.0.txt +# Date: 2025-07-30, 23:55:08 GMT +# © 2025 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use and license, see https://www.unicode.org/terms_of_use.html +# +# Unicode Character Database +# For documentation, see https://www.unicode.org/reports/tr44/ + +# ================================================ + +# Derived Property: Math +# Generated from: Sm + Other_Math + +002B ; Math # Sm PLUS SIGN +003C..003E ; Math # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN +005E ; Math # Sk CIRCUMFLEX ACCENT +007C ; Math # Sm VERTICAL LINE +007E ; Math # Sm TILDE +00AC ; Math # Sm NOT SIGN +00B1 ; Math # Sm PLUS-MINUS SIGN +00D7 ; Math # Sm MULTIPLICATION SIGN +00F7 ; Math # Sm DIVISION SIGN +03D0..03D2 ; Math # L& [3] GREEK BETA SYMBOL..GREEK UPSILON WITH HOOK SYMBOL +03D5 ; Math # L& GREEK PHI SYMBOL +03F0..03F1 ; Math # L& [2] GREEK KAPPA SYMBOL..GREEK RHO SYMBOL +03F4..03F5 ; Math # L& [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL +03F6 ; Math # Sm GREEK REVERSED LUNATE EPSILON SYMBOL +0606..0608 ; Math # Sm [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY +2016 ; Math # Po DOUBLE VERTICAL LINE +2032..2034 ; Math # Po [3] PRIME..TRIPLE PRIME +2040 ; Math # Pc CHARACTER TIE +2044 ; Math # Sm FRACTION SLASH +2052 ; Math # Sm COMMERCIAL MINUS SIGN +2061..2064 ; Math # Cf [4] FUNCTION APPLICATION..INVISIBLE PLUS +207A..207C ; Math # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN +207D ; Math # Ps SUPERSCRIPT LEFT PARENTHESIS +207E ; Math # Pe SUPERSCRIPT RIGHT PARENTHESIS +208A..208C ; Math # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN +208D ; Math # Ps SUBSCRIPT LEFT PARENTHESIS +208E ; Math # Pe SUBSCRIPT RIGHT PARENTHESIS +20D0..20DC ; Math # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE +20E1 ; Math # Mn COMBINING LEFT RIGHT ARROW ABOVE +20E5..20E6 ; Math # Mn [2] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING DOUBLE VERTICAL STROKE OVERLAY +20EB..20EF ; Math # Mn [5] COMBINING LONG DOUBLE SOLIDUS OVERLAY..COMBINING RIGHT ARROW BELOW +2102 ; Math # L& DOUBLE-STRUCK CAPITAL C +2107 ; Math # L& EULER CONSTANT +210A..2113 ; Math # L& [10] SCRIPT SMALL G..SCRIPT SMALL L +2115 ; Math # L& DOUBLE-STRUCK CAPITAL N +2118 ; Math # Sm SCRIPT CAPITAL P +2119..211D ; Math # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R +2124 ; Math # L& DOUBLE-STRUCK CAPITAL Z +2128 ; Math # L& BLACK-LETTER CAPITAL Z +2129 ; Math # So TURNED GREEK SMALL LETTER IOTA +212C..212D ; Math # L& [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C +212F..2131 ; Math # L& [3] SCRIPT SMALL E..SCRIPT CAPITAL F +2133..2134 ; Math # L& [2] SCRIPT CAPITAL M..SCRIPT SMALL O +2135..2138 ; Math # Lo [4] ALEF SYMBOL..DALET SYMBOL +213C..213F ; Math # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI +2140..2144 ; Math # Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y +2145..2149 ; Math # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J +214B ; Math # Sm TURNED AMPERSAND +2190..2194 ; Math # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW +2195..2199 ; Math # So [5] UP DOWN ARROW..SOUTH WEST ARROW +219A..219B ; Math # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE +219C..219F ; Math # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW +21A0 ; Math # Sm RIGHTWARDS TWO HEADED ARROW +21A1..21A2 ; Math # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL +21A3 ; Math # Sm RIGHTWARDS ARROW WITH TAIL +21A4..21A5 ; Math # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR +21A6 ; Math # Sm RIGHTWARDS ARROW FROM BAR +21A7 ; Math # So DOWNWARDS ARROW FROM BAR +21A9..21AD ; Math # So [5] LEFTWARDS ARROW WITH HOOK..LEFT RIGHT WAVE ARROW +21AE ; Math # Sm LEFT RIGHT ARROW WITH STROKE +21B0..21B1 ; Math # So [2] UPWARDS ARROW WITH TIP LEFTWARDS..UPWARDS ARROW WITH TIP RIGHTWARDS +21B6..21B7 ; Math # So [2] ANTICLOCKWISE TOP SEMICIRCLE ARROW..CLOCKWISE TOP SEMICIRCLE ARROW +21BC..21CD ; Math # So [18] LEFTWARDS HARPOON WITH BARB UPWARDS..LEFTWARDS DOUBLE ARROW WITH STROKE +21CE..21CF ; Math # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE +21D0..21D1 ; Math # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW +21D2 ; Math # Sm RIGHTWARDS DOUBLE ARROW +21D3 ; Math # So DOWNWARDS DOUBLE ARROW +21D4 ; Math # Sm LEFT RIGHT DOUBLE ARROW +21D5..21DB ; Math # So [7] UP DOWN DOUBLE ARROW..RIGHTWARDS TRIPLE ARROW +21DD ; Math # So RIGHTWARDS SQUIGGLE ARROW +21E4..21E5 ; Math # So [2] LEFTWARDS ARROW TO BAR..RIGHTWARDS ARROW TO BAR +21F4..22FF ; Math # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP +2308 ; Math # Ps LEFT CEILING +2309 ; Math # Pe RIGHT CEILING +230A ; Math # Ps LEFT FLOOR +230B ; Math # Pe RIGHT FLOOR +2320..2321 ; Math # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL +237C ; Math # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW +239B..23B3 ; Math # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM +23B4..23B5 ; Math # So [2] TOP SQUARE BRACKET..BOTTOM SQUARE BRACKET +23B7 ; Math # So RADICAL SYMBOL BOTTOM +23D0 ; Math # So VERTICAL LINE EXTENSION +23DC..23E1 ; Math # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET +23E2 ; Math # So WHITE TRAPEZIUM +25A0..25A1 ; Math # So [2] BLACK SQUARE..WHITE SQUARE +25AE..25B6 ; Math # So [9] BLACK VERTICAL RECTANGLE..BLACK RIGHT-POINTING TRIANGLE +25B7 ; Math # Sm WHITE RIGHT-POINTING TRIANGLE +25BC..25C0 ; Math # So [5] BLACK DOWN-POINTING TRIANGLE..BLACK LEFT-POINTING TRIANGLE +25C1 ; Math # Sm WHITE LEFT-POINTING TRIANGLE +25C6..25C7 ; Math # So [2] BLACK DIAMOND..WHITE DIAMOND +25CA..25CB ; Math # So [2] LOZENGE..WHITE CIRCLE +25CF..25D3 ; Math # So [5] BLACK CIRCLE..CIRCLE WITH UPPER HALF BLACK +25E2 ; Math # So BLACK LOWER RIGHT TRIANGLE +25E4 ; Math # So BLACK UPPER LEFT TRIANGLE +25E7..25EC ; Math # So [6] SQUARE WITH LEFT HALF BLACK..WHITE UP-POINTING TRIANGLE WITH DOT +25F8..25FF ; Math # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE +2605..2606 ; Math # So [2] BLACK STAR..WHITE STAR +2640 ; Math # So FEMALE SIGN +2642 ; Math # So MALE SIGN +2660..2663 ; Math # So [4] BLACK SPADE SUIT..BLACK CLUB SUIT +266D..266E ; Math # So [2] MUSIC FLAT SIGN..MUSIC NATURAL SIGN +266F ; Math # Sm MUSIC SHARP SIGN +27C0..27C4 ; Math # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET +27C5 ; Math # Ps LEFT S-SHAPED BAG DELIMITER +27C6 ; Math # Pe RIGHT S-SHAPED BAG DELIMITER +27C7..27E5 ; Math # Sm [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK +27E6 ; Math # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET +27E7 ; Math # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET +27E8 ; Math # Ps MATHEMATICAL LEFT ANGLE BRACKET +27E9 ; Math # Pe MATHEMATICAL RIGHT ANGLE BRACKET +27EA ; Math # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET +27EB ; Math # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET +27EC ; Math # Ps MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET +27ED ; Math # Pe MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET +27EE ; Math # Ps MATHEMATICAL LEFT FLATTENED PARENTHESIS +27EF ; Math # Pe MATHEMATICAL RIGHT FLATTENED PARENTHESIS +27F0..27FF ; Math # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW +2900..2982 ; Math # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON +2983 ; Math # Ps LEFT WHITE CURLY BRACKET +2984 ; Math # Pe RIGHT WHITE CURLY BRACKET +2985 ; Math # Ps LEFT WHITE PARENTHESIS +2986 ; Math # Pe RIGHT WHITE PARENTHESIS +2987 ; Math # Ps Z NOTATION LEFT IMAGE BRACKET +2988 ; Math # Pe Z NOTATION RIGHT IMAGE BRACKET +2989 ; Math # Ps Z NOTATION LEFT BINDING BRACKET +298A ; Math # Pe Z NOTATION RIGHT BINDING BRACKET +298B ; Math # Ps LEFT SQUARE BRACKET WITH UNDERBAR +298C ; Math # Pe RIGHT SQUARE BRACKET WITH UNDERBAR +298D ; Math # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER +298E ; Math # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +298F ; Math # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +2990 ; Math # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER +2991 ; Math # Ps LEFT ANGLE BRACKET WITH DOT +2992 ; Math # Pe RIGHT ANGLE BRACKET WITH DOT +2993 ; Math # Ps LEFT ARC LESS-THAN BRACKET +2994 ; Math # Pe RIGHT ARC GREATER-THAN BRACKET +2995 ; Math # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET +2996 ; Math # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET +2997 ; Math # Ps LEFT BLACK TORTOISE SHELL BRACKET +2998 ; Math # Pe RIGHT BLACK TORTOISE SHELL BRACKET +2999..29D7 ; Math # Sm [63] DOTTED FENCE..BLACK HOURGLASS +29D8 ; Math # Ps LEFT WIGGLY FENCE +29D9 ; Math # Pe RIGHT WIGGLY FENCE +29DA ; Math # Ps LEFT DOUBLE WIGGLY FENCE +29DB ; Math # Pe RIGHT DOUBLE WIGGLY FENCE +29DC..29FB ; Math # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS +29FC ; Math # Ps LEFT-POINTING CURVED ANGLE BRACKET +29FD ; Math # Pe RIGHT-POINTING CURVED ANGLE BRACKET +29FE..2AFF ; Math # Sm [258] TINY..N-ARY WHITE VERTICAL BAR +2B30..2B44 ; Math # Sm [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET +2B47..2B4C ; Math # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR +FB29 ; Math # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN +FE61 ; Math # Po SMALL ASTERISK +FE62 ; Math # Sm SMALL PLUS SIGN +FE63 ; Math # Pd SMALL HYPHEN-MINUS +FE64..FE66 ; Math # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN +FE68 ; Math # Po SMALL REVERSE SOLIDUS +FF0B ; Math # Sm FULLWIDTH PLUS SIGN +FF1C..FF1E ; Math # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN +FF3C ; Math # Po FULLWIDTH REVERSE SOLIDUS +FF3E ; Math # Sk FULLWIDTH CIRCUMFLEX ACCENT +FF5C ; Math # Sm FULLWIDTH VERTICAL LINE +FF5E ; Math # Sm FULLWIDTH TILDE +FFE2 ; Math # Sm FULLWIDTH NOT SIGN +FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW +10D8E..10D8F ; Math # Sm [2] GARAY PLUS SIGN..GARAY MINUS SIGN +1CEF0 ; Math # Sm MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR +1D400..1D454 ; Math # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G +1D456..1D49C ; Math # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A +1D49E..1D49F ; Math # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; Math # L& MATHEMATICAL SCRIPT CAPITAL G +1D4A5..1D4A6 ; Math # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K +1D4A9..1D4AC ; Math # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q +1D4AE..1D4B9 ; Math # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D +1D4BB ; Math # L& MATHEMATICAL SCRIPT SMALL F +1D4BD..1D4C3 ; Math # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N +1D4C5..1D505 ; Math # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B +1D507..1D50A ; Math # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G +1D50D..1D514 ; Math # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q +1D516..1D51C ; Math # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y +1D51E..1D539 ; Math # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B..1D53E ; Math # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540..1D544 ; Math # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; Math # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A..1D550 ; Math # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D552..1D6A5 ; Math # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J +1D6A8..1D6C0 ; Math # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA +1D6C1 ; Math # Sm MATHEMATICAL BOLD NABLA +1D6C2..1D6DA ; Math # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA +1D6DB ; Math # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +1D6DC..1D6FA ; Math # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA +1D6FB ; Math # Sm MATHEMATICAL ITALIC NABLA +1D6FC..1D714 ; Math # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA +1D715 ; Math # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +1D716..1D734 ; Math # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D735 ; Math # Sm MATHEMATICAL BOLD ITALIC NABLA +1D736..1D74E ; Math # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D74F ; Math # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +1D750..1D76E ; Math # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D76F ; Math # Sm MATHEMATICAL SANS-SERIF BOLD NABLA +1D770..1D788 ; Math # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D789 ; Math # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +1D78A..1D7A8 ; Math # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7A9 ; Math # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA +1D7AA..1D7C2 ; Math # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C3 ; Math # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL +1D7C4..1D7CB ; Math # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1D7CE..1D7FF ; Math # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE +1EE00..1EE03 ; Math # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL +1EE05..1EE1F ; Math # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF +1EE21..1EE22 ; Math # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM +1EE24 ; Math # Lo ARABIC MATHEMATICAL INITIAL HEH +1EE27 ; Math # Lo ARABIC MATHEMATICAL INITIAL HAH +1EE29..1EE32 ; Math # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF +1EE34..1EE37 ; Math # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH +1EE39 ; Math # Lo ARABIC MATHEMATICAL INITIAL DAD +1EE3B ; Math # Lo ARABIC MATHEMATICAL INITIAL GHAIN +1EE42 ; Math # Lo ARABIC MATHEMATICAL TAILED JEEM +1EE47 ; Math # Lo ARABIC MATHEMATICAL TAILED HAH +1EE49 ; Math # Lo ARABIC MATHEMATICAL TAILED YEH +1EE4B ; Math # Lo ARABIC MATHEMATICAL TAILED LAM +1EE4D..1EE4F ; Math # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN +1EE51..1EE52 ; Math # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF +1EE54 ; Math # Lo ARABIC MATHEMATICAL TAILED SHEEN +1EE57 ; Math # Lo ARABIC MATHEMATICAL TAILED KHAH +1EE59 ; Math # Lo ARABIC MATHEMATICAL TAILED DAD +1EE5B ; Math # Lo ARABIC MATHEMATICAL TAILED GHAIN +1EE5D ; Math # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON +1EE5F ; Math # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF +1EE61..1EE62 ; Math # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM +1EE64 ; Math # Lo ARABIC MATHEMATICAL STRETCHED HEH +1EE67..1EE6A ; Math # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF +1EE6C..1EE72 ; Math # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF +1EE74..1EE77 ; Math # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH +1EE79..1EE7C ; Math # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH +1EE7E ; Math # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH +1EE80..1EE89 ; Math # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH +1EE8B..1EE9B ; Math # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN +1EEA1..1EEA3 ; Math # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL +1EEA5..1EEA9 ; Math # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH +1EEAB..1EEBB ; Math # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN +1EEF0..1EEF1 ; Math # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL +1F8D0..1F8D8 ; Math # Sm [9] LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW..LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE + +# Total code points: 2322 + +# ================================================ + +# Derived Property: Alphabetic +# Generated from: Uppercase + Lowercase + Lt + Lm + Lo + Nl + Other_Alphabetic + +0041..005A ; Alphabetic # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z +0061..007A ; Alphabetic # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z +00AA ; Alphabetic # Lo FEMININE ORDINAL INDICATOR +00B5 ; Alphabetic # L& MICRO SIGN +00BA ; Alphabetic # Lo MASCULINE ORDINAL INDICATOR +00C0..00D6 ; Alphabetic # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D8..00F6 ; Alphabetic # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS +00F8..01BA ; Alphabetic # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL +01BB ; Alphabetic # Lo LATIN LETTER TWO WITH STROKE +01BC..01BF ; Alphabetic # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN +01C0..01C3 ; Alphabetic # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK +01C4..0293 ; Alphabetic # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL +0294..0295 ; Alphabetic # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; Alphabetic # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +02B0..02C1 ; Alphabetic # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP +02C6..02D1 ; Alphabetic # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON +02E0..02E4 ; Alphabetic # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +02EC ; Alphabetic # Lm MODIFIER LETTER VOICING +02EE ; Alphabetic # Lm MODIFIER LETTER DOUBLE APOSTROPHE +0345 ; Alphabetic # Mn COMBINING GREEK YPOGEGRAMMENI +0363..036F ; Alphabetic # Mn [13] COMBINING LATIN SMALL LETTER A..COMBINING LATIN SMALL LETTER X +0370..0373 ; Alphabetic # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI +0374 ; Alphabetic # Lm GREEK NUMERAL SIGN +0376..0377 ; Alphabetic # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +037A ; Alphabetic # Lm GREEK YPOGEGRAMMENI +037B..037D ; Alphabetic # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +037F ; Alphabetic # L& GREEK CAPITAL LETTER YOT +0386 ; Alphabetic # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0388..038A ; Alphabetic # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; Alphabetic # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..03A1 ; Alphabetic # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO +03A3..03F5 ; Alphabetic # L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL +03F7..0481 ; Alphabetic # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA +048A..052F ; Alphabetic # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER +0531..0556 ; Alphabetic # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH +0559 ; Alphabetic # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING +0560..0588 ; Alphabetic # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE +05B0..05BD ; Alphabetic # Mn [14] HEBREW POINT SHEVA..HEBREW POINT METEG +05BF ; Alphabetic # Mn HEBREW POINT RAFE +05C1..05C2 ; Alphabetic # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT +05C4..05C5 ; Alphabetic # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C7 ; Alphabetic # Mn HEBREW POINT QAMATS QATAN +05D0..05EA ; Alphabetic # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV +05EF..05F2 ; Alphabetic # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD +0610..061A ; Alphabetic # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA +0620..063F ; Alphabetic # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE +0640 ; Alphabetic # Lm ARABIC TATWEEL +0641..064A ; Alphabetic # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH +064B..0657 ; Alphabetic # Mn [13] ARABIC FATHATAN..ARABIC INVERTED DAMMA +0659..065F ; Alphabetic # Mn [7] ARABIC ZWARAKAY..ARABIC WAVY HAMZA BELOW +066E..066F ; Alphabetic # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF +0670 ; Alphabetic # Mn ARABIC LETTER SUPERSCRIPT ALEF +0671..06D3 ; Alphabetic # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +06D5 ; Alphabetic # Lo ARABIC LETTER AE +06D6..06DC ; Alphabetic # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN +06E1..06E4 ; Alphabetic # Mn [4] ARABIC SMALL HIGH DOTLESS HEAD OF KHAH..ARABIC SMALL HIGH MADDA +06E5..06E6 ; Alphabetic # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH +06E7..06E8 ; Alphabetic # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON +06ED ; Alphabetic # Mn ARABIC SMALL LOW MEEM +06EE..06EF ; Alphabetic # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V +06FA..06FC ; Alphabetic # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW +06FF ; Alphabetic # Lo ARABIC LETTER HEH WITH INVERTED V +0710 ; Alphabetic # Lo SYRIAC LETTER ALAPH +0711 ; Alphabetic # Mn SYRIAC LETTER SUPERSCRIPT ALAPH +0712..072F ; Alphabetic # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH +0730..073F ; Alphabetic # Mn [16] SYRIAC PTHAHA ABOVE..SYRIAC RWAHA +074D..07A5 ; Alphabetic # Lo [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU +07A6..07B0 ; Alphabetic # Mn [11] THAANA ABAFILI..THAANA SUKUN +07B1 ; Alphabetic # Lo THAANA LETTER NAA +07CA..07EA ; Alphabetic # Lo [33] NKO LETTER A..NKO LETTER JONA RA +07F4..07F5 ; Alphabetic # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE +07FA ; Alphabetic # Lm NKO LAJANYALAN +0800..0815 ; Alphabetic # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF +0816..0817 ; Alphabetic # Mn [2] SAMARITAN MARK IN..SAMARITAN MARK IN-ALAF +081A ; Alphabetic # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT +081B..0823 ; Alphabetic # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A +0824 ; Alphabetic # Lm SAMARITAN MODIFIER LETTER SHORT A +0825..0827 ; Alphabetic # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U +0828 ; Alphabetic # Lm SAMARITAN MODIFIER LETTER I +0829..082C ; Alphabetic # Mn [4] SAMARITAN VOWEL SIGN LONG I..SAMARITAN VOWEL SIGN SUKUN +0840..0858 ; Alphabetic # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN +0860..086A ; Alphabetic # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA +0870..0887 ; Alphabetic # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088F ; Alphabetic # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE +0897 ; Alphabetic # Mn ARABIC PEPET +08A0..08C8 ; Alphabetic # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; Alphabetic # Lm ARABIC SMALL FARSI YEH +08D4..08DF ; Alphabetic # Mn [12] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH WORD WAQFA +08E3..08E9 ; Alphabetic # Mn [7] ARABIC TURNED DAMMA BELOW..ARABIC CURLY KASRATAN +08F0..0902 ; Alphabetic # Mn [19] ARABIC OPEN FATHATAN..DEVANAGARI SIGN ANUSVARA +0903 ; Alphabetic # Mc DEVANAGARI SIGN VISARGA +0904..0939 ; Alphabetic # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA +093A ; Alphabetic # Mn DEVANAGARI VOWEL SIGN OE +093B ; Alphabetic # Mc DEVANAGARI VOWEL SIGN OOE +093D ; Alphabetic # Lo DEVANAGARI SIGN AVAGRAHA +093E..0940 ; Alphabetic # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II +0941..0948 ; Alphabetic # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI +0949..094C ; Alphabetic # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU +094E..094F ; Alphabetic # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW +0950 ; Alphabetic # Lo DEVANAGARI OM +0955..0957 ; Alphabetic # Mn [3] DEVANAGARI VOWEL SIGN CANDRA LONG E..DEVANAGARI VOWEL SIGN UUE +0958..0961 ; Alphabetic # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL +0962..0963 ; Alphabetic # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL +0971 ; Alphabetic # Lm DEVANAGARI SIGN HIGH SPACING DOT +0972..0980 ; Alphabetic # Lo [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI +0981 ; Alphabetic # Mn BENGALI SIGN CANDRABINDU +0982..0983 ; Alphabetic # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA +0985..098C ; Alphabetic # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L +098F..0990 ; Alphabetic # Lo [2] BENGALI LETTER E..BENGALI LETTER AI +0993..09A8 ; Alphabetic # Lo [22] BENGALI LETTER O..BENGALI LETTER NA +09AA..09B0 ; Alphabetic # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA +09B2 ; Alphabetic # Lo BENGALI LETTER LA +09B6..09B9 ; Alphabetic # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA +09BD ; Alphabetic # Lo BENGALI SIGN AVAGRAHA +09BE..09C0 ; Alphabetic # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II +09C1..09C4 ; Alphabetic # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR +09C7..09C8 ; Alphabetic # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI +09CB..09CC ; Alphabetic # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU +09CE ; Alphabetic # Lo BENGALI LETTER KHANDA TA +09D7 ; Alphabetic # Mc BENGALI AU LENGTH MARK +09DC..09DD ; Alphabetic # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF..09E1 ; Alphabetic # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL +09E2..09E3 ; Alphabetic # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL +09F0..09F1 ; Alphabetic # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL +09FC ; Alphabetic # Lo BENGALI LETTER VEDIC ANUSVARA +0A01..0A02 ; Alphabetic # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI +0A03 ; Alphabetic # Mc GURMUKHI SIGN VISARGA +0A05..0A0A ; Alphabetic # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU +0A0F..0A10 ; Alphabetic # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI +0A13..0A28 ; Alphabetic # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA +0A2A..0A30 ; Alphabetic # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA +0A32..0A33 ; Alphabetic # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA +0A35..0A36 ; Alphabetic # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA +0A38..0A39 ; Alphabetic # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA +0A3E..0A40 ; Alphabetic # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II +0A41..0A42 ; Alphabetic # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU +0A47..0A48 ; Alphabetic # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI +0A4B..0A4C ; Alphabetic # Mn [2] GURMUKHI VOWEL SIGN OO..GURMUKHI VOWEL SIGN AU +0A51 ; Alphabetic # Mn GURMUKHI SIGN UDAAT +0A59..0A5C ; Alphabetic # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA +0A5E ; Alphabetic # Lo GURMUKHI LETTER FA +0A70..0A71 ; Alphabetic # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK +0A72..0A74 ; Alphabetic # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR +0A75 ; Alphabetic # Mn GURMUKHI SIGN YAKASH +0A81..0A82 ; Alphabetic # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA +0A83 ; Alphabetic # Mc GUJARATI SIGN VISARGA +0A85..0A8D ; Alphabetic # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E +0A8F..0A91 ; Alphabetic # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O +0A93..0AA8 ; Alphabetic # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA +0AAA..0AB0 ; Alphabetic # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA +0AB2..0AB3 ; Alphabetic # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA +0AB5..0AB9 ; Alphabetic # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA +0ABD ; Alphabetic # Lo GUJARATI SIGN AVAGRAHA +0ABE..0AC0 ; Alphabetic # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II +0AC1..0AC5 ; Alphabetic # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E +0AC7..0AC8 ; Alphabetic # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI +0AC9 ; Alphabetic # Mc GUJARATI VOWEL SIGN CANDRA O +0ACB..0ACC ; Alphabetic # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU +0AD0 ; Alphabetic # Lo GUJARATI OM +0AE0..0AE1 ; Alphabetic # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL +0AE2..0AE3 ; Alphabetic # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL +0AF9 ; Alphabetic # Lo GUJARATI LETTER ZHA +0AFA..0AFC ; Alphabetic # Mn [3] GUJARATI SIGN SUKUN..GUJARATI SIGN MADDAH +0B01 ; Alphabetic # Mn ORIYA SIGN CANDRABINDU +0B02..0B03 ; Alphabetic # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA +0B05..0B0C ; Alphabetic # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L +0B0F..0B10 ; Alphabetic # Lo [2] ORIYA LETTER E..ORIYA LETTER AI +0B13..0B28 ; Alphabetic # Lo [22] ORIYA LETTER O..ORIYA LETTER NA +0B2A..0B30 ; Alphabetic # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA +0B32..0B33 ; Alphabetic # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA +0B35..0B39 ; Alphabetic # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA +0B3D ; Alphabetic # Lo ORIYA SIGN AVAGRAHA +0B3E ; Alphabetic # Mc ORIYA VOWEL SIGN AA +0B3F ; Alphabetic # Mn ORIYA VOWEL SIGN I +0B40 ; Alphabetic # Mc ORIYA VOWEL SIGN II +0B41..0B44 ; Alphabetic # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR +0B47..0B48 ; Alphabetic # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI +0B4B..0B4C ; Alphabetic # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU +0B56 ; Alphabetic # Mn ORIYA AI LENGTH MARK +0B57 ; Alphabetic # Mc ORIYA AU LENGTH MARK +0B5C..0B5D ; Alphabetic # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0B5F..0B61 ; Alphabetic # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL +0B62..0B63 ; Alphabetic # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL +0B71 ; Alphabetic # Lo ORIYA LETTER WA +0B82 ; Alphabetic # Mn TAMIL SIGN ANUSVARA +0B83 ; Alphabetic # Lo TAMIL SIGN VISARGA +0B85..0B8A ; Alphabetic # Lo [6] TAMIL LETTER A..TAMIL LETTER UU +0B8E..0B90 ; Alphabetic # Lo [3] TAMIL LETTER E..TAMIL LETTER AI +0B92..0B95 ; Alphabetic # Lo [4] TAMIL LETTER O..TAMIL LETTER KA +0B99..0B9A ; Alphabetic # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA +0B9C ; Alphabetic # Lo TAMIL LETTER JA +0B9E..0B9F ; Alphabetic # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA +0BA3..0BA4 ; Alphabetic # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA +0BA8..0BAA ; Alphabetic # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA +0BAE..0BB9 ; Alphabetic # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA +0BBE..0BBF ; Alphabetic # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I +0BC0 ; Alphabetic # Mn TAMIL VOWEL SIGN II +0BC1..0BC2 ; Alphabetic # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU +0BC6..0BC8 ; Alphabetic # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI +0BCA..0BCC ; Alphabetic # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU +0BD0 ; Alphabetic # Lo TAMIL OM +0BD7 ; Alphabetic # Mc TAMIL AU LENGTH MARK +0C00 ; Alphabetic # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE +0C01..0C03 ; Alphabetic # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA +0C04 ; Alphabetic # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE +0C05..0C0C ; Alphabetic # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L +0C0E..0C10 ; Alphabetic # Lo [3] TELUGU LETTER E..TELUGU LETTER AI +0C12..0C28 ; Alphabetic # Lo [23] TELUGU LETTER O..TELUGU LETTER NA +0C2A..0C39 ; Alphabetic # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA +0C3D ; Alphabetic # Lo TELUGU SIGN AVAGRAHA +0C3E..0C40 ; Alphabetic # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II +0C41..0C44 ; Alphabetic # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR +0C46..0C48 ; Alphabetic # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI +0C4A..0C4C ; Alphabetic # Mn [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU +0C55..0C56 ; Alphabetic # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK +0C58..0C5A ; Alphabetic # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5C..0C5D ; Alphabetic # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU +0C60..0C61 ; Alphabetic # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL +0C62..0C63 ; Alphabetic # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL +0C80 ; Alphabetic # Lo KANNADA SIGN SPACING CANDRABINDU +0C81 ; Alphabetic # Mn KANNADA SIGN CANDRABINDU +0C82..0C83 ; Alphabetic # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA +0C85..0C8C ; Alphabetic # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L +0C8E..0C90 ; Alphabetic # Lo [3] KANNADA LETTER E..KANNADA LETTER AI +0C92..0CA8 ; Alphabetic # Lo [23] KANNADA LETTER O..KANNADA LETTER NA +0CAA..0CB3 ; Alphabetic # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA +0CB5..0CB9 ; Alphabetic # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA +0CBD ; Alphabetic # Lo KANNADA SIGN AVAGRAHA +0CBE ; Alphabetic # Mc KANNADA VOWEL SIGN AA +0CBF ; Alphabetic # Mn KANNADA VOWEL SIGN I +0CC0..0CC4 ; Alphabetic # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR +0CC6 ; Alphabetic # Mn KANNADA VOWEL SIGN E +0CC7..0CC8 ; Alphabetic # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; Alphabetic # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO +0CCC ; Alphabetic # Mn KANNADA VOWEL SIGN AU +0CD5..0CD6 ; Alphabetic # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK +0CDC..0CDE ; Alphabetic # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA +0CE0..0CE1 ; Alphabetic # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL +0CE2..0CE3 ; Alphabetic # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL +0CF1..0CF2 ; Alphabetic # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA +0CF3 ; Alphabetic # Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT +0D00..0D01 ; Alphabetic # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU +0D02..0D03 ; Alphabetic # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA +0D04..0D0C ; Alphabetic # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L +0D0E..0D10 ; Alphabetic # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI +0D12..0D3A ; Alphabetic # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA +0D3D ; Alphabetic # Lo MALAYALAM SIGN AVAGRAHA +0D3E..0D40 ; Alphabetic # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II +0D41..0D44 ; Alphabetic # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR +0D46..0D48 ; Alphabetic # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI +0D4A..0D4C ; Alphabetic # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU +0D4E ; Alphabetic # Lo MALAYALAM LETTER DOT REPH +0D54..0D56 ; Alphabetic # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL +0D57 ; Alphabetic # Mc MALAYALAM AU LENGTH MARK +0D5F..0D61 ; Alphabetic # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL +0D62..0D63 ; Alphabetic # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL +0D7A..0D7F ; Alphabetic # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K +0D81 ; Alphabetic # Mn SINHALA SIGN CANDRABINDU +0D82..0D83 ; Alphabetic # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA +0D85..0D96 ; Alphabetic # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA +0D9A..0DB1 ; Alphabetic # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA +0DB3..0DBB ; Alphabetic # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA +0DBD ; Alphabetic # Lo SINHALA LETTER DANTAJA LAYANNA +0DC0..0DC6 ; Alphabetic # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA +0DCF..0DD1 ; Alphabetic # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA +0DD2..0DD4 ; Alphabetic # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA +0DD6 ; Alphabetic # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA +0DD8..0DDF ; Alphabetic # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA +0DF2..0DF3 ; Alphabetic # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA +0E01..0E30 ; Alphabetic # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A +0E31 ; Alphabetic # Mn THAI CHARACTER MAI HAN-AKAT +0E32..0E33 ; Alphabetic # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM +0E34..0E3A ; Alphabetic # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU +0E40..0E45 ; Alphabetic # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO +0E46 ; Alphabetic # Lm THAI CHARACTER MAIYAMOK +0E4D ; Alphabetic # Mn THAI CHARACTER NIKHAHIT +0E81..0E82 ; Alphabetic # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG +0E84 ; Alphabetic # Lo LAO LETTER KHO TAM +0E86..0E8A ; Alphabetic # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM +0E8C..0EA3 ; Alphabetic # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING +0EA5 ; Alphabetic # Lo LAO LETTER LO LOOT +0EA7..0EB0 ; Alphabetic # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A +0EB1 ; Alphabetic # Mn LAO VOWEL SIGN MAI KAN +0EB2..0EB3 ; Alphabetic # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM +0EB4..0EB9 ; Alphabetic # Mn [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU +0EBB..0EBC ; Alphabetic # Mn [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO +0EBD ; Alphabetic # Lo LAO SEMIVOWEL SIGN NYO +0EC0..0EC4 ; Alphabetic # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI +0EC6 ; Alphabetic # Lm LAO KO LA +0ECD ; Alphabetic # Mn LAO NIGGAHITA +0EDC..0EDF ; Alphabetic # Lo [4] LAO HO NO..LAO LETTER KHMU NYO +0F00 ; Alphabetic # Lo TIBETAN SYLLABLE OM +0F40..0F47 ; Alphabetic # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA +0F49..0F6C ; Alphabetic # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA +0F71..0F7E ; Alphabetic # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO +0F7F ; Alphabetic # Mc TIBETAN SIGN RNAM BCAD +0F80..0F83 ; Alphabetic # Mn [4] TIBETAN VOWEL SIGN REVERSED I..TIBETAN SIGN SNA LDAN +0F88..0F8C ; Alphabetic # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN +0F8D..0F97 ; Alphabetic # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA +0F99..0FBC ; Alphabetic # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA +1000..102A ; Alphabetic # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU +102B..102C ; Alphabetic # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA +102D..1030 ; Alphabetic # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU +1031 ; Alphabetic # Mc MYANMAR VOWEL SIGN E +1032..1036 ; Alphabetic # Mn [5] MYANMAR VOWEL SIGN AI..MYANMAR SIGN ANUSVARA +1038 ; Alphabetic # Mc MYANMAR SIGN VISARGA +103B..103C ; Alphabetic # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA +103D..103E ; Alphabetic # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA +103F ; Alphabetic # Lo MYANMAR LETTER GREAT SA +1050..1055 ; Alphabetic # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL +1056..1057 ; Alphabetic # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR +1058..1059 ; Alphabetic # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL +105A..105D ; Alphabetic # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE +105E..1060 ; Alphabetic # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA +1061 ; Alphabetic # Lo MYANMAR LETTER SGAW KAREN SHA +1062..1064 ; Alphabetic # Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO +1065..1066 ; Alphabetic # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA +1067..106D ; Alphabetic # Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5 +106E..1070 ; Alphabetic # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA +1071..1074 ; Alphabetic # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE +1075..1081 ; Alphabetic # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA +1082 ; Alphabetic # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA +1083..1084 ; Alphabetic # Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E +1085..1086 ; Alphabetic # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y +1087..108C ; Alphabetic # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3 +108D ; Alphabetic # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE +108E ; Alphabetic # Lo MYANMAR LETTER RUMAI PALAUNG FA +108F ; Alphabetic # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5 +109A..109C ; Alphabetic # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A +109D ; Alphabetic # Mn MYANMAR VOWEL SIGN AITON AI +10A0..10C5 ; Alphabetic # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE +10C7 ; Alphabetic # L& GEORGIAN CAPITAL LETTER YN +10CD ; Alphabetic # L& GEORGIAN CAPITAL LETTER AEN +10D0..10FA ; Alphabetic # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN +10FC ; Alphabetic # Lm MODIFIER LETTER GEORGIAN NAR +10FD..10FF ; Alphabetic # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN +1100..1248 ; Alphabetic # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA +124A..124D ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE +1250..1256 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO +1258 ; Alphabetic # Lo ETHIOPIC SYLLABLE QHWA +125A..125D ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE +1260..1288 ; Alphabetic # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA +128A..128D ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE +1290..12B0 ; Alphabetic # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA +12B2..12B5 ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE +12B8..12BE ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO +12C0 ; Alphabetic # Lo ETHIOPIC SYLLABLE KXWA +12C2..12C5 ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE +12C8..12D6 ; Alphabetic # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O +12D8..1310 ; Alphabetic # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA +1312..1315 ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE +1318..135A ; Alphabetic # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA +1380..138F ; Alphabetic # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE +13A0..13F5 ; Alphabetic # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV +13F8..13FD ; Alphabetic # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV +1401..166C ; Alphabetic # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA +166F..167F ; Alphabetic # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W +1681..169A ; Alphabetic # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH +16A0..16EA ; Alphabetic # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X +16EE..16F0 ; Alphabetic # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL +16F1..16F8 ; Alphabetic # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC +1700..1711 ; Alphabetic # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA +1712..1713 ; Alphabetic # Mn [2] TAGALOG VOWEL SIGN I..TAGALOG VOWEL SIGN U +171F..1731 ; Alphabetic # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA +1732..1733 ; Alphabetic # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1740..1751 ; Alphabetic # Lo [18] BUHID LETTER A..BUHID LETTER HA +1752..1753 ; Alphabetic # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U +1760..176C ; Alphabetic # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA +176E..1770 ; Alphabetic # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA +1772..1773 ; Alphabetic # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U +1780..17B3 ; Alphabetic # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU +17B6 ; Alphabetic # Mc KHMER VOWEL SIGN AA +17B7..17BD ; Alphabetic # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA +17BE..17C5 ; Alphabetic # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU +17C6 ; Alphabetic # Mn KHMER SIGN NIKAHIT +17C7..17C8 ; Alphabetic # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU +17D7 ; Alphabetic # Lm KHMER SIGN LEK TOO +17DC ; Alphabetic # Lo KHMER SIGN AVAKRAHASANYA +1820..1842 ; Alphabetic # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI +1843 ; Alphabetic # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN +1844..1878 ; Alphabetic # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS +1880..1884 ; Alphabetic # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA +1885..1886 ; Alphabetic # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA +1887..18A8 ; Alphabetic # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA +18A9 ; Alphabetic # Mn MONGOLIAN LETTER ALI GALI DAGALGA +18AA ; Alphabetic # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA +18B0..18F5 ; Alphabetic # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S +1900..191E ; Alphabetic # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA +1920..1922 ; Alphabetic # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U +1923..1926 ; Alphabetic # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU +1927..1928 ; Alphabetic # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O +1929..192B ; Alphabetic # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA +1930..1931 ; Alphabetic # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA +1932 ; Alphabetic # Mn LIMBU SMALL LETTER ANUSVARA +1933..1938 ; Alphabetic # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA +1950..196D ; Alphabetic # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI +1970..1974 ; Alphabetic # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 +1980..19AB ; Alphabetic # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA +19B0..19C9 ; Alphabetic # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2 +1A00..1A16 ; Alphabetic # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA +1A17..1A18 ; Alphabetic # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U +1A19..1A1A ; Alphabetic # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O +1A1B ; Alphabetic # Mn BUGINESE VOWEL SIGN AE +1A20..1A54 ; Alphabetic # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA +1A55 ; Alphabetic # Mc TAI THAM CONSONANT SIGN MEDIAL RA +1A56 ; Alphabetic # Mn TAI THAM CONSONANT SIGN MEDIAL LA +1A57 ; Alphabetic # Mc TAI THAM CONSONANT SIGN LA TANG LAI +1A58..1A5E ; Alphabetic # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA +1A61 ; Alphabetic # Mc TAI THAM VOWEL SIGN A +1A62 ; Alphabetic # Mn TAI THAM VOWEL SIGN MAI SAT +1A63..1A64 ; Alphabetic # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA +1A65..1A6C ; Alphabetic # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW +1A6D..1A72 ; Alphabetic # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI +1A73..1A74 ; Alphabetic # Mn [2] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN MAI KANG +1AA7 ; Alphabetic # Lm TAI THAM SIGN MAI YAMOK +1ABF..1AC0 ; Alphabetic # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ACC..1ACE ; Alphabetic # Mn [3] COMBINING LATIN SMALL LETTER INSULAR G..COMBINING LATIN SMALL LETTER INSULAR T +1B00..1B03 ; Alphabetic # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG +1B04 ; Alphabetic # Mc BALINESE SIGN BISAH +1B05..1B33 ; Alphabetic # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA +1B35 ; Alphabetic # Mc BALINESE VOWEL SIGN TEDUNG +1B36..1B3A ; Alphabetic # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA +1B3B ; Alphabetic # Mc BALINESE VOWEL SIGN RA REPA TEDUNG +1B3C ; Alphabetic # Mn BALINESE VOWEL SIGN LA LENGA +1B3D..1B41 ; Alphabetic # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG +1B42 ; Alphabetic # Mn BALINESE VOWEL SIGN PEPET +1B43 ; Alphabetic # Mc BALINESE VOWEL SIGN PEPET TEDUNG +1B45..1B4C ; Alphabetic # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA +1B80..1B81 ; Alphabetic # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR +1B82 ; Alphabetic # Mc SUNDANESE SIGN PANGWISAD +1B83..1BA0 ; Alphabetic # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA +1BA1 ; Alphabetic # Mc SUNDANESE CONSONANT SIGN PAMINGKAL +1BA2..1BA5 ; Alphabetic # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU +1BA6..1BA7 ; Alphabetic # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG +1BA8..1BA9 ; Alphabetic # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG +1BAC..1BAD ; Alphabetic # Mn [2] SUNDANESE CONSONANT SIGN PASANGAN MA..SUNDANESE CONSONANT SIGN PASANGAN WA +1BAE..1BAF ; Alphabetic # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA +1BBA..1BE5 ; Alphabetic # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U +1BE7 ; Alphabetic # Mc BATAK VOWEL SIGN E +1BE8..1BE9 ; Alphabetic # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE +1BEA..1BEC ; Alphabetic # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O +1BED ; Alphabetic # Mn BATAK VOWEL SIGN KARO O +1BEE ; Alphabetic # Mc BATAK VOWEL SIGN U +1BEF..1BF1 ; Alphabetic # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H +1C00..1C23 ; Alphabetic # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A +1C24..1C2B ; Alphabetic # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU +1C2C..1C33 ; Alphabetic # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T +1C34..1C35 ; Alphabetic # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG +1C36 ; Alphabetic # Mn LEPCHA SIGN RAN +1C4D..1C4F ; Alphabetic # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA +1C5A..1C77 ; Alphabetic # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH +1C78..1C7D ; Alphabetic # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD +1C80..1C8A ; Alphabetic # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE +1C90..1CBA ; Alphabetic # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN +1CBD..1CBF ; Alphabetic # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN +1CE9..1CEC ; Alphabetic # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL +1CEE..1CF3 ; Alphabetic # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA +1CF5..1CF6 ; Alphabetic # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA +1CFA ; Alphabetic # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA +1D00..1D2B ; Alphabetic # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL +1D2C..1D6A ; Alphabetic # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI +1D6B..1D77 ; Alphabetic # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G +1D78 ; Alphabetic # Lm MODIFIER LETTER CYRILLIC EN +1D79..1D9A ; Alphabetic # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK +1D9B..1DBF ; Alphabetic # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA +1DD3..1DF4 ; Alphabetic # Mn [34] COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE..COMBINING LATIN SMALL LETTER U WITH DIAERESIS +1E00..1F15 ; Alphabetic # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18..1F1D ; Alphabetic # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F45 ; Alphabetic # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48..1F4D ; Alphabetic # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; Alphabetic # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59 ; Alphabetic # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; Alphabetic # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; Alphabetic # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F..1F7D ; Alphabetic # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1FB4 ; Alphabetic # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FBC ; Alphabetic # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBE ; Alphabetic # L& GREEK PROSGEGRAMMENI +1FC2..1FC4 ; Alphabetic # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FCC ; Alphabetic # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FD0..1FD3 ; Alphabetic # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FDB ; Alphabetic # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA +1FE0..1FEC ; Alphabetic # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FF2..1FF4 ; Alphabetic # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FFC ; Alphabetic # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +2071 ; Alphabetic # Lm SUPERSCRIPT LATIN SMALL LETTER I +207F ; Alphabetic # Lm SUPERSCRIPT LATIN SMALL LETTER N +2090..209C ; Alphabetic # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T +2102 ; Alphabetic # L& DOUBLE-STRUCK CAPITAL C +2107 ; Alphabetic # L& EULER CONSTANT +210A..2113 ; Alphabetic # L& [10] SCRIPT SMALL G..SCRIPT SMALL L +2115 ; Alphabetic # L& DOUBLE-STRUCK CAPITAL N +2119..211D ; Alphabetic # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R +2124 ; Alphabetic # L& DOUBLE-STRUCK CAPITAL Z +2126 ; Alphabetic # L& OHM SIGN +2128 ; Alphabetic # L& BLACK-LETTER CAPITAL Z +212A..212D ; Alphabetic # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C +212F..2134 ; Alphabetic # L& [6] SCRIPT SMALL E..SCRIPT SMALL O +2135..2138 ; Alphabetic # Lo [4] ALEF SYMBOL..DALET SYMBOL +2139 ; Alphabetic # L& INFORMATION SOURCE +213C..213F ; Alphabetic # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI +2145..2149 ; Alphabetic # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J +214E ; Alphabetic # L& TURNED SMALL F +2160..2182 ; Alphabetic # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND +2183..2184 ; Alphabetic # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C +2185..2188 ; Alphabetic # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND +24B6..24E9 ; Alphabetic # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z +2C00..2C7B ; Alphabetic # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E +2C7C..2C7D ; Alphabetic # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V +2C7E..2CE4 ; Alphabetic # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI +2CEB..2CEE ; Alphabetic # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA +2CF2..2CF3 ; Alphabetic # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI +2D00..2D25 ; Alphabetic # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE +2D27 ; Alphabetic # L& GEORGIAN SMALL LETTER YN +2D2D ; Alphabetic # L& GEORGIAN SMALL LETTER AEN +2D30..2D67 ; Alphabetic # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO +2D6F ; Alphabetic # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2D80..2D96 ; Alphabetic # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE +2DA0..2DA6 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO +2DA8..2DAE ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO +2DB0..2DB6 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO +2DB8..2DBE ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO +2DC0..2DC6 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO +2DC8..2DCE ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO +2DD0..2DD6 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO +2DD8..2DDE ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO +2DE0..2DFF ; Alphabetic # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS +2E2F ; Alphabetic # Lm VERTICAL TILDE +3005 ; Alphabetic # Lm IDEOGRAPHIC ITERATION MARK +3006 ; Alphabetic # Lo IDEOGRAPHIC CLOSING MARK +3007 ; Alphabetic # Nl IDEOGRAPHIC NUMBER ZERO +3021..3029 ; Alphabetic # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE +3031..3035 ; Alphabetic # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF +3038..303A ; Alphabetic # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY +303B ; Alphabetic # Lm VERTICAL IDEOGRAPHIC ITERATION MARK +303C ; Alphabetic # Lo MASU MARK +3041..3096 ; Alphabetic # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE +309D..309E ; Alphabetic # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK +309F ; Alphabetic # Lo HIRAGANA DIGRAPH YORI +30A1..30FA ; Alphabetic # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO +30FC..30FE ; Alphabetic # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK +30FF ; Alphabetic # Lo KATAKANA DIGRAPH KOTO +3105..312F ; Alphabetic # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN +3131..318E ; Alphabetic # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE +31A0..31BF ; Alphabetic # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH +31F0..31FF ; Alphabetic # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO +3400..4DBF ; Alphabetic # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF +4E00..A014 ; Alphabetic # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E +A015 ; Alphabetic # Lm YI SYLLABLE WU +A016..A48C ; Alphabetic # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR +A4D0..A4F7 ; Alphabetic # Lo [40] LISU LETTER BA..LISU LETTER OE +A4F8..A4FD ; Alphabetic # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU +A500..A60B ; Alphabetic # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG +A60C ; Alphabetic # Lm VAI SYLLABLE LENGTHENER +A610..A61F ; Alphabetic # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG +A62A..A62B ; Alphabetic # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO +A640..A66D ; Alphabetic # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O +A66E ; Alphabetic # Lo CYRILLIC LETTER MULTIOCULAR O +A674..A67B ; Alphabetic # Mn [8] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC LETTER OMEGA +A67F ; Alphabetic # Lm CYRILLIC PAYEROK +A680..A69B ; Alphabetic # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O +A69C..A69D ; Alphabetic # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN +A69E..A69F ; Alphabetic # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E +A6A0..A6E5 ; Alphabetic # Lo [70] BAMUM LETTER A..BAMUM LETTER KI +A6E6..A6EF ; Alphabetic # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM +A717..A71F ; Alphabetic # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK +A722..A76F ; Alphabetic # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON +A770 ; Alphabetic # Lm MODIFIER LETTER US +A771..A787 ; Alphabetic # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T +A788 ; Alphabetic # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT +A78B..A78E ; Alphabetic # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT +A78F ; Alphabetic # Lo LATIN LETTER SINOLOGICAL DOT +A790..A7DC ; Alphabetic # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; Alphabetic # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q +A7F5..A7F6 ; Alphabetic # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H +A7F7 ; Alphabetic # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I +A7F8..A7F9 ; Alphabetic # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE +A7FA ; Alphabetic # L& LATIN LETTER SMALL CAPITAL TURNED M +A7FB..A801 ; Alphabetic # Lo [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I +A802 ; Alphabetic # Mn SYLOTI NAGRI SIGN DVISVARA +A803..A805 ; Alphabetic # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O +A807..A80A ; Alphabetic # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO +A80B ; Alphabetic # Mn SYLOTI NAGRI SIGN ANUSVARA +A80C..A822 ; Alphabetic # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO +A823..A824 ; Alphabetic # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I +A825..A826 ; Alphabetic # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E +A827 ; Alphabetic # Mc SYLOTI NAGRI VOWEL SIGN OO +A840..A873 ; Alphabetic # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU +A880..A881 ; Alphabetic # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA +A882..A8B3 ; Alphabetic # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA +A8B4..A8C3 ; Alphabetic # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU +A8C5 ; Alphabetic # Mn SAURASHTRA SIGN CANDRABINDU +A8F2..A8F7 ; Alphabetic # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA +A8FB ; Alphabetic # Lo DEVANAGARI HEADSTROKE +A8FD..A8FE ; Alphabetic # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY +A8FF ; Alphabetic # Mn DEVANAGARI VOWEL SIGN AY +A90A..A925 ; Alphabetic # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO +A926..A92A ; Alphabetic # Mn [5] KAYAH LI VOWEL UE..KAYAH LI VOWEL O +A930..A946 ; Alphabetic # Lo [23] REJANG LETTER KA..REJANG LETTER A +A947..A951 ; Alphabetic # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R +A952 ; Alphabetic # Mc REJANG CONSONANT SIGN H +A960..A97C ; Alphabetic # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH +A980..A982 ; Alphabetic # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR +A983 ; Alphabetic # Mc JAVANESE SIGN WIGNYAN +A984..A9B2 ; Alphabetic # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA +A9B4..A9B5 ; Alphabetic # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG +A9B6..A9B9 ; Alphabetic # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT +A9BA..A9BB ; Alphabetic # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE +A9BC..A9BD ; Alphabetic # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET +A9BE..A9BF ; Alphabetic # Mc [2] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE CONSONANT SIGN CAKRA +A9CF ; Alphabetic # Lm JAVANESE PANGRANGKEP +A9E0..A9E4 ; Alphabetic # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA +A9E5 ; Alphabetic # Mn MYANMAR SIGN SHAN SAW +A9E6 ; Alphabetic # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION +A9E7..A9EF ; Alphabetic # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA +A9FA..A9FE ; Alphabetic # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA +AA00..AA28 ; Alphabetic # Lo [41] CHAM LETTER A..CHAM LETTER HA +AA29..AA2E ; Alphabetic # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE +AA2F..AA30 ; Alphabetic # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI +AA31..AA32 ; Alphabetic # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE +AA33..AA34 ; Alphabetic # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA +AA35..AA36 ; Alphabetic # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA +AA40..AA42 ; Alphabetic # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG +AA43 ; Alphabetic # Mn CHAM CONSONANT SIGN FINAL NG +AA44..AA4B ; Alphabetic # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS +AA4C ; Alphabetic # Mn CHAM CONSONANT SIGN FINAL M +AA4D ; Alphabetic # Mc CHAM CONSONANT SIGN FINAL H +AA60..AA6F ; Alphabetic # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA +AA70 ; Alphabetic # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION +AA71..AA76 ; Alphabetic # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM +AA7A ; Alphabetic # Lo MYANMAR LETTER AITON RA +AA7B ; Alphabetic # Mc MYANMAR SIGN PAO KAREN TONE +AA7C ; Alphabetic # Mn MYANMAR SIGN TAI LAING TONE-2 +AA7D ; Alphabetic # Mc MYANMAR SIGN TAI LAING TONE-5 +AA7E..AAAF ; Alphabetic # Lo [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O +AAB0 ; Alphabetic # Mn TAI VIET MAI KANG +AAB1 ; Alphabetic # Lo TAI VIET VOWEL AA +AAB2..AAB4 ; Alphabetic # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U +AAB5..AAB6 ; Alphabetic # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O +AAB7..AAB8 ; Alphabetic # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA +AAB9..AABD ; Alphabetic # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN +AABE ; Alphabetic # Mn TAI VIET VOWEL AM +AAC0 ; Alphabetic # Lo TAI VIET TONE MAI NUENG +AAC2 ; Alphabetic # Lo TAI VIET TONE MAI SONG +AADB..AADC ; Alphabetic # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG +AADD ; Alphabetic # Lm TAI VIET SYMBOL SAM +AAE0..AAEA ; Alphabetic # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA +AAEB ; Alphabetic # Mc MEETEI MAYEK VOWEL SIGN II +AAEC..AAED ; Alphabetic # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI +AAEE..AAEF ; Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU +AAF2 ; Alphabetic # Lo MEETEI MAYEK ANJI +AAF3..AAF4 ; Alphabetic # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK +AAF5 ; Alphabetic # Mc MEETEI MAYEK VOWEL SIGN VISARGA +AB01..AB06 ; Alphabetic # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO +AB09..AB0E ; Alphabetic # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO +AB11..AB16 ; Alphabetic # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO +AB20..AB26 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO +AB28..AB2E ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO +AB30..AB5A ; Alphabetic # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG +AB5C..AB5F ; Alphabetic # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK +AB60..AB68 ; Alphabetic # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE +AB69 ; Alphabetic # Lm MODIFIER LETTER SMALL TURNED W +AB70..ABBF ; Alphabetic # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA +ABC0..ABE2 ; Alphabetic # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM +ABE3..ABE4 ; Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP +ABE5 ; Alphabetic # Mn MEETEI MAYEK VOWEL SIGN ANAP +ABE6..ABE7 ; Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP +ABE8 ; Alphabetic # Mn MEETEI MAYEK VOWEL SIGN UNAP +ABE9..ABEA ; Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG +AC00..D7A3 ; Alphabetic # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH +D7B0..D7C6 ; Alphabetic # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E +D7CB..D7FB ; Alphabetic # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH +F900..FA6D ; Alphabetic # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D +FA70..FAD9 ; Alphabetic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +FB00..FB06 ; Alphabetic # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; Alphabetic # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FB1D ; Alphabetic # Lo HEBREW LETTER YOD WITH HIRIQ +FB1E ; Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA +FB1F..FB28 ; Alphabetic # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV +FB2A..FB36 ; Alphabetic # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; Alphabetic # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; Alphabetic # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; Alphabetic # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; Alphabetic # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FBB1 ; Alphabetic # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM +FBD3..FD3D ; Alphabetic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD50..FD8F ; Alphabetic # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD92..FDC7 ; Alphabetic # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDF0..FDFB ; Alphabetic # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU +FE70..FE74 ; Alphabetic # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM +FE76..FEFC ; Alphabetic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM +FF21..FF3A ; Alphabetic # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +FF41..FF5A ; Alphabetic # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +FF66..FF6F ; Alphabetic # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU +FF70 ; Alphabetic # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF71..FF9D ; Alphabetic # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N +FF9E..FF9F ; Alphabetic # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +FFA0..FFBE ; Alphabetic # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH +FFC2..FFC7 ; Alphabetic # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E +FFCA..FFCF ; Alphabetic # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE +FFD2..FFD7 ; Alphabetic # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU +FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I +10000..1000B ; Alphabetic # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE +1000D..10026 ; Alphabetic # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO +10028..1003A ; Alphabetic # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO +1003C..1003D ; Alphabetic # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE +1003F..1004D ; Alphabetic # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO +10050..1005D ; Alphabetic # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 +10080..100FA ; Alphabetic # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 +10140..10174 ; Alphabetic # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS +10280..1029C ; Alphabetic # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X +102A0..102D0 ; Alphabetic # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3 +10300..1031F ; Alphabetic # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS +1032D..10340 ; Alphabetic # Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA +10341 ; Alphabetic # Nl GOTHIC LETTER NINETY +10342..10349 ; Alphabetic # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL +1034A ; Alphabetic # Nl GOTHIC LETTER NINE HUNDRED +10350..10375 ; Alphabetic # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA +10376..1037A ; Alphabetic # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII +10380..1039D ; Alphabetic # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU +103A0..103C3 ; Alphabetic # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA +103C8..103CF ; Alphabetic # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH +103D1..103D5 ; Alphabetic # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED +10400..1044F ; Alphabetic # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW +10450..1049D ; Alphabetic # Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO +104B0..104D3 ; Alphabetic # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +104D8..104FB ; Alphabetic # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10500..10527 ; Alphabetic # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE +10530..10563 ; Alphabetic # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW +10570..1057A ; Alphabetic # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Alphabetic # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Alphabetic # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Alphabetic # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; Alphabetic # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Alphabetic # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Alphabetic # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Alphabetic # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +105C0..105F3 ; Alphabetic # Lo [52] TODHRI LETTER A..TODHRI LETTER OO +10600..10736 ; Alphabetic # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 +10740..10755 ; Alphabetic # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE +10760..10767 ; Alphabetic # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; Alphabetic # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Alphabetic # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Alphabetic # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL +10800..10805 ; Alphabetic # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA +10808 ; Alphabetic # Lo CYPRIOT SYLLABLE JO +1080A..10835 ; Alphabetic # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO +10837..10838 ; Alphabetic # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE +1083C ; Alphabetic # Lo CYPRIOT SYLLABLE ZA +1083F..10855 ; Alphabetic # Lo [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW +10860..10876 ; Alphabetic # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW +10880..1089E ; Alphabetic # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW +108E0..108F2 ; Alphabetic # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH +108F4..108F5 ; Alphabetic # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW +10900..10915 ; Alphabetic # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU +10920..10939 ; Alphabetic # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; Alphabetic # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 +10980..109B7 ; Alphabetic # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA +109BE..109BF ; Alphabetic # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN +10A00 ; Alphabetic # Lo KHAROSHTHI LETTER A +10A01..10A03 ; Alphabetic # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R +10A05..10A06 ; Alphabetic # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A0C..10A0F ; Alphabetic # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA +10A10..10A13 ; Alphabetic # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA +10A15..10A17 ; Alphabetic # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA +10A19..10A35 ; Alphabetic # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA +10A60..10A7C ; Alphabetic # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH +10A80..10A9C ; Alphabetic # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH +10AC0..10AC7 ; Alphabetic # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW +10AC9..10AE4 ; Alphabetic # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW +10B00..10B35 ; Alphabetic # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE +10B40..10B55 ; Alphabetic # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW +10B60..10B72 ; Alphabetic # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW +10B80..10B91 ; Alphabetic # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW +10C00..10C48 ; Alphabetic # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH +10C80..10CB2 ; Alphabetic # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10CC0..10CF2 ; Alphabetic # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10D00..10D23 ; Alphabetic # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA +10D24..10D27 ; Alphabetic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI +10D4A..10D4D ; Alphabetic # Lo [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE +10D4E ; Alphabetic # Lm GARAY VOWEL LENGTH MARK +10D4F ; Alphabetic # Lo GARAY SUKUN +10D50..10D65 ; Alphabetic # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D69 ; Alphabetic # Mn GARAY VOWEL SIGN E +10D6F ; Alphabetic # Lm GARAY REDUPLICATION MARK +10D70..10D85 ; Alphabetic # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA +10E80..10EA9 ; Alphabetic # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET +10EAB..10EAC ; Alphabetic # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK +10EB0..10EB1 ; Alphabetic # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE +10EC2..10EC4 ; Alphabetic # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10EC5 ; Alphabetic # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; Alphabetic # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW +10EFA..10EFC ; Alphabetic # Mn [3] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC COMBINING ALEF OVERLAY +10F00..10F1C ; Alphabetic # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL +10F27 ; Alphabetic # Lo OLD SOGDIAN LIGATURE AYIN-DALETH +10F30..10F45 ; Alphabetic # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN +10F70..10F81 ; Alphabetic # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10FB0..10FC4 ; Alphabetic # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW +10FE0..10FF6 ; Alphabetic # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH +11000 ; Alphabetic # Mc BRAHMI SIGN CANDRABINDU +11001 ; Alphabetic # Mn BRAHMI SIGN ANUSVARA +11002 ; Alphabetic # Mc BRAHMI SIGN VISARGA +11003..11037 ; Alphabetic # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA +11038..11045 ; Alphabetic # Mn [14] BRAHMI VOWEL SIGN AA..BRAHMI VOWEL SIGN AU +11071..11072 ; Alphabetic # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11073..11074 ; Alphabetic # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +11075 ; Alphabetic # Lo BRAHMI LETTER OLD TAMIL LLA +11080..11081 ; Alphabetic # Mn [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA +11082 ; Alphabetic # Mc KAITHI SIGN VISARGA +11083..110AF ; Alphabetic # Lo [45] KAITHI LETTER A..KAITHI LETTER HA +110B0..110B2 ; Alphabetic # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II +110B3..110B6 ; Alphabetic # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI +110B7..110B8 ; Alphabetic # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU +110C2 ; Alphabetic # Mn KAITHI VOWEL SIGN VOCALIC R +110D0..110E8 ; Alphabetic # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE +11100..11102 ; Alphabetic # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA +11103..11126 ; Alphabetic # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA +11127..1112B ; Alphabetic # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU +1112C ; Alphabetic # Mc CHAKMA VOWEL SIGN E +1112D..11132 ; Alphabetic # Mn [6] CHAKMA VOWEL SIGN AI..CHAKMA AU MARK +11144 ; Alphabetic # Lo CHAKMA LETTER LHAA +11145..11146 ; Alphabetic # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI +11147 ; Alphabetic # Lo CHAKMA LETTER VAA +11150..11172 ; Alphabetic # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA +11176 ; Alphabetic # Lo MAHAJANI LIGATURE SHRI +11180..11181 ; Alphabetic # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA +11182 ; Alphabetic # Mc SHARADA SIGN VISARGA +11183..111B2 ; Alphabetic # Lo [48] SHARADA LETTER A..SHARADA LETTER HA +111B3..111B5 ; Alphabetic # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II +111B6..111BE ; Alphabetic # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O +111BF ; Alphabetic # Mc SHARADA VOWEL SIGN AU +111C1..111C4 ; Alphabetic # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM +111CE ; Alphabetic # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E +111CF ; Alphabetic # Mn SHARADA SIGN INVERTED CANDRABINDU +111DA ; Alphabetic # Lo SHARADA EKAM +111DC ; Alphabetic # Lo SHARADA HEADSTROKE +11200..11211 ; Alphabetic # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA +11213..1122B ; Alphabetic # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA +1122C..1122E ; Alphabetic # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II +1122F..11231 ; Alphabetic # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI +11232..11233 ; Alphabetic # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU +11234 ; Alphabetic # Mn KHOJKI SIGN ANUSVARA +11237 ; Alphabetic # Mn KHOJKI SIGN SHADDA +1123E ; Alphabetic # Mn KHOJKI SIGN SUKUN +1123F..11240 ; Alphabetic # Lo [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I +11241 ; Alphabetic # Mn KHOJKI VOWEL SIGN VOCALIC R +11280..11286 ; Alphabetic # Lo [7] MULTANI LETTER A..MULTANI LETTER GA +11288 ; Alphabetic # Lo MULTANI LETTER GHA +1128A..1128D ; Alphabetic # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA +1128F..1129D ; Alphabetic # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA +1129F..112A8 ; Alphabetic # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA +112B0..112DE ; Alphabetic # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA +112DF ; Alphabetic # Mn KHUDAWADI SIGN ANUSVARA +112E0..112E2 ; Alphabetic # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II +112E3..112E8 ; Alphabetic # Mn [6] KHUDAWADI VOWEL SIGN U..KHUDAWADI VOWEL SIGN AU +11300..11301 ; Alphabetic # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU +11302..11303 ; Alphabetic # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA +11305..1130C ; Alphabetic # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L +1130F..11310 ; Alphabetic # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI +11313..11328 ; Alphabetic # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA +1132A..11330 ; Alphabetic # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA +11332..11333 ; Alphabetic # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA +11335..11339 ; Alphabetic # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA +1133D ; Alphabetic # Lo GRANTHA SIGN AVAGRAHA +1133E..1133F ; Alphabetic # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I +11340 ; Alphabetic # Mn GRANTHA VOWEL SIGN II +11341..11344 ; Alphabetic # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR +11347..11348 ; Alphabetic # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI +1134B..1134C ; Alphabetic # Mc [2] GRANTHA VOWEL SIGN OO..GRANTHA VOWEL SIGN AU +11350 ; Alphabetic # Lo GRANTHA OM +11357 ; Alphabetic # Mc GRANTHA AU LENGTH MARK +1135D..11361 ; Alphabetic # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL +11362..11363 ; Alphabetic # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL +11380..11389 ; Alphabetic # Lo [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL +1138B ; Alphabetic # Lo TULU-TIGALARI LETTER EE +1138E ; Alphabetic # Lo TULU-TIGALARI LETTER AI +11390..113B5 ; Alphabetic # Lo [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA +113B7 ; Alphabetic # Lo TULU-TIGALARI SIGN AVAGRAHA +113B8..113BA ; Alphabetic # Mc [3] TULU-TIGALARI VOWEL SIGN AA..TULU-TIGALARI VOWEL SIGN II +113BB..113C0 ; Alphabetic # Mn [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL +113C2 ; Alphabetic # Mc TULU-TIGALARI VOWEL SIGN EE +113C5 ; Alphabetic # Mc TULU-TIGALARI VOWEL SIGN AI +113C7..113CA ; Alphabetic # Mc [4] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI SIGN CANDRA ANUNASIKA +113CC..113CD ; Alphabetic # Mc [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA +113D1 ; Alphabetic # Lo TULU-TIGALARI REPHA +113D3 ; Alphabetic # Lo TULU-TIGALARI SIGN PLUTA +11400..11434 ; Alphabetic # Lo [53] NEWA LETTER A..NEWA LETTER HA +11435..11437 ; Alphabetic # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II +11438..1143F ; Alphabetic # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI +11440..11441 ; Alphabetic # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU +11443..11444 ; Alphabetic # Mn [2] NEWA SIGN CANDRABINDU..NEWA SIGN ANUSVARA +11445 ; Alphabetic # Mc NEWA SIGN VISARGA +11447..1144A ; Alphabetic # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI +1145F..11461 ; Alphabetic # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA +11480..114AF ; Alphabetic # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA +114B0..114B2 ; Alphabetic # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II +114B3..114B8 ; Alphabetic # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL +114B9 ; Alphabetic # Mc TIRHUTA VOWEL SIGN E +114BA ; Alphabetic # Mn TIRHUTA VOWEL SIGN SHORT E +114BB..114BE ; Alphabetic # Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU +114BF..114C0 ; Alphabetic # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA +114C1 ; Alphabetic # Mc TIRHUTA SIGN VISARGA +114C4..114C5 ; Alphabetic # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG +114C7 ; Alphabetic # Lo TIRHUTA OM +11580..115AE ; Alphabetic # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA +115AF..115B1 ; Alphabetic # Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II +115B2..115B5 ; Alphabetic # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR +115B8..115BB ; Alphabetic # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU +115BC..115BD ; Alphabetic # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA +115BE ; Alphabetic # Mc SIDDHAM SIGN VISARGA +115D8..115DB ; Alphabetic # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U +115DC..115DD ; Alphabetic # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU +11600..1162F ; Alphabetic # Lo [48] MODI LETTER A..MODI LETTER LLA +11630..11632 ; Alphabetic # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II +11633..1163A ; Alphabetic # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI +1163B..1163C ; Alphabetic # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU +1163D ; Alphabetic # Mn MODI SIGN ANUSVARA +1163E ; Alphabetic # Mc MODI SIGN VISARGA +11640 ; Alphabetic # Mn MODI SIGN ARDHACANDRA +11644 ; Alphabetic # Lo MODI SIGN HUVA +11680..116AA ; Alphabetic # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA +116AB ; Alphabetic # Mn TAKRI SIGN ANUSVARA +116AC ; Alphabetic # Mc TAKRI SIGN VISARGA +116AD ; Alphabetic # Mn TAKRI VOWEL SIGN AA +116AE..116AF ; Alphabetic # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II +116B0..116B5 ; Alphabetic # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU +116B8 ; Alphabetic # Lo TAKRI LETTER ARCHAIC KHA +11700..1171A ; Alphabetic # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA +1171D ; Alphabetic # Mn AHOM CONSONANT SIGN MEDIAL LA +1171E ; Alphabetic # Mc AHOM CONSONANT SIGN MEDIAL RA +1171F ; Alphabetic # Mn AHOM CONSONANT SIGN MEDIAL LIGATING RA +11720..11721 ; Alphabetic # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA +11722..11725 ; Alphabetic # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU +11726 ; Alphabetic # Mc AHOM VOWEL SIGN E +11727..1172A ; Alphabetic # Mn [4] AHOM VOWEL SIGN AW..AHOM VOWEL SIGN AM +11740..11746 ; Alphabetic # Lo [7] AHOM LETTER CA..AHOM LETTER LLA +11800..1182B ; Alphabetic # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA +1182C..1182E ; Alphabetic # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II +1182F..11837 ; Alphabetic # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA +11838 ; Alphabetic # Mc DOGRA SIGN VISARGA +118A0..118DF ; Alphabetic # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO +118FF..11906 ; Alphabetic # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E +11909 ; Alphabetic # Lo DIVES AKURU LETTER O +1190C..11913 ; Alphabetic # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA +11915..11916 ; Alphabetic # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA +11918..1192F ; Alphabetic # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA +11930..11935 ; Alphabetic # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E +11937..11938 ; Alphabetic # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O +1193B..1193C ; Alphabetic # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU +1193F ; Alphabetic # Lo DIVES AKURU PREFIXED NASAL SIGN +11940 ; Alphabetic # Mc DIVES AKURU MEDIAL YA +11941 ; Alphabetic # Lo DIVES AKURU INITIAL RA +11942 ; Alphabetic # Mc DIVES AKURU MEDIAL RA +119A0..119A7 ; Alphabetic # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR +119AA..119D0 ; Alphabetic # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA +119D1..119D3 ; Alphabetic # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II +119D4..119D7 ; Alphabetic # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR +119DA..119DB ; Alphabetic # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI +119DC..119DF ; Alphabetic # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA +119E1 ; Alphabetic # Lo NANDINAGARI SIGN AVAGRAHA +119E3 ; Alphabetic # Lo NANDINAGARI HEADSTROKE +119E4 ; Alphabetic # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E +11A00 ; Alphabetic # Lo ZANABAZAR SQUARE LETTER A +11A01..11A0A ; Alphabetic # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK +11A0B..11A32 ; Alphabetic # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA +11A35..11A38 ; Alphabetic # Mn [4] ZANABAZAR SQUARE SIGN CANDRABINDU..ZANABAZAR SQUARE SIGN ANUSVARA +11A39 ; Alphabetic # Mc ZANABAZAR SQUARE SIGN VISARGA +11A3A ; Alphabetic # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA +11A3B..11A3E ; Alphabetic # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA +11A50 ; Alphabetic # Lo SOYOMBO LETTER A +11A51..11A56 ; Alphabetic # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE +11A57..11A58 ; Alphabetic # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU +11A59..11A5B ; Alphabetic # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK +11A5C..11A89 ; Alphabetic # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA +11A8A..11A96 ; Alphabetic # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA +11A97 ; Alphabetic # Mc SOYOMBO SIGN VISARGA +11A9D ; Alphabetic # Lo SOYOMBO MARK PLUTA +11AB0..11AF8 ; Alphabetic # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11B60 ; Alphabetic # Mn SHARADA VOWEL SIGN OE +11B61 ; Alphabetic # Mc SHARADA VOWEL SIGN OOE +11B62..11B64 ; Alphabetic # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B65 ; Alphabetic # Mc SHARADA VOWEL SIGN SHORT O +11B66 ; Alphabetic # Mn SHARADA VOWEL SIGN CANDRA E +11B67 ; Alphabetic # Mc SHARADA VOWEL SIGN CANDRA O +11BC0..11BE0 ; Alphabetic # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO +11C00..11C08 ; Alphabetic # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L +11C0A..11C2E ; Alphabetic # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA +11C2F ; Alphabetic # Mc BHAIKSUKI VOWEL SIGN AA +11C30..11C36 ; Alphabetic # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L +11C38..11C3D ; Alphabetic # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA +11C3E ; Alphabetic # Mc BHAIKSUKI SIGN VISARGA +11C40 ; Alphabetic # Lo BHAIKSUKI SIGN AVAGRAHA +11C72..11C8F ; Alphabetic # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A +11C92..11CA7 ; Alphabetic # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA +11CA9 ; Alphabetic # Mc MARCHEN SUBJOINED LETTER YA +11CAA..11CB0 ; Alphabetic # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA +11CB1 ; Alphabetic # Mc MARCHEN VOWEL SIGN I +11CB2..11CB3 ; Alphabetic # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E +11CB4 ; Alphabetic # Mc MARCHEN VOWEL SIGN O +11CB5..11CB6 ; Alphabetic # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU +11D00..11D06 ; Alphabetic # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E +11D08..11D09 ; Alphabetic # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O +11D0B..11D30 ; Alphabetic # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA +11D31..11D36 ; Alphabetic # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R +11D3A ; Alphabetic # Mn MASARAM GONDI VOWEL SIGN E +11D3C..11D3D ; Alphabetic # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O +11D3F..11D41 ; Alphabetic # Mn [3] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI SIGN VISARGA +11D43 ; Alphabetic # Mn MASARAM GONDI SIGN CANDRA +11D46 ; Alphabetic # Lo MASARAM GONDI REPHA +11D47 ; Alphabetic # Mn MASARAM GONDI RA-KARA +11D60..11D65 ; Alphabetic # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU +11D67..11D68 ; Alphabetic # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI +11D6A..11D89 ; Alphabetic # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA +11D8A..11D8E ; Alphabetic # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU +11D90..11D91 ; Alphabetic # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI +11D93..11D94 ; Alphabetic # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU +11D95 ; Alphabetic # Mn GUNJALA GONDI SIGN ANUSVARA +11D96 ; Alphabetic # Mc GUNJALA GONDI SIGN VISARGA +11D98 ; Alphabetic # Lo GUNJALA GONDI OM +11DB0..11DD8 ; Alphabetic # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; Alphabetic # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; Alphabetic # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA +11EE0..11EF2 ; Alphabetic # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA +11EF3..11EF4 ; Alphabetic # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U +11EF5..11EF6 ; Alphabetic # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O +11F00..11F01 ; Alphabetic # Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA +11F02 ; Alphabetic # Lo KAWI SIGN REPHA +11F03 ; Alphabetic # Mc KAWI SIGN VISARGA +11F04..11F10 ; Alphabetic # Lo [13] KAWI LETTER A..KAWI LETTER O +11F12..11F33 ; Alphabetic # Lo [34] KAWI LETTER KA..KAWI LETTER JNYA +11F34..11F35 ; Alphabetic # Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA +11F36..11F3A ; Alphabetic # Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R +11F3E..11F3F ; Alphabetic # Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI +11F40 ; Alphabetic # Mn KAWI VOWEL SIGN EU +11FB0 ; Alphabetic # Lo LISU LETTER YHA +12000..12399 ; Alphabetic # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U +12400..1246E ; Alphabetic # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM +12480..12543 ; Alphabetic # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; Alphabetic # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 +13000..1342F ; Alphabetic # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D +13441..13446 ; Alphabetic # Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN +13460..143FA ; Alphabetic # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA +14400..14646 ; Alphabetic # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 +16100..1611D ; Alphabetic # Lo [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA +1611E..16129 ; Alphabetic # Mn [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK +1612A..1612C ; Alphabetic # Mc [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA +1612D..1612E ; Alphabetic # Mn [2] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA CONSONANT SIGN MEDIAL RA +16800..16A38 ; Alphabetic # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ +16A40..16A5E ; Alphabetic # Lo [31] MRO LETTER TA..MRO LETTER TEK +16A70..16ABE ; Alphabetic # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AD0..16AED ; Alphabetic # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I +16B00..16B2F ; Alphabetic # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU +16B40..16B43 ; Alphabetic # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM +16B63..16B77 ; Alphabetic # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS +16B7D..16B8F ; Alphabetic # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ +16D40..16D42 ; Alphabetic # Lm [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA +16D43..16D6A ; Alphabetic # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU +16D6B..16D6C ; Alphabetic # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT +16E40..16E7F ; Alphabetic # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; Alphabetic # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; Alphabetic # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY +16F00..16F4A ; Alphabetic # Lo [75] MIAO LETTER PA..MIAO LETTER RTE +16F4F ; Alphabetic # Mn MIAO SIGN CONSONANT MODIFIER BAR +16F50 ; Alphabetic # Lo MIAO LETTER NASALIZATION +16F51..16F87 ; Alphabetic # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI +16F8F..16F92 ; Alphabetic # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW +16F93..16F9F ; Alphabetic # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 +16FE0..16FE1 ; Alphabetic # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK +16FE3 ; Alphabetic # Lm OLD CHINESE ITERATION MARK +16FF0..16FF1 ; Alphabetic # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY +16FF2..16FF3 ; Alphabetic # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; Alphabetic # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; Alphabetic # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; Alphabetic # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; Alphabetic # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 +1AFF0..1AFF3 ; Alphabetic # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; Alphabetic # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; Alphabetic # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B000..1B122 ; Alphabetic # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU +1B132 ; Alphabetic # Lo HIRAGANA LETTER SMALL KO +1B150..1B152 ; Alphabetic # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO +1B155 ; Alphabetic # Lo KATAKANA LETTER SMALL KO +1B164..1B167 ; Alphabetic # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N +1B170..1B2FB ; Alphabetic # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB +1BC00..1BC6A ; Alphabetic # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M +1BC70..1BC7C ; Alphabetic # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK +1BC80..1BC88 ; Alphabetic # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL +1BC90..1BC99 ; Alphabetic # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW +1BC9E ; Alphabetic # Mn DUPLOYAN DOUBLE MARK +1D400..1D454 ; Alphabetic # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G +1D456..1D49C ; Alphabetic # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A +1D49E..1D49F ; Alphabetic # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; Alphabetic # L& MATHEMATICAL SCRIPT CAPITAL G +1D4A5..1D4A6 ; Alphabetic # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K +1D4A9..1D4AC ; Alphabetic # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q +1D4AE..1D4B9 ; Alphabetic # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D +1D4BB ; Alphabetic # L& MATHEMATICAL SCRIPT SMALL F +1D4BD..1D4C3 ; Alphabetic # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N +1D4C5..1D505 ; Alphabetic # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B +1D507..1D50A ; Alphabetic # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G +1D50D..1D514 ; Alphabetic # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q +1D516..1D51C ; Alphabetic # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y +1D51E..1D539 ; Alphabetic # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B..1D53E ; Alphabetic # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540..1D544 ; Alphabetic # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; Alphabetic # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A..1D550 ; Alphabetic # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D552..1D6A5 ; Alphabetic # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J +1D6A8..1D6C0 ; Alphabetic # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA +1D6C2..1D6DA ; Alphabetic # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA +1D6DC..1D6FA ; Alphabetic # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA +1D6FC..1D714 ; Alphabetic # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA +1D716..1D734 ; Alphabetic # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D736..1D74E ; Alphabetic # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D750..1D76E ; Alphabetic # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D770..1D788 ; Alphabetic # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D78A..1D7A8 ; Alphabetic # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7AA..1D7C2 ; Alphabetic # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C4..1D7CB ; Alphabetic # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1DF00..1DF09 ; Alphabetic # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; Alphabetic # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; Alphabetic # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL +1DF25..1DF2A ; Alphabetic # L& [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK +1E000..1E006 ; Alphabetic # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE +1E008..1E018 ; Alphabetic # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU +1E01B..1E021 ; Alphabetic # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI +1E023..1E024 ; Alphabetic # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS +1E026..1E02A ; Alphabetic # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA +1E030..1E06D ; Alphabetic # Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE +1E08F ; Alphabetic # Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +1E100..1E12C ; Alphabetic # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W +1E137..1E13D ; Alphabetic # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER +1E14E ; Alphabetic # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E290..1E2AD ; Alphabetic # Lo [30] TOTO LETTER PA..TOTO LETTER A +1E2C0..1E2EB ; Alphabetic # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH +1E4D0..1E4EA ; Alphabetic # Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL +1E4EB ; Alphabetic # Lm NAG MUNDARI SIGN OJOD +1E5D0..1E5ED ; Alphabetic # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG +1E5F0 ; Alphabetic # Lo OL ONAL SIGN HODDOND +1E6C0..1E6DE ; Alphabetic # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; Alphabetic # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E3 ; Alphabetic # Mn TAI YO SIGN UE +1E6E4..1E6E5 ; Alphabetic # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E6 ; Alphabetic # Mn TAI YO SIGN AU +1E6E7..1E6ED ; Alphabetic # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6EE..1E6EF ; Alphabetic # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F0..1E6F4 ; Alphabetic # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6F5 ; Alphabetic # Mn TAI YO SIGN OM +1E6FE ; Alphabetic # Lo TAI YO SYMBOL MUEANG +1E6FF ; Alphabetic # Lm TAI YO XAM LAI +1E7E0..1E7E6 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; Alphabetic # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; Alphabetic # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE +1E800..1E8C4 ; Alphabetic # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON +1E900..1E943 ; Alphabetic # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA +1E947 ; Alphabetic # Mn ADLAM HAMZA +1E94B ; Alphabetic # Lm ADLAM NASALIZATION MARK +1EE00..1EE03 ; Alphabetic # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL +1EE05..1EE1F ; Alphabetic # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF +1EE21..1EE22 ; Alphabetic # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM +1EE24 ; Alphabetic # Lo ARABIC MATHEMATICAL INITIAL HEH +1EE27 ; Alphabetic # Lo ARABIC MATHEMATICAL INITIAL HAH +1EE29..1EE32 ; Alphabetic # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF +1EE34..1EE37 ; Alphabetic # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH +1EE39 ; Alphabetic # Lo ARABIC MATHEMATICAL INITIAL DAD +1EE3B ; Alphabetic # Lo ARABIC MATHEMATICAL INITIAL GHAIN +1EE42 ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED JEEM +1EE47 ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED HAH +1EE49 ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED YEH +1EE4B ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED LAM +1EE4D..1EE4F ; Alphabetic # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN +1EE51..1EE52 ; Alphabetic # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF +1EE54 ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED SHEEN +1EE57 ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED KHAH +1EE59 ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED DAD +1EE5B ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED GHAIN +1EE5D ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON +1EE5F ; Alphabetic # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF +1EE61..1EE62 ; Alphabetic # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM +1EE64 ; Alphabetic # Lo ARABIC MATHEMATICAL STRETCHED HEH +1EE67..1EE6A ; Alphabetic # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF +1EE6C..1EE72 ; Alphabetic # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF +1EE74..1EE77 ; Alphabetic # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH +1EE79..1EE7C ; Alphabetic # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH +1EE7E ; Alphabetic # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH +1EE80..1EE89 ; Alphabetic # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH +1EE8B..1EE9B ; Alphabetic # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN +1EEA1..1EEA3 ; Alphabetic # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL +1EEA5..1EEA9 ; Alphabetic # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH +1EEAB..1EEBB ; Alphabetic # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN +1F130..1F149 ; Alphabetic # So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z +1F150..1F169 ; Alphabetic # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z +1F170..1F189 ; Alphabetic # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z +20000..2A6DF ; Alphabetic # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B81D ; Alphabetic # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; Alphabetic # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD +2CEB0..2EBE0 ; Alphabetic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2EBF0..2EE5D ; Alphabetic # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D +2F800..2FA1D ; Alphabetic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D +30000..3134A ; Alphabetic # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A +31350..33479 ; Alphabetic # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 + +# Total code points: 147421 + +# ================================================ + +# Derived Property: Lowercase +# Generated from: Ll + Other_Lowercase + +0061..007A ; Lowercase # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z +00AA ; Lowercase # Lo FEMININE ORDINAL INDICATOR +00B5 ; Lowercase # L& MICRO SIGN +00BA ; Lowercase # Lo MASCULINE ORDINAL INDICATOR +00DF..00F6 ; Lowercase # L& [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS +00F8..00FF ; Lowercase # L& [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS +0101 ; Lowercase # L& LATIN SMALL LETTER A WITH MACRON +0103 ; Lowercase # L& LATIN SMALL LETTER A WITH BREVE +0105 ; Lowercase # L& LATIN SMALL LETTER A WITH OGONEK +0107 ; Lowercase # L& LATIN SMALL LETTER C WITH ACUTE +0109 ; Lowercase # L& LATIN SMALL LETTER C WITH CIRCUMFLEX +010B ; Lowercase # L& LATIN SMALL LETTER C WITH DOT ABOVE +010D ; Lowercase # L& LATIN SMALL LETTER C WITH CARON +010F ; Lowercase # L& LATIN SMALL LETTER D WITH CARON +0111 ; Lowercase # L& LATIN SMALL LETTER D WITH STROKE +0113 ; Lowercase # L& LATIN SMALL LETTER E WITH MACRON +0115 ; Lowercase # L& LATIN SMALL LETTER E WITH BREVE +0117 ; Lowercase # L& LATIN SMALL LETTER E WITH DOT ABOVE +0119 ; Lowercase # L& LATIN SMALL LETTER E WITH OGONEK +011B ; Lowercase # L& LATIN SMALL LETTER E WITH CARON +011D ; Lowercase # L& LATIN SMALL LETTER G WITH CIRCUMFLEX +011F ; Lowercase # L& LATIN SMALL LETTER G WITH BREVE +0121 ; Lowercase # L& LATIN SMALL LETTER G WITH DOT ABOVE +0123 ; Lowercase # L& LATIN SMALL LETTER G WITH CEDILLA +0125 ; Lowercase # L& LATIN SMALL LETTER H WITH CIRCUMFLEX +0127 ; Lowercase # L& LATIN SMALL LETTER H WITH STROKE +0129 ; Lowercase # L& LATIN SMALL LETTER I WITH TILDE +012B ; Lowercase # L& LATIN SMALL LETTER I WITH MACRON +012D ; Lowercase # L& LATIN SMALL LETTER I WITH BREVE +012F ; Lowercase # L& LATIN SMALL LETTER I WITH OGONEK +0131 ; Lowercase # L& LATIN SMALL LETTER DOTLESS I +0133 ; Lowercase # L& LATIN SMALL LIGATURE IJ +0135 ; Lowercase # L& LATIN SMALL LETTER J WITH CIRCUMFLEX +0137..0138 ; Lowercase # L& [2] LATIN SMALL LETTER K WITH CEDILLA..LATIN SMALL LETTER KRA +013A ; Lowercase # L& LATIN SMALL LETTER L WITH ACUTE +013C ; Lowercase # L& LATIN SMALL LETTER L WITH CEDILLA +013E ; Lowercase # L& LATIN SMALL LETTER L WITH CARON +0140 ; Lowercase # L& LATIN SMALL LETTER L WITH MIDDLE DOT +0142 ; Lowercase # L& LATIN SMALL LETTER L WITH STROKE +0144 ; Lowercase # L& LATIN SMALL LETTER N WITH ACUTE +0146 ; Lowercase # L& LATIN SMALL LETTER N WITH CEDILLA +0148..0149 ; Lowercase # L& [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014B ; Lowercase # L& LATIN SMALL LETTER ENG +014D ; Lowercase # L& LATIN SMALL LETTER O WITH MACRON +014F ; Lowercase # L& LATIN SMALL LETTER O WITH BREVE +0151 ; Lowercase # L& LATIN SMALL LETTER O WITH DOUBLE ACUTE +0153 ; Lowercase # L& LATIN SMALL LIGATURE OE +0155 ; Lowercase # L& LATIN SMALL LETTER R WITH ACUTE +0157 ; Lowercase # L& LATIN SMALL LETTER R WITH CEDILLA +0159 ; Lowercase # L& LATIN SMALL LETTER R WITH CARON +015B ; Lowercase # L& LATIN SMALL LETTER S WITH ACUTE +015D ; Lowercase # L& LATIN SMALL LETTER S WITH CIRCUMFLEX +015F ; Lowercase # L& LATIN SMALL LETTER S WITH CEDILLA +0161 ; Lowercase # L& LATIN SMALL LETTER S WITH CARON +0163 ; Lowercase # L& LATIN SMALL LETTER T WITH CEDILLA +0165 ; Lowercase # L& LATIN SMALL LETTER T WITH CARON +0167 ; Lowercase # L& LATIN SMALL LETTER T WITH STROKE +0169 ; Lowercase # L& LATIN SMALL LETTER U WITH TILDE +016B ; Lowercase # L& LATIN SMALL LETTER U WITH MACRON +016D ; Lowercase # L& LATIN SMALL LETTER U WITH BREVE +016F ; Lowercase # L& LATIN SMALL LETTER U WITH RING ABOVE +0171 ; Lowercase # L& LATIN SMALL LETTER U WITH DOUBLE ACUTE +0173 ; Lowercase # L& LATIN SMALL LETTER U WITH OGONEK +0175 ; Lowercase # L& LATIN SMALL LETTER W WITH CIRCUMFLEX +0177 ; Lowercase # L& LATIN SMALL LETTER Y WITH CIRCUMFLEX +017A ; Lowercase # L& LATIN SMALL LETTER Z WITH ACUTE +017C ; Lowercase # L& LATIN SMALL LETTER Z WITH DOT ABOVE +017E..0180 ; Lowercase # L& [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE +0183 ; Lowercase # L& LATIN SMALL LETTER B WITH TOPBAR +0185 ; Lowercase # L& LATIN SMALL LETTER TONE SIX +0188 ; Lowercase # L& LATIN SMALL LETTER C WITH HOOK +018C..018D ; Lowercase # L& [2] LATIN SMALL LETTER D WITH TOPBAR..LATIN SMALL LETTER TURNED DELTA +0192 ; Lowercase # L& LATIN SMALL LETTER F WITH HOOK +0195 ; Lowercase # L& LATIN SMALL LETTER HV +0199..019B ; Lowercase # L& [3] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE +019E ; Lowercase # L& LATIN SMALL LETTER N WITH LONG RIGHT LEG +01A1 ; Lowercase # L& LATIN SMALL LETTER O WITH HORN +01A3 ; Lowercase # L& LATIN SMALL LETTER OI +01A5 ; Lowercase # L& LATIN SMALL LETTER P WITH HOOK +01A8 ; Lowercase # L& LATIN SMALL LETTER TONE TWO +01AA..01AB ; Lowercase # L& [2] LATIN LETTER REVERSED ESH LOOP..LATIN SMALL LETTER T WITH PALATAL HOOK +01AD ; Lowercase # L& LATIN SMALL LETTER T WITH HOOK +01B0 ; Lowercase # L& LATIN SMALL LETTER U WITH HORN +01B4 ; Lowercase # L& LATIN SMALL LETTER Y WITH HOOK +01B6 ; Lowercase # L& LATIN SMALL LETTER Z WITH STROKE +01B9..01BA ; Lowercase # L& [2] LATIN SMALL LETTER EZH REVERSED..LATIN SMALL LETTER EZH WITH TAIL +01BD..01BF ; Lowercase # L& [3] LATIN SMALL LETTER TONE FIVE..LATIN LETTER WYNN +01C6 ; Lowercase # L& LATIN SMALL LETTER DZ WITH CARON +01C9 ; Lowercase # L& LATIN SMALL LETTER LJ +01CC ; Lowercase # L& LATIN SMALL LETTER NJ +01CE ; Lowercase # L& LATIN SMALL LETTER A WITH CARON +01D0 ; Lowercase # L& LATIN SMALL LETTER I WITH CARON +01D2 ; Lowercase # L& LATIN SMALL LETTER O WITH CARON +01D4 ; Lowercase # L& LATIN SMALL LETTER U WITH CARON +01D6 ; Lowercase # L& LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D8 ; Lowercase # L& LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01DA ; Lowercase # L& LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01DC..01DD ; Lowercase # L& [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E +01DF ; Lowercase # L& LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01E1 ; Lowercase # L& LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON +01E3 ; Lowercase # L& LATIN SMALL LETTER AE WITH MACRON +01E5 ; Lowercase # L& LATIN SMALL LETTER G WITH STROKE +01E7 ; Lowercase # L& LATIN SMALL LETTER G WITH CARON +01E9 ; Lowercase # L& LATIN SMALL LETTER K WITH CARON +01EB ; Lowercase # L& LATIN SMALL LETTER O WITH OGONEK +01ED ; Lowercase # L& LATIN SMALL LETTER O WITH OGONEK AND MACRON +01EF..01F0 ; Lowercase # L& [2] LATIN SMALL LETTER EZH WITH CARON..LATIN SMALL LETTER J WITH CARON +01F3 ; Lowercase # L& LATIN SMALL LETTER DZ +01F5 ; Lowercase # L& LATIN SMALL LETTER G WITH ACUTE +01F9 ; Lowercase # L& LATIN SMALL LETTER N WITH GRAVE +01FB ; Lowercase # L& LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FD ; Lowercase # L& LATIN SMALL LETTER AE WITH ACUTE +01FF ; Lowercase # L& LATIN SMALL LETTER O WITH STROKE AND ACUTE +0201 ; Lowercase # L& LATIN SMALL LETTER A WITH DOUBLE GRAVE +0203 ; Lowercase # L& LATIN SMALL LETTER A WITH INVERTED BREVE +0205 ; Lowercase # L& LATIN SMALL LETTER E WITH DOUBLE GRAVE +0207 ; Lowercase # L& LATIN SMALL LETTER E WITH INVERTED BREVE +0209 ; Lowercase # L& LATIN SMALL LETTER I WITH DOUBLE GRAVE +020B ; Lowercase # L& LATIN SMALL LETTER I WITH INVERTED BREVE +020D ; Lowercase # L& LATIN SMALL LETTER O WITH DOUBLE GRAVE +020F ; Lowercase # L& LATIN SMALL LETTER O WITH INVERTED BREVE +0211 ; Lowercase # L& LATIN SMALL LETTER R WITH DOUBLE GRAVE +0213 ; Lowercase # L& LATIN SMALL LETTER R WITH INVERTED BREVE +0215 ; Lowercase # L& LATIN SMALL LETTER U WITH DOUBLE GRAVE +0217 ; Lowercase # L& LATIN SMALL LETTER U WITH INVERTED BREVE +0219 ; Lowercase # L& LATIN SMALL LETTER S WITH COMMA BELOW +021B ; Lowercase # L& LATIN SMALL LETTER T WITH COMMA BELOW +021D ; Lowercase # L& LATIN SMALL LETTER YOGH +021F ; Lowercase # L& LATIN SMALL LETTER H WITH CARON +0221 ; Lowercase # L& LATIN SMALL LETTER D WITH CURL +0223 ; Lowercase # L& LATIN SMALL LETTER OU +0225 ; Lowercase # L& LATIN SMALL LETTER Z WITH HOOK +0227 ; Lowercase # L& LATIN SMALL LETTER A WITH DOT ABOVE +0229 ; Lowercase # L& LATIN SMALL LETTER E WITH CEDILLA +022B ; Lowercase # L& LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022D ; Lowercase # L& LATIN SMALL LETTER O WITH TILDE AND MACRON +022F ; Lowercase # L& LATIN SMALL LETTER O WITH DOT ABOVE +0231 ; Lowercase # L& LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON +0233..0239 ; Lowercase # L& [7] LATIN SMALL LETTER Y WITH MACRON..LATIN SMALL LETTER QP DIGRAPH +023C ; Lowercase # L& LATIN SMALL LETTER C WITH STROKE +023F..0240 ; Lowercase # L& [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL +0242 ; Lowercase # L& LATIN SMALL LETTER GLOTTAL STOP +0247 ; Lowercase # L& LATIN SMALL LETTER E WITH STROKE +0249 ; Lowercase # L& LATIN SMALL LETTER J WITH STROKE +024B ; Lowercase # L& LATIN SMALL LETTER Q WITH HOOK TAIL +024D ; Lowercase # L& LATIN SMALL LETTER R WITH STROKE +024F..0293 ; Lowercase # L& [69] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER EZH WITH CURL +0296..02AF ; Lowercase # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +02B0..02B8 ; Lowercase # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y +02C0..02C1 ; Lowercase # Lm [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP +02E0..02E4 ; Lowercase # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +0345 ; Lowercase # Mn COMBINING GREEK YPOGEGRAMMENI +0371 ; Lowercase # L& GREEK SMALL LETTER HETA +0373 ; Lowercase # L& GREEK SMALL LETTER ARCHAIC SAMPI +0377 ; Lowercase # L& GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +037A ; Lowercase # Lm GREEK YPOGEGRAMMENI +037B..037D ; Lowercase # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +0390 ; Lowercase # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +03AC..03CE ; Lowercase # L& [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS +03D0..03D1 ; Lowercase # L& [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL +03D5..03D7 ; Lowercase # L& [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL +03D9 ; Lowercase # L& GREEK SMALL LETTER ARCHAIC KOPPA +03DB ; Lowercase # L& GREEK SMALL LETTER STIGMA +03DD ; Lowercase # L& GREEK SMALL LETTER DIGAMMA +03DF ; Lowercase # L& GREEK SMALL LETTER KOPPA +03E1 ; Lowercase # L& GREEK SMALL LETTER SAMPI +03E3 ; Lowercase # L& COPTIC SMALL LETTER SHEI +03E5 ; Lowercase # L& COPTIC SMALL LETTER FEI +03E7 ; Lowercase # L& COPTIC SMALL LETTER KHEI +03E9 ; Lowercase # L& COPTIC SMALL LETTER HORI +03EB ; Lowercase # L& COPTIC SMALL LETTER GANGIA +03ED ; Lowercase # L& COPTIC SMALL LETTER SHIMA +03EF..03F3 ; Lowercase # L& [5] COPTIC SMALL LETTER DEI..GREEK LETTER YOT +03F5 ; Lowercase # L& GREEK LUNATE EPSILON SYMBOL +03F8 ; Lowercase # L& GREEK SMALL LETTER SHO +03FB..03FC ; Lowercase # L& [2] GREEK SMALL LETTER SAN..GREEK RHO WITH STROKE SYMBOL +0430..045F ; Lowercase # L& [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE +0461 ; Lowercase # L& CYRILLIC SMALL LETTER OMEGA +0463 ; Lowercase # L& CYRILLIC SMALL LETTER YAT +0465 ; Lowercase # L& CYRILLIC SMALL LETTER IOTIFIED E +0467 ; Lowercase # L& CYRILLIC SMALL LETTER LITTLE YUS +0469 ; Lowercase # L& CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS +046B ; Lowercase # L& CYRILLIC SMALL LETTER BIG YUS +046D ; Lowercase # L& CYRILLIC SMALL LETTER IOTIFIED BIG YUS +046F ; Lowercase # L& CYRILLIC SMALL LETTER KSI +0471 ; Lowercase # L& CYRILLIC SMALL LETTER PSI +0473 ; Lowercase # L& CYRILLIC SMALL LETTER FITA +0475 ; Lowercase # L& CYRILLIC SMALL LETTER IZHITSA +0477 ; Lowercase # L& CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0479 ; Lowercase # L& CYRILLIC SMALL LETTER UK +047B ; Lowercase # L& CYRILLIC SMALL LETTER ROUND OMEGA +047D ; Lowercase # L& CYRILLIC SMALL LETTER OMEGA WITH TITLO +047F ; Lowercase # L& CYRILLIC SMALL LETTER OT +0481 ; Lowercase # L& CYRILLIC SMALL LETTER KOPPA +048B ; Lowercase # L& CYRILLIC SMALL LETTER SHORT I WITH TAIL +048D ; Lowercase # L& CYRILLIC SMALL LETTER SEMISOFT SIGN +048F ; Lowercase # L& CYRILLIC SMALL LETTER ER WITH TICK +0491 ; Lowercase # L& CYRILLIC SMALL LETTER GHE WITH UPTURN +0493 ; Lowercase # L& CYRILLIC SMALL LETTER GHE WITH STROKE +0495 ; Lowercase # L& CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK +0497 ; Lowercase # L& CYRILLIC SMALL LETTER ZHE WITH DESCENDER +0499 ; Lowercase # L& CYRILLIC SMALL LETTER ZE WITH DESCENDER +049B ; Lowercase # L& CYRILLIC SMALL LETTER KA WITH DESCENDER +049D ; Lowercase # L& CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE +049F ; Lowercase # L& CYRILLIC SMALL LETTER KA WITH STROKE +04A1 ; Lowercase # L& CYRILLIC SMALL LETTER BASHKIR KA +04A3 ; Lowercase # L& CYRILLIC SMALL LETTER EN WITH DESCENDER +04A5 ; Lowercase # L& CYRILLIC SMALL LIGATURE EN GHE +04A7 ; Lowercase # L& CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK +04A9 ; Lowercase # L& CYRILLIC SMALL LETTER ABKHASIAN HA +04AB ; Lowercase # L& CYRILLIC SMALL LETTER ES WITH DESCENDER +04AD ; Lowercase # L& CYRILLIC SMALL LETTER TE WITH DESCENDER +04AF ; Lowercase # L& CYRILLIC SMALL LETTER STRAIGHT U +04B1 ; Lowercase # L& CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE +04B3 ; Lowercase # L& CYRILLIC SMALL LETTER HA WITH DESCENDER +04B5 ; Lowercase # L& CYRILLIC SMALL LIGATURE TE TSE +04B7 ; Lowercase # L& CYRILLIC SMALL LETTER CHE WITH DESCENDER +04B9 ; Lowercase # L& CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE +04BB ; Lowercase # L& CYRILLIC SMALL LETTER SHHA +04BD ; Lowercase # L& CYRILLIC SMALL LETTER ABKHASIAN CHE +04BF ; Lowercase # L& CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER +04C2 ; Lowercase # L& CYRILLIC SMALL LETTER ZHE WITH BREVE +04C4 ; Lowercase # L& CYRILLIC SMALL LETTER KA WITH HOOK +04C6 ; Lowercase # L& CYRILLIC SMALL LETTER EL WITH TAIL +04C8 ; Lowercase # L& CYRILLIC SMALL LETTER EN WITH HOOK +04CA ; Lowercase # L& CYRILLIC SMALL LETTER EN WITH TAIL +04CC ; Lowercase # L& CYRILLIC SMALL LETTER KHAKASSIAN CHE +04CE..04CF ; Lowercase # L& [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA +04D1 ; Lowercase # L& CYRILLIC SMALL LETTER A WITH BREVE +04D3 ; Lowercase # L& CYRILLIC SMALL LETTER A WITH DIAERESIS +04D5 ; Lowercase # L& CYRILLIC SMALL LIGATURE A IE +04D7 ; Lowercase # L& CYRILLIC SMALL LETTER IE WITH BREVE +04D9 ; Lowercase # L& CYRILLIC SMALL LETTER SCHWA +04DB ; Lowercase # L& CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS +04DD ; Lowercase # L& CYRILLIC SMALL LETTER ZHE WITH DIAERESIS +04DF ; Lowercase # L& CYRILLIC SMALL LETTER ZE WITH DIAERESIS +04E1 ; Lowercase # L& CYRILLIC SMALL LETTER ABKHASIAN DZE +04E3 ; Lowercase # L& CYRILLIC SMALL LETTER I WITH MACRON +04E5 ; Lowercase # L& CYRILLIC SMALL LETTER I WITH DIAERESIS +04E7 ; Lowercase # L& CYRILLIC SMALL LETTER O WITH DIAERESIS +04E9 ; Lowercase # L& CYRILLIC SMALL LETTER BARRED O +04EB ; Lowercase # L& CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS +04ED ; Lowercase # L& CYRILLIC SMALL LETTER E WITH DIAERESIS +04EF ; Lowercase # L& CYRILLIC SMALL LETTER U WITH MACRON +04F1 ; Lowercase # L& CYRILLIC SMALL LETTER U WITH DIAERESIS +04F3 ; Lowercase # L& CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE +04F5 ; Lowercase # L& CYRILLIC SMALL LETTER CHE WITH DIAERESIS +04F7 ; Lowercase # L& CYRILLIC SMALL LETTER GHE WITH DESCENDER +04F9 ; Lowercase # L& CYRILLIC SMALL LETTER YERU WITH DIAERESIS +04FB ; Lowercase # L& CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK +04FD ; Lowercase # L& CYRILLIC SMALL LETTER HA WITH HOOK +04FF ; Lowercase # L& CYRILLIC SMALL LETTER HA WITH STROKE +0501 ; Lowercase # L& CYRILLIC SMALL LETTER KOMI DE +0503 ; Lowercase # L& CYRILLIC SMALL LETTER KOMI DJE +0505 ; Lowercase # L& CYRILLIC SMALL LETTER KOMI ZJE +0507 ; Lowercase # L& CYRILLIC SMALL LETTER KOMI DZJE +0509 ; Lowercase # L& CYRILLIC SMALL LETTER KOMI LJE +050B ; Lowercase # L& CYRILLIC SMALL LETTER KOMI NJE +050D ; Lowercase # L& CYRILLIC SMALL LETTER KOMI SJE +050F ; Lowercase # L& CYRILLIC SMALL LETTER KOMI TJE +0511 ; Lowercase # L& CYRILLIC SMALL LETTER REVERSED ZE +0513 ; Lowercase # L& CYRILLIC SMALL LETTER EL WITH HOOK +0515 ; Lowercase # L& CYRILLIC SMALL LETTER LHA +0517 ; Lowercase # L& CYRILLIC SMALL LETTER RHA +0519 ; Lowercase # L& CYRILLIC SMALL LETTER YAE +051B ; Lowercase # L& CYRILLIC SMALL LETTER QA +051D ; Lowercase # L& CYRILLIC SMALL LETTER WE +051F ; Lowercase # L& CYRILLIC SMALL LETTER ALEUT KA +0521 ; Lowercase # L& CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK +0523 ; Lowercase # L& CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK +0525 ; Lowercase # L& CYRILLIC SMALL LETTER PE WITH DESCENDER +0527 ; Lowercase # L& CYRILLIC SMALL LETTER SHHA WITH DESCENDER +0529 ; Lowercase # L& CYRILLIC SMALL LETTER EN WITH LEFT HOOK +052B ; Lowercase # L& CYRILLIC SMALL LETTER DZZHE +052D ; Lowercase # L& CYRILLIC SMALL LETTER DCHE +052F ; Lowercase # L& CYRILLIC SMALL LETTER EL WITH DESCENDER +0560..0588 ; Lowercase # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE +10D0..10FA ; Lowercase # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN +10FC ; Lowercase # Lm MODIFIER LETTER GEORGIAN NAR +10FD..10FF ; Lowercase # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN +13F8..13FD ; Lowercase # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV +1C80..1C88 ; Lowercase # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C8A ; Lowercase # L& CYRILLIC SMALL LETTER TJE +1D00..1D2B ; Lowercase # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL +1D2C..1D6A ; Lowercase # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI +1D6B..1D77 ; Lowercase # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G +1D78 ; Lowercase # Lm MODIFIER LETTER CYRILLIC EN +1D79..1D9A ; Lowercase # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK +1D9B..1DBF ; Lowercase # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA +1E01 ; Lowercase # L& LATIN SMALL LETTER A WITH RING BELOW +1E03 ; Lowercase # L& LATIN SMALL LETTER B WITH DOT ABOVE +1E05 ; Lowercase # L& LATIN SMALL LETTER B WITH DOT BELOW +1E07 ; Lowercase # L& LATIN SMALL LETTER B WITH LINE BELOW +1E09 ; Lowercase # L& LATIN SMALL LETTER C WITH CEDILLA AND ACUTE +1E0B ; Lowercase # L& LATIN SMALL LETTER D WITH DOT ABOVE +1E0D ; Lowercase # L& LATIN SMALL LETTER D WITH DOT BELOW +1E0F ; Lowercase # L& LATIN SMALL LETTER D WITH LINE BELOW +1E11 ; Lowercase # L& LATIN SMALL LETTER D WITH CEDILLA +1E13 ; Lowercase # L& LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW +1E15 ; Lowercase # L& LATIN SMALL LETTER E WITH MACRON AND GRAVE +1E17 ; Lowercase # L& LATIN SMALL LETTER E WITH MACRON AND ACUTE +1E19 ; Lowercase # L& LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW +1E1B ; Lowercase # L& LATIN SMALL LETTER E WITH TILDE BELOW +1E1D ; Lowercase # L& LATIN SMALL LETTER E WITH CEDILLA AND BREVE +1E1F ; Lowercase # L& LATIN SMALL LETTER F WITH DOT ABOVE +1E21 ; Lowercase # L& LATIN SMALL LETTER G WITH MACRON +1E23 ; Lowercase # L& LATIN SMALL LETTER H WITH DOT ABOVE +1E25 ; Lowercase # L& LATIN SMALL LETTER H WITH DOT BELOW +1E27 ; Lowercase # L& LATIN SMALL LETTER H WITH DIAERESIS +1E29 ; Lowercase # L& LATIN SMALL LETTER H WITH CEDILLA +1E2B ; Lowercase # L& LATIN SMALL LETTER H WITH BREVE BELOW +1E2D ; Lowercase # L& LATIN SMALL LETTER I WITH TILDE BELOW +1E2F ; Lowercase # L& LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE +1E31 ; Lowercase # L& LATIN SMALL LETTER K WITH ACUTE +1E33 ; Lowercase # L& LATIN SMALL LETTER K WITH DOT BELOW +1E35 ; Lowercase # L& LATIN SMALL LETTER K WITH LINE BELOW +1E37 ; Lowercase # L& LATIN SMALL LETTER L WITH DOT BELOW +1E39 ; Lowercase # L& LATIN SMALL LETTER L WITH DOT BELOW AND MACRON +1E3B ; Lowercase # L& LATIN SMALL LETTER L WITH LINE BELOW +1E3D ; Lowercase # L& LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW +1E3F ; Lowercase # L& LATIN SMALL LETTER M WITH ACUTE +1E41 ; Lowercase # L& LATIN SMALL LETTER M WITH DOT ABOVE +1E43 ; Lowercase # L& LATIN SMALL LETTER M WITH DOT BELOW +1E45 ; Lowercase # L& LATIN SMALL LETTER N WITH DOT ABOVE +1E47 ; Lowercase # L& LATIN SMALL LETTER N WITH DOT BELOW +1E49 ; Lowercase # L& LATIN SMALL LETTER N WITH LINE BELOW +1E4B ; Lowercase # L& LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW +1E4D ; Lowercase # L& LATIN SMALL LETTER O WITH TILDE AND ACUTE +1E4F ; Lowercase # L& LATIN SMALL LETTER O WITH TILDE AND DIAERESIS +1E51 ; Lowercase # L& LATIN SMALL LETTER O WITH MACRON AND GRAVE +1E53 ; Lowercase # L& LATIN SMALL LETTER O WITH MACRON AND ACUTE +1E55 ; Lowercase # L& LATIN SMALL LETTER P WITH ACUTE +1E57 ; Lowercase # L& LATIN SMALL LETTER P WITH DOT ABOVE +1E59 ; Lowercase # L& LATIN SMALL LETTER R WITH DOT ABOVE +1E5B ; Lowercase # L& LATIN SMALL LETTER R WITH DOT BELOW +1E5D ; Lowercase # L& LATIN SMALL LETTER R WITH DOT BELOW AND MACRON +1E5F ; Lowercase # L& LATIN SMALL LETTER R WITH LINE BELOW +1E61 ; Lowercase # L& LATIN SMALL LETTER S WITH DOT ABOVE +1E63 ; Lowercase # L& LATIN SMALL LETTER S WITH DOT BELOW +1E65 ; Lowercase # L& LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE +1E67 ; Lowercase # L& LATIN SMALL LETTER S WITH CARON AND DOT ABOVE +1E69 ; Lowercase # L& LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE +1E6B ; Lowercase # L& LATIN SMALL LETTER T WITH DOT ABOVE +1E6D ; Lowercase # L& LATIN SMALL LETTER T WITH DOT BELOW +1E6F ; Lowercase # L& LATIN SMALL LETTER T WITH LINE BELOW +1E71 ; Lowercase # L& LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW +1E73 ; Lowercase # L& LATIN SMALL LETTER U WITH DIAERESIS BELOW +1E75 ; Lowercase # L& LATIN SMALL LETTER U WITH TILDE BELOW +1E77 ; Lowercase # L& LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW +1E79 ; Lowercase # L& LATIN SMALL LETTER U WITH TILDE AND ACUTE +1E7B ; Lowercase # L& LATIN SMALL LETTER U WITH MACRON AND DIAERESIS +1E7D ; Lowercase # L& LATIN SMALL LETTER V WITH TILDE +1E7F ; Lowercase # L& LATIN SMALL LETTER V WITH DOT BELOW +1E81 ; Lowercase # L& LATIN SMALL LETTER W WITH GRAVE +1E83 ; Lowercase # L& LATIN SMALL LETTER W WITH ACUTE +1E85 ; Lowercase # L& LATIN SMALL LETTER W WITH DIAERESIS +1E87 ; Lowercase # L& LATIN SMALL LETTER W WITH DOT ABOVE +1E89 ; Lowercase # L& LATIN SMALL LETTER W WITH DOT BELOW +1E8B ; Lowercase # L& LATIN SMALL LETTER X WITH DOT ABOVE +1E8D ; Lowercase # L& LATIN SMALL LETTER X WITH DIAERESIS +1E8F ; Lowercase # L& LATIN SMALL LETTER Y WITH DOT ABOVE +1E91 ; Lowercase # L& LATIN SMALL LETTER Z WITH CIRCUMFLEX +1E93 ; Lowercase # L& LATIN SMALL LETTER Z WITH DOT BELOW +1E95..1E9D ; Lowercase # L& [9] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH HIGH STROKE +1E9F ; Lowercase # L& LATIN SMALL LETTER DELTA +1EA1 ; Lowercase # L& LATIN SMALL LETTER A WITH DOT BELOW +1EA3 ; Lowercase # L& LATIN SMALL LETTER A WITH HOOK ABOVE +1EA5 ; Lowercase # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA7 ; Lowercase # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA9 ; Lowercase # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAB ; Lowercase # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE +1EAD ; Lowercase # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAF ; Lowercase # L& LATIN SMALL LETTER A WITH BREVE AND ACUTE +1EB1 ; Lowercase # L& LATIN SMALL LETTER A WITH BREVE AND GRAVE +1EB3 ; Lowercase # L& LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE +1EB5 ; Lowercase # L& LATIN SMALL LETTER A WITH BREVE AND TILDE +1EB7 ; Lowercase # L& LATIN SMALL LETTER A WITH BREVE AND DOT BELOW +1EB9 ; Lowercase # L& LATIN SMALL LETTER E WITH DOT BELOW +1EBB ; Lowercase # L& LATIN SMALL LETTER E WITH HOOK ABOVE +1EBD ; Lowercase # L& LATIN SMALL LETTER E WITH TILDE +1EBF ; Lowercase # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC1 ; Lowercase # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC3 ; Lowercase # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC5 ; Lowercase # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +1EC7 ; Lowercase # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC9 ; Lowercase # L& LATIN SMALL LETTER I WITH HOOK ABOVE +1ECB ; Lowercase # L& LATIN SMALL LETTER I WITH DOT BELOW +1ECD ; Lowercase # L& LATIN SMALL LETTER O WITH DOT BELOW +1ECF ; Lowercase # L& LATIN SMALL LETTER O WITH HOOK ABOVE +1ED1 ; Lowercase # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED3 ; Lowercase # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED5 ; Lowercase # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED7 ; Lowercase # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE +1ED9 ; Lowercase # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EDB ; Lowercase # L& LATIN SMALL LETTER O WITH HORN AND ACUTE +1EDD ; Lowercase # L& LATIN SMALL LETTER O WITH HORN AND GRAVE +1EDF ; Lowercase # L& LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE +1EE1 ; Lowercase # L& LATIN SMALL LETTER O WITH HORN AND TILDE +1EE3 ; Lowercase # L& LATIN SMALL LETTER O WITH HORN AND DOT BELOW +1EE5 ; Lowercase # L& LATIN SMALL LETTER U WITH DOT BELOW +1EE7 ; Lowercase # L& LATIN SMALL LETTER U WITH HOOK ABOVE +1EE9 ; Lowercase # L& LATIN SMALL LETTER U WITH HORN AND ACUTE +1EEB ; Lowercase # L& LATIN SMALL LETTER U WITH HORN AND GRAVE +1EED ; Lowercase # L& LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE +1EEF ; Lowercase # L& LATIN SMALL LETTER U WITH HORN AND TILDE +1EF1 ; Lowercase # L& LATIN SMALL LETTER U WITH HORN AND DOT BELOW +1EF3 ; Lowercase # L& LATIN SMALL LETTER Y WITH GRAVE +1EF5 ; Lowercase # L& LATIN SMALL LETTER Y WITH DOT BELOW +1EF7 ; Lowercase # L& LATIN SMALL LETTER Y WITH HOOK ABOVE +1EF9 ; Lowercase # L& LATIN SMALL LETTER Y WITH TILDE +1EFB ; Lowercase # L& LATIN SMALL LETTER MIDDLE-WELSH LL +1EFD ; Lowercase # L& LATIN SMALL LETTER MIDDLE-WELSH V +1EFF..1F07 ; Lowercase # L& [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F10..1F15 ; Lowercase # L& [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F27 ; Lowercase # L& [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI +1F30..1F37 ; Lowercase # L& [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI +1F40..1F45 ; Lowercase # L& [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; Lowercase # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F60..1F67 ; Lowercase # L& [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F70..1F7D ; Lowercase # L& [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1F87 ; Lowercase # L& [8] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F90..1F97 ; Lowercase # L& [8] GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1FA0..1FA7 ; Lowercase # L& [8] GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1FB0..1FB4 ; Lowercase # L& [5] GREEK SMALL LETTER ALPHA WITH VRACHY..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FB7 ; Lowercase # L& [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI +1FBE ; Lowercase # L& GREEK PROSGEGRAMMENI +1FC2..1FC4 ; Lowercase # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FC7 ; Lowercase # L& [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI +1FD0..1FD3 ; Lowercase # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FD7 ; Lowercase # L& [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI +1FE0..1FE7 ; Lowercase # L& [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI +1FF2..1FF4 ; Lowercase # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FF7 ; Lowercase # L& [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI +2071 ; Lowercase # Lm SUPERSCRIPT LATIN SMALL LETTER I +207F ; Lowercase # Lm SUPERSCRIPT LATIN SMALL LETTER N +2090..209C ; Lowercase # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T +210A ; Lowercase # L& SCRIPT SMALL G +210E..210F ; Lowercase # L& [2] PLANCK CONSTANT..PLANCK CONSTANT OVER TWO PI +2113 ; Lowercase # L& SCRIPT SMALL L +212F ; Lowercase # L& SCRIPT SMALL E +2134 ; Lowercase # L& SCRIPT SMALL O +2139 ; Lowercase # L& INFORMATION SOURCE +213C..213D ; Lowercase # L& [2] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK SMALL GAMMA +2146..2149 ; Lowercase # L& [4] DOUBLE-STRUCK ITALIC SMALL D..DOUBLE-STRUCK ITALIC SMALL J +214E ; Lowercase # L& TURNED SMALL F +2170..217F ; Lowercase # Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND +2184 ; Lowercase # L& LATIN SMALL LETTER REVERSED C +24D0..24E9 ; Lowercase # So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z +2C30..2C5F ; Lowercase # L& [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI +2C61 ; Lowercase # L& LATIN SMALL LETTER L WITH DOUBLE BAR +2C65..2C66 ; Lowercase # L& [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE +2C68 ; Lowercase # L& LATIN SMALL LETTER H WITH DESCENDER +2C6A ; Lowercase # L& LATIN SMALL LETTER K WITH DESCENDER +2C6C ; Lowercase # L& LATIN SMALL LETTER Z WITH DESCENDER +2C71 ; Lowercase # L& LATIN SMALL LETTER V WITH RIGHT HOOK +2C73..2C74 ; Lowercase # L& [2] LATIN SMALL LETTER W WITH HOOK..LATIN SMALL LETTER V WITH CURL +2C76..2C7B ; Lowercase # L& [6] LATIN SMALL LETTER HALF H..LATIN LETTER SMALL CAPITAL TURNED E +2C7C..2C7D ; Lowercase # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V +2C81 ; Lowercase # L& COPTIC SMALL LETTER ALFA +2C83 ; Lowercase # L& COPTIC SMALL LETTER VIDA +2C85 ; Lowercase # L& COPTIC SMALL LETTER GAMMA +2C87 ; Lowercase # L& COPTIC SMALL LETTER DALDA +2C89 ; Lowercase # L& COPTIC SMALL LETTER EIE +2C8B ; Lowercase # L& COPTIC SMALL LETTER SOU +2C8D ; Lowercase # L& COPTIC SMALL LETTER ZATA +2C8F ; Lowercase # L& COPTIC SMALL LETTER HATE +2C91 ; Lowercase # L& COPTIC SMALL LETTER THETHE +2C93 ; Lowercase # L& COPTIC SMALL LETTER IAUDA +2C95 ; Lowercase # L& COPTIC SMALL LETTER KAPA +2C97 ; Lowercase # L& COPTIC SMALL LETTER LAULA +2C99 ; Lowercase # L& COPTIC SMALL LETTER MI +2C9B ; Lowercase # L& COPTIC SMALL LETTER NI +2C9D ; Lowercase # L& COPTIC SMALL LETTER KSI +2C9F ; Lowercase # L& COPTIC SMALL LETTER O +2CA1 ; Lowercase # L& COPTIC SMALL LETTER PI +2CA3 ; Lowercase # L& COPTIC SMALL LETTER RO +2CA5 ; Lowercase # L& COPTIC SMALL LETTER SIMA +2CA7 ; Lowercase # L& COPTIC SMALL LETTER TAU +2CA9 ; Lowercase # L& COPTIC SMALL LETTER UA +2CAB ; Lowercase # L& COPTIC SMALL LETTER FI +2CAD ; Lowercase # L& COPTIC SMALL LETTER KHI +2CAF ; Lowercase # L& COPTIC SMALL LETTER PSI +2CB1 ; Lowercase # L& COPTIC SMALL LETTER OOU +2CB3 ; Lowercase # L& COPTIC SMALL LETTER DIALECT-P ALEF +2CB5 ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC AIN +2CB7 ; Lowercase # L& COPTIC SMALL LETTER CRYPTOGRAMMIC EIE +2CB9 ; Lowercase # L& COPTIC SMALL LETTER DIALECT-P KAPA +2CBB ; Lowercase # L& COPTIC SMALL LETTER DIALECT-P NI +2CBD ; Lowercase # L& COPTIC SMALL LETTER CRYPTOGRAMMIC NI +2CBF ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC OOU +2CC1 ; Lowercase # L& COPTIC SMALL LETTER SAMPI +2CC3 ; Lowercase # L& COPTIC SMALL LETTER CROSSED SHEI +2CC5 ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC SHEI +2CC7 ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC ESH +2CC9 ; Lowercase # L& COPTIC SMALL LETTER AKHMIMIC KHEI +2CCB ; Lowercase # L& COPTIC SMALL LETTER DIALECT-P HORI +2CCD ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC HORI +2CCF ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC HA +2CD1 ; Lowercase # L& COPTIC SMALL LETTER L-SHAPED HA +2CD3 ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC HEI +2CD5 ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC HAT +2CD7 ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC GANGIA +2CD9 ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC DJA +2CDB ; Lowercase # L& COPTIC SMALL LETTER OLD COPTIC SHIMA +2CDD ; Lowercase # L& COPTIC SMALL LETTER OLD NUBIAN SHIMA +2CDF ; Lowercase # L& COPTIC SMALL LETTER OLD NUBIAN NGI +2CE1 ; Lowercase # L& COPTIC SMALL LETTER OLD NUBIAN NYI +2CE3..2CE4 ; Lowercase # L& [2] COPTIC SMALL LETTER OLD NUBIAN WAU..COPTIC SYMBOL KAI +2CEC ; Lowercase # L& COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI +2CEE ; Lowercase # L& COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA +2CF3 ; Lowercase # L& COPTIC SMALL LETTER BOHAIRIC KHEI +2D00..2D25 ; Lowercase # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE +2D27 ; Lowercase # L& GEORGIAN SMALL LETTER YN +2D2D ; Lowercase # L& GEORGIAN SMALL LETTER AEN +A641 ; Lowercase # L& CYRILLIC SMALL LETTER ZEMLYA +A643 ; Lowercase # L& CYRILLIC SMALL LETTER DZELO +A645 ; Lowercase # L& CYRILLIC SMALL LETTER REVERSED DZE +A647 ; Lowercase # L& CYRILLIC SMALL LETTER IOTA +A649 ; Lowercase # L& CYRILLIC SMALL LETTER DJERV +A64B ; Lowercase # L& CYRILLIC SMALL LETTER MONOGRAPH UK +A64D ; Lowercase # L& CYRILLIC SMALL LETTER BROAD OMEGA +A64F ; Lowercase # L& CYRILLIC SMALL LETTER NEUTRAL YER +A651 ; Lowercase # L& CYRILLIC SMALL LETTER YERU WITH BACK YER +A653 ; Lowercase # L& CYRILLIC SMALL LETTER IOTIFIED YAT +A655 ; Lowercase # L& CYRILLIC SMALL LETTER REVERSED YU +A657 ; Lowercase # L& CYRILLIC SMALL LETTER IOTIFIED A +A659 ; Lowercase # L& CYRILLIC SMALL LETTER CLOSED LITTLE YUS +A65B ; Lowercase # L& CYRILLIC SMALL LETTER BLENDED YUS +A65D ; Lowercase # L& CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS +A65F ; Lowercase # L& CYRILLIC SMALL LETTER YN +A661 ; Lowercase # L& CYRILLIC SMALL LETTER REVERSED TSE +A663 ; Lowercase # L& CYRILLIC SMALL LETTER SOFT DE +A665 ; Lowercase # L& CYRILLIC SMALL LETTER SOFT EL +A667 ; Lowercase # L& CYRILLIC SMALL LETTER SOFT EM +A669 ; Lowercase # L& CYRILLIC SMALL LETTER MONOCULAR O +A66B ; Lowercase # L& CYRILLIC SMALL LETTER BINOCULAR O +A66D ; Lowercase # L& CYRILLIC SMALL LETTER DOUBLE MONOCULAR O +A681 ; Lowercase # L& CYRILLIC SMALL LETTER DWE +A683 ; Lowercase # L& CYRILLIC SMALL LETTER DZWE +A685 ; Lowercase # L& CYRILLIC SMALL LETTER ZHWE +A687 ; Lowercase # L& CYRILLIC SMALL LETTER CCHE +A689 ; Lowercase # L& CYRILLIC SMALL LETTER DZZE +A68B ; Lowercase # L& CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK +A68D ; Lowercase # L& CYRILLIC SMALL LETTER TWE +A68F ; Lowercase # L& CYRILLIC SMALL LETTER TSWE +A691 ; Lowercase # L& CYRILLIC SMALL LETTER TSSE +A693 ; Lowercase # L& CYRILLIC SMALL LETTER TCHE +A695 ; Lowercase # L& CYRILLIC SMALL LETTER HWE +A697 ; Lowercase # L& CYRILLIC SMALL LETTER SHWE +A699 ; Lowercase # L& CYRILLIC SMALL LETTER DOUBLE O +A69B ; Lowercase # L& CYRILLIC SMALL LETTER CROSSED O +A69C..A69D ; Lowercase # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN +A723 ; Lowercase # L& LATIN SMALL LETTER EGYPTOLOGICAL ALEF +A725 ; Lowercase # L& LATIN SMALL LETTER EGYPTOLOGICAL AIN +A727 ; Lowercase # L& LATIN SMALL LETTER HENG +A729 ; Lowercase # L& LATIN SMALL LETTER TZ +A72B ; Lowercase # L& LATIN SMALL LETTER TRESILLO +A72D ; Lowercase # L& LATIN SMALL LETTER CUATRILLO +A72F..A731 ; Lowercase # L& [3] LATIN SMALL LETTER CUATRILLO WITH COMMA..LATIN LETTER SMALL CAPITAL S +A733 ; Lowercase # L& LATIN SMALL LETTER AA +A735 ; Lowercase # L& LATIN SMALL LETTER AO +A737 ; Lowercase # L& LATIN SMALL LETTER AU +A739 ; Lowercase # L& LATIN SMALL LETTER AV +A73B ; Lowercase # L& LATIN SMALL LETTER AV WITH HORIZONTAL BAR +A73D ; Lowercase # L& LATIN SMALL LETTER AY +A73F ; Lowercase # L& LATIN SMALL LETTER REVERSED C WITH DOT +A741 ; Lowercase # L& LATIN SMALL LETTER K WITH STROKE +A743 ; Lowercase # L& LATIN SMALL LETTER K WITH DIAGONAL STROKE +A745 ; Lowercase # L& LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE +A747 ; Lowercase # L& LATIN SMALL LETTER BROKEN L +A749 ; Lowercase # L& LATIN SMALL LETTER L WITH HIGH STROKE +A74B ; Lowercase # L& LATIN SMALL LETTER O WITH LONG STROKE OVERLAY +A74D ; Lowercase # L& LATIN SMALL LETTER O WITH LOOP +A74F ; Lowercase # L& LATIN SMALL LETTER OO +A751 ; Lowercase # L& LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER +A753 ; Lowercase # L& LATIN SMALL LETTER P WITH FLOURISH +A755 ; Lowercase # L& LATIN SMALL LETTER P WITH SQUIRREL TAIL +A757 ; Lowercase # L& LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER +A759 ; Lowercase # L& LATIN SMALL LETTER Q WITH DIAGONAL STROKE +A75B ; Lowercase # L& LATIN SMALL LETTER R ROTUNDA +A75D ; Lowercase # L& LATIN SMALL LETTER RUM ROTUNDA +A75F ; Lowercase # L& LATIN SMALL LETTER V WITH DIAGONAL STROKE +A761 ; Lowercase # L& LATIN SMALL LETTER VY +A763 ; Lowercase # L& LATIN SMALL LETTER VISIGOTHIC Z +A765 ; Lowercase # L& LATIN SMALL LETTER THORN WITH STROKE +A767 ; Lowercase # L& LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER +A769 ; Lowercase # L& LATIN SMALL LETTER VEND +A76B ; Lowercase # L& LATIN SMALL LETTER ET +A76D ; Lowercase # L& LATIN SMALL LETTER IS +A76F ; Lowercase # L& LATIN SMALL LETTER CON +A770 ; Lowercase # Lm MODIFIER LETTER US +A771..A778 ; Lowercase # L& [8] LATIN SMALL LETTER DUM..LATIN SMALL LETTER UM +A77A ; Lowercase # L& LATIN SMALL LETTER INSULAR D +A77C ; Lowercase # L& LATIN SMALL LETTER INSULAR F +A77F ; Lowercase # L& LATIN SMALL LETTER TURNED INSULAR G +A781 ; Lowercase # L& LATIN SMALL LETTER TURNED L +A783 ; Lowercase # L& LATIN SMALL LETTER INSULAR R +A785 ; Lowercase # L& LATIN SMALL LETTER INSULAR S +A787 ; Lowercase # L& LATIN SMALL LETTER INSULAR T +A78C ; Lowercase # L& LATIN SMALL LETTER SALTILLO +A78E ; Lowercase # L& LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT +A791 ; Lowercase # L& LATIN SMALL LETTER N WITH DESCENDER +A793..A795 ; Lowercase # L& [3] LATIN SMALL LETTER C WITH BAR..LATIN SMALL LETTER H WITH PALATAL HOOK +A797 ; Lowercase # L& LATIN SMALL LETTER B WITH FLOURISH +A799 ; Lowercase # L& LATIN SMALL LETTER F WITH STROKE +A79B ; Lowercase # L& LATIN SMALL LETTER VOLAPUK AE +A79D ; Lowercase # L& LATIN SMALL LETTER VOLAPUK OE +A79F ; Lowercase # L& LATIN SMALL LETTER VOLAPUK UE +A7A1 ; Lowercase # L& LATIN SMALL LETTER G WITH OBLIQUE STROKE +A7A3 ; Lowercase # L& LATIN SMALL LETTER K WITH OBLIQUE STROKE +A7A5 ; Lowercase # L& LATIN SMALL LETTER N WITH OBLIQUE STROKE +A7A7 ; Lowercase # L& LATIN SMALL LETTER R WITH OBLIQUE STROKE +A7A9 ; Lowercase # L& LATIN SMALL LETTER S WITH OBLIQUE STROKE +A7AF ; Lowercase # L& LATIN LETTER SMALL CAPITAL Q +A7B5 ; Lowercase # L& LATIN SMALL LETTER BETA +A7B7 ; Lowercase # L& LATIN SMALL LETTER OMEGA +A7B9 ; Lowercase # L& LATIN SMALL LETTER U WITH STROKE +A7BB ; Lowercase # L& LATIN SMALL LETTER GLOTTAL A +A7BD ; Lowercase # L& LATIN SMALL LETTER GLOTTAL I +A7BF ; Lowercase # L& LATIN SMALL LETTER GLOTTAL U +A7C1 ; Lowercase # L& LATIN SMALL LETTER OLD POLISH O +A7C3 ; Lowercase # L& LATIN SMALL LETTER ANGLICANA W +A7C8 ; Lowercase # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY +A7CA ; Lowercase # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7CD ; Lowercase # L& LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7CF ; Lowercase # L& LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE +A7D1 ; Lowercase # L& LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; Lowercase # L& LATIN SMALL LETTER DOUBLE THORN +A7D5 ; Lowercase # L& LATIN SMALL LETTER DOUBLE WYNN +A7D7 ; Lowercase # L& LATIN SMALL LETTER MIDDLE SCOTS S +A7D9 ; Lowercase # L& LATIN SMALL LETTER SIGMOID S +A7DB ; Lowercase # L& LATIN SMALL LETTER LAMBDA +A7F1..A7F4 ; Lowercase # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q +A7F6 ; Lowercase # L& LATIN SMALL LETTER REVERSED HALF H +A7F8..A7F9 ; Lowercase # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE +A7FA ; Lowercase # L& LATIN LETTER SMALL CAPITAL TURNED M +AB30..AB5A ; Lowercase # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG +AB5C..AB5F ; Lowercase # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK +AB60..AB68 ; Lowercase # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE +AB69 ; Lowercase # Lm MODIFIER LETTER SMALL TURNED W +AB70..ABBF ; Lowercase # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA +FB00..FB06 ; Lowercase # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; Lowercase # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FF41..FF5A ; Lowercase # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +10428..1044F ; Lowercase # L& [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW +104D8..104FB ; Lowercase # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10597..105A1 ; Lowercase # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Lowercase # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Lowercase # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Lowercase # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +10780 ; Lowercase # Lm MODIFIER LETTER SMALL CAPITAL AA +10783..10785 ; Lowercase # Lm [3] MODIFIER LETTER SMALL AE..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Lowercase # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Lowercase # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL +10CC0..10CF2 ; Lowercase # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10D70..10D85 ; Lowercase # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA +118C0..118DF ; Lowercase # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO +16E60..16E7F ; Lowercase # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EBB..16ED3 ; Lowercase # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY +1D41A..1D433 ; Lowercase # L& [26] MATHEMATICAL BOLD SMALL A..MATHEMATICAL BOLD SMALL Z +1D44E..1D454 ; Lowercase # L& [7] MATHEMATICAL ITALIC SMALL A..MATHEMATICAL ITALIC SMALL G +1D456..1D467 ; Lowercase # L& [18] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL Z +1D482..1D49B ; Lowercase # L& [26] MATHEMATICAL BOLD ITALIC SMALL A..MATHEMATICAL BOLD ITALIC SMALL Z +1D4B6..1D4B9 ; Lowercase # L& [4] MATHEMATICAL SCRIPT SMALL A..MATHEMATICAL SCRIPT SMALL D +1D4BB ; Lowercase # L& MATHEMATICAL SCRIPT SMALL F +1D4BD..1D4C3 ; Lowercase # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N +1D4C5..1D4CF ; Lowercase # L& [11] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL SCRIPT SMALL Z +1D4EA..1D503 ; Lowercase # L& [26] MATHEMATICAL BOLD SCRIPT SMALL A..MATHEMATICAL BOLD SCRIPT SMALL Z +1D51E..1D537 ; Lowercase # L& [26] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL FRAKTUR SMALL Z +1D552..1D56B ; Lowercase # L& [26] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL DOUBLE-STRUCK SMALL Z +1D586..1D59F ; Lowercase # L& [26] MATHEMATICAL BOLD FRAKTUR SMALL A..MATHEMATICAL BOLD FRAKTUR SMALL Z +1D5BA..1D5D3 ; Lowercase # L& [26] MATHEMATICAL SANS-SERIF SMALL A..MATHEMATICAL SANS-SERIF SMALL Z +1D5EE..1D607 ; Lowercase # L& [26] MATHEMATICAL SANS-SERIF BOLD SMALL A..MATHEMATICAL SANS-SERIF BOLD SMALL Z +1D622..1D63B ; Lowercase # L& [26] MATHEMATICAL SANS-SERIF ITALIC SMALL A..MATHEMATICAL SANS-SERIF ITALIC SMALL Z +1D656..1D66F ; Lowercase # L& [26] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z +1D68A..1D6A5 ; Lowercase # L& [28] MATHEMATICAL MONOSPACE SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J +1D6C2..1D6DA ; Lowercase # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA +1D6DC..1D6E1 ; Lowercase # L& [6] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL BOLD PI SYMBOL +1D6FC..1D714 ; Lowercase # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA +1D716..1D71B ; Lowercase # L& [6] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL ITALIC PI SYMBOL +1D736..1D74E ; Lowercase # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D750..1D755 ; Lowercase # L& [6] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC PI SYMBOL +1D770..1D788 ; Lowercase # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D78A..1D78F ; Lowercase # L& [6] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD PI SYMBOL +1D7AA..1D7C2 ; Lowercase # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C4..1D7C9 ; Lowercase # L& [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL +1D7CB ; Lowercase # L& MATHEMATICAL BOLD SMALL DIGAMMA +1DF00..1DF09 ; Lowercase # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0B..1DF1E ; Lowercase # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL +1DF25..1DF2A ; Lowercase # L& [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK +1E030..1E06D ; Lowercase # Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE +1E922..1E943 ; Lowercase # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA + +# Total code points: 2595 + +# ================================================ + +# Derived Property: Uppercase +# Generated from: Lu + Other_Uppercase + +0041..005A ; Uppercase # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z +00C0..00D6 ; Uppercase # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D8..00DE ; Uppercase # L& [7] LATIN CAPITAL LETTER O WITH STROKE..LATIN CAPITAL LETTER THORN +0100 ; Uppercase # L& LATIN CAPITAL LETTER A WITH MACRON +0102 ; Uppercase # L& LATIN CAPITAL LETTER A WITH BREVE +0104 ; Uppercase # L& LATIN CAPITAL LETTER A WITH OGONEK +0106 ; Uppercase # L& LATIN CAPITAL LETTER C WITH ACUTE +0108 ; Uppercase # L& LATIN CAPITAL LETTER C WITH CIRCUMFLEX +010A ; Uppercase # L& LATIN CAPITAL LETTER C WITH DOT ABOVE +010C ; Uppercase # L& LATIN CAPITAL LETTER C WITH CARON +010E ; Uppercase # L& LATIN CAPITAL LETTER D WITH CARON +0110 ; Uppercase # L& LATIN CAPITAL LETTER D WITH STROKE +0112 ; Uppercase # L& LATIN CAPITAL LETTER E WITH MACRON +0114 ; Uppercase # L& LATIN CAPITAL LETTER E WITH BREVE +0116 ; Uppercase # L& LATIN CAPITAL LETTER E WITH DOT ABOVE +0118 ; Uppercase # L& LATIN CAPITAL LETTER E WITH OGONEK +011A ; Uppercase # L& LATIN CAPITAL LETTER E WITH CARON +011C ; Uppercase # L& LATIN CAPITAL LETTER G WITH CIRCUMFLEX +011E ; Uppercase # L& LATIN CAPITAL LETTER G WITH BREVE +0120 ; Uppercase # L& LATIN CAPITAL LETTER G WITH DOT ABOVE +0122 ; Uppercase # L& LATIN CAPITAL LETTER G WITH CEDILLA +0124 ; Uppercase # L& LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0126 ; Uppercase # L& LATIN CAPITAL LETTER H WITH STROKE +0128 ; Uppercase # L& LATIN CAPITAL LETTER I WITH TILDE +012A ; Uppercase # L& LATIN CAPITAL LETTER I WITH MACRON +012C ; Uppercase # L& LATIN CAPITAL LETTER I WITH BREVE +012E ; Uppercase # L& LATIN CAPITAL LETTER I WITH OGONEK +0130 ; Uppercase # L& LATIN CAPITAL LETTER I WITH DOT ABOVE +0132 ; Uppercase # L& LATIN CAPITAL LIGATURE IJ +0134 ; Uppercase # L& LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0136 ; Uppercase # L& LATIN CAPITAL LETTER K WITH CEDILLA +0139 ; Uppercase # L& LATIN CAPITAL LETTER L WITH ACUTE +013B ; Uppercase # L& LATIN CAPITAL LETTER L WITH CEDILLA +013D ; Uppercase # L& LATIN CAPITAL LETTER L WITH CARON +013F ; Uppercase # L& LATIN CAPITAL LETTER L WITH MIDDLE DOT +0141 ; Uppercase # L& LATIN CAPITAL LETTER L WITH STROKE +0143 ; Uppercase # L& LATIN CAPITAL LETTER N WITH ACUTE +0145 ; Uppercase # L& LATIN CAPITAL LETTER N WITH CEDILLA +0147 ; Uppercase # L& LATIN CAPITAL LETTER N WITH CARON +014A ; Uppercase # L& LATIN CAPITAL LETTER ENG +014C ; Uppercase # L& LATIN CAPITAL LETTER O WITH MACRON +014E ; Uppercase # L& LATIN CAPITAL LETTER O WITH BREVE +0150 ; Uppercase # L& LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0152 ; Uppercase # L& LATIN CAPITAL LIGATURE OE +0154 ; Uppercase # L& LATIN CAPITAL LETTER R WITH ACUTE +0156 ; Uppercase # L& LATIN CAPITAL LETTER R WITH CEDILLA +0158 ; Uppercase # L& LATIN CAPITAL LETTER R WITH CARON +015A ; Uppercase # L& LATIN CAPITAL LETTER S WITH ACUTE +015C ; Uppercase # L& LATIN CAPITAL LETTER S WITH CIRCUMFLEX +015E ; Uppercase # L& LATIN CAPITAL LETTER S WITH CEDILLA +0160 ; Uppercase # L& LATIN CAPITAL LETTER S WITH CARON +0162 ; Uppercase # L& LATIN CAPITAL LETTER T WITH CEDILLA +0164 ; Uppercase # L& LATIN CAPITAL LETTER T WITH CARON +0166 ; Uppercase # L& LATIN CAPITAL LETTER T WITH STROKE +0168 ; Uppercase # L& LATIN CAPITAL LETTER U WITH TILDE +016A ; Uppercase # L& LATIN CAPITAL LETTER U WITH MACRON +016C ; Uppercase # L& LATIN CAPITAL LETTER U WITH BREVE +016E ; Uppercase # L& LATIN CAPITAL LETTER U WITH RING ABOVE +0170 ; Uppercase # L& LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0172 ; Uppercase # L& LATIN CAPITAL LETTER U WITH OGONEK +0174 ; Uppercase # L& LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0176 ; Uppercase # L& LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0178..0179 ; Uppercase # L& [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE +017B ; Uppercase # L& LATIN CAPITAL LETTER Z WITH DOT ABOVE +017D ; Uppercase # L& LATIN CAPITAL LETTER Z WITH CARON +0181..0182 ; Uppercase # L& [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR +0184 ; Uppercase # L& LATIN CAPITAL LETTER TONE SIX +0186..0187 ; Uppercase # L& [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK +0189..018B ; Uppercase # L& [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR +018E..0191 ; Uppercase # L& [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK +0193..0194 ; Uppercase # L& [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA +0196..0198 ; Uppercase # L& [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK +019C..019D ; Uppercase # L& [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK +019F..01A0 ; Uppercase # L& [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN +01A2 ; Uppercase # L& LATIN CAPITAL LETTER OI +01A4 ; Uppercase # L& LATIN CAPITAL LETTER P WITH HOOK +01A6..01A7 ; Uppercase # L& [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO +01A9 ; Uppercase # L& LATIN CAPITAL LETTER ESH +01AC ; Uppercase # L& LATIN CAPITAL LETTER T WITH HOOK +01AE..01AF ; Uppercase # L& [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN +01B1..01B3 ; Uppercase # L& [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK +01B5 ; Uppercase # L& LATIN CAPITAL LETTER Z WITH STROKE +01B7..01B8 ; Uppercase # L& [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED +01BC ; Uppercase # L& LATIN CAPITAL LETTER TONE FIVE +01C4 ; Uppercase # L& LATIN CAPITAL LETTER DZ WITH CARON +01C7 ; Uppercase # L& LATIN CAPITAL LETTER LJ +01CA ; Uppercase # L& LATIN CAPITAL LETTER NJ +01CD ; Uppercase # L& LATIN CAPITAL LETTER A WITH CARON +01CF ; Uppercase # L& LATIN CAPITAL LETTER I WITH CARON +01D1 ; Uppercase # L& LATIN CAPITAL LETTER O WITH CARON +01D3 ; Uppercase # L& LATIN CAPITAL LETTER U WITH CARON +01D5 ; Uppercase # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01D7 ; Uppercase # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D9 ; Uppercase # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +01DB ; Uppercase # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01DE ; Uppercase # L& LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +01E0 ; Uppercase # L& LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON +01E2 ; Uppercase # L& LATIN CAPITAL LETTER AE WITH MACRON +01E4 ; Uppercase # L& LATIN CAPITAL LETTER G WITH STROKE +01E6 ; Uppercase # L& LATIN CAPITAL LETTER G WITH CARON +01E8 ; Uppercase # L& LATIN CAPITAL LETTER K WITH CARON +01EA ; Uppercase # L& LATIN CAPITAL LETTER O WITH OGONEK +01EC ; Uppercase # L& LATIN CAPITAL LETTER O WITH OGONEK AND MACRON +01EE ; Uppercase # L& LATIN CAPITAL LETTER EZH WITH CARON +01F1 ; Uppercase # L& LATIN CAPITAL LETTER DZ +01F4 ; Uppercase # L& LATIN CAPITAL LETTER G WITH ACUTE +01F6..01F8 ; Uppercase # L& [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE +01FA ; Uppercase # L& LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +01FC ; Uppercase # L& LATIN CAPITAL LETTER AE WITH ACUTE +01FE ; Uppercase # L& LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +0200 ; Uppercase # L& LATIN CAPITAL LETTER A WITH DOUBLE GRAVE +0202 ; Uppercase # L& LATIN CAPITAL LETTER A WITH INVERTED BREVE +0204 ; Uppercase # L& LATIN CAPITAL LETTER E WITH DOUBLE GRAVE +0206 ; Uppercase # L& LATIN CAPITAL LETTER E WITH INVERTED BREVE +0208 ; Uppercase # L& LATIN CAPITAL LETTER I WITH DOUBLE GRAVE +020A ; Uppercase # L& LATIN CAPITAL LETTER I WITH INVERTED BREVE +020C ; Uppercase # L& LATIN CAPITAL LETTER O WITH DOUBLE GRAVE +020E ; Uppercase # L& LATIN CAPITAL LETTER O WITH INVERTED BREVE +0210 ; Uppercase # L& LATIN CAPITAL LETTER R WITH DOUBLE GRAVE +0212 ; Uppercase # L& LATIN CAPITAL LETTER R WITH INVERTED BREVE +0214 ; Uppercase # L& LATIN CAPITAL LETTER U WITH DOUBLE GRAVE +0216 ; Uppercase # L& LATIN CAPITAL LETTER U WITH INVERTED BREVE +0218 ; Uppercase # L& LATIN CAPITAL LETTER S WITH COMMA BELOW +021A ; Uppercase # L& LATIN CAPITAL LETTER T WITH COMMA BELOW +021C ; Uppercase # L& LATIN CAPITAL LETTER YOGH +021E ; Uppercase # L& LATIN CAPITAL LETTER H WITH CARON +0220 ; Uppercase # L& LATIN CAPITAL LETTER N WITH LONG RIGHT LEG +0222 ; Uppercase # L& LATIN CAPITAL LETTER OU +0224 ; Uppercase # L& LATIN CAPITAL LETTER Z WITH HOOK +0226 ; Uppercase # L& LATIN CAPITAL LETTER A WITH DOT ABOVE +0228 ; Uppercase # L& LATIN CAPITAL LETTER E WITH CEDILLA +022A ; Uppercase # L& LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +022C ; Uppercase # L& LATIN CAPITAL LETTER O WITH TILDE AND MACRON +022E ; Uppercase # L& LATIN CAPITAL LETTER O WITH DOT ABOVE +0230 ; Uppercase # L& LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON +0232 ; Uppercase # L& LATIN CAPITAL LETTER Y WITH MACRON +023A..023B ; Uppercase # L& [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE +023D..023E ; Uppercase # L& [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE +0241 ; Uppercase # L& LATIN CAPITAL LETTER GLOTTAL STOP +0243..0246 ; Uppercase # L& [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE +0248 ; Uppercase # L& LATIN CAPITAL LETTER J WITH STROKE +024A ; Uppercase # L& LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL +024C ; Uppercase # L& LATIN CAPITAL LETTER R WITH STROKE +024E ; Uppercase # L& LATIN CAPITAL LETTER Y WITH STROKE +0370 ; Uppercase # L& GREEK CAPITAL LETTER HETA +0372 ; Uppercase # L& GREEK CAPITAL LETTER ARCHAIC SAMPI +0376 ; Uppercase # L& GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA +037F ; Uppercase # L& GREEK CAPITAL LETTER YOT +0386 ; Uppercase # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0388..038A ; Uppercase # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; Uppercase # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..038F ; Uppercase # L& [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS +0391..03A1 ; Uppercase # L& [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO +03A3..03AB ; Uppercase # L& [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +03CF ; Uppercase # L& GREEK CAPITAL KAI SYMBOL +03D2..03D4 ; Uppercase # L& [3] GREEK UPSILON WITH HOOK SYMBOL..GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL +03D8 ; Uppercase # L& GREEK LETTER ARCHAIC KOPPA +03DA ; Uppercase # L& GREEK LETTER STIGMA +03DC ; Uppercase # L& GREEK LETTER DIGAMMA +03DE ; Uppercase # L& GREEK LETTER KOPPA +03E0 ; Uppercase # L& GREEK LETTER SAMPI +03E2 ; Uppercase # L& COPTIC CAPITAL LETTER SHEI +03E4 ; Uppercase # L& COPTIC CAPITAL LETTER FEI +03E6 ; Uppercase # L& COPTIC CAPITAL LETTER KHEI +03E8 ; Uppercase # L& COPTIC CAPITAL LETTER HORI +03EA ; Uppercase # L& COPTIC CAPITAL LETTER GANGIA +03EC ; Uppercase # L& COPTIC CAPITAL LETTER SHIMA +03EE ; Uppercase # L& COPTIC CAPITAL LETTER DEI +03F4 ; Uppercase # L& GREEK CAPITAL THETA SYMBOL +03F7 ; Uppercase # L& GREEK CAPITAL LETTER SHO +03F9..03FA ; Uppercase # L& [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN +03FD..042F ; Uppercase # L& [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA +0460 ; Uppercase # L& CYRILLIC CAPITAL LETTER OMEGA +0462 ; Uppercase # L& CYRILLIC CAPITAL LETTER YAT +0464 ; Uppercase # L& CYRILLIC CAPITAL LETTER IOTIFIED E +0466 ; Uppercase # L& CYRILLIC CAPITAL LETTER LITTLE YUS +0468 ; Uppercase # L& CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS +046A ; Uppercase # L& CYRILLIC CAPITAL LETTER BIG YUS +046C ; Uppercase # L& CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS +046E ; Uppercase # L& CYRILLIC CAPITAL LETTER KSI +0470 ; Uppercase # L& CYRILLIC CAPITAL LETTER PSI +0472 ; Uppercase # L& CYRILLIC CAPITAL LETTER FITA +0474 ; Uppercase # L& CYRILLIC CAPITAL LETTER IZHITSA +0476 ; Uppercase # L& CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0478 ; Uppercase # L& CYRILLIC CAPITAL LETTER UK +047A ; Uppercase # L& CYRILLIC CAPITAL LETTER ROUND OMEGA +047C ; Uppercase # L& CYRILLIC CAPITAL LETTER OMEGA WITH TITLO +047E ; Uppercase # L& CYRILLIC CAPITAL LETTER OT +0480 ; Uppercase # L& CYRILLIC CAPITAL LETTER KOPPA +048A ; Uppercase # L& CYRILLIC CAPITAL LETTER SHORT I WITH TAIL +048C ; Uppercase # L& CYRILLIC CAPITAL LETTER SEMISOFT SIGN +048E ; Uppercase # L& CYRILLIC CAPITAL LETTER ER WITH TICK +0490 ; Uppercase # L& CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0492 ; Uppercase # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE +0494 ; Uppercase # L& CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK +0496 ; Uppercase # L& CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER +0498 ; Uppercase # L& CYRILLIC CAPITAL LETTER ZE WITH DESCENDER +049A ; Uppercase # L& CYRILLIC CAPITAL LETTER KA WITH DESCENDER +049C ; Uppercase # L& CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE +049E ; Uppercase # L& CYRILLIC CAPITAL LETTER KA WITH STROKE +04A0 ; Uppercase # L& CYRILLIC CAPITAL LETTER BASHKIR KA +04A2 ; Uppercase # L& CYRILLIC CAPITAL LETTER EN WITH DESCENDER +04A4 ; Uppercase # L& CYRILLIC CAPITAL LIGATURE EN GHE +04A6 ; Uppercase # L& CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK +04A8 ; Uppercase # L& CYRILLIC CAPITAL LETTER ABKHASIAN HA +04AA ; Uppercase # L& CYRILLIC CAPITAL LETTER ES WITH DESCENDER +04AC ; Uppercase # L& CYRILLIC CAPITAL LETTER TE WITH DESCENDER +04AE ; Uppercase # L& CYRILLIC CAPITAL LETTER STRAIGHT U +04B0 ; Uppercase # L& CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE +04B2 ; Uppercase # L& CYRILLIC CAPITAL LETTER HA WITH DESCENDER +04B4 ; Uppercase # L& CYRILLIC CAPITAL LIGATURE TE TSE +04B6 ; Uppercase # L& CYRILLIC CAPITAL LETTER CHE WITH DESCENDER +04B8 ; Uppercase # L& CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE +04BA ; Uppercase # L& CYRILLIC CAPITAL LETTER SHHA +04BC ; Uppercase # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE +04BE ; Uppercase # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER +04C0..04C1 ; Uppercase # L& [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE +04C3 ; Uppercase # L& CYRILLIC CAPITAL LETTER KA WITH HOOK +04C5 ; Uppercase # L& CYRILLIC CAPITAL LETTER EL WITH TAIL +04C7 ; Uppercase # L& CYRILLIC CAPITAL LETTER EN WITH HOOK +04C9 ; Uppercase # L& CYRILLIC CAPITAL LETTER EN WITH TAIL +04CB ; Uppercase # L& CYRILLIC CAPITAL LETTER KHAKASSIAN CHE +04CD ; Uppercase # L& CYRILLIC CAPITAL LETTER EM WITH TAIL +04D0 ; Uppercase # L& CYRILLIC CAPITAL LETTER A WITH BREVE +04D2 ; Uppercase # L& CYRILLIC CAPITAL LETTER A WITH DIAERESIS +04D4 ; Uppercase # L& CYRILLIC CAPITAL LIGATURE A IE +04D6 ; Uppercase # L& CYRILLIC CAPITAL LETTER IE WITH BREVE +04D8 ; Uppercase # L& CYRILLIC CAPITAL LETTER SCHWA +04DA ; Uppercase # L& CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS +04DC ; Uppercase # L& CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS +04DE ; Uppercase # L& CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS +04E0 ; Uppercase # L& CYRILLIC CAPITAL LETTER ABKHASIAN DZE +04E2 ; Uppercase # L& CYRILLIC CAPITAL LETTER I WITH MACRON +04E4 ; Uppercase # L& CYRILLIC CAPITAL LETTER I WITH DIAERESIS +04E6 ; Uppercase # L& CYRILLIC CAPITAL LETTER O WITH DIAERESIS +04E8 ; Uppercase # L& CYRILLIC CAPITAL LETTER BARRED O +04EA ; Uppercase # L& CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS +04EC ; Uppercase # L& CYRILLIC CAPITAL LETTER E WITH DIAERESIS +04EE ; Uppercase # L& CYRILLIC CAPITAL LETTER U WITH MACRON +04F0 ; Uppercase # L& CYRILLIC CAPITAL LETTER U WITH DIAERESIS +04F2 ; Uppercase # L& CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE +04F4 ; Uppercase # L& CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS +04F6 ; Uppercase # L& CYRILLIC CAPITAL LETTER GHE WITH DESCENDER +04F8 ; Uppercase # L& CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS +04FA ; Uppercase # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK +04FC ; Uppercase # L& CYRILLIC CAPITAL LETTER HA WITH HOOK +04FE ; Uppercase # L& CYRILLIC CAPITAL LETTER HA WITH STROKE +0500 ; Uppercase # L& CYRILLIC CAPITAL LETTER KOMI DE +0502 ; Uppercase # L& CYRILLIC CAPITAL LETTER KOMI DJE +0504 ; Uppercase # L& CYRILLIC CAPITAL LETTER KOMI ZJE +0506 ; Uppercase # L& CYRILLIC CAPITAL LETTER KOMI DZJE +0508 ; Uppercase # L& CYRILLIC CAPITAL LETTER KOMI LJE +050A ; Uppercase # L& CYRILLIC CAPITAL LETTER KOMI NJE +050C ; Uppercase # L& CYRILLIC CAPITAL LETTER KOMI SJE +050E ; Uppercase # L& CYRILLIC CAPITAL LETTER KOMI TJE +0510 ; Uppercase # L& CYRILLIC CAPITAL LETTER REVERSED ZE +0512 ; Uppercase # L& CYRILLIC CAPITAL LETTER EL WITH HOOK +0514 ; Uppercase # L& CYRILLIC CAPITAL LETTER LHA +0516 ; Uppercase # L& CYRILLIC CAPITAL LETTER RHA +0518 ; Uppercase # L& CYRILLIC CAPITAL LETTER YAE +051A ; Uppercase # L& CYRILLIC CAPITAL LETTER QA +051C ; Uppercase # L& CYRILLIC CAPITAL LETTER WE +051E ; Uppercase # L& CYRILLIC CAPITAL LETTER ALEUT KA +0520 ; Uppercase # L& CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK +0522 ; Uppercase # L& CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK +0524 ; Uppercase # L& CYRILLIC CAPITAL LETTER PE WITH DESCENDER +0526 ; Uppercase # L& CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER +0528 ; Uppercase # L& CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK +052A ; Uppercase # L& CYRILLIC CAPITAL LETTER DZZHE +052C ; Uppercase # L& CYRILLIC CAPITAL LETTER DCHE +052E ; Uppercase # L& CYRILLIC CAPITAL LETTER EL WITH DESCENDER +0531..0556 ; Uppercase # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH +10A0..10C5 ; Uppercase # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE +10C7 ; Uppercase # L& GEORGIAN CAPITAL LETTER YN +10CD ; Uppercase # L& GEORGIAN CAPITAL LETTER AEN +13A0..13F5 ; Uppercase # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV +1C89 ; Uppercase # L& CYRILLIC CAPITAL LETTER TJE +1C90..1CBA ; Uppercase # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN +1CBD..1CBF ; Uppercase # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN +1E00 ; Uppercase # L& LATIN CAPITAL LETTER A WITH RING BELOW +1E02 ; Uppercase # L& LATIN CAPITAL LETTER B WITH DOT ABOVE +1E04 ; Uppercase # L& LATIN CAPITAL LETTER B WITH DOT BELOW +1E06 ; Uppercase # L& LATIN CAPITAL LETTER B WITH LINE BELOW +1E08 ; Uppercase # L& LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE +1E0A ; Uppercase # L& LATIN CAPITAL LETTER D WITH DOT ABOVE +1E0C ; Uppercase # L& LATIN CAPITAL LETTER D WITH DOT BELOW +1E0E ; Uppercase # L& LATIN CAPITAL LETTER D WITH LINE BELOW +1E10 ; Uppercase # L& LATIN CAPITAL LETTER D WITH CEDILLA +1E12 ; Uppercase # L& LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW +1E14 ; Uppercase # L& LATIN CAPITAL LETTER E WITH MACRON AND GRAVE +1E16 ; Uppercase # L& LATIN CAPITAL LETTER E WITH MACRON AND ACUTE +1E18 ; Uppercase # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW +1E1A ; Uppercase # L& LATIN CAPITAL LETTER E WITH TILDE BELOW +1E1C ; Uppercase # L& LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE +1E1E ; Uppercase # L& LATIN CAPITAL LETTER F WITH DOT ABOVE +1E20 ; Uppercase # L& LATIN CAPITAL LETTER G WITH MACRON +1E22 ; Uppercase # L& LATIN CAPITAL LETTER H WITH DOT ABOVE +1E24 ; Uppercase # L& LATIN CAPITAL LETTER H WITH DOT BELOW +1E26 ; Uppercase # L& LATIN CAPITAL LETTER H WITH DIAERESIS +1E28 ; Uppercase # L& LATIN CAPITAL LETTER H WITH CEDILLA +1E2A ; Uppercase # L& LATIN CAPITAL LETTER H WITH BREVE BELOW +1E2C ; Uppercase # L& LATIN CAPITAL LETTER I WITH TILDE BELOW +1E2E ; Uppercase # L& LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE +1E30 ; Uppercase # L& LATIN CAPITAL LETTER K WITH ACUTE +1E32 ; Uppercase # L& LATIN CAPITAL LETTER K WITH DOT BELOW +1E34 ; Uppercase # L& LATIN CAPITAL LETTER K WITH LINE BELOW +1E36 ; Uppercase # L& LATIN CAPITAL LETTER L WITH DOT BELOW +1E38 ; Uppercase # L& LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON +1E3A ; Uppercase # L& LATIN CAPITAL LETTER L WITH LINE BELOW +1E3C ; Uppercase # L& LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW +1E3E ; Uppercase # L& LATIN CAPITAL LETTER M WITH ACUTE +1E40 ; Uppercase # L& LATIN CAPITAL LETTER M WITH DOT ABOVE +1E42 ; Uppercase # L& LATIN CAPITAL LETTER M WITH DOT BELOW +1E44 ; Uppercase # L& LATIN CAPITAL LETTER N WITH DOT ABOVE +1E46 ; Uppercase # L& LATIN CAPITAL LETTER N WITH DOT BELOW +1E48 ; Uppercase # L& LATIN CAPITAL LETTER N WITH LINE BELOW +1E4A ; Uppercase # L& LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW +1E4C ; Uppercase # L& LATIN CAPITAL LETTER O WITH TILDE AND ACUTE +1E4E ; Uppercase # L& LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS +1E50 ; Uppercase # L& LATIN CAPITAL LETTER O WITH MACRON AND GRAVE +1E52 ; Uppercase # L& LATIN CAPITAL LETTER O WITH MACRON AND ACUTE +1E54 ; Uppercase # L& LATIN CAPITAL LETTER P WITH ACUTE +1E56 ; Uppercase # L& LATIN CAPITAL LETTER P WITH DOT ABOVE +1E58 ; Uppercase # L& LATIN CAPITAL LETTER R WITH DOT ABOVE +1E5A ; Uppercase # L& LATIN CAPITAL LETTER R WITH DOT BELOW +1E5C ; Uppercase # L& LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON +1E5E ; Uppercase # L& LATIN CAPITAL LETTER R WITH LINE BELOW +1E60 ; Uppercase # L& LATIN CAPITAL LETTER S WITH DOT ABOVE +1E62 ; Uppercase # L& LATIN CAPITAL LETTER S WITH DOT BELOW +1E64 ; Uppercase # L& LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE +1E66 ; Uppercase # L& LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE +1E68 ; Uppercase # L& LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE +1E6A ; Uppercase # L& LATIN CAPITAL LETTER T WITH DOT ABOVE +1E6C ; Uppercase # L& LATIN CAPITAL LETTER T WITH DOT BELOW +1E6E ; Uppercase # L& LATIN CAPITAL LETTER T WITH LINE BELOW +1E70 ; Uppercase # L& LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW +1E72 ; Uppercase # L& LATIN CAPITAL LETTER U WITH DIAERESIS BELOW +1E74 ; Uppercase # L& LATIN CAPITAL LETTER U WITH TILDE BELOW +1E76 ; Uppercase # L& LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW +1E78 ; Uppercase # L& LATIN CAPITAL LETTER U WITH TILDE AND ACUTE +1E7A ; Uppercase # L& LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS +1E7C ; Uppercase # L& LATIN CAPITAL LETTER V WITH TILDE +1E7E ; Uppercase # L& LATIN CAPITAL LETTER V WITH DOT BELOW +1E80 ; Uppercase # L& LATIN CAPITAL LETTER W WITH GRAVE +1E82 ; Uppercase # L& LATIN CAPITAL LETTER W WITH ACUTE +1E84 ; Uppercase # L& LATIN CAPITAL LETTER W WITH DIAERESIS +1E86 ; Uppercase # L& LATIN CAPITAL LETTER W WITH DOT ABOVE +1E88 ; Uppercase # L& LATIN CAPITAL LETTER W WITH DOT BELOW +1E8A ; Uppercase # L& LATIN CAPITAL LETTER X WITH DOT ABOVE +1E8C ; Uppercase # L& LATIN CAPITAL LETTER X WITH DIAERESIS +1E8E ; Uppercase # L& LATIN CAPITAL LETTER Y WITH DOT ABOVE +1E90 ; Uppercase # L& LATIN CAPITAL LETTER Z WITH CIRCUMFLEX +1E92 ; Uppercase # L& LATIN CAPITAL LETTER Z WITH DOT BELOW +1E94 ; Uppercase # L& LATIN CAPITAL LETTER Z WITH LINE BELOW +1E9E ; Uppercase # L& LATIN CAPITAL LETTER SHARP S +1EA0 ; Uppercase # L& LATIN CAPITAL LETTER A WITH DOT BELOW +1EA2 ; Uppercase # L& LATIN CAPITAL LETTER A WITH HOOK ABOVE +1EA4 ; Uppercase # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA6 ; Uppercase # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA8 ; Uppercase # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAA ; Uppercase # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE +1EAC ; Uppercase # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAE ; Uppercase # L& LATIN CAPITAL LETTER A WITH BREVE AND ACUTE +1EB0 ; Uppercase # L& LATIN CAPITAL LETTER A WITH BREVE AND GRAVE +1EB2 ; Uppercase # L& LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE +1EB4 ; Uppercase # L& LATIN CAPITAL LETTER A WITH BREVE AND TILDE +1EB6 ; Uppercase # L& LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW +1EB8 ; Uppercase # L& LATIN CAPITAL LETTER E WITH DOT BELOW +1EBA ; Uppercase # L& LATIN CAPITAL LETTER E WITH HOOK ABOVE +1EBC ; Uppercase # L& LATIN CAPITAL LETTER E WITH TILDE +1EBE ; Uppercase # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC0 ; Uppercase # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC2 ; Uppercase # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC4 ; Uppercase # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC6 ; Uppercase # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC8 ; Uppercase # L& LATIN CAPITAL LETTER I WITH HOOK ABOVE +1ECA ; Uppercase # L& LATIN CAPITAL LETTER I WITH DOT BELOW +1ECC ; Uppercase # L& LATIN CAPITAL LETTER O WITH DOT BELOW +1ECE ; Uppercase # L& LATIN CAPITAL LETTER O WITH HOOK ABOVE +1ED0 ; Uppercase # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED2 ; Uppercase # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED4 ; Uppercase # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED6 ; Uppercase # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED8 ; Uppercase # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EDA ; Uppercase # L& LATIN CAPITAL LETTER O WITH HORN AND ACUTE +1EDC ; Uppercase # L& LATIN CAPITAL LETTER O WITH HORN AND GRAVE +1EDE ; Uppercase # L& LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE +1EE0 ; Uppercase # L& LATIN CAPITAL LETTER O WITH HORN AND TILDE +1EE2 ; Uppercase # L& LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +1EE4 ; Uppercase # L& LATIN CAPITAL LETTER U WITH DOT BELOW +1EE6 ; Uppercase # L& LATIN CAPITAL LETTER U WITH HOOK ABOVE +1EE8 ; Uppercase # L& LATIN CAPITAL LETTER U WITH HORN AND ACUTE +1EEA ; Uppercase # L& LATIN CAPITAL LETTER U WITH HORN AND GRAVE +1EEC ; Uppercase # L& LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE +1EEE ; Uppercase # L& LATIN CAPITAL LETTER U WITH HORN AND TILDE +1EF0 ; Uppercase # L& LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW +1EF2 ; Uppercase # L& LATIN CAPITAL LETTER Y WITH GRAVE +1EF4 ; Uppercase # L& LATIN CAPITAL LETTER Y WITH DOT BELOW +1EF6 ; Uppercase # L& LATIN CAPITAL LETTER Y WITH HOOK ABOVE +1EF8 ; Uppercase # L& LATIN CAPITAL LETTER Y WITH TILDE +1EFA ; Uppercase # L& LATIN CAPITAL LETTER MIDDLE-WELSH LL +1EFC ; Uppercase # L& LATIN CAPITAL LETTER MIDDLE-WELSH V +1EFE ; Uppercase # L& LATIN CAPITAL LETTER Y WITH LOOP +1F08..1F0F ; Uppercase # L& [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F18..1F1D ; Uppercase # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F28..1F2F ; Uppercase # L& [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI +1F38..1F3F ; Uppercase # L& [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI +1F48..1F4D ; Uppercase # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F59 ; Uppercase # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; Uppercase # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; Uppercase # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F ; Uppercase # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F68..1F6F ; Uppercase # L& [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI +1FB8..1FBB ; Uppercase # L& [4] GREEK CAPITAL LETTER ALPHA WITH VRACHY..GREEK CAPITAL LETTER ALPHA WITH OXIA +1FC8..1FCB ; Uppercase # L& [4] GREEK CAPITAL LETTER EPSILON WITH VARIA..GREEK CAPITAL LETTER ETA WITH OXIA +1FD8..1FDB ; Uppercase # L& [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA +1FE8..1FEC ; Uppercase # L& [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FF8..1FFB ; Uppercase # L& [4] GREEK CAPITAL LETTER OMICRON WITH VARIA..GREEK CAPITAL LETTER OMEGA WITH OXIA +2102 ; Uppercase # L& DOUBLE-STRUCK CAPITAL C +2107 ; Uppercase # L& EULER CONSTANT +210B..210D ; Uppercase # L& [3] SCRIPT CAPITAL H..DOUBLE-STRUCK CAPITAL H +2110..2112 ; Uppercase # L& [3] SCRIPT CAPITAL I..SCRIPT CAPITAL L +2115 ; Uppercase # L& DOUBLE-STRUCK CAPITAL N +2119..211D ; Uppercase # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R +2124 ; Uppercase # L& DOUBLE-STRUCK CAPITAL Z +2126 ; Uppercase # L& OHM SIGN +2128 ; Uppercase # L& BLACK-LETTER CAPITAL Z +212A..212D ; Uppercase # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C +2130..2133 ; Uppercase # L& [4] SCRIPT CAPITAL E..SCRIPT CAPITAL M +213E..213F ; Uppercase # L& [2] DOUBLE-STRUCK CAPITAL GAMMA..DOUBLE-STRUCK CAPITAL PI +2145 ; Uppercase # L& DOUBLE-STRUCK ITALIC CAPITAL D +2160..216F ; Uppercase # Nl [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND +2183 ; Uppercase # L& ROMAN NUMERAL REVERSED ONE HUNDRED +24B6..24CF ; Uppercase # So [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z +2C00..2C2F ; Uppercase # L& [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI +2C60 ; Uppercase # L& LATIN CAPITAL LETTER L WITH DOUBLE BAR +2C62..2C64 ; Uppercase # L& [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL +2C67 ; Uppercase # L& LATIN CAPITAL LETTER H WITH DESCENDER +2C69 ; Uppercase # L& LATIN CAPITAL LETTER K WITH DESCENDER +2C6B ; Uppercase # L& LATIN CAPITAL LETTER Z WITH DESCENDER +2C6D..2C70 ; Uppercase # L& [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA +2C72 ; Uppercase # L& LATIN CAPITAL LETTER W WITH HOOK +2C75 ; Uppercase # L& LATIN CAPITAL LETTER HALF H +2C7E..2C80 ; Uppercase # L& [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA +2C82 ; Uppercase # L& COPTIC CAPITAL LETTER VIDA +2C84 ; Uppercase # L& COPTIC CAPITAL LETTER GAMMA +2C86 ; Uppercase # L& COPTIC CAPITAL LETTER DALDA +2C88 ; Uppercase # L& COPTIC CAPITAL LETTER EIE +2C8A ; Uppercase # L& COPTIC CAPITAL LETTER SOU +2C8C ; Uppercase # L& COPTIC CAPITAL LETTER ZATA +2C8E ; Uppercase # L& COPTIC CAPITAL LETTER HATE +2C90 ; Uppercase # L& COPTIC CAPITAL LETTER THETHE +2C92 ; Uppercase # L& COPTIC CAPITAL LETTER IAUDA +2C94 ; Uppercase # L& COPTIC CAPITAL LETTER KAPA +2C96 ; Uppercase # L& COPTIC CAPITAL LETTER LAULA +2C98 ; Uppercase # L& COPTIC CAPITAL LETTER MI +2C9A ; Uppercase # L& COPTIC CAPITAL LETTER NI +2C9C ; Uppercase # L& COPTIC CAPITAL LETTER KSI +2C9E ; Uppercase # L& COPTIC CAPITAL LETTER O +2CA0 ; Uppercase # L& COPTIC CAPITAL LETTER PI +2CA2 ; Uppercase # L& COPTIC CAPITAL LETTER RO +2CA4 ; Uppercase # L& COPTIC CAPITAL LETTER SIMA +2CA6 ; Uppercase # L& COPTIC CAPITAL LETTER TAU +2CA8 ; Uppercase # L& COPTIC CAPITAL LETTER UA +2CAA ; Uppercase # L& COPTIC CAPITAL LETTER FI +2CAC ; Uppercase # L& COPTIC CAPITAL LETTER KHI +2CAE ; Uppercase # L& COPTIC CAPITAL LETTER PSI +2CB0 ; Uppercase # L& COPTIC CAPITAL LETTER OOU +2CB2 ; Uppercase # L& COPTIC CAPITAL LETTER DIALECT-P ALEF +2CB4 ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC AIN +2CB6 ; Uppercase # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE +2CB8 ; Uppercase # L& COPTIC CAPITAL LETTER DIALECT-P KAPA +2CBA ; Uppercase # L& COPTIC CAPITAL LETTER DIALECT-P NI +2CBC ; Uppercase # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI +2CBE ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC OOU +2CC0 ; Uppercase # L& COPTIC CAPITAL LETTER SAMPI +2CC2 ; Uppercase # L& COPTIC CAPITAL LETTER CROSSED SHEI +2CC4 ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC SHEI +2CC6 ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC ESH +2CC8 ; Uppercase # L& COPTIC CAPITAL LETTER AKHMIMIC KHEI +2CCA ; Uppercase # L& COPTIC CAPITAL LETTER DIALECT-P HORI +2CCC ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC HORI +2CCE ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC HA +2CD0 ; Uppercase # L& COPTIC CAPITAL LETTER L-SHAPED HA +2CD2 ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC HEI +2CD4 ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC HAT +2CD6 ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC GANGIA +2CD8 ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC DJA +2CDA ; Uppercase # L& COPTIC CAPITAL LETTER OLD COPTIC SHIMA +2CDC ; Uppercase # L& COPTIC CAPITAL LETTER OLD NUBIAN SHIMA +2CDE ; Uppercase # L& COPTIC CAPITAL LETTER OLD NUBIAN NGI +2CE0 ; Uppercase # L& COPTIC CAPITAL LETTER OLD NUBIAN NYI +2CE2 ; Uppercase # L& COPTIC CAPITAL LETTER OLD NUBIAN WAU +2CEB ; Uppercase # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI +2CED ; Uppercase # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA +2CF2 ; Uppercase # L& COPTIC CAPITAL LETTER BOHAIRIC KHEI +A640 ; Uppercase # L& CYRILLIC CAPITAL LETTER ZEMLYA +A642 ; Uppercase # L& CYRILLIC CAPITAL LETTER DZELO +A644 ; Uppercase # L& CYRILLIC CAPITAL LETTER REVERSED DZE +A646 ; Uppercase # L& CYRILLIC CAPITAL LETTER IOTA +A648 ; Uppercase # L& CYRILLIC CAPITAL LETTER DJERV +A64A ; Uppercase # L& CYRILLIC CAPITAL LETTER MONOGRAPH UK +A64C ; Uppercase # L& CYRILLIC CAPITAL LETTER BROAD OMEGA +A64E ; Uppercase # L& CYRILLIC CAPITAL LETTER NEUTRAL YER +A650 ; Uppercase # L& CYRILLIC CAPITAL LETTER YERU WITH BACK YER +A652 ; Uppercase # L& CYRILLIC CAPITAL LETTER IOTIFIED YAT +A654 ; Uppercase # L& CYRILLIC CAPITAL LETTER REVERSED YU +A656 ; Uppercase # L& CYRILLIC CAPITAL LETTER IOTIFIED A +A658 ; Uppercase # L& CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS +A65A ; Uppercase # L& CYRILLIC CAPITAL LETTER BLENDED YUS +A65C ; Uppercase # L& CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS +A65E ; Uppercase # L& CYRILLIC CAPITAL LETTER YN +A660 ; Uppercase # L& CYRILLIC CAPITAL LETTER REVERSED TSE +A662 ; Uppercase # L& CYRILLIC CAPITAL LETTER SOFT DE +A664 ; Uppercase # L& CYRILLIC CAPITAL LETTER SOFT EL +A666 ; Uppercase # L& CYRILLIC CAPITAL LETTER SOFT EM +A668 ; Uppercase # L& CYRILLIC CAPITAL LETTER MONOCULAR O +A66A ; Uppercase # L& CYRILLIC CAPITAL LETTER BINOCULAR O +A66C ; Uppercase # L& CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O +A680 ; Uppercase # L& CYRILLIC CAPITAL LETTER DWE +A682 ; Uppercase # L& CYRILLIC CAPITAL LETTER DZWE +A684 ; Uppercase # L& CYRILLIC CAPITAL LETTER ZHWE +A686 ; Uppercase # L& CYRILLIC CAPITAL LETTER CCHE +A688 ; Uppercase # L& CYRILLIC CAPITAL LETTER DZZE +A68A ; Uppercase # L& CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK +A68C ; Uppercase # L& CYRILLIC CAPITAL LETTER TWE +A68E ; Uppercase # L& CYRILLIC CAPITAL LETTER TSWE +A690 ; Uppercase # L& CYRILLIC CAPITAL LETTER TSSE +A692 ; Uppercase # L& CYRILLIC CAPITAL LETTER TCHE +A694 ; Uppercase # L& CYRILLIC CAPITAL LETTER HWE +A696 ; Uppercase # L& CYRILLIC CAPITAL LETTER SHWE +A698 ; Uppercase # L& CYRILLIC CAPITAL LETTER DOUBLE O +A69A ; Uppercase # L& CYRILLIC CAPITAL LETTER CROSSED O +A722 ; Uppercase # L& LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF +A724 ; Uppercase # L& LATIN CAPITAL LETTER EGYPTOLOGICAL AIN +A726 ; Uppercase # L& LATIN CAPITAL LETTER HENG +A728 ; Uppercase # L& LATIN CAPITAL LETTER TZ +A72A ; Uppercase # L& LATIN CAPITAL LETTER TRESILLO +A72C ; Uppercase # L& LATIN CAPITAL LETTER CUATRILLO +A72E ; Uppercase # L& LATIN CAPITAL LETTER CUATRILLO WITH COMMA +A732 ; Uppercase # L& LATIN CAPITAL LETTER AA +A734 ; Uppercase # L& LATIN CAPITAL LETTER AO +A736 ; Uppercase # L& LATIN CAPITAL LETTER AU +A738 ; Uppercase # L& LATIN CAPITAL LETTER AV +A73A ; Uppercase # L& LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR +A73C ; Uppercase # L& LATIN CAPITAL LETTER AY +A73E ; Uppercase # L& LATIN CAPITAL LETTER REVERSED C WITH DOT +A740 ; Uppercase # L& LATIN CAPITAL LETTER K WITH STROKE +A742 ; Uppercase # L& LATIN CAPITAL LETTER K WITH DIAGONAL STROKE +A744 ; Uppercase # L& LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE +A746 ; Uppercase # L& LATIN CAPITAL LETTER BROKEN L +A748 ; Uppercase # L& LATIN CAPITAL LETTER L WITH HIGH STROKE +A74A ; Uppercase # L& LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY +A74C ; Uppercase # L& LATIN CAPITAL LETTER O WITH LOOP +A74E ; Uppercase # L& LATIN CAPITAL LETTER OO +A750 ; Uppercase # L& LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER +A752 ; Uppercase # L& LATIN CAPITAL LETTER P WITH FLOURISH +A754 ; Uppercase # L& LATIN CAPITAL LETTER P WITH SQUIRREL TAIL +A756 ; Uppercase # L& LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER +A758 ; Uppercase # L& LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE +A75A ; Uppercase # L& LATIN CAPITAL LETTER R ROTUNDA +A75C ; Uppercase # L& LATIN CAPITAL LETTER RUM ROTUNDA +A75E ; Uppercase # L& LATIN CAPITAL LETTER V WITH DIAGONAL STROKE +A760 ; Uppercase # L& LATIN CAPITAL LETTER VY +A762 ; Uppercase # L& LATIN CAPITAL LETTER VISIGOTHIC Z +A764 ; Uppercase # L& LATIN CAPITAL LETTER THORN WITH STROKE +A766 ; Uppercase # L& LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER +A768 ; Uppercase # L& LATIN CAPITAL LETTER VEND +A76A ; Uppercase # L& LATIN CAPITAL LETTER ET +A76C ; Uppercase # L& LATIN CAPITAL LETTER IS +A76E ; Uppercase # L& LATIN CAPITAL LETTER CON +A779 ; Uppercase # L& LATIN CAPITAL LETTER INSULAR D +A77B ; Uppercase # L& LATIN CAPITAL LETTER INSULAR F +A77D..A77E ; Uppercase # L& [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G +A780 ; Uppercase # L& LATIN CAPITAL LETTER TURNED L +A782 ; Uppercase # L& LATIN CAPITAL LETTER INSULAR R +A784 ; Uppercase # L& LATIN CAPITAL LETTER INSULAR S +A786 ; Uppercase # L& LATIN CAPITAL LETTER INSULAR T +A78B ; Uppercase # L& LATIN CAPITAL LETTER SALTILLO +A78D ; Uppercase # L& LATIN CAPITAL LETTER TURNED H +A790 ; Uppercase # L& LATIN CAPITAL LETTER N WITH DESCENDER +A792 ; Uppercase # L& LATIN CAPITAL LETTER C WITH BAR +A796 ; Uppercase # L& LATIN CAPITAL LETTER B WITH FLOURISH +A798 ; Uppercase # L& LATIN CAPITAL LETTER F WITH STROKE +A79A ; Uppercase # L& LATIN CAPITAL LETTER VOLAPUK AE +A79C ; Uppercase # L& LATIN CAPITAL LETTER VOLAPUK OE +A79E ; Uppercase # L& LATIN CAPITAL LETTER VOLAPUK UE +A7A0 ; Uppercase # L& LATIN CAPITAL LETTER G WITH OBLIQUE STROKE +A7A2 ; Uppercase # L& LATIN CAPITAL LETTER K WITH OBLIQUE STROKE +A7A4 ; Uppercase # L& LATIN CAPITAL LETTER N WITH OBLIQUE STROKE +A7A6 ; Uppercase # L& LATIN CAPITAL LETTER R WITH OBLIQUE STROKE +A7A8 ; Uppercase # L& LATIN CAPITAL LETTER S WITH OBLIQUE STROKE +A7AA..A7AE ; Uppercase # L& [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I +A7B0..A7B4 ; Uppercase # L& [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA +A7B6 ; Uppercase # L& LATIN CAPITAL LETTER OMEGA +A7B8 ; Uppercase # L& LATIN CAPITAL LETTER U WITH STROKE +A7BA ; Uppercase # L& LATIN CAPITAL LETTER GLOTTAL A +A7BC ; Uppercase # L& LATIN CAPITAL LETTER GLOTTAL I +A7BE ; Uppercase # L& LATIN CAPITAL LETTER GLOTTAL U +A7C0 ; Uppercase # L& LATIN CAPITAL LETTER OLD POLISH O +A7C2 ; Uppercase # L& LATIN CAPITAL LETTER ANGLICANA W +A7C4..A7C7 ; Uppercase # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY +A7C9 ; Uppercase # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +A7CB..A7CC ; Uppercase # L& [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; Uppercase # L& LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE +A7D0 ; Uppercase # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; Uppercase # L& LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; Uppercase # L& LATIN CAPITAL LETTER DOUBLE WYNN +A7D6 ; Uppercase # L& LATIN CAPITAL LETTER MIDDLE SCOTS S +A7D8 ; Uppercase # L& LATIN CAPITAL LETTER SIGMOID S +A7DA ; Uppercase # L& LATIN CAPITAL LETTER LAMBDA +A7DC ; Uppercase # L& LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F5 ; Uppercase # L& LATIN CAPITAL LETTER REVERSED HALF H +FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +10400..10427 ; Uppercase # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW +104B0..104D3 ; Uppercase # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +10570..1057A ; Uppercase # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Uppercase # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Uppercase # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Uppercase # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10C80..10CB2 ; Uppercase # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10D50..10D65 ; Uppercase # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +118A0..118BF ; Uppercase # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO +16E40..16E5F ; Uppercase # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y +16EA0..16EB8 ; Uppercase # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +1D400..1D419 ; Uppercase # L& [26] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL BOLD CAPITAL Z +1D434..1D44D ; Uppercase # L& [26] MATHEMATICAL ITALIC CAPITAL A..MATHEMATICAL ITALIC CAPITAL Z +1D468..1D481 ; Uppercase # L& [26] MATHEMATICAL BOLD ITALIC CAPITAL A..MATHEMATICAL BOLD ITALIC CAPITAL Z +1D49C ; Uppercase # L& MATHEMATICAL SCRIPT CAPITAL A +1D49E..1D49F ; Uppercase # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; Uppercase # L& MATHEMATICAL SCRIPT CAPITAL G +1D4A5..1D4A6 ; Uppercase # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K +1D4A9..1D4AC ; Uppercase # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q +1D4AE..1D4B5 ; Uppercase # L& [8] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT CAPITAL Z +1D4D0..1D4E9 ; Uppercase # L& [26] MATHEMATICAL BOLD SCRIPT CAPITAL A..MATHEMATICAL BOLD SCRIPT CAPITAL Z +1D504..1D505 ; Uppercase # L& [2] MATHEMATICAL FRAKTUR CAPITAL A..MATHEMATICAL FRAKTUR CAPITAL B +1D507..1D50A ; Uppercase # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G +1D50D..1D514 ; Uppercase # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q +1D516..1D51C ; Uppercase # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y +1D538..1D539 ; Uppercase # L& [2] MATHEMATICAL DOUBLE-STRUCK CAPITAL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B..1D53E ; Uppercase # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540..1D544 ; Uppercase # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; Uppercase # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A..1D550 ; Uppercase # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D56C..1D585 ; Uppercase # L& [26] MATHEMATICAL BOLD FRAKTUR CAPITAL A..MATHEMATICAL BOLD FRAKTUR CAPITAL Z +1D5A0..1D5B9 ; Uppercase # L& [26] MATHEMATICAL SANS-SERIF CAPITAL A..MATHEMATICAL SANS-SERIF CAPITAL Z +1D5D4..1D5ED ; Uppercase # L& [26] MATHEMATICAL SANS-SERIF BOLD CAPITAL A..MATHEMATICAL SANS-SERIF BOLD CAPITAL Z +1D608..1D621 ; Uppercase # L& [26] MATHEMATICAL SANS-SERIF ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z +1D63C..1D655 ; Uppercase # L& [26] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z +1D670..1D689 ; Uppercase # L& [26] MATHEMATICAL MONOSPACE CAPITAL A..MATHEMATICAL MONOSPACE CAPITAL Z +1D6A8..1D6C0 ; Uppercase # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA +1D6E2..1D6FA ; Uppercase # L& [25] MATHEMATICAL ITALIC CAPITAL ALPHA..MATHEMATICAL ITALIC CAPITAL OMEGA +1D71C..1D734 ; Uppercase # L& [25] MATHEMATICAL BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D756..1D76E ; Uppercase # L& [25] MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D790..1D7A8 ; Uppercase # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7CA ; Uppercase # L& MATHEMATICAL BOLD CAPITAL DIGAMMA +1E900..1E921 ; Uppercase # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA +1F130..1F149 ; Uppercase # So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z +1F150..1F169 ; Uppercase # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z +1F170..1F189 ; Uppercase # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z + +# Total code points: 2006 + +# ================================================ + +# Derived Property: Cased (Cased) +# As defined by Unicode Standard Definition D135 +# C has the Lowercase or Uppercase property or has a General_Category value of Titlecase_Letter. + +0041..005A ; Cased # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z +0061..007A ; Cased # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z +00AA ; Cased # Lo FEMININE ORDINAL INDICATOR +00B5 ; Cased # L& MICRO SIGN +00BA ; Cased # Lo MASCULINE ORDINAL INDICATOR +00C0..00D6 ; Cased # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D8..00F6 ; Cased # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS +00F8..01BA ; Cased # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL +01BC..01BF ; Cased # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN +01C4..0293 ; Cased # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL +0296..02AF ; Cased # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +02B0..02B8 ; Cased # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y +02C0..02C1 ; Cased # Lm [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP +02E0..02E4 ; Cased # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +0345 ; Cased # Mn COMBINING GREEK YPOGEGRAMMENI +0370..0373 ; Cased # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI +0376..0377 ; Cased # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +037A ; Cased # Lm GREEK YPOGEGRAMMENI +037B..037D ; Cased # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +037F ; Cased # L& GREEK CAPITAL LETTER YOT +0386 ; Cased # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0388..038A ; Cased # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; Cased # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..03A1 ; Cased # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO +03A3..03F5 ; Cased # L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL +03F7..0481 ; Cased # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA +048A..052F ; Cased # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER +0531..0556 ; Cased # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH +0560..0588 ; Cased # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE +10A0..10C5 ; Cased # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE +10C7 ; Cased # L& GEORGIAN CAPITAL LETTER YN +10CD ; Cased # L& GEORGIAN CAPITAL LETTER AEN +10D0..10FA ; Cased # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN +10FC ; Cased # Lm MODIFIER LETTER GEORGIAN NAR +10FD..10FF ; Cased # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN +13A0..13F5 ; Cased # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV +13F8..13FD ; Cased # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV +1C80..1C8A ; Cased # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE +1C90..1CBA ; Cased # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN +1CBD..1CBF ; Cased # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN +1D00..1D2B ; Cased # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL +1D2C..1D6A ; Cased # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI +1D6B..1D77 ; Cased # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G +1D78 ; Cased # Lm MODIFIER LETTER CYRILLIC EN +1D79..1D9A ; Cased # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK +1D9B..1DBF ; Cased # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA +1E00..1F15 ; Cased # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18..1F1D ; Cased # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F45 ; Cased # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48..1F4D ; Cased # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; Cased # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59 ; Cased # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; Cased # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; Cased # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F..1F7D ; Cased # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1FB4 ; Cased # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FBC ; Cased # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBE ; Cased # L& GREEK PROSGEGRAMMENI +1FC2..1FC4 ; Cased # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FCC ; Cased # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FD0..1FD3 ; Cased # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FDB ; Cased # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA +1FE0..1FEC ; Cased # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FF2..1FF4 ; Cased # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FFC ; Cased # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +2071 ; Cased # Lm SUPERSCRIPT LATIN SMALL LETTER I +207F ; Cased # Lm SUPERSCRIPT LATIN SMALL LETTER N +2090..209C ; Cased # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T +2102 ; Cased # L& DOUBLE-STRUCK CAPITAL C +2107 ; Cased # L& EULER CONSTANT +210A..2113 ; Cased # L& [10] SCRIPT SMALL G..SCRIPT SMALL L +2115 ; Cased # L& DOUBLE-STRUCK CAPITAL N +2119..211D ; Cased # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R +2124 ; Cased # L& DOUBLE-STRUCK CAPITAL Z +2126 ; Cased # L& OHM SIGN +2128 ; Cased # L& BLACK-LETTER CAPITAL Z +212A..212D ; Cased # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C +212F..2134 ; Cased # L& [6] SCRIPT SMALL E..SCRIPT SMALL O +2139 ; Cased # L& INFORMATION SOURCE +213C..213F ; Cased # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI +2145..2149 ; Cased # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J +214E ; Cased # L& TURNED SMALL F +2160..217F ; Cased # Nl [32] ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND +2183..2184 ; Cased # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C +24B6..24E9 ; Cased # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z +2C00..2C7B ; Cased # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E +2C7C..2C7D ; Cased # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V +2C7E..2CE4 ; Cased # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI +2CEB..2CEE ; Cased # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA +2CF2..2CF3 ; Cased # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI +2D00..2D25 ; Cased # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE +2D27 ; Cased # L& GEORGIAN SMALL LETTER YN +2D2D ; Cased # L& GEORGIAN SMALL LETTER AEN +A640..A66D ; Cased # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O +A680..A69B ; Cased # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O +A69C..A69D ; Cased # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN +A722..A76F ; Cased # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON +A770 ; Cased # Lm MODIFIER LETTER US +A771..A787 ; Cased # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T +A78B..A78E ; Cased # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT +A790..A7DC ; Cased # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; Cased # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q +A7F5..A7F6 ; Cased # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H +A7F8..A7F9 ; Cased # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE +A7FA ; Cased # L& LATIN LETTER SMALL CAPITAL TURNED M +AB30..AB5A ; Cased # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG +AB5C..AB5F ; Cased # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK +AB60..AB68 ; Cased # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE +AB69 ; Cased # Lm MODIFIER LETTER SMALL TURNED W +AB70..ABBF ; Cased # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA +FB00..FB06 ; Cased # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; Cased # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FF21..FF3A ; Cased # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +10400..1044F ; Cased # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW +104B0..104D3 ; Cased # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +104D8..104FB ; Cased # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10570..1057A ; Cased # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Cased # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Cased # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Cased # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; Cased # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Cased # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Cased # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Cased # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +10780 ; Cased # Lm MODIFIER LETTER SMALL CAPITAL AA +10783..10785 ; Cased # Lm [3] MODIFIER LETTER SMALL AE..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Cased # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Cased # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL +10C80..10CB2 ; Cased # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10CC0..10CF2 ; Cased # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10D50..10D65 ; Cased # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D70..10D85 ; Cased # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA +118A0..118DF ; Cased # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO +16E40..16E7F ; Cased # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; Cased # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; Cased # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY +1D400..1D454 ; Cased # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G +1D456..1D49C ; Cased # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A +1D49E..1D49F ; Cased # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; Cased # L& MATHEMATICAL SCRIPT CAPITAL G +1D4A5..1D4A6 ; Cased # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K +1D4A9..1D4AC ; Cased # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q +1D4AE..1D4B9 ; Cased # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D +1D4BB ; Cased # L& MATHEMATICAL SCRIPT SMALL F +1D4BD..1D4C3 ; Cased # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N +1D4C5..1D505 ; Cased # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B +1D507..1D50A ; Cased # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G +1D50D..1D514 ; Cased # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q +1D516..1D51C ; Cased # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y +1D51E..1D539 ; Cased # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B..1D53E ; Cased # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540..1D544 ; Cased # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; Cased # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A..1D550 ; Cased # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D552..1D6A5 ; Cased # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J +1D6A8..1D6C0 ; Cased # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA +1D6C2..1D6DA ; Cased # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA +1D6DC..1D6FA ; Cased # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA +1D6FC..1D714 ; Cased # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA +1D716..1D734 ; Cased # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D736..1D74E ; Cased # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D750..1D76E ; Cased # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D770..1D788 ; Cased # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D78A..1D7A8 ; Cased # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7AA..1D7C2 ; Cased # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C4..1D7CB ; Cased # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1DF00..1DF09 ; Cased # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0B..1DF1E ; Cased # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL +1DF25..1DF2A ; Cased # L& [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK +1E030..1E06D ; Cased # Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE +1E900..1E943 ; Cased # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA +1F130..1F149 ; Cased # So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z +1F150..1F169 ; Cased # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z +1F170..1F189 ; Cased # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z + +# Total code points: 4632 + +# ================================================ + +# Derived Property: Case_Ignorable (CI) +# As defined by Unicode Standard Definition D136 +# C is defined to be case-ignorable if +# Word_Break(C) = MidLetter or MidNumLet or Single_Quote, or +# General_Category(C) = Nonspacing_Mark (Mn), Enclosing_Mark (Me), Format (Cf), Modifier_Letter (Lm), or Modifier_Symbol (Sk). + +0027 ; Case_Ignorable # Po APOSTROPHE +002E ; Case_Ignorable # Po FULL STOP +003A ; Case_Ignorable # Po COLON +005E ; Case_Ignorable # Sk CIRCUMFLEX ACCENT +0060 ; Case_Ignorable # Sk GRAVE ACCENT +00A8 ; Case_Ignorable # Sk DIAERESIS +00AD ; Case_Ignorable # Cf SOFT HYPHEN +00AF ; Case_Ignorable # Sk MACRON +00B4 ; Case_Ignorable # Sk ACUTE ACCENT +00B7 ; Case_Ignorable # Po MIDDLE DOT +00B8 ; Case_Ignorable # Sk CEDILLA +02B0..02C1 ; Case_Ignorable # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP +02C2..02C5 ; Case_Ignorable # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD +02C6..02D1 ; Case_Ignorable # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON +02D2..02DF ; Case_Ignorable # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT +02E0..02E4 ; Case_Ignorable # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +02E5..02EB ; Case_Ignorable # Sk [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK +02EC ; Case_Ignorable # Lm MODIFIER LETTER VOICING +02ED ; Case_Ignorable # Sk MODIFIER LETTER UNASPIRATED +02EE ; Case_Ignorable # Lm MODIFIER LETTER DOUBLE APOSTROPHE +02EF..02FF ; Case_Ignorable # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW +0300..036F ; Case_Ignorable # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X +0374 ; Case_Ignorable # Lm GREEK NUMERAL SIGN +0375 ; Case_Ignorable # Sk GREEK LOWER NUMERAL SIGN +037A ; Case_Ignorable # Lm GREEK YPOGEGRAMMENI +0384..0385 ; Case_Ignorable # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS +0387 ; Case_Ignorable # Po GREEK ANO TELEIA +0483..0487 ; Case_Ignorable # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE +0488..0489 ; Case_Ignorable # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN +0559 ; Case_Ignorable # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING +055F ; Case_Ignorable # Po ARMENIAN ABBREVIATION MARK +0591..05BD ; Case_Ignorable # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG +05BF ; Case_Ignorable # Mn HEBREW POINT RAFE +05C1..05C2 ; Case_Ignorable # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT +05C4..05C5 ; Case_Ignorable # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C7 ; Case_Ignorable # Mn HEBREW POINT QAMATS QATAN +05F4 ; Case_Ignorable # Po HEBREW PUNCTUATION GERSHAYIM +0600..0605 ; Case_Ignorable # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE +0610..061A ; Case_Ignorable # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA +061C ; Case_Ignorable # Cf ARABIC LETTER MARK +0640 ; Case_Ignorable # Lm ARABIC TATWEEL +064B..065F ; Case_Ignorable # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW +0670 ; Case_Ignorable # Mn ARABIC LETTER SUPERSCRIPT ALEF +06D6..06DC ; Case_Ignorable # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN +06DD ; Case_Ignorable # Cf ARABIC END OF AYAH +06DF..06E4 ; Case_Ignorable # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA +06E5..06E6 ; Case_Ignorable # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH +06E7..06E8 ; Case_Ignorable # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON +06EA..06ED ; Case_Ignorable # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM +070F ; Case_Ignorable # Cf SYRIAC ABBREVIATION MARK +0711 ; Case_Ignorable # Mn SYRIAC LETTER SUPERSCRIPT ALAPH +0730..074A ; Case_Ignorable # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH +07A6..07B0 ; Case_Ignorable # Mn [11] THAANA ABAFILI..THAANA SUKUN +07EB..07F3 ; Case_Ignorable # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE +07F4..07F5 ; Case_Ignorable # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE +07FA ; Case_Ignorable # Lm NKO LAJANYALAN +07FD ; Case_Ignorable # Mn NKO DANTAYALAN +0816..0819 ; Case_Ignorable # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH +081A ; Case_Ignorable # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT +081B..0823 ; Case_Ignorable # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A +0824 ; Case_Ignorable # Lm SAMARITAN MODIFIER LETTER SHORT A +0825..0827 ; Case_Ignorable # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U +0828 ; Case_Ignorable # Lm SAMARITAN MODIFIER LETTER I +0829..082D ; Case_Ignorable # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA +0859..085B ; Case_Ignorable # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK +0888 ; Case_Ignorable # Sk ARABIC RAISED ROUND DOT +0890..0891 ; Case_Ignorable # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE +0897..089F ; Case_Ignorable # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA +08C9 ; Case_Ignorable # Lm ARABIC SMALL FARSI YEH +08CA..08E1 ; Case_Ignorable # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA +08E2 ; Case_Ignorable # Cf ARABIC DISPUTED END OF AYAH +08E3..0902 ; Case_Ignorable # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA +093A ; Case_Ignorable # Mn DEVANAGARI VOWEL SIGN OE +093C ; Case_Ignorable # Mn DEVANAGARI SIGN NUKTA +0941..0948 ; Case_Ignorable # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI +094D ; Case_Ignorable # Mn DEVANAGARI SIGN VIRAMA +0951..0957 ; Case_Ignorable # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE +0962..0963 ; Case_Ignorable # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL +0971 ; Case_Ignorable # Lm DEVANAGARI SIGN HIGH SPACING DOT +0981 ; Case_Ignorable # Mn BENGALI SIGN CANDRABINDU +09BC ; Case_Ignorable # Mn BENGALI SIGN NUKTA +09C1..09C4 ; Case_Ignorable # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR +09CD ; Case_Ignorable # Mn BENGALI SIGN VIRAMA +09E2..09E3 ; Case_Ignorable # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL +09FE ; Case_Ignorable # Mn BENGALI SANDHI MARK +0A01..0A02 ; Case_Ignorable # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI +0A3C ; Case_Ignorable # Mn GURMUKHI SIGN NUKTA +0A41..0A42 ; Case_Ignorable # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU +0A47..0A48 ; Case_Ignorable # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI +0A4B..0A4D ; Case_Ignorable # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA +0A51 ; Case_Ignorable # Mn GURMUKHI SIGN UDAAT +0A70..0A71 ; Case_Ignorable # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK +0A75 ; Case_Ignorable # Mn GURMUKHI SIGN YAKASH +0A81..0A82 ; Case_Ignorable # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA +0ABC ; Case_Ignorable # Mn GUJARATI SIGN NUKTA +0AC1..0AC5 ; Case_Ignorable # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E +0AC7..0AC8 ; Case_Ignorable # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI +0ACD ; Case_Ignorable # Mn GUJARATI SIGN VIRAMA +0AE2..0AE3 ; Case_Ignorable # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL +0AFA..0AFF ; Case_Ignorable # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE +0B01 ; Case_Ignorable # Mn ORIYA SIGN CANDRABINDU +0B3C ; Case_Ignorable # Mn ORIYA SIGN NUKTA +0B3F ; Case_Ignorable # Mn ORIYA VOWEL SIGN I +0B41..0B44 ; Case_Ignorable # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR +0B4D ; Case_Ignorable # Mn ORIYA SIGN VIRAMA +0B55..0B56 ; Case_Ignorable # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK +0B62..0B63 ; Case_Ignorable # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL +0B82 ; Case_Ignorable # Mn TAMIL SIGN ANUSVARA +0BC0 ; Case_Ignorable # Mn TAMIL VOWEL SIGN II +0BCD ; Case_Ignorable # Mn TAMIL SIGN VIRAMA +0C00 ; Case_Ignorable # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE +0C04 ; Case_Ignorable # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE +0C3C ; Case_Ignorable # Mn TELUGU SIGN NUKTA +0C3E..0C40 ; Case_Ignorable # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II +0C46..0C48 ; Case_Ignorable # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI +0C4A..0C4D ; Case_Ignorable # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA +0C55..0C56 ; Case_Ignorable # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK +0C62..0C63 ; Case_Ignorable # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL +0C81 ; Case_Ignorable # Mn KANNADA SIGN CANDRABINDU +0CBC ; Case_Ignorable # Mn KANNADA SIGN NUKTA +0CBF ; Case_Ignorable # Mn KANNADA VOWEL SIGN I +0CC6 ; Case_Ignorable # Mn KANNADA VOWEL SIGN E +0CCC..0CCD ; Case_Ignorable # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA +0CE2..0CE3 ; Case_Ignorable # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL +0D00..0D01 ; Case_Ignorable # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU +0D3B..0D3C ; Case_Ignorable # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA +0D41..0D44 ; Case_Ignorable # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR +0D4D ; Case_Ignorable # Mn MALAYALAM SIGN VIRAMA +0D62..0D63 ; Case_Ignorable # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL +0D81 ; Case_Ignorable # Mn SINHALA SIGN CANDRABINDU +0DCA ; Case_Ignorable # Mn SINHALA SIGN AL-LAKUNA +0DD2..0DD4 ; Case_Ignorable # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA +0DD6 ; Case_Ignorable # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA +0E31 ; Case_Ignorable # Mn THAI CHARACTER MAI HAN-AKAT +0E34..0E3A ; Case_Ignorable # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU +0E46 ; Case_Ignorable # Lm THAI CHARACTER MAIYAMOK +0E47..0E4E ; Case_Ignorable # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN +0EB1 ; Case_Ignorable # Mn LAO VOWEL SIGN MAI KAN +0EB4..0EBC ; Case_Ignorable # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO +0EC6 ; Case_Ignorable # Lm LAO KO LA +0EC8..0ECE ; Case_Ignorable # Mn [7] LAO TONE MAI EK..LAO YAMAKKAN +0F18..0F19 ; Case_Ignorable # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS +0F35 ; Case_Ignorable # Mn TIBETAN MARK NGAS BZUNG NYI ZLA +0F37 ; Case_Ignorable # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS +0F39 ; Case_Ignorable # Mn TIBETAN MARK TSA -PHRU +0F71..0F7E ; Case_Ignorable # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO +0F80..0F84 ; Case_Ignorable # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA +0F86..0F87 ; Case_Ignorable # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS +0F8D..0F97 ; Case_Ignorable # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA +0F99..0FBC ; Case_Ignorable # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA +0FC6 ; Case_Ignorable # Mn TIBETAN SYMBOL PADMA GDAN +102D..1030 ; Case_Ignorable # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU +1032..1037 ; Case_Ignorable # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW +1039..103A ; Case_Ignorable # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT +103D..103E ; Case_Ignorable # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA +1058..1059 ; Case_Ignorable # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL +105E..1060 ; Case_Ignorable # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA +1071..1074 ; Case_Ignorable # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE +1082 ; Case_Ignorable # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA +1085..1086 ; Case_Ignorable # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y +108D ; Case_Ignorable # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE +109D ; Case_Ignorable # Mn MYANMAR VOWEL SIGN AITON AI +10FC ; Case_Ignorable # Lm MODIFIER LETTER GEORGIAN NAR +135D..135F ; Case_Ignorable # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK +1712..1714 ; Case_Ignorable # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA +1732..1733 ; Case_Ignorable # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1752..1753 ; Case_Ignorable # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U +1772..1773 ; Case_Ignorable # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U +17B4..17B5 ; Case_Ignorable # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA +17B7..17BD ; Case_Ignorable # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA +17C6 ; Case_Ignorable # Mn KHMER SIGN NIKAHIT +17C9..17D3 ; Case_Ignorable # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT +17D7 ; Case_Ignorable # Lm KHMER SIGN LEK TOO +17DD ; Case_Ignorable # Mn KHMER SIGN ATTHACAN +180B..180D ; Case_Ignorable # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180E ; Case_Ignorable # Cf MONGOLIAN VOWEL SEPARATOR +180F ; Case_Ignorable # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR +1843 ; Case_Ignorable # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN +1885..1886 ; Case_Ignorable # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA +18A9 ; Case_Ignorable # Mn MONGOLIAN LETTER ALI GALI DAGALGA +1920..1922 ; Case_Ignorable # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U +1927..1928 ; Case_Ignorable # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O +1932 ; Case_Ignorable # Mn LIMBU SMALL LETTER ANUSVARA +1939..193B ; Case_Ignorable # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I +1A17..1A18 ; Case_Ignorable # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U +1A1B ; Case_Ignorable # Mn BUGINESE VOWEL SIGN AE +1A56 ; Case_Ignorable # Mn TAI THAM CONSONANT SIGN MEDIAL LA +1A58..1A5E ; Case_Ignorable # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA +1A60 ; Case_Ignorable # Mn TAI THAM SIGN SAKOT +1A62 ; Case_Ignorable # Mn TAI THAM VOWEL SIGN MAI SAT +1A65..1A6C ; Case_Ignorable # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW +1A73..1A7C ; Case_Ignorable # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN +1A7F ; Case_Ignorable # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT +1AA7 ; Case_Ignorable # Lm TAI THAM SIGN MAI YAMOK +1AB0..1ABD ; Case_Ignorable # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW +1ABE ; Case_Ignorable # Me COMBINING PARENTHESES OVERLAY +1ABF..1ADD ; Case_Ignorable # Mn [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; Case_Ignorable # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE +1B00..1B03 ; Case_Ignorable # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG +1B34 ; Case_Ignorable # Mn BALINESE SIGN REREKAN +1B36..1B3A ; Case_Ignorable # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA +1B3C ; Case_Ignorable # Mn BALINESE VOWEL SIGN LA LENGA +1B42 ; Case_Ignorable # Mn BALINESE VOWEL SIGN PEPET +1B6B..1B73 ; Case_Ignorable # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG +1B80..1B81 ; Case_Ignorable # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR +1BA2..1BA5 ; Case_Ignorable # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU +1BA8..1BA9 ; Case_Ignorable # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG +1BAB..1BAD ; Case_Ignorable # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA +1BE6 ; Case_Ignorable # Mn BATAK SIGN TOMPI +1BE8..1BE9 ; Case_Ignorable # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE +1BED ; Case_Ignorable # Mn BATAK VOWEL SIGN KARO O +1BEF..1BF1 ; Case_Ignorable # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H +1C2C..1C33 ; Case_Ignorable # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T +1C36..1C37 ; Case_Ignorable # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA +1C78..1C7D ; Case_Ignorable # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD +1CD0..1CD2 ; Case_Ignorable # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA +1CD4..1CE0 ; Case_Ignorable # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA +1CE2..1CE8 ; Case_Ignorable # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL +1CED ; Case_Ignorable # Mn VEDIC SIGN TIRYAK +1CF4 ; Case_Ignorable # Mn VEDIC TONE CANDRA ABOVE +1CF8..1CF9 ; Case_Ignorable # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE +1D2C..1D6A ; Case_Ignorable # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI +1D78 ; Case_Ignorable # Lm MODIFIER LETTER CYRILLIC EN +1D9B..1DBF ; Case_Ignorable # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA +1DC0..1DFF ; Case_Ignorable # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1FBD ; Case_Ignorable # Sk GREEK KORONIS +1FBF..1FC1 ; Case_Ignorable # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI +1FCD..1FCF ; Case_Ignorable # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI +1FDD..1FDF ; Case_Ignorable # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI +1FED..1FEF ; Case_Ignorable # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA +1FFD..1FFE ; Case_Ignorable # Sk [2] GREEK OXIA..GREEK DASIA +200B..200F ; Case_Ignorable # Cf [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK +2018 ; Case_Ignorable # Pi LEFT SINGLE QUOTATION MARK +2019 ; Case_Ignorable # Pf RIGHT SINGLE QUOTATION MARK +2024 ; Case_Ignorable # Po ONE DOT LEADER +2027 ; Case_Ignorable # Po HYPHENATION POINT +202A..202E ; Case_Ignorable # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE +2060..2064 ; Case_Ignorable # Cf [5] WORD JOINER..INVISIBLE PLUS +2066..206F ; Case_Ignorable # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES +2071 ; Case_Ignorable # Lm SUPERSCRIPT LATIN SMALL LETTER I +207F ; Case_Ignorable # Lm SUPERSCRIPT LATIN SMALL LETTER N +2090..209C ; Case_Ignorable # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T +20D0..20DC ; Case_Ignorable # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE +20DD..20E0 ; Case_Ignorable # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH +20E1 ; Case_Ignorable # Mn COMBINING LEFT RIGHT ARROW ABOVE +20E2..20E4 ; Case_Ignorable # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE +20E5..20F0 ; Case_Ignorable # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE +2C7C..2C7D ; Case_Ignorable # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V +2CEF..2CF1 ; Case_Ignorable # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS +2D6F ; Case_Ignorable # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2D7F ; Case_Ignorable # Mn TIFINAGH CONSONANT JOINER +2DE0..2DFF ; Case_Ignorable # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS +2E2F ; Case_Ignorable # Lm VERTICAL TILDE +3005 ; Case_Ignorable # Lm IDEOGRAPHIC ITERATION MARK +302A..302D ; Case_Ignorable # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK +3031..3035 ; Case_Ignorable # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF +303B ; Case_Ignorable # Lm VERTICAL IDEOGRAPHIC ITERATION MARK +3099..309A ; Case_Ignorable # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +309B..309C ; Case_Ignorable # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +309D..309E ; Case_Ignorable # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK +30FC..30FE ; Case_Ignorable # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK +A015 ; Case_Ignorable # Lm YI SYLLABLE WU +A4F8..A4FD ; Case_Ignorable # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU +A60C ; Case_Ignorable # Lm VAI SYLLABLE LENGTHENER +A66F ; Case_Ignorable # Mn COMBINING CYRILLIC VZMET +A670..A672 ; Case_Ignorable # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN +A674..A67D ; Case_Ignorable # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK +A67F ; Case_Ignorable # Lm CYRILLIC PAYEROK +A69C..A69D ; Case_Ignorable # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN +A69E..A69F ; Case_Ignorable # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E +A6F0..A6F1 ; Case_Ignorable # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS +A700..A716 ; Case_Ignorable # Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR +A717..A71F ; Case_Ignorable # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK +A720..A721 ; Case_Ignorable # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE +A770 ; Case_Ignorable # Lm MODIFIER LETTER US +A788 ; Case_Ignorable # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT +A789..A78A ; Case_Ignorable # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN +A7F1..A7F4 ; Case_Ignorable # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q +A7F8..A7F9 ; Case_Ignorable # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE +A802 ; Case_Ignorable # Mn SYLOTI NAGRI SIGN DVISVARA +A806 ; Case_Ignorable # Mn SYLOTI NAGRI SIGN HASANTA +A80B ; Case_Ignorable # Mn SYLOTI NAGRI SIGN ANUSVARA +A825..A826 ; Case_Ignorable # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E +A82C ; Case_Ignorable # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA +A8C4..A8C5 ; Case_Ignorable # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU +A8E0..A8F1 ; Case_Ignorable # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA +A8FF ; Case_Ignorable # Mn DEVANAGARI VOWEL SIGN AY +A926..A92D ; Case_Ignorable # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU +A947..A951 ; Case_Ignorable # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R +A980..A982 ; Case_Ignorable # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR +A9B3 ; Case_Ignorable # Mn JAVANESE SIGN CECAK TELU +A9B6..A9B9 ; Case_Ignorable # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT +A9BC..A9BD ; Case_Ignorable # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET +A9CF ; Case_Ignorable # Lm JAVANESE PANGRANGKEP +A9E5 ; Case_Ignorable # Mn MYANMAR SIGN SHAN SAW +A9E6 ; Case_Ignorable # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION +AA29..AA2E ; Case_Ignorable # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE +AA31..AA32 ; Case_Ignorable # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE +AA35..AA36 ; Case_Ignorable # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA +AA43 ; Case_Ignorable # Mn CHAM CONSONANT SIGN FINAL NG +AA4C ; Case_Ignorable # Mn CHAM CONSONANT SIGN FINAL M +AA70 ; Case_Ignorable # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION +AA7C ; Case_Ignorable # Mn MYANMAR SIGN TAI LAING TONE-2 +AAB0 ; Case_Ignorable # Mn TAI VIET MAI KANG +AAB2..AAB4 ; Case_Ignorable # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U +AAB7..AAB8 ; Case_Ignorable # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA +AABE..AABF ; Case_Ignorable # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK +AAC1 ; Case_Ignorable # Mn TAI VIET TONE MAI THO +AADD ; Case_Ignorable # Lm TAI VIET SYMBOL SAM +AAEC..AAED ; Case_Ignorable # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI +AAF3..AAF4 ; Case_Ignorable # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK +AAF6 ; Case_Ignorable # Mn MEETEI MAYEK VIRAMA +AB5B ; Case_Ignorable # Sk MODIFIER BREVE WITH INVERTED BREVE +AB5C..AB5F ; Case_Ignorable # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK +AB69 ; Case_Ignorable # Lm MODIFIER LETTER SMALL TURNED W +AB6A..AB6B ; Case_Ignorable # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK +ABE5 ; Case_Ignorable # Mn MEETEI MAYEK VOWEL SIGN ANAP +ABE8 ; Case_Ignorable # Mn MEETEI MAYEK VOWEL SIGN UNAP +ABED ; Case_Ignorable # Mn MEETEI MAYEK APUN IYEK +FB1E ; Case_Ignorable # Mn HEBREW POINT JUDEO-SPANISH VARIKA +FBB2..FBC2 ; Case_Ignorable # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE +FE00..FE0F ; Case_Ignorable # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 +FE13 ; Case_Ignorable # Po PRESENTATION FORM FOR VERTICAL COLON +FE20..FE2F ; Case_Ignorable # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF +FE52 ; Case_Ignorable # Po SMALL FULL STOP +FE55 ; Case_Ignorable # Po SMALL COLON +FEFF ; Case_Ignorable # Cf ZERO WIDTH NO-BREAK SPACE +FF07 ; Case_Ignorable # Po FULLWIDTH APOSTROPHE +FF0E ; Case_Ignorable # Po FULLWIDTH FULL STOP +FF1A ; Case_Ignorable # Po FULLWIDTH COLON +FF3E ; Case_Ignorable # Sk FULLWIDTH CIRCUMFLEX ACCENT +FF40 ; Case_Ignorable # Sk FULLWIDTH GRAVE ACCENT +FF70 ; Case_Ignorable # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF9E..FF9F ; Case_Ignorable # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +FFE3 ; Case_Ignorable # Sk FULLWIDTH MACRON +FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR +101FD ; Case_Ignorable # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE +102E0 ; Case_Ignorable # Mn COPTIC EPACT THOUSANDS MARK +10376..1037A ; Case_Ignorable # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII +10780..10785 ; Case_Ignorable # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Case_Ignorable # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Case_Ignorable # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL +10A01..10A03 ; Case_Ignorable # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R +10A05..10A06 ; Case_Ignorable # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A0C..10A0F ; Case_Ignorable # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA +10A38..10A3A ; Case_Ignorable # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW +10A3F ; Case_Ignorable # Mn KHAROSHTHI VIRAMA +10AE5..10AE6 ; Case_Ignorable # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW +10D24..10D27 ; Case_Ignorable # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI +10D4E ; Case_Ignorable # Lm GARAY VOWEL LENGTH MARK +10D69..10D6D ; Case_Ignorable # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK +10D6F ; Case_Ignorable # Lm GARAY REDUPLICATION MARK +10EAB..10EAC ; Case_Ignorable # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK +10EC5 ; Case_Ignorable # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EFA..10EFF ; Case_Ignorable # Mn [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA +10F46..10F50 ; Case_Ignorable # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F82..10F85 ; Case_Ignorable # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW +11001 ; Case_Ignorable # Mn BRAHMI SIGN ANUSVARA +11038..11046 ; Case_Ignorable # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11070 ; Case_Ignorable # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11073..11074 ; Case_Ignorable # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +1107F..11081 ; Case_Ignorable # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA +110B3..110B6 ; Case_Ignorable # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI +110B9..110BA ; Case_Ignorable # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110BD ; Case_Ignorable # Cf KAITHI NUMBER SIGN +110C2 ; Case_Ignorable # Mn KAITHI VOWEL SIGN VOCALIC R +110CD ; Case_Ignorable # Cf KAITHI NUMBER SIGN ABOVE +11100..11102 ; Case_Ignorable # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA +11127..1112B ; Case_Ignorable # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU +1112D..11134 ; Case_Ignorable # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA +11173 ; Case_Ignorable # Mn MAHAJANI SIGN NUKTA +11180..11181 ; Case_Ignorable # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA +111B6..111BE ; Case_Ignorable # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O +111C9..111CC ; Case_Ignorable # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK +111CF ; Case_Ignorable # Mn SHARADA SIGN INVERTED CANDRABINDU +1122F..11231 ; Case_Ignorable # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI +11234 ; Case_Ignorable # Mn KHOJKI SIGN ANUSVARA +11236..11237 ; Case_Ignorable # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA +1123E ; Case_Ignorable # Mn KHOJKI SIGN SUKUN +11241 ; Case_Ignorable # Mn KHOJKI VOWEL SIGN VOCALIC R +112DF ; Case_Ignorable # Mn KHUDAWADI SIGN ANUSVARA +112E3..112EA ; Case_Ignorable # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA +11300..11301 ; Case_Ignorable # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU +1133B..1133C ; Case_Ignorable # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA +11340 ; Case_Ignorable # Mn GRANTHA VOWEL SIGN II +11366..1136C ; Case_Ignorable # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX +11370..11374 ; Case_Ignorable # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA +113BB..113C0 ; Case_Ignorable # Mn [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL +113CE ; Case_Ignorable # Mn TULU-TIGALARI SIGN VIRAMA +113D0 ; Case_Ignorable # Mn TULU-TIGALARI CONJOINER +113D2 ; Case_Ignorable # Mn TULU-TIGALARI GEMINATION MARK +113E1..113E2 ; Case_Ignorable # Mn [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA +11438..1143F ; Case_Ignorable # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI +11442..11444 ; Case_Ignorable # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA +11446 ; Case_Ignorable # Mn NEWA SIGN NUKTA +1145E ; Case_Ignorable # Mn NEWA SANDHI MARK +114B3..114B8 ; Case_Ignorable # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL +114BA ; Case_Ignorable # Mn TIRHUTA VOWEL SIGN SHORT E +114BF..114C0 ; Case_Ignorable # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA +114C2..114C3 ; Case_Ignorable # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA +115B2..115B5 ; Case_Ignorable # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR +115BC..115BD ; Case_Ignorable # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA +115BF..115C0 ; Case_Ignorable # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA +115DC..115DD ; Case_Ignorable # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU +11633..1163A ; Case_Ignorable # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI +1163D ; Case_Ignorable # Mn MODI SIGN ANUSVARA +1163F..11640 ; Case_Ignorable # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA +116AB ; Case_Ignorable # Mn TAKRI SIGN ANUSVARA +116AD ; Case_Ignorable # Mn TAKRI VOWEL SIGN AA +116B0..116B5 ; Case_Ignorable # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU +116B7 ; Case_Ignorable # Mn TAKRI SIGN NUKTA +1171D ; Case_Ignorable # Mn AHOM CONSONANT SIGN MEDIAL LA +1171F ; Case_Ignorable # Mn AHOM CONSONANT SIGN MEDIAL LIGATING RA +11722..11725 ; Case_Ignorable # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU +11727..1172B ; Case_Ignorable # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER +1182F..11837 ; Case_Ignorable # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA +11839..1183A ; Case_Ignorable # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA +1193B..1193C ; Case_Ignorable # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU +1193E ; Case_Ignorable # Mn DIVES AKURU VIRAMA +11943 ; Case_Ignorable # Mn DIVES AKURU SIGN NUKTA +119D4..119D7 ; Case_Ignorable # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR +119DA..119DB ; Case_Ignorable # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI +119E0 ; Case_Ignorable # Mn NANDINAGARI SIGN VIRAMA +11A01..11A0A ; Case_Ignorable # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK +11A33..11A38 ; Case_Ignorable # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA +11A3B..11A3E ; Case_Ignorable # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA +11A47 ; Case_Ignorable # Mn ZANABAZAR SQUARE SUBJOINER +11A51..11A56 ; Case_Ignorable # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE +11A59..11A5B ; Case_Ignorable # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK +11A8A..11A96 ; Case_Ignorable # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA +11A98..11A99 ; Case_Ignorable # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER +11B60 ; Case_Ignorable # Mn SHARADA VOWEL SIGN OE +11B62..11B64 ; Case_Ignorable # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B66 ; Case_Ignorable # Mn SHARADA VOWEL SIGN CANDRA E +11C30..11C36 ; Case_Ignorable # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L +11C38..11C3D ; Case_Ignorable # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA +11C3F ; Case_Ignorable # Mn BHAIKSUKI SIGN VIRAMA +11C92..11CA7 ; Case_Ignorable # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA +11CAA..11CB0 ; Case_Ignorable # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA +11CB2..11CB3 ; Case_Ignorable # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E +11CB5..11CB6 ; Case_Ignorable # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU +11D31..11D36 ; Case_Ignorable # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R +11D3A ; Case_Ignorable # Mn MASARAM GONDI VOWEL SIGN E +11D3C..11D3D ; Case_Ignorable # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O +11D3F..11D45 ; Case_Ignorable # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA +11D47 ; Case_Ignorable # Mn MASARAM GONDI RA-KARA +11D90..11D91 ; Case_Ignorable # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI +11D95 ; Case_Ignorable # Mn GUNJALA GONDI SIGN ANUSVARA +11D97 ; Case_Ignorable # Mn GUNJALA GONDI VIRAMA +11DD9 ; Case_Ignorable # Lm TOLONG SIKI SIGN SELA +11EF3..11EF4 ; Case_Ignorable # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U +11F00..11F01 ; Case_Ignorable # Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA +11F36..11F3A ; Case_Ignorable # Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R +11F40 ; Case_Ignorable # Mn KAWI VOWEL SIGN EU +11F42 ; Case_Ignorable # Mn KAWI CONJOINER +11F5A ; Case_Ignorable # Mn KAWI SIGN NUKTA +13430..1343F ; Case_Ignorable # Cf [16] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE +13440 ; Case_Ignorable # Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY +13447..13455 ; Case_Ignorable # Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED +1611E..16129 ; Case_Ignorable # Mn [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK +1612D..1612F ; Case_Ignorable # Mn [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA +16AF0..16AF4 ; Case_Ignorable # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE +16B30..16B36 ; Case_Ignorable # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM +16B40..16B43 ; Case_Ignorable # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM +16D40..16D42 ; Case_Ignorable # Lm [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA +16D6B..16D6C ; Case_Ignorable # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT +16F4F ; Case_Ignorable # Mn MIAO SIGN CONSONANT MODIFIER BAR +16F8F..16F92 ; Case_Ignorable # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW +16F93..16F9F ; Case_Ignorable # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 +16FE0..16FE1 ; Case_Ignorable # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK +16FE3 ; Case_Ignorable # Lm OLD CHINESE ITERATION MARK +16FE4 ; Case_Ignorable # Mn KHITAN SMALL SCRIPT FILLER +16FF2..16FF3 ; Case_Ignorable # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +1AFF0..1AFF3 ; Case_Ignorable # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; Case_Ignorable # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; Case_Ignorable # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1BC9D..1BC9E ; Case_Ignorable # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1BCA0..1BCA3 ; Case_Ignorable # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1CF00..1CF2D ; Case_Ignorable # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; Case_Ignorable # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG +1D167..1D169 ; Case_Ignorable # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 +1D173..1D17A ; Case_Ignorable # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE +1D17B..1D182 ; Case_Ignorable # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE +1D185..1D18B ; Case_Ignorable # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE +1D1AA..1D1AD ; Case_Ignorable # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO +1D242..1D244 ; Case_Ignorable # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME +1DA00..1DA36 ; Case_Ignorable # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN +1DA3B..1DA6C ; Case_Ignorable # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT +1DA75 ; Case_Ignorable # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS +1DA84 ; Case_Ignorable # Mn SIGNWRITING LOCATION HEAD NECK +1DA9B..1DA9F ; Case_Ignorable # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 +1DAA1..1DAAF ; Case_Ignorable # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 +1E000..1E006 ; Case_Ignorable # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE +1E008..1E018 ; Case_Ignorable # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU +1E01B..1E021 ; Case_Ignorable # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI +1E023..1E024 ; Case_Ignorable # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS +1E026..1E02A ; Case_Ignorable # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA +1E030..1E06D ; Case_Ignorable # Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE +1E08F ; Case_Ignorable # Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +1E130..1E136 ; Case_Ignorable # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E137..1E13D ; Case_Ignorable # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER +1E2AE ; Case_Ignorable # Mn TOTO SIGN RISING TONE +1E2EC..1E2EF ; Case_Ignorable # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI +1E4EB ; Case_Ignorable # Lm NAG MUNDARI SIGN OJOD +1E4EC..1E4EF ; Case_Ignorable # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH +1E5EE..1E5EF ; Case_Ignorable # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR +1E6E3 ; Case_Ignorable # Mn TAI YO SIGN UE +1E6E6 ; Case_Ignorable # Mn TAI YO SIGN AU +1E6EE..1E6EF ; Case_Ignorable # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F5 ; Case_Ignorable # Mn TAI YO SIGN OM +1E6FF ; Case_Ignorable # Lm TAI YO XAM LAI +1E8D0..1E8D6 ; Case_Ignorable # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS +1E944..1E94A ; Case_Ignorable # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA +1E94B ; Case_Ignorable # Lm ADLAM NASALIZATION MARK +1F3FB..1F3FF ; Case_Ignorable # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 +E0001 ; Case_Ignorable # Cf LANGUAGE TAG +E0020..E007F ; Case_Ignorable # Cf [96] TAG SPACE..CANCEL TAG +E0100..E01EF ; Case_Ignorable # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 + +# Total code points: 2794 + +# ================================================ + +# Derived Property: Changes_When_Lowercased (CWL) +# Characters whose normalized forms are not stable under a toLowercase mapping. +# For more information, see the definition of "isLowercase(X)" +# in the "Conformance" / "Default Case Algorithms" section of the core specification. +# Changes_When_Lowercased(X) is true when toLowercase(toNFD(X)) != toNFD(X) + +0041..005A ; Changes_When_Lowercased # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z +00C0..00D6 ; Changes_When_Lowercased # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D8..00DE ; Changes_When_Lowercased # L& [7] LATIN CAPITAL LETTER O WITH STROKE..LATIN CAPITAL LETTER THORN +0100 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH MACRON +0102 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH BREVE +0104 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH OGONEK +0106 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER C WITH ACUTE +0108 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER C WITH CIRCUMFLEX +010A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER C WITH DOT ABOVE +010C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER C WITH CARON +010E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER D WITH CARON +0110 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER D WITH STROKE +0112 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH MACRON +0114 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH BREVE +0116 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH DOT ABOVE +0118 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH OGONEK +011A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CARON +011C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH CIRCUMFLEX +011E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH BREVE +0120 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH DOT ABOVE +0122 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH CEDILLA +0124 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0126 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH STROKE +0128 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH TILDE +012A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH MACRON +012C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH BREVE +012E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH OGONEK +0130 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH DOT ABOVE +0132 ; Changes_When_Lowercased # L& LATIN CAPITAL LIGATURE IJ +0134 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0136 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH CEDILLA +0139 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH ACUTE +013B ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH CEDILLA +013D ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH CARON +013F ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH MIDDLE DOT +0141 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH STROKE +0143 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH ACUTE +0145 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH CEDILLA +0147 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH CARON +014A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER ENG +014C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH MACRON +014E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH BREVE +0150 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0152 ; Changes_When_Lowercased # L& LATIN CAPITAL LIGATURE OE +0154 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH ACUTE +0156 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH CEDILLA +0158 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH CARON +015A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH ACUTE +015C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH CIRCUMFLEX +015E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH CEDILLA +0160 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH CARON +0162 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH CEDILLA +0164 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH CARON +0166 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH STROKE +0168 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH TILDE +016A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH MACRON +016C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH BREVE +016E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH RING ABOVE +0170 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0172 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH OGONEK +0174 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0176 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0178..0179 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE +017B ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Z WITH DOT ABOVE +017D ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Z WITH CARON +0181..0182 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR +0184 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER TONE SIX +0186..0187 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK +0189..018B ; Changes_When_Lowercased # L& [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR +018E..0191 ; Changes_When_Lowercased # L& [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK +0193..0194 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA +0196..0198 ; Changes_When_Lowercased # L& [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK +019C..019D ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK +019F..01A0 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN +01A2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER OI +01A4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER P WITH HOOK +01A6..01A7 ; Changes_When_Lowercased # L& [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO +01A9 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER ESH +01AC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH HOOK +01AE..01AF ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN +01B1..01B3 ; Changes_When_Lowercased # L& [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK +01B5 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Z WITH STROKE +01B7..01B8 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED +01BC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER TONE FIVE +01C4..01C5 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON +01C7..01C8 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER LJ..LATIN CAPITAL LETTER L WITH SMALL LETTER J +01CA..01CB ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER NJ..LATIN CAPITAL LETTER N WITH SMALL LETTER J +01CD ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH CARON +01CF ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH CARON +01D1 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH CARON +01D3 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH CARON +01D5 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01D7 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D9 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +01DB ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01DE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +01E0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON +01E2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER AE WITH MACRON +01E4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH STROKE +01E6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH CARON +01E8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH CARON +01EA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH OGONEK +01EC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH OGONEK AND MACRON +01EE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER EZH WITH CARON +01F1..01F2 ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER DZ..LATIN CAPITAL LETTER D WITH SMALL LETTER Z +01F4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH ACUTE +01F6..01F8 ; Changes_When_Lowercased # L& [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE +01FA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +01FC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER AE WITH ACUTE +01FE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +0200 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH DOUBLE GRAVE +0202 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH INVERTED BREVE +0204 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH DOUBLE GRAVE +0206 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH INVERTED BREVE +0208 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH DOUBLE GRAVE +020A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH INVERTED BREVE +020C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH DOUBLE GRAVE +020E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH INVERTED BREVE +0210 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH DOUBLE GRAVE +0212 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH INVERTED BREVE +0214 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH DOUBLE GRAVE +0216 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH INVERTED BREVE +0218 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH COMMA BELOW +021A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH COMMA BELOW +021C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER YOGH +021E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH CARON +0220 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH LONG RIGHT LEG +0222 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER OU +0224 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Z WITH HOOK +0226 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH DOT ABOVE +0228 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CEDILLA +022A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +022C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH TILDE AND MACRON +022E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH DOT ABOVE +0230 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON +0232 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH MACRON +023A..023B ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE +023D..023E ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE +0241 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER GLOTTAL STOP +0243..0246 ; Changes_When_Lowercased # L& [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE +0248 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER J WITH STROKE +024A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL +024C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH STROKE +024E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH STROKE +0370 ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER HETA +0372 ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER ARCHAIC SAMPI +0376 ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA +037F ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER YOT +0386 ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0388..038A ; Changes_When_Lowercased # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..038F ; Changes_When_Lowercased # L& [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS +0391..03A1 ; Changes_When_Lowercased # L& [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO +03A3..03AB ; Changes_When_Lowercased # L& [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +03CF ; Changes_When_Lowercased # L& GREEK CAPITAL KAI SYMBOL +03D8 ; Changes_When_Lowercased # L& GREEK LETTER ARCHAIC KOPPA +03DA ; Changes_When_Lowercased # L& GREEK LETTER STIGMA +03DC ; Changes_When_Lowercased # L& GREEK LETTER DIGAMMA +03DE ; Changes_When_Lowercased # L& GREEK LETTER KOPPA +03E0 ; Changes_When_Lowercased # L& GREEK LETTER SAMPI +03E2 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER SHEI +03E4 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER FEI +03E6 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER KHEI +03E8 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER HORI +03EA ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER GANGIA +03EC ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER SHIMA +03EE ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER DEI +03F4 ; Changes_When_Lowercased # L& GREEK CAPITAL THETA SYMBOL +03F7 ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER SHO +03F9..03FA ; Changes_When_Lowercased # L& [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN +03FD..042F ; Changes_When_Lowercased # L& [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA +0460 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER OMEGA +0462 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER YAT +0464 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IOTIFIED E +0466 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER LITTLE YUS +0468 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS +046A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER BIG YUS +046C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS +046E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KSI +0470 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER PSI +0472 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER FITA +0474 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IZHITSA +0476 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0478 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER UK +047A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ROUND OMEGA +047C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER OMEGA WITH TITLO +047E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER OT +0480 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOPPA +048A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SHORT I WITH TAIL +048C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SEMISOFT SIGN +048E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ER WITH TICK +0490 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0492 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE +0494 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK +0496 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER +0498 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ZE WITH DESCENDER +049A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KA WITH DESCENDER +049C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE +049E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KA WITH STROKE +04A0 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER BASHKIR KA +04A2 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EN WITH DESCENDER +04A4 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LIGATURE EN GHE +04A6 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK +04A8 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ABKHASIAN HA +04AA ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ES WITH DESCENDER +04AC ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER TE WITH DESCENDER +04AE ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER STRAIGHT U +04B0 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE +04B2 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER HA WITH DESCENDER +04B4 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LIGATURE TE TSE +04B6 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER CHE WITH DESCENDER +04B8 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE +04BA ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SHHA +04BC ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE +04BE ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER +04C0..04C1 ; Changes_When_Lowercased # L& [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE +04C3 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KA WITH HOOK +04C5 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EL WITH TAIL +04C7 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EN WITH HOOK +04C9 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EN WITH TAIL +04CB ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KHAKASSIAN CHE +04CD ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EM WITH TAIL +04D0 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER A WITH BREVE +04D2 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER A WITH DIAERESIS +04D4 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LIGATURE A IE +04D6 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IE WITH BREVE +04D8 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SCHWA +04DA ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS +04DC ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS +04DE ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS +04E0 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ABKHASIAN DZE +04E2 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER I WITH MACRON +04E4 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER I WITH DIAERESIS +04E6 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER O WITH DIAERESIS +04E8 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER BARRED O +04EA ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS +04EC ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER E WITH DIAERESIS +04EE ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER U WITH MACRON +04F0 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER U WITH DIAERESIS +04F2 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE +04F4 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS +04F6 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER GHE WITH DESCENDER +04F8 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS +04FA ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK +04FC ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER HA WITH HOOK +04FE ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER HA WITH STROKE +0500 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOMI DE +0502 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOMI DJE +0504 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOMI ZJE +0506 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOMI DZJE +0508 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOMI LJE +050A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOMI NJE +050C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOMI SJE +050E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER KOMI TJE +0510 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER REVERSED ZE +0512 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EL WITH HOOK +0514 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER LHA +0516 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER RHA +0518 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER YAE +051A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER QA +051C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER WE +051E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ALEUT KA +0520 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK +0522 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK +0524 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER PE WITH DESCENDER +0526 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER +0528 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK +052A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DZZHE +052C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DCHE +052E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER EL WITH DESCENDER +0531..0556 ; Changes_When_Lowercased # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH +10A0..10C5 ; Changes_When_Lowercased # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE +10C7 ; Changes_When_Lowercased # L& GEORGIAN CAPITAL LETTER YN +10CD ; Changes_When_Lowercased # L& GEORGIAN CAPITAL LETTER AEN +13A0..13F5 ; Changes_When_Lowercased # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV +1C89 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER TJE +1C90..1CBA ; Changes_When_Lowercased # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN +1CBD..1CBF ; Changes_When_Lowercased # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN +1E00 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH RING BELOW +1E02 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER B WITH DOT ABOVE +1E04 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER B WITH DOT BELOW +1E06 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER B WITH LINE BELOW +1E08 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE +1E0A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER D WITH DOT ABOVE +1E0C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER D WITH DOT BELOW +1E0E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER D WITH LINE BELOW +1E10 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER D WITH CEDILLA +1E12 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW +1E14 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH MACRON AND GRAVE +1E16 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH MACRON AND ACUTE +1E18 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW +1E1A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH TILDE BELOW +1E1C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE +1E1E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER F WITH DOT ABOVE +1E20 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH MACRON +1E22 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH DOT ABOVE +1E24 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH DOT BELOW +1E26 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH DIAERESIS +1E28 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH CEDILLA +1E2A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH BREVE BELOW +1E2C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH TILDE BELOW +1E2E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE +1E30 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH ACUTE +1E32 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH DOT BELOW +1E34 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH LINE BELOW +1E36 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH DOT BELOW +1E38 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON +1E3A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH LINE BELOW +1E3C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW +1E3E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER M WITH ACUTE +1E40 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER M WITH DOT ABOVE +1E42 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER M WITH DOT BELOW +1E44 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH DOT ABOVE +1E46 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH DOT BELOW +1E48 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH LINE BELOW +1E4A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW +1E4C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH TILDE AND ACUTE +1E4E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS +1E50 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH MACRON AND GRAVE +1E52 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH MACRON AND ACUTE +1E54 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER P WITH ACUTE +1E56 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER P WITH DOT ABOVE +1E58 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH DOT ABOVE +1E5A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH DOT BELOW +1E5C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON +1E5E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH LINE BELOW +1E60 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH DOT ABOVE +1E62 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH DOT BELOW +1E64 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE +1E66 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE +1E68 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE +1E6A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH DOT ABOVE +1E6C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH DOT BELOW +1E6E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH LINE BELOW +1E70 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW +1E72 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH DIAERESIS BELOW +1E74 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH TILDE BELOW +1E76 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW +1E78 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH TILDE AND ACUTE +1E7A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS +1E7C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER V WITH TILDE +1E7E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER V WITH DOT BELOW +1E80 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER W WITH GRAVE +1E82 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER W WITH ACUTE +1E84 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER W WITH DIAERESIS +1E86 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER W WITH DOT ABOVE +1E88 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER W WITH DOT BELOW +1E8A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER X WITH DOT ABOVE +1E8C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER X WITH DIAERESIS +1E8E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH DOT ABOVE +1E90 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Z WITH CIRCUMFLEX +1E92 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Z WITH DOT BELOW +1E94 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Z WITH LINE BELOW +1E9E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER SHARP S +1EA0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH DOT BELOW +1EA2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH HOOK ABOVE +1EA4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE +1EAC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH BREVE AND ACUTE +1EB0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH BREVE AND GRAVE +1EB2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE +1EB4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH BREVE AND TILDE +1EB6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW +1EB8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH DOT BELOW +1EBA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH HOOK ABOVE +1EBC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH TILDE +1EBE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH HOOK ABOVE +1ECA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER I WITH DOT BELOW +1ECC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH DOT BELOW +1ECE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH HOOK ABOVE +1ED0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EDA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH HORN AND ACUTE +1EDC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH HORN AND GRAVE +1EDE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE +1EE0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH HORN AND TILDE +1EE2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +1EE4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH DOT BELOW +1EE6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH HOOK ABOVE +1EE8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH HORN AND ACUTE +1EEA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH HORN AND GRAVE +1EEC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE +1EEE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH HORN AND TILDE +1EF0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW +1EF2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH GRAVE +1EF4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH DOT BELOW +1EF6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH HOOK ABOVE +1EF8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH TILDE +1EFA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER MIDDLE-WELSH LL +1EFC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER MIDDLE-WELSH V +1EFE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Y WITH LOOP +1F08..1F0F ; Changes_When_Lowercased # L& [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F18..1F1D ; Changes_When_Lowercased # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F28..1F2F ; Changes_When_Lowercased # L& [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI +1F38..1F3F ; Changes_When_Lowercased # L& [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI +1F48..1F4D ; Changes_When_Lowercased # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F59 ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F ; Changes_When_Lowercased # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F68..1F6F ; Changes_When_Lowercased # L& [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F88..1F8F ; Changes_When_Lowercased # L& [8] GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F98..1F9F ; Changes_When_Lowercased # L& [8] GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FA8..1FAF ; Changes_When_Lowercased # L& [8] GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FB8..1FBC ; Changes_When_Lowercased # L& [5] GREEK CAPITAL LETTER ALPHA WITH VRACHY..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FC8..1FCC ; Changes_When_Lowercased # L& [5] GREEK CAPITAL LETTER EPSILON WITH VARIA..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FD8..1FDB ; Changes_When_Lowercased # L& [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA +1FE8..1FEC ; Changes_When_Lowercased # L& [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FF8..1FFC ; Changes_When_Lowercased # L& [5] GREEK CAPITAL LETTER OMICRON WITH VARIA..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +2126 ; Changes_When_Lowercased # L& OHM SIGN +212A..212B ; Changes_When_Lowercased # L& [2] KELVIN SIGN..ANGSTROM SIGN +2132 ; Changes_When_Lowercased # L& TURNED CAPITAL F +2160..216F ; Changes_When_Lowercased # Nl [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND +2183 ; Changes_When_Lowercased # L& ROMAN NUMERAL REVERSED ONE HUNDRED +24B6..24CF ; Changes_When_Lowercased # So [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z +2C00..2C2F ; Changes_When_Lowercased # L& [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI +2C60 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH DOUBLE BAR +2C62..2C64 ; Changes_When_Lowercased # L& [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL +2C67 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH DESCENDER +2C69 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH DESCENDER +2C6B ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Z WITH DESCENDER +2C6D..2C70 ; Changes_When_Lowercased # L& [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA +2C72 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER W WITH HOOK +2C75 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER HALF H +2C7E..2C80 ; Changes_When_Lowercased # L& [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA +2C82 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER VIDA +2C84 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER GAMMA +2C86 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER DALDA +2C88 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER EIE +2C8A ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER SOU +2C8C ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER ZATA +2C8E ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER HATE +2C90 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER THETHE +2C92 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER IAUDA +2C94 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER KAPA +2C96 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER LAULA +2C98 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER MI +2C9A ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER NI +2C9C ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER KSI +2C9E ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER O +2CA0 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER PI +2CA2 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER RO +2CA4 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER SIMA +2CA6 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER TAU +2CA8 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER UA +2CAA ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER FI +2CAC ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER KHI +2CAE ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER PSI +2CB0 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OOU +2CB2 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER DIALECT-P ALEF +2CB4 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC AIN +2CB6 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE +2CB8 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER DIALECT-P KAPA +2CBA ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER DIALECT-P NI +2CBC ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI +2CBE ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC OOU +2CC0 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER SAMPI +2CC2 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER CROSSED SHEI +2CC4 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC SHEI +2CC6 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC ESH +2CC8 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER AKHMIMIC KHEI +2CCA ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER DIALECT-P HORI +2CCC ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC HORI +2CCE ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC HA +2CD0 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER L-SHAPED HA +2CD2 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC HEI +2CD4 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC HAT +2CD6 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC GANGIA +2CD8 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC DJA +2CDA ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD COPTIC SHIMA +2CDC ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD NUBIAN SHIMA +2CDE ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD NUBIAN NGI +2CE0 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD NUBIAN NYI +2CE2 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER OLD NUBIAN WAU +2CEB ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI +2CED ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA +2CF2 ; Changes_When_Lowercased # L& COPTIC CAPITAL LETTER BOHAIRIC KHEI +A640 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ZEMLYA +A642 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DZELO +A644 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER REVERSED DZE +A646 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IOTA +A648 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DJERV +A64A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER MONOGRAPH UK +A64C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER BROAD OMEGA +A64E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER NEUTRAL YER +A650 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER YERU WITH BACK YER +A652 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IOTIFIED YAT +A654 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER REVERSED YU +A656 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IOTIFIED A +A658 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS +A65A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER BLENDED YUS +A65C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS +A65E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER YN +A660 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER REVERSED TSE +A662 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SOFT DE +A664 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SOFT EL +A666 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SOFT EM +A668 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER MONOCULAR O +A66A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER BINOCULAR O +A66C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O +A680 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DWE +A682 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DZWE +A684 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER ZHWE +A686 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER CCHE +A688 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DZZE +A68A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK +A68C ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER TWE +A68E ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER TSWE +A690 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER TSSE +A692 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER TCHE +A694 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER HWE +A696 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER SHWE +A698 ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER DOUBLE O +A69A ; Changes_When_Lowercased # L& CYRILLIC CAPITAL LETTER CROSSED O +A722 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF +A724 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER EGYPTOLOGICAL AIN +A726 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER HENG +A728 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER TZ +A72A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER TRESILLO +A72C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER CUATRILLO +A72E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER CUATRILLO WITH COMMA +A732 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER AA +A734 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER AO +A736 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER AU +A738 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER AV +A73A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR +A73C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER AY +A73E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER REVERSED C WITH DOT +A740 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH STROKE +A742 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH DIAGONAL STROKE +A744 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE +A746 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER BROKEN L +A748 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH HIGH STROKE +A74A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY +A74C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER O WITH LOOP +A74E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER OO +A750 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER +A752 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER P WITH FLOURISH +A754 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER P WITH SQUIRREL TAIL +A756 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER +A758 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE +A75A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R ROTUNDA +A75C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER RUM ROTUNDA +A75E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER V WITH DIAGONAL STROKE +A760 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER VY +A762 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER VISIGOTHIC Z +A764 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER THORN WITH STROKE +A766 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER +A768 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER VEND +A76A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER ET +A76C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER IS +A76E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER CON +A779 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER INSULAR D +A77B ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER INSULAR F +A77D..A77E ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G +A780 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER TURNED L +A782 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER INSULAR R +A784 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER INSULAR S +A786 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER INSULAR T +A78B ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER SALTILLO +A78D ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER TURNED H +A790 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH DESCENDER +A792 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER C WITH BAR +A796 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER B WITH FLOURISH +A798 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER F WITH STROKE +A79A ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER VOLAPUK AE +A79C ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER VOLAPUK OE +A79E ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER VOLAPUK UE +A7A0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER G WITH OBLIQUE STROKE +A7A2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER K WITH OBLIQUE STROKE +A7A4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER N WITH OBLIQUE STROKE +A7A6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER R WITH OBLIQUE STROKE +A7A8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH OBLIQUE STROKE +A7AA..A7AE ; Changes_When_Lowercased # L& [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I +A7B0..A7B4 ; Changes_When_Lowercased # L& [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA +A7B6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER OMEGA +A7B8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH STROKE +A7BA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER GLOTTAL A +A7BC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER GLOTTAL I +A7BE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER GLOTTAL U +A7C0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER OLD POLISH O +A7C2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER ANGLICANA W +A7C4..A7C7 ; Changes_When_Lowercased # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY +A7C9 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +A7CB..A7CC ; Changes_When_Lowercased # L& [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE +A7D0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER DOUBLE WYNN +A7D6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER MIDDLE SCOTS S +A7D8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER SIGMOID S +A7DA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER LAMBDA +A7DC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F5 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER REVERSED HALF H +FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +10400..10427 ; Changes_When_Lowercased # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW +104B0..104D3 ; Changes_When_Lowercased # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +10570..1057A ; Changes_When_Lowercased # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Changes_When_Lowercased # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Changes_When_Lowercased # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Changes_When_Lowercased # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10C80..10CB2 ; Changes_When_Lowercased # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10D50..10D65 ; Changes_When_Lowercased # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +118A0..118BF ; Changes_When_Lowercased # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO +16E40..16E5F ; Changes_When_Lowercased # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y +16EA0..16EB8 ; Changes_When_Lowercased # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +1E900..1E921 ; Changes_When_Lowercased # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA + +# Total code points: 1488 + +# ================================================ + +# Derived Property: Changes_When_Uppercased (CWU) +# Characters whose normalized forms are not stable under a toUppercase mapping. +# For more information, see the definition of "isUppercase(X)" +# in the "Conformance" / "Default Case Algorithms" section of the core specification. +# Changes_When_Uppercased(X) is true when toUppercase(toNFD(X)) != toNFD(X) + +0061..007A ; Changes_When_Uppercased # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z +00B5 ; Changes_When_Uppercased # L& MICRO SIGN +00DF..00F6 ; Changes_When_Uppercased # L& [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS +00F8..00FF ; Changes_When_Uppercased # L& [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS +0101 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH MACRON +0103 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH BREVE +0105 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH OGONEK +0107 ; Changes_When_Uppercased # L& LATIN SMALL LETTER C WITH ACUTE +0109 ; Changes_When_Uppercased # L& LATIN SMALL LETTER C WITH CIRCUMFLEX +010B ; Changes_When_Uppercased # L& LATIN SMALL LETTER C WITH DOT ABOVE +010D ; Changes_When_Uppercased # L& LATIN SMALL LETTER C WITH CARON +010F ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH CARON +0111 ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH STROKE +0113 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH MACRON +0115 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH BREVE +0117 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH DOT ABOVE +0119 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH OGONEK +011B ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CARON +011D ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH CIRCUMFLEX +011F ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH BREVE +0121 ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH DOT ABOVE +0123 ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH CEDILLA +0125 ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH CIRCUMFLEX +0127 ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH STROKE +0129 ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH TILDE +012B ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH MACRON +012D ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH BREVE +012F ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH OGONEK +0131 ; Changes_When_Uppercased # L& LATIN SMALL LETTER DOTLESS I +0133 ; Changes_When_Uppercased # L& LATIN SMALL LIGATURE IJ +0135 ; Changes_When_Uppercased # L& LATIN SMALL LETTER J WITH CIRCUMFLEX +0137 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH CEDILLA +013A ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH ACUTE +013C ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH CEDILLA +013E ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH CARON +0140 ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH MIDDLE DOT +0142 ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH STROKE +0144 ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH ACUTE +0146 ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH CEDILLA +0148..0149 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014B ; Changes_When_Uppercased # L& LATIN SMALL LETTER ENG +014D ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH MACRON +014F ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH BREVE +0151 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH DOUBLE ACUTE +0153 ; Changes_When_Uppercased # L& LATIN SMALL LIGATURE OE +0155 ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH ACUTE +0157 ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH CEDILLA +0159 ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH CARON +015B ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH ACUTE +015D ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH CIRCUMFLEX +015F ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH CEDILLA +0161 ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH CARON +0163 ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH CEDILLA +0165 ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH CARON +0167 ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH STROKE +0169 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH TILDE +016B ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH MACRON +016D ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH BREVE +016F ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH RING ABOVE +0171 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH DOUBLE ACUTE +0173 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH OGONEK +0175 ; Changes_When_Uppercased # L& LATIN SMALL LETTER W WITH CIRCUMFLEX +0177 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Y WITH CIRCUMFLEX +017A ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH ACUTE +017C ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH DOT ABOVE +017E..0180 ; Changes_When_Uppercased # L& [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE +0183 ; Changes_When_Uppercased # L& LATIN SMALL LETTER B WITH TOPBAR +0185 ; Changes_When_Uppercased # L& LATIN SMALL LETTER TONE SIX +0188 ; Changes_When_Uppercased # L& LATIN SMALL LETTER C WITH HOOK +018C ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH TOPBAR +0192 ; Changes_When_Uppercased # L& LATIN SMALL LETTER F WITH HOOK +0195 ; Changes_When_Uppercased # L& LATIN SMALL LETTER HV +0199..019B ; Changes_When_Uppercased # L& [3] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE +019E ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH LONG RIGHT LEG +01A1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH HORN +01A3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER OI +01A5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER P WITH HOOK +01A8 ; Changes_When_Uppercased # L& LATIN SMALL LETTER TONE TWO +01AD ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH HOOK +01B0 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH HORN +01B4 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Y WITH HOOK +01B6 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH STROKE +01B9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER EZH REVERSED +01BD ; Changes_When_Uppercased # L& LATIN SMALL LETTER TONE FIVE +01BF ; Changes_When_Uppercased # L& LATIN LETTER WYNN +01C5..01C6 ; Changes_When_Uppercased # L& [2] LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON..LATIN SMALL LETTER DZ WITH CARON +01C8..01C9 ; Changes_When_Uppercased # L& [2] LATIN CAPITAL LETTER L WITH SMALL LETTER J..LATIN SMALL LETTER LJ +01CB..01CC ; Changes_When_Uppercased # L& [2] LATIN CAPITAL LETTER N WITH SMALL LETTER J..LATIN SMALL LETTER NJ +01CE ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH CARON +01D0 ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH CARON +01D2 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH CARON +01D4 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH CARON +01D6 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D8 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01DA ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01DC..01DD ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E +01DF ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01E1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON +01E3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER AE WITH MACRON +01E5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH STROKE +01E7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH CARON +01E9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH CARON +01EB ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH OGONEK +01ED ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH OGONEK AND MACRON +01EF..01F0 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER EZH WITH CARON..LATIN SMALL LETTER J WITH CARON +01F2..01F3 ; Changes_When_Uppercased # L& [2] LATIN CAPITAL LETTER D WITH SMALL LETTER Z..LATIN SMALL LETTER DZ +01F5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH ACUTE +01F9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH GRAVE +01FB ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FD ; Changes_When_Uppercased # L& LATIN SMALL LETTER AE WITH ACUTE +01FF ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH STROKE AND ACUTE +0201 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH DOUBLE GRAVE +0203 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH INVERTED BREVE +0205 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH DOUBLE GRAVE +0207 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH INVERTED BREVE +0209 ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH DOUBLE GRAVE +020B ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH INVERTED BREVE +020D ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH DOUBLE GRAVE +020F ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH INVERTED BREVE +0211 ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH DOUBLE GRAVE +0213 ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH INVERTED BREVE +0215 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH DOUBLE GRAVE +0217 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH INVERTED BREVE +0219 ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH COMMA BELOW +021B ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH COMMA BELOW +021D ; Changes_When_Uppercased # L& LATIN SMALL LETTER YOGH +021F ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH CARON +0223 ; Changes_When_Uppercased # L& LATIN SMALL LETTER OU +0225 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH HOOK +0227 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH DOT ABOVE +0229 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CEDILLA +022B ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022D ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH TILDE AND MACRON +022F ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH DOT ABOVE +0231 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON +0233 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Y WITH MACRON +023C ; Changes_When_Uppercased # L& LATIN SMALL LETTER C WITH STROKE +023F..0240 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL +0242 ; Changes_When_Uppercased # L& LATIN SMALL LETTER GLOTTAL STOP +0247 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH STROKE +0249 ; Changes_When_Uppercased # L& LATIN SMALL LETTER J WITH STROKE +024B ; Changes_When_Uppercased # L& LATIN SMALL LETTER Q WITH HOOK TAIL +024D ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH STROKE +024F..0254 ; Changes_When_Uppercased # L& [6] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER OPEN O +0256..0257 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER D WITH TAIL..LATIN SMALL LETTER D WITH HOOK +0259 ; Changes_When_Uppercased # L& LATIN SMALL LETTER SCHWA +025B..025C ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER OPEN E..LATIN SMALL LETTER REVERSED OPEN E +0260..0261 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER G WITH HOOK..LATIN SMALL LETTER SCRIPT G +0263..0266 ; Changes_When_Uppercased # L& [4] LATIN SMALL LETTER GAMMA..LATIN SMALL LETTER H WITH HOOK +0268..026C ; Changes_When_Uppercased # L& [5] LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER L WITH BELT +026F ; Changes_When_Uppercased # L& LATIN SMALL LETTER TURNED M +0271..0272 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER M WITH HOOK..LATIN SMALL LETTER N WITH LEFT HOOK +0275 ; Changes_When_Uppercased # L& LATIN SMALL LETTER BARRED O +027D ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH TAIL +0280 ; Changes_When_Uppercased # L& LATIN LETTER SMALL CAPITAL R +0282..0283 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER S WITH HOOK..LATIN SMALL LETTER ESH +0287..028C ; Changes_When_Uppercased # L& [6] LATIN SMALL LETTER TURNED T..LATIN SMALL LETTER TURNED V +0292 ; Changes_When_Uppercased # L& LATIN SMALL LETTER EZH +029D..029E ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER J WITH CROSSED-TAIL..LATIN SMALL LETTER TURNED K +0345 ; Changes_When_Uppercased # Mn COMBINING GREEK YPOGEGRAMMENI +0371 ; Changes_When_Uppercased # L& GREEK SMALL LETTER HETA +0373 ; Changes_When_Uppercased # L& GREEK SMALL LETTER ARCHAIC SAMPI +0377 ; Changes_When_Uppercased # L& GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +037B..037D ; Changes_When_Uppercased # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +0390 ; Changes_When_Uppercased # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +03AC..03CE ; Changes_When_Uppercased # L& [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS +03D0..03D1 ; Changes_When_Uppercased # L& [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL +03D5..03D7 ; Changes_When_Uppercased # L& [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL +03D9 ; Changes_When_Uppercased # L& GREEK SMALL LETTER ARCHAIC KOPPA +03DB ; Changes_When_Uppercased # L& GREEK SMALL LETTER STIGMA +03DD ; Changes_When_Uppercased # L& GREEK SMALL LETTER DIGAMMA +03DF ; Changes_When_Uppercased # L& GREEK SMALL LETTER KOPPA +03E1 ; Changes_When_Uppercased # L& GREEK SMALL LETTER SAMPI +03E3 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER SHEI +03E5 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER FEI +03E7 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER KHEI +03E9 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER HORI +03EB ; Changes_When_Uppercased # L& COPTIC SMALL LETTER GANGIA +03ED ; Changes_When_Uppercased # L& COPTIC SMALL LETTER SHIMA +03EF..03F3 ; Changes_When_Uppercased # L& [5] COPTIC SMALL LETTER DEI..GREEK LETTER YOT +03F5 ; Changes_When_Uppercased # L& GREEK LUNATE EPSILON SYMBOL +03F8 ; Changes_When_Uppercased # L& GREEK SMALL LETTER SHO +03FB ; Changes_When_Uppercased # L& GREEK SMALL LETTER SAN +0430..045F ; Changes_When_Uppercased # L& [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE +0461 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER OMEGA +0463 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER YAT +0465 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IOTIFIED E +0467 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER LITTLE YUS +0469 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS +046B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER BIG YUS +046D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IOTIFIED BIG YUS +046F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KSI +0471 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER PSI +0473 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER FITA +0475 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IZHITSA +0477 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0479 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER UK +047B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ROUND OMEGA +047D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER OMEGA WITH TITLO +047F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER OT +0481 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOPPA +048B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SHORT I WITH TAIL +048D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SEMISOFT SIGN +048F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ER WITH TICK +0491 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER GHE WITH UPTURN +0493 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER GHE WITH STROKE +0495 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK +0497 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ZHE WITH DESCENDER +0499 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ZE WITH DESCENDER +049B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KA WITH DESCENDER +049D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE +049F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KA WITH STROKE +04A1 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER BASHKIR KA +04A3 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EN WITH DESCENDER +04A5 ; Changes_When_Uppercased # L& CYRILLIC SMALL LIGATURE EN GHE +04A7 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK +04A9 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ABKHASIAN HA +04AB ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ES WITH DESCENDER +04AD ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER TE WITH DESCENDER +04AF ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER STRAIGHT U +04B1 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE +04B3 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER HA WITH DESCENDER +04B5 ; Changes_When_Uppercased # L& CYRILLIC SMALL LIGATURE TE TSE +04B7 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER CHE WITH DESCENDER +04B9 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE +04BB ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SHHA +04BD ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ABKHASIAN CHE +04BF ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER +04C2 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ZHE WITH BREVE +04C4 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KA WITH HOOK +04C6 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EL WITH TAIL +04C8 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EN WITH HOOK +04CA ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EN WITH TAIL +04CC ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KHAKASSIAN CHE +04CE..04CF ; Changes_When_Uppercased # L& [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA +04D1 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER A WITH BREVE +04D3 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER A WITH DIAERESIS +04D5 ; Changes_When_Uppercased # L& CYRILLIC SMALL LIGATURE A IE +04D7 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IE WITH BREVE +04D9 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SCHWA +04DB ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS +04DD ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ZHE WITH DIAERESIS +04DF ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ZE WITH DIAERESIS +04E1 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ABKHASIAN DZE +04E3 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER I WITH MACRON +04E5 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER I WITH DIAERESIS +04E7 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER O WITH DIAERESIS +04E9 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER BARRED O +04EB ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS +04ED ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER E WITH DIAERESIS +04EF ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER U WITH MACRON +04F1 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER U WITH DIAERESIS +04F3 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE +04F5 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER CHE WITH DIAERESIS +04F7 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER GHE WITH DESCENDER +04F9 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER YERU WITH DIAERESIS +04FB ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK +04FD ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER HA WITH HOOK +04FF ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER HA WITH STROKE +0501 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOMI DE +0503 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOMI DJE +0505 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOMI ZJE +0507 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOMI DZJE +0509 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOMI LJE +050B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOMI NJE +050D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOMI SJE +050F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER KOMI TJE +0511 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER REVERSED ZE +0513 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EL WITH HOOK +0515 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER LHA +0517 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER RHA +0519 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER YAE +051B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER QA +051D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER WE +051F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ALEUT KA +0521 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK +0523 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK +0525 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER PE WITH DESCENDER +0527 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SHHA WITH DESCENDER +0529 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EN WITH LEFT HOOK +052B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DZZHE +052D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DCHE +052F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER EL WITH DESCENDER +0561..0587 ; Changes_When_Uppercased # L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN +10D0..10FA ; Changes_When_Uppercased # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN +10FD..10FF ; Changes_When_Uppercased # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN +13F8..13FD ; Changes_When_Uppercased # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV +1C80..1C88 ; Changes_When_Uppercased # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C8A ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER TJE +1D79 ; Changes_When_Uppercased # L& LATIN SMALL LETTER INSULAR G +1D7D ; Changes_When_Uppercased # L& LATIN SMALL LETTER P WITH STROKE +1D8E ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH PALATAL HOOK +1E01 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH RING BELOW +1E03 ; Changes_When_Uppercased # L& LATIN SMALL LETTER B WITH DOT ABOVE +1E05 ; Changes_When_Uppercased # L& LATIN SMALL LETTER B WITH DOT BELOW +1E07 ; Changes_When_Uppercased # L& LATIN SMALL LETTER B WITH LINE BELOW +1E09 ; Changes_When_Uppercased # L& LATIN SMALL LETTER C WITH CEDILLA AND ACUTE +1E0B ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH DOT ABOVE +1E0D ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH DOT BELOW +1E0F ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH LINE BELOW +1E11 ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH CEDILLA +1E13 ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW +1E15 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH MACRON AND GRAVE +1E17 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH MACRON AND ACUTE +1E19 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW +1E1B ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH TILDE BELOW +1E1D ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CEDILLA AND BREVE +1E1F ; Changes_When_Uppercased # L& LATIN SMALL LETTER F WITH DOT ABOVE +1E21 ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH MACRON +1E23 ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH DOT ABOVE +1E25 ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH DOT BELOW +1E27 ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH DIAERESIS +1E29 ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH CEDILLA +1E2B ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH BREVE BELOW +1E2D ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH TILDE BELOW +1E2F ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE +1E31 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH ACUTE +1E33 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH DOT BELOW +1E35 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH LINE BELOW +1E37 ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH DOT BELOW +1E39 ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH DOT BELOW AND MACRON +1E3B ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH LINE BELOW +1E3D ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW +1E3F ; Changes_When_Uppercased # L& LATIN SMALL LETTER M WITH ACUTE +1E41 ; Changes_When_Uppercased # L& LATIN SMALL LETTER M WITH DOT ABOVE +1E43 ; Changes_When_Uppercased # L& LATIN SMALL LETTER M WITH DOT BELOW +1E45 ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH DOT ABOVE +1E47 ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH DOT BELOW +1E49 ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH LINE BELOW +1E4B ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW +1E4D ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH TILDE AND ACUTE +1E4F ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH TILDE AND DIAERESIS +1E51 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH MACRON AND GRAVE +1E53 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH MACRON AND ACUTE +1E55 ; Changes_When_Uppercased # L& LATIN SMALL LETTER P WITH ACUTE +1E57 ; Changes_When_Uppercased # L& LATIN SMALL LETTER P WITH DOT ABOVE +1E59 ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH DOT ABOVE +1E5B ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH DOT BELOW +1E5D ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH DOT BELOW AND MACRON +1E5F ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH LINE BELOW +1E61 ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH DOT ABOVE +1E63 ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH DOT BELOW +1E65 ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE +1E67 ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH CARON AND DOT ABOVE +1E69 ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE +1E6B ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH DOT ABOVE +1E6D ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH DOT BELOW +1E6F ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH LINE BELOW +1E71 ; Changes_When_Uppercased # L& LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW +1E73 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH DIAERESIS BELOW +1E75 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH TILDE BELOW +1E77 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW +1E79 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH TILDE AND ACUTE +1E7B ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH MACRON AND DIAERESIS +1E7D ; Changes_When_Uppercased # L& LATIN SMALL LETTER V WITH TILDE +1E7F ; Changes_When_Uppercased # L& LATIN SMALL LETTER V WITH DOT BELOW +1E81 ; Changes_When_Uppercased # L& LATIN SMALL LETTER W WITH GRAVE +1E83 ; Changes_When_Uppercased # L& LATIN SMALL LETTER W WITH ACUTE +1E85 ; Changes_When_Uppercased # L& LATIN SMALL LETTER W WITH DIAERESIS +1E87 ; Changes_When_Uppercased # L& LATIN SMALL LETTER W WITH DOT ABOVE +1E89 ; Changes_When_Uppercased # L& LATIN SMALL LETTER W WITH DOT BELOW +1E8B ; Changes_When_Uppercased # L& LATIN SMALL LETTER X WITH DOT ABOVE +1E8D ; Changes_When_Uppercased # L& LATIN SMALL LETTER X WITH DIAERESIS +1E8F ; Changes_When_Uppercased # L& LATIN SMALL LETTER Y WITH DOT ABOVE +1E91 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH CIRCUMFLEX +1E93 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH DOT BELOW +1E95..1E9B ; Changes_When_Uppercased # L& [7] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE +1EA1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH DOT BELOW +1EA3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH HOOK ABOVE +1EA5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAB ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE +1EAD ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAF ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH BREVE AND ACUTE +1EB1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH BREVE AND GRAVE +1EB3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE +1EB5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH BREVE AND TILDE +1EB7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER A WITH BREVE AND DOT BELOW +1EB9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH DOT BELOW +1EBB ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH HOOK ABOVE +1EBD ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH TILDE +1EBF ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +1EC7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH HOOK ABOVE +1ECB ; Changes_When_Uppercased # L& LATIN SMALL LETTER I WITH DOT BELOW +1ECD ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH DOT BELOW +1ECF ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH HOOK ABOVE +1ED1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE +1ED9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EDB ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH HORN AND ACUTE +1EDD ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH HORN AND GRAVE +1EDF ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE +1EE1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH HORN AND TILDE +1EE3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH HORN AND DOT BELOW +1EE5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH DOT BELOW +1EE7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH HOOK ABOVE +1EE9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH HORN AND ACUTE +1EEB ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH HORN AND GRAVE +1EED ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE +1EEF ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH HORN AND TILDE +1EF1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH HORN AND DOT BELOW +1EF3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Y WITH GRAVE +1EF5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Y WITH DOT BELOW +1EF7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Y WITH HOOK ABOVE +1EF9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Y WITH TILDE +1EFB ; Changes_When_Uppercased # L& LATIN SMALL LETTER MIDDLE-WELSH LL +1EFD ; Changes_When_Uppercased # L& LATIN SMALL LETTER MIDDLE-WELSH V +1EFF..1F07 ; Changes_When_Uppercased # L& [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F10..1F15 ; Changes_When_Uppercased # L& [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F27 ; Changes_When_Uppercased # L& [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI +1F30..1F37 ; Changes_When_Uppercased # L& [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI +1F40..1F45 ; Changes_When_Uppercased # L& [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; Changes_When_Uppercased # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F60..1F67 ; Changes_When_Uppercased # L& [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F70..1F7D ; Changes_When_Uppercased # L& [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1FB4 ; Changes_When_Uppercased # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FB7 ; Changes_When_Uppercased # L& [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI +1FBC ; Changes_When_Uppercased # L& GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBE ; Changes_When_Uppercased # L& GREEK PROSGEGRAMMENI +1FC2..1FC4 ; Changes_When_Uppercased # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FC7 ; Changes_When_Uppercased # L& [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI +1FCC ; Changes_When_Uppercased # L& GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FD0..1FD3 ; Changes_When_Uppercased # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FD7 ; Changes_When_Uppercased # L& [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI +1FE0..1FE7 ; Changes_When_Uppercased # L& [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI +1FF2..1FF4 ; Changes_When_Uppercased # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FF7 ; Changes_When_Uppercased # L& [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI +1FFC ; Changes_When_Uppercased # L& GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +214E ; Changes_When_Uppercased # L& TURNED SMALL F +2170..217F ; Changes_When_Uppercased # Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND +2184 ; Changes_When_Uppercased # L& LATIN SMALL LETTER REVERSED C +24D0..24E9 ; Changes_When_Uppercased # So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z +2C30..2C5F ; Changes_When_Uppercased # L& [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI +2C61 ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH DOUBLE BAR +2C65..2C66 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE +2C68 ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH DESCENDER +2C6A ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH DESCENDER +2C6C ; Changes_When_Uppercased # L& LATIN SMALL LETTER Z WITH DESCENDER +2C73 ; Changes_When_Uppercased # L& LATIN SMALL LETTER W WITH HOOK +2C76 ; Changes_When_Uppercased # L& LATIN SMALL LETTER HALF H +2C81 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER ALFA +2C83 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER VIDA +2C85 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER GAMMA +2C87 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER DALDA +2C89 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER EIE +2C8B ; Changes_When_Uppercased # L& COPTIC SMALL LETTER SOU +2C8D ; Changes_When_Uppercased # L& COPTIC SMALL LETTER ZATA +2C8F ; Changes_When_Uppercased # L& COPTIC SMALL LETTER HATE +2C91 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER THETHE +2C93 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER IAUDA +2C95 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER KAPA +2C97 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER LAULA +2C99 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER MI +2C9B ; Changes_When_Uppercased # L& COPTIC SMALL LETTER NI +2C9D ; Changes_When_Uppercased # L& COPTIC SMALL LETTER KSI +2C9F ; Changes_When_Uppercased # L& COPTIC SMALL LETTER O +2CA1 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER PI +2CA3 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER RO +2CA5 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER SIMA +2CA7 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER TAU +2CA9 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER UA +2CAB ; Changes_When_Uppercased # L& COPTIC SMALL LETTER FI +2CAD ; Changes_When_Uppercased # L& COPTIC SMALL LETTER KHI +2CAF ; Changes_When_Uppercased # L& COPTIC SMALL LETTER PSI +2CB1 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OOU +2CB3 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER DIALECT-P ALEF +2CB5 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC AIN +2CB7 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER CRYPTOGRAMMIC EIE +2CB9 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER DIALECT-P KAPA +2CBB ; Changes_When_Uppercased # L& COPTIC SMALL LETTER DIALECT-P NI +2CBD ; Changes_When_Uppercased # L& COPTIC SMALL LETTER CRYPTOGRAMMIC NI +2CBF ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC OOU +2CC1 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER SAMPI +2CC3 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER CROSSED SHEI +2CC5 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC SHEI +2CC7 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC ESH +2CC9 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER AKHMIMIC KHEI +2CCB ; Changes_When_Uppercased # L& COPTIC SMALL LETTER DIALECT-P HORI +2CCD ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC HORI +2CCF ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC HA +2CD1 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER L-SHAPED HA +2CD3 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC HEI +2CD5 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC HAT +2CD7 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC GANGIA +2CD9 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC DJA +2CDB ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD COPTIC SHIMA +2CDD ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD NUBIAN SHIMA +2CDF ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD NUBIAN NGI +2CE1 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD NUBIAN NYI +2CE3 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER OLD NUBIAN WAU +2CEC ; Changes_When_Uppercased # L& COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI +2CEE ; Changes_When_Uppercased # L& COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA +2CF3 ; Changes_When_Uppercased # L& COPTIC SMALL LETTER BOHAIRIC KHEI +2D00..2D25 ; Changes_When_Uppercased # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE +2D27 ; Changes_When_Uppercased # L& GEORGIAN SMALL LETTER YN +2D2D ; Changes_When_Uppercased # L& GEORGIAN SMALL LETTER AEN +A641 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ZEMLYA +A643 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DZELO +A645 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER REVERSED DZE +A647 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IOTA +A649 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DJERV +A64B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER MONOGRAPH UK +A64D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER BROAD OMEGA +A64F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER NEUTRAL YER +A651 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER YERU WITH BACK YER +A653 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IOTIFIED YAT +A655 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER REVERSED YU +A657 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IOTIFIED A +A659 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER CLOSED LITTLE YUS +A65B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER BLENDED YUS +A65D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS +A65F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER YN +A661 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER REVERSED TSE +A663 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SOFT DE +A665 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SOFT EL +A667 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SOFT EM +A669 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER MONOCULAR O +A66B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER BINOCULAR O +A66D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DOUBLE MONOCULAR O +A681 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DWE +A683 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DZWE +A685 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER ZHWE +A687 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER CCHE +A689 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DZZE +A68B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK +A68D ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER TWE +A68F ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER TSWE +A691 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER TSSE +A693 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER TCHE +A695 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER HWE +A697 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER SHWE +A699 ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER DOUBLE O +A69B ; Changes_When_Uppercased # L& CYRILLIC SMALL LETTER CROSSED O +A723 ; Changes_When_Uppercased # L& LATIN SMALL LETTER EGYPTOLOGICAL ALEF +A725 ; Changes_When_Uppercased # L& LATIN SMALL LETTER EGYPTOLOGICAL AIN +A727 ; Changes_When_Uppercased # L& LATIN SMALL LETTER HENG +A729 ; Changes_When_Uppercased # L& LATIN SMALL LETTER TZ +A72B ; Changes_When_Uppercased # L& LATIN SMALL LETTER TRESILLO +A72D ; Changes_When_Uppercased # L& LATIN SMALL LETTER CUATRILLO +A72F ; Changes_When_Uppercased # L& LATIN SMALL LETTER CUATRILLO WITH COMMA +A733 ; Changes_When_Uppercased # L& LATIN SMALL LETTER AA +A735 ; Changes_When_Uppercased # L& LATIN SMALL LETTER AO +A737 ; Changes_When_Uppercased # L& LATIN SMALL LETTER AU +A739 ; Changes_When_Uppercased # L& LATIN SMALL LETTER AV +A73B ; Changes_When_Uppercased # L& LATIN SMALL LETTER AV WITH HORIZONTAL BAR +A73D ; Changes_When_Uppercased # L& LATIN SMALL LETTER AY +A73F ; Changes_When_Uppercased # L& LATIN SMALL LETTER REVERSED C WITH DOT +A741 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH STROKE +A743 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH DIAGONAL STROKE +A745 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE +A747 ; Changes_When_Uppercased # L& LATIN SMALL LETTER BROKEN L +A749 ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH HIGH STROKE +A74B ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH LONG STROKE OVERLAY +A74D ; Changes_When_Uppercased # L& LATIN SMALL LETTER O WITH LOOP +A74F ; Changes_When_Uppercased # L& LATIN SMALL LETTER OO +A751 ; Changes_When_Uppercased # L& LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER +A753 ; Changes_When_Uppercased # L& LATIN SMALL LETTER P WITH FLOURISH +A755 ; Changes_When_Uppercased # L& LATIN SMALL LETTER P WITH SQUIRREL TAIL +A757 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER +A759 ; Changes_When_Uppercased # L& LATIN SMALL LETTER Q WITH DIAGONAL STROKE +A75B ; Changes_When_Uppercased # L& LATIN SMALL LETTER R ROTUNDA +A75D ; Changes_When_Uppercased # L& LATIN SMALL LETTER RUM ROTUNDA +A75F ; Changes_When_Uppercased # L& LATIN SMALL LETTER V WITH DIAGONAL STROKE +A761 ; Changes_When_Uppercased # L& LATIN SMALL LETTER VY +A763 ; Changes_When_Uppercased # L& LATIN SMALL LETTER VISIGOTHIC Z +A765 ; Changes_When_Uppercased # L& LATIN SMALL LETTER THORN WITH STROKE +A767 ; Changes_When_Uppercased # L& LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER +A769 ; Changes_When_Uppercased # L& LATIN SMALL LETTER VEND +A76B ; Changes_When_Uppercased # L& LATIN SMALL LETTER ET +A76D ; Changes_When_Uppercased # L& LATIN SMALL LETTER IS +A76F ; Changes_When_Uppercased # L& LATIN SMALL LETTER CON +A77A ; Changes_When_Uppercased # L& LATIN SMALL LETTER INSULAR D +A77C ; Changes_When_Uppercased # L& LATIN SMALL LETTER INSULAR F +A77F ; Changes_When_Uppercased # L& LATIN SMALL LETTER TURNED INSULAR G +A781 ; Changes_When_Uppercased # L& LATIN SMALL LETTER TURNED L +A783 ; Changes_When_Uppercased # L& LATIN SMALL LETTER INSULAR R +A785 ; Changes_When_Uppercased # L& LATIN SMALL LETTER INSULAR S +A787 ; Changes_When_Uppercased # L& LATIN SMALL LETTER INSULAR T +A78C ; Changes_When_Uppercased # L& LATIN SMALL LETTER SALTILLO +A791 ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH DESCENDER +A793..A794 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER C WITH BAR..LATIN SMALL LETTER C WITH PALATAL HOOK +A797 ; Changes_When_Uppercased # L& LATIN SMALL LETTER B WITH FLOURISH +A799 ; Changes_When_Uppercased # L& LATIN SMALL LETTER F WITH STROKE +A79B ; Changes_When_Uppercased # L& LATIN SMALL LETTER VOLAPUK AE +A79D ; Changes_When_Uppercased # L& LATIN SMALL LETTER VOLAPUK OE +A79F ; Changes_When_Uppercased # L& LATIN SMALL LETTER VOLAPUK UE +A7A1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER G WITH OBLIQUE STROKE +A7A3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER K WITH OBLIQUE STROKE +A7A5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER N WITH OBLIQUE STROKE +A7A7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER R WITH OBLIQUE STROKE +A7A9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH OBLIQUE STROKE +A7B5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER BETA +A7B7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER OMEGA +A7B9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH STROKE +A7BB ; Changes_When_Uppercased # L& LATIN SMALL LETTER GLOTTAL A +A7BD ; Changes_When_Uppercased # L& LATIN SMALL LETTER GLOTTAL I +A7BF ; Changes_When_Uppercased # L& LATIN SMALL LETTER GLOTTAL U +A7C1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER OLD POLISH O +A7C3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER ANGLICANA W +A7C8 ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY +A7CA ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7CD ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7CF ; Changes_When_Uppercased # L& LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE +A7D1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER DOUBLE THORN +A7D5 ; Changes_When_Uppercased # L& LATIN SMALL LETTER DOUBLE WYNN +A7D7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER MIDDLE SCOTS S +A7D9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER SIGMOID S +A7DB ; Changes_When_Uppercased # L& LATIN SMALL LETTER LAMBDA +A7F6 ; Changes_When_Uppercased # L& LATIN SMALL LETTER REVERSED HALF H +AB53 ; Changes_When_Uppercased # L& LATIN SMALL LETTER CHI +AB70..ABBF ; Changes_When_Uppercased # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA +FB00..FB06 ; Changes_When_Uppercased # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; Changes_When_Uppercased # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FF41..FF5A ; Changes_When_Uppercased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +10428..1044F ; Changes_When_Uppercased # L& [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW +104D8..104FB ; Changes_When_Uppercased # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10597..105A1 ; Changes_When_Uppercased # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Changes_When_Uppercased # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Changes_When_Uppercased # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Changes_When_Uppercased # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +10CC0..10CF2 ; Changes_When_Uppercased # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10D70..10D85 ; Changes_When_Uppercased # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA +118C0..118DF ; Changes_When_Uppercased # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO +16E60..16E7F ; Changes_When_Uppercased # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EBB..16ED3 ; Changes_When_Uppercased # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY +1E922..1E943 ; Changes_When_Uppercased # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA + +# Total code points: 1580 + +# ================================================ + +# Derived Property: Changes_When_Titlecased (CWT) +# Characters whose normalized forms are not stable under a toTitlecase mapping. +# For more information, see the definition of "isTitlecase(X)" +# in the "Conformance" / "Default Case Algorithms" section of the core specification. +# Changes_When_Titlecased(X) is true when toTitlecase(toNFD(X)) != toNFD(X) + +0061..007A ; Changes_When_Titlecased # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z +00B5 ; Changes_When_Titlecased # L& MICRO SIGN +00DF..00F6 ; Changes_When_Titlecased # L& [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS +00F8..00FF ; Changes_When_Titlecased # L& [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS +0101 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH MACRON +0103 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH BREVE +0105 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH OGONEK +0107 ; Changes_When_Titlecased # L& LATIN SMALL LETTER C WITH ACUTE +0109 ; Changes_When_Titlecased # L& LATIN SMALL LETTER C WITH CIRCUMFLEX +010B ; Changes_When_Titlecased # L& LATIN SMALL LETTER C WITH DOT ABOVE +010D ; Changes_When_Titlecased # L& LATIN SMALL LETTER C WITH CARON +010F ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH CARON +0111 ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH STROKE +0113 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH MACRON +0115 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH BREVE +0117 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH DOT ABOVE +0119 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH OGONEK +011B ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CARON +011D ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH CIRCUMFLEX +011F ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH BREVE +0121 ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH DOT ABOVE +0123 ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH CEDILLA +0125 ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH CIRCUMFLEX +0127 ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH STROKE +0129 ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH TILDE +012B ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH MACRON +012D ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH BREVE +012F ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH OGONEK +0131 ; Changes_When_Titlecased # L& LATIN SMALL LETTER DOTLESS I +0133 ; Changes_When_Titlecased # L& LATIN SMALL LIGATURE IJ +0135 ; Changes_When_Titlecased # L& LATIN SMALL LETTER J WITH CIRCUMFLEX +0137 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH CEDILLA +013A ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH ACUTE +013C ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH CEDILLA +013E ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH CARON +0140 ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH MIDDLE DOT +0142 ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH STROKE +0144 ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH ACUTE +0146 ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH CEDILLA +0148..0149 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014B ; Changes_When_Titlecased # L& LATIN SMALL LETTER ENG +014D ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH MACRON +014F ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH BREVE +0151 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH DOUBLE ACUTE +0153 ; Changes_When_Titlecased # L& LATIN SMALL LIGATURE OE +0155 ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH ACUTE +0157 ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH CEDILLA +0159 ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH CARON +015B ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH ACUTE +015D ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH CIRCUMFLEX +015F ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH CEDILLA +0161 ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH CARON +0163 ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH CEDILLA +0165 ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH CARON +0167 ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH STROKE +0169 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH TILDE +016B ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH MACRON +016D ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH BREVE +016F ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH RING ABOVE +0171 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH DOUBLE ACUTE +0173 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH OGONEK +0175 ; Changes_When_Titlecased # L& LATIN SMALL LETTER W WITH CIRCUMFLEX +0177 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Y WITH CIRCUMFLEX +017A ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH ACUTE +017C ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH DOT ABOVE +017E..0180 ; Changes_When_Titlecased # L& [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE +0183 ; Changes_When_Titlecased # L& LATIN SMALL LETTER B WITH TOPBAR +0185 ; Changes_When_Titlecased # L& LATIN SMALL LETTER TONE SIX +0188 ; Changes_When_Titlecased # L& LATIN SMALL LETTER C WITH HOOK +018C ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH TOPBAR +0192 ; Changes_When_Titlecased # L& LATIN SMALL LETTER F WITH HOOK +0195 ; Changes_When_Titlecased # L& LATIN SMALL LETTER HV +0199..019B ; Changes_When_Titlecased # L& [3] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE +019E ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH LONG RIGHT LEG +01A1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH HORN +01A3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER OI +01A5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER P WITH HOOK +01A8 ; Changes_When_Titlecased # L& LATIN SMALL LETTER TONE TWO +01AD ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH HOOK +01B0 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH HORN +01B4 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Y WITH HOOK +01B6 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH STROKE +01B9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER EZH REVERSED +01BD ; Changes_When_Titlecased # L& LATIN SMALL LETTER TONE FIVE +01BF ; Changes_When_Titlecased # L& LATIN LETTER WYNN +01C4 ; Changes_When_Titlecased # L& LATIN CAPITAL LETTER DZ WITH CARON +01C6..01C7 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER DZ WITH CARON..LATIN CAPITAL LETTER LJ +01C9..01CA ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER LJ..LATIN CAPITAL LETTER NJ +01CC ; Changes_When_Titlecased # L& LATIN SMALL LETTER NJ +01CE ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH CARON +01D0 ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH CARON +01D2 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH CARON +01D4 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH CARON +01D6 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D8 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01DA ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01DC..01DD ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E +01DF ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01E1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON +01E3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER AE WITH MACRON +01E5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH STROKE +01E7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH CARON +01E9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH CARON +01EB ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH OGONEK +01ED ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH OGONEK AND MACRON +01EF..01F1 ; Changes_When_Titlecased # L& [3] LATIN SMALL LETTER EZH WITH CARON..LATIN CAPITAL LETTER DZ +01F3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER DZ +01F5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH ACUTE +01F9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH GRAVE +01FB ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FD ; Changes_When_Titlecased # L& LATIN SMALL LETTER AE WITH ACUTE +01FF ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH STROKE AND ACUTE +0201 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH DOUBLE GRAVE +0203 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH INVERTED BREVE +0205 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH DOUBLE GRAVE +0207 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH INVERTED BREVE +0209 ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH DOUBLE GRAVE +020B ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH INVERTED BREVE +020D ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH DOUBLE GRAVE +020F ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH INVERTED BREVE +0211 ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH DOUBLE GRAVE +0213 ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH INVERTED BREVE +0215 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH DOUBLE GRAVE +0217 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH INVERTED BREVE +0219 ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH COMMA BELOW +021B ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH COMMA BELOW +021D ; Changes_When_Titlecased # L& LATIN SMALL LETTER YOGH +021F ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH CARON +0223 ; Changes_When_Titlecased # L& LATIN SMALL LETTER OU +0225 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH HOOK +0227 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH DOT ABOVE +0229 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CEDILLA +022B ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022D ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH TILDE AND MACRON +022F ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH DOT ABOVE +0231 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON +0233 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Y WITH MACRON +023C ; Changes_When_Titlecased # L& LATIN SMALL LETTER C WITH STROKE +023F..0240 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL +0242 ; Changes_When_Titlecased # L& LATIN SMALL LETTER GLOTTAL STOP +0247 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH STROKE +0249 ; Changes_When_Titlecased # L& LATIN SMALL LETTER J WITH STROKE +024B ; Changes_When_Titlecased # L& LATIN SMALL LETTER Q WITH HOOK TAIL +024D ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH STROKE +024F..0254 ; Changes_When_Titlecased # L& [6] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER OPEN O +0256..0257 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER D WITH TAIL..LATIN SMALL LETTER D WITH HOOK +0259 ; Changes_When_Titlecased # L& LATIN SMALL LETTER SCHWA +025B..025C ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER OPEN E..LATIN SMALL LETTER REVERSED OPEN E +0260..0261 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER G WITH HOOK..LATIN SMALL LETTER SCRIPT G +0263..0266 ; Changes_When_Titlecased # L& [4] LATIN SMALL LETTER GAMMA..LATIN SMALL LETTER H WITH HOOK +0268..026C ; Changes_When_Titlecased # L& [5] LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER L WITH BELT +026F ; Changes_When_Titlecased # L& LATIN SMALL LETTER TURNED M +0271..0272 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER M WITH HOOK..LATIN SMALL LETTER N WITH LEFT HOOK +0275 ; Changes_When_Titlecased # L& LATIN SMALL LETTER BARRED O +027D ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH TAIL +0280 ; Changes_When_Titlecased # L& LATIN LETTER SMALL CAPITAL R +0282..0283 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER S WITH HOOK..LATIN SMALL LETTER ESH +0287..028C ; Changes_When_Titlecased # L& [6] LATIN SMALL LETTER TURNED T..LATIN SMALL LETTER TURNED V +0292 ; Changes_When_Titlecased # L& LATIN SMALL LETTER EZH +029D..029E ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER J WITH CROSSED-TAIL..LATIN SMALL LETTER TURNED K +0345 ; Changes_When_Titlecased # Mn COMBINING GREEK YPOGEGRAMMENI +0371 ; Changes_When_Titlecased # L& GREEK SMALL LETTER HETA +0373 ; Changes_When_Titlecased # L& GREEK SMALL LETTER ARCHAIC SAMPI +0377 ; Changes_When_Titlecased # L& GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +037B..037D ; Changes_When_Titlecased # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +0390 ; Changes_When_Titlecased # L& GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +03AC..03CE ; Changes_When_Titlecased # L& [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS +03D0..03D1 ; Changes_When_Titlecased # L& [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL +03D5..03D7 ; Changes_When_Titlecased # L& [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL +03D9 ; Changes_When_Titlecased # L& GREEK SMALL LETTER ARCHAIC KOPPA +03DB ; Changes_When_Titlecased # L& GREEK SMALL LETTER STIGMA +03DD ; Changes_When_Titlecased # L& GREEK SMALL LETTER DIGAMMA +03DF ; Changes_When_Titlecased # L& GREEK SMALL LETTER KOPPA +03E1 ; Changes_When_Titlecased # L& GREEK SMALL LETTER SAMPI +03E3 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER SHEI +03E5 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER FEI +03E7 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER KHEI +03E9 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER HORI +03EB ; Changes_When_Titlecased # L& COPTIC SMALL LETTER GANGIA +03ED ; Changes_When_Titlecased # L& COPTIC SMALL LETTER SHIMA +03EF..03F3 ; Changes_When_Titlecased # L& [5] COPTIC SMALL LETTER DEI..GREEK LETTER YOT +03F5 ; Changes_When_Titlecased # L& GREEK LUNATE EPSILON SYMBOL +03F8 ; Changes_When_Titlecased # L& GREEK SMALL LETTER SHO +03FB ; Changes_When_Titlecased # L& GREEK SMALL LETTER SAN +0430..045F ; Changes_When_Titlecased # L& [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE +0461 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER OMEGA +0463 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER YAT +0465 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IOTIFIED E +0467 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER LITTLE YUS +0469 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS +046B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER BIG YUS +046D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IOTIFIED BIG YUS +046F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KSI +0471 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER PSI +0473 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER FITA +0475 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IZHITSA +0477 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0479 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER UK +047B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ROUND OMEGA +047D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER OMEGA WITH TITLO +047F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER OT +0481 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOPPA +048B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SHORT I WITH TAIL +048D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SEMISOFT SIGN +048F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ER WITH TICK +0491 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER GHE WITH UPTURN +0493 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER GHE WITH STROKE +0495 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK +0497 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ZHE WITH DESCENDER +0499 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ZE WITH DESCENDER +049B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KA WITH DESCENDER +049D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE +049F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KA WITH STROKE +04A1 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER BASHKIR KA +04A3 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EN WITH DESCENDER +04A5 ; Changes_When_Titlecased # L& CYRILLIC SMALL LIGATURE EN GHE +04A7 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK +04A9 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ABKHASIAN HA +04AB ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ES WITH DESCENDER +04AD ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER TE WITH DESCENDER +04AF ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER STRAIGHT U +04B1 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE +04B3 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER HA WITH DESCENDER +04B5 ; Changes_When_Titlecased # L& CYRILLIC SMALL LIGATURE TE TSE +04B7 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER CHE WITH DESCENDER +04B9 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE +04BB ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SHHA +04BD ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ABKHASIAN CHE +04BF ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER +04C2 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ZHE WITH BREVE +04C4 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KA WITH HOOK +04C6 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EL WITH TAIL +04C8 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EN WITH HOOK +04CA ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EN WITH TAIL +04CC ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KHAKASSIAN CHE +04CE..04CF ; Changes_When_Titlecased # L& [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA +04D1 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER A WITH BREVE +04D3 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER A WITH DIAERESIS +04D5 ; Changes_When_Titlecased # L& CYRILLIC SMALL LIGATURE A IE +04D7 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IE WITH BREVE +04D9 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SCHWA +04DB ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS +04DD ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ZHE WITH DIAERESIS +04DF ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ZE WITH DIAERESIS +04E1 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ABKHASIAN DZE +04E3 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER I WITH MACRON +04E5 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER I WITH DIAERESIS +04E7 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER O WITH DIAERESIS +04E9 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER BARRED O +04EB ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS +04ED ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER E WITH DIAERESIS +04EF ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER U WITH MACRON +04F1 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER U WITH DIAERESIS +04F3 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE +04F5 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER CHE WITH DIAERESIS +04F7 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER GHE WITH DESCENDER +04F9 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER YERU WITH DIAERESIS +04FB ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK +04FD ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER HA WITH HOOK +04FF ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER HA WITH STROKE +0501 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOMI DE +0503 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOMI DJE +0505 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOMI ZJE +0507 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOMI DZJE +0509 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOMI LJE +050B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOMI NJE +050D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOMI SJE +050F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER KOMI TJE +0511 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER REVERSED ZE +0513 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EL WITH HOOK +0515 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER LHA +0517 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER RHA +0519 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER YAE +051B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER QA +051D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER WE +051F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ALEUT KA +0521 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK +0523 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK +0525 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER PE WITH DESCENDER +0527 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SHHA WITH DESCENDER +0529 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EN WITH LEFT HOOK +052B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DZZHE +052D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DCHE +052F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER EL WITH DESCENDER +0561..0587 ; Changes_When_Titlecased # L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN +13F8..13FD ; Changes_When_Titlecased # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV +1C80..1C88 ; Changes_When_Titlecased # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +1C8A ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER TJE +1D79 ; Changes_When_Titlecased # L& LATIN SMALL LETTER INSULAR G +1D7D ; Changes_When_Titlecased # L& LATIN SMALL LETTER P WITH STROKE +1D8E ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH PALATAL HOOK +1E01 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH RING BELOW +1E03 ; Changes_When_Titlecased # L& LATIN SMALL LETTER B WITH DOT ABOVE +1E05 ; Changes_When_Titlecased # L& LATIN SMALL LETTER B WITH DOT BELOW +1E07 ; Changes_When_Titlecased # L& LATIN SMALL LETTER B WITH LINE BELOW +1E09 ; Changes_When_Titlecased # L& LATIN SMALL LETTER C WITH CEDILLA AND ACUTE +1E0B ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH DOT ABOVE +1E0D ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH DOT BELOW +1E0F ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH LINE BELOW +1E11 ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH CEDILLA +1E13 ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW +1E15 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH MACRON AND GRAVE +1E17 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH MACRON AND ACUTE +1E19 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW +1E1B ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH TILDE BELOW +1E1D ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CEDILLA AND BREVE +1E1F ; Changes_When_Titlecased # L& LATIN SMALL LETTER F WITH DOT ABOVE +1E21 ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH MACRON +1E23 ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH DOT ABOVE +1E25 ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH DOT BELOW +1E27 ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH DIAERESIS +1E29 ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH CEDILLA +1E2B ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH BREVE BELOW +1E2D ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH TILDE BELOW +1E2F ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE +1E31 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH ACUTE +1E33 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH DOT BELOW +1E35 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH LINE BELOW +1E37 ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH DOT BELOW +1E39 ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH DOT BELOW AND MACRON +1E3B ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH LINE BELOW +1E3D ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW +1E3F ; Changes_When_Titlecased # L& LATIN SMALL LETTER M WITH ACUTE +1E41 ; Changes_When_Titlecased # L& LATIN SMALL LETTER M WITH DOT ABOVE +1E43 ; Changes_When_Titlecased # L& LATIN SMALL LETTER M WITH DOT BELOW +1E45 ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH DOT ABOVE +1E47 ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH DOT BELOW +1E49 ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH LINE BELOW +1E4B ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW +1E4D ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH TILDE AND ACUTE +1E4F ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH TILDE AND DIAERESIS +1E51 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH MACRON AND GRAVE +1E53 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH MACRON AND ACUTE +1E55 ; Changes_When_Titlecased # L& LATIN SMALL LETTER P WITH ACUTE +1E57 ; Changes_When_Titlecased # L& LATIN SMALL LETTER P WITH DOT ABOVE +1E59 ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH DOT ABOVE +1E5B ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH DOT BELOW +1E5D ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH DOT BELOW AND MACRON +1E5F ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH LINE BELOW +1E61 ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH DOT ABOVE +1E63 ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH DOT BELOW +1E65 ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE +1E67 ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH CARON AND DOT ABOVE +1E69 ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE +1E6B ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH DOT ABOVE +1E6D ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH DOT BELOW +1E6F ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH LINE BELOW +1E71 ; Changes_When_Titlecased # L& LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW +1E73 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH DIAERESIS BELOW +1E75 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH TILDE BELOW +1E77 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW +1E79 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH TILDE AND ACUTE +1E7B ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH MACRON AND DIAERESIS +1E7D ; Changes_When_Titlecased # L& LATIN SMALL LETTER V WITH TILDE +1E7F ; Changes_When_Titlecased # L& LATIN SMALL LETTER V WITH DOT BELOW +1E81 ; Changes_When_Titlecased # L& LATIN SMALL LETTER W WITH GRAVE +1E83 ; Changes_When_Titlecased # L& LATIN SMALL LETTER W WITH ACUTE +1E85 ; Changes_When_Titlecased # L& LATIN SMALL LETTER W WITH DIAERESIS +1E87 ; Changes_When_Titlecased # L& LATIN SMALL LETTER W WITH DOT ABOVE +1E89 ; Changes_When_Titlecased # L& LATIN SMALL LETTER W WITH DOT BELOW +1E8B ; Changes_When_Titlecased # L& LATIN SMALL LETTER X WITH DOT ABOVE +1E8D ; Changes_When_Titlecased # L& LATIN SMALL LETTER X WITH DIAERESIS +1E8F ; Changes_When_Titlecased # L& LATIN SMALL LETTER Y WITH DOT ABOVE +1E91 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH CIRCUMFLEX +1E93 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH DOT BELOW +1E95..1E9B ; Changes_When_Titlecased # L& [7] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE +1EA1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH DOT BELOW +1EA3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH HOOK ABOVE +1EA5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAB ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE +1EAD ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAF ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH BREVE AND ACUTE +1EB1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH BREVE AND GRAVE +1EB3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE +1EB5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH BREVE AND TILDE +1EB7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER A WITH BREVE AND DOT BELOW +1EB9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH DOT BELOW +1EBB ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH HOOK ABOVE +1EBD ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH TILDE +1EBF ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +1EC7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH HOOK ABOVE +1ECB ; Changes_When_Titlecased # L& LATIN SMALL LETTER I WITH DOT BELOW +1ECD ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH DOT BELOW +1ECF ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH HOOK ABOVE +1ED1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE +1ED9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EDB ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH HORN AND ACUTE +1EDD ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH HORN AND GRAVE +1EDF ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE +1EE1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH HORN AND TILDE +1EE3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH HORN AND DOT BELOW +1EE5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH DOT BELOW +1EE7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH HOOK ABOVE +1EE9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH HORN AND ACUTE +1EEB ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH HORN AND GRAVE +1EED ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE +1EEF ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH HORN AND TILDE +1EF1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH HORN AND DOT BELOW +1EF3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Y WITH GRAVE +1EF5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Y WITH DOT BELOW +1EF7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Y WITH HOOK ABOVE +1EF9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Y WITH TILDE +1EFB ; Changes_When_Titlecased # L& LATIN SMALL LETTER MIDDLE-WELSH LL +1EFD ; Changes_When_Titlecased # L& LATIN SMALL LETTER MIDDLE-WELSH V +1EFF..1F07 ; Changes_When_Titlecased # L& [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F10..1F15 ; Changes_When_Titlecased # L& [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F27 ; Changes_When_Titlecased # L& [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI +1F30..1F37 ; Changes_When_Titlecased # L& [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI +1F40..1F45 ; Changes_When_Titlecased # L& [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; Changes_When_Titlecased # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F60..1F67 ; Changes_When_Titlecased # L& [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F70..1F7D ; Changes_When_Titlecased # L& [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1F87 ; Changes_When_Titlecased # L& [8] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F90..1F97 ; Changes_When_Titlecased # L& [8] GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1FA0..1FA7 ; Changes_When_Titlecased # L& [8] GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1FB0..1FB4 ; Changes_When_Titlecased # L& [5] GREEK SMALL LETTER ALPHA WITH VRACHY..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FB7 ; Changes_When_Titlecased # L& [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI +1FBE ; Changes_When_Titlecased # L& GREEK PROSGEGRAMMENI +1FC2..1FC4 ; Changes_When_Titlecased # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FC7 ; Changes_When_Titlecased # L& [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI +1FD0..1FD3 ; Changes_When_Titlecased # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FD7 ; Changes_When_Titlecased # L& [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI +1FE0..1FE7 ; Changes_When_Titlecased # L& [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI +1FF2..1FF4 ; Changes_When_Titlecased # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FF7 ; Changes_When_Titlecased # L& [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI +214E ; Changes_When_Titlecased # L& TURNED SMALL F +2170..217F ; Changes_When_Titlecased # Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND +2184 ; Changes_When_Titlecased # L& LATIN SMALL LETTER REVERSED C +24D0..24E9 ; Changes_When_Titlecased # So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z +2C30..2C5F ; Changes_When_Titlecased # L& [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI +2C61 ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH DOUBLE BAR +2C65..2C66 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE +2C68 ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH DESCENDER +2C6A ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH DESCENDER +2C6C ; Changes_When_Titlecased # L& LATIN SMALL LETTER Z WITH DESCENDER +2C73 ; Changes_When_Titlecased # L& LATIN SMALL LETTER W WITH HOOK +2C76 ; Changes_When_Titlecased # L& LATIN SMALL LETTER HALF H +2C81 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER ALFA +2C83 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER VIDA +2C85 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER GAMMA +2C87 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER DALDA +2C89 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER EIE +2C8B ; Changes_When_Titlecased # L& COPTIC SMALL LETTER SOU +2C8D ; Changes_When_Titlecased # L& COPTIC SMALL LETTER ZATA +2C8F ; Changes_When_Titlecased # L& COPTIC SMALL LETTER HATE +2C91 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER THETHE +2C93 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER IAUDA +2C95 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER KAPA +2C97 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER LAULA +2C99 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER MI +2C9B ; Changes_When_Titlecased # L& COPTIC SMALL LETTER NI +2C9D ; Changes_When_Titlecased # L& COPTIC SMALL LETTER KSI +2C9F ; Changes_When_Titlecased # L& COPTIC SMALL LETTER O +2CA1 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER PI +2CA3 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER RO +2CA5 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER SIMA +2CA7 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER TAU +2CA9 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER UA +2CAB ; Changes_When_Titlecased # L& COPTIC SMALL LETTER FI +2CAD ; Changes_When_Titlecased # L& COPTIC SMALL LETTER KHI +2CAF ; Changes_When_Titlecased # L& COPTIC SMALL LETTER PSI +2CB1 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OOU +2CB3 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER DIALECT-P ALEF +2CB5 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC AIN +2CB7 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER CRYPTOGRAMMIC EIE +2CB9 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER DIALECT-P KAPA +2CBB ; Changes_When_Titlecased # L& COPTIC SMALL LETTER DIALECT-P NI +2CBD ; Changes_When_Titlecased # L& COPTIC SMALL LETTER CRYPTOGRAMMIC NI +2CBF ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC OOU +2CC1 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER SAMPI +2CC3 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER CROSSED SHEI +2CC5 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC SHEI +2CC7 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC ESH +2CC9 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER AKHMIMIC KHEI +2CCB ; Changes_When_Titlecased # L& COPTIC SMALL LETTER DIALECT-P HORI +2CCD ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC HORI +2CCF ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC HA +2CD1 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER L-SHAPED HA +2CD3 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC HEI +2CD5 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC HAT +2CD7 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC GANGIA +2CD9 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC DJA +2CDB ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD COPTIC SHIMA +2CDD ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD NUBIAN SHIMA +2CDF ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD NUBIAN NGI +2CE1 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD NUBIAN NYI +2CE3 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER OLD NUBIAN WAU +2CEC ; Changes_When_Titlecased # L& COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI +2CEE ; Changes_When_Titlecased # L& COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA +2CF3 ; Changes_When_Titlecased # L& COPTIC SMALL LETTER BOHAIRIC KHEI +2D00..2D25 ; Changes_When_Titlecased # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE +2D27 ; Changes_When_Titlecased # L& GEORGIAN SMALL LETTER YN +2D2D ; Changes_When_Titlecased # L& GEORGIAN SMALL LETTER AEN +A641 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ZEMLYA +A643 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DZELO +A645 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER REVERSED DZE +A647 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IOTA +A649 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DJERV +A64B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER MONOGRAPH UK +A64D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER BROAD OMEGA +A64F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER NEUTRAL YER +A651 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER YERU WITH BACK YER +A653 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IOTIFIED YAT +A655 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER REVERSED YU +A657 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IOTIFIED A +A659 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER CLOSED LITTLE YUS +A65B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER BLENDED YUS +A65D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS +A65F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER YN +A661 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER REVERSED TSE +A663 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SOFT DE +A665 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SOFT EL +A667 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SOFT EM +A669 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER MONOCULAR O +A66B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER BINOCULAR O +A66D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DOUBLE MONOCULAR O +A681 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DWE +A683 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DZWE +A685 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER ZHWE +A687 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER CCHE +A689 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DZZE +A68B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK +A68D ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER TWE +A68F ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER TSWE +A691 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER TSSE +A693 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER TCHE +A695 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER HWE +A697 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER SHWE +A699 ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER DOUBLE O +A69B ; Changes_When_Titlecased # L& CYRILLIC SMALL LETTER CROSSED O +A723 ; Changes_When_Titlecased # L& LATIN SMALL LETTER EGYPTOLOGICAL ALEF +A725 ; Changes_When_Titlecased # L& LATIN SMALL LETTER EGYPTOLOGICAL AIN +A727 ; Changes_When_Titlecased # L& LATIN SMALL LETTER HENG +A729 ; Changes_When_Titlecased # L& LATIN SMALL LETTER TZ +A72B ; Changes_When_Titlecased # L& LATIN SMALL LETTER TRESILLO +A72D ; Changes_When_Titlecased # L& LATIN SMALL LETTER CUATRILLO +A72F ; Changes_When_Titlecased # L& LATIN SMALL LETTER CUATRILLO WITH COMMA +A733 ; Changes_When_Titlecased # L& LATIN SMALL LETTER AA +A735 ; Changes_When_Titlecased # L& LATIN SMALL LETTER AO +A737 ; Changes_When_Titlecased # L& LATIN SMALL LETTER AU +A739 ; Changes_When_Titlecased # L& LATIN SMALL LETTER AV +A73B ; Changes_When_Titlecased # L& LATIN SMALL LETTER AV WITH HORIZONTAL BAR +A73D ; Changes_When_Titlecased # L& LATIN SMALL LETTER AY +A73F ; Changes_When_Titlecased # L& LATIN SMALL LETTER REVERSED C WITH DOT +A741 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH STROKE +A743 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH DIAGONAL STROKE +A745 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE +A747 ; Changes_When_Titlecased # L& LATIN SMALL LETTER BROKEN L +A749 ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH HIGH STROKE +A74B ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH LONG STROKE OVERLAY +A74D ; Changes_When_Titlecased # L& LATIN SMALL LETTER O WITH LOOP +A74F ; Changes_When_Titlecased # L& LATIN SMALL LETTER OO +A751 ; Changes_When_Titlecased # L& LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER +A753 ; Changes_When_Titlecased # L& LATIN SMALL LETTER P WITH FLOURISH +A755 ; Changes_When_Titlecased # L& LATIN SMALL LETTER P WITH SQUIRREL TAIL +A757 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER +A759 ; Changes_When_Titlecased # L& LATIN SMALL LETTER Q WITH DIAGONAL STROKE +A75B ; Changes_When_Titlecased # L& LATIN SMALL LETTER R ROTUNDA +A75D ; Changes_When_Titlecased # L& LATIN SMALL LETTER RUM ROTUNDA +A75F ; Changes_When_Titlecased # L& LATIN SMALL LETTER V WITH DIAGONAL STROKE +A761 ; Changes_When_Titlecased # L& LATIN SMALL LETTER VY +A763 ; Changes_When_Titlecased # L& LATIN SMALL LETTER VISIGOTHIC Z +A765 ; Changes_When_Titlecased # L& LATIN SMALL LETTER THORN WITH STROKE +A767 ; Changes_When_Titlecased # L& LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER +A769 ; Changes_When_Titlecased # L& LATIN SMALL LETTER VEND +A76B ; Changes_When_Titlecased # L& LATIN SMALL LETTER ET +A76D ; Changes_When_Titlecased # L& LATIN SMALL LETTER IS +A76F ; Changes_When_Titlecased # L& LATIN SMALL LETTER CON +A77A ; Changes_When_Titlecased # L& LATIN SMALL LETTER INSULAR D +A77C ; Changes_When_Titlecased # L& LATIN SMALL LETTER INSULAR F +A77F ; Changes_When_Titlecased # L& LATIN SMALL LETTER TURNED INSULAR G +A781 ; Changes_When_Titlecased # L& LATIN SMALL LETTER TURNED L +A783 ; Changes_When_Titlecased # L& LATIN SMALL LETTER INSULAR R +A785 ; Changes_When_Titlecased # L& LATIN SMALL LETTER INSULAR S +A787 ; Changes_When_Titlecased # L& LATIN SMALL LETTER INSULAR T +A78C ; Changes_When_Titlecased # L& LATIN SMALL LETTER SALTILLO +A791 ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH DESCENDER +A793..A794 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER C WITH BAR..LATIN SMALL LETTER C WITH PALATAL HOOK +A797 ; Changes_When_Titlecased # L& LATIN SMALL LETTER B WITH FLOURISH +A799 ; Changes_When_Titlecased # L& LATIN SMALL LETTER F WITH STROKE +A79B ; Changes_When_Titlecased # L& LATIN SMALL LETTER VOLAPUK AE +A79D ; Changes_When_Titlecased # L& LATIN SMALL LETTER VOLAPUK OE +A79F ; Changes_When_Titlecased # L& LATIN SMALL LETTER VOLAPUK UE +A7A1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER G WITH OBLIQUE STROKE +A7A3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER K WITH OBLIQUE STROKE +A7A5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER N WITH OBLIQUE STROKE +A7A7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER R WITH OBLIQUE STROKE +A7A9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH OBLIQUE STROKE +A7B5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER BETA +A7B7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER OMEGA +A7B9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH STROKE +A7BB ; Changes_When_Titlecased # L& LATIN SMALL LETTER GLOTTAL A +A7BD ; Changes_When_Titlecased # L& LATIN SMALL LETTER GLOTTAL I +A7BF ; Changes_When_Titlecased # L& LATIN SMALL LETTER GLOTTAL U +A7C1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER OLD POLISH O +A7C3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER ANGLICANA W +A7C8 ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY +A7CA ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7CD ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7CF ; Changes_When_Titlecased # L& LATIN SMALL LETTER PHARYNGEAL VOICED FRICATIVE +A7D1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER DOUBLE THORN +A7D5 ; Changes_When_Titlecased # L& LATIN SMALL LETTER DOUBLE WYNN +A7D7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER MIDDLE SCOTS S +A7D9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER SIGMOID S +A7DB ; Changes_When_Titlecased # L& LATIN SMALL LETTER LAMBDA +A7F6 ; Changes_When_Titlecased # L& LATIN SMALL LETTER REVERSED HALF H +AB53 ; Changes_When_Titlecased # L& LATIN SMALL LETTER CHI +AB70..ABBF ; Changes_When_Titlecased # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA +FB00..FB06 ; Changes_When_Titlecased # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; Changes_When_Titlecased # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FF41..FF5A ; Changes_When_Titlecased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +10428..1044F ; Changes_When_Titlecased # L& [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW +104D8..104FB ; Changes_When_Titlecased # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10597..105A1 ; Changes_When_Titlecased # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Changes_When_Titlecased # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Changes_When_Titlecased # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Changes_When_Titlecased # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +10CC0..10CF2 ; Changes_When_Titlecased # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10D70..10D85 ; Changes_When_Titlecased # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA +118C0..118DF ; Changes_When_Titlecased # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO +16E60..16E7F ; Changes_When_Titlecased # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EBB..16ED3 ; Changes_When_Titlecased # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY +1E922..1E943 ; Changes_When_Titlecased # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA + +# Total code points: 1507 + +# ================================================ + +# Derived Property: Changes_When_Casefolded (CWCF) +# Characters whose normalized forms are not stable under case folding. +# For more information, see the definition of "isCasefolded(X)" +# in the "Conformance" / "Default Case Algorithms" section of the core specification. +# Changes_When_Casefolded(X) is true when toCasefold(toNFD(X)) != toNFD(X) + +0041..005A ; Changes_When_Casefolded # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z +00B5 ; Changes_When_Casefolded # L& MICRO SIGN +00C0..00D6 ; Changes_When_Casefolded # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D8..00DF ; Changes_When_Casefolded # L& [8] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER SHARP S +0100 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH MACRON +0102 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE +0104 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH OGONEK +0106 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER C WITH ACUTE +0108 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER C WITH CIRCUMFLEX +010A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER C WITH DOT ABOVE +010C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER C WITH CARON +010E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER D WITH CARON +0110 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER D WITH STROKE +0112 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH MACRON +0114 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH BREVE +0116 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH DOT ABOVE +0118 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH OGONEK +011A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CARON +011C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH CIRCUMFLEX +011E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH BREVE +0120 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH DOT ABOVE +0122 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH CEDILLA +0124 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0126 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH STROKE +0128 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH TILDE +012A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH MACRON +012C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH BREVE +012E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH OGONEK +0130 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH DOT ABOVE +0132 ; Changes_When_Casefolded # L& LATIN CAPITAL LIGATURE IJ +0134 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0136 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH CEDILLA +0139 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH ACUTE +013B ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH CEDILLA +013D ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH CARON +013F ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH MIDDLE DOT +0141 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH STROKE +0143 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH ACUTE +0145 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH CEDILLA +0147 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH CARON +0149..014A ; Changes_When_Casefolded # L& [2] LATIN SMALL LETTER N PRECEDED BY APOSTROPHE..LATIN CAPITAL LETTER ENG +014C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH MACRON +014E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH BREVE +0150 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0152 ; Changes_When_Casefolded # L& LATIN CAPITAL LIGATURE OE +0154 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH ACUTE +0156 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH CEDILLA +0158 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH CARON +015A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH ACUTE +015C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH CIRCUMFLEX +015E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH CEDILLA +0160 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH CARON +0162 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH CEDILLA +0164 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH CARON +0166 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH STROKE +0168 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH TILDE +016A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH MACRON +016C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH BREVE +016E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH RING ABOVE +0170 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0172 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH OGONEK +0174 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0176 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0178..0179 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE +017B ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Z WITH DOT ABOVE +017D ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Z WITH CARON +017F ; Changes_When_Casefolded # L& LATIN SMALL LETTER LONG S +0181..0182 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR +0184 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER TONE SIX +0186..0187 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK +0189..018B ; Changes_When_Casefolded # L& [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR +018E..0191 ; Changes_When_Casefolded # L& [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK +0193..0194 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA +0196..0198 ; Changes_When_Casefolded # L& [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK +019C..019D ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK +019F..01A0 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN +01A2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER OI +01A4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER P WITH HOOK +01A6..01A7 ; Changes_When_Casefolded # L& [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO +01A9 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER ESH +01AC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH HOOK +01AE..01AF ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN +01B1..01B3 ; Changes_When_Casefolded # L& [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK +01B5 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Z WITH STROKE +01B7..01B8 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED +01BC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER TONE FIVE +01C4..01C5 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON +01C7..01C8 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER LJ..LATIN CAPITAL LETTER L WITH SMALL LETTER J +01CA..01CB ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER NJ..LATIN CAPITAL LETTER N WITH SMALL LETTER J +01CD ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH CARON +01CF ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH CARON +01D1 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH CARON +01D3 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH CARON +01D5 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01D7 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D9 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +01DB ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01DE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +01E0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON +01E2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER AE WITH MACRON +01E4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH STROKE +01E6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH CARON +01E8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH CARON +01EA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH OGONEK +01EC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH OGONEK AND MACRON +01EE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER EZH WITH CARON +01F1..01F2 ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER DZ..LATIN CAPITAL LETTER D WITH SMALL LETTER Z +01F4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH ACUTE +01F6..01F8 ; Changes_When_Casefolded # L& [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE +01FA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +01FC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER AE WITH ACUTE +01FE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +0200 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH DOUBLE GRAVE +0202 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH INVERTED BREVE +0204 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH DOUBLE GRAVE +0206 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH INVERTED BREVE +0208 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH DOUBLE GRAVE +020A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH INVERTED BREVE +020C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH DOUBLE GRAVE +020E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH INVERTED BREVE +0210 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH DOUBLE GRAVE +0212 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH INVERTED BREVE +0214 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH DOUBLE GRAVE +0216 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH INVERTED BREVE +0218 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH COMMA BELOW +021A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH COMMA BELOW +021C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER YOGH +021E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH CARON +0220 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH LONG RIGHT LEG +0222 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER OU +0224 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Z WITH HOOK +0226 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH DOT ABOVE +0228 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CEDILLA +022A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +022C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH TILDE AND MACRON +022E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH DOT ABOVE +0230 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON +0232 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH MACRON +023A..023B ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE +023D..023E ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE +0241 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL STOP +0243..0246 ; Changes_When_Casefolded # L& [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE +0248 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER J WITH STROKE +024A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL +024C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH STROKE +024E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH STROKE +0345 ; Changes_When_Casefolded # Mn COMBINING GREEK YPOGEGRAMMENI +0370 ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER HETA +0372 ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER ARCHAIC SAMPI +0376 ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA +037F ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER YOT +0386 ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0388..038A ; Changes_When_Casefolded # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..038F ; Changes_When_Casefolded # L& [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS +0391..03A1 ; Changes_When_Casefolded # L& [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO +03A3..03AB ; Changes_When_Casefolded # L& [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +03C2 ; Changes_When_Casefolded # L& GREEK SMALL LETTER FINAL SIGMA +03CF..03D1 ; Changes_When_Casefolded # L& [3] GREEK CAPITAL KAI SYMBOL..GREEK THETA SYMBOL +03D5..03D6 ; Changes_When_Casefolded # L& [2] GREEK PHI SYMBOL..GREEK PI SYMBOL +03D8 ; Changes_When_Casefolded # L& GREEK LETTER ARCHAIC KOPPA +03DA ; Changes_When_Casefolded # L& GREEK LETTER STIGMA +03DC ; Changes_When_Casefolded # L& GREEK LETTER DIGAMMA +03DE ; Changes_When_Casefolded # L& GREEK LETTER KOPPA +03E0 ; Changes_When_Casefolded # L& GREEK LETTER SAMPI +03E2 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER SHEI +03E4 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER FEI +03E6 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER KHEI +03E8 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER HORI +03EA ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER GANGIA +03EC ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER SHIMA +03EE ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER DEI +03F0..03F1 ; Changes_When_Casefolded # L& [2] GREEK KAPPA SYMBOL..GREEK RHO SYMBOL +03F4..03F5 ; Changes_When_Casefolded # L& [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL +03F7 ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER SHO +03F9..03FA ; Changes_When_Casefolded # L& [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN +03FD..042F ; Changes_When_Casefolded # L& [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA +0460 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER OMEGA +0462 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER YAT +0464 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED E +0466 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER LITTLE YUS +0468 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS +046A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER BIG YUS +046C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS +046E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KSI +0470 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER PSI +0472 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER FITA +0474 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IZHITSA +0476 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0478 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER UK +047A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ROUND OMEGA +047C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER OMEGA WITH TITLO +047E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER OT +0480 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOPPA +048A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SHORT I WITH TAIL +048C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SEMISOFT SIGN +048E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ER WITH TICK +0490 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0492 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE +0494 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK +0496 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER +0498 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ZE WITH DESCENDER +049A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KA WITH DESCENDER +049C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE +049E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KA WITH STROKE +04A0 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER BASHKIR KA +04A2 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EN WITH DESCENDER +04A4 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LIGATURE EN GHE +04A6 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK +04A8 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ABKHASIAN HA +04AA ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ES WITH DESCENDER +04AC ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER TE WITH DESCENDER +04AE ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER STRAIGHT U +04B0 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE +04B2 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER HA WITH DESCENDER +04B4 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LIGATURE TE TSE +04B6 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER CHE WITH DESCENDER +04B8 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE +04BA ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SHHA +04BC ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE +04BE ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER +04C0..04C1 ; Changes_When_Casefolded # L& [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE +04C3 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KA WITH HOOK +04C5 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EL WITH TAIL +04C7 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EN WITH HOOK +04C9 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EN WITH TAIL +04CB ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KHAKASSIAN CHE +04CD ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EM WITH TAIL +04D0 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER A WITH BREVE +04D2 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER A WITH DIAERESIS +04D4 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LIGATURE A IE +04D6 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IE WITH BREVE +04D8 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SCHWA +04DA ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS +04DC ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS +04DE ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS +04E0 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ABKHASIAN DZE +04E2 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER I WITH MACRON +04E4 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER I WITH DIAERESIS +04E6 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER O WITH DIAERESIS +04E8 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER BARRED O +04EA ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS +04EC ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER E WITH DIAERESIS +04EE ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER U WITH MACRON +04F0 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER U WITH DIAERESIS +04F2 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE +04F4 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS +04F6 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER GHE WITH DESCENDER +04F8 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS +04FA ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK +04FC ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER HA WITH HOOK +04FE ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER HA WITH STROKE +0500 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI DE +0502 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI DJE +0504 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI ZJE +0506 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI DZJE +0508 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI LJE +050A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI NJE +050C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI SJE +050E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER KOMI TJE +0510 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER REVERSED ZE +0512 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EL WITH HOOK +0514 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER LHA +0516 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER RHA +0518 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER YAE +051A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER QA +051C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER WE +051E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ALEUT KA +0520 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK +0522 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK +0524 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER PE WITH DESCENDER +0526 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER +0528 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK +052A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DZZHE +052C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DCHE +052E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER EL WITH DESCENDER +0531..0556 ; Changes_When_Casefolded # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH +0587 ; Changes_When_Casefolded # L& ARMENIAN SMALL LIGATURE ECH YIWN +10A0..10C5 ; Changes_When_Casefolded # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE +10C7 ; Changes_When_Casefolded # L& GEORGIAN CAPITAL LETTER YN +10CD ; Changes_When_Casefolded # L& GEORGIAN CAPITAL LETTER AEN +13F8..13FD ; Changes_When_Casefolded # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV +1C80..1C89 ; Changes_When_Casefolded # L& [10] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC CAPITAL LETTER TJE +1C90..1CBA ; Changes_When_Casefolded # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN +1CBD..1CBF ; Changes_When_Casefolded # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN +1E00 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH RING BELOW +1E02 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER B WITH DOT ABOVE +1E04 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER B WITH DOT BELOW +1E06 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER B WITH LINE BELOW +1E08 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE +1E0A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER D WITH DOT ABOVE +1E0C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER D WITH DOT BELOW +1E0E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER D WITH LINE BELOW +1E10 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER D WITH CEDILLA +1E12 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW +1E14 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH MACRON AND GRAVE +1E16 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH MACRON AND ACUTE +1E18 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW +1E1A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH TILDE BELOW +1E1C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE +1E1E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER F WITH DOT ABOVE +1E20 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH MACRON +1E22 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH DOT ABOVE +1E24 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH DOT BELOW +1E26 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH DIAERESIS +1E28 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH CEDILLA +1E2A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH BREVE BELOW +1E2C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH TILDE BELOW +1E2E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE +1E30 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH ACUTE +1E32 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH DOT BELOW +1E34 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH LINE BELOW +1E36 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH DOT BELOW +1E38 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON +1E3A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH LINE BELOW +1E3C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW +1E3E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER M WITH ACUTE +1E40 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER M WITH DOT ABOVE +1E42 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER M WITH DOT BELOW +1E44 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH DOT ABOVE +1E46 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH DOT BELOW +1E48 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH LINE BELOW +1E4A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW +1E4C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH TILDE AND ACUTE +1E4E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS +1E50 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH MACRON AND GRAVE +1E52 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH MACRON AND ACUTE +1E54 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER P WITH ACUTE +1E56 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER P WITH DOT ABOVE +1E58 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH DOT ABOVE +1E5A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH DOT BELOW +1E5C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON +1E5E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH LINE BELOW +1E60 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH DOT ABOVE +1E62 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH DOT BELOW +1E64 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE +1E66 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE +1E68 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE +1E6A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH DOT ABOVE +1E6C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH DOT BELOW +1E6E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH LINE BELOW +1E70 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW +1E72 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH DIAERESIS BELOW +1E74 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH TILDE BELOW +1E76 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW +1E78 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH TILDE AND ACUTE +1E7A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS +1E7C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER V WITH TILDE +1E7E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER V WITH DOT BELOW +1E80 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER W WITH GRAVE +1E82 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER W WITH ACUTE +1E84 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER W WITH DIAERESIS +1E86 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER W WITH DOT ABOVE +1E88 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER W WITH DOT BELOW +1E8A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER X WITH DOT ABOVE +1E8C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER X WITH DIAERESIS +1E8E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH DOT ABOVE +1E90 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Z WITH CIRCUMFLEX +1E92 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Z WITH DOT BELOW +1E94 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Z WITH LINE BELOW +1E9A..1E9B ; Changes_When_Casefolded # L& [2] LATIN SMALL LETTER A WITH RIGHT HALF RING..LATIN SMALL LETTER LONG S WITH DOT ABOVE +1E9E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER SHARP S +1EA0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH DOT BELOW +1EA2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH HOOK ABOVE +1EA4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE +1EAC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE AND ACUTE +1EB0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE AND GRAVE +1EB2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE +1EB4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE AND TILDE +1EB6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW +1EB8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH DOT BELOW +1EBA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH HOOK ABOVE +1EBC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH TILDE +1EBE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH HOOK ABOVE +1ECA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER I WITH DOT BELOW +1ECC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH DOT BELOW +1ECE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH HOOK ABOVE +1ED0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EDA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH HORN AND ACUTE +1EDC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH HORN AND GRAVE +1EDE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE +1EE0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH HORN AND TILDE +1EE2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +1EE4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH DOT BELOW +1EE6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH HOOK ABOVE +1EE8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH HORN AND ACUTE +1EEA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH HORN AND GRAVE +1EEC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE +1EEE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH HORN AND TILDE +1EF0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW +1EF2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH GRAVE +1EF4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH DOT BELOW +1EF6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH HOOK ABOVE +1EF8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH TILDE +1EFA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER MIDDLE-WELSH LL +1EFC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER MIDDLE-WELSH V +1EFE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Y WITH LOOP +1F08..1F0F ; Changes_When_Casefolded # L& [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F18..1F1D ; Changes_When_Casefolded # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F28..1F2F ; Changes_When_Casefolded # L& [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI +1F38..1F3F ; Changes_When_Casefolded # L& [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI +1F48..1F4D ; Changes_When_Casefolded # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F59 ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F ; Changes_When_Casefolded # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F68..1F6F ; Changes_When_Casefolded # L& [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F80..1FAF ; Changes_When_Casefolded # L& [48] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FB2..1FB4 ; Changes_When_Casefolded # L& [3] GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB7..1FBC ; Changes_When_Casefolded # L& [6] GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FC2..1FC4 ; Changes_When_Casefolded # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC7..1FCC ; Changes_When_Casefolded # L& [6] GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FD8..1FDB ; Changes_When_Casefolded # L& [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA +1FE8..1FEC ; Changes_When_Casefolded # L& [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FF2..1FF4 ; Changes_When_Casefolded # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF7..1FFC ; Changes_When_Casefolded # L& [6] GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +2126 ; Changes_When_Casefolded # L& OHM SIGN +212A..212B ; Changes_When_Casefolded # L& [2] KELVIN SIGN..ANGSTROM SIGN +2132 ; Changes_When_Casefolded # L& TURNED CAPITAL F +2160..216F ; Changes_When_Casefolded # Nl [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND +2183 ; Changes_When_Casefolded # L& ROMAN NUMERAL REVERSED ONE HUNDRED +24B6..24CF ; Changes_When_Casefolded # So [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z +2C00..2C2F ; Changes_When_Casefolded # L& [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI +2C60 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH DOUBLE BAR +2C62..2C64 ; Changes_When_Casefolded # L& [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL +2C67 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH DESCENDER +2C69 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH DESCENDER +2C6B ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Z WITH DESCENDER +2C6D..2C70 ; Changes_When_Casefolded # L& [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA +2C72 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER W WITH HOOK +2C75 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER HALF H +2C7E..2C80 ; Changes_When_Casefolded # L& [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA +2C82 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER VIDA +2C84 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER GAMMA +2C86 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER DALDA +2C88 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER EIE +2C8A ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER SOU +2C8C ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER ZATA +2C8E ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER HATE +2C90 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER THETHE +2C92 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER IAUDA +2C94 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER KAPA +2C96 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER LAULA +2C98 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER MI +2C9A ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER NI +2C9C ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER KSI +2C9E ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER O +2CA0 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER PI +2CA2 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER RO +2CA4 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER SIMA +2CA6 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER TAU +2CA8 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER UA +2CAA ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER FI +2CAC ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER KHI +2CAE ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER PSI +2CB0 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OOU +2CB2 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER DIALECT-P ALEF +2CB4 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC AIN +2CB6 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE +2CB8 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER DIALECT-P KAPA +2CBA ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER DIALECT-P NI +2CBC ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI +2CBE ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC OOU +2CC0 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER SAMPI +2CC2 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER CROSSED SHEI +2CC4 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC SHEI +2CC6 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC ESH +2CC8 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER AKHMIMIC KHEI +2CCA ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER DIALECT-P HORI +2CCC ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC HORI +2CCE ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC HA +2CD0 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER L-SHAPED HA +2CD2 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC HEI +2CD4 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC HAT +2CD6 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC GANGIA +2CD8 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC DJA +2CDA ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD COPTIC SHIMA +2CDC ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD NUBIAN SHIMA +2CDE ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD NUBIAN NGI +2CE0 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD NUBIAN NYI +2CE2 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER OLD NUBIAN WAU +2CEB ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI +2CED ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA +2CF2 ; Changes_When_Casefolded # L& COPTIC CAPITAL LETTER BOHAIRIC KHEI +A640 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ZEMLYA +A642 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DZELO +A644 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER REVERSED DZE +A646 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IOTA +A648 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DJERV +A64A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER MONOGRAPH UK +A64C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER BROAD OMEGA +A64E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER NEUTRAL YER +A650 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER YERU WITH BACK YER +A652 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED YAT +A654 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER REVERSED YU +A656 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED A +A658 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS +A65A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER BLENDED YUS +A65C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS +A65E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER YN +A660 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER REVERSED TSE +A662 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SOFT DE +A664 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SOFT EL +A666 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SOFT EM +A668 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER MONOCULAR O +A66A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER BINOCULAR O +A66C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O +A680 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DWE +A682 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DZWE +A684 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER ZHWE +A686 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER CCHE +A688 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DZZE +A68A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK +A68C ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER TWE +A68E ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER TSWE +A690 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER TSSE +A692 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER TCHE +A694 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER HWE +A696 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER SHWE +A698 ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER DOUBLE O +A69A ; Changes_When_Casefolded # L& CYRILLIC CAPITAL LETTER CROSSED O +A722 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF +A724 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER EGYPTOLOGICAL AIN +A726 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER HENG +A728 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER TZ +A72A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER TRESILLO +A72C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER CUATRILLO +A72E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER CUATRILLO WITH COMMA +A732 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER AA +A734 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER AO +A736 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER AU +A738 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER AV +A73A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR +A73C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER AY +A73E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER REVERSED C WITH DOT +A740 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH STROKE +A742 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH DIAGONAL STROKE +A744 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE +A746 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER BROKEN L +A748 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH HIGH STROKE +A74A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY +A74C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER O WITH LOOP +A74E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER OO +A750 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER +A752 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER P WITH FLOURISH +A754 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER P WITH SQUIRREL TAIL +A756 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER +A758 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE +A75A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R ROTUNDA +A75C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER RUM ROTUNDA +A75E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER V WITH DIAGONAL STROKE +A760 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER VY +A762 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER VISIGOTHIC Z +A764 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER THORN WITH STROKE +A766 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER +A768 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER VEND +A76A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER ET +A76C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER IS +A76E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER CON +A779 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER INSULAR D +A77B ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER INSULAR F +A77D..A77E ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G +A780 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER TURNED L +A782 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER INSULAR R +A784 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER INSULAR S +A786 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER INSULAR T +A78B ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER SALTILLO +A78D ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER TURNED H +A790 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH DESCENDER +A792 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER C WITH BAR +A796 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER B WITH FLOURISH +A798 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER F WITH STROKE +A79A ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER VOLAPUK AE +A79C ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER VOLAPUK OE +A79E ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER VOLAPUK UE +A7A0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER G WITH OBLIQUE STROKE +A7A2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER K WITH OBLIQUE STROKE +A7A4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER N WITH OBLIQUE STROKE +A7A6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER R WITH OBLIQUE STROKE +A7A8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH OBLIQUE STROKE +A7AA..A7AE ; Changes_When_Casefolded # L& [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I +A7B0..A7B4 ; Changes_When_Casefolded # L& [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA +A7B6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER OMEGA +A7B8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH STROKE +A7BA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL A +A7BC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL I +A7BE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL U +A7C0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER OLD POLISH O +A7C2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER ANGLICANA W +A7C4..A7C7 ; Changes_When_Casefolded # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY +A7C9 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +A7CB..A7CC ; Changes_When_Casefolded # L& [2] LATIN CAPITAL LETTER RAMS HORN..LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7CE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER PHARYNGEAL VOICED FRICATIVE +A7D0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER DOUBLE THORN +A7D4 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER DOUBLE WYNN +A7D6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER MIDDLE SCOTS S +A7D8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER SIGMOID S +A7DA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER LAMBDA +A7DC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F5 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER REVERSED HALF H +AB70..ABBF ; Changes_When_Casefolded # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA +FB00..FB06 ; Changes_When_Casefolded # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; Changes_When_Casefolded # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FF21..FF3A ; Changes_When_Casefolded # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +10400..10427 ; Changes_When_Casefolded # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW +104B0..104D3 ; Changes_When_Casefolded # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +10570..1057A ; Changes_When_Casefolded # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Changes_When_Casefolded # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Changes_When_Casefolded # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Changes_When_Casefolded # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10C80..10CB2 ; Changes_When_Casefolded # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10D50..10D65 ; Changes_When_Casefolded # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +118A0..118BF ; Changes_When_Casefolded # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO +16E40..16E5F ; Changes_When_Casefolded # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y +16EA0..16EB8 ; Changes_When_Casefolded # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +1E900..1E921 ; Changes_When_Casefolded # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA + +# Total code points: 1561 + +# ================================================ + +# Derived Property: Changes_When_Casemapped (CWCM) +# Characters whose normalized forms are not stable under case mapping. +# For more information, see the definition of "isCased(X)" +# in the "Conformance" / "Default Case Algorithms" section of the core specification. +# Changes_When_Casemapped(X) is true when CWL(X), or CWT(X), or CWU(X) + +0041..005A ; Changes_When_Casemapped # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z +0061..007A ; Changes_When_Casemapped # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z +00B5 ; Changes_When_Casemapped # L& MICRO SIGN +00C0..00D6 ; Changes_When_Casemapped # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D8..00F6 ; Changes_When_Casemapped # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS +00F8..0137 ; Changes_When_Casemapped # L& [64] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER K WITH CEDILLA +0139..018C ; Changes_When_Casemapped # L& [84] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER D WITH TOPBAR +018E..01A9 ; Changes_When_Casemapped # L& [28] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER ESH +01AC..01B9 ; Changes_When_Casemapped # L& [14] LATIN CAPITAL LETTER T WITH HOOK..LATIN SMALL LETTER EZH REVERSED +01BC..01BD ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER TONE FIVE..LATIN SMALL LETTER TONE FIVE +01BF ; Changes_When_Casemapped # L& LATIN LETTER WYNN +01C4..0220 ; Changes_When_Casemapped # L& [93] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER N WITH LONG RIGHT LEG +0222..0233 ; Changes_When_Casemapped # L& [18] LATIN CAPITAL LETTER OU..LATIN SMALL LETTER Y WITH MACRON +023A..0254 ; Changes_When_Casemapped # L& [27] LATIN CAPITAL LETTER A WITH STROKE..LATIN SMALL LETTER OPEN O +0256..0257 ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER D WITH TAIL..LATIN SMALL LETTER D WITH HOOK +0259 ; Changes_When_Casemapped # L& LATIN SMALL LETTER SCHWA +025B..025C ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER OPEN E..LATIN SMALL LETTER REVERSED OPEN E +0260..0261 ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER G WITH HOOK..LATIN SMALL LETTER SCRIPT G +0263..0266 ; Changes_When_Casemapped # L& [4] LATIN SMALL LETTER GAMMA..LATIN SMALL LETTER H WITH HOOK +0268..026C ; Changes_When_Casemapped # L& [5] LATIN SMALL LETTER I WITH STROKE..LATIN SMALL LETTER L WITH BELT +026F ; Changes_When_Casemapped # L& LATIN SMALL LETTER TURNED M +0271..0272 ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER M WITH HOOK..LATIN SMALL LETTER N WITH LEFT HOOK +0275 ; Changes_When_Casemapped # L& LATIN SMALL LETTER BARRED O +027D ; Changes_When_Casemapped # L& LATIN SMALL LETTER R WITH TAIL +0280 ; Changes_When_Casemapped # L& LATIN LETTER SMALL CAPITAL R +0282..0283 ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER S WITH HOOK..LATIN SMALL LETTER ESH +0287..028C ; Changes_When_Casemapped # L& [6] LATIN SMALL LETTER TURNED T..LATIN SMALL LETTER TURNED V +0292 ; Changes_When_Casemapped # L& LATIN SMALL LETTER EZH +029D..029E ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER J WITH CROSSED-TAIL..LATIN SMALL LETTER TURNED K +0345 ; Changes_When_Casemapped # Mn COMBINING GREEK YPOGEGRAMMENI +0370..0373 ; Changes_When_Casemapped # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI +0376..0377 ; Changes_When_Casemapped # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +037B..037D ; Changes_When_Casemapped # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +037F ; Changes_When_Casemapped # L& GREEK CAPITAL LETTER YOT +0386 ; Changes_When_Casemapped # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0388..038A ; Changes_When_Casemapped # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; Changes_When_Casemapped # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..03A1 ; Changes_When_Casemapped # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO +03A3..03D1 ; Changes_When_Casemapped # L& [47] GREEK CAPITAL LETTER SIGMA..GREEK THETA SYMBOL +03D5..03F5 ; Changes_When_Casemapped # L& [33] GREEK PHI SYMBOL..GREEK LUNATE EPSILON SYMBOL +03F7..03FB ; Changes_When_Casemapped # L& [5] GREEK CAPITAL LETTER SHO..GREEK SMALL LETTER SAN +03FD..0481 ; Changes_When_Casemapped # L& [133] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC SMALL LETTER KOPPA +048A..052F ; Changes_When_Casemapped # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER +0531..0556 ; Changes_When_Casemapped # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH +0561..0587 ; Changes_When_Casemapped # L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN +10A0..10C5 ; Changes_When_Casemapped # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE +10C7 ; Changes_When_Casemapped # L& GEORGIAN CAPITAL LETTER YN +10CD ; Changes_When_Casemapped # L& GEORGIAN CAPITAL LETTER AEN +10D0..10FA ; Changes_When_Casemapped # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN +10FD..10FF ; Changes_When_Casemapped # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN +13A0..13F5 ; Changes_When_Casemapped # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV +13F8..13FD ; Changes_When_Casemapped # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV +1C80..1C8A ; Changes_When_Casemapped # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE +1C90..1CBA ; Changes_When_Casemapped # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN +1CBD..1CBF ; Changes_When_Casemapped # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN +1D79 ; Changes_When_Casemapped # L& LATIN SMALL LETTER INSULAR G +1D7D ; Changes_When_Casemapped # L& LATIN SMALL LETTER P WITH STROKE +1D8E ; Changes_When_Casemapped # L& LATIN SMALL LETTER Z WITH PALATAL HOOK +1E00..1E9B ; Changes_When_Casemapped # L& [156] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER LONG S WITH DOT ABOVE +1E9E ; Changes_When_Casemapped # L& LATIN CAPITAL LETTER SHARP S +1EA0..1F15 ; Changes_When_Casemapped # L& [118] LATIN CAPITAL LETTER A WITH DOT BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18..1F1D ; Changes_When_Casemapped # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F45 ; Changes_When_Casemapped # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48..1F4D ; Changes_When_Casemapped # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; Changes_When_Casemapped # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59 ; Changes_When_Casemapped # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; Changes_When_Casemapped # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; Changes_When_Casemapped # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F..1F7D ; Changes_When_Casemapped # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1FB4 ; Changes_When_Casemapped # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FBC ; Changes_When_Casemapped # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBE ; Changes_When_Casemapped # L& GREEK PROSGEGRAMMENI +1FC2..1FC4 ; Changes_When_Casemapped # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FCC ; Changes_When_Casemapped # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FD0..1FD3 ; Changes_When_Casemapped # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FDB ; Changes_When_Casemapped # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA +1FE0..1FEC ; Changes_When_Casemapped # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FF2..1FF4 ; Changes_When_Casemapped # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FFC ; Changes_When_Casemapped # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +2126 ; Changes_When_Casemapped # L& OHM SIGN +212A..212B ; Changes_When_Casemapped # L& [2] KELVIN SIGN..ANGSTROM SIGN +2132 ; Changes_When_Casemapped # L& TURNED CAPITAL F +214E ; Changes_When_Casemapped # L& TURNED SMALL F +2160..217F ; Changes_When_Casemapped # Nl [32] ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND +2183..2184 ; Changes_When_Casemapped # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C +24B6..24E9 ; Changes_When_Casemapped # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z +2C00..2C70 ; Changes_When_Casemapped # L& [113] GLAGOLITIC CAPITAL LETTER AZU..LATIN CAPITAL LETTER TURNED ALPHA +2C72..2C73 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER W WITH HOOK..LATIN SMALL LETTER W WITH HOOK +2C75..2C76 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER HALF H..LATIN SMALL LETTER HALF H +2C7E..2CE3 ; Changes_When_Casemapped # L& [102] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SMALL LETTER OLD NUBIAN WAU +2CEB..2CEE ; Changes_When_Casemapped # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA +2CF2..2CF3 ; Changes_When_Casemapped # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI +2D00..2D25 ; Changes_When_Casemapped # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE +2D27 ; Changes_When_Casemapped # L& GEORGIAN SMALL LETTER YN +2D2D ; Changes_When_Casemapped # L& GEORGIAN SMALL LETTER AEN +A640..A66D ; Changes_When_Casemapped # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O +A680..A69B ; Changes_When_Casemapped # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O +A722..A72F ; Changes_When_Casemapped # L& [14] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CUATRILLO WITH COMMA +A732..A76F ; Changes_When_Casemapped # L& [62] LATIN CAPITAL LETTER AA..LATIN SMALL LETTER CON +A779..A787 ; Changes_When_Casemapped # L& [15] LATIN CAPITAL LETTER INSULAR D..LATIN SMALL LETTER INSULAR T +A78B..A78D ; Changes_When_Casemapped # L& [3] LATIN CAPITAL LETTER SALTILLO..LATIN CAPITAL LETTER TURNED H +A790..A794 ; Changes_When_Casemapped # L& [5] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER C WITH PALATAL HOOK +A796..A7AE ; Changes_When_Casemapped # L& [25] LATIN CAPITAL LETTER B WITH FLOURISH..LATIN CAPITAL LETTER SMALL CAPITAL I +A7B0..A7DC ; Changes_When_Casemapped # L& [45] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F5..A7F6 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H +AB53 ; Changes_When_Casemapped # L& LATIN SMALL LETTER CHI +AB70..ABBF ; Changes_When_Casemapped # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA +FB00..FB06 ; Changes_When_Casemapped # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; Changes_When_Casemapped # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FF21..FF3A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +10400..1044F ; Changes_When_Casemapped # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW +104B0..104D3 ; Changes_When_Casemapped # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +104D8..104FB ; Changes_When_Casemapped # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10570..1057A ; Changes_When_Casemapped # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Changes_When_Casemapped # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Changes_When_Casemapped # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Changes_When_Casemapped # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; Changes_When_Casemapped # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Changes_When_Casemapped # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Changes_When_Casemapped # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Changes_When_Casemapped # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +10C80..10CB2 ; Changes_When_Casemapped # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10CC0..10CF2 ; Changes_When_Casemapped # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10D50..10D65 ; Changes_When_Casemapped # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D70..10D85 ; Changes_When_Casemapped # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA +118A0..118DF ; Changes_When_Casemapped # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO +16E40..16E7F ; Changes_When_Casemapped # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; Changes_When_Casemapped # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; Changes_When_Casemapped # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY +1E900..1E943 ; Changes_When_Casemapped # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA + +# Total code points: 3037 + +# ================================================ + +# Derived Property: ID_Start +# Characters that can start an identifier. +# Generated from: +# Lu + Ll + Lt + Lm + Lo + Nl +# + Other_ID_Start +# - Pattern_Syntax +# - Pattern_White_Space +# NOTE: See UAX #31 for more information + +0041..005A ; ID_Start # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z +0061..007A ; ID_Start # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z +00AA ; ID_Start # Lo FEMININE ORDINAL INDICATOR +00B5 ; ID_Start # L& MICRO SIGN +00BA ; ID_Start # Lo MASCULINE ORDINAL INDICATOR +00C0..00D6 ; ID_Start # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D8..00F6 ; ID_Start # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS +00F8..01BA ; ID_Start # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL +01BB ; ID_Start # Lo LATIN LETTER TWO WITH STROKE +01BC..01BF ; ID_Start # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN +01C0..01C3 ; ID_Start # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK +01C4..0293 ; ID_Start # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL +0294..0295 ; ID_Start # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; ID_Start # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +02B0..02C1 ; ID_Start # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP +02C6..02D1 ; ID_Start # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON +02E0..02E4 ; ID_Start # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +02EC ; ID_Start # Lm MODIFIER LETTER VOICING +02EE ; ID_Start # Lm MODIFIER LETTER DOUBLE APOSTROPHE +0370..0373 ; ID_Start # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI +0374 ; ID_Start # Lm GREEK NUMERAL SIGN +0376..0377 ; ID_Start # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +037A ; ID_Start # Lm GREEK YPOGEGRAMMENI +037B..037D ; ID_Start # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +037F ; ID_Start # L& GREEK CAPITAL LETTER YOT +0386 ; ID_Start # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0388..038A ; ID_Start # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; ID_Start # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..03A1 ; ID_Start # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO +03A3..03F5 ; ID_Start # L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL +03F7..0481 ; ID_Start # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA +048A..052F ; ID_Start # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER +0531..0556 ; ID_Start # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH +0559 ; ID_Start # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING +0560..0588 ; ID_Start # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE +05D0..05EA ; ID_Start # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV +05EF..05F2 ; ID_Start # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD +0620..063F ; ID_Start # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE +0640 ; ID_Start # Lm ARABIC TATWEEL +0641..064A ; ID_Start # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH +066E..066F ; ID_Start # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF +0671..06D3 ; ID_Start # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +06D5 ; ID_Start # Lo ARABIC LETTER AE +06E5..06E6 ; ID_Start # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH +06EE..06EF ; ID_Start # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V +06FA..06FC ; ID_Start # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW +06FF ; ID_Start # Lo ARABIC LETTER HEH WITH INVERTED V +0710 ; ID_Start # Lo SYRIAC LETTER ALAPH +0712..072F ; ID_Start # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH +074D..07A5 ; ID_Start # Lo [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU +07B1 ; ID_Start # Lo THAANA LETTER NAA +07CA..07EA ; ID_Start # Lo [33] NKO LETTER A..NKO LETTER JONA RA +07F4..07F5 ; ID_Start # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE +07FA ; ID_Start # Lm NKO LAJANYALAN +0800..0815 ; ID_Start # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF +081A ; ID_Start # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT +0824 ; ID_Start # Lm SAMARITAN MODIFIER LETTER SHORT A +0828 ; ID_Start # Lm SAMARITAN MODIFIER LETTER I +0840..0858 ; ID_Start # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN +0860..086A ; ID_Start # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA +0870..0887 ; ID_Start # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088F ; ID_Start # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE +08A0..08C8 ; ID_Start # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; ID_Start # Lm ARABIC SMALL FARSI YEH +0904..0939 ; ID_Start # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA +093D ; ID_Start # Lo DEVANAGARI SIGN AVAGRAHA +0950 ; ID_Start # Lo DEVANAGARI OM +0958..0961 ; ID_Start # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL +0971 ; ID_Start # Lm DEVANAGARI SIGN HIGH SPACING DOT +0972..0980 ; ID_Start # Lo [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI +0985..098C ; ID_Start # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L +098F..0990 ; ID_Start # Lo [2] BENGALI LETTER E..BENGALI LETTER AI +0993..09A8 ; ID_Start # Lo [22] BENGALI LETTER O..BENGALI LETTER NA +09AA..09B0 ; ID_Start # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA +09B2 ; ID_Start # Lo BENGALI LETTER LA +09B6..09B9 ; ID_Start # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA +09BD ; ID_Start # Lo BENGALI SIGN AVAGRAHA +09CE ; ID_Start # Lo BENGALI LETTER KHANDA TA +09DC..09DD ; ID_Start # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF..09E1 ; ID_Start # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL +09F0..09F1 ; ID_Start # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL +09FC ; ID_Start # Lo BENGALI LETTER VEDIC ANUSVARA +0A05..0A0A ; ID_Start # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU +0A0F..0A10 ; ID_Start # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI +0A13..0A28 ; ID_Start # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA +0A2A..0A30 ; ID_Start # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA +0A32..0A33 ; ID_Start # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA +0A35..0A36 ; ID_Start # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA +0A38..0A39 ; ID_Start # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA +0A59..0A5C ; ID_Start # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA +0A5E ; ID_Start # Lo GURMUKHI LETTER FA +0A72..0A74 ; ID_Start # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR +0A85..0A8D ; ID_Start # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E +0A8F..0A91 ; ID_Start # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O +0A93..0AA8 ; ID_Start # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA +0AAA..0AB0 ; ID_Start # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA +0AB2..0AB3 ; ID_Start # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA +0AB5..0AB9 ; ID_Start # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA +0ABD ; ID_Start # Lo GUJARATI SIGN AVAGRAHA +0AD0 ; ID_Start # Lo GUJARATI OM +0AE0..0AE1 ; ID_Start # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL +0AF9 ; ID_Start # Lo GUJARATI LETTER ZHA +0B05..0B0C ; ID_Start # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L +0B0F..0B10 ; ID_Start # Lo [2] ORIYA LETTER E..ORIYA LETTER AI +0B13..0B28 ; ID_Start # Lo [22] ORIYA LETTER O..ORIYA LETTER NA +0B2A..0B30 ; ID_Start # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA +0B32..0B33 ; ID_Start # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA +0B35..0B39 ; ID_Start # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA +0B3D ; ID_Start # Lo ORIYA SIGN AVAGRAHA +0B5C..0B5D ; ID_Start # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0B5F..0B61 ; ID_Start # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL +0B71 ; ID_Start # Lo ORIYA LETTER WA +0B83 ; ID_Start # Lo TAMIL SIGN VISARGA +0B85..0B8A ; ID_Start # Lo [6] TAMIL LETTER A..TAMIL LETTER UU +0B8E..0B90 ; ID_Start # Lo [3] TAMIL LETTER E..TAMIL LETTER AI +0B92..0B95 ; ID_Start # Lo [4] TAMIL LETTER O..TAMIL LETTER KA +0B99..0B9A ; ID_Start # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA +0B9C ; ID_Start # Lo TAMIL LETTER JA +0B9E..0B9F ; ID_Start # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA +0BA3..0BA4 ; ID_Start # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA +0BA8..0BAA ; ID_Start # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA +0BAE..0BB9 ; ID_Start # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA +0BD0 ; ID_Start # Lo TAMIL OM +0C05..0C0C ; ID_Start # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L +0C0E..0C10 ; ID_Start # Lo [3] TELUGU LETTER E..TELUGU LETTER AI +0C12..0C28 ; ID_Start # Lo [23] TELUGU LETTER O..TELUGU LETTER NA +0C2A..0C39 ; ID_Start # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA +0C3D ; ID_Start # Lo TELUGU SIGN AVAGRAHA +0C58..0C5A ; ID_Start # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5C..0C5D ; ID_Start # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU +0C60..0C61 ; ID_Start # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL +0C80 ; ID_Start # Lo KANNADA SIGN SPACING CANDRABINDU +0C85..0C8C ; ID_Start # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L +0C8E..0C90 ; ID_Start # Lo [3] KANNADA LETTER E..KANNADA LETTER AI +0C92..0CA8 ; ID_Start # Lo [23] KANNADA LETTER O..KANNADA LETTER NA +0CAA..0CB3 ; ID_Start # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA +0CB5..0CB9 ; ID_Start # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA +0CBD ; ID_Start # Lo KANNADA SIGN AVAGRAHA +0CDC..0CDE ; ID_Start # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA +0CE0..0CE1 ; ID_Start # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL +0CF1..0CF2 ; ID_Start # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA +0D04..0D0C ; ID_Start # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L +0D0E..0D10 ; ID_Start # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI +0D12..0D3A ; ID_Start # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA +0D3D ; ID_Start # Lo MALAYALAM SIGN AVAGRAHA +0D4E ; ID_Start # Lo MALAYALAM LETTER DOT REPH +0D54..0D56 ; ID_Start # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL +0D5F..0D61 ; ID_Start # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL +0D7A..0D7F ; ID_Start # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K +0D85..0D96 ; ID_Start # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA +0D9A..0DB1 ; ID_Start # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA +0DB3..0DBB ; ID_Start # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA +0DBD ; ID_Start # Lo SINHALA LETTER DANTAJA LAYANNA +0DC0..0DC6 ; ID_Start # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA +0E01..0E30 ; ID_Start # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A +0E32..0E33 ; ID_Start # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM +0E40..0E45 ; ID_Start # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO +0E46 ; ID_Start # Lm THAI CHARACTER MAIYAMOK +0E81..0E82 ; ID_Start # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG +0E84 ; ID_Start # Lo LAO LETTER KHO TAM +0E86..0E8A ; ID_Start # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM +0E8C..0EA3 ; ID_Start # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING +0EA5 ; ID_Start # Lo LAO LETTER LO LOOT +0EA7..0EB0 ; ID_Start # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A +0EB2..0EB3 ; ID_Start # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM +0EBD ; ID_Start # Lo LAO SEMIVOWEL SIGN NYO +0EC0..0EC4 ; ID_Start # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI +0EC6 ; ID_Start # Lm LAO KO LA +0EDC..0EDF ; ID_Start # Lo [4] LAO HO NO..LAO LETTER KHMU NYO +0F00 ; ID_Start # Lo TIBETAN SYLLABLE OM +0F40..0F47 ; ID_Start # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA +0F49..0F6C ; ID_Start # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA +0F88..0F8C ; ID_Start # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN +1000..102A ; ID_Start # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU +103F ; ID_Start # Lo MYANMAR LETTER GREAT SA +1050..1055 ; ID_Start # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL +105A..105D ; ID_Start # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE +1061 ; ID_Start # Lo MYANMAR LETTER SGAW KAREN SHA +1065..1066 ; ID_Start # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA +106E..1070 ; ID_Start # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA +1075..1081 ; ID_Start # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA +108E ; ID_Start # Lo MYANMAR LETTER RUMAI PALAUNG FA +10A0..10C5 ; ID_Start # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE +10C7 ; ID_Start # L& GEORGIAN CAPITAL LETTER YN +10CD ; ID_Start # L& GEORGIAN CAPITAL LETTER AEN +10D0..10FA ; ID_Start # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN +10FC ; ID_Start # Lm MODIFIER LETTER GEORGIAN NAR +10FD..10FF ; ID_Start # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN +1100..1248 ; ID_Start # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA +124A..124D ; ID_Start # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE +1250..1256 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO +1258 ; ID_Start # Lo ETHIOPIC SYLLABLE QHWA +125A..125D ; ID_Start # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE +1260..1288 ; ID_Start # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA +128A..128D ; ID_Start # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE +1290..12B0 ; ID_Start # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA +12B2..12B5 ; ID_Start # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE +12B8..12BE ; ID_Start # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO +12C0 ; ID_Start # Lo ETHIOPIC SYLLABLE KXWA +12C2..12C5 ; ID_Start # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE +12C8..12D6 ; ID_Start # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O +12D8..1310 ; ID_Start # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA +1312..1315 ; ID_Start # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE +1318..135A ; ID_Start # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA +1380..138F ; ID_Start # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE +13A0..13F5 ; ID_Start # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV +13F8..13FD ; ID_Start # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV +1401..166C ; ID_Start # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA +166F..167F ; ID_Start # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W +1681..169A ; ID_Start # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH +16A0..16EA ; ID_Start # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X +16EE..16F0 ; ID_Start # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL +16F1..16F8 ; ID_Start # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC +1700..1711 ; ID_Start # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA +171F..1731 ; ID_Start # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA +1740..1751 ; ID_Start # Lo [18] BUHID LETTER A..BUHID LETTER HA +1760..176C ; ID_Start # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA +176E..1770 ; ID_Start # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA +1780..17B3 ; ID_Start # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU +17D7 ; ID_Start # Lm KHMER SIGN LEK TOO +17DC ; ID_Start # Lo KHMER SIGN AVAKRAHASANYA +1820..1842 ; ID_Start # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI +1843 ; ID_Start # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN +1844..1878 ; ID_Start # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS +1880..1884 ; ID_Start # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA +1885..1886 ; ID_Start # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA +1887..18A8 ; ID_Start # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA +18AA ; ID_Start # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA +18B0..18F5 ; ID_Start # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S +1900..191E ; ID_Start # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA +1950..196D ; ID_Start # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI +1970..1974 ; ID_Start # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 +1980..19AB ; ID_Start # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA +19B0..19C9 ; ID_Start # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2 +1A00..1A16 ; ID_Start # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA +1A20..1A54 ; ID_Start # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA +1AA7 ; ID_Start # Lm TAI THAM SIGN MAI YAMOK +1B05..1B33 ; ID_Start # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA +1B45..1B4C ; ID_Start # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA +1B83..1BA0 ; ID_Start # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA +1BAE..1BAF ; ID_Start # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA +1BBA..1BE5 ; ID_Start # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U +1C00..1C23 ; ID_Start # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A +1C4D..1C4F ; ID_Start # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA +1C5A..1C77 ; ID_Start # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH +1C78..1C7D ; ID_Start # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD +1C80..1C8A ; ID_Start # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE +1C90..1CBA ; ID_Start # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN +1CBD..1CBF ; ID_Start # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN +1CE9..1CEC ; ID_Start # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL +1CEE..1CF3 ; ID_Start # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA +1CF5..1CF6 ; ID_Start # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA +1CFA ; ID_Start # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA +1D00..1D2B ; ID_Start # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL +1D2C..1D6A ; ID_Start # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI +1D6B..1D77 ; ID_Start # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G +1D78 ; ID_Start # Lm MODIFIER LETTER CYRILLIC EN +1D79..1D9A ; ID_Start # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK +1D9B..1DBF ; ID_Start # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA +1E00..1F15 ; ID_Start # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18..1F1D ; ID_Start # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F45 ; ID_Start # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48..1F4D ; ID_Start # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; ID_Start # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59 ; ID_Start # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; ID_Start # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; ID_Start # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F..1F7D ; ID_Start # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1FB4 ; ID_Start # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FBC ; ID_Start # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBE ; ID_Start # L& GREEK PROSGEGRAMMENI +1FC2..1FC4 ; ID_Start # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FCC ; ID_Start # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FD0..1FD3 ; ID_Start # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FDB ; ID_Start # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA +1FE0..1FEC ; ID_Start # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FF2..1FF4 ; ID_Start # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FFC ; ID_Start # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +2071 ; ID_Start # Lm SUPERSCRIPT LATIN SMALL LETTER I +207F ; ID_Start # Lm SUPERSCRIPT LATIN SMALL LETTER N +2090..209C ; ID_Start # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T +2102 ; ID_Start # L& DOUBLE-STRUCK CAPITAL C +2107 ; ID_Start # L& EULER CONSTANT +210A..2113 ; ID_Start # L& [10] SCRIPT SMALL G..SCRIPT SMALL L +2115 ; ID_Start # L& DOUBLE-STRUCK CAPITAL N +2118 ; ID_Start # Sm SCRIPT CAPITAL P +2119..211D ; ID_Start # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R +2124 ; ID_Start # L& DOUBLE-STRUCK CAPITAL Z +2126 ; ID_Start # L& OHM SIGN +2128 ; ID_Start # L& BLACK-LETTER CAPITAL Z +212A..212D ; ID_Start # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C +212E ; ID_Start # So ESTIMATED SYMBOL +212F..2134 ; ID_Start # L& [6] SCRIPT SMALL E..SCRIPT SMALL O +2135..2138 ; ID_Start # Lo [4] ALEF SYMBOL..DALET SYMBOL +2139 ; ID_Start # L& INFORMATION SOURCE +213C..213F ; ID_Start # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI +2145..2149 ; ID_Start # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J +214E ; ID_Start # L& TURNED SMALL F +2160..2182 ; ID_Start # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND +2183..2184 ; ID_Start # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C +2185..2188 ; ID_Start # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND +2C00..2C7B ; ID_Start # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E +2C7C..2C7D ; ID_Start # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V +2C7E..2CE4 ; ID_Start # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI +2CEB..2CEE ; ID_Start # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA +2CF2..2CF3 ; ID_Start # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI +2D00..2D25 ; ID_Start # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE +2D27 ; ID_Start # L& GEORGIAN SMALL LETTER YN +2D2D ; ID_Start # L& GEORGIAN SMALL LETTER AEN +2D30..2D67 ; ID_Start # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO +2D6F ; ID_Start # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2D80..2D96 ; ID_Start # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE +2DA0..2DA6 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO +2DA8..2DAE ; ID_Start # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO +2DB0..2DB6 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO +2DB8..2DBE ; ID_Start # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO +2DC0..2DC6 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO +2DC8..2DCE ; ID_Start # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO +2DD0..2DD6 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO +2DD8..2DDE ; ID_Start # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO +3005 ; ID_Start # Lm IDEOGRAPHIC ITERATION MARK +3006 ; ID_Start # Lo IDEOGRAPHIC CLOSING MARK +3007 ; ID_Start # Nl IDEOGRAPHIC NUMBER ZERO +3021..3029 ; ID_Start # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE +3031..3035 ; ID_Start # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF +3038..303A ; ID_Start # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY +303B ; ID_Start # Lm VERTICAL IDEOGRAPHIC ITERATION MARK +303C ; ID_Start # Lo MASU MARK +3041..3096 ; ID_Start # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE +309B..309C ; ID_Start # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +309D..309E ; ID_Start # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK +309F ; ID_Start # Lo HIRAGANA DIGRAPH YORI +30A1..30FA ; ID_Start # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO +30FC..30FE ; ID_Start # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK +30FF ; ID_Start # Lo KATAKANA DIGRAPH KOTO +3105..312F ; ID_Start # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN +3131..318E ; ID_Start # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE +31A0..31BF ; ID_Start # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH +31F0..31FF ; ID_Start # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO +3400..4DBF ; ID_Start # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF +4E00..A014 ; ID_Start # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E +A015 ; ID_Start # Lm YI SYLLABLE WU +A016..A48C ; ID_Start # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR +A4D0..A4F7 ; ID_Start # Lo [40] LISU LETTER BA..LISU LETTER OE +A4F8..A4FD ; ID_Start # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU +A500..A60B ; ID_Start # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG +A60C ; ID_Start # Lm VAI SYLLABLE LENGTHENER +A610..A61F ; ID_Start # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG +A62A..A62B ; ID_Start # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO +A640..A66D ; ID_Start # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O +A66E ; ID_Start # Lo CYRILLIC LETTER MULTIOCULAR O +A67F ; ID_Start # Lm CYRILLIC PAYEROK +A680..A69B ; ID_Start # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O +A69C..A69D ; ID_Start # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN +A6A0..A6E5 ; ID_Start # Lo [70] BAMUM LETTER A..BAMUM LETTER KI +A6E6..A6EF ; ID_Start # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM +A717..A71F ; ID_Start # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK +A722..A76F ; ID_Start # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON +A770 ; ID_Start # Lm MODIFIER LETTER US +A771..A787 ; ID_Start # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T +A788 ; ID_Start # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT +A78B..A78E ; ID_Start # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT +A78F ; ID_Start # Lo LATIN LETTER SINOLOGICAL DOT +A790..A7DC ; ID_Start # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; ID_Start # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q +A7F5..A7F6 ; ID_Start # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H +A7F7 ; ID_Start # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I +A7F8..A7F9 ; ID_Start # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE +A7FA ; ID_Start # L& LATIN LETTER SMALL CAPITAL TURNED M +A7FB..A801 ; ID_Start # Lo [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I +A803..A805 ; ID_Start # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O +A807..A80A ; ID_Start # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO +A80C..A822 ; ID_Start # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO +A840..A873 ; ID_Start # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU +A882..A8B3 ; ID_Start # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA +A8F2..A8F7 ; ID_Start # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA +A8FB ; ID_Start # Lo DEVANAGARI HEADSTROKE +A8FD..A8FE ; ID_Start # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY +A90A..A925 ; ID_Start # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO +A930..A946 ; ID_Start # Lo [23] REJANG LETTER KA..REJANG LETTER A +A960..A97C ; ID_Start # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH +A984..A9B2 ; ID_Start # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA +A9CF ; ID_Start # Lm JAVANESE PANGRANGKEP +A9E0..A9E4 ; ID_Start # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA +A9E6 ; ID_Start # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION +A9E7..A9EF ; ID_Start # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA +A9FA..A9FE ; ID_Start # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA +AA00..AA28 ; ID_Start # Lo [41] CHAM LETTER A..CHAM LETTER HA +AA40..AA42 ; ID_Start # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG +AA44..AA4B ; ID_Start # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS +AA60..AA6F ; ID_Start # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA +AA70 ; ID_Start # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION +AA71..AA76 ; ID_Start # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM +AA7A ; ID_Start # Lo MYANMAR LETTER AITON RA +AA7E..AAAF ; ID_Start # Lo [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O +AAB1 ; ID_Start # Lo TAI VIET VOWEL AA +AAB5..AAB6 ; ID_Start # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O +AAB9..AABD ; ID_Start # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN +AAC0 ; ID_Start # Lo TAI VIET TONE MAI NUENG +AAC2 ; ID_Start # Lo TAI VIET TONE MAI SONG +AADB..AADC ; ID_Start # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG +AADD ; ID_Start # Lm TAI VIET SYMBOL SAM +AAE0..AAEA ; ID_Start # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA +AAF2 ; ID_Start # Lo MEETEI MAYEK ANJI +AAF3..AAF4 ; ID_Start # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK +AB01..AB06 ; ID_Start # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO +AB09..AB0E ; ID_Start # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO +AB11..AB16 ; ID_Start # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO +AB20..AB26 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO +AB28..AB2E ; ID_Start # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO +AB30..AB5A ; ID_Start # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG +AB5C..AB5F ; ID_Start # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK +AB60..AB68 ; ID_Start # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE +AB69 ; ID_Start # Lm MODIFIER LETTER SMALL TURNED W +AB70..ABBF ; ID_Start # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA +ABC0..ABE2 ; ID_Start # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM +AC00..D7A3 ; ID_Start # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH +D7B0..D7C6 ; ID_Start # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E +D7CB..D7FB ; ID_Start # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH +F900..FA6D ; ID_Start # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D +FA70..FAD9 ; ID_Start # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +FB00..FB06 ; ID_Start # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; ID_Start # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FB1D ; ID_Start # Lo HEBREW LETTER YOD WITH HIRIQ +FB1F..FB28 ; ID_Start # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV +FB2A..FB36 ; ID_Start # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; ID_Start # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; ID_Start # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; ID_Start # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; ID_Start # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FBB1 ; ID_Start # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM +FBD3..FD3D ; ID_Start # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD50..FD8F ; ID_Start # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD92..FDC7 ; ID_Start # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDF0..FDFB ; ID_Start # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU +FE70..FE74 ; ID_Start # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM +FE76..FEFC ; ID_Start # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM +FF21..FF3A ; ID_Start # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +FF41..FF5A ; ID_Start # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +FF66..FF6F ; ID_Start # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU +FF70 ; ID_Start # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF71..FF9D ; ID_Start # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N +FF9E..FF9F ; ID_Start # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +FFA0..FFBE ; ID_Start # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH +FFC2..FFC7 ; ID_Start # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E +FFCA..FFCF ; ID_Start # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE +FFD2..FFD7 ; ID_Start # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU +FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I +10000..1000B ; ID_Start # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE +1000D..10026 ; ID_Start # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO +10028..1003A ; ID_Start # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO +1003C..1003D ; ID_Start # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE +1003F..1004D ; ID_Start # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO +10050..1005D ; ID_Start # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 +10080..100FA ; ID_Start # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 +10140..10174 ; ID_Start # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS +10280..1029C ; ID_Start # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X +102A0..102D0 ; ID_Start # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3 +10300..1031F ; ID_Start # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS +1032D..10340 ; ID_Start # Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA +10341 ; ID_Start # Nl GOTHIC LETTER NINETY +10342..10349 ; ID_Start # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL +1034A ; ID_Start # Nl GOTHIC LETTER NINE HUNDRED +10350..10375 ; ID_Start # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA +10380..1039D ; ID_Start # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU +103A0..103C3 ; ID_Start # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA +103C8..103CF ; ID_Start # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH +103D1..103D5 ; ID_Start # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED +10400..1044F ; ID_Start # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW +10450..1049D ; ID_Start # Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO +104B0..104D3 ; ID_Start # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +104D8..104FB ; ID_Start # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10500..10527 ; ID_Start # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE +10530..10563 ; ID_Start # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW +10570..1057A ; ID_Start # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; ID_Start # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; ID_Start # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; ID_Start # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; ID_Start # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; ID_Start # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; ID_Start # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; ID_Start # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +105C0..105F3 ; ID_Start # Lo [52] TODHRI LETTER A..TODHRI LETTER OO +10600..10736 ; ID_Start # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 +10740..10755 ; ID_Start # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE +10760..10767 ; ID_Start # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; ID_Start # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; ID_Start # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; ID_Start # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL +10800..10805 ; ID_Start # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA +10808 ; ID_Start # Lo CYPRIOT SYLLABLE JO +1080A..10835 ; ID_Start # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO +10837..10838 ; ID_Start # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE +1083C ; ID_Start # Lo CYPRIOT SYLLABLE ZA +1083F..10855 ; ID_Start # Lo [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW +10860..10876 ; ID_Start # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW +10880..1089E ; ID_Start # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW +108E0..108F2 ; ID_Start # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH +108F4..108F5 ; ID_Start # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW +10900..10915 ; ID_Start # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU +10920..10939 ; ID_Start # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; ID_Start # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 +10980..109B7 ; ID_Start # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA +109BE..109BF ; ID_Start # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN +10A00 ; ID_Start # Lo KHAROSHTHI LETTER A +10A10..10A13 ; ID_Start # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA +10A15..10A17 ; ID_Start # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA +10A19..10A35 ; ID_Start # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA +10A60..10A7C ; ID_Start # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH +10A80..10A9C ; ID_Start # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH +10AC0..10AC7 ; ID_Start # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW +10AC9..10AE4 ; ID_Start # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW +10B00..10B35 ; ID_Start # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE +10B40..10B55 ; ID_Start # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW +10B60..10B72 ; ID_Start # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW +10B80..10B91 ; ID_Start # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW +10C00..10C48 ; ID_Start # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH +10C80..10CB2 ; ID_Start # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10CC0..10CF2 ; ID_Start # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10D00..10D23 ; ID_Start # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA +10D4A..10D4D ; ID_Start # Lo [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE +10D4E ; ID_Start # Lm GARAY VOWEL LENGTH MARK +10D4F ; ID_Start # Lo GARAY SUKUN +10D50..10D65 ; ID_Start # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D6F ; ID_Start # Lm GARAY REDUPLICATION MARK +10D70..10D85 ; ID_Start # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA +10E80..10EA9 ; ID_Start # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET +10EB0..10EB1 ; ID_Start # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE +10EC2..10EC4 ; ID_Start # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10EC5 ; ID_Start # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; ID_Start # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW +10F00..10F1C ; ID_Start # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL +10F27 ; ID_Start # Lo OLD SOGDIAN LIGATURE AYIN-DALETH +10F30..10F45 ; ID_Start # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN +10F70..10F81 ; ID_Start # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10FB0..10FC4 ; ID_Start # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW +10FE0..10FF6 ; ID_Start # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH +11003..11037 ; ID_Start # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA +11071..11072 ; ID_Start # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11075 ; ID_Start # Lo BRAHMI LETTER OLD TAMIL LLA +11083..110AF ; ID_Start # Lo [45] KAITHI LETTER A..KAITHI LETTER HA +110D0..110E8 ; ID_Start # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE +11103..11126 ; ID_Start # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA +11144 ; ID_Start # Lo CHAKMA LETTER LHAA +11147 ; ID_Start # Lo CHAKMA LETTER VAA +11150..11172 ; ID_Start # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA +11176 ; ID_Start # Lo MAHAJANI LIGATURE SHRI +11183..111B2 ; ID_Start # Lo [48] SHARADA LETTER A..SHARADA LETTER HA +111C1..111C4 ; ID_Start # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM +111DA ; ID_Start # Lo SHARADA EKAM +111DC ; ID_Start # Lo SHARADA HEADSTROKE +11200..11211 ; ID_Start # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA +11213..1122B ; ID_Start # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA +1123F..11240 ; ID_Start # Lo [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I +11280..11286 ; ID_Start # Lo [7] MULTANI LETTER A..MULTANI LETTER GA +11288 ; ID_Start # Lo MULTANI LETTER GHA +1128A..1128D ; ID_Start # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA +1128F..1129D ; ID_Start # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA +1129F..112A8 ; ID_Start # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA +112B0..112DE ; ID_Start # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA +11305..1130C ; ID_Start # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L +1130F..11310 ; ID_Start # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI +11313..11328 ; ID_Start # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA +1132A..11330 ; ID_Start # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA +11332..11333 ; ID_Start # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA +11335..11339 ; ID_Start # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA +1133D ; ID_Start # Lo GRANTHA SIGN AVAGRAHA +11350 ; ID_Start # Lo GRANTHA OM +1135D..11361 ; ID_Start # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL +11380..11389 ; ID_Start # Lo [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL +1138B ; ID_Start # Lo TULU-TIGALARI LETTER EE +1138E ; ID_Start # Lo TULU-TIGALARI LETTER AI +11390..113B5 ; ID_Start # Lo [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA +113B7 ; ID_Start # Lo TULU-TIGALARI SIGN AVAGRAHA +113D1 ; ID_Start # Lo TULU-TIGALARI REPHA +113D3 ; ID_Start # Lo TULU-TIGALARI SIGN PLUTA +11400..11434 ; ID_Start # Lo [53] NEWA LETTER A..NEWA LETTER HA +11447..1144A ; ID_Start # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI +1145F..11461 ; ID_Start # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA +11480..114AF ; ID_Start # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA +114C4..114C5 ; ID_Start # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG +114C7 ; ID_Start # Lo TIRHUTA OM +11580..115AE ; ID_Start # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA +115D8..115DB ; ID_Start # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U +11600..1162F ; ID_Start # Lo [48] MODI LETTER A..MODI LETTER LLA +11644 ; ID_Start # Lo MODI SIGN HUVA +11680..116AA ; ID_Start # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA +116B8 ; ID_Start # Lo TAKRI LETTER ARCHAIC KHA +11700..1171A ; ID_Start # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA +11740..11746 ; ID_Start # Lo [7] AHOM LETTER CA..AHOM LETTER LLA +11800..1182B ; ID_Start # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA +118A0..118DF ; ID_Start # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO +118FF..11906 ; ID_Start # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E +11909 ; ID_Start # Lo DIVES AKURU LETTER O +1190C..11913 ; ID_Start # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA +11915..11916 ; ID_Start # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA +11918..1192F ; ID_Start # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA +1193F ; ID_Start # Lo DIVES AKURU PREFIXED NASAL SIGN +11941 ; ID_Start # Lo DIVES AKURU INITIAL RA +119A0..119A7 ; ID_Start # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR +119AA..119D0 ; ID_Start # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA +119E1 ; ID_Start # Lo NANDINAGARI SIGN AVAGRAHA +119E3 ; ID_Start # Lo NANDINAGARI HEADSTROKE +11A00 ; ID_Start # Lo ZANABAZAR SQUARE LETTER A +11A0B..11A32 ; ID_Start # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA +11A3A ; ID_Start # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA +11A50 ; ID_Start # Lo SOYOMBO LETTER A +11A5C..11A89 ; ID_Start # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA +11A9D ; ID_Start # Lo SOYOMBO MARK PLUTA +11AB0..11AF8 ; ID_Start # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11BC0..11BE0 ; ID_Start # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO +11C00..11C08 ; ID_Start # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L +11C0A..11C2E ; ID_Start # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA +11C40 ; ID_Start # Lo BHAIKSUKI SIGN AVAGRAHA +11C72..11C8F ; ID_Start # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A +11D00..11D06 ; ID_Start # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E +11D08..11D09 ; ID_Start # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O +11D0B..11D30 ; ID_Start # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA +11D46 ; ID_Start # Lo MASARAM GONDI REPHA +11D60..11D65 ; ID_Start # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU +11D67..11D68 ; ID_Start # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI +11D6A..11D89 ; ID_Start # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA +11D98 ; ID_Start # Lo GUNJALA GONDI OM +11DB0..11DD8 ; ID_Start # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; ID_Start # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; ID_Start # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA +11EE0..11EF2 ; ID_Start # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA +11F02 ; ID_Start # Lo KAWI SIGN REPHA +11F04..11F10 ; ID_Start # Lo [13] KAWI LETTER A..KAWI LETTER O +11F12..11F33 ; ID_Start # Lo [34] KAWI LETTER KA..KAWI LETTER JNYA +11FB0 ; ID_Start # Lo LISU LETTER YHA +12000..12399 ; ID_Start # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U +12400..1246E ; ID_Start # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM +12480..12543 ; ID_Start # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; ID_Start # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 +13000..1342F ; ID_Start # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D +13441..13446 ; ID_Start # Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN +13460..143FA ; ID_Start # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA +14400..14646 ; ID_Start # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 +16100..1611D ; ID_Start # Lo [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA +16800..16A38 ; ID_Start # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ +16A40..16A5E ; ID_Start # Lo [31] MRO LETTER TA..MRO LETTER TEK +16A70..16ABE ; ID_Start # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AD0..16AED ; ID_Start # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I +16B00..16B2F ; ID_Start # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU +16B40..16B43 ; ID_Start # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM +16B63..16B77 ; ID_Start # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS +16B7D..16B8F ; ID_Start # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ +16D40..16D42 ; ID_Start # Lm [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA +16D43..16D6A ; ID_Start # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU +16D6B..16D6C ; ID_Start # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT +16E40..16E7F ; ID_Start # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; ID_Start # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; ID_Start # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY +16F00..16F4A ; ID_Start # Lo [75] MIAO LETTER PA..MIAO LETTER RTE +16F50 ; ID_Start # Lo MIAO LETTER NASALIZATION +16F93..16F9F ; ID_Start # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 +16FE0..16FE1 ; ID_Start # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK +16FE3 ; ID_Start # Lm OLD CHINESE ITERATION MARK +16FF2..16FF3 ; ID_Start # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; ID_Start # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; ID_Start # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; ID_Start # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; ID_Start # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 +1AFF0..1AFF3 ; ID_Start # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; ID_Start # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; ID_Start # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B000..1B122 ; ID_Start # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU +1B132 ; ID_Start # Lo HIRAGANA LETTER SMALL KO +1B150..1B152 ; ID_Start # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO +1B155 ; ID_Start # Lo KATAKANA LETTER SMALL KO +1B164..1B167 ; ID_Start # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N +1B170..1B2FB ; ID_Start # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB +1BC00..1BC6A ; ID_Start # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M +1BC70..1BC7C ; ID_Start # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK +1BC80..1BC88 ; ID_Start # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL +1BC90..1BC99 ; ID_Start # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW +1D400..1D454 ; ID_Start # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G +1D456..1D49C ; ID_Start # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A +1D49E..1D49F ; ID_Start # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; ID_Start # L& MATHEMATICAL SCRIPT CAPITAL G +1D4A5..1D4A6 ; ID_Start # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K +1D4A9..1D4AC ; ID_Start # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q +1D4AE..1D4B9 ; ID_Start # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D +1D4BB ; ID_Start # L& MATHEMATICAL SCRIPT SMALL F +1D4BD..1D4C3 ; ID_Start # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N +1D4C5..1D505 ; ID_Start # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B +1D507..1D50A ; ID_Start # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G +1D50D..1D514 ; ID_Start # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q +1D516..1D51C ; ID_Start # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y +1D51E..1D539 ; ID_Start # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B..1D53E ; ID_Start # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540..1D544 ; ID_Start # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; ID_Start # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A..1D550 ; ID_Start # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D552..1D6A5 ; ID_Start # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J +1D6A8..1D6C0 ; ID_Start # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA +1D6C2..1D6DA ; ID_Start # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA +1D6DC..1D6FA ; ID_Start # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA +1D6FC..1D714 ; ID_Start # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA +1D716..1D734 ; ID_Start # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D736..1D74E ; ID_Start # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D750..1D76E ; ID_Start # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D770..1D788 ; ID_Start # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D78A..1D7A8 ; ID_Start # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7AA..1D7C2 ; ID_Start # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C4..1D7CB ; ID_Start # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1DF00..1DF09 ; ID_Start # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; ID_Start # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; ID_Start # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL +1DF25..1DF2A ; ID_Start # L& [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK +1E030..1E06D ; ID_Start # Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE +1E100..1E12C ; ID_Start # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W +1E137..1E13D ; ID_Start # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER +1E14E ; ID_Start # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E290..1E2AD ; ID_Start # Lo [30] TOTO LETTER PA..TOTO LETTER A +1E2C0..1E2EB ; ID_Start # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH +1E4D0..1E4EA ; ID_Start # Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL +1E4EB ; ID_Start # Lm NAG MUNDARI SIGN OJOD +1E5D0..1E5ED ; ID_Start # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG +1E5F0 ; ID_Start # Lo OL ONAL SIGN HODDOND +1E6C0..1E6DE ; ID_Start # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; ID_Start # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E4..1E6E5 ; ID_Start # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E7..1E6ED ; ID_Start # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6F0..1E6F4 ; ID_Start # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6FE ; ID_Start # Lo TAI YO SYMBOL MUEANG +1E6FF ; ID_Start # Lm TAI YO XAM LAI +1E7E0..1E7E6 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; ID_Start # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; ID_Start # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; ID_Start # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE +1E800..1E8C4 ; ID_Start # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON +1E900..1E943 ; ID_Start # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA +1E94B ; ID_Start # Lm ADLAM NASALIZATION MARK +1EE00..1EE03 ; ID_Start # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL +1EE05..1EE1F ; ID_Start # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF +1EE21..1EE22 ; ID_Start # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM +1EE24 ; ID_Start # Lo ARABIC MATHEMATICAL INITIAL HEH +1EE27 ; ID_Start # Lo ARABIC MATHEMATICAL INITIAL HAH +1EE29..1EE32 ; ID_Start # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF +1EE34..1EE37 ; ID_Start # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH +1EE39 ; ID_Start # Lo ARABIC MATHEMATICAL INITIAL DAD +1EE3B ; ID_Start # Lo ARABIC MATHEMATICAL INITIAL GHAIN +1EE42 ; ID_Start # Lo ARABIC MATHEMATICAL TAILED JEEM +1EE47 ; ID_Start # Lo ARABIC MATHEMATICAL TAILED HAH +1EE49 ; ID_Start # Lo ARABIC MATHEMATICAL TAILED YEH +1EE4B ; ID_Start # Lo ARABIC MATHEMATICAL TAILED LAM +1EE4D..1EE4F ; ID_Start # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN +1EE51..1EE52 ; ID_Start # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF +1EE54 ; ID_Start # Lo ARABIC MATHEMATICAL TAILED SHEEN +1EE57 ; ID_Start # Lo ARABIC MATHEMATICAL TAILED KHAH +1EE59 ; ID_Start # Lo ARABIC MATHEMATICAL TAILED DAD +1EE5B ; ID_Start # Lo ARABIC MATHEMATICAL TAILED GHAIN +1EE5D ; ID_Start # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON +1EE5F ; ID_Start # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF +1EE61..1EE62 ; ID_Start # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM +1EE64 ; ID_Start # Lo ARABIC MATHEMATICAL STRETCHED HEH +1EE67..1EE6A ; ID_Start # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF +1EE6C..1EE72 ; ID_Start # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF +1EE74..1EE77 ; ID_Start # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH +1EE79..1EE7C ; ID_Start # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH +1EE7E ; ID_Start # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH +1EE80..1EE89 ; ID_Start # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH +1EE8B..1EE9B ; ID_Start # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN +1EEA1..1EEA3 ; ID_Start # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL +1EEA5..1EEA9 ; ID_Start # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH +1EEAB..1EEBB ; ID_Start # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN +20000..2A6DF ; ID_Start # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B81D ; ID_Start # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; ID_Start # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD +2CEB0..2EBE0 ; ID_Start # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2EBF0..2EE5D ; ID_Start # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D +2F800..2FA1D ; ID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D +30000..3134A ; ID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A +31350..33479 ; ID_Start # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 + +# Total code points: 145916 + +# ================================================ + +# Derived Property: ID_Continue +# Characters that can continue an identifier. +# Generated from: +# ID_Start +# + Mn + Mc + Nd + Pc +# + Other_ID_Continue +# - Pattern_Syntax +# - Pattern_White_Space +# NOTE: See UAX #31 for more information + +0030..0039 ; ID_Continue # Nd [10] DIGIT ZERO..DIGIT NINE +0041..005A ; ID_Continue # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z +005F ; ID_Continue # Pc LOW LINE +0061..007A ; ID_Continue # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z +00AA ; ID_Continue # Lo FEMININE ORDINAL INDICATOR +00B5 ; ID_Continue # L& MICRO SIGN +00B7 ; ID_Continue # Po MIDDLE DOT +00BA ; ID_Continue # Lo MASCULINE ORDINAL INDICATOR +00C0..00D6 ; ID_Continue # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D8..00F6 ; ID_Continue # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS +00F8..01BA ; ID_Continue # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL +01BB ; ID_Continue # Lo LATIN LETTER TWO WITH STROKE +01BC..01BF ; ID_Continue # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN +01C0..01C3 ; ID_Continue # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK +01C4..0293 ; ID_Continue # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL +0294..0295 ; ID_Continue # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; ID_Continue # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +02B0..02C1 ; ID_Continue # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP +02C6..02D1 ; ID_Continue # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON +02E0..02E4 ; ID_Continue # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +02EC ; ID_Continue # Lm MODIFIER LETTER VOICING +02EE ; ID_Continue # Lm MODIFIER LETTER DOUBLE APOSTROPHE +0300..036F ; ID_Continue # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X +0370..0373 ; ID_Continue # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI +0374 ; ID_Continue # Lm GREEK NUMERAL SIGN +0376..0377 ; ID_Continue # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +037A ; ID_Continue # Lm GREEK YPOGEGRAMMENI +037B..037D ; ID_Continue # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +037F ; ID_Continue # L& GREEK CAPITAL LETTER YOT +0386 ; ID_Continue # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0387 ; ID_Continue # Po GREEK ANO TELEIA +0388..038A ; ID_Continue # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; ID_Continue # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..03A1 ; ID_Continue # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO +03A3..03F5 ; ID_Continue # L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL +03F7..0481 ; ID_Continue # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA +0483..0487 ; ID_Continue # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE +048A..052F ; ID_Continue # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER +0531..0556 ; ID_Continue # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH +0559 ; ID_Continue # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING +0560..0588 ; ID_Continue # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE +0591..05BD ; ID_Continue # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG +05BF ; ID_Continue # Mn HEBREW POINT RAFE +05C1..05C2 ; ID_Continue # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT +05C4..05C5 ; ID_Continue # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C7 ; ID_Continue # Mn HEBREW POINT QAMATS QATAN +05D0..05EA ; ID_Continue # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV +05EF..05F2 ; ID_Continue # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD +0610..061A ; ID_Continue # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA +0620..063F ; ID_Continue # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE +0640 ; ID_Continue # Lm ARABIC TATWEEL +0641..064A ; ID_Continue # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH +064B..065F ; ID_Continue # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW +0660..0669 ; ID_Continue # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE +066E..066F ; ID_Continue # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF +0670 ; ID_Continue # Mn ARABIC LETTER SUPERSCRIPT ALEF +0671..06D3 ; ID_Continue # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +06D5 ; ID_Continue # Lo ARABIC LETTER AE +06D6..06DC ; ID_Continue # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN +06DF..06E4 ; ID_Continue # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA +06E5..06E6 ; ID_Continue # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH +06E7..06E8 ; ID_Continue # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON +06EA..06ED ; ID_Continue # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM +06EE..06EF ; ID_Continue # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V +06F0..06F9 ; ID_Continue # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE +06FA..06FC ; ID_Continue # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW +06FF ; ID_Continue # Lo ARABIC LETTER HEH WITH INVERTED V +0710 ; ID_Continue # Lo SYRIAC LETTER ALAPH +0711 ; ID_Continue # Mn SYRIAC LETTER SUPERSCRIPT ALAPH +0712..072F ; ID_Continue # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH +0730..074A ; ID_Continue # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH +074D..07A5 ; ID_Continue # Lo [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU +07A6..07B0 ; ID_Continue # Mn [11] THAANA ABAFILI..THAANA SUKUN +07B1 ; ID_Continue # Lo THAANA LETTER NAA +07C0..07C9 ; ID_Continue # Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE +07CA..07EA ; ID_Continue # Lo [33] NKO LETTER A..NKO LETTER JONA RA +07EB..07F3 ; ID_Continue # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE +07F4..07F5 ; ID_Continue # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE +07FA ; ID_Continue # Lm NKO LAJANYALAN +07FD ; ID_Continue # Mn NKO DANTAYALAN +0800..0815 ; ID_Continue # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF +0816..0819 ; ID_Continue # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH +081A ; ID_Continue # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT +081B..0823 ; ID_Continue # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A +0824 ; ID_Continue # Lm SAMARITAN MODIFIER LETTER SHORT A +0825..0827 ; ID_Continue # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U +0828 ; ID_Continue # Lm SAMARITAN MODIFIER LETTER I +0829..082D ; ID_Continue # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA +0840..0858 ; ID_Continue # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN +0859..085B ; ID_Continue # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK +0860..086A ; ID_Continue # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA +0870..0887 ; ID_Continue # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088F ; ID_Continue # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE +0897..089F ; ID_Continue # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA +08A0..08C8 ; ID_Continue # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; ID_Continue # Lm ARABIC SMALL FARSI YEH +08CA..08E1 ; ID_Continue # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA +08E3..0902 ; ID_Continue # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA +0903 ; ID_Continue # Mc DEVANAGARI SIGN VISARGA +0904..0939 ; ID_Continue # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA +093A ; ID_Continue # Mn DEVANAGARI VOWEL SIGN OE +093B ; ID_Continue # Mc DEVANAGARI VOWEL SIGN OOE +093C ; ID_Continue # Mn DEVANAGARI SIGN NUKTA +093D ; ID_Continue # Lo DEVANAGARI SIGN AVAGRAHA +093E..0940 ; ID_Continue # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II +0941..0948 ; ID_Continue # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI +0949..094C ; ID_Continue # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU +094D ; ID_Continue # Mn DEVANAGARI SIGN VIRAMA +094E..094F ; ID_Continue # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW +0950 ; ID_Continue # Lo DEVANAGARI OM +0951..0957 ; ID_Continue # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE +0958..0961 ; ID_Continue # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL +0962..0963 ; ID_Continue # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL +0966..096F ; ID_Continue # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE +0971 ; ID_Continue # Lm DEVANAGARI SIGN HIGH SPACING DOT +0972..0980 ; ID_Continue # Lo [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI +0981 ; ID_Continue # Mn BENGALI SIGN CANDRABINDU +0982..0983 ; ID_Continue # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA +0985..098C ; ID_Continue # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L +098F..0990 ; ID_Continue # Lo [2] BENGALI LETTER E..BENGALI LETTER AI +0993..09A8 ; ID_Continue # Lo [22] BENGALI LETTER O..BENGALI LETTER NA +09AA..09B0 ; ID_Continue # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA +09B2 ; ID_Continue # Lo BENGALI LETTER LA +09B6..09B9 ; ID_Continue # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA +09BC ; ID_Continue # Mn BENGALI SIGN NUKTA +09BD ; ID_Continue # Lo BENGALI SIGN AVAGRAHA +09BE..09C0 ; ID_Continue # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II +09C1..09C4 ; ID_Continue # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR +09C7..09C8 ; ID_Continue # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI +09CB..09CC ; ID_Continue # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU +09CD ; ID_Continue # Mn BENGALI SIGN VIRAMA +09CE ; ID_Continue # Lo BENGALI LETTER KHANDA TA +09D7 ; ID_Continue # Mc BENGALI AU LENGTH MARK +09DC..09DD ; ID_Continue # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF..09E1 ; ID_Continue # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL +09E2..09E3 ; ID_Continue # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL +09E6..09EF ; ID_Continue # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE +09F0..09F1 ; ID_Continue # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL +09FC ; ID_Continue # Lo BENGALI LETTER VEDIC ANUSVARA +09FE ; ID_Continue # Mn BENGALI SANDHI MARK +0A01..0A02 ; ID_Continue # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI +0A03 ; ID_Continue # Mc GURMUKHI SIGN VISARGA +0A05..0A0A ; ID_Continue # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU +0A0F..0A10 ; ID_Continue # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI +0A13..0A28 ; ID_Continue # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA +0A2A..0A30 ; ID_Continue # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA +0A32..0A33 ; ID_Continue # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA +0A35..0A36 ; ID_Continue # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA +0A38..0A39 ; ID_Continue # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA +0A3C ; ID_Continue # Mn GURMUKHI SIGN NUKTA +0A3E..0A40 ; ID_Continue # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II +0A41..0A42 ; ID_Continue # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU +0A47..0A48 ; ID_Continue # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI +0A4B..0A4D ; ID_Continue # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA +0A51 ; ID_Continue # Mn GURMUKHI SIGN UDAAT +0A59..0A5C ; ID_Continue # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA +0A5E ; ID_Continue # Lo GURMUKHI LETTER FA +0A66..0A6F ; ID_Continue # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE +0A70..0A71 ; ID_Continue # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK +0A72..0A74 ; ID_Continue # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR +0A75 ; ID_Continue # Mn GURMUKHI SIGN YAKASH +0A81..0A82 ; ID_Continue # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA +0A83 ; ID_Continue # Mc GUJARATI SIGN VISARGA +0A85..0A8D ; ID_Continue # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E +0A8F..0A91 ; ID_Continue # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O +0A93..0AA8 ; ID_Continue # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA +0AAA..0AB0 ; ID_Continue # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA +0AB2..0AB3 ; ID_Continue # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA +0AB5..0AB9 ; ID_Continue # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA +0ABC ; ID_Continue # Mn GUJARATI SIGN NUKTA +0ABD ; ID_Continue # Lo GUJARATI SIGN AVAGRAHA +0ABE..0AC0 ; ID_Continue # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II +0AC1..0AC5 ; ID_Continue # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E +0AC7..0AC8 ; ID_Continue # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI +0AC9 ; ID_Continue # Mc GUJARATI VOWEL SIGN CANDRA O +0ACB..0ACC ; ID_Continue # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU +0ACD ; ID_Continue # Mn GUJARATI SIGN VIRAMA +0AD0 ; ID_Continue # Lo GUJARATI OM +0AE0..0AE1 ; ID_Continue # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL +0AE2..0AE3 ; ID_Continue # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL +0AE6..0AEF ; ID_Continue # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE +0AF9 ; ID_Continue # Lo GUJARATI LETTER ZHA +0AFA..0AFF ; ID_Continue # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE +0B01 ; ID_Continue # Mn ORIYA SIGN CANDRABINDU +0B02..0B03 ; ID_Continue # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA +0B05..0B0C ; ID_Continue # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L +0B0F..0B10 ; ID_Continue # Lo [2] ORIYA LETTER E..ORIYA LETTER AI +0B13..0B28 ; ID_Continue # Lo [22] ORIYA LETTER O..ORIYA LETTER NA +0B2A..0B30 ; ID_Continue # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA +0B32..0B33 ; ID_Continue # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA +0B35..0B39 ; ID_Continue # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA +0B3C ; ID_Continue # Mn ORIYA SIGN NUKTA +0B3D ; ID_Continue # Lo ORIYA SIGN AVAGRAHA +0B3E ; ID_Continue # Mc ORIYA VOWEL SIGN AA +0B3F ; ID_Continue # Mn ORIYA VOWEL SIGN I +0B40 ; ID_Continue # Mc ORIYA VOWEL SIGN II +0B41..0B44 ; ID_Continue # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR +0B47..0B48 ; ID_Continue # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI +0B4B..0B4C ; ID_Continue # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU +0B4D ; ID_Continue # Mn ORIYA SIGN VIRAMA +0B55..0B56 ; ID_Continue # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK +0B57 ; ID_Continue # Mc ORIYA AU LENGTH MARK +0B5C..0B5D ; ID_Continue # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0B5F..0B61 ; ID_Continue # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL +0B62..0B63 ; ID_Continue # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL +0B66..0B6F ; ID_Continue # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE +0B71 ; ID_Continue # Lo ORIYA LETTER WA +0B82 ; ID_Continue # Mn TAMIL SIGN ANUSVARA +0B83 ; ID_Continue # Lo TAMIL SIGN VISARGA +0B85..0B8A ; ID_Continue # Lo [6] TAMIL LETTER A..TAMIL LETTER UU +0B8E..0B90 ; ID_Continue # Lo [3] TAMIL LETTER E..TAMIL LETTER AI +0B92..0B95 ; ID_Continue # Lo [4] TAMIL LETTER O..TAMIL LETTER KA +0B99..0B9A ; ID_Continue # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA +0B9C ; ID_Continue # Lo TAMIL LETTER JA +0B9E..0B9F ; ID_Continue # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA +0BA3..0BA4 ; ID_Continue # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA +0BA8..0BAA ; ID_Continue # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA +0BAE..0BB9 ; ID_Continue # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA +0BBE..0BBF ; ID_Continue # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I +0BC0 ; ID_Continue # Mn TAMIL VOWEL SIGN II +0BC1..0BC2 ; ID_Continue # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU +0BC6..0BC8 ; ID_Continue # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI +0BCA..0BCC ; ID_Continue # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU +0BCD ; ID_Continue # Mn TAMIL SIGN VIRAMA +0BD0 ; ID_Continue # Lo TAMIL OM +0BD7 ; ID_Continue # Mc TAMIL AU LENGTH MARK +0BE6..0BEF ; ID_Continue # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE +0C00 ; ID_Continue # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE +0C01..0C03 ; ID_Continue # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA +0C04 ; ID_Continue # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE +0C05..0C0C ; ID_Continue # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L +0C0E..0C10 ; ID_Continue # Lo [3] TELUGU LETTER E..TELUGU LETTER AI +0C12..0C28 ; ID_Continue # Lo [23] TELUGU LETTER O..TELUGU LETTER NA +0C2A..0C39 ; ID_Continue # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA +0C3C ; ID_Continue # Mn TELUGU SIGN NUKTA +0C3D ; ID_Continue # Lo TELUGU SIGN AVAGRAHA +0C3E..0C40 ; ID_Continue # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II +0C41..0C44 ; ID_Continue # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR +0C46..0C48 ; ID_Continue # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI +0C4A..0C4D ; ID_Continue # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA +0C55..0C56 ; ID_Continue # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK +0C58..0C5A ; ID_Continue # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5C..0C5D ; ID_Continue # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU +0C60..0C61 ; ID_Continue # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL +0C62..0C63 ; ID_Continue # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL +0C66..0C6F ; ID_Continue # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE +0C80 ; ID_Continue # Lo KANNADA SIGN SPACING CANDRABINDU +0C81 ; ID_Continue # Mn KANNADA SIGN CANDRABINDU +0C82..0C83 ; ID_Continue # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA +0C85..0C8C ; ID_Continue # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L +0C8E..0C90 ; ID_Continue # Lo [3] KANNADA LETTER E..KANNADA LETTER AI +0C92..0CA8 ; ID_Continue # Lo [23] KANNADA LETTER O..KANNADA LETTER NA +0CAA..0CB3 ; ID_Continue # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA +0CB5..0CB9 ; ID_Continue # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA +0CBC ; ID_Continue # Mn KANNADA SIGN NUKTA +0CBD ; ID_Continue # Lo KANNADA SIGN AVAGRAHA +0CBE ; ID_Continue # Mc KANNADA VOWEL SIGN AA +0CBF ; ID_Continue # Mn KANNADA VOWEL SIGN I +0CC0..0CC4 ; ID_Continue # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR +0CC6 ; ID_Continue # Mn KANNADA VOWEL SIGN E +0CC7..0CC8 ; ID_Continue # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; ID_Continue # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO +0CCC..0CCD ; ID_Continue # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA +0CD5..0CD6 ; ID_Continue # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK +0CDC..0CDE ; ID_Continue # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA +0CE0..0CE1 ; ID_Continue # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL +0CE2..0CE3 ; ID_Continue # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL +0CE6..0CEF ; ID_Continue # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE +0CF1..0CF2 ; ID_Continue # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA +0CF3 ; ID_Continue # Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT +0D00..0D01 ; ID_Continue # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU +0D02..0D03 ; ID_Continue # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA +0D04..0D0C ; ID_Continue # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L +0D0E..0D10 ; ID_Continue # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI +0D12..0D3A ; ID_Continue # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA +0D3B..0D3C ; ID_Continue # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA +0D3D ; ID_Continue # Lo MALAYALAM SIGN AVAGRAHA +0D3E..0D40 ; ID_Continue # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II +0D41..0D44 ; ID_Continue # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR +0D46..0D48 ; ID_Continue # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI +0D4A..0D4C ; ID_Continue # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU +0D4D ; ID_Continue # Mn MALAYALAM SIGN VIRAMA +0D4E ; ID_Continue # Lo MALAYALAM LETTER DOT REPH +0D54..0D56 ; ID_Continue # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL +0D57 ; ID_Continue # Mc MALAYALAM AU LENGTH MARK +0D5F..0D61 ; ID_Continue # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL +0D62..0D63 ; ID_Continue # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL +0D66..0D6F ; ID_Continue # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE +0D7A..0D7F ; ID_Continue # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K +0D81 ; ID_Continue # Mn SINHALA SIGN CANDRABINDU +0D82..0D83 ; ID_Continue # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA +0D85..0D96 ; ID_Continue # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA +0D9A..0DB1 ; ID_Continue # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA +0DB3..0DBB ; ID_Continue # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA +0DBD ; ID_Continue # Lo SINHALA LETTER DANTAJA LAYANNA +0DC0..0DC6 ; ID_Continue # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA +0DCA ; ID_Continue # Mn SINHALA SIGN AL-LAKUNA +0DCF..0DD1 ; ID_Continue # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA +0DD2..0DD4 ; ID_Continue # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA +0DD6 ; ID_Continue # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA +0DD8..0DDF ; ID_Continue # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA +0DE6..0DEF ; ID_Continue # Nd [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE +0DF2..0DF3 ; ID_Continue # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA +0E01..0E30 ; ID_Continue # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A +0E31 ; ID_Continue # Mn THAI CHARACTER MAI HAN-AKAT +0E32..0E33 ; ID_Continue # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM +0E34..0E3A ; ID_Continue # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU +0E40..0E45 ; ID_Continue # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO +0E46 ; ID_Continue # Lm THAI CHARACTER MAIYAMOK +0E47..0E4E ; ID_Continue # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN +0E50..0E59 ; ID_Continue # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE +0E81..0E82 ; ID_Continue # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG +0E84 ; ID_Continue # Lo LAO LETTER KHO TAM +0E86..0E8A ; ID_Continue # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM +0E8C..0EA3 ; ID_Continue # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING +0EA5 ; ID_Continue # Lo LAO LETTER LO LOOT +0EA7..0EB0 ; ID_Continue # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A +0EB1 ; ID_Continue # Mn LAO VOWEL SIGN MAI KAN +0EB2..0EB3 ; ID_Continue # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM +0EB4..0EBC ; ID_Continue # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO +0EBD ; ID_Continue # Lo LAO SEMIVOWEL SIGN NYO +0EC0..0EC4 ; ID_Continue # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI +0EC6 ; ID_Continue # Lm LAO KO LA +0EC8..0ECE ; ID_Continue # Mn [7] LAO TONE MAI EK..LAO YAMAKKAN +0ED0..0ED9 ; ID_Continue # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE +0EDC..0EDF ; ID_Continue # Lo [4] LAO HO NO..LAO LETTER KHMU NYO +0F00 ; ID_Continue # Lo TIBETAN SYLLABLE OM +0F18..0F19 ; ID_Continue # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS +0F20..0F29 ; ID_Continue # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE +0F35 ; ID_Continue # Mn TIBETAN MARK NGAS BZUNG NYI ZLA +0F37 ; ID_Continue # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS +0F39 ; ID_Continue # Mn TIBETAN MARK TSA -PHRU +0F3E..0F3F ; ID_Continue # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES +0F40..0F47 ; ID_Continue # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA +0F49..0F6C ; ID_Continue # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA +0F71..0F7E ; ID_Continue # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO +0F7F ; ID_Continue # Mc TIBETAN SIGN RNAM BCAD +0F80..0F84 ; ID_Continue # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA +0F86..0F87 ; ID_Continue # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS +0F88..0F8C ; ID_Continue # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN +0F8D..0F97 ; ID_Continue # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA +0F99..0FBC ; ID_Continue # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA +0FC6 ; ID_Continue # Mn TIBETAN SYMBOL PADMA GDAN +1000..102A ; ID_Continue # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU +102B..102C ; ID_Continue # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA +102D..1030 ; ID_Continue # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU +1031 ; ID_Continue # Mc MYANMAR VOWEL SIGN E +1032..1037 ; ID_Continue # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW +1038 ; ID_Continue # Mc MYANMAR SIGN VISARGA +1039..103A ; ID_Continue # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT +103B..103C ; ID_Continue # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA +103D..103E ; ID_Continue # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA +103F ; ID_Continue # Lo MYANMAR LETTER GREAT SA +1040..1049 ; ID_Continue # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE +1050..1055 ; ID_Continue # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL +1056..1057 ; ID_Continue # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR +1058..1059 ; ID_Continue # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL +105A..105D ; ID_Continue # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE +105E..1060 ; ID_Continue # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA +1061 ; ID_Continue # Lo MYANMAR LETTER SGAW KAREN SHA +1062..1064 ; ID_Continue # Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO +1065..1066 ; ID_Continue # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA +1067..106D ; ID_Continue # Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5 +106E..1070 ; ID_Continue # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA +1071..1074 ; ID_Continue # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE +1075..1081 ; ID_Continue # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA +1082 ; ID_Continue # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA +1083..1084 ; ID_Continue # Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E +1085..1086 ; ID_Continue # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y +1087..108C ; ID_Continue # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3 +108D ; ID_Continue # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE +108E ; ID_Continue # Lo MYANMAR LETTER RUMAI PALAUNG FA +108F ; ID_Continue # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5 +1090..1099 ; ID_Continue # Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE +109A..109C ; ID_Continue # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A +109D ; ID_Continue # Mn MYANMAR VOWEL SIGN AITON AI +10A0..10C5 ; ID_Continue # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE +10C7 ; ID_Continue # L& GEORGIAN CAPITAL LETTER YN +10CD ; ID_Continue # L& GEORGIAN CAPITAL LETTER AEN +10D0..10FA ; ID_Continue # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN +10FC ; ID_Continue # Lm MODIFIER LETTER GEORGIAN NAR +10FD..10FF ; ID_Continue # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN +1100..1248 ; ID_Continue # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA +124A..124D ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE +1250..1256 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO +1258 ; ID_Continue # Lo ETHIOPIC SYLLABLE QHWA +125A..125D ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE +1260..1288 ; ID_Continue # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA +128A..128D ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE +1290..12B0 ; ID_Continue # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA +12B2..12B5 ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE +12B8..12BE ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO +12C0 ; ID_Continue # Lo ETHIOPIC SYLLABLE KXWA +12C2..12C5 ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE +12C8..12D6 ; ID_Continue # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O +12D8..1310 ; ID_Continue # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA +1312..1315 ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE +1318..135A ; ID_Continue # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA +135D..135F ; ID_Continue # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK +1369..1371 ; ID_Continue # No [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE +1380..138F ; ID_Continue # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE +13A0..13F5 ; ID_Continue # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV +13F8..13FD ; ID_Continue # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV +1401..166C ; ID_Continue # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA +166F..167F ; ID_Continue # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W +1681..169A ; ID_Continue # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH +16A0..16EA ; ID_Continue # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X +16EE..16F0 ; ID_Continue # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL +16F1..16F8 ; ID_Continue # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC +1700..1711 ; ID_Continue # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA +1712..1714 ; ID_Continue # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA +1715 ; ID_Continue # Mc TAGALOG SIGN PAMUDPOD +171F..1731 ; ID_Continue # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA +1732..1733 ; ID_Continue # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1734 ; ID_Continue # Mc HANUNOO SIGN PAMUDPOD +1740..1751 ; ID_Continue # Lo [18] BUHID LETTER A..BUHID LETTER HA +1752..1753 ; ID_Continue # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U +1760..176C ; ID_Continue # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA +176E..1770 ; ID_Continue # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA +1772..1773 ; ID_Continue # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U +1780..17B3 ; ID_Continue # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU +17B4..17B5 ; ID_Continue # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA +17B6 ; ID_Continue # Mc KHMER VOWEL SIGN AA +17B7..17BD ; ID_Continue # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA +17BE..17C5 ; ID_Continue # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU +17C6 ; ID_Continue # Mn KHMER SIGN NIKAHIT +17C7..17C8 ; ID_Continue # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU +17C9..17D3 ; ID_Continue # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT +17D7 ; ID_Continue # Lm KHMER SIGN LEK TOO +17DC ; ID_Continue # Lo KHMER SIGN AVAKRAHASANYA +17DD ; ID_Continue # Mn KHMER SIGN ATTHACAN +17E0..17E9 ; ID_Continue # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE +180B..180D ; ID_Continue # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; ID_Continue # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR +1810..1819 ; ID_Continue # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE +1820..1842 ; ID_Continue # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI +1843 ; ID_Continue # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN +1844..1878 ; ID_Continue # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS +1880..1884 ; ID_Continue # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA +1885..1886 ; ID_Continue # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA +1887..18A8 ; ID_Continue # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA +18A9 ; ID_Continue # Mn MONGOLIAN LETTER ALI GALI DAGALGA +18AA ; ID_Continue # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA +18B0..18F5 ; ID_Continue # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S +1900..191E ; ID_Continue # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA +1920..1922 ; ID_Continue # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U +1923..1926 ; ID_Continue # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU +1927..1928 ; ID_Continue # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O +1929..192B ; ID_Continue # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA +1930..1931 ; ID_Continue # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA +1932 ; ID_Continue # Mn LIMBU SMALL LETTER ANUSVARA +1933..1938 ; ID_Continue # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA +1939..193B ; ID_Continue # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I +1946..194F ; ID_Continue # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE +1950..196D ; ID_Continue # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI +1970..1974 ; ID_Continue # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 +1980..19AB ; ID_Continue # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA +19B0..19C9 ; ID_Continue # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2 +19D0..19D9 ; ID_Continue # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE +19DA ; ID_Continue # No NEW TAI LUE THAM DIGIT ONE +1A00..1A16 ; ID_Continue # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA +1A17..1A18 ; ID_Continue # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U +1A19..1A1A ; ID_Continue # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O +1A1B ; ID_Continue # Mn BUGINESE VOWEL SIGN AE +1A20..1A54 ; ID_Continue # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA +1A55 ; ID_Continue # Mc TAI THAM CONSONANT SIGN MEDIAL RA +1A56 ; ID_Continue # Mn TAI THAM CONSONANT SIGN MEDIAL LA +1A57 ; ID_Continue # Mc TAI THAM CONSONANT SIGN LA TANG LAI +1A58..1A5E ; ID_Continue # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA +1A60 ; ID_Continue # Mn TAI THAM SIGN SAKOT +1A61 ; ID_Continue # Mc TAI THAM VOWEL SIGN A +1A62 ; ID_Continue # Mn TAI THAM VOWEL SIGN MAI SAT +1A63..1A64 ; ID_Continue # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA +1A65..1A6C ; ID_Continue # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW +1A6D..1A72 ; ID_Continue # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI +1A73..1A7C ; ID_Continue # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN +1A7F ; ID_Continue # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT +1A80..1A89 ; ID_Continue # Nd [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE +1A90..1A99 ; ID_Continue # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE +1AA7 ; ID_Continue # Lm TAI THAM SIGN MAI YAMOK +1AB0..1ABD ; ID_Continue # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW +1ABF..1ADD ; ID_Continue # Mn [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; ID_Continue # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE +1B00..1B03 ; ID_Continue # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG +1B04 ; ID_Continue # Mc BALINESE SIGN BISAH +1B05..1B33 ; ID_Continue # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA +1B34 ; ID_Continue # Mn BALINESE SIGN REREKAN +1B35 ; ID_Continue # Mc BALINESE VOWEL SIGN TEDUNG +1B36..1B3A ; ID_Continue # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA +1B3B ; ID_Continue # Mc BALINESE VOWEL SIGN RA REPA TEDUNG +1B3C ; ID_Continue # Mn BALINESE VOWEL SIGN LA LENGA +1B3D..1B41 ; ID_Continue # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG +1B42 ; ID_Continue # Mn BALINESE VOWEL SIGN PEPET +1B43..1B44 ; ID_Continue # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG +1B45..1B4C ; ID_Continue # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA +1B50..1B59 ; ID_Continue # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE +1B6B..1B73 ; ID_Continue # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG +1B80..1B81 ; ID_Continue # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR +1B82 ; ID_Continue # Mc SUNDANESE SIGN PANGWISAD +1B83..1BA0 ; ID_Continue # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA +1BA1 ; ID_Continue # Mc SUNDANESE CONSONANT SIGN PAMINGKAL +1BA2..1BA5 ; ID_Continue # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU +1BA6..1BA7 ; ID_Continue # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG +1BA8..1BA9 ; ID_Continue # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG +1BAA ; ID_Continue # Mc SUNDANESE SIGN PAMAAEH +1BAB..1BAD ; ID_Continue # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA +1BAE..1BAF ; ID_Continue # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA +1BB0..1BB9 ; ID_Continue # Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE +1BBA..1BE5 ; ID_Continue # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U +1BE6 ; ID_Continue # Mn BATAK SIGN TOMPI +1BE7 ; ID_Continue # Mc BATAK VOWEL SIGN E +1BE8..1BE9 ; ID_Continue # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE +1BEA..1BEC ; ID_Continue # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O +1BED ; ID_Continue # Mn BATAK VOWEL SIGN KARO O +1BEE ; ID_Continue # Mc BATAK VOWEL SIGN U +1BEF..1BF1 ; ID_Continue # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H +1BF2..1BF3 ; ID_Continue # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN +1C00..1C23 ; ID_Continue # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A +1C24..1C2B ; ID_Continue # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU +1C2C..1C33 ; ID_Continue # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T +1C34..1C35 ; ID_Continue # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG +1C36..1C37 ; ID_Continue # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA +1C40..1C49 ; ID_Continue # Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE +1C4D..1C4F ; ID_Continue # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA +1C50..1C59 ; ID_Continue # Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE +1C5A..1C77 ; ID_Continue # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH +1C78..1C7D ; ID_Continue # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD +1C80..1C8A ; ID_Continue # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE +1C90..1CBA ; ID_Continue # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN +1CBD..1CBF ; ID_Continue # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN +1CD0..1CD2 ; ID_Continue # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA +1CD4..1CE0 ; ID_Continue # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA +1CE1 ; ID_Continue # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA +1CE2..1CE8 ; ID_Continue # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL +1CE9..1CEC ; ID_Continue # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL +1CED ; ID_Continue # Mn VEDIC SIGN TIRYAK +1CEE..1CF3 ; ID_Continue # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA +1CF4 ; ID_Continue # Mn VEDIC TONE CANDRA ABOVE +1CF5..1CF6 ; ID_Continue # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA +1CF7 ; ID_Continue # Mc VEDIC SIGN ATIKRAMA +1CF8..1CF9 ; ID_Continue # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE +1CFA ; ID_Continue # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA +1D00..1D2B ; ID_Continue # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL +1D2C..1D6A ; ID_Continue # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI +1D6B..1D77 ; ID_Continue # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G +1D78 ; ID_Continue # Lm MODIFIER LETTER CYRILLIC EN +1D79..1D9A ; ID_Continue # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK +1D9B..1DBF ; ID_Continue # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA +1DC0..1DFF ; ID_Continue # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1E00..1F15 ; ID_Continue # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18..1F1D ; ID_Continue # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F45 ; ID_Continue # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48..1F4D ; ID_Continue # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; ID_Continue # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59 ; ID_Continue # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; ID_Continue # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; ID_Continue # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F..1F7D ; ID_Continue # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1FB4 ; ID_Continue # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FBC ; ID_Continue # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBE ; ID_Continue # L& GREEK PROSGEGRAMMENI +1FC2..1FC4 ; ID_Continue # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FCC ; ID_Continue # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FD0..1FD3 ; ID_Continue # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FDB ; ID_Continue # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA +1FE0..1FEC ; ID_Continue # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FF2..1FF4 ; ID_Continue # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FFC ; ID_Continue # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +200C..200D ; ID_Continue # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER +203F..2040 ; ID_Continue # Pc [2] UNDERTIE..CHARACTER TIE +2054 ; ID_Continue # Pc INVERTED UNDERTIE +2071 ; ID_Continue # Lm SUPERSCRIPT LATIN SMALL LETTER I +207F ; ID_Continue # Lm SUPERSCRIPT LATIN SMALL LETTER N +2090..209C ; ID_Continue # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T +20D0..20DC ; ID_Continue # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE +20E1 ; ID_Continue # Mn COMBINING LEFT RIGHT ARROW ABOVE +20E5..20F0 ; ID_Continue # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE +2102 ; ID_Continue # L& DOUBLE-STRUCK CAPITAL C +2107 ; ID_Continue # L& EULER CONSTANT +210A..2113 ; ID_Continue # L& [10] SCRIPT SMALL G..SCRIPT SMALL L +2115 ; ID_Continue # L& DOUBLE-STRUCK CAPITAL N +2118 ; ID_Continue # Sm SCRIPT CAPITAL P +2119..211D ; ID_Continue # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R +2124 ; ID_Continue # L& DOUBLE-STRUCK CAPITAL Z +2126 ; ID_Continue # L& OHM SIGN +2128 ; ID_Continue # L& BLACK-LETTER CAPITAL Z +212A..212D ; ID_Continue # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C +212E ; ID_Continue # So ESTIMATED SYMBOL +212F..2134 ; ID_Continue # L& [6] SCRIPT SMALL E..SCRIPT SMALL O +2135..2138 ; ID_Continue # Lo [4] ALEF SYMBOL..DALET SYMBOL +2139 ; ID_Continue # L& INFORMATION SOURCE +213C..213F ; ID_Continue # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI +2145..2149 ; ID_Continue # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J +214E ; ID_Continue # L& TURNED SMALL F +2160..2182 ; ID_Continue # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND +2183..2184 ; ID_Continue # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C +2185..2188 ; ID_Continue # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND +2C00..2C7B ; ID_Continue # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E +2C7C..2C7D ; ID_Continue # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V +2C7E..2CE4 ; ID_Continue # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI +2CEB..2CEE ; ID_Continue # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA +2CEF..2CF1 ; ID_Continue # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS +2CF2..2CF3 ; ID_Continue # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI +2D00..2D25 ; ID_Continue # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE +2D27 ; ID_Continue # L& GEORGIAN SMALL LETTER YN +2D2D ; ID_Continue # L& GEORGIAN SMALL LETTER AEN +2D30..2D67 ; ID_Continue # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO +2D6F ; ID_Continue # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2D7F ; ID_Continue # Mn TIFINAGH CONSONANT JOINER +2D80..2D96 ; ID_Continue # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE +2DA0..2DA6 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO +2DA8..2DAE ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO +2DB0..2DB6 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO +2DB8..2DBE ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO +2DC0..2DC6 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO +2DC8..2DCE ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO +2DD0..2DD6 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO +2DD8..2DDE ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO +2DE0..2DFF ; ID_Continue # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS +3005 ; ID_Continue # Lm IDEOGRAPHIC ITERATION MARK +3006 ; ID_Continue # Lo IDEOGRAPHIC CLOSING MARK +3007 ; ID_Continue # Nl IDEOGRAPHIC NUMBER ZERO +3021..3029 ; ID_Continue # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE +302A..302D ; ID_Continue # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK +302E..302F ; ID_Continue # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK +3031..3035 ; ID_Continue # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF +3038..303A ; ID_Continue # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY +303B ; ID_Continue # Lm VERTICAL IDEOGRAPHIC ITERATION MARK +303C ; ID_Continue # Lo MASU MARK +3041..3096 ; ID_Continue # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE +3099..309A ; ID_Continue # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +309B..309C ; ID_Continue # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +309D..309E ; ID_Continue # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK +309F ; ID_Continue # Lo HIRAGANA DIGRAPH YORI +30A1..30FA ; ID_Continue # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO +30FB ; ID_Continue # Po KATAKANA MIDDLE DOT +30FC..30FE ; ID_Continue # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK +30FF ; ID_Continue # Lo KATAKANA DIGRAPH KOTO +3105..312F ; ID_Continue # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN +3131..318E ; ID_Continue # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE +31A0..31BF ; ID_Continue # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH +31F0..31FF ; ID_Continue # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO +3400..4DBF ; ID_Continue # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF +4E00..A014 ; ID_Continue # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E +A015 ; ID_Continue # Lm YI SYLLABLE WU +A016..A48C ; ID_Continue # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR +A4D0..A4F7 ; ID_Continue # Lo [40] LISU LETTER BA..LISU LETTER OE +A4F8..A4FD ; ID_Continue # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU +A500..A60B ; ID_Continue # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG +A60C ; ID_Continue # Lm VAI SYLLABLE LENGTHENER +A610..A61F ; ID_Continue # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG +A620..A629 ; ID_Continue # Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE +A62A..A62B ; ID_Continue # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO +A640..A66D ; ID_Continue # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O +A66E ; ID_Continue # Lo CYRILLIC LETTER MULTIOCULAR O +A66F ; ID_Continue # Mn COMBINING CYRILLIC VZMET +A674..A67D ; ID_Continue # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK +A67F ; ID_Continue # Lm CYRILLIC PAYEROK +A680..A69B ; ID_Continue # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O +A69C..A69D ; ID_Continue # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN +A69E..A69F ; ID_Continue # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E +A6A0..A6E5 ; ID_Continue # Lo [70] BAMUM LETTER A..BAMUM LETTER KI +A6E6..A6EF ; ID_Continue # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM +A6F0..A6F1 ; ID_Continue # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS +A717..A71F ; ID_Continue # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK +A722..A76F ; ID_Continue # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON +A770 ; ID_Continue # Lm MODIFIER LETTER US +A771..A787 ; ID_Continue # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T +A788 ; ID_Continue # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT +A78B..A78E ; ID_Continue # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT +A78F ; ID_Continue # Lo LATIN LETTER SINOLOGICAL DOT +A790..A7DC ; ID_Continue # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; ID_Continue # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q +A7F5..A7F6 ; ID_Continue # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H +A7F7 ; ID_Continue # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I +A7F8..A7F9 ; ID_Continue # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE +A7FA ; ID_Continue # L& LATIN LETTER SMALL CAPITAL TURNED M +A7FB..A801 ; ID_Continue # Lo [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I +A802 ; ID_Continue # Mn SYLOTI NAGRI SIGN DVISVARA +A803..A805 ; ID_Continue # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O +A806 ; ID_Continue # Mn SYLOTI NAGRI SIGN HASANTA +A807..A80A ; ID_Continue # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO +A80B ; ID_Continue # Mn SYLOTI NAGRI SIGN ANUSVARA +A80C..A822 ; ID_Continue # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO +A823..A824 ; ID_Continue # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I +A825..A826 ; ID_Continue # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E +A827 ; ID_Continue # Mc SYLOTI NAGRI VOWEL SIGN OO +A82C ; ID_Continue # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA +A840..A873 ; ID_Continue # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU +A880..A881 ; ID_Continue # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA +A882..A8B3 ; ID_Continue # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA +A8B4..A8C3 ; ID_Continue # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU +A8C4..A8C5 ; ID_Continue # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU +A8D0..A8D9 ; ID_Continue # Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE +A8E0..A8F1 ; ID_Continue # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA +A8F2..A8F7 ; ID_Continue # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA +A8FB ; ID_Continue # Lo DEVANAGARI HEADSTROKE +A8FD..A8FE ; ID_Continue # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY +A8FF ; ID_Continue # Mn DEVANAGARI VOWEL SIGN AY +A900..A909 ; ID_Continue # Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE +A90A..A925 ; ID_Continue # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO +A926..A92D ; ID_Continue # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU +A930..A946 ; ID_Continue # Lo [23] REJANG LETTER KA..REJANG LETTER A +A947..A951 ; ID_Continue # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R +A952..A953 ; ID_Continue # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA +A960..A97C ; ID_Continue # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH +A980..A982 ; ID_Continue # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR +A983 ; ID_Continue # Mc JAVANESE SIGN WIGNYAN +A984..A9B2 ; ID_Continue # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA +A9B3 ; ID_Continue # Mn JAVANESE SIGN CECAK TELU +A9B4..A9B5 ; ID_Continue # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG +A9B6..A9B9 ; ID_Continue # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT +A9BA..A9BB ; ID_Continue # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE +A9BC..A9BD ; ID_Continue # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET +A9BE..A9C0 ; ID_Continue # Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON +A9CF ; ID_Continue # Lm JAVANESE PANGRANGKEP +A9D0..A9D9 ; ID_Continue # Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE +A9E0..A9E4 ; ID_Continue # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA +A9E5 ; ID_Continue # Mn MYANMAR SIGN SHAN SAW +A9E6 ; ID_Continue # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION +A9E7..A9EF ; ID_Continue # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA +A9F0..A9F9 ; ID_Continue # Nd [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE +A9FA..A9FE ; ID_Continue # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA +AA00..AA28 ; ID_Continue # Lo [41] CHAM LETTER A..CHAM LETTER HA +AA29..AA2E ; ID_Continue # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE +AA2F..AA30 ; ID_Continue # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI +AA31..AA32 ; ID_Continue # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE +AA33..AA34 ; ID_Continue # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA +AA35..AA36 ; ID_Continue # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA +AA40..AA42 ; ID_Continue # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG +AA43 ; ID_Continue # Mn CHAM CONSONANT SIGN FINAL NG +AA44..AA4B ; ID_Continue # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS +AA4C ; ID_Continue # Mn CHAM CONSONANT SIGN FINAL M +AA4D ; ID_Continue # Mc CHAM CONSONANT SIGN FINAL H +AA50..AA59 ; ID_Continue # Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE +AA60..AA6F ; ID_Continue # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA +AA70 ; ID_Continue # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION +AA71..AA76 ; ID_Continue # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM +AA7A ; ID_Continue # Lo MYANMAR LETTER AITON RA +AA7B ; ID_Continue # Mc MYANMAR SIGN PAO KAREN TONE +AA7C ; ID_Continue # Mn MYANMAR SIGN TAI LAING TONE-2 +AA7D ; ID_Continue # Mc MYANMAR SIGN TAI LAING TONE-5 +AA7E..AAAF ; ID_Continue # Lo [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O +AAB0 ; ID_Continue # Mn TAI VIET MAI KANG +AAB1 ; ID_Continue # Lo TAI VIET VOWEL AA +AAB2..AAB4 ; ID_Continue # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U +AAB5..AAB6 ; ID_Continue # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O +AAB7..AAB8 ; ID_Continue # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA +AAB9..AABD ; ID_Continue # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN +AABE..AABF ; ID_Continue # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK +AAC0 ; ID_Continue # Lo TAI VIET TONE MAI NUENG +AAC1 ; ID_Continue # Mn TAI VIET TONE MAI THO +AAC2 ; ID_Continue # Lo TAI VIET TONE MAI SONG +AADB..AADC ; ID_Continue # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG +AADD ; ID_Continue # Lm TAI VIET SYMBOL SAM +AAE0..AAEA ; ID_Continue # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA +AAEB ; ID_Continue # Mc MEETEI MAYEK VOWEL SIGN II +AAEC..AAED ; ID_Continue # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI +AAEE..AAEF ; ID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU +AAF2 ; ID_Continue # Lo MEETEI MAYEK ANJI +AAF3..AAF4 ; ID_Continue # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK +AAF5 ; ID_Continue # Mc MEETEI MAYEK VOWEL SIGN VISARGA +AAF6 ; ID_Continue # Mn MEETEI MAYEK VIRAMA +AB01..AB06 ; ID_Continue # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO +AB09..AB0E ; ID_Continue # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO +AB11..AB16 ; ID_Continue # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO +AB20..AB26 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO +AB28..AB2E ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO +AB30..AB5A ; ID_Continue # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG +AB5C..AB5F ; ID_Continue # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK +AB60..AB68 ; ID_Continue # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE +AB69 ; ID_Continue # Lm MODIFIER LETTER SMALL TURNED W +AB70..ABBF ; ID_Continue # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA +ABC0..ABE2 ; ID_Continue # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM +ABE3..ABE4 ; ID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP +ABE5 ; ID_Continue # Mn MEETEI MAYEK VOWEL SIGN ANAP +ABE6..ABE7 ; ID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP +ABE8 ; ID_Continue # Mn MEETEI MAYEK VOWEL SIGN UNAP +ABE9..ABEA ; ID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG +ABEC ; ID_Continue # Mc MEETEI MAYEK LUM IYEK +ABED ; ID_Continue # Mn MEETEI MAYEK APUN IYEK +ABF0..ABF9 ; ID_Continue # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE +AC00..D7A3 ; ID_Continue # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH +D7B0..D7C6 ; ID_Continue # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E +D7CB..D7FB ; ID_Continue # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH +F900..FA6D ; ID_Continue # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D +FA70..FAD9 ; ID_Continue # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +FB00..FB06 ; ID_Continue # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; ID_Continue # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FB1D ; ID_Continue # Lo HEBREW LETTER YOD WITH HIRIQ +FB1E ; ID_Continue # Mn HEBREW POINT JUDEO-SPANISH VARIKA +FB1F..FB28 ; ID_Continue # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV +FB2A..FB36 ; ID_Continue # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; ID_Continue # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; ID_Continue # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; ID_Continue # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; ID_Continue # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FBB1 ; ID_Continue # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM +FBD3..FD3D ; ID_Continue # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD50..FD8F ; ID_Continue # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD92..FDC7 ; ID_Continue # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDF0..FDFB ; ID_Continue # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU +FE00..FE0F ; ID_Continue # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 +FE20..FE2F ; ID_Continue # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF +FE33..FE34 ; ID_Continue # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE +FE4D..FE4F ; ID_Continue # Pc [3] DASHED LOW LINE..WAVY LOW LINE +FE70..FE74 ; ID_Continue # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM +FE76..FEFC ; ID_Continue # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM +FF10..FF19 ; ID_Continue # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE +FF21..FF3A ; ID_Continue # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +FF3F ; ID_Continue # Pc FULLWIDTH LOW LINE +FF41..FF5A ; ID_Continue # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +FF65 ; ID_Continue # Po HALFWIDTH KATAKANA MIDDLE DOT +FF66..FF6F ; ID_Continue # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU +FF70 ; ID_Continue # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF71..FF9D ; ID_Continue # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N +FF9E..FF9F ; ID_Continue # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +FFA0..FFBE ; ID_Continue # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH +FFC2..FFC7 ; ID_Continue # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E +FFCA..FFCF ; ID_Continue # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE +FFD2..FFD7 ; ID_Continue # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU +FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I +10000..1000B ; ID_Continue # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE +1000D..10026 ; ID_Continue # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO +10028..1003A ; ID_Continue # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO +1003C..1003D ; ID_Continue # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE +1003F..1004D ; ID_Continue # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO +10050..1005D ; ID_Continue # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 +10080..100FA ; ID_Continue # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 +10140..10174 ; ID_Continue # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS +101FD ; ID_Continue # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE +10280..1029C ; ID_Continue # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X +102A0..102D0 ; ID_Continue # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3 +102E0 ; ID_Continue # Mn COPTIC EPACT THOUSANDS MARK +10300..1031F ; ID_Continue # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS +1032D..10340 ; ID_Continue # Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA +10341 ; ID_Continue # Nl GOTHIC LETTER NINETY +10342..10349 ; ID_Continue # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL +1034A ; ID_Continue # Nl GOTHIC LETTER NINE HUNDRED +10350..10375 ; ID_Continue # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA +10376..1037A ; ID_Continue # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII +10380..1039D ; ID_Continue # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU +103A0..103C3 ; ID_Continue # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA +103C8..103CF ; ID_Continue # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH +103D1..103D5 ; ID_Continue # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED +10400..1044F ; ID_Continue # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW +10450..1049D ; ID_Continue # Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO +104A0..104A9 ; ID_Continue # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE +104B0..104D3 ; ID_Continue # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +104D8..104FB ; ID_Continue # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10500..10527 ; ID_Continue # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE +10530..10563 ; ID_Continue # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW +10570..1057A ; ID_Continue # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; ID_Continue # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; ID_Continue # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; ID_Continue # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; ID_Continue # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; ID_Continue # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; ID_Continue # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; ID_Continue # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +105C0..105F3 ; ID_Continue # Lo [52] TODHRI LETTER A..TODHRI LETTER OO +10600..10736 ; ID_Continue # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 +10740..10755 ; ID_Continue # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE +10760..10767 ; ID_Continue # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; ID_Continue # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; ID_Continue # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; ID_Continue # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL +10800..10805 ; ID_Continue # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA +10808 ; ID_Continue # Lo CYPRIOT SYLLABLE JO +1080A..10835 ; ID_Continue # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO +10837..10838 ; ID_Continue # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE +1083C ; ID_Continue # Lo CYPRIOT SYLLABLE ZA +1083F..10855 ; ID_Continue # Lo [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW +10860..10876 ; ID_Continue # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW +10880..1089E ; ID_Continue # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW +108E0..108F2 ; ID_Continue # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH +108F4..108F5 ; ID_Continue # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW +10900..10915 ; ID_Continue # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU +10920..10939 ; ID_Continue # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; ID_Continue # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 +10980..109B7 ; ID_Continue # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA +109BE..109BF ; ID_Continue # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN +10A00 ; ID_Continue # Lo KHAROSHTHI LETTER A +10A01..10A03 ; ID_Continue # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R +10A05..10A06 ; ID_Continue # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A0C..10A0F ; ID_Continue # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA +10A10..10A13 ; ID_Continue # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA +10A15..10A17 ; ID_Continue # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA +10A19..10A35 ; ID_Continue # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA +10A38..10A3A ; ID_Continue # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW +10A3F ; ID_Continue # Mn KHAROSHTHI VIRAMA +10A60..10A7C ; ID_Continue # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH +10A80..10A9C ; ID_Continue # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH +10AC0..10AC7 ; ID_Continue # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW +10AC9..10AE4 ; ID_Continue # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW +10AE5..10AE6 ; ID_Continue # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW +10B00..10B35 ; ID_Continue # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE +10B40..10B55 ; ID_Continue # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW +10B60..10B72 ; ID_Continue # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW +10B80..10B91 ; ID_Continue # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW +10C00..10C48 ; ID_Continue # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH +10C80..10CB2 ; ID_Continue # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10CC0..10CF2 ; ID_Continue # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10D00..10D23 ; ID_Continue # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA +10D24..10D27 ; ID_Continue # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI +10D30..10D39 ; ID_Continue # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE +10D40..10D49 ; ID_Continue # Nd [10] GARAY DIGIT ZERO..GARAY DIGIT NINE +10D4A..10D4D ; ID_Continue # Lo [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE +10D4E ; ID_Continue # Lm GARAY VOWEL LENGTH MARK +10D4F ; ID_Continue # Lo GARAY SUKUN +10D50..10D65 ; ID_Continue # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D69..10D6D ; ID_Continue # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK +10D6F ; ID_Continue # Lm GARAY REDUPLICATION MARK +10D70..10D85 ; ID_Continue # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA +10E80..10EA9 ; ID_Continue # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET +10EAB..10EAC ; ID_Continue # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK +10EB0..10EB1 ; ID_Continue # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE +10EC2..10EC4 ; ID_Continue # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10EC5 ; ID_Continue # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; ID_Continue # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW +10EFA..10EFF ; ID_Continue # Mn [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA +10F00..10F1C ; ID_Continue # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL +10F27 ; ID_Continue # Lo OLD SOGDIAN LIGATURE AYIN-DALETH +10F30..10F45 ; ID_Continue # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN +10F46..10F50 ; ID_Continue # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F70..10F81 ; ID_Continue # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10F82..10F85 ; ID_Continue # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW +10FB0..10FC4 ; ID_Continue # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW +10FE0..10FF6 ; ID_Continue # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH +11000 ; ID_Continue # Mc BRAHMI SIGN CANDRABINDU +11001 ; ID_Continue # Mn BRAHMI SIGN ANUSVARA +11002 ; ID_Continue # Mc BRAHMI SIGN VISARGA +11003..11037 ; ID_Continue # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA +11038..11046 ; ID_Continue # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11066..1106F ; ID_Continue # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE +11070 ; ID_Continue # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11071..11072 ; ID_Continue # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11073..11074 ; ID_Continue # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +11075 ; ID_Continue # Lo BRAHMI LETTER OLD TAMIL LLA +1107F..11081 ; ID_Continue # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA +11082 ; ID_Continue # Mc KAITHI SIGN VISARGA +11083..110AF ; ID_Continue # Lo [45] KAITHI LETTER A..KAITHI LETTER HA +110B0..110B2 ; ID_Continue # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II +110B3..110B6 ; ID_Continue # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI +110B7..110B8 ; ID_Continue # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU +110B9..110BA ; ID_Continue # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; ID_Continue # Mn KAITHI VOWEL SIGN VOCALIC R +110D0..110E8 ; ID_Continue # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE +110F0..110F9 ; ID_Continue # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE +11100..11102 ; ID_Continue # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA +11103..11126 ; ID_Continue # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA +11127..1112B ; ID_Continue # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU +1112C ; ID_Continue # Mc CHAKMA VOWEL SIGN E +1112D..11134 ; ID_Continue # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA +11136..1113F ; ID_Continue # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE +11144 ; ID_Continue # Lo CHAKMA LETTER LHAA +11145..11146 ; ID_Continue # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI +11147 ; ID_Continue # Lo CHAKMA LETTER VAA +11150..11172 ; ID_Continue # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA +11173 ; ID_Continue # Mn MAHAJANI SIGN NUKTA +11176 ; ID_Continue # Lo MAHAJANI LIGATURE SHRI +11180..11181 ; ID_Continue # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA +11182 ; ID_Continue # Mc SHARADA SIGN VISARGA +11183..111B2 ; ID_Continue # Lo [48] SHARADA LETTER A..SHARADA LETTER HA +111B3..111B5 ; ID_Continue # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II +111B6..111BE ; ID_Continue # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O +111BF..111C0 ; ID_Continue # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA +111C1..111C4 ; ID_Continue # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM +111C9..111CC ; ID_Continue # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK +111CE ; ID_Continue # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E +111CF ; ID_Continue # Mn SHARADA SIGN INVERTED CANDRABINDU +111D0..111D9 ; ID_Continue # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE +111DA ; ID_Continue # Lo SHARADA EKAM +111DC ; ID_Continue # Lo SHARADA HEADSTROKE +11200..11211 ; ID_Continue # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA +11213..1122B ; ID_Continue # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA +1122C..1122E ; ID_Continue # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II +1122F..11231 ; ID_Continue # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI +11232..11233 ; ID_Continue # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU +11234 ; ID_Continue # Mn KHOJKI SIGN ANUSVARA +11235 ; ID_Continue # Mc KHOJKI SIGN VIRAMA +11236..11237 ; ID_Continue # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA +1123E ; ID_Continue # Mn KHOJKI SIGN SUKUN +1123F..11240 ; ID_Continue # Lo [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I +11241 ; ID_Continue # Mn KHOJKI VOWEL SIGN VOCALIC R +11280..11286 ; ID_Continue # Lo [7] MULTANI LETTER A..MULTANI LETTER GA +11288 ; ID_Continue # Lo MULTANI LETTER GHA +1128A..1128D ; ID_Continue # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA +1128F..1129D ; ID_Continue # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA +1129F..112A8 ; ID_Continue # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA +112B0..112DE ; ID_Continue # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA +112DF ; ID_Continue # Mn KHUDAWADI SIGN ANUSVARA +112E0..112E2 ; ID_Continue # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II +112E3..112EA ; ID_Continue # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA +112F0..112F9 ; ID_Continue # Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE +11300..11301 ; ID_Continue # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU +11302..11303 ; ID_Continue # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA +11305..1130C ; ID_Continue # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L +1130F..11310 ; ID_Continue # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI +11313..11328 ; ID_Continue # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA +1132A..11330 ; ID_Continue # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA +11332..11333 ; ID_Continue # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA +11335..11339 ; ID_Continue # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA +1133B..1133C ; ID_Continue # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA +1133D ; ID_Continue # Lo GRANTHA SIGN AVAGRAHA +1133E..1133F ; ID_Continue # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I +11340 ; ID_Continue # Mn GRANTHA VOWEL SIGN II +11341..11344 ; ID_Continue # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR +11347..11348 ; ID_Continue # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI +1134B..1134D ; ID_Continue # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA +11350 ; ID_Continue # Lo GRANTHA OM +11357 ; ID_Continue # Mc GRANTHA AU LENGTH MARK +1135D..11361 ; ID_Continue # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL +11362..11363 ; ID_Continue # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL +11366..1136C ; ID_Continue # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX +11370..11374 ; ID_Continue # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA +11380..11389 ; ID_Continue # Lo [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL +1138B ; ID_Continue # Lo TULU-TIGALARI LETTER EE +1138E ; ID_Continue # Lo TULU-TIGALARI LETTER AI +11390..113B5 ; ID_Continue # Lo [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA +113B7 ; ID_Continue # Lo TULU-TIGALARI SIGN AVAGRAHA +113B8..113BA ; ID_Continue # Mc [3] TULU-TIGALARI VOWEL SIGN AA..TULU-TIGALARI VOWEL SIGN II +113BB..113C0 ; ID_Continue # Mn [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL +113C2 ; ID_Continue # Mc TULU-TIGALARI VOWEL SIGN EE +113C5 ; ID_Continue # Mc TULU-TIGALARI VOWEL SIGN AI +113C7..113CA ; ID_Continue # Mc [4] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI SIGN CANDRA ANUNASIKA +113CC..113CD ; ID_Continue # Mc [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA +113CE ; ID_Continue # Mn TULU-TIGALARI SIGN VIRAMA +113CF ; ID_Continue # Mc TULU-TIGALARI SIGN LOOPED VIRAMA +113D0 ; ID_Continue # Mn TULU-TIGALARI CONJOINER +113D1 ; ID_Continue # Lo TULU-TIGALARI REPHA +113D2 ; ID_Continue # Mn TULU-TIGALARI GEMINATION MARK +113D3 ; ID_Continue # Lo TULU-TIGALARI SIGN PLUTA +113E1..113E2 ; ID_Continue # Mn [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA +11400..11434 ; ID_Continue # Lo [53] NEWA LETTER A..NEWA LETTER HA +11435..11437 ; ID_Continue # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II +11438..1143F ; ID_Continue # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI +11440..11441 ; ID_Continue # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU +11442..11444 ; ID_Continue # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA +11445 ; ID_Continue # Mc NEWA SIGN VISARGA +11446 ; ID_Continue # Mn NEWA SIGN NUKTA +11447..1144A ; ID_Continue # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI +11450..11459 ; ID_Continue # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE +1145E ; ID_Continue # Mn NEWA SANDHI MARK +1145F..11461 ; ID_Continue # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA +11480..114AF ; ID_Continue # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA +114B0..114B2 ; ID_Continue # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II +114B3..114B8 ; ID_Continue # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL +114B9 ; ID_Continue # Mc TIRHUTA VOWEL SIGN E +114BA ; ID_Continue # Mn TIRHUTA VOWEL SIGN SHORT E +114BB..114BE ; ID_Continue # Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU +114BF..114C0 ; ID_Continue # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA +114C1 ; ID_Continue # Mc TIRHUTA SIGN VISARGA +114C2..114C3 ; ID_Continue # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA +114C4..114C5 ; ID_Continue # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG +114C7 ; ID_Continue # Lo TIRHUTA OM +114D0..114D9 ; ID_Continue # Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE +11580..115AE ; ID_Continue # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA +115AF..115B1 ; ID_Continue # Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II +115B2..115B5 ; ID_Continue # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR +115B8..115BB ; ID_Continue # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU +115BC..115BD ; ID_Continue # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA +115BE ; ID_Continue # Mc SIDDHAM SIGN VISARGA +115BF..115C0 ; ID_Continue # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA +115D8..115DB ; ID_Continue # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U +115DC..115DD ; ID_Continue # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU +11600..1162F ; ID_Continue # Lo [48] MODI LETTER A..MODI LETTER LLA +11630..11632 ; ID_Continue # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II +11633..1163A ; ID_Continue # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI +1163B..1163C ; ID_Continue # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU +1163D ; ID_Continue # Mn MODI SIGN ANUSVARA +1163E ; ID_Continue # Mc MODI SIGN VISARGA +1163F..11640 ; ID_Continue # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA +11644 ; ID_Continue # Lo MODI SIGN HUVA +11650..11659 ; ID_Continue # Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE +11680..116AA ; ID_Continue # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA +116AB ; ID_Continue # Mn TAKRI SIGN ANUSVARA +116AC ; ID_Continue # Mc TAKRI SIGN VISARGA +116AD ; ID_Continue # Mn TAKRI VOWEL SIGN AA +116AE..116AF ; ID_Continue # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II +116B0..116B5 ; ID_Continue # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU +116B6 ; ID_Continue # Mc TAKRI SIGN VIRAMA +116B7 ; ID_Continue # Mn TAKRI SIGN NUKTA +116B8 ; ID_Continue # Lo TAKRI LETTER ARCHAIC KHA +116C0..116C9 ; ID_Continue # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE +116D0..116E3 ; ID_Continue # Nd [20] MYANMAR PAO DIGIT ZERO..MYANMAR EASTERN PWO KAREN DIGIT NINE +11700..1171A ; ID_Continue # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA +1171D ; ID_Continue # Mn AHOM CONSONANT SIGN MEDIAL LA +1171E ; ID_Continue # Mc AHOM CONSONANT SIGN MEDIAL RA +1171F ; ID_Continue # Mn AHOM CONSONANT SIGN MEDIAL LIGATING RA +11720..11721 ; ID_Continue # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA +11722..11725 ; ID_Continue # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU +11726 ; ID_Continue # Mc AHOM VOWEL SIGN E +11727..1172B ; ID_Continue # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER +11730..11739 ; ID_Continue # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE +11740..11746 ; ID_Continue # Lo [7] AHOM LETTER CA..AHOM LETTER LLA +11800..1182B ; ID_Continue # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA +1182C..1182E ; ID_Continue # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II +1182F..11837 ; ID_Continue # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA +11838 ; ID_Continue # Mc DOGRA SIGN VISARGA +11839..1183A ; ID_Continue # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA +118A0..118DF ; ID_Continue # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO +118E0..118E9 ; ID_Continue # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE +118FF..11906 ; ID_Continue # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E +11909 ; ID_Continue # Lo DIVES AKURU LETTER O +1190C..11913 ; ID_Continue # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA +11915..11916 ; ID_Continue # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA +11918..1192F ; ID_Continue # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA +11930..11935 ; ID_Continue # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E +11937..11938 ; ID_Continue # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O +1193B..1193C ; ID_Continue # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU +1193D ; ID_Continue # Mc DIVES AKURU SIGN HALANTA +1193E ; ID_Continue # Mn DIVES AKURU VIRAMA +1193F ; ID_Continue # Lo DIVES AKURU PREFIXED NASAL SIGN +11940 ; ID_Continue # Mc DIVES AKURU MEDIAL YA +11941 ; ID_Continue # Lo DIVES AKURU INITIAL RA +11942 ; ID_Continue # Mc DIVES AKURU MEDIAL RA +11943 ; ID_Continue # Mn DIVES AKURU SIGN NUKTA +11950..11959 ; ID_Continue # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE +119A0..119A7 ; ID_Continue # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR +119AA..119D0 ; ID_Continue # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA +119D1..119D3 ; ID_Continue # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II +119D4..119D7 ; ID_Continue # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR +119DA..119DB ; ID_Continue # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI +119DC..119DF ; ID_Continue # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA +119E0 ; ID_Continue # Mn NANDINAGARI SIGN VIRAMA +119E1 ; ID_Continue # Lo NANDINAGARI SIGN AVAGRAHA +119E3 ; ID_Continue # Lo NANDINAGARI HEADSTROKE +119E4 ; ID_Continue # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E +11A00 ; ID_Continue # Lo ZANABAZAR SQUARE LETTER A +11A01..11A0A ; ID_Continue # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK +11A0B..11A32 ; ID_Continue # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA +11A33..11A38 ; ID_Continue # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA +11A39 ; ID_Continue # Mc ZANABAZAR SQUARE SIGN VISARGA +11A3A ; ID_Continue # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA +11A3B..11A3E ; ID_Continue # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA +11A47 ; ID_Continue # Mn ZANABAZAR SQUARE SUBJOINER +11A50 ; ID_Continue # Lo SOYOMBO LETTER A +11A51..11A56 ; ID_Continue # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE +11A57..11A58 ; ID_Continue # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU +11A59..11A5B ; ID_Continue # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK +11A5C..11A89 ; ID_Continue # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA +11A8A..11A96 ; ID_Continue # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA +11A97 ; ID_Continue # Mc SOYOMBO SIGN VISARGA +11A98..11A99 ; ID_Continue # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER +11A9D ; ID_Continue # Lo SOYOMBO MARK PLUTA +11AB0..11AF8 ; ID_Continue # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11B60 ; ID_Continue # Mn SHARADA VOWEL SIGN OE +11B61 ; ID_Continue # Mc SHARADA VOWEL SIGN OOE +11B62..11B64 ; ID_Continue # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B65 ; ID_Continue # Mc SHARADA VOWEL SIGN SHORT O +11B66 ; ID_Continue # Mn SHARADA VOWEL SIGN CANDRA E +11B67 ; ID_Continue # Mc SHARADA VOWEL SIGN CANDRA O +11BC0..11BE0 ; ID_Continue # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO +11BF0..11BF9 ; ID_Continue # Nd [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE +11C00..11C08 ; ID_Continue # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L +11C0A..11C2E ; ID_Continue # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA +11C2F ; ID_Continue # Mc BHAIKSUKI VOWEL SIGN AA +11C30..11C36 ; ID_Continue # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L +11C38..11C3D ; ID_Continue # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA +11C3E ; ID_Continue # Mc BHAIKSUKI SIGN VISARGA +11C3F ; ID_Continue # Mn BHAIKSUKI SIGN VIRAMA +11C40 ; ID_Continue # Lo BHAIKSUKI SIGN AVAGRAHA +11C50..11C59 ; ID_Continue # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE +11C72..11C8F ; ID_Continue # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A +11C92..11CA7 ; ID_Continue # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA +11CA9 ; ID_Continue # Mc MARCHEN SUBJOINED LETTER YA +11CAA..11CB0 ; ID_Continue # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA +11CB1 ; ID_Continue # Mc MARCHEN VOWEL SIGN I +11CB2..11CB3 ; ID_Continue # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E +11CB4 ; ID_Continue # Mc MARCHEN VOWEL SIGN O +11CB5..11CB6 ; ID_Continue # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU +11D00..11D06 ; ID_Continue # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E +11D08..11D09 ; ID_Continue # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O +11D0B..11D30 ; ID_Continue # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA +11D31..11D36 ; ID_Continue # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R +11D3A ; ID_Continue # Mn MASARAM GONDI VOWEL SIGN E +11D3C..11D3D ; ID_Continue # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O +11D3F..11D45 ; ID_Continue # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA +11D46 ; ID_Continue # Lo MASARAM GONDI REPHA +11D47 ; ID_Continue # Mn MASARAM GONDI RA-KARA +11D50..11D59 ; ID_Continue # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE +11D60..11D65 ; ID_Continue # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU +11D67..11D68 ; ID_Continue # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI +11D6A..11D89 ; ID_Continue # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA +11D8A..11D8E ; ID_Continue # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU +11D90..11D91 ; ID_Continue # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI +11D93..11D94 ; ID_Continue # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU +11D95 ; ID_Continue # Mn GUNJALA GONDI SIGN ANUSVARA +11D96 ; ID_Continue # Mc GUNJALA GONDI SIGN VISARGA +11D97 ; ID_Continue # Mn GUNJALA GONDI VIRAMA +11D98 ; ID_Continue # Lo GUNJALA GONDI OM +11DA0..11DA9 ; ID_Continue # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE +11DB0..11DD8 ; ID_Continue # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; ID_Continue # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; ID_Continue # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA +11DE0..11DE9 ; ID_Continue # Nd [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE +11EE0..11EF2 ; ID_Continue # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA +11EF3..11EF4 ; ID_Continue # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U +11EF5..11EF6 ; ID_Continue # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O +11F00..11F01 ; ID_Continue # Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA +11F02 ; ID_Continue # Lo KAWI SIGN REPHA +11F03 ; ID_Continue # Mc KAWI SIGN VISARGA +11F04..11F10 ; ID_Continue # Lo [13] KAWI LETTER A..KAWI LETTER O +11F12..11F33 ; ID_Continue # Lo [34] KAWI LETTER KA..KAWI LETTER JNYA +11F34..11F35 ; ID_Continue # Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA +11F36..11F3A ; ID_Continue # Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R +11F3E..11F3F ; ID_Continue # Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI +11F40 ; ID_Continue # Mn KAWI VOWEL SIGN EU +11F41 ; ID_Continue # Mc KAWI SIGN KILLER +11F42 ; ID_Continue # Mn KAWI CONJOINER +11F50..11F59 ; ID_Continue # Nd [10] KAWI DIGIT ZERO..KAWI DIGIT NINE +11F5A ; ID_Continue # Mn KAWI SIGN NUKTA +11FB0 ; ID_Continue # Lo LISU LETTER YHA +12000..12399 ; ID_Continue # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U +12400..1246E ; ID_Continue # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM +12480..12543 ; ID_Continue # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; ID_Continue # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 +13000..1342F ; ID_Continue # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D +13440 ; ID_Continue # Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY +13441..13446 ; ID_Continue # Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN +13447..13455 ; ID_Continue # Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED +13460..143FA ; ID_Continue # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA +14400..14646 ; ID_Continue # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 +16100..1611D ; ID_Continue # Lo [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA +1611E..16129 ; ID_Continue # Mn [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK +1612A..1612C ; ID_Continue # Mc [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA +1612D..1612F ; ID_Continue # Mn [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA +16130..16139 ; ID_Continue # Nd [10] GURUNG KHEMA DIGIT ZERO..GURUNG KHEMA DIGIT NINE +16800..16A38 ; ID_Continue # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ +16A40..16A5E ; ID_Continue # Lo [31] MRO LETTER TA..MRO LETTER TEK +16A60..16A69 ; ID_Continue # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE +16A70..16ABE ; ID_Continue # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AC0..16AC9 ; ID_Continue # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE +16AD0..16AED ; ID_Continue # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I +16AF0..16AF4 ; ID_Continue # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE +16B00..16B2F ; ID_Continue # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU +16B30..16B36 ; ID_Continue # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM +16B40..16B43 ; ID_Continue # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM +16B50..16B59 ; ID_Continue # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE +16B63..16B77 ; ID_Continue # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS +16B7D..16B8F ; ID_Continue # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ +16D40..16D42 ; ID_Continue # Lm [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA +16D43..16D6A ; ID_Continue # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU +16D6B..16D6C ; ID_Continue # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT +16D70..16D79 ; ID_Continue # Nd [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE +16E40..16E7F ; ID_Continue # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; ID_Continue # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; ID_Continue # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY +16F00..16F4A ; ID_Continue # Lo [75] MIAO LETTER PA..MIAO LETTER RTE +16F4F ; ID_Continue # Mn MIAO SIGN CONSONANT MODIFIER BAR +16F50 ; ID_Continue # Lo MIAO LETTER NASALIZATION +16F51..16F87 ; ID_Continue # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI +16F8F..16F92 ; ID_Continue # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW +16F93..16F9F ; ID_Continue # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 +16FE0..16FE1 ; ID_Continue # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK +16FE3 ; ID_Continue # Lm OLD CHINESE ITERATION MARK +16FE4 ; ID_Continue # Mn KHITAN SMALL SCRIPT FILLER +16FF0..16FF1 ; ID_Continue # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY +16FF2..16FF3 ; ID_Continue # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; ID_Continue # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; ID_Continue # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; ID_Continue # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; ID_Continue # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 +1AFF0..1AFF3 ; ID_Continue # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; ID_Continue # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; ID_Continue # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B000..1B122 ; ID_Continue # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU +1B132 ; ID_Continue # Lo HIRAGANA LETTER SMALL KO +1B150..1B152 ; ID_Continue # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO +1B155 ; ID_Continue # Lo KATAKANA LETTER SMALL KO +1B164..1B167 ; ID_Continue # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N +1B170..1B2FB ; ID_Continue # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB +1BC00..1BC6A ; ID_Continue # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M +1BC70..1BC7C ; ID_Continue # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK +1BC80..1BC88 ; ID_Continue # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL +1BC90..1BC99 ; ID_Continue # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW +1BC9D..1BC9E ; ID_Continue # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1CCF0..1CCF9 ; ID_Continue # Nd [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE +1CF00..1CF2D ; ID_Continue # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; ID_Continue # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG +1D165..1D166 ; ID_Continue # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM +1D167..1D169 ; ID_Continue # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 +1D16D..1D172 ; ID_Continue # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 +1D17B..1D182 ; ID_Continue # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE +1D185..1D18B ; ID_Continue # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE +1D1AA..1D1AD ; ID_Continue # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO +1D242..1D244 ; ID_Continue # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME +1D400..1D454 ; ID_Continue # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G +1D456..1D49C ; ID_Continue # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A +1D49E..1D49F ; ID_Continue # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; ID_Continue # L& MATHEMATICAL SCRIPT CAPITAL G +1D4A5..1D4A6 ; ID_Continue # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K +1D4A9..1D4AC ; ID_Continue # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q +1D4AE..1D4B9 ; ID_Continue # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D +1D4BB ; ID_Continue # L& MATHEMATICAL SCRIPT SMALL F +1D4BD..1D4C3 ; ID_Continue # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N +1D4C5..1D505 ; ID_Continue # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B +1D507..1D50A ; ID_Continue # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G +1D50D..1D514 ; ID_Continue # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q +1D516..1D51C ; ID_Continue # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y +1D51E..1D539 ; ID_Continue # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B..1D53E ; ID_Continue # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540..1D544 ; ID_Continue # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; ID_Continue # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A..1D550 ; ID_Continue # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D552..1D6A5 ; ID_Continue # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J +1D6A8..1D6C0 ; ID_Continue # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA +1D6C2..1D6DA ; ID_Continue # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA +1D6DC..1D6FA ; ID_Continue # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA +1D6FC..1D714 ; ID_Continue # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA +1D716..1D734 ; ID_Continue # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D736..1D74E ; ID_Continue # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D750..1D76E ; ID_Continue # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D770..1D788 ; ID_Continue # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D78A..1D7A8 ; ID_Continue # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7AA..1D7C2 ; ID_Continue # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C4..1D7CB ; ID_Continue # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1D7CE..1D7FF ; ID_Continue # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE +1DA00..1DA36 ; ID_Continue # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN +1DA3B..1DA6C ; ID_Continue # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT +1DA75 ; ID_Continue # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS +1DA84 ; ID_Continue # Mn SIGNWRITING LOCATION HEAD NECK +1DA9B..1DA9F ; ID_Continue # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 +1DAA1..1DAAF ; ID_Continue # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 +1DF00..1DF09 ; ID_Continue # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; ID_Continue # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; ID_Continue # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL +1DF25..1DF2A ; ID_Continue # L& [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK +1E000..1E006 ; ID_Continue # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE +1E008..1E018 ; ID_Continue # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU +1E01B..1E021 ; ID_Continue # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI +1E023..1E024 ; ID_Continue # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS +1E026..1E02A ; ID_Continue # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA +1E030..1E06D ; ID_Continue # Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE +1E08F ; ID_Continue # Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +1E100..1E12C ; ID_Continue # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W +1E130..1E136 ; ID_Continue # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E137..1E13D ; ID_Continue # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER +1E140..1E149 ; ID_Continue # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE +1E14E ; ID_Continue # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E290..1E2AD ; ID_Continue # Lo [30] TOTO LETTER PA..TOTO LETTER A +1E2AE ; ID_Continue # Mn TOTO SIGN RISING TONE +1E2C0..1E2EB ; ID_Continue # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH +1E2EC..1E2EF ; ID_Continue # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI +1E2F0..1E2F9 ; ID_Continue # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE +1E4D0..1E4EA ; ID_Continue # Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL +1E4EB ; ID_Continue # Lm NAG MUNDARI SIGN OJOD +1E4EC..1E4EF ; ID_Continue # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH +1E4F0..1E4F9 ; ID_Continue # Nd [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE +1E5D0..1E5ED ; ID_Continue # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG +1E5EE..1E5EF ; ID_Continue # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR +1E5F0 ; ID_Continue # Lo OL ONAL SIGN HODDOND +1E5F1..1E5FA ; ID_Continue # Nd [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE +1E6C0..1E6DE ; ID_Continue # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; ID_Continue # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E3 ; ID_Continue # Mn TAI YO SIGN UE +1E6E4..1E6E5 ; ID_Continue # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E6 ; ID_Continue # Mn TAI YO SIGN AU +1E6E7..1E6ED ; ID_Continue # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6EE..1E6EF ; ID_Continue # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F0..1E6F4 ; ID_Continue # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6F5 ; ID_Continue # Mn TAI YO SIGN OM +1E6FE ; ID_Continue # Lo TAI YO SYMBOL MUEANG +1E6FF ; ID_Continue # Lm TAI YO XAM LAI +1E7E0..1E7E6 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; ID_Continue # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; ID_Continue # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE +1E800..1E8C4 ; ID_Continue # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON +1E8D0..1E8D6 ; ID_Continue # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS +1E900..1E943 ; ID_Continue # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA +1E944..1E94A ; ID_Continue # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA +1E94B ; ID_Continue # Lm ADLAM NASALIZATION MARK +1E950..1E959 ; ID_Continue # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE +1EE00..1EE03 ; ID_Continue # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL +1EE05..1EE1F ; ID_Continue # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF +1EE21..1EE22 ; ID_Continue # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM +1EE24 ; ID_Continue # Lo ARABIC MATHEMATICAL INITIAL HEH +1EE27 ; ID_Continue # Lo ARABIC MATHEMATICAL INITIAL HAH +1EE29..1EE32 ; ID_Continue # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF +1EE34..1EE37 ; ID_Continue # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH +1EE39 ; ID_Continue # Lo ARABIC MATHEMATICAL INITIAL DAD +1EE3B ; ID_Continue # Lo ARABIC MATHEMATICAL INITIAL GHAIN +1EE42 ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED JEEM +1EE47 ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED HAH +1EE49 ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED YEH +1EE4B ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED LAM +1EE4D..1EE4F ; ID_Continue # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN +1EE51..1EE52 ; ID_Continue # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF +1EE54 ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED SHEEN +1EE57 ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED KHAH +1EE59 ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED DAD +1EE5B ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED GHAIN +1EE5D ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON +1EE5F ; ID_Continue # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF +1EE61..1EE62 ; ID_Continue # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM +1EE64 ; ID_Continue # Lo ARABIC MATHEMATICAL STRETCHED HEH +1EE67..1EE6A ; ID_Continue # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF +1EE6C..1EE72 ; ID_Continue # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF +1EE74..1EE77 ; ID_Continue # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH +1EE79..1EE7C ; ID_Continue # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH +1EE7E ; ID_Continue # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH +1EE80..1EE89 ; ID_Continue # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH +1EE8B..1EE9B ; ID_Continue # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN +1EEA1..1EEA3 ; ID_Continue # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL +1EEA5..1EEA9 ; ID_Continue # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH +1EEAB..1EEBB ; ID_Continue # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN +1FBF0..1FBF9 ; ID_Continue # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE +20000..2A6DF ; ID_Continue # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B81D ; ID_Continue # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; ID_Continue # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD +2CEB0..2EBE0 ; ID_Continue # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2EBF0..2EE5D ; ID_Continue # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D +2F800..2FA1D ; ID_Continue # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D +30000..3134A ; ID_Continue # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A +31350..33479 ; ID_Continue # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 +E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 + +# Total code points: 149240 + +# ================================================ + +# Derived Property: XID_Start +# ID_Start modified for closure under NFKx +# Modified as described in UAX #15 +# NOTE: Does NOT remove the non-NFKx characters. +# Merely ensures that if isIdentifer(string) then isIdentifier(NFKx(string)) +# NOTE: See UAX #31 for more information + +0041..005A ; XID_Start # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z +0061..007A ; XID_Start # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z +00AA ; XID_Start # Lo FEMININE ORDINAL INDICATOR +00B5 ; XID_Start # L& MICRO SIGN +00BA ; XID_Start # Lo MASCULINE ORDINAL INDICATOR +00C0..00D6 ; XID_Start # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D8..00F6 ; XID_Start # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS +00F8..01BA ; XID_Start # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL +01BB ; XID_Start # Lo LATIN LETTER TWO WITH STROKE +01BC..01BF ; XID_Start # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN +01C0..01C3 ; XID_Start # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK +01C4..0293 ; XID_Start # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL +0294..0295 ; XID_Start # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; XID_Start # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +02B0..02C1 ; XID_Start # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP +02C6..02D1 ; XID_Start # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON +02E0..02E4 ; XID_Start # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +02EC ; XID_Start # Lm MODIFIER LETTER VOICING +02EE ; XID_Start # Lm MODIFIER LETTER DOUBLE APOSTROPHE +0370..0373 ; XID_Start # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI +0374 ; XID_Start # Lm GREEK NUMERAL SIGN +0376..0377 ; XID_Start # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +037B..037D ; XID_Start # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +037F ; XID_Start # L& GREEK CAPITAL LETTER YOT +0386 ; XID_Start # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0388..038A ; XID_Start # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; XID_Start # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..03A1 ; XID_Start # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO +03A3..03F5 ; XID_Start # L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL +03F7..0481 ; XID_Start # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA +048A..052F ; XID_Start # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER +0531..0556 ; XID_Start # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH +0559 ; XID_Start # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING +0560..0588 ; XID_Start # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE +05D0..05EA ; XID_Start # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV +05EF..05F2 ; XID_Start # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD +0620..063F ; XID_Start # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE +0640 ; XID_Start # Lm ARABIC TATWEEL +0641..064A ; XID_Start # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH +066E..066F ; XID_Start # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF +0671..06D3 ; XID_Start # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +06D5 ; XID_Start # Lo ARABIC LETTER AE +06E5..06E6 ; XID_Start # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH +06EE..06EF ; XID_Start # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V +06FA..06FC ; XID_Start # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW +06FF ; XID_Start # Lo ARABIC LETTER HEH WITH INVERTED V +0710 ; XID_Start # Lo SYRIAC LETTER ALAPH +0712..072F ; XID_Start # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH +074D..07A5 ; XID_Start # Lo [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU +07B1 ; XID_Start # Lo THAANA LETTER NAA +07CA..07EA ; XID_Start # Lo [33] NKO LETTER A..NKO LETTER JONA RA +07F4..07F5 ; XID_Start # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE +07FA ; XID_Start # Lm NKO LAJANYALAN +0800..0815 ; XID_Start # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF +081A ; XID_Start # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT +0824 ; XID_Start # Lm SAMARITAN MODIFIER LETTER SHORT A +0828 ; XID_Start # Lm SAMARITAN MODIFIER LETTER I +0840..0858 ; XID_Start # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN +0860..086A ; XID_Start # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA +0870..0887 ; XID_Start # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088F ; XID_Start # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE +08A0..08C8 ; XID_Start # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; XID_Start # Lm ARABIC SMALL FARSI YEH +0904..0939 ; XID_Start # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA +093D ; XID_Start # Lo DEVANAGARI SIGN AVAGRAHA +0950 ; XID_Start # Lo DEVANAGARI OM +0958..0961 ; XID_Start # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL +0971 ; XID_Start # Lm DEVANAGARI SIGN HIGH SPACING DOT +0972..0980 ; XID_Start # Lo [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI +0985..098C ; XID_Start # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L +098F..0990 ; XID_Start # Lo [2] BENGALI LETTER E..BENGALI LETTER AI +0993..09A8 ; XID_Start # Lo [22] BENGALI LETTER O..BENGALI LETTER NA +09AA..09B0 ; XID_Start # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA +09B2 ; XID_Start # Lo BENGALI LETTER LA +09B6..09B9 ; XID_Start # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA +09BD ; XID_Start # Lo BENGALI SIGN AVAGRAHA +09CE ; XID_Start # Lo BENGALI LETTER KHANDA TA +09DC..09DD ; XID_Start # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF..09E1 ; XID_Start # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL +09F0..09F1 ; XID_Start # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL +09FC ; XID_Start # Lo BENGALI LETTER VEDIC ANUSVARA +0A05..0A0A ; XID_Start # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU +0A0F..0A10 ; XID_Start # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI +0A13..0A28 ; XID_Start # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA +0A2A..0A30 ; XID_Start # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA +0A32..0A33 ; XID_Start # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA +0A35..0A36 ; XID_Start # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA +0A38..0A39 ; XID_Start # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA +0A59..0A5C ; XID_Start # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA +0A5E ; XID_Start # Lo GURMUKHI LETTER FA +0A72..0A74 ; XID_Start # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR +0A85..0A8D ; XID_Start # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E +0A8F..0A91 ; XID_Start # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O +0A93..0AA8 ; XID_Start # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA +0AAA..0AB0 ; XID_Start # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA +0AB2..0AB3 ; XID_Start # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA +0AB5..0AB9 ; XID_Start # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA +0ABD ; XID_Start # Lo GUJARATI SIGN AVAGRAHA +0AD0 ; XID_Start # Lo GUJARATI OM +0AE0..0AE1 ; XID_Start # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL +0AF9 ; XID_Start # Lo GUJARATI LETTER ZHA +0B05..0B0C ; XID_Start # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L +0B0F..0B10 ; XID_Start # Lo [2] ORIYA LETTER E..ORIYA LETTER AI +0B13..0B28 ; XID_Start # Lo [22] ORIYA LETTER O..ORIYA LETTER NA +0B2A..0B30 ; XID_Start # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA +0B32..0B33 ; XID_Start # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA +0B35..0B39 ; XID_Start # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA +0B3D ; XID_Start # Lo ORIYA SIGN AVAGRAHA +0B5C..0B5D ; XID_Start # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0B5F..0B61 ; XID_Start # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL +0B71 ; XID_Start # Lo ORIYA LETTER WA +0B83 ; XID_Start # Lo TAMIL SIGN VISARGA +0B85..0B8A ; XID_Start # Lo [6] TAMIL LETTER A..TAMIL LETTER UU +0B8E..0B90 ; XID_Start # Lo [3] TAMIL LETTER E..TAMIL LETTER AI +0B92..0B95 ; XID_Start # Lo [4] TAMIL LETTER O..TAMIL LETTER KA +0B99..0B9A ; XID_Start # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA +0B9C ; XID_Start # Lo TAMIL LETTER JA +0B9E..0B9F ; XID_Start # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA +0BA3..0BA4 ; XID_Start # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA +0BA8..0BAA ; XID_Start # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA +0BAE..0BB9 ; XID_Start # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA +0BD0 ; XID_Start # Lo TAMIL OM +0C05..0C0C ; XID_Start # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L +0C0E..0C10 ; XID_Start # Lo [3] TELUGU LETTER E..TELUGU LETTER AI +0C12..0C28 ; XID_Start # Lo [23] TELUGU LETTER O..TELUGU LETTER NA +0C2A..0C39 ; XID_Start # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA +0C3D ; XID_Start # Lo TELUGU SIGN AVAGRAHA +0C58..0C5A ; XID_Start # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5C..0C5D ; XID_Start # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU +0C60..0C61 ; XID_Start # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL +0C80 ; XID_Start # Lo KANNADA SIGN SPACING CANDRABINDU +0C85..0C8C ; XID_Start # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L +0C8E..0C90 ; XID_Start # Lo [3] KANNADA LETTER E..KANNADA LETTER AI +0C92..0CA8 ; XID_Start # Lo [23] KANNADA LETTER O..KANNADA LETTER NA +0CAA..0CB3 ; XID_Start # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA +0CB5..0CB9 ; XID_Start # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA +0CBD ; XID_Start # Lo KANNADA SIGN AVAGRAHA +0CDC..0CDE ; XID_Start # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA +0CE0..0CE1 ; XID_Start # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL +0CF1..0CF2 ; XID_Start # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA +0D04..0D0C ; XID_Start # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L +0D0E..0D10 ; XID_Start # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI +0D12..0D3A ; XID_Start # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA +0D3D ; XID_Start # Lo MALAYALAM SIGN AVAGRAHA +0D4E ; XID_Start # Lo MALAYALAM LETTER DOT REPH +0D54..0D56 ; XID_Start # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL +0D5F..0D61 ; XID_Start # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL +0D7A..0D7F ; XID_Start # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K +0D85..0D96 ; XID_Start # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA +0D9A..0DB1 ; XID_Start # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA +0DB3..0DBB ; XID_Start # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA +0DBD ; XID_Start # Lo SINHALA LETTER DANTAJA LAYANNA +0DC0..0DC6 ; XID_Start # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA +0E01..0E30 ; XID_Start # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A +0E32 ; XID_Start # Lo THAI CHARACTER SARA AA +0E40..0E45 ; XID_Start # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO +0E46 ; XID_Start # Lm THAI CHARACTER MAIYAMOK +0E81..0E82 ; XID_Start # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG +0E84 ; XID_Start # Lo LAO LETTER KHO TAM +0E86..0E8A ; XID_Start # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM +0E8C..0EA3 ; XID_Start # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING +0EA5 ; XID_Start # Lo LAO LETTER LO LOOT +0EA7..0EB0 ; XID_Start # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A +0EB2 ; XID_Start # Lo LAO VOWEL SIGN AA +0EBD ; XID_Start # Lo LAO SEMIVOWEL SIGN NYO +0EC0..0EC4 ; XID_Start # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI +0EC6 ; XID_Start # Lm LAO KO LA +0EDC..0EDF ; XID_Start # Lo [4] LAO HO NO..LAO LETTER KHMU NYO +0F00 ; XID_Start # Lo TIBETAN SYLLABLE OM +0F40..0F47 ; XID_Start # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA +0F49..0F6C ; XID_Start # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA +0F88..0F8C ; XID_Start # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN +1000..102A ; XID_Start # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU +103F ; XID_Start # Lo MYANMAR LETTER GREAT SA +1050..1055 ; XID_Start # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL +105A..105D ; XID_Start # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE +1061 ; XID_Start # Lo MYANMAR LETTER SGAW KAREN SHA +1065..1066 ; XID_Start # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA +106E..1070 ; XID_Start # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA +1075..1081 ; XID_Start # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA +108E ; XID_Start # Lo MYANMAR LETTER RUMAI PALAUNG FA +10A0..10C5 ; XID_Start # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE +10C7 ; XID_Start # L& GEORGIAN CAPITAL LETTER YN +10CD ; XID_Start # L& GEORGIAN CAPITAL LETTER AEN +10D0..10FA ; XID_Start # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN +10FC ; XID_Start # Lm MODIFIER LETTER GEORGIAN NAR +10FD..10FF ; XID_Start # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN +1100..1248 ; XID_Start # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA +124A..124D ; XID_Start # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE +1250..1256 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO +1258 ; XID_Start # Lo ETHIOPIC SYLLABLE QHWA +125A..125D ; XID_Start # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE +1260..1288 ; XID_Start # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA +128A..128D ; XID_Start # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE +1290..12B0 ; XID_Start # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA +12B2..12B5 ; XID_Start # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE +12B8..12BE ; XID_Start # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO +12C0 ; XID_Start # Lo ETHIOPIC SYLLABLE KXWA +12C2..12C5 ; XID_Start # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE +12C8..12D6 ; XID_Start # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O +12D8..1310 ; XID_Start # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA +1312..1315 ; XID_Start # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE +1318..135A ; XID_Start # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA +1380..138F ; XID_Start # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE +13A0..13F5 ; XID_Start # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV +13F8..13FD ; XID_Start # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV +1401..166C ; XID_Start # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA +166F..167F ; XID_Start # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W +1681..169A ; XID_Start # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH +16A0..16EA ; XID_Start # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X +16EE..16F0 ; XID_Start # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL +16F1..16F8 ; XID_Start # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC +1700..1711 ; XID_Start # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA +171F..1731 ; XID_Start # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA +1740..1751 ; XID_Start # Lo [18] BUHID LETTER A..BUHID LETTER HA +1760..176C ; XID_Start # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA +176E..1770 ; XID_Start # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA +1780..17B3 ; XID_Start # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU +17D7 ; XID_Start # Lm KHMER SIGN LEK TOO +17DC ; XID_Start # Lo KHMER SIGN AVAKRAHASANYA +1820..1842 ; XID_Start # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI +1843 ; XID_Start # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN +1844..1878 ; XID_Start # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS +1880..1884 ; XID_Start # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA +1885..1886 ; XID_Start # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA +1887..18A8 ; XID_Start # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA +18AA ; XID_Start # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA +18B0..18F5 ; XID_Start # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S +1900..191E ; XID_Start # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA +1950..196D ; XID_Start # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI +1970..1974 ; XID_Start # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 +1980..19AB ; XID_Start # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA +19B0..19C9 ; XID_Start # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2 +1A00..1A16 ; XID_Start # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA +1A20..1A54 ; XID_Start # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA +1AA7 ; XID_Start # Lm TAI THAM SIGN MAI YAMOK +1B05..1B33 ; XID_Start # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA +1B45..1B4C ; XID_Start # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA +1B83..1BA0 ; XID_Start # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA +1BAE..1BAF ; XID_Start # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA +1BBA..1BE5 ; XID_Start # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U +1C00..1C23 ; XID_Start # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A +1C4D..1C4F ; XID_Start # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA +1C5A..1C77 ; XID_Start # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH +1C78..1C7D ; XID_Start # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD +1C80..1C8A ; XID_Start # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE +1C90..1CBA ; XID_Start # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN +1CBD..1CBF ; XID_Start # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN +1CE9..1CEC ; XID_Start # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL +1CEE..1CF3 ; XID_Start # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA +1CF5..1CF6 ; XID_Start # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA +1CFA ; XID_Start # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA +1D00..1D2B ; XID_Start # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL +1D2C..1D6A ; XID_Start # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI +1D6B..1D77 ; XID_Start # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G +1D78 ; XID_Start # Lm MODIFIER LETTER CYRILLIC EN +1D79..1D9A ; XID_Start # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK +1D9B..1DBF ; XID_Start # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA +1E00..1F15 ; XID_Start # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18..1F1D ; XID_Start # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F45 ; XID_Start # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48..1F4D ; XID_Start # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; XID_Start # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59 ; XID_Start # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; XID_Start # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; XID_Start # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F..1F7D ; XID_Start # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1FB4 ; XID_Start # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FBC ; XID_Start # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBE ; XID_Start # L& GREEK PROSGEGRAMMENI +1FC2..1FC4 ; XID_Start # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FCC ; XID_Start # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FD0..1FD3 ; XID_Start # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FDB ; XID_Start # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA +1FE0..1FEC ; XID_Start # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FF2..1FF4 ; XID_Start # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FFC ; XID_Start # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +2071 ; XID_Start # Lm SUPERSCRIPT LATIN SMALL LETTER I +207F ; XID_Start # Lm SUPERSCRIPT LATIN SMALL LETTER N +2090..209C ; XID_Start # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T +2102 ; XID_Start # L& DOUBLE-STRUCK CAPITAL C +2107 ; XID_Start # L& EULER CONSTANT +210A..2113 ; XID_Start # L& [10] SCRIPT SMALL G..SCRIPT SMALL L +2115 ; XID_Start # L& DOUBLE-STRUCK CAPITAL N +2118 ; XID_Start # Sm SCRIPT CAPITAL P +2119..211D ; XID_Start # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R +2124 ; XID_Start # L& DOUBLE-STRUCK CAPITAL Z +2126 ; XID_Start # L& OHM SIGN +2128 ; XID_Start # L& BLACK-LETTER CAPITAL Z +212A..212D ; XID_Start # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C +212E ; XID_Start # So ESTIMATED SYMBOL +212F..2134 ; XID_Start # L& [6] SCRIPT SMALL E..SCRIPT SMALL O +2135..2138 ; XID_Start # Lo [4] ALEF SYMBOL..DALET SYMBOL +2139 ; XID_Start # L& INFORMATION SOURCE +213C..213F ; XID_Start # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI +2145..2149 ; XID_Start # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J +214E ; XID_Start # L& TURNED SMALL F +2160..2182 ; XID_Start # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND +2183..2184 ; XID_Start # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C +2185..2188 ; XID_Start # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND +2C00..2C7B ; XID_Start # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E +2C7C..2C7D ; XID_Start # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V +2C7E..2CE4 ; XID_Start # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI +2CEB..2CEE ; XID_Start # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA +2CF2..2CF3 ; XID_Start # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI +2D00..2D25 ; XID_Start # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE +2D27 ; XID_Start # L& GEORGIAN SMALL LETTER YN +2D2D ; XID_Start # L& GEORGIAN SMALL LETTER AEN +2D30..2D67 ; XID_Start # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO +2D6F ; XID_Start # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2D80..2D96 ; XID_Start # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE +2DA0..2DA6 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO +2DA8..2DAE ; XID_Start # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO +2DB0..2DB6 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO +2DB8..2DBE ; XID_Start # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO +2DC0..2DC6 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO +2DC8..2DCE ; XID_Start # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO +2DD0..2DD6 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO +2DD8..2DDE ; XID_Start # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO +3005 ; XID_Start # Lm IDEOGRAPHIC ITERATION MARK +3006 ; XID_Start # Lo IDEOGRAPHIC CLOSING MARK +3007 ; XID_Start # Nl IDEOGRAPHIC NUMBER ZERO +3021..3029 ; XID_Start # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE +3031..3035 ; XID_Start # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF +3038..303A ; XID_Start # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY +303B ; XID_Start # Lm VERTICAL IDEOGRAPHIC ITERATION MARK +303C ; XID_Start # Lo MASU MARK +3041..3096 ; XID_Start # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE +309D..309E ; XID_Start # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK +309F ; XID_Start # Lo HIRAGANA DIGRAPH YORI +30A1..30FA ; XID_Start # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO +30FC..30FE ; XID_Start # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK +30FF ; XID_Start # Lo KATAKANA DIGRAPH KOTO +3105..312F ; XID_Start # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN +3131..318E ; XID_Start # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE +31A0..31BF ; XID_Start # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH +31F0..31FF ; XID_Start # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO +3400..4DBF ; XID_Start # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF +4E00..A014 ; XID_Start # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E +A015 ; XID_Start # Lm YI SYLLABLE WU +A016..A48C ; XID_Start # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR +A4D0..A4F7 ; XID_Start # Lo [40] LISU LETTER BA..LISU LETTER OE +A4F8..A4FD ; XID_Start # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU +A500..A60B ; XID_Start # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG +A60C ; XID_Start # Lm VAI SYLLABLE LENGTHENER +A610..A61F ; XID_Start # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG +A62A..A62B ; XID_Start # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO +A640..A66D ; XID_Start # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O +A66E ; XID_Start # Lo CYRILLIC LETTER MULTIOCULAR O +A67F ; XID_Start # Lm CYRILLIC PAYEROK +A680..A69B ; XID_Start # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O +A69C..A69D ; XID_Start # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN +A6A0..A6E5 ; XID_Start # Lo [70] BAMUM LETTER A..BAMUM LETTER KI +A6E6..A6EF ; XID_Start # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM +A717..A71F ; XID_Start # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK +A722..A76F ; XID_Start # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON +A770 ; XID_Start # Lm MODIFIER LETTER US +A771..A787 ; XID_Start # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T +A788 ; XID_Start # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT +A78B..A78E ; XID_Start # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT +A78F ; XID_Start # Lo LATIN LETTER SINOLOGICAL DOT +A790..A7DC ; XID_Start # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; XID_Start # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q +A7F5..A7F6 ; XID_Start # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H +A7F7 ; XID_Start # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I +A7F8..A7F9 ; XID_Start # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE +A7FA ; XID_Start # L& LATIN LETTER SMALL CAPITAL TURNED M +A7FB..A801 ; XID_Start # Lo [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I +A803..A805 ; XID_Start # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O +A807..A80A ; XID_Start # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO +A80C..A822 ; XID_Start # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO +A840..A873 ; XID_Start # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU +A882..A8B3 ; XID_Start # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA +A8F2..A8F7 ; XID_Start # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA +A8FB ; XID_Start # Lo DEVANAGARI HEADSTROKE +A8FD..A8FE ; XID_Start # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY +A90A..A925 ; XID_Start # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO +A930..A946 ; XID_Start # Lo [23] REJANG LETTER KA..REJANG LETTER A +A960..A97C ; XID_Start # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH +A984..A9B2 ; XID_Start # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA +A9CF ; XID_Start # Lm JAVANESE PANGRANGKEP +A9E0..A9E4 ; XID_Start # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA +A9E6 ; XID_Start # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION +A9E7..A9EF ; XID_Start # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA +A9FA..A9FE ; XID_Start # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA +AA00..AA28 ; XID_Start # Lo [41] CHAM LETTER A..CHAM LETTER HA +AA40..AA42 ; XID_Start # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG +AA44..AA4B ; XID_Start # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS +AA60..AA6F ; XID_Start # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA +AA70 ; XID_Start # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION +AA71..AA76 ; XID_Start # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM +AA7A ; XID_Start # Lo MYANMAR LETTER AITON RA +AA7E..AAAF ; XID_Start # Lo [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O +AAB1 ; XID_Start # Lo TAI VIET VOWEL AA +AAB5..AAB6 ; XID_Start # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O +AAB9..AABD ; XID_Start # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN +AAC0 ; XID_Start # Lo TAI VIET TONE MAI NUENG +AAC2 ; XID_Start # Lo TAI VIET TONE MAI SONG +AADB..AADC ; XID_Start # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG +AADD ; XID_Start # Lm TAI VIET SYMBOL SAM +AAE0..AAEA ; XID_Start # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA +AAF2 ; XID_Start # Lo MEETEI MAYEK ANJI +AAF3..AAF4 ; XID_Start # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK +AB01..AB06 ; XID_Start # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO +AB09..AB0E ; XID_Start # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO +AB11..AB16 ; XID_Start # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO +AB20..AB26 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO +AB28..AB2E ; XID_Start # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO +AB30..AB5A ; XID_Start # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG +AB5C..AB5F ; XID_Start # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK +AB60..AB68 ; XID_Start # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE +AB69 ; XID_Start # Lm MODIFIER LETTER SMALL TURNED W +AB70..ABBF ; XID_Start # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA +ABC0..ABE2 ; XID_Start # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM +AC00..D7A3 ; XID_Start # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH +D7B0..D7C6 ; XID_Start # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E +D7CB..D7FB ; XID_Start # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH +F900..FA6D ; XID_Start # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D +FA70..FAD9 ; XID_Start # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +FB00..FB06 ; XID_Start # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; XID_Start # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FB1D ; XID_Start # Lo HEBREW LETTER YOD WITH HIRIQ +FB1F..FB28 ; XID_Start # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV +FB2A..FB36 ; XID_Start # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; XID_Start # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; XID_Start # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; XID_Start # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; XID_Start # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FBB1 ; XID_Start # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM +FBD3..FC5D ; XID_Start # Lo [139] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM +FC64..FD3D ; XID_Start # Lo [218] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD50..FD8F ; XID_Start # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD92..FDC7 ; XID_Start # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDF0..FDF9 ; XID_Start # Lo [10] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE SALLA ISOLATED FORM +FE71 ; XID_Start # Lo ARABIC TATWEEL WITH FATHATAN ABOVE +FE73 ; XID_Start # Lo ARABIC TAIL FRAGMENT +FE77 ; XID_Start # Lo ARABIC FATHA MEDIAL FORM +FE79 ; XID_Start # Lo ARABIC DAMMA MEDIAL FORM +FE7B ; XID_Start # Lo ARABIC KASRA MEDIAL FORM +FE7D ; XID_Start # Lo ARABIC SHADDA MEDIAL FORM +FE7F..FEFC ; XID_Start # Lo [126] ARABIC SUKUN MEDIAL FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM +FF21..FF3A ; XID_Start # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +FF41..FF5A ; XID_Start # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +FF66..FF6F ; XID_Start # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU +FF70 ; XID_Start # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF71..FF9D ; XID_Start # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N +FFA0..FFBE ; XID_Start # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH +FFC2..FFC7 ; XID_Start # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E +FFCA..FFCF ; XID_Start # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE +FFD2..FFD7 ; XID_Start # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU +FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I +10000..1000B ; XID_Start # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE +1000D..10026 ; XID_Start # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO +10028..1003A ; XID_Start # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO +1003C..1003D ; XID_Start # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE +1003F..1004D ; XID_Start # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO +10050..1005D ; XID_Start # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 +10080..100FA ; XID_Start # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 +10140..10174 ; XID_Start # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS +10280..1029C ; XID_Start # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X +102A0..102D0 ; XID_Start # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3 +10300..1031F ; XID_Start # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS +1032D..10340 ; XID_Start # Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA +10341 ; XID_Start # Nl GOTHIC LETTER NINETY +10342..10349 ; XID_Start # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL +1034A ; XID_Start # Nl GOTHIC LETTER NINE HUNDRED +10350..10375 ; XID_Start # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA +10380..1039D ; XID_Start # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU +103A0..103C3 ; XID_Start # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA +103C8..103CF ; XID_Start # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH +103D1..103D5 ; XID_Start # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED +10400..1044F ; XID_Start # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW +10450..1049D ; XID_Start # Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO +104B0..104D3 ; XID_Start # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +104D8..104FB ; XID_Start # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10500..10527 ; XID_Start # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE +10530..10563 ; XID_Start # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW +10570..1057A ; XID_Start # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; XID_Start # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; XID_Start # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; XID_Start # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; XID_Start # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; XID_Start # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; XID_Start # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; XID_Start # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +105C0..105F3 ; XID_Start # Lo [52] TODHRI LETTER A..TODHRI LETTER OO +10600..10736 ; XID_Start # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 +10740..10755 ; XID_Start # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE +10760..10767 ; XID_Start # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; XID_Start # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; XID_Start # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; XID_Start # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL +10800..10805 ; XID_Start # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA +10808 ; XID_Start # Lo CYPRIOT SYLLABLE JO +1080A..10835 ; XID_Start # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO +10837..10838 ; XID_Start # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE +1083C ; XID_Start # Lo CYPRIOT SYLLABLE ZA +1083F..10855 ; XID_Start # Lo [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW +10860..10876 ; XID_Start # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW +10880..1089E ; XID_Start # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW +108E0..108F2 ; XID_Start # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH +108F4..108F5 ; XID_Start # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW +10900..10915 ; XID_Start # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU +10920..10939 ; XID_Start # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; XID_Start # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 +10980..109B7 ; XID_Start # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA +109BE..109BF ; XID_Start # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN +10A00 ; XID_Start # Lo KHAROSHTHI LETTER A +10A10..10A13 ; XID_Start # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA +10A15..10A17 ; XID_Start # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA +10A19..10A35 ; XID_Start # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA +10A60..10A7C ; XID_Start # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH +10A80..10A9C ; XID_Start # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH +10AC0..10AC7 ; XID_Start # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW +10AC9..10AE4 ; XID_Start # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW +10B00..10B35 ; XID_Start # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE +10B40..10B55 ; XID_Start # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW +10B60..10B72 ; XID_Start # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW +10B80..10B91 ; XID_Start # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW +10C00..10C48 ; XID_Start # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH +10C80..10CB2 ; XID_Start # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10CC0..10CF2 ; XID_Start # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10D00..10D23 ; XID_Start # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA +10D4A..10D4D ; XID_Start # Lo [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE +10D4E ; XID_Start # Lm GARAY VOWEL LENGTH MARK +10D4F ; XID_Start # Lo GARAY SUKUN +10D50..10D65 ; XID_Start # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D6F ; XID_Start # Lm GARAY REDUPLICATION MARK +10D70..10D85 ; XID_Start # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA +10E80..10EA9 ; XID_Start # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET +10EB0..10EB1 ; XID_Start # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE +10EC2..10EC4 ; XID_Start # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10EC5 ; XID_Start # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; XID_Start # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW +10F00..10F1C ; XID_Start # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL +10F27 ; XID_Start # Lo OLD SOGDIAN LIGATURE AYIN-DALETH +10F30..10F45 ; XID_Start # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN +10F70..10F81 ; XID_Start # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10FB0..10FC4 ; XID_Start # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW +10FE0..10FF6 ; XID_Start # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH +11003..11037 ; XID_Start # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA +11071..11072 ; XID_Start # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11075 ; XID_Start # Lo BRAHMI LETTER OLD TAMIL LLA +11083..110AF ; XID_Start # Lo [45] KAITHI LETTER A..KAITHI LETTER HA +110D0..110E8 ; XID_Start # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE +11103..11126 ; XID_Start # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA +11144 ; XID_Start # Lo CHAKMA LETTER LHAA +11147 ; XID_Start # Lo CHAKMA LETTER VAA +11150..11172 ; XID_Start # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA +11176 ; XID_Start # Lo MAHAJANI LIGATURE SHRI +11183..111B2 ; XID_Start # Lo [48] SHARADA LETTER A..SHARADA LETTER HA +111C1..111C4 ; XID_Start # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM +111DA ; XID_Start # Lo SHARADA EKAM +111DC ; XID_Start # Lo SHARADA HEADSTROKE +11200..11211 ; XID_Start # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA +11213..1122B ; XID_Start # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA +1123F..11240 ; XID_Start # Lo [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I +11280..11286 ; XID_Start # Lo [7] MULTANI LETTER A..MULTANI LETTER GA +11288 ; XID_Start # Lo MULTANI LETTER GHA +1128A..1128D ; XID_Start # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA +1128F..1129D ; XID_Start # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA +1129F..112A8 ; XID_Start # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA +112B0..112DE ; XID_Start # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA +11305..1130C ; XID_Start # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L +1130F..11310 ; XID_Start # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI +11313..11328 ; XID_Start # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA +1132A..11330 ; XID_Start # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA +11332..11333 ; XID_Start # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA +11335..11339 ; XID_Start # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA +1133D ; XID_Start # Lo GRANTHA SIGN AVAGRAHA +11350 ; XID_Start # Lo GRANTHA OM +1135D..11361 ; XID_Start # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL +11380..11389 ; XID_Start # Lo [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL +1138B ; XID_Start # Lo TULU-TIGALARI LETTER EE +1138E ; XID_Start # Lo TULU-TIGALARI LETTER AI +11390..113B5 ; XID_Start # Lo [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA +113B7 ; XID_Start # Lo TULU-TIGALARI SIGN AVAGRAHA +113D1 ; XID_Start # Lo TULU-TIGALARI REPHA +113D3 ; XID_Start # Lo TULU-TIGALARI SIGN PLUTA +11400..11434 ; XID_Start # Lo [53] NEWA LETTER A..NEWA LETTER HA +11447..1144A ; XID_Start # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI +1145F..11461 ; XID_Start # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA +11480..114AF ; XID_Start # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA +114C4..114C5 ; XID_Start # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG +114C7 ; XID_Start # Lo TIRHUTA OM +11580..115AE ; XID_Start # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA +115D8..115DB ; XID_Start # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U +11600..1162F ; XID_Start # Lo [48] MODI LETTER A..MODI LETTER LLA +11644 ; XID_Start # Lo MODI SIGN HUVA +11680..116AA ; XID_Start # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA +116B8 ; XID_Start # Lo TAKRI LETTER ARCHAIC KHA +11700..1171A ; XID_Start # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA +11740..11746 ; XID_Start # Lo [7] AHOM LETTER CA..AHOM LETTER LLA +11800..1182B ; XID_Start # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA +118A0..118DF ; XID_Start # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO +118FF..11906 ; XID_Start # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E +11909 ; XID_Start # Lo DIVES AKURU LETTER O +1190C..11913 ; XID_Start # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA +11915..11916 ; XID_Start # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA +11918..1192F ; XID_Start # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA +1193F ; XID_Start # Lo DIVES AKURU PREFIXED NASAL SIGN +11941 ; XID_Start # Lo DIVES AKURU INITIAL RA +119A0..119A7 ; XID_Start # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR +119AA..119D0 ; XID_Start # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA +119E1 ; XID_Start # Lo NANDINAGARI SIGN AVAGRAHA +119E3 ; XID_Start # Lo NANDINAGARI HEADSTROKE +11A00 ; XID_Start # Lo ZANABAZAR SQUARE LETTER A +11A0B..11A32 ; XID_Start # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA +11A3A ; XID_Start # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA +11A50 ; XID_Start # Lo SOYOMBO LETTER A +11A5C..11A89 ; XID_Start # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA +11A9D ; XID_Start # Lo SOYOMBO MARK PLUTA +11AB0..11AF8 ; XID_Start # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11BC0..11BE0 ; XID_Start # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO +11C00..11C08 ; XID_Start # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L +11C0A..11C2E ; XID_Start # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA +11C40 ; XID_Start # Lo BHAIKSUKI SIGN AVAGRAHA +11C72..11C8F ; XID_Start # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A +11D00..11D06 ; XID_Start # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E +11D08..11D09 ; XID_Start # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O +11D0B..11D30 ; XID_Start # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA +11D46 ; XID_Start # Lo MASARAM GONDI REPHA +11D60..11D65 ; XID_Start # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU +11D67..11D68 ; XID_Start # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI +11D6A..11D89 ; XID_Start # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA +11D98 ; XID_Start # Lo GUNJALA GONDI OM +11DB0..11DD8 ; XID_Start # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; XID_Start # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; XID_Start # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA +11EE0..11EF2 ; XID_Start # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA +11F02 ; XID_Start # Lo KAWI SIGN REPHA +11F04..11F10 ; XID_Start # Lo [13] KAWI LETTER A..KAWI LETTER O +11F12..11F33 ; XID_Start # Lo [34] KAWI LETTER KA..KAWI LETTER JNYA +11FB0 ; XID_Start # Lo LISU LETTER YHA +12000..12399 ; XID_Start # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U +12400..1246E ; XID_Start # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM +12480..12543 ; XID_Start # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; XID_Start # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 +13000..1342F ; XID_Start # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D +13441..13446 ; XID_Start # Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN +13460..143FA ; XID_Start # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA +14400..14646 ; XID_Start # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 +16100..1611D ; XID_Start # Lo [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA +16800..16A38 ; XID_Start # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ +16A40..16A5E ; XID_Start # Lo [31] MRO LETTER TA..MRO LETTER TEK +16A70..16ABE ; XID_Start # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AD0..16AED ; XID_Start # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I +16B00..16B2F ; XID_Start # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU +16B40..16B43 ; XID_Start # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM +16B63..16B77 ; XID_Start # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS +16B7D..16B8F ; XID_Start # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ +16D40..16D42 ; XID_Start # Lm [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA +16D43..16D6A ; XID_Start # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU +16D6B..16D6C ; XID_Start # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT +16E40..16E7F ; XID_Start # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; XID_Start # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; XID_Start # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY +16F00..16F4A ; XID_Start # Lo [75] MIAO LETTER PA..MIAO LETTER RTE +16F50 ; XID_Start # Lo MIAO LETTER NASALIZATION +16F93..16F9F ; XID_Start # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 +16FE0..16FE1 ; XID_Start # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK +16FE3 ; XID_Start # Lm OLD CHINESE ITERATION MARK +16FF2..16FF3 ; XID_Start # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; XID_Start # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; XID_Start # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; XID_Start # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; XID_Start # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 +1AFF0..1AFF3 ; XID_Start # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; XID_Start # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; XID_Start # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B000..1B122 ; XID_Start # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU +1B132 ; XID_Start # Lo HIRAGANA LETTER SMALL KO +1B150..1B152 ; XID_Start # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO +1B155 ; XID_Start # Lo KATAKANA LETTER SMALL KO +1B164..1B167 ; XID_Start # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N +1B170..1B2FB ; XID_Start # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB +1BC00..1BC6A ; XID_Start # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M +1BC70..1BC7C ; XID_Start # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK +1BC80..1BC88 ; XID_Start # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL +1BC90..1BC99 ; XID_Start # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW +1D400..1D454 ; XID_Start # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G +1D456..1D49C ; XID_Start # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A +1D49E..1D49F ; XID_Start # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; XID_Start # L& MATHEMATICAL SCRIPT CAPITAL G +1D4A5..1D4A6 ; XID_Start # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K +1D4A9..1D4AC ; XID_Start # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q +1D4AE..1D4B9 ; XID_Start # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D +1D4BB ; XID_Start # L& MATHEMATICAL SCRIPT SMALL F +1D4BD..1D4C3 ; XID_Start # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N +1D4C5..1D505 ; XID_Start # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B +1D507..1D50A ; XID_Start # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G +1D50D..1D514 ; XID_Start # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q +1D516..1D51C ; XID_Start # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y +1D51E..1D539 ; XID_Start # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B..1D53E ; XID_Start # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540..1D544 ; XID_Start # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; XID_Start # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A..1D550 ; XID_Start # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D552..1D6A5 ; XID_Start # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J +1D6A8..1D6C0 ; XID_Start # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA +1D6C2..1D6DA ; XID_Start # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA +1D6DC..1D6FA ; XID_Start # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA +1D6FC..1D714 ; XID_Start # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA +1D716..1D734 ; XID_Start # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D736..1D74E ; XID_Start # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D750..1D76E ; XID_Start # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D770..1D788 ; XID_Start # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D78A..1D7A8 ; XID_Start # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7AA..1D7C2 ; XID_Start # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C4..1D7CB ; XID_Start # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1DF00..1DF09 ; XID_Start # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; XID_Start # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; XID_Start # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL +1DF25..1DF2A ; XID_Start # L& [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK +1E030..1E06D ; XID_Start # Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE +1E100..1E12C ; XID_Start # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W +1E137..1E13D ; XID_Start # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER +1E14E ; XID_Start # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E290..1E2AD ; XID_Start # Lo [30] TOTO LETTER PA..TOTO LETTER A +1E2C0..1E2EB ; XID_Start # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH +1E4D0..1E4EA ; XID_Start # Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL +1E4EB ; XID_Start # Lm NAG MUNDARI SIGN OJOD +1E5D0..1E5ED ; XID_Start # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG +1E5F0 ; XID_Start # Lo OL ONAL SIGN HODDOND +1E6C0..1E6DE ; XID_Start # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; XID_Start # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E4..1E6E5 ; XID_Start # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E7..1E6ED ; XID_Start # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6F0..1E6F4 ; XID_Start # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6FE ; XID_Start # Lo TAI YO SYMBOL MUEANG +1E6FF ; XID_Start # Lm TAI YO XAM LAI +1E7E0..1E7E6 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; XID_Start # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; XID_Start # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; XID_Start # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE +1E800..1E8C4 ; XID_Start # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON +1E900..1E943 ; XID_Start # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA +1E94B ; XID_Start # Lm ADLAM NASALIZATION MARK +1EE00..1EE03 ; XID_Start # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL +1EE05..1EE1F ; XID_Start # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF +1EE21..1EE22 ; XID_Start # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM +1EE24 ; XID_Start # Lo ARABIC MATHEMATICAL INITIAL HEH +1EE27 ; XID_Start # Lo ARABIC MATHEMATICAL INITIAL HAH +1EE29..1EE32 ; XID_Start # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF +1EE34..1EE37 ; XID_Start # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH +1EE39 ; XID_Start # Lo ARABIC MATHEMATICAL INITIAL DAD +1EE3B ; XID_Start # Lo ARABIC MATHEMATICAL INITIAL GHAIN +1EE42 ; XID_Start # Lo ARABIC MATHEMATICAL TAILED JEEM +1EE47 ; XID_Start # Lo ARABIC MATHEMATICAL TAILED HAH +1EE49 ; XID_Start # Lo ARABIC MATHEMATICAL TAILED YEH +1EE4B ; XID_Start # Lo ARABIC MATHEMATICAL TAILED LAM +1EE4D..1EE4F ; XID_Start # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN +1EE51..1EE52 ; XID_Start # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF +1EE54 ; XID_Start # Lo ARABIC MATHEMATICAL TAILED SHEEN +1EE57 ; XID_Start # Lo ARABIC MATHEMATICAL TAILED KHAH +1EE59 ; XID_Start # Lo ARABIC MATHEMATICAL TAILED DAD +1EE5B ; XID_Start # Lo ARABIC MATHEMATICAL TAILED GHAIN +1EE5D ; XID_Start # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON +1EE5F ; XID_Start # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF +1EE61..1EE62 ; XID_Start # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM +1EE64 ; XID_Start # Lo ARABIC MATHEMATICAL STRETCHED HEH +1EE67..1EE6A ; XID_Start # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF +1EE6C..1EE72 ; XID_Start # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF +1EE74..1EE77 ; XID_Start # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH +1EE79..1EE7C ; XID_Start # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH +1EE7E ; XID_Start # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH +1EE80..1EE89 ; XID_Start # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH +1EE8B..1EE9B ; XID_Start # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN +1EEA1..1EEA3 ; XID_Start # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL +1EEA5..1EEA9 ; XID_Start # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH +1EEAB..1EEBB ; XID_Start # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN +20000..2A6DF ; XID_Start # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B81D ; XID_Start # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; XID_Start # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD +2CEB0..2EBE0 ; XID_Start # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2EBF0..2EE5D ; XID_Start # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D +2F800..2FA1D ; XID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D +30000..3134A ; XID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A +31350..33479 ; XID_Start # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 + +# Total code points: 145893 + +# ================================================ + +# Derived Property: XID_Continue +# Mod_ID_Continue modified for closure under NFKx +# Modified as described in UAX #15 +# NOTE: Does NOT remove the non-NFKx characters. +# Merely ensures that if isIdentifer(string) then isIdentifier(NFKx(string)) +# NOTE: See UAX #31 for more information + +0030..0039 ; XID_Continue # Nd [10] DIGIT ZERO..DIGIT NINE +0041..005A ; XID_Continue # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z +005F ; XID_Continue # Pc LOW LINE +0061..007A ; XID_Continue # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z +00AA ; XID_Continue # Lo FEMININE ORDINAL INDICATOR +00B5 ; XID_Continue # L& MICRO SIGN +00B7 ; XID_Continue # Po MIDDLE DOT +00BA ; XID_Continue # Lo MASCULINE ORDINAL INDICATOR +00C0..00D6 ; XID_Continue # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D8..00F6 ; XID_Continue # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS +00F8..01BA ; XID_Continue # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL +01BB ; XID_Continue # Lo LATIN LETTER TWO WITH STROKE +01BC..01BF ; XID_Continue # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN +01C0..01C3 ; XID_Continue # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK +01C4..0293 ; XID_Continue # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL +0294..0295 ; XID_Continue # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; XID_Continue # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +02B0..02C1 ; XID_Continue # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP +02C6..02D1 ; XID_Continue # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON +02E0..02E4 ; XID_Continue # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +02EC ; XID_Continue # Lm MODIFIER LETTER VOICING +02EE ; XID_Continue # Lm MODIFIER LETTER DOUBLE APOSTROPHE +0300..036F ; XID_Continue # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X +0370..0373 ; XID_Continue # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI +0374 ; XID_Continue # Lm GREEK NUMERAL SIGN +0376..0377 ; XID_Continue # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +037B..037D ; XID_Continue # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +037F ; XID_Continue # L& GREEK CAPITAL LETTER YOT +0386 ; XID_Continue # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0387 ; XID_Continue # Po GREEK ANO TELEIA +0388..038A ; XID_Continue # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; XID_Continue # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..03A1 ; XID_Continue # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO +03A3..03F5 ; XID_Continue # L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL +03F7..0481 ; XID_Continue # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA +0483..0487 ; XID_Continue # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE +048A..052F ; XID_Continue # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER +0531..0556 ; XID_Continue # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH +0559 ; XID_Continue # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING +0560..0588 ; XID_Continue # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE +0591..05BD ; XID_Continue # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG +05BF ; XID_Continue # Mn HEBREW POINT RAFE +05C1..05C2 ; XID_Continue # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT +05C4..05C5 ; XID_Continue # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C7 ; XID_Continue # Mn HEBREW POINT QAMATS QATAN +05D0..05EA ; XID_Continue # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV +05EF..05F2 ; XID_Continue # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD +0610..061A ; XID_Continue # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA +0620..063F ; XID_Continue # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE +0640 ; XID_Continue # Lm ARABIC TATWEEL +0641..064A ; XID_Continue # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH +064B..065F ; XID_Continue # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW +0660..0669 ; XID_Continue # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE +066E..066F ; XID_Continue # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF +0670 ; XID_Continue # Mn ARABIC LETTER SUPERSCRIPT ALEF +0671..06D3 ; XID_Continue # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +06D5 ; XID_Continue # Lo ARABIC LETTER AE +06D6..06DC ; XID_Continue # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN +06DF..06E4 ; XID_Continue # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA +06E5..06E6 ; XID_Continue # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH +06E7..06E8 ; XID_Continue # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON +06EA..06ED ; XID_Continue # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM +06EE..06EF ; XID_Continue # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V +06F0..06F9 ; XID_Continue # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE +06FA..06FC ; XID_Continue # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW +06FF ; XID_Continue # Lo ARABIC LETTER HEH WITH INVERTED V +0710 ; XID_Continue # Lo SYRIAC LETTER ALAPH +0711 ; XID_Continue # Mn SYRIAC LETTER SUPERSCRIPT ALAPH +0712..072F ; XID_Continue # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH +0730..074A ; XID_Continue # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH +074D..07A5 ; XID_Continue # Lo [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU +07A6..07B0 ; XID_Continue # Mn [11] THAANA ABAFILI..THAANA SUKUN +07B1 ; XID_Continue # Lo THAANA LETTER NAA +07C0..07C9 ; XID_Continue # Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE +07CA..07EA ; XID_Continue # Lo [33] NKO LETTER A..NKO LETTER JONA RA +07EB..07F3 ; XID_Continue # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE +07F4..07F5 ; XID_Continue # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE +07FA ; XID_Continue # Lm NKO LAJANYALAN +07FD ; XID_Continue # Mn NKO DANTAYALAN +0800..0815 ; XID_Continue # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF +0816..0819 ; XID_Continue # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH +081A ; XID_Continue # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT +081B..0823 ; XID_Continue # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A +0824 ; XID_Continue # Lm SAMARITAN MODIFIER LETTER SHORT A +0825..0827 ; XID_Continue # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U +0828 ; XID_Continue # Lm SAMARITAN MODIFIER LETTER I +0829..082D ; XID_Continue # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA +0840..0858 ; XID_Continue # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN +0859..085B ; XID_Continue # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK +0860..086A ; XID_Continue # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA +0870..0887 ; XID_Continue # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088F ; XID_Continue # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE +0897..089F ; XID_Continue # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA +08A0..08C8 ; XID_Continue # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; XID_Continue # Lm ARABIC SMALL FARSI YEH +08CA..08E1 ; XID_Continue # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA +08E3..0902 ; XID_Continue # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA +0903 ; XID_Continue # Mc DEVANAGARI SIGN VISARGA +0904..0939 ; XID_Continue # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA +093A ; XID_Continue # Mn DEVANAGARI VOWEL SIGN OE +093B ; XID_Continue # Mc DEVANAGARI VOWEL SIGN OOE +093C ; XID_Continue # Mn DEVANAGARI SIGN NUKTA +093D ; XID_Continue # Lo DEVANAGARI SIGN AVAGRAHA +093E..0940 ; XID_Continue # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II +0941..0948 ; XID_Continue # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI +0949..094C ; XID_Continue # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU +094D ; XID_Continue # Mn DEVANAGARI SIGN VIRAMA +094E..094F ; XID_Continue # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW +0950 ; XID_Continue # Lo DEVANAGARI OM +0951..0957 ; XID_Continue # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE +0958..0961 ; XID_Continue # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL +0962..0963 ; XID_Continue # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL +0966..096F ; XID_Continue # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE +0971 ; XID_Continue # Lm DEVANAGARI SIGN HIGH SPACING DOT +0972..0980 ; XID_Continue # Lo [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI +0981 ; XID_Continue # Mn BENGALI SIGN CANDRABINDU +0982..0983 ; XID_Continue # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA +0985..098C ; XID_Continue # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L +098F..0990 ; XID_Continue # Lo [2] BENGALI LETTER E..BENGALI LETTER AI +0993..09A8 ; XID_Continue # Lo [22] BENGALI LETTER O..BENGALI LETTER NA +09AA..09B0 ; XID_Continue # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA +09B2 ; XID_Continue # Lo BENGALI LETTER LA +09B6..09B9 ; XID_Continue # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA +09BC ; XID_Continue # Mn BENGALI SIGN NUKTA +09BD ; XID_Continue # Lo BENGALI SIGN AVAGRAHA +09BE..09C0 ; XID_Continue # Mc [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II +09C1..09C4 ; XID_Continue # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR +09C7..09C8 ; XID_Continue # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI +09CB..09CC ; XID_Continue # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU +09CD ; XID_Continue # Mn BENGALI SIGN VIRAMA +09CE ; XID_Continue # Lo BENGALI LETTER KHANDA TA +09D7 ; XID_Continue # Mc BENGALI AU LENGTH MARK +09DC..09DD ; XID_Continue # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF..09E1 ; XID_Continue # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL +09E2..09E3 ; XID_Continue # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL +09E6..09EF ; XID_Continue # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE +09F0..09F1 ; XID_Continue # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL +09FC ; XID_Continue # Lo BENGALI LETTER VEDIC ANUSVARA +09FE ; XID_Continue # Mn BENGALI SANDHI MARK +0A01..0A02 ; XID_Continue # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI +0A03 ; XID_Continue # Mc GURMUKHI SIGN VISARGA +0A05..0A0A ; XID_Continue # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU +0A0F..0A10 ; XID_Continue # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI +0A13..0A28 ; XID_Continue # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA +0A2A..0A30 ; XID_Continue # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA +0A32..0A33 ; XID_Continue # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA +0A35..0A36 ; XID_Continue # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA +0A38..0A39 ; XID_Continue # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA +0A3C ; XID_Continue # Mn GURMUKHI SIGN NUKTA +0A3E..0A40 ; XID_Continue # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II +0A41..0A42 ; XID_Continue # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU +0A47..0A48 ; XID_Continue # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI +0A4B..0A4D ; XID_Continue # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA +0A51 ; XID_Continue # Mn GURMUKHI SIGN UDAAT +0A59..0A5C ; XID_Continue # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA +0A5E ; XID_Continue # Lo GURMUKHI LETTER FA +0A66..0A6F ; XID_Continue # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE +0A70..0A71 ; XID_Continue # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK +0A72..0A74 ; XID_Continue # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR +0A75 ; XID_Continue # Mn GURMUKHI SIGN YAKASH +0A81..0A82 ; XID_Continue # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA +0A83 ; XID_Continue # Mc GUJARATI SIGN VISARGA +0A85..0A8D ; XID_Continue # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E +0A8F..0A91 ; XID_Continue # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O +0A93..0AA8 ; XID_Continue # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA +0AAA..0AB0 ; XID_Continue # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA +0AB2..0AB3 ; XID_Continue # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA +0AB5..0AB9 ; XID_Continue # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA +0ABC ; XID_Continue # Mn GUJARATI SIGN NUKTA +0ABD ; XID_Continue # Lo GUJARATI SIGN AVAGRAHA +0ABE..0AC0 ; XID_Continue # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II +0AC1..0AC5 ; XID_Continue # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E +0AC7..0AC8 ; XID_Continue # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI +0AC9 ; XID_Continue # Mc GUJARATI VOWEL SIGN CANDRA O +0ACB..0ACC ; XID_Continue # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU +0ACD ; XID_Continue # Mn GUJARATI SIGN VIRAMA +0AD0 ; XID_Continue # Lo GUJARATI OM +0AE0..0AE1 ; XID_Continue # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL +0AE2..0AE3 ; XID_Continue # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL +0AE6..0AEF ; XID_Continue # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE +0AF9 ; XID_Continue # Lo GUJARATI LETTER ZHA +0AFA..0AFF ; XID_Continue # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE +0B01 ; XID_Continue # Mn ORIYA SIGN CANDRABINDU +0B02..0B03 ; XID_Continue # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA +0B05..0B0C ; XID_Continue # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L +0B0F..0B10 ; XID_Continue # Lo [2] ORIYA LETTER E..ORIYA LETTER AI +0B13..0B28 ; XID_Continue # Lo [22] ORIYA LETTER O..ORIYA LETTER NA +0B2A..0B30 ; XID_Continue # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA +0B32..0B33 ; XID_Continue # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA +0B35..0B39 ; XID_Continue # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA +0B3C ; XID_Continue # Mn ORIYA SIGN NUKTA +0B3D ; XID_Continue # Lo ORIYA SIGN AVAGRAHA +0B3E ; XID_Continue # Mc ORIYA VOWEL SIGN AA +0B3F ; XID_Continue # Mn ORIYA VOWEL SIGN I +0B40 ; XID_Continue # Mc ORIYA VOWEL SIGN II +0B41..0B44 ; XID_Continue # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR +0B47..0B48 ; XID_Continue # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI +0B4B..0B4C ; XID_Continue # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU +0B4D ; XID_Continue # Mn ORIYA SIGN VIRAMA +0B55..0B56 ; XID_Continue # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK +0B57 ; XID_Continue # Mc ORIYA AU LENGTH MARK +0B5C..0B5D ; XID_Continue # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0B5F..0B61 ; XID_Continue # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL +0B62..0B63 ; XID_Continue # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL +0B66..0B6F ; XID_Continue # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE +0B71 ; XID_Continue # Lo ORIYA LETTER WA +0B82 ; XID_Continue # Mn TAMIL SIGN ANUSVARA +0B83 ; XID_Continue # Lo TAMIL SIGN VISARGA +0B85..0B8A ; XID_Continue # Lo [6] TAMIL LETTER A..TAMIL LETTER UU +0B8E..0B90 ; XID_Continue # Lo [3] TAMIL LETTER E..TAMIL LETTER AI +0B92..0B95 ; XID_Continue # Lo [4] TAMIL LETTER O..TAMIL LETTER KA +0B99..0B9A ; XID_Continue # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA +0B9C ; XID_Continue # Lo TAMIL LETTER JA +0B9E..0B9F ; XID_Continue # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA +0BA3..0BA4 ; XID_Continue # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA +0BA8..0BAA ; XID_Continue # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA +0BAE..0BB9 ; XID_Continue # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA +0BBE..0BBF ; XID_Continue # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I +0BC0 ; XID_Continue # Mn TAMIL VOWEL SIGN II +0BC1..0BC2 ; XID_Continue # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU +0BC6..0BC8 ; XID_Continue # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI +0BCA..0BCC ; XID_Continue # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU +0BCD ; XID_Continue # Mn TAMIL SIGN VIRAMA +0BD0 ; XID_Continue # Lo TAMIL OM +0BD7 ; XID_Continue # Mc TAMIL AU LENGTH MARK +0BE6..0BEF ; XID_Continue # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE +0C00 ; XID_Continue # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE +0C01..0C03 ; XID_Continue # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA +0C04 ; XID_Continue # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE +0C05..0C0C ; XID_Continue # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L +0C0E..0C10 ; XID_Continue # Lo [3] TELUGU LETTER E..TELUGU LETTER AI +0C12..0C28 ; XID_Continue # Lo [23] TELUGU LETTER O..TELUGU LETTER NA +0C2A..0C39 ; XID_Continue # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA +0C3C ; XID_Continue # Mn TELUGU SIGN NUKTA +0C3D ; XID_Continue # Lo TELUGU SIGN AVAGRAHA +0C3E..0C40 ; XID_Continue # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II +0C41..0C44 ; XID_Continue # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR +0C46..0C48 ; XID_Continue # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI +0C4A..0C4D ; XID_Continue # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA +0C55..0C56 ; XID_Continue # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK +0C58..0C5A ; XID_Continue # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5C..0C5D ; XID_Continue # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU +0C60..0C61 ; XID_Continue # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL +0C62..0C63 ; XID_Continue # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL +0C66..0C6F ; XID_Continue # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE +0C80 ; XID_Continue # Lo KANNADA SIGN SPACING CANDRABINDU +0C81 ; XID_Continue # Mn KANNADA SIGN CANDRABINDU +0C82..0C83 ; XID_Continue # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA +0C85..0C8C ; XID_Continue # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L +0C8E..0C90 ; XID_Continue # Lo [3] KANNADA LETTER E..KANNADA LETTER AI +0C92..0CA8 ; XID_Continue # Lo [23] KANNADA LETTER O..KANNADA LETTER NA +0CAA..0CB3 ; XID_Continue # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA +0CB5..0CB9 ; XID_Continue # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA +0CBC ; XID_Continue # Mn KANNADA SIGN NUKTA +0CBD ; XID_Continue # Lo KANNADA SIGN AVAGRAHA +0CBE ; XID_Continue # Mc KANNADA VOWEL SIGN AA +0CBF ; XID_Continue # Mn KANNADA VOWEL SIGN I +0CC0..0CC4 ; XID_Continue # Mc [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR +0CC6 ; XID_Continue # Mn KANNADA VOWEL SIGN E +0CC7..0CC8 ; XID_Continue # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; XID_Continue # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO +0CCC..0CCD ; XID_Continue # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA +0CD5..0CD6 ; XID_Continue # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK +0CDC..0CDE ; XID_Continue # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA +0CE0..0CE1 ; XID_Continue # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL +0CE2..0CE3 ; XID_Continue # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL +0CE6..0CEF ; XID_Continue # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE +0CF1..0CF2 ; XID_Continue # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA +0CF3 ; XID_Continue # Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT +0D00..0D01 ; XID_Continue # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU +0D02..0D03 ; XID_Continue # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA +0D04..0D0C ; XID_Continue # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L +0D0E..0D10 ; XID_Continue # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI +0D12..0D3A ; XID_Continue # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA +0D3B..0D3C ; XID_Continue # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA +0D3D ; XID_Continue # Lo MALAYALAM SIGN AVAGRAHA +0D3E..0D40 ; XID_Continue # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II +0D41..0D44 ; XID_Continue # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR +0D46..0D48 ; XID_Continue # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI +0D4A..0D4C ; XID_Continue # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU +0D4D ; XID_Continue # Mn MALAYALAM SIGN VIRAMA +0D4E ; XID_Continue # Lo MALAYALAM LETTER DOT REPH +0D54..0D56 ; XID_Continue # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL +0D57 ; XID_Continue # Mc MALAYALAM AU LENGTH MARK +0D5F..0D61 ; XID_Continue # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL +0D62..0D63 ; XID_Continue # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL +0D66..0D6F ; XID_Continue # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE +0D7A..0D7F ; XID_Continue # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K +0D81 ; XID_Continue # Mn SINHALA SIGN CANDRABINDU +0D82..0D83 ; XID_Continue # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA +0D85..0D96 ; XID_Continue # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA +0D9A..0DB1 ; XID_Continue # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA +0DB3..0DBB ; XID_Continue # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA +0DBD ; XID_Continue # Lo SINHALA LETTER DANTAJA LAYANNA +0DC0..0DC6 ; XID_Continue # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA +0DCA ; XID_Continue # Mn SINHALA SIGN AL-LAKUNA +0DCF..0DD1 ; XID_Continue # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA +0DD2..0DD4 ; XID_Continue # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA +0DD6 ; XID_Continue # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA +0DD8..0DDF ; XID_Continue # Mc [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA +0DE6..0DEF ; XID_Continue # Nd [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE +0DF2..0DF3 ; XID_Continue # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA +0E01..0E30 ; XID_Continue # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A +0E31 ; XID_Continue # Mn THAI CHARACTER MAI HAN-AKAT +0E32..0E33 ; XID_Continue # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM +0E34..0E3A ; XID_Continue # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU +0E40..0E45 ; XID_Continue # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO +0E46 ; XID_Continue # Lm THAI CHARACTER MAIYAMOK +0E47..0E4E ; XID_Continue # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN +0E50..0E59 ; XID_Continue # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE +0E81..0E82 ; XID_Continue # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG +0E84 ; XID_Continue # Lo LAO LETTER KHO TAM +0E86..0E8A ; XID_Continue # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM +0E8C..0EA3 ; XID_Continue # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING +0EA5 ; XID_Continue # Lo LAO LETTER LO LOOT +0EA7..0EB0 ; XID_Continue # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A +0EB1 ; XID_Continue # Mn LAO VOWEL SIGN MAI KAN +0EB2..0EB3 ; XID_Continue # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM +0EB4..0EBC ; XID_Continue # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO +0EBD ; XID_Continue # Lo LAO SEMIVOWEL SIGN NYO +0EC0..0EC4 ; XID_Continue # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI +0EC6 ; XID_Continue # Lm LAO KO LA +0EC8..0ECE ; XID_Continue # Mn [7] LAO TONE MAI EK..LAO YAMAKKAN +0ED0..0ED9 ; XID_Continue # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE +0EDC..0EDF ; XID_Continue # Lo [4] LAO HO NO..LAO LETTER KHMU NYO +0F00 ; XID_Continue # Lo TIBETAN SYLLABLE OM +0F18..0F19 ; XID_Continue # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS +0F20..0F29 ; XID_Continue # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE +0F35 ; XID_Continue # Mn TIBETAN MARK NGAS BZUNG NYI ZLA +0F37 ; XID_Continue # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS +0F39 ; XID_Continue # Mn TIBETAN MARK TSA -PHRU +0F3E..0F3F ; XID_Continue # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES +0F40..0F47 ; XID_Continue # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA +0F49..0F6C ; XID_Continue # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA +0F71..0F7E ; XID_Continue # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO +0F7F ; XID_Continue # Mc TIBETAN SIGN RNAM BCAD +0F80..0F84 ; XID_Continue # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA +0F86..0F87 ; XID_Continue # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS +0F88..0F8C ; XID_Continue # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN +0F8D..0F97 ; XID_Continue # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA +0F99..0FBC ; XID_Continue # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA +0FC6 ; XID_Continue # Mn TIBETAN SYMBOL PADMA GDAN +1000..102A ; XID_Continue # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU +102B..102C ; XID_Continue # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA +102D..1030 ; XID_Continue # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU +1031 ; XID_Continue # Mc MYANMAR VOWEL SIGN E +1032..1037 ; XID_Continue # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW +1038 ; XID_Continue # Mc MYANMAR SIGN VISARGA +1039..103A ; XID_Continue # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT +103B..103C ; XID_Continue # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA +103D..103E ; XID_Continue # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA +103F ; XID_Continue # Lo MYANMAR LETTER GREAT SA +1040..1049 ; XID_Continue # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE +1050..1055 ; XID_Continue # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL +1056..1057 ; XID_Continue # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR +1058..1059 ; XID_Continue # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL +105A..105D ; XID_Continue # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE +105E..1060 ; XID_Continue # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA +1061 ; XID_Continue # Lo MYANMAR LETTER SGAW KAREN SHA +1062..1064 ; XID_Continue # Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO +1065..1066 ; XID_Continue # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA +1067..106D ; XID_Continue # Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5 +106E..1070 ; XID_Continue # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA +1071..1074 ; XID_Continue # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE +1075..1081 ; XID_Continue # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA +1082 ; XID_Continue # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA +1083..1084 ; XID_Continue # Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E +1085..1086 ; XID_Continue # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y +1087..108C ; XID_Continue # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3 +108D ; XID_Continue # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE +108E ; XID_Continue # Lo MYANMAR LETTER RUMAI PALAUNG FA +108F ; XID_Continue # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5 +1090..1099 ; XID_Continue # Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE +109A..109C ; XID_Continue # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A +109D ; XID_Continue # Mn MYANMAR VOWEL SIGN AITON AI +10A0..10C5 ; XID_Continue # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE +10C7 ; XID_Continue # L& GEORGIAN CAPITAL LETTER YN +10CD ; XID_Continue # L& GEORGIAN CAPITAL LETTER AEN +10D0..10FA ; XID_Continue # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN +10FC ; XID_Continue # Lm MODIFIER LETTER GEORGIAN NAR +10FD..10FF ; XID_Continue # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN +1100..1248 ; XID_Continue # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA +124A..124D ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE +1250..1256 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO +1258 ; XID_Continue # Lo ETHIOPIC SYLLABLE QHWA +125A..125D ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE +1260..1288 ; XID_Continue # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA +128A..128D ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE +1290..12B0 ; XID_Continue # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA +12B2..12B5 ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE +12B8..12BE ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO +12C0 ; XID_Continue # Lo ETHIOPIC SYLLABLE KXWA +12C2..12C5 ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE +12C8..12D6 ; XID_Continue # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O +12D8..1310 ; XID_Continue # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA +1312..1315 ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE +1318..135A ; XID_Continue # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA +135D..135F ; XID_Continue # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK +1369..1371 ; XID_Continue # No [9] ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE +1380..138F ; XID_Continue # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE +13A0..13F5 ; XID_Continue # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV +13F8..13FD ; XID_Continue # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV +1401..166C ; XID_Continue # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA +166F..167F ; XID_Continue # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W +1681..169A ; XID_Continue # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH +16A0..16EA ; XID_Continue # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X +16EE..16F0 ; XID_Continue # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL +16F1..16F8 ; XID_Continue # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC +1700..1711 ; XID_Continue # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA +1712..1714 ; XID_Continue # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA +1715 ; XID_Continue # Mc TAGALOG SIGN PAMUDPOD +171F..1731 ; XID_Continue # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA +1732..1733 ; XID_Continue # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1734 ; XID_Continue # Mc HANUNOO SIGN PAMUDPOD +1740..1751 ; XID_Continue # Lo [18] BUHID LETTER A..BUHID LETTER HA +1752..1753 ; XID_Continue # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U +1760..176C ; XID_Continue # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA +176E..1770 ; XID_Continue # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA +1772..1773 ; XID_Continue # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U +1780..17B3 ; XID_Continue # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU +17B4..17B5 ; XID_Continue # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA +17B6 ; XID_Continue # Mc KHMER VOWEL SIGN AA +17B7..17BD ; XID_Continue # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA +17BE..17C5 ; XID_Continue # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU +17C6 ; XID_Continue # Mn KHMER SIGN NIKAHIT +17C7..17C8 ; XID_Continue # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU +17C9..17D3 ; XID_Continue # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT +17D7 ; XID_Continue # Lm KHMER SIGN LEK TOO +17DC ; XID_Continue # Lo KHMER SIGN AVAKRAHASANYA +17DD ; XID_Continue # Mn KHMER SIGN ATTHACAN +17E0..17E9 ; XID_Continue # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE +180B..180D ; XID_Continue # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; XID_Continue # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR +1810..1819 ; XID_Continue # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE +1820..1842 ; XID_Continue # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI +1843 ; XID_Continue # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN +1844..1878 ; XID_Continue # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS +1880..1884 ; XID_Continue # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA +1885..1886 ; XID_Continue # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA +1887..18A8 ; XID_Continue # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA +18A9 ; XID_Continue # Mn MONGOLIAN LETTER ALI GALI DAGALGA +18AA ; XID_Continue # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA +18B0..18F5 ; XID_Continue # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S +1900..191E ; XID_Continue # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA +1920..1922 ; XID_Continue # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U +1923..1926 ; XID_Continue # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU +1927..1928 ; XID_Continue # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O +1929..192B ; XID_Continue # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA +1930..1931 ; XID_Continue # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA +1932 ; XID_Continue # Mn LIMBU SMALL LETTER ANUSVARA +1933..1938 ; XID_Continue # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA +1939..193B ; XID_Continue # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I +1946..194F ; XID_Continue # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE +1950..196D ; XID_Continue # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI +1970..1974 ; XID_Continue # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 +1980..19AB ; XID_Continue # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA +19B0..19C9 ; XID_Continue # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2 +19D0..19D9 ; XID_Continue # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE +19DA ; XID_Continue # No NEW TAI LUE THAM DIGIT ONE +1A00..1A16 ; XID_Continue # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA +1A17..1A18 ; XID_Continue # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U +1A19..1A1A ; XID_Continue # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O +1A1B ; XID_Continue # Mn BUGINESE VOWEL SIGN AE +1A20..1A54 ; XID_Continue # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA +1A55 ; XID_Continue # Mc TAI THAM CONSONANT SIGN MEDIAL RA +1A56 ; XID_Continue # Mn TAI THAM CONSONANT SIGN MEDIAL LA +1A57 ; XID_Continue # Mc TAI THAM CONSONANT SIGN LA TANG LAI +1A58..1A5E ; XID_Continue # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA +1A60 ; XID_Continue # Mn TAI THAM SIGN SAKOT +1A61 ; XID_Continue # Mc TAI THAM VOWEL SIGN A +1A62 ; XID_Continue # Mn TAI THAM VOWEL SIGN MAI SAT +1A63..1A64 ; XID_Continue # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA +1A65..1A6C ; XID_Continue # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW +1A6D..1A72 ; XID_Continue # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI +1A73..1A7C ; XID_Continue # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN +1A7F ; XID_Continue # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT +1A80..1A89 ; XID_Continue # Nd [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE +1A90..1A99 ; XID_Continue # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE +1AA7 ; XID_Continue # Lm TAI THAM SIGN MAI YAMOK +1AB0..1ABD ; XID_Continue # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW +1ABF..1ADD ; XID_Continue # Mn [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; XID_Continue # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE +1B00..1B03 ; XID_Continue # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG +1B04 ; XID_Continue # Mc BALINESE SIGN BISAH +1B05..1B33 ; XID_Continue # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA +1B34 ; XID_Continue # Mn BALINESE SIGN REREKAN +1B35 ; XID_Continue # Mc BALINESE VOWEL SIGN TEDUNG +1B36..1B3A ; XID_Continue # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA +1B3B ; XID_Continue # Mc BALINESE VOWEL SIGN RA REPA TEDUNG +1B3C ; XID_Continue # Mn BALINESE VOWEL SIGN LA LENGA +1B3D..1B41 ; XID_Continue # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG +1B42 ; XID_Continue # Mn BALINESE VOWEL SIGN PEPET +1B43..1B44 ; XID_Continue # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG +1B45..1B4C ; XID_Continue # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA +1B50..1B59 ; XID_Continue # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE +1B6B..1B73 ; XID_Continue # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG +1B80..1B81 ; XID_Continue # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR +1B82 ; XID_Continue # Mc SUNDANESE SIGN PANGWISAD +1B83..1BA0 ; XID_Continue # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA +1BA1 ; XID_Continue # Mc SUNDANESE CONSONANT SIGN PAMINGKAL +1BA2..1BA5 ; XID_Continue # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU +1BA6..1BA7 ; XID_Continue # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG +1BA8..1BA9 ; XID_Continue # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG +1BAA ; XID_Continue # Mc SUNDANESE SIGN PAMAAEH +1BAB..1BAD ; XID_Continue # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA +1BAE..1BAF ; XID_Continue # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA +1BB0..1BB9 ; XID_Continue # Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE +1BBA..1BE5 ; XID_Continue # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U +1BE6 ; XID_Continue # Mn BATAK SIGN TOMPI +1BE7 ; XID_Continue # Mc BATAK VOWEL SIGN E +1BE8..1BE9 ; XID_Continue # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE +1BEA..1BEC ; XID_Continue # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O +1BED ; XID_Continue # Mn BATAK VOWEL SIGN KARO O +1BEE ; XID_Continue # Mc BATAK VOWEL SIGN U +1BEF..1BF1 ; XID_Continue # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H +1BF2..1BF3 ; XID_Continue # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN +1C00..1C23 ; XID_Continue # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A +1C24..1C2B ; XID_Continue # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU +1C2C..1C33 ; XID_Continue # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T +1C34..1C35 ; XID_Continue # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG +1C36..1C37 ; XID_Continue # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA +1C40..1C49 ; XID_Continue # Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE +1C4D..1C4F ; XID_Continue # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA +1C50..1C59 ; XID_Continue # Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE +1C5A..1C77 ; XID_Continue # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH +1C78..1C7D ; XID_Continue # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD +1C80..1C8A ; XID_Continue # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE +1C90..1CBA ; XID_Continue # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN +1CBD..1CBF ; XID_Continue # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN +1CD0..1CD2 ; XID_Continue # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA +1CD4..1CE0 ; XID_Continue # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA +1CE1 ; XID_Continue # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA +1CE2..1CE8 ; XID_Continue # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL +1CE9..1CEC ; XID_Continue # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL +1CED ; XID_Continue # Mn VEDIC SIGN TIRYAK +1CEE..1CF3 ; XID_Continue # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA +1CF4 ; XID_Continue # Mn VEDIC TONE CANDRA ABOVE +1CF5..1CF6 ; XID_Continue # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA +1CF7 ; XID_Continue # Mc VEDIC SIGN ATIKRAMA +1CF8..1CF9 ; XID_Continue # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE +1CFA ; XID_Continue # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA +1D00..1D2B ; XID_Continue # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL +1D2C..1D6A ; XID_Continue # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI +1D6B..1D77 ; XID_Continue # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G +1D78 ; XID_Continue # Lm MODIFIER LETTER CYRILLIC EN +1D79..1D9A ; XID_Continue # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK +1D9B..1DBF ; XID_Continue # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA +1DC0..1DFF ; XID_Continue # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1E00..1F15 ; XID_Continue # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18..1F1D ; XID_Continue # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F45 ; XID_Continue # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48..1F4D ; XID_Continue # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; XID_Continue # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59 ; XID_Continue # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; XID_Continue # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; XID_Continue # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F..1F7D ; XID_Continue # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1FB4 ; XID_Continue # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FBC ; XID_Continue # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBE ; XID_Continue # L& GREEK PROSGEGRAMMENI +1FC2..1FC4 ; XID_Continue # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FCC ; XID_Continue # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FD0..1FD3 ; XID_Continue # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FDB ; XID_Continue # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA +1FE0..1FEC ; XID_Continue # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FF2..1FF4 ; XID_Continue # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FFC ; XID_Continue # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +200C..200D ; XID_Continue # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER +203F..2040 ; XID_Continue # Pc [2] UNDERTIE..CHARACTER TIE +2054 ; XID_Continue # Pc INVERTED UNDERTIE +2071 ; XID_Continue # Lm SUPERSCRIPT LATIN SMALL LETTER I +207F ; XID_Continue # Lm SUPERSCRIPT LATIN SMALL LETTER N +2090..209C ; XID_Continue # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T +20D0..20DC ; XID_Continue # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE +20E1 ; XID_Continue # Mn COMBINING LEFT RIGHT ARROW ABOVE +20E5..20F0 ; XID_Continue # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE +2102 ; XID_Continue # L& DOUBLE-STRUCK CAPITAL C +2107 ; XID_Continue # L& EULER CONSTANT +210A..2113 ; XID_Continue # L& [10] SCRIPT SMALL G..SCRIPT SMALL L +2115 ; XID_Continue # L& DOUBLE-STRUCK CAPITAL N +2118 ; XID_Continue # Sm SCRIPT CAPITAL P +2119..211D ; XID_Continue # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R +2124 ; XID_Continue # L& DOUBLE-STRUCK CAPITAL Z +2126 ; XID_Continue # L& OHM SIGN +2128 ; XID_Continue # L& BLACK-LETTER CAPITAL Z +212A..212D ; XID_Continue # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C +212E ; XID_Continue # So ESTIMATED SYMBOL +212F..2134 ; XID_Continue # L& [6] SCRIPT SMALL E..SCRIPT SMALL O +2135..2138 ; XID_Continue # Lo [4] ALEF SYMBOL..DALET SYMBOL +2139 ; XID_Continue # L& INFORMATION SOURCE +213C..213F ; XID_Continue # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI +2145..2149 ; XID_Continue # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J +214E ; XID_Continue # L& TURNED SMALL F +2160..2182 ; XID_Continue # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND +2183..2184 ; XID_Continue # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C +2185..2188 ; XID_Continue # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND +2C00..2C7B ; XID_Continue # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E +2C7C..2C7D ; XID_Continue # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V +2C7E..2CE4 ; XID_Continue # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI +2CEB..2CEE ; XID_Continue # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA +2CEF..2CF1 ; XID_Continue # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS +2CF2..2CF3 ; XID_Continue # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI +2D00..2D25 ; XID_Continue # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE +2D27 ; XID_Continue # L& GEORGIAN SMALL LETTER YN +2D2D ; XID_Continue # L& GEORGIAN SMALL LETTER AEN +2D30..2D67 ; XID_Continue # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO +2D6F ; XID_Continue # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2D7F ; XID_Continue # Mn TIFINAGH CONSONANT JOINER +2D80..2D96 ; XID_Continue # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE +2DA0..2DA6 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO +2DA8..2DAE ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO +2DB0..2DB6 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO +2DB8..2DBE ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO +2DC0..2DC6 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO +2DC8..2DCE ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO +2DD0..2DD6 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO +2DD8..2DDE ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO +2DE0..2DFF ; XID_Continue # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS +3005 ; XID_Continue # Lm IDEOGRAPHIC ITERATION MARK +3006 ; XID_Continue # Lo IDEOGRAPHIC CLOSING MARK +3007 ; XID_Continue # Nl IDEOGRAPHIC NUMBER ZERO +3021..3029 ; XID_Continue # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE +302A..302D ; XID_Continue # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK +302E..302F ; XID_Continue # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK +3031..3035 ; XID_Continue # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF +3038..303A ; XID_Continue # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY +303B ; XID_Continue # Lm VERTICAL IDEOGRAPHIC ITERATION MARK +303C ; XID_Continue # Lo MASU MARK +3041..3096 ; XID_Continue # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE +3099..309A ; XID_Continue # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +309D..309E ; XID_Continue # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK +309F ; XID_Continue # Lo HIRAGANA DIGRAPH YORI +30A1..30FA ; XID_Continue # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO +30FB ; XID_Continue # Po KATAKANA MIDDLE DOT +30FC..30FE ; XID_Continue # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK +30FF ; XID_Continue # Lo KATAKANA DIGRAPH KOTO +3105..312F ; XID_Continue # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN +3131..318E ; XID_Continue # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE +31A0..31BF ; XID_Continue # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH +31F0..31FF ; XID_Continue # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO +3400..4DBF ; XID_Continue # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF +4E00..A014 ; XID_Continue # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E +A015 ; XID_Continue # Lm YI SYLLABLE WU +A016..A48C ; XID_Continue # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR +A4D0..A4F7 ; XID_Continue # Lo [40] LISU LETTER BA..LISU LETTER OE +A4F8..A4FD ; XID_Continue # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU +A500..A60B ; XID_Continue # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG +A60C ; XID_Continue # Lm VAI SYLLABLE LENGTHENER +A610..A61F ; XID_Continue # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG +A620..A629 ; XID_Continue # Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE +A62A..A62B ; XID_Continue # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO +A640..A66D ; XID_Continue # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O +A66E ; XID_Continue # Lo CYRILLIC LETTER MULTIOCULAR O +A66F ; XID_Continue # Mn COMBINING CYRILLIC VZMET +A674..A67D ; XID_Continue # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK +A67F ; XID_Continue # Lm CYRILLIC PAYEROK +A680..A69B ; XID_Continue # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O +A69C..A69D ; XID_Continue # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN +A69E..A69F ; XID_Continue # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E +A6A0..A6E5 ; XID_Continue # Lo [70] BAMUM LETTER A..BAMUM LETTER KI +A6E6..A6EF ; XID_Continue # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM +A6F0..A6F1 ; XID_Continue # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS +A717..A71F ; XID_Continue # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK +A722..A76F ; XID_Continue # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON +A770 ; XID_Continue # Lm MODIFIER LETTER US +A771..A787 ; XID_Continue # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T +A788 ; XID_Continue # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT +A78B..A78E ; XID_Continue # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT +A78F ; XID_Continue # Lo LATIN LETTER SINOLOGICAL DOT +A790..A7DC ; XID_Continue # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; XID_Continue # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q +A7F5..A7F6 ; XID_Continue # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H +A7F7 ; XID_Continue # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I +A7F8..A7F9 ; XID_Continue # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE +A7FA ; XID_Continue # L& LATIN LETTER SMALL CAPITAL TURNED M +A7FB..A801 ; XID_Continue # Lo [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I +A802 ; XID_Continue # Mn SYLOTI NAGRI SIGN DVISVARA +A803..A805 ; XID_Continue # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O +A806 ; XID_Continue # Mn SYLOTI NAGRI SIGN HASANTA +A807..A80A ; XID_Continue # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO +A80B ; XID_Continue # Mn SYLOTI NAGRI SIGN ANUSVARA +A80C..A822 ; XID_Continue # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO +A823..A824 ; XID_Continue # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I +A825..A826 ; XID_Continue # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E +A827 ; XID_Continue # Mc SYLOTI NAGRI VOWEL SIGN OO +A82C ; XID_Continue # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA +A840..A873 ; XID_Continue # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU +A880..A881 ; XID_Continue # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA +A882..A8B3 ; XID_Continue # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA +A8B4..A8C3 ; XID_Continue # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU +A8C4..A8C5 ; XID_Continue # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU +A8D0..A8D9 ; XID_Continue # Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE +A8E0..A8F1 ; XID_Continue # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA +A8F2..A8F7 ; XID_Continue # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA +A8FB ; XID_Continue # Lo DEVANAGARI HEADSTROKE +A8FD..A8FE ; XID_Continue # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY +A8FF ; XID_Continue # Mn DEVANAGARI VOWEL SIGN AY +A900..A909 ; XID_Continue # Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE +A90A..A925 ; XID_Continue # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO +A926..A92D ; XID_Continue # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU +A930..A946 ; XID_Continue # Lo [23] REJANG LETTER KA..REJANG LETTER A +A947..A951 ; XID_Continue # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R +A952..A953 ; XID_Continue # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA +A960..A97C ; XID_Continue # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH +A980..A982 ; XID_Continue # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR +A983 ; XID_Continue # Mc JAVANESE SIGN WIGNYAN +A984..A9B2 ; XID_Continue # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA +A9B3 ; XID_Continue # Mn JAVANESE SIGN CECAK TELU +A9B4..A9B5 ; XID_Continue # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG +A9B6..A9B9 ; XID_Continue # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT +A9BA..A9BB ; XID_Continue # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE +A9BC..A9BD ; XID_Continue # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET +A9BE..A9C0 ; XID_Continue # Mc [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON +A9CF ; XID_Continue # Lm JAVANESE PANGRANGKEP +A9D0..A9D9 ; XID_Continue # Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE +A9E0..A9E4 ; XID_Continue # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA +A9E5 ; XID_Continue # Mn MYANMAR SIGN SHAN SAW +A9E6 ; XID_Continue # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION +A9E7..A9EF ; XID_Continue # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA +A9F0..A9F9 ; XID_Continue # Nd [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE +A9FA..A9FE ; XID_Continue # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA +AA00..AA28 ; XID_Continue # Lo [41] CHAM LETTER A..CHAM LETTER HA +AA29..AA2E ; XID_Continue # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE +AA2F..AA30 ; XID_Continue # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI +AA31..AA32 ; XID_Continue # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE +AA33..AA34 ; XID_Continue # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA +AA35..AA36 ; XID_Continue # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA +AA40..AA42 ; XID_Continue # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG +AA43 ; XID_Continue # Mn CHAM CONSONANT SIGN FINAL NG +AA44..AA4B ; XID_Continue # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS +AA4C ; XID_Continue # Mn CHAM CONSONANT SIGN FINAL M +AA4D ; XID_Continue # Mc CHAM CONSONANT SIGN FINAL H +AA50..AA59 ; XID_Continue # Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE +AA60..AA6F ; XID_Continue # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA +AA70 ; XID_Continue # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION +AA71..AA76 ; XID_Continue # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM +AA7A ; XID_Continue # Lo MYANMAR LETTER AITON RA +AA7B ; XID_Continue # Mc MYANMAR SIGN PAO KAREN TONE +AA7C ; XID_Continue # Mn MYANMAR SIGN TAI LAING TONE-2 +AA7D ; XID_Continue # Mc MYANMAR SIGN TAI LAING TONE-5 +AA7E..AAAF ; XID_Continue # Lo [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O +AAB0 ; XID_Continue # Mn TAI VIET MAI KANG +AAB1 ; XID_Continue # Lo TAI VIET VOWEL AA +AAB2..AAB4 ; XID_Continue # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U +AAB5..AAB6 ; XID_Continue # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O +AAB7..AAB8 ; XID_Continue # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA +AAB9..AABD ; XID_Continue # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN +AABE..AABF ; XID_Continue # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK +AAC0 ; XID_Continue # Lo TAI VIET TONE MAI NUENG +AAC1 ; XID_Continue # Mn TAI VIET TONE MAI THO +AAC2 ; XID_Continue # Lo TAI VIET TONE MAI SONG +AADB..AADC ; XID_Continue # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG +AADD ; XID_Continue # Lm TAI VIET SYMBOL SAM +AAE0..AAEA ; XID_Continue # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA +AAEB ; XID_Continue # Mc MEETEI MAYEK VOWEL SIGN II +AAEC..AAED ; XID_Continue # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI +AAEE..AAEF ; XID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU +AAF2 ; XID_Continue # Lo MEETEI MAYEK ANJI +AAF3..AAF4 ; XID_Continue # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK +AAF5 ; XID_Continue # Mc MEETEI MAYEK VOWEL SIGN VISARGA +AAF6 ; XID_Continue # Mn MEETEI MAYEK VIRAMA +AB01..AB06 ; XID_Continue # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO +AB09..AB0E ; XID_Continue # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO +AB11..AB16 ; XID_Continue # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO +AB20..AB26 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO +AB28..AB2E ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO +AB30..AB5A ; XID_Continue # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG +AB5C..AB5F ; XID_Continue # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK +AB60..AB68 ; XID_Continue # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE +AB69 ; XID_Continue # Lm MODIFIER LETTER SMALL TURNED W +AB70..ABBF ; XID_Continue # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA +ABC0..ABE2 ; XID_Continue # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM +ABE3..ABE4 ; XID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP +ABE5 ; XID_Continue # Mn MEETEI MAYEK VOWEL SIGN ANAP +ABE6..ABE7 ; XID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP +ABE8 ; XID_Continue # Mn MEETEI MAYEK VOWEL SIGN UNAP +ABE9..ABEA ; XID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG +ABEC ; XID_Continue # Mc MEETEI MAYEK LUM IYEK +ABED ; XID_Continue # Mn MEETEI MAYEK APUN IYEK +ABF0..ABF9 ; XID_Continue # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE +AC00..D7A3 ; XID_Continue # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH +D7B0..D7C6 ; XID_Continue # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E +D7CB..D7FB ; XID_Continue # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH +F900..FA6D ; XID_Continue # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D +FA70..FAD9 ; XID_Continue # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +FB00..FB06 ; XID_Continue # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; XID_Continue # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FB1D ; XID_Continue # Lo HEBREW LETTER YOD WITH HIRIQ +FB1E ; XID_Continue # Mn HEBREW POINT JUDEO-SPANISH VARIKA +FB1F..FB28 ; XID_Continue # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV +FB2A..FB36 ; XID_Continue # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; XID_Continue # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; XID_Continue # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; XID_Continue # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; XID_Continue # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FBB1 ; XID_Continue # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM +FBD3..FC5D ; XID_Continue # Lo [139] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM +FC64..FD3D ; XID_Continue # Lo [218] ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD50..FD8F ; XID_Continue # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD92..FDC7 ; XID_Continue # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDF0..FDF9 ; XID_Continue # Lo [10] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE SALLA ISOLATED FORM +FE00..FE0F ; XID_Continue # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 +FE20..FE2F ; XID_Continue # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF +FE33..FE34 ; XID_Continue # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE +FE4D..FE4F ; XID_Continue # Pc [3] DASHED LOW LINE..WAVY LOW LINE +FE71 ; XID_Continue # Lo ARABIC TATWEEL WITH FATHATAN ABOVE +FE73 ; XID_Continue # Lo ARABIC TAIL FRAGMENT +FE77 ; XID_Continue # Lo ARABIC FATHA MEDIAL FORM +FE79 ; XID_Continue # Lo ARABIC DAMMA MEDIAL FORM +FE7B ; XID_Continue # Lo ARABIC KASRA MEDIAL FORM +FE7D ; XID_Continue # Lo ARABIC SHADDA MEDIAL FORM +FE7F..FEFC ; XID_Continue # Lo [126] ARABIC SUKUN MEDIAL FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM +FF10..FF19 ; XID_Continue # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE +FF21..FF3A ; XID_Continue # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +FF3F ; XID_Continue # Pc FULLWIDTH LOW LINE +FF41..FF5A ; XID_Continue # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +FF65 ; XID_Continue # Po HALFWIDTH KATAKANA MIDDLE DOT +FF66..FF6F ; XID_Continue # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU +FF70 ; XID_Continue # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF71..FF9D ; XID_Continue # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N +FF9E..FF9F ; XID_Continue # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +FFA0..FFBE ; XID_Continue # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH +FFC2..FFC7 ; XID_Continue # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E +FFCA..FFCF ; XID_Continue # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE +FFD2..FFD7 ; XID_Continue # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU +FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I +10000..1000B ; XID_Continue # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE +1000D..10026 ; XID_Continue # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO +10028..1003A ; XID_Continue # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO +1003C..1003D ; XID_Continue # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE +1003F..1004D ; XID_Continue # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO +10050..1005D ; XID_Continue # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 +10080..100FA ; XID_Continue # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 +10140..10174 ; XID_Continue # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS +101FD ; XID_Continue # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE +10280..1029C ; XID_Continue # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X +102A0..102D0 ; XID_Continue # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3 +102E0 ; XID_Continue # Mn COPTIC EPACT THOUSANDS MARK +10300..1031F ; XID_Continue # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS +1032D..10340 ; XID_Continue # Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA +10341 ; XID_Continue # Nl GOTHIC LETTER NINETY +10342..10349 ; XID_Continue # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL +1034A ; XID_Continue # Nl GOTHIC LETTER NINE HUNDRED +10350..10375 ; XID_Continue # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA +10376..1037A ; XID_Continue # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII +10380..1039D ; XID_Continue # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU +103A0..103C3 ; XID_Continue # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA +103C8..103CF ; XID_Continue # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH +103D1..103D5 ; XID_Continue # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED +10400..1044F ; XID_Continue # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW +10450..1049D ; XID_Continue # Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO +104A0..104A9 ; XID_Continue # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE +104B0..104D3 ; XID_Continue # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +104D8..104FB ; XID_Continue # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10500..10527 ; XID_Continue # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE +10530..10563 ; XID_Continue # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW +10570..1057A ; XID_Continue # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; XID_Continue # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; XID_Continue # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; XID_Continue # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; XID_Continue # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; XID_Continue # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; XID_Continue # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; XID_Continue # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +105C0..105F3 ; XID_Continue # Lo [52] TODHRI LETTER A..TODHRI LETTER OO +10600..10736 ; XID_Continue # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 +10740..10755 ; XID_Continue # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE +10760..10767 ; XID_Continue # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; XID_Continue # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; XID_Continue # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; XID_Continue # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL +10800..10805 ; XID_Continue # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA +10808 ; XID_Continue # Lo CYPRIOT SYLLABLE JO +1080A..10835 ; XID_Continue # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO +10837..10838 ; XID_Continue # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE +1083C ; XID_Continue # Lo CYPRIOT SYLLABLE ZA +1083F..10855 ; XID_Continue # Lo [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW +10860..10876 ; XID_Continue # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW +10880..1089E ; XID_Continue # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW +108E0..108F2 ; XID_Continue # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH +108F4..108F5 ; XID_Continue # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW +10900..10915 ; XID_Continue # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU +10920..10939 ; XID_Continue # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +10940..10959 ; XID_Continue # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 +10980..109B7 ; XID_Continue # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA +109BE..109BF ; XID_Continue # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN +10A00 ; XID_Continue # Lo KHAROSHTHI LETTER A +10A01..10A03 ; XID_Continue # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R +10A05..10A06 ; XID_Continue # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A0C..10A0F ; XID_Continue # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA +10A10..10A13 ; XID_Continue # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA +10A15..10A17 ; XID_Continue # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA +10A19..10A35 ; XID_Continue # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA +10A38..10A3A ; XID_Continue # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW +10A3F ; XID_Continue # Mn KHAROSHTHI VIRAMA +10A60..10A7C ; XID_Continue # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH +10A80..10A9C ; XID_Continue # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH +10AC0..10AC7 ; XID_Continue # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW +10AC9..10AE4 ; XID_Continue # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW +10AE5..10AE6 ; XID_Continue # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW +10B00..10B35 ; XID_Continue # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE +10B40..10B55 ; XID_Continue # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW +10B60..10B72 ; XID_Continue # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW +10B80..10B91 ; XID_Continue # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW +10C00..10C48 ; XID_Continue # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH +10C80..10CB2 ; XID_Continue # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10CC0..10CF2 ; XID_Continue # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10D00..10D23 ; XID_Continue # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA +10D24..10D27 ; XID_Continue # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI +10D30..10D39 ; XID_Continue # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE +10D40..10D49 ; XID_Continue # Nd [10] GARAY DIGIT ZERO..GARAY DIGIT NINE +10D4A..10D4D ; XID_Continue # Lo [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE +10D4E ; XID_Continue # Lm GARAY VOWEL LENGTH MARK +10D4F ; XID_Continue # Lo GARAY SUKUN +10D50..10D65 ; XID_Continue # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D69..10D6D ; XID_Continue # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK +10D6F ; XID_Continue # Lm GARAY REDUPLICATION MARK +10D70..10D85 ; XID_Continue # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA +10E80..10EA9 ; XID_Continue # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET +10EAB..10EAC ; XID_Continue # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK +10EB0..10EB1 ; XID_Continue # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE +10EC2..10EC4 ; XID_Continue # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10EC5 ; XID_Continue # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; XID_Continue # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW +10EFA..10EFF ; XID_Continue # Mn [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA +10F00..10F1C ; XID_Continue # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL +10F27 ; XID_Continue # Lo OLD SOGDIAN LIGATURE AYIN-DALETH +10F30..10F45 ; XID_Continue # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN +10F46..10F50 ; XID_Continue # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F70..10F81 ; XID_Continue # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10F82..10F85 ; XID_Continue # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW +10FB0..10FC4 ; XID_Continue # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW +10FE0..10FF6 ; XID_Continue # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH +11000 ; XID_Continue # Mc BRAHMI SIGN CANDRABINDU +11001 ; XID_Continue # Mn BRAHMI SIGN ANUSVARA +11002 ; XID_Continue # Mc BRAHMI SIGN VISARGA +11003..11037 ; XID_Continue # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA +11038..11046 ; XID_Continue # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11066..1106F ; XID_Continue # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE +11070 ; XID_Continue # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11071..11072 ; XID_Continue # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11073..11074 ; XID_Continue # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +11075 ; XID_Continue # Lo BRAHMI LETTER OLD TAMIL LLA +1107F..11081 ; XID_Continue # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA +11082 ; XID_Continue # Mc KAITHI SIGN VISARGA +11083..110AF ; XID_Continue # Lo [45] KAITHI LETTER A..KAITHI LETTER HA +110B0..110B2 ; XID_Continue # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II +110B3..110B6 ; XID_Continue # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI +110B7..110B8 ; XID_Continue # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU +110B9..110BA ; XID_Continue # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; XID_Continue # Mn KAITHI VOWEL SIGN VOCALIC R +110D0..110E8 ; XID_Continue # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE +110F0..110F9 ; XID_Continue # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE +11100..11102 ; XID_Continue # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA +11103..11126 ; XID_Continue # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA +11127..1112B ; XID_Continue # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU +1112C ; XID_Continue # Mc CHAKMA VOWEL SIGN E +1112D..11134 ; XID_Continue # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA +11136..1113F ; XID_Continue # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE +11144 ; XID_Continue # Lo CHAKMA LETTER LHAA +11145..11146 ; XID_Continue # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI +11147 ; XID_Continue # Lo CHAKMA LETTER VAA +11150..11172 ; XID_Continue # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA +11173 ; XID_Continue # Mn MAHAJANI SIGN NUKTA +11176 ; XID_Continue # Lo MAHAJANI LIGATURE SHRI +11180..11181 ; XID_Continue # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA +11182 ; XID_Continue # Mc SHARADA SIGN VISARGA +11183..111B2 ; XID_Continue # Lo [48] SHARADA LETTER A..SHARADA LETTER HA +111B3..111B5 ; XID_Continue # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II +111B6..111BE ; XID_Continue # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O +111BF..111C0 ; XID_Continue # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA +111C1..111C4 ; XID_Continue # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM +111C9..111CC ; XID_Continue # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK +111CE ; XID_Continue # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E +111CF ; XID_Continue # Mn SHARADA SIGN INVERTED CANDRABINDU +111D0..111D9 ; XID_Continue # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE +111DA ; XID_Continue # Lo SHARADA EKAM +111DC ; XID_Continue # Lo SHARADA HEADSTROKE +11200..11211 ; XID_Continue # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA +11213..1122B ; XID_Continue # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA +1122C..1122E ; XID_Continue # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II +1122F..11231 ; XID_Continue # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI +11232..11233 ; XID_Continue # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU +11234 ; XID_Continue # Mn KHOJKI SIGN ANUSVARA +11235 ; XID_Continue # Mc KHOJKI SIGN VIRAMA +11236..11237 ; XID_Continue # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA +1123E ; XID_Continue # Mn KHOJKI SIGN SUKUN +1123F..11240 ; XID_Continue # Lo [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I +11241 ; XID_Continue # Mn KHOJKI VOWEL SIGN VOCALIC R +11280..11286 ; XID_Continue # Lo [7] MULTANI LETTER A..MULTANI LETTER GA +11288 ; XID_Continue # Lo MULTANI LETTER GHA +1128A..1128D ; XID_Continue # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA +1128F..1129D ; XID_Continue # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA +1129F..112A8 ; XID_Continue # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA +112B0..112DE ; XID_Continue # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA +112DF ; XID_Continue # Mn KHUDAWADI SIGN ANUSVARA +112E0..112E2 ; XID_Continue # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II +112E3..112EA ; XID_Continue # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA +112F0..112F9 ; XID_Continue # Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE +11300..11301 ; XID_Continue # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU +11302..11303 ; XID_Continue # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA +11305..1130C ; XID_Continue # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L +1130F..11310 ; XID_Continue # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI +11313..11328 ; XID_Continue # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA +1132A..11330 ; XID_Continue # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA +11332..11333 ; XID_Continue # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA +11335..11339 ; XID_Continue # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA +1133B..1133C ; XID_Continue # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA +1133D ; XID_Continue # Lo GRANTHA SIGN AVAGRAHA +1133E..1133F ; XID_Continue # Mc [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I +11340 ; XID_Continue # Mn GRANTHA VOWEL SIGN II +11341..11344 ; XID_Continue # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR +11347..11348 ; XID_Continue # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI +1134B..1134D ; XID_Continue # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA +11350 ; XID_Continue # Lo GRANTHA OM +11357 ; XID_Continue # Mc GRANTHA AU LENGTH MARK +1135D..11361 ; XID_Continue # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL +11362..11363 ; XID_Continue # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL +11366..1136C ; XID_Continue # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX +11370..11374 ; XID_Continue # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA +11380..11389 ; XID_Continue # Lo [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL +1138B ; XID_Continue # Lo TULU-TIGALARI LETTER EE +1138E ; XID_Continue # Lo TULU-TIGALARI LETTER AI +11390..113B5 ; XID_Continue # Lo [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA +113B7 ; XID_Continue # Lo TULU-TIGALARI SIGN AVAGRAHA +113B8..113BA ; XID_Continue # Mc [3] TULU-TIGALARI VOWEL SIGN AA..TULU-TIGALARI VOWEL SIGN II +113BB..113C0 ; XID_Continue # Mn [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL +113C2 ; XID_Continue # Mc TULU-TIGALARI VOWEL SIGN EE +113C5 ; XID_Continue # Mc TULU-TIGALARI VOWEL SIGN AI +113C7..113CA ; XID_Continue # Mc [4] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI SIGN CANDRA ANUNASIKA +113CC..113CD ; XID_Continue # Mc [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA +113CE ; XID_Continue # Mn TULU-TIGALARI SIGN VIRAMA +113CF ; XID_Continue # Mc TULU-TIGALARI SIGN LOOPED VIRAMA +113D0 ; XID_Continue # Mn TULU-TIGALARI CONJOINER +113D1 ; XID_Continue # Lo TULU-TIGALARI REPHA +113D2 ; XID_Continue # Mn TULU-TIGALARI GEMINATION MARK +113D3 ; XID_Continue # Lo TULU-TIGALARI SIGN PLUTA +113E1..113E2 ; XID_Continue # Mn [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA +11400..11434 ; XID_Continue # Lo [53] NEWA LETTER A..NEWA LETTER HA +11435..11437 ; XID_Continue # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II +11438..1143F ; XID_Continue # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI +11440..11441 ; XID_Continue # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU +11442..11444 ; XID_Continue # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA +11445 ; XID_Continue # Mc NEWA SIGN VISARGA +11446 ; XID_Continue # Mn NEWA SIGN NUKTA +11447..1144A ; XID_Continue # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI +11450..11459 ; XID_Continue # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE +1145E ; XID_Continue # Mn NEWA SANDHI MARK +1145F..11461 ; XID_Continue # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA +11480..114AF ; XID_Continue # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA +114B0..114B2 ; XID_Continue # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II +114B3..114B8 ; XID_Continue # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL +114B9 ; XID_Continue # Mc TIRHUTA VOWEL SIGN E +114BA ; XID_Continue # Mn TIRHUTA VOWEL SIGN SHORT E +114BB..114BE ; XID_Continue # Mc [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU +114BF..114C0 ; XID_Continue # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA +114C1 ; XID_Continue # Mc TIRHUTA SIGN VISARGA +114C2..114C3 ; XID_Continue # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA +114C4..114C5 ; XID_Continue # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG +114C7 ; XID_Continue # Lo TIRHUTA OM +114D0..114D9 ; XID_Continue # Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE +11580..115AE ; XID_Continue # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA +115AF..115B1 ; XID_Continue # Mc [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II +115B2..115B5 ; XID_Continue # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR +115B8..115BB ; XID_Continue # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU +115BC..115BD ; XID_Continue # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA +115BE ; XID_Continue # Mc SIDDHAM SIGN VISARGA +115BF..115C0 ; XID_Continue # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA +115D8..115DB ; XID_Continue # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U +115DC..115DD ; XID_Continue # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU +11600..1162F ; XID_Continue # Lo [48] MODI LETTER A..MODI LETTER LLA +11630..11632 ; XID_Continue # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II +11633..1163A ; XID_Continue # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI +1163B..1163C ; XID_Continue # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU +1163D ; XID_Continue # Mn MODI SIGN ANUSVARA +1163E ; XID_Continue # Mc MODI SIGN VISARGA +1163F..11640 ; XID_Continue # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA +11644 ; XID_Continue # Lo MODI SIGN HUVA +11650..11659 ; XID_Continue # Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE +11680..116AA ; XID_Continue # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA +116AB ; XID_Continue # Mn TAKRI SIGN ANUSVARA +116AC ; XID_Continue # Mc TAKRI SIGN VISARGA +116AD ; XID_Continue # Mn TAKRI VOWEL SIGN AA +116AE..116AF ; XID_Continue # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II +116B0..116B5 ; XID_Continue # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU +116B6 ; XID_Continue # Mc TAKRI SIGN VIRAMA +116B7 ; XID_Continue # Mn TAKRI SIGN NUKTA +116B8 ; XID_Continue # Lo TAKRI LETTER ARCHAIC KHA +116C0..116C9 ; XID_Continue # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE +116D0..116E3 ; XID_Continue # Nd [20] MYANMAR PAO DIGIT ZERO..MYANMAR EASTERN PWO KAREN DIGIT NINE +11700..1171A ; XID_Continue # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA +1171D ; XID_Continue # Mn AHOM CONSONANT SIGN MEDIAL LA +1171E ; XID_Continue # Mc AHOM CONSONANT SIGN MEDIAL RA +1171F ; XID_Continue # Mn AHOM CONSONANT SIGN MEDIAL LIGATING RA +11720..11721 ; XID_Continue # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA +11722..11725 ; XID_Continue # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU +11726 ; XID_Continue # Mc AHOM VOWEL SIGN E +11727..1172B ; XID_Continue # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER +11730..11739 ; XID_Continue # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE +11740..11746 ; XID_Continue # Lo [7] AHOM LETTER CA..AHOM LETTER LLA +11800..1182B ; XID_Continue # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA +1182C..1182E ; XID_Continue # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II +1182F..11837 ; XID_Continue # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA +11838 ; XID_Continue # Mc DOGRA SIGN VISARGA +11839..1183A ; XID_Continue # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA +118A0..118DF ; XID_Continue # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO +118E0..118E9 ; XID_Continue # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE +118FF..11906 ; XID_Continue # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E +11909 ; XID_Continue # Lo DIVES AKURU LETTER O +1190C..11913 ; XID_Continue # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA +11915..11916 ; XID_Continue # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA +11918..1192F ; XID_Continue # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA +11930..11935 ; XID_Continue # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E +11937..11938 ; XID_Continue # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O +1193B..1193C ; XID_Continue # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU +1193D ; XID_Continue # Mc DIVES AKURU SIGN HALANTA +1193E ; XID_Continue # Mn DIVES AKURU VIRAMA +1193F ; XID_Continue # Lo DIVES AKURU PREFIXED NASAL SIGN +11940 ; XID_Continue # Mc DIVES AKURU MEDIAL YA +11941 ; XID_Continue # Lo DIVES AKURU INITIAL RA +11942 ; XID_Continue # Mc DIVES AKURU MEDIAL RA +11943 ; XID_Continue # Mn DIVES AKURU SIGN NUKTA +11950..11959 ; XID_Continue # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE +119A0..119A7 ; XID_Continue # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR +119AA..119D0 ; XID_Continue # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA +119D1..119D3 ; XID_Continue # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II +119D4..119D7 ; XID_Continue # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR +119DA..119DB ; XID_Continue # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI +119DC..119DF ; XID_Continue # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA +119E0 ; XID_Continue # Mn NANDINAGARI SIGN VIRAMA +119E1 ; XID_Continue # Lo NANDINAGARI SIGN AVAGRAHA +119E3 ; XID_Continue # Lo NANDINAGARI HEADSTROKE +119E4 ; XID_Continue # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E +11A00 ; XID_Continue # Lo ZANABAZAR SQUARE LETTER A +11A01..11A0A ; XID_Continue # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK +11A0B..11A32 ; XID_Continue # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA +11A33..11A38 ; XID_Continue # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA +11A39 ; XID_Continue # Mc ZANABAZAR SQUARE SIGN VISARGA +11A3A ; XID_Continue # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA +11A3B..11A3E ; XID_Continue # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA +11A47 ; XID_Continue # Mn ZANABAZAR SQUARE SUBJOINER +11A50 ; XID_Continue # Lo SOYOMBO LETTER A +11A51..11A56 ; XID_Continue # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE +11A57..11A58 ; XID_Continue # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU +11A59..11A5B ; XID_Continue # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK +11A5C..11A89 ; XID_Continue # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA +11A8A..11A96 ; XID_Continue # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA +11A97 ; XID_Continue # Mc SOYOMBO SIGN VISARGA +11A98..11A99 ; XID_Continue # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER +11A9D ; XID_Continue # Lo SOYOMBO MARK PLUTA +11AB0..11AF8 ; XID_Continue # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11B60 ; XID_Continue # Mn SHARADA VOWEL SIGN OE +11B61 ; XID_Continue # Mc SHARADA VOWEL SIGN OOE +11B62..11B64 ; XID_Continue # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B65 ; XID_Continue # Mc SHARADA VOWEL SIGN SHORT O +11B66 ; XID_Continue # Mn SHARADA VOWEL SIGN CANDRA E +11B67 ; XID_Continue # Mc SHARADA VOWEL SIGN CANDRA O +11BC0..11BE0 ; XID_Continue # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO +11BF0..11BF9 ; XID_Continue # Nd [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE +11C00..11C08 ; XID_Continue # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L +11C0A..11C2E ; XID_Continue # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA +11C2F ; XID_Continue # Mc BHAIKSUKI VOWEL SIGN AA +11C30..11C36 ; XID_Continue # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L +11C38..11C3D ; XID_Continue # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA +11C3E ; XID_Continue # Mc BHAIKSUKI SIGN VISARGA +11C3F ; XID_Continue # Mn BHAIKSUKI SIGN VIRAMA +11C40 ; XID_Continue # Lo BHAIKSUKI SIGN AVAGRAHA +11C50..11C59 ; XID_Continue # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE +11C72..11C8F ; XID_Continue # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A +11C92..11CA7 ; XID_Continue # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA +11CA9 ; XID_Continue # Mc MARCHEN SUBJOINED LETTER YA +11CAA..11CB0 ; XID_Continue # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA +11CB1 ; XID_Continue # Mc MARCHEN VOWEL SIGN I +11CB2..11CB3 ; XID_Continue # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E +11CB4 ; XID_Continue # Mc MARCHEN VOWEL SIGN O +11CB5..11CB6 ; XID_Continue # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU +11D00..11D06 ; XID_Continue # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E +11D08..11D09 ; XID_Continue # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O +11D0B..11D30 ; XID_Continue # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA +11D31..11D36 ; XID_Continue # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R +11D3A ; XID_Continue # Mn MASARAM GONDI VOWEL SIGN E +11D3C..11D3D ; XID_Continue # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O +11D3F..11D45 ; XID_Continue # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA +11D46 ; XID_Continue # Lo MASARAM GONDI REPHA +11D47 ; XID_Continue # Mn MASARAM GONDI RA-KARA +11D50..11D59 ; XID_Continue # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE +11D60..11D65 ; XID_Continue # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU +11D67..11D68 ; XID_Continue # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI +11D6A..11D89 ; XID_Continue # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA +11D8A..11D8E ; XID_Continue # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU +11D90..11D91 ; XID_Continue # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI +11D93..11D94 ; XID_Continue # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU +11D95 ; XID_Continue # Mn GUNJALA GONDI SIGN ANUSVARA +11D96 ; XID_Continue # Mc GUNJALA GONDI SIGN VISARGA +11D97 ; XID_Continue # Mn GUNJALA GONDI VIRAMA +11D98 ; XID_Continue # Lo GUNJALA GONDI OM +11DA0..11DA9 ; XID_Continue # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE +11DB0..11DD8 ; XID_Continue # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; XID_Continue # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; XID_Continue # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA +11DE0..11DE9 ; XID_Continue # Nd [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE +11EE0..11EF2 ; XID_Continue # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA +11EF3..11EF4 ; XID_Continue # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U +11EF5..11EF6 ; XID_Continue # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O +11F00..11F01 ; XID_Continue # Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA +11F02 ; XID_Continue # Lo KAWI SIGN REPHA +11F03 ; XID_Continue # Mc KAWI SIGN VISARGA +11F04..11F10 ; XID_Continue # Lo [13] KAWI LETTER A..KAWI LETTER O +11F12..11F33 ; XID_Continue # Lo [34] KAWI LETTER KA..KAWI LETTER JNYA +11F34..11F35 ; XID_Continue # Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA +11F36..11F3A ; XID_Continue # Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R +11F3E..11F3F ; XID_Continue # Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI +11F40 ; XID_Continue # Mn KAWI VOWEL SIGN EU +11F41 ; XID_Continue # Mc KAWI SIGN KILLER +11F42 ; XID_Continue # Mn KAWI CONJOINER +11F50..11F59 ; XID_Continue # Nd [10] KAWI DIGIT ZERO..KAWI DIGIT NINE +11F5A ; XID_Continue # Mn KAWI SIGN NUKTA +11FB0 ; XID_Continue # Lo LISU LETTER YHA +12000..12399 ; XID_Continue # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U +12400..1246E ; XID_Continue # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM +12480..12543 ; XID_Continue # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; XID_Continue # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 +13000..1342F ; XID_Continue # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D +13440 ; XID_Continue # Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY +13441..13446 ; XID_Continue # Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN +13447..13455 ; XID_Continue # Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED +13460..143FA ; XID_Continue # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA +14400..14646 ; XID_Continue # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 +16100..1611D ; XID_Continue # Lo [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA +1611E..16129 ; XID_Continue # Mn [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK +1612A..1612C ; XID_Continue # Mc [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA +1612D..1612F ; XID_Continue # Mn [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA +16130..16139 ; XID_Continue # Nd [10] GURUNG KHEMA DIGIT ZERO..GURUNG KHEMA DIGIT NINE +16800..16A38 ; XID_Continue # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ +16A40..16A5E ; XID_Continue # Lo [31] MRO LETTER TA..MRO LETTER TEK +16A60..16A69 ; XID_Continue # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE +16A70..16ABE ; XID_Continue # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AC0..16AC9 ; XID_Continue # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE +16AD0..16AED ; XID_Continue # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I +16AF0..16AF4 ; XID_Continue # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE +16B00..16B2F ; XID_Continue # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU +16B30..16B36 ; XID_Continue # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM +16B40..16B43 ; XID_Continue # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM +16B50..16B59 ; XID_Continue # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE +16B63..16B77 ; XID_Continue # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS +16B7D..16B8F ; XID_Continue # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ +16D40..16D42 ; XID_Continue # Lm [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA +16D43..16D6A ; XID_Continue # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU +16D6B..16D6C ; XID_Continue # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT +16D70..16D79 ; XID_Continue # Nd [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE +16E40..16E7F ; XID_Continue # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16EA0..16EB8 ; XID_Continue # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; XID_Continue # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY +16F00..16F4A ; XID_Continue # Lo [75] MIAO LETTER PA..MIAO LETTER RTE +16F4F ; XID_Continue # Mn MIAO SIGN CONSONANT MODIFIER BAR +16F50 ; XID_Continue # Lo MIAO LETTER NASALIZATION +16F51..16F87 ; XID_Continue # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI +16F8F..16F92 ; XID_Continue # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW +16F93..16F9F ; XID_Continue # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 +16FE0..16FE1 ; XID_Continue # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK +16FE3 ; XID_Continue # Lm OLD CHINESE ITERATION MARK +16FE4 ; XID_Continue # Mn KHITAN SMALL SCRIPT FILLER +16FF0..16FF1 ; XID_Continue # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY +16FF2..16FF3 ; XID_Continue # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; XID_Continue # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; XID_Continue # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; XID_Continue # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; XID_Continue # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 +1AFF0..1AFF3 ; XID_Continue # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; XID_Continue # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; XID_Continue # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B000..1B122 ; XID_Continue # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU +1B132 ; XID_Continue # Lo HIRAGANA LETTER SMALL KO +1B150..1B152 ; XID_Continue # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO +1B155 ; XID_Continue # Lo KATAKANA LETTER SMALL KO +1B164..1B167 ; XID_Continue # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N +1B170..1B2FB ; XID_Continue # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB +1BC00..1BC6A ; XID_Continue # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M +1BC70..1BC7C ; XID_Continue # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK +1BC80..1BC88 ; XID_Continue # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL +1BC90..1BC99 ; XID_Continue # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW +1BC9D..1BC9E ; XID_Continue # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1CCF0..1CCF9 ; XID_Continue # Nd [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE +1CF00..1CF2D ; XID_Continue # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; XID_Continue # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG +1D165..1D166 ; XID_Continue # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM +1D167..1D169 ; XID_Continue # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 +1D16D..1D172 ; XID_Continue # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 +1D17B..1D182 ; XID_Continue # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE +1D185..1D18B ; XID_Continue # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE +1D1AA..1D1AD ; XID_Continue # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO +1D242..1D244 ; XID_Continue # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME +1D400..1D454 ; XID_Continue # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G +1D456..1D49C ; XID_Continue # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A +1D49E..1D49F ; XID_Continue # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; XID_Continue # L& MATHEMATICAL SCRIPT CAPITAL G +1D4A5..1D4A6 ; XID_Continue # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K +1D4A9..1D4AC ; XID_Continue # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q +1D4AE..1D4B9 ; XID_Continue # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D +1D4BB ; XID_Continue # L& MATHEMATICAL SCRIPT SMALL F +1D4BD..1D4C3 ; XID_Continue # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N +1D4C5..1D505 ; XID_Continue # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B +1D507..1D50A ; XID_Continue # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G +1D50D..1D514 ; XID_Continue # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q +1D516..1D51C ; XID_Continue # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y +1D51E..1D539 ; XID_Continue # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B..1D53E ; XID_Continue # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540..1D544 ; XID_Continue # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; XID_Continue # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A..1D550 ; XID_Continue # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D552..1D6A5 ; XID_Continue # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J +1D6A8..1D6C0 ; XID_Continue # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA +1D6C2..1D6DA ; XID_Continue # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA +1D6DC..1D6FA ; XID_Continue # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA +1D6FC..1D714 ; XID_Continue # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA +1D716..1D734 ; XID_Continue # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D736..1D74E ; XID_Continue # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D750..1D76E ; XID_Continue # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D770..1D788 ; XID_Continue # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D78A..1D7A8 ; XID_Continue # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7AA..1D7C2 ; XID_Continue # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C4..1D7CB ; XID_Continue # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1D7CE..1D7FF ; XID_Continue # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE +1DA00..1DA36 ; XID_Continue # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN +1DA3B..1DA6C ; XID_Continue # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT +1DA75 ; XID_Continue # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS +1DA84 ; XID_Continue # Mn SIGNWRITING LOCATION HEAD NECK +1DA9B..1DA9F ; XID_Continue # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 +1DAA1..1DAAF ; XID_Continue # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 +1DF00..1DF09 ; XID_Continue # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; XID_Continue # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; XID_Continue # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL +1DF25..1DF2A ; XID_Continue # L& [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK +1E000..1E006 ; XID_Continue # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE +1E008..1E018 ; XID_Continue # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU +1E01B..1E021 ; XID_Continue # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI +1E023..1E024 ; XID_Continue # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS +1E026..1E02A ; XID_Continue # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA +1E030..1E06D ; XID_Continue # Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE +1E08F ; XID_Continue # Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +1E100..1E12C ; XID_Continue # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W +1E130..1E136 ; XID_Continue # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E137..1E13D ; XID_Continue # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER +1E140..1E149 ; XID_Continue # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE +1E14E ; XID_Continue # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E290..1E2AD ; XID_Continue # Lo [30] TOTO LETTER PA..TOTO LETTER A +1E2AE ; XID_Continue # Mn TOTO SIGN RISING TONE +1E2C0..1E2EB ; XID_Continue # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH +1E2EC..1E2EF ; XID_Continue # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI +1E2F0..1E2F9 ; XID_Continue # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE +1E4D0..1E4EA ; XID_Continue # Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL +1E4EB ; XID_Continue # Lm NAG MUNDARI SIGN OJOD +1E4EC..1E4EF ; XID_Continue # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH +1E4F0..1E4F9 ; XID_Continue # Nd [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE +1E5D0..1E5ED ; XID_Continue # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG +1E5EE..1E5EF ; XID_Continue # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR +1E5F0 ; XID_Continue # Lo OL ONAL SIGN HODDOND +1E5F1..1E5FA ; XID_Continue # Nd [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE +1E6C0..1E6DE ; XID_Continue # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; XID_Continue # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E3 ; XID_Continue # Mn TAI YO SIGN UE +1E6E4..1E6E5 ; XID_Continue # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E6 ; XID_Continue # Mn TAI YO SIGN AU +1E6E7..1E6ED ; XID_Continue # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6EE..1E6EF ; XID_Continue # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F0..1E6F4 ; XID_Continue # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6F5 ; XID_Continue # Mn TAI YO SIGN OM +1E6FE ; XID_Continue # Lo TAI YO SYMBOL MUEANG +1E6FF ; XID_Continue # Lm TAI YO XAM LAI +1E7E0..1E7E6 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; XID_Continue # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; XID_Continue # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE +1E800..1E8C4 ; XID_Continue # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON +1E8D0..1E8D6 ; XID_Continue # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS +1E900..1E943 ; XID_Continue # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA +1E944..1E94A ; XID_Continue # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA +1E94B ; XID_Continue # Lm ADLAM NASALIZATION MARK +1E950..1E959 ; XID_Continue # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE +1EE00..1EE03 ; XID_Continue # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL +1EE05..1EE1F ; XID_Continue # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF +1EE21..1EE22 ; XID_Continue # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM +1EE24 ; XID_Continue # Lo ARABIC MATHEMATICAL INITIAL HEH +1EE27 ; XID_Continue # Lo ARABIC MATHEMATICAL INITIAL HAH +1EE29..1EE32 ; XID_Continue # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF +1EE34..1EE37 ; XID_Continue # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH +1EE39 ; XID_Continue # Lo ARABIC MATHEMATICAL INITIAL DAD +1EE3B ; XID_Continue # Lo ARABIC MATHEMATICAL INITIAL GHAIN +1EE42 ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED JEEM +1EE47 ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED HAH +1EE49 ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED YEH +1EE4B ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED LAM +1EE4D..1EE4F ; XID_Continue # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN +1EE51..1EE52 ; XID_Continue # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF +1EE54 ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED SHEEN +1EE57 ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED KHAH +1EE59 ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED DAD +1EE5B ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED GHAIN +1EE5D ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON +1EE5F ; XID_Continue # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF +1EE61..1EE62 ; XID_Continue # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM +1EE64 ; XID_Continue # Lo ARABIC MATHEMATICAL STRETCHED HEH +1EE67..1EE6A ; XID_Continue # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF +1EE6C..1EE72 ; XID_Continue # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF +1EE74..1EE77 ; XID_Continue # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH +1EE79..1EE7C ; XID_Continue # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH +1EE7E ; XID_Continue # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH +1EE80..1EE89 ; XID_Continue # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH +1EE8B..1EE9B ; XID_Continue # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN +1EEA1..1EEA3 ; XID_Continue # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL +1EEA5..1EEA9 ; XID_Continue # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH +1EEAB..1EEBB ; XID_Continue # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN +1FBF0..1FBF9 ; XID_Continue # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE +20000..2A6DF ; XID_Continue # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B81D ; XID_Continue # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; XID_Continue # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD +2CEB0..2EBE0 ; XID_Continue # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2EBF0..2EE5D ; XID_Continue # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D +2F800..2FA1D ; XID_Continue # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D +30000..3134A ; XID_Continue # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A +31350..33479 ; XID_Continue # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 +E0100..E01EF ; XID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 + +# Total code points: 149221 + +# ================================================ + +# Derived Property: Default_Ignorable_Code_Point +# Generated from +# Other_Default_Ignorable_Code_Point +# + Cf (Format characters) +# + Variation_Selector +# - White_Space +# - FFF9..FFFB (Interlinear annotation format characters) +# - 13430..13440 (Egyptian hieroglyph format characters) +# - Prepended_Concatenation_Mark (Exceptional format characters that should be visible) +# +# There are currently no stability guarantees for DICP. However, the +# values of DICP interact with the derivation of XID_Continue +# and NFKC_CF, for which there are stability guarantees. +# Maintainers of this property should note that in the +# unlikely case that the DICP value changes for an existing character +# which is also XID_Continue=Yes, then exceptions must be put +# in place to ensure that the NFKC_CF mapping value for that +# existing character does not change. + +00AD ; Default_Ignorable_Code_Point # Cf SOFT HYPHEN +034F ; Default_Ignorable_Code_Point # Mn COMBINING GRAPHEME JOINER +061C ; Default_Ignorable_Code_Point # Cf ARABIC LETTER MARK +115F..1160 ; Default_Ignorable_Code_Point # Lo [2] HANGUL CHOSEONG FILLER..HANGUL JUNGSEONG FILLER +17B4..17B5 ; Default_Ignorable_Code_Point # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA +180B..180D ; Default_Ignorable_Code_Point # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180E ; Default_Ignorable_Code_Point # Cf MONGOLIAN VOWEL SEPARATOR +180F ; Default_Ignorable_Code_Point # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR +200B..200F ; Default_Ignorable_Code_Point # Cf [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK +202A..202E ; Default_Ignorable_Code_Point # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE +2060..2064 ; Default_Ignorable_Code_Point # Cf [5] WORD JOINER..INVISIBLE PLUS +2065 ; Default_Ignorable_Code_Point # Cn +2066..206F ; Default_Ignorable_Code_Point # Cf [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES +3164 ; Default_Ignorable_Code_Point # Lo HANGUL FILLER +FE00..FE0F ; Default_Ignorable_Code_Point # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 +FEFF ; Default_Ignorable_Code_Point # Cf ZERO WIDTH NO-BREAK SPACE +FFA0 ; Default_Ignorable_Code_Point # Lo HALFWIDTH HANGUL FILLER +FFF0..FFF8 ; Default_Ignorable_Code_Point # Cn [9] .. +1BCA0..1BCA3 ; Default_Ignorable_Code_Point # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1D173..1D17A ; Default_Ignorable_Code_Point # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE +E0000 ; Default_Ignorable_Code_Point # Cn +E0001 ; Default_Ignorable_Code_Point # Cf LANGUAGE TAG +E0002..E001F ; Default_Ignorable_Code_Point # Cn [30] .. +E0020..E007F ; Default_Ignorable_Code_Point # Cf [96] TAG SPACE..CANCEL TAG +E0080..E00FF ; Default_Ignorable_Code_Point # Cn [128] .. +E0100..E01EF ; Default_Ignorable_Code_Point # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 +E01F0..E0FFF ; Default_Ignorable_Code_Point # Cn [3600] .. + +# Total code points: 4174 + +# ================================================ + +# Derived Property: Grapheme_Extend +# Generated from: Me + Mn + Other_Grapheme_Extend +# Note: depending on an application's interpretation of Co (private use), +# they may be either in Grapheme_Base, or in Grapheme_Extend, or in neither. + +0300..036F ; Grapheme_Extend # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X +0483..0487 ; Grapheme_Extend # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE +0488..0489 ; Grapheme_Extend # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN +0591..05BD ; Grapheme_Extend # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG +05BF ; Grapheme_Extend # Mn HEBREW POINT RAFE +05C1..05C2 ; Grapheme_Extend # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT +05C4..05C5 ; Grapheme_Extend # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C7 ; Grapheme_Extend # Mn HEBREW POINT QAMATS QATAN +0610..061A ; Grapheme_Extend # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA +064B..065F ; Grapheme_Extend # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW +0670 ; Grapheme_Extend # Mn ARABIC LETTER SUPERSCRIPT ALEF +06D6..06DC ; Grapheme_Extend # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN +06DF..06E4 ; Grapheme_Extend # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA +06E7..06E8 ; Grapheme_Extend # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON +06EA..06ED ; Grapheme_Extend # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM +0711 ; Grapheme_Extend # Mn SYRIAC LETTER SUPERSCRIPT ALAPH +0730..074A ; Grapheme_Extend # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH +07A6..07B0 ; Grapheme_Extend # Mn [11] THAANA ABAFILI..THAANA SUKUN +07EB..07F3 ; Grapheme_Extend # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE +07FD ; Grapheme_Extend # Mn NKO DANTAYALAN +0816..0819 ; Grapheme_Extend # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH +081B..0823 ; Grapheme_Extend # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A +0825..0827 ; Grapheme_Extend # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U +0829..082D ; Grapheme_Extend # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA +0859..085B ; Grapheme_Extend # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK +0897..089F ; Grapheme_Extend # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA +08CA..08E1 ; Grapheme_Extend # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA +08E3..0902 ; Grapheme_Extend # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA +093A ; Grapheme_Extend # Mn DEVANAGARI VOWEL SIGN OE +093C ; Grapheme_Extend # Mn DEVANAGARI SIGN NUKTA +0941..0948 ; Grapheme_Extend # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI +094D ; Grapheme_Extend # Mn DEVANAGARI SIGN VIRAMA +0951..0957 ; Grapheme_Extend # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE +0962..0963 ; Grapheme_Extend # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL +0981 ; Grapheme_Extend # Mn BENGALI SIGN CANDRABINDU +09BC ; Grapheme_Extend # Mn BENGALI SIGN NUKTA +09BE ; Grapheme_Extend # Mc BENGALI VOWEL SIGN AA +09C1..09C4 ; Grapheme_Extend # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR +09CD ; Grapheme_Extend # Mn BENGALI SIGN VIRAMA +09D7 ; Grapheme_Extend # Mc BENGALI AU LENGTH MARK +09E2..09E3 ; Grapheme_Extend # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL +09FE ; Grapheme_Extend # Mn BENGALI SANDHI MARK +0A01..0A02 ; Grapheme_Extend # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI +0A3C ; Grapheme_Extend # Mn GURMUKHI SIGN NUKTA +0A41..0A42 ; Grapheme_Extend # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU +0A47..0A48 ; Grapheme_Extend # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI +0A4B..0A4D ; Grapheme_Extend # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA +0A51 ; Grapheme_Extend # Mn GURMUKHI SIGN UDAAT +0A70..0A71 ; Grapheme_Extend # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK +0A75 ; Grapheme_Extend # Mn GURMUKHI SIGN YAKASH +0A81..0A82 ; Grapheme_Extend # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA +0ABC ; Grapheme_Extend # Mn GUJARATI SIGN NUKTA +0AC1..0AC5 ; Grapheme_Extend # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E +0AC7..0AC8 ; Grapheme_Extend # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI +0ACD ; Grapheme_Extend # Mn GUJARATI SIGN VIRAMA +0AE2..0AE3 ; Grapheme_Extend # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL +0AFA..0AFF ; Grapheme_Extend # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE +0B01 ; Grapheme_Extend # Mn ORIYA SIGN CANDRABINDU +0B3C ; Grapheme_Extend # Mn ORIYA SIGN NUKTA +0B3E ; Grapheme_Extend # Mc ORIYA VOWEL SIGN AA +0B3F ; Grapheme_Extend # Mn ORIYA VOWEL SIGN I +0B41..0B44 ; Grapheme_Extend # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR +0B4D ; Grapheme_Extend # Mn ORIYA SIGN VIRAMA +0B55..0B56 ; Grapheme_Extend # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK +0B57 ; Grapheme_Extend # Mc ORIYA AU LENGTH MARK +0B62..0B63 ; Grapheme_Extend # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL +0B82 ; Grapheme_Extend # Mn TAMIL SIGN ANUSVARA +0BBE ; Grapheme_Extend # Mc TAMIL VOWEL SIGN AA +0BC0 ; Grapheme_Extend # Mn TAMIL VOWEL SIGN II +0BCD ; Grapheme_Extend # Mn TAMIL SIGN VIRAMA +0BD7 ; Grapheme_Extend # Mc TAMIL AU LENGTH MARK +0C00 ; Grapheme_Extend # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE +0C04 ; Grapheme_Extend # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE +0C3C ; Grapheme_Extend # Mn TELUGU SIGN NUKTA +0C3E..0C40 ; Grapheme_Extend # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II +0C46..0C48 ; Grapheme_Extend # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI +0C4A..0C4D ; Grapheme_Extend # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA +0C55..0C56 ; Grapheme_Extend # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK +0C62..0C63 ; Grapheme_Extend # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL +0C81 ; Grapheme_Extend # Mn KANNADA SIGN CANDRABINDU +0CBC ; Grapheme_Extend # Mn KANNADA SIGN NUKTA +0CBF ; Grapheme_Extend # Mn KANNADA VOWEL SIGN I +0CC0 ; Grapheme_Extend # Mc KANNADA VOWEL SIGN II +0CC2 ; Grapheme_Extend # Mc KANNADA VOWEL SIGN UU +0CC6 ; Grapheme_Extend # Mn KANNADA VOWEL SIGN E +0CC7..0CC8 ; Grapheme_Extend # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; Grapheme_Extend # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO +0CCC..0CCD ; Grapheme_Extend # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA +0CD5..0CD6 ; Grapheme_Extend # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK +0CE2..0CE3 ; Grapheme_Extend # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL +0D00..0D01 ; Grapheme_Extend # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU +0D3B..0D3C ; Grapheme_Extend # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA +0D3E ; Grapheme_Extend # Mc MALAYALAM VOWEL SIGN AA +0D41..0D44 ; Grapheme_Extend # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR +0D4D ; Grapheme_Extend # Mn MALAYALAM SIGN VIRAMA +0D57 ; Grapheme_Extend # Mc MALAYALAM AU LENGTH MARK +0D62..0D63 ; Grapheme_Extend # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL +0D81 ; Grapheme_Extend # Mn SINHALA SIGN CANDRABINDU +0DCA ; Grapheme_Extend # Mn SINHALA SIGN AL-LAKUNA +0DCF ; Grapheme_Extend # Mc SINHALA VOWEL SIGN AELA-PILLA +0DD2..0DD4 ; Grapheme_Extend # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA +0DD6 ; Grapheme_Extend # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA +0DDF ; Grapheme_Extend # Mc SINHALA VOWEL SIGN GAYANUKITTA +0E31 ; Grapheme_Extend # Mn THAI CHARACTER MAI HAN-AKAT +0E34..0E3A ; Grapheme_Extend # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU +0E47..0E4E ; Grapheme_Extend # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN +0EB1 ; Grapheme_Extend # Mn LAO VOWEL SIGN MAI KAN +0EB4..0EBC ; Grapheme_Extend # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO +0EC8..0ECE ; Grapheme_Extend # Mn [7] LAO TONE MAI EK..LAO YAMAKKAN +0F18..0F19 ; Grapheme_Extend # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS +0F35 ; Grapheme_Extend # Mn TIBETAN MARK NGAS BZUNG NYI ZLA +0F37 ; Grapheme_Extend # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS +0F39 ; Grapheme_Extend # Mn TIBETAN MARK TSA -PHRU +0F71..0F7E ; Grapheme_Extend # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO +0F80..0F84 ; Grapheme_Extend # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA +0F86..0F87 ; Grapheme_Extend # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS +0F8D..0F97 ; Grapheme_Extend # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA +0F99..0FBC ; Grapheme_Extend # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA +0FC6 ; Grapheme_Extend # Mn TIBETAN SYMBOL PADMA GDAN +102D..1030 ; Grapheme_Extend # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU +1032..1037 ; Grapheme_Extend # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW +1039..103A ; Grapheme_Extend # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT +103D..103E ; Grapheme_Extend # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA +1058..1059 ; Grapheme_Extend # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL +105E..1060 ; Grapheme_Extend # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA +1071..1074 ; Grapheme_Extend # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE +1082 ; Grapheme_Extend # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA +1085..1086 ; Grapheme_Extend # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y +108D ; Grapheme_Extend # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE +109D ; Grapheme_Extend # Mn MYANMAR VOWEL SIGN AITON AI +135D..135F ; Grapheme_Extend # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK +1712..1714 ; Grapheme_Extend # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA +1715 ; Grapheme_Extend # Mc TAGALOG SIGN PAMUDPOD +1732..1733 ; Grapheme_Extend # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1734 ; Grapheme_Extend # Mc HANUNOO SIGN PAMUDPOD +1752..1753 ; Grapheme_Extend # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U +1772..1773 ; Grapheme_Extend # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U +17B4..17B5 ; Grapheme_Extend # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA +17B7..17BD ; Grapheme_Extend # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA +17C6 ; Grapheme_Extend # Mn KHMER SIGN NIKAHIT +17C9..17D3 ; Grapheme_Extend # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT +17DD ; Grapheme_Extend # Mn KHMER SIGN ATTHACAN +180B..180D ; Grapheme_Extend # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; Grapheme_Extend # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR +1885..1886 ; Grapheme_Extend # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA +18A9 ; Grapheme_Extend # Mn MONGOLIAN LETTER ALI GALI DAGALGA +1920..1922 ; Grapheme_Extend # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U +1927..1928 ; Grapheme_Extend # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O +1932 ; Grapheme_Extend # Mn LIMBU SMALL LETTER ANUSVARA +1939..193B ; Grapheme_Extend # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I +1A17..1A18 ; Grapheme_Extend # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U +1A1B ; Grapheme_Extend # Mn BUGINESE VOWEL SIGN AE +1A56 ; Grapheme_Extend # Mn TAI THAM CONSONANT SIGN MEDIAL LA +1A58..1A5E ; Grapheme_Extend # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA +1A60 ; Grapheme_Extend # Mn TAI THAM SIGN SAKOT +1A62 ; Grapheme_Extend # Mn TAI THAM VOWEL SIGN MAI SAT +1A65..1A6C ; Grapheme_Extend # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW +1A73..1A7C ; Grapheme_Extend # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN +1A7F ; Grapheme_Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT +1AB0..1ABD ; Grapheme_Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW +1ABE ; Grapheme_Extend # Me COMBINING PARENTHESES OVERLAY +1ABF..1ADD ; Grapheme_Extend # Mn [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; Grapheme_Extend # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE +1B00..1B03 ; Grapheme_Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG +1B34 ; Grapheme_Extend # Mn BALINESE SIGN REREKAN +1B35 ; Grapheme_Extend # Mc BALINESE VOWEL SIGN TEDUNG +1B36..1B3A ; Grapheme_Extend # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA +1B3B ; Grapheme_Extend # Mc BALINESE VOWEL SIGN RA REPA TEDUNG +1B3C ; Grapheme_Extend # Mn BALINESE VOWEL SIGN LA LENGA +1B3D ; Grapheme_Extend # Mc BALINESE VOWEL SIGN LA LENGA TEDUNG +1B42 ; Grapheme_Extend # Mn BALINESE VOWEL SIGN PEPET +1B43..1B44 ; Grapheme_Extend # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG +1B6B..1B73 ; Grapheme_Extend # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG +1B80..1B81 ; Grapheme_Extend # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR +1BA2..1BA5 ; Grapheme_Extend # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU +1BA8..1BA9 ; Grapheme_Extend # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG +1BAA ; Grapheme_Extend # Mc SUNDANESE SIGN PAMAAEH +1BAB..1BAD ; Grapheme_Extend # Mn [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA +1BE6 ; Grapheme_Extend # Mn BATAK SIGN TOMPI +1BE8..1BE9 ; Grapheme_Extend # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE +1BED ; Grapheme_Extend # Mn BATAK VOWEL SIGN KARO O +1BEF..1BF1 ; Grapheme_Extend # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H +1BF2..1BF3 ; Grapheme_Extend # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN +1C2C..1C33 ; Grapheme_Extend # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T +1C36..1C37 ; Grapheme_Extend # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA +1CD0..1CD2 ; Grapheme_Extend # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA +1CD4..1CE0 ; Grapheme_Extend # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA +1CE2..1CE8 ; Grapheme_Extend # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL +1CED ; Grapheme_Extend # Mn VEDIC SIGN TIRYAK +1CF4 ; Grapheme_Extend # Mn VEDIC TONE CANDRA ABOVE +1CF8..1CF9 ; Grapheme_Extend # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE +1DC0..1DFF ; Grapheme_Extend # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +200C ; Grapheme_Extend # Cf ZERO WIDTH NON-JOINER +20D0..20DC ; Grapheme_Extend # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE +20DD..20E0 ; Grapheme_Extend # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH +20E1 ; Grapheme_Extend # Mn COMBINING LEFT RIGHT ARROW ABOVE +20E2..20E4 ; Grapheme_Extend # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE +20E5..20F0 ; Grapheme_Extend # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE +2CEF..2CF1 ; Grapheme_Extend # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS +2D7F ; Grapheme_Extend # Mn TIFINAGH CONSONANT JOINER +2DE0..2DFF ; Grapheme_Extend # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS +302A..302D ; Grapheme_Extend # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK +302E..302F ; Grapheme_Extend # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK +3099..309A ; Grapheme_Extend # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +A66F ; Grapheme_Extend # Mn COMBINING CYRILLIC VZMET +A670..A672 ; Grapheme_Extend # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN +A674..A67D ; Grapheme_Extend # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK +A69E..A69F ; Grapheme_Extend # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E +A6F0..A6F1 ; Grapheme_Extend # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS +A802 ; Grapheme_Extend # Mn SYLOTI NAGRI SIGN DVISVARA +A806 ; Grapheme_Extend # Mn SYLOTI NAGRI SIGN HASANTA +A80B ; Grapheme_Extend # Mn SYLOTI NAGRI SIGN ANUSVARA +A825..A826 ; Grapheme_Extend # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E +A82C ; Grapheme_Extend # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA +A8C4..A8C5 ; Grapheme_Extend # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU +A8E0..A8F1 ; Grapheme_Extend # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA +A8FF ; Grapheme_Extend # Mn DEVANAGARI VOWEL SIGN AY +A926..A92D ; Grapheme_Extend # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU +A947..A951 ; Grapheme_Extend # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R +A953 ; Grapheme_Extend # Mc REJANG VIRAMA +A980..A982 ; Grapheme_Extend # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR +A9B3 ; Grapheme_Extend # Mn JAVANESE SIGN CECAK TELU +A9B6..A9B9 ; Grapheme_Extend # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT +A9BC..A9BD ; Grapheme_Extend # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET +A9C0 ; Grapheme_Extend # Mc JAVANESE PANGKON +A9E5 ; Grapheme_Extend # Mn MYANMAR SIGN SHAN SAW +AA29..AA2E ; Grapheme_Extend # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE +AA31..AA32 ; Grapheme_Extend # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE +AA35..AA36 ; Grapheme_Extend # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA +AA43 ; Grapheme_Extend # Mn CHAM CONSONANT SIGN FINAL NG +AA4C ; Grapheme_Extend # Mn CHAM CONSONANT SIGN FINAL M +AA7C ; Grapheme_Extend # Mn MYANMAR SIGN TAI LAING TONE-2 +AAB0 ; Grapheme_Extend # Mn TAI VIET MAI KANG +AAB2..AAB4 ; Grapheme_Extend # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U +AAB7..AAB8 ; Grapheme_Extend # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA +AABE..AABF ; Grapheme_Extend # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK +AAC1 ; Grapheme_Extend # Mn TAI VIET TONE MAI THO +AAEC..AAED ; Grapheme_Extend # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI +AAF6 ; Grapheme_Extend # Mn MEETEI MAYEK VIRAMA +ABE5 ; Grapheme_Extend # Mn MEETEI MAYEK VOWEL SIGN ANAP +ABE8 ; Grapheme_Extend # Mn MEETEI MAYEK VOWEL SIGN UNAP +ABED ; Grapheme_Extend # Mn MEETEI MAYEK APUN IYEK +FB1E ; Grapheme_Extend # Mn HEBREW POINT JUDEO-SPANISH VARIKA +FE00..FE0F ; Grapheme_Extend # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 +FE20..FE2F ; Grapheme_Extend # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF +FF9E..FF9F ; Grapheme_Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +101FD ; Grapheme_Extend # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE +102E0 ; Grapheme_Extend # Mn COPTIC EPACT THOUSANDS MARK +10376..1037A ; Grapheme_Extend # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII +10A01..10A03 ; Grapheme_Extend # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R +10A05..10A06 ; Grapheme_Extend # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A0C..10A0F ; Grapheme_Extend # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA +10A38..10A3A ; Grapheme_Extend # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW +10A3F ; Grapheme_Extend # Mn KHAROSHTHI VIRAMA +10AE5..10AE6 ; Grapheme_Extend # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW +10D24..10D27 ; Grapheme_Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI +10D69..10D6D ; Grapheme_Extend # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK +10EAB..10EAC ; Grapheme_Extend # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK +10EFA..10EFF ; Grapheme_Extend # Mn [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA +10F46..10F50 ; Grapheme_Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F82..10F85 ; Grapheme_Extend # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW +11001 ; Grapheme_Extend # Mn BRAHMI SIGN ANUSVARA +11038..11046 ; Grapheme_Extend # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11070 ; Grapheme_Extend # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11073..11074 ; Grapheme_Extend # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +1107F..11081 ; Grapheme_Extend # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA +110B3..110B6 ; Grapheme_Extend # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI +110B9..110BA ; Grapheme_Extend # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; Grapheme_Extend # Mn KAITHI VOWEL SIGN VOCALIC R +11100..11102 ; Grapheme_Extend # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA +11127..1112B ; Grapheme_Extend # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU +1112D..11134 ; Grapheme_Extend # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA +11173 ; Grapheme_Extend # Mn MAHAJANI SIGN NUKTA +11180..11181 ; Grapheme_Extend # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA +111B6..111BE ; Grapheme_Extend # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O +111C0 ; Grapheme_Extend # Mc SHARADA SIGN VIRAMA +111C9..111CC ; Grapheme_Extend # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK +111CF ; Grapheme_Extend # Mn SHARADA SIGN INVERTED CANDRABINDU +1122F..11231 ; Grapheme_Extend # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI +11234 ; Grapheme_Extend # Mn KHOJKI SIGN ANUSVARA +11235 ; Grapheme_Extend # Mc KHOJKI SIGN VIRAMA +11236..11237 ; Grapheme_Extend # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA +1123E ; Grapheme_Extend # Mn KHOJKI SIGN SUKUN +11241 ; Grapheme_Extend # Mn KHOJKI VOWEL SIGN VOCALIC R +112DF ; Grapheme_Extend # Mn KHUDAWADI SIGN ANUSVARA +112E3..112EA ; Grapheme_Extend # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA +11300..11301 ; Grapheme_Extend # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU +1133B..1133C ; Grapheme_Extend # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA +1133E ; Grapheme_Extend # Mc GRANTHA VOWEL SIGN AA +11340 ; Grapheme_Extend # Mn GRANTHA VOWEL SIGN II +1134D ; Grapheme_Extend # Mc GRANTHA SIGN VIRAMA +11357 ; Grapheme_Extend # Mc GRANTHA AU LENGTH MARK +11366..1136C ; Grapheme_Extend # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX +11370..11374 ; Grapheme_Extend # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA +113B8 ; Grapheme_Extend # Mc TULU-TIGALARI VOWEL SIGN AA +113BB..113C0 ; Grapheme_Extend # Mn [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL +113C2 ; Grapheme_Extend # Mc TULU-TIGALARI VOWEL SIGN EE +113C5 ; Grapheme_Extend # Mc TULU-TIGALARI VOWEL SIGN AI +113C7..113C9 ; Grapheme_Extend # Mc [3] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI AU LENGTH MARK +113CE ; Grapheme_Extend # Mn TULU-TIGALARI SIGN VIRAMA +113CF ; Grapheme_Extend # Mc TULU-TIGALARI SIGN LOOPED VIRAMA +113D0 ; Grapheme_Extend # Mn TULU-TIGALARI CONJOINER +113D2 ; Grapheme_Extend # Mn TULU-TIGALARI GEMINATION MARK +113E1..113E2 ; Grapheme_Extend # Mn [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA +11438..1143F ; Grapheme_Extend # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI +11442..11444 ; Grapheme_Extend # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA +11446 ; Grapheme_Extend # Mn NEWA SIGN NUKTA +1145E ; Grapheme_Extend # Mn NEWA SANDHI MARK +114B0 ; Grapheme_Extend # Mc TIRHUTA VOWEL SIGN AA +114B3..114B8 ; Grapheme_Extend # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL +114BA ; Grapheme_Extend # Mn TIRHUTA VOWEL SIGN SHORT E +114BD ; Grapheme_Extend # Mc TIRHUTA VOWEL SIGN SHORT O +114BF..114C0 ; Grapheme_Extend # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA +114C2..114C3 ; Grapheme_Extend # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA +115AF ; Grapheme_Extend # Mc SIDDHAM VOWEL SIGN AA +115B2..115B5 ; Grapheme_Extend # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR +115BC..115BD ; Grapheme_Extend # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA +115BF..115C0 ; Grapheme_Extend # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA +115DC..115DD ; Grapheme_Extend # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU +11633..1163A ; Grapheme_Extend # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI +1163D ; Grapheme_Extend # Mn MODI SIGN ANUSVARA +1163F..11640 ; Grapheme_Extend # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA +116AB ; Grapheme_Extend # Mn TAKRI SIGN ANUSVARA +116AD ; Grapheme_Extend # Mn TAKRI VOWEL SIGN AA +116B0..116B5 ; Grapheme_Extend # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU +116B6 ; Grapheme_Extend # Mc TAKRI SIGN VIRAMA +116B7 ; Grapheme_Extend # Mn TAKRI SIGN NUKTA +1171D ; Grapheme_Extend # Mn AHOM CONSONANT SIGN MEDIAL LA +1171F ; Grapheme_Extend # Mn AHOM CONSONANT SIGN MEDIAL LIGATING RA +11722..11725 ; Grapheme_Extend # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU +11727..1172B ; Grapheme_Extend # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER +1182F..11837 ; Grapheme_Extend # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA +11839..1183A ; Grapheme_Extend # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA +11930 ; Grapheme_Extend # Mc DIVES AKURU VOWEL SIGN AA +1193B..1193C ; Grapheme_Extend # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU +1193D ; Grapheme_Extend # Mc DIVES AKURU SIGN HALANTA +1193E ; Grapheme_Extend # Mn DIVES AKURU VIRAMA +11943 ; Grapheme_Extend # Mn DIVES AKURU SIGN NUKTA +119D4..119D7 ; Grapheme_Extend # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR +119DA..119DB ; Grapheme_Extend # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI +119E0 ; Grapheme_Extend # Mn NANDINAGARI SIGN VIRAMA +11A01..11A0A ; Grapheme_Extend # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK +11A33..11A38 ; Grapheme_Extend # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA +11A3B..11A3E ; Grapheme_Extend # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA +11A47 ; Grapheme_Extend # Mn ZANABAZAR SQUARE SUBJOINER +11A51..11A56 ; Grapheme_Extend # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE +11A59..11A5B ; Grapheme_Extend # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK +11A8A..11A96 ; Grapheme_Extend # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA +11A98..11A99 ; Grapheme_Extend # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER +11B60 ; Grapheme_Extend # Mn SHARADA VOWEL SIGN OE +11B62..11B64 ; Grapheme_Extend # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B66 ; Grapheme_Extend # Mn SHARADA VOWEL SIGN CANDRA E +11C30..11C36 ; Grapheme_Extend # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L +11C38..11C3D ; Grapheme_Extend # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA +11C3F ; Grapheme_Extend # Mn BHAIKSUKI SIGN VIRAMA +11C92..11CA7 ; Grapheme_Extend # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA +11CAA..11CB0 ; Grapheme_Extend # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA +11CB2..11CB3 ; Grapheme_Extend # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E +11CB5..11CB6 ; Grapheme_Extend # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU +11D31..11D36 ; Grapheme_Extend # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R +11D3A ; Grapheme_Extend # Mn MASARAM GONDI VOWEL SIGN E +11D3C..11D3D ; Grapheme_Extend # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O +11D3F..11D45 ; Grapheme_Extend # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA +11D47 ; Grapheme_Extend # Mn MASARAM GONDI RA-KARA +11D90..11D91 ; Grapheme_Extend # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI +11D95 ; Grapheme_Extend # Mn GUNJALA GONDI SIGN ANUSVARA +11D97 ; Grapheme_Extend # Mn GUNJALA GONDI VIRAMA +11EF3..11EF4 ; Grapheme_Extend # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U +11F00..11F01 ; Grapheme_Extend # Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA +11F36..11F3A ; Grapheme_Extend # Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R +11F40 ; Grapheme_Extend # Mn KAWI VOWEL SIGN EU +11F41 ; Grapheme_Extend # Mc KAWI SIGN KILLER +11F42 ; Grapheme_Extend # Mn KAWI CONJOINER +11F5A ; Grapheme_Extend # Mn KAWI SIGN NUKTA +13440 ; Grapheme_Extend # Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY +13447..13455 ; Grapheme_Extend # Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED +1611E..16129 ; Grapheme_Extend # Mn [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK +1612D..1612F ; Grapheme_Extend # Mn [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA +16AF0..16AF4 ; Grapheme_Extend # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE +16B30..16B36 ; Grapheme_Extend # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM +16F4F ; Grapheme_Extend # Mn MIAO SIGN CONSONANT MODIFIER BAR +16F8F..16F92 ; Grapheme_Extend # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW +16FE4 ; Grapheme_Extend # Mn KHITAN SMALL SCRIPT FILLER +16FF0..16FF1 ; Grapheme_Extend # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY +1BC9D..1BC9E ; Grapheme_Extend # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1CF00..1CF2D ; Grapheme_Extend # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; Grapheme_Extend # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG +1D165..1D166 ; Grapheme_Extend # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM +1D167..1D169 ; Grapheme_Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 +1D16D..1D172 ; Grapheme_Extend # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 +1D17B..1D182 ; Grapheme_Extend # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE +1D185..1D18B ; Grapheme_Extend # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE +1D1AA..1D1AD ; Grapheme_Extend # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO +1D242..1D244 ; Grapheme_Extend # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME +1DA00..1DA36 ; Grapheme_Extend # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN +1DA3B..1DA6C ; Grapheme_Extend # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT +1DA75 ; Grapheme_Extend # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS +1DA84 ; Grapheme_Extend # Mn SIGNWRITING LOCATION HEAD NECK +1DA9B..1DA9F ; Grapheme_Extend # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 +1DAA1..1DAAF ; Grapheme_Extend # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 +1E000..1E006 ; Grapheme_Extend # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE +1E008..1E018 ; Grapheme_Extend # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU +1E01B..1E021 ; Grapheme_Extend # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI +1E023..1E024 ; Grapheme_Extend # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS +1E026..1E02A ; Grapheme_Extend # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA +1E08F ; Grapheme_Extend # Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +1E130..1E136 ; Grapheme_Extend # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E2AE ; Grapheme_Extend # Mn TOTO SIGN RISING TONE +1E2EC..1E2EF ; Grapheme_Extend # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI +1E4EC..1E4EF ; Grapheme_Extend # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH +1E5EE..1E5EF ; Grapheme_Extend # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR +1E6E3 ; Grapheme_Extend # Mn TAI YO SIGN UE +1E6E6 ; Grapheme_Extend # Mn TAI YO SIGN AU +1E6EE..1E6EF ; Grapheme_Extend # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F5 ; Grapheme_Extend # Mn TAI YO SIGN OM +1E8D0..1E8D6 ; Grapheme_Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS +1E944..1E94A ; Grapheme_Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA +E0020..E007F ; Grapheme_Extend # Cf [96] TAG SPACE..CANCEL TAG +E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 + +# Total code points: 2232 + +# ================================================ + +# Derived Property: Grapheme_Base +# Generated from: [0..10FFFF] - Cc - Cf - Cs - Co - Cn - Zl - Zp - Grapheme_Extend +# Note: depending on an application's interpretation of Co (private use), +# they may be either in Grapheme_Base, or in Grapheme_Extend, or in neither. + +0020 ; Grapheme_Base # Zs SPACE +0021..0023 ; Grapheme_Base # Po [3] EXCLAMATION MARK..NUMBER SIGN +0024 ; Grapheme_Base # Sc DOLLAR SIGN +0025..0027 ; Grapheme_Base # Po [3] PERCENT SIGN..APOSTROPHE +0028 ; Grapheme_Base # Ps LEFT PARENTHESIS +0029 ; Grapheme_Base # Pe RIGHT PARENTHESIS +002A ; Grapheme_Base # Po ASTERISK +002B ; Grapheme_Base # Sm PLUS SIGN +002C ; Grapheme_Base # Po COMMA +002D ; Grapheme_Base # Pd HYPHEN-MINUS +002E..002F ; Grapheme_Base # Po [2] FULL STOP..SOLIDUS +0030..0039 ; Grapheme_Base # Nd [10] DIGIT ZERO..DIGIT NINE +003A..003B ; Grapheme_Base # Po [2] COLON..SEMICOLON +003C..003E ; Grapheme_Base # Sm [3] LESS-THAN SIGN..GREATER-THAN SIGN +003F..0040 ; Grapheme_Base # Po [2] QUESTION MARK..COMMERCIAL AT +0041..005A ; Grapheme_Base # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z +005B ; Grapheme_Base # Ps LEFT SQUARE BRACKET +005C ; Grapheme_Base # Po REVERSE SOLIDUS +005D ; Grapheme_Base # Pe RIGHT SQUARE BRACKET +005E ; Grapheme_Base # Sk CIRCUMFLEX ACCENT +005F ; Grapheme_Base # Pc LOW LINE +0060 ; Grapheme_Base # Sk GRAVE ACCENT +0061..007A ; Grapheme_Base # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z +007B ; Grapheme_Base # Ps LEFT CURLY BRACKET +007C ; Grapheme_Base # Sm VERTICAL LINE +007D ; Grapheme_Base # Pe RIGHT CURLY BRACKET +007E ; Grapheme_Base # Sm TILDE +00A0 ; Grapheme_Base # Zs NO-BREAK SPACE +00A1 ; Grapheme_Base # Po INVERTED EXCLAMATION MARK +00A2..00A5 ; Grapheme_Base # Sc [4] CENT SIGN..YEN SIGN +00A6 ; Grapheme_Base # So BROKEN BAR +00A7 ; Grapheme_Base # Po SECTION SIGN +00A8 ; Grapheme_Base # Sk DIAERESIS +00A9 ; Grapheme_Base # So COPYRIGHT SIGN +00AA ; Grapheme_Base # Lo FEMININE ORDINAL INDICATOR +00AB ; Grapheme_Base # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +00AC ; Grapheme_Base # Sm NOT SIGN +00AE ; Grapheme_Base # So REGISTERED SIGN +00AF ; Grapheme_Base # Sk MACRON +00B0 ; Grapheme_Base # So DEGREE SIGN +00B1 ; Grapheme_Base # Sm PLUS-MINUS SIGN +00B2..00B3 ; Grapheme_Base # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE +00B4 ; Grapheme_Base # Sk ACUTE ACCENT +00B5 ; Grapheme_Base # L& MICRO SIGN +00B6..00B7 ; Grapheme_Base # Po [2] PILCROW SIGN..MIDDLE DOT +00B8 ; Grapheme_Base # Sk CEDILLA +00B9 ; Grapheme_Base # No SUPERSCRIPT ONE +00BA ; Grapheme_Base # Lo MASCULINE ORDINAL INDICATOR +00BB ; Grapheme_Base # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +00BC..00BE ; Grapheme_Base # No [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS +00BF ; Grapheme_Base # Po INVERTED QUESTION MARK +00C0..00D6 ; Grapheme_Base # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS +00D7 ; Grapheme_Base # Sm MULTIPLICATION SIGN +00D8..00F6 ; Grapheme_Base # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS +00F7 ; Grapheme_Base # Sm DIVISION SIGN +00F8..01BA ; Grapheme_Base # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL +01BB ; Grapheme_Base # Lo LATIN LETTER TWO WITH STROKE +01BC..01BF ; Grapheme_Base # L& [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN +01C0..01C3 ; Grapheme_Base # Lo [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK +01C4..0293 ; Grapheme_Base # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL +0294..0295 ; Grapheme_Base # Lo [2] LATIN LETTER GLOTTAL STOP..LATIN LETTER PHARYNGEAL VOICED FRICATIVE +0296..02AF ; Grapheme_Base # L& [26] LATIN LETTER INVERTED GLOTTAL STOP..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +02B0..02C1 ; Grapheme_Base # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP +02C2..02C5 ; Grapheme_Base # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD +02C6..02D1 ; Grapheme_Base # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON +02D2..02DF ; Grapheme_Base # Sk [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT +02E0..02E4 ; Grapheme_Base # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +02E5..02EB ; Grapheme_Base # Sk [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK +02EC ; Grapheme_Base # Lm MODIFIER LETTER VOICING +02ED ; Grapheme_Base # Sk MODIFIER LETTER UNASPIRATED +02EE ; Grapheme_Base # Lm MODIFIER LETTER DOUBLE APOSTROPHE +02EF..02FF ; Grapheme_Base # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW +0370..0373 ; Grapheme_Base # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI +0374 ; Grapheme_Base # Lm GREEK NUMERAL SIGN +0375 ; Grapheme_Base # Sk GREEK LOWER NUMERAL SIGN +0376..0377 ; Grapheme_Base # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +037A ; Grapheme_Base # Lm GREEK YPOGEGRAMMENI +037B..037D ; Grapheme_Base # L& [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +037E ; Grapheme_Base # Po GREEK QUESTION MARK +037F ; Grapheme_Base # L& GREEK CAPITAL LETTER YOT +0384..0385 ; Grapheme_Base # Sk [2] GREEK TONOS..GREEK DIALYTIKA TONOS +0386 ; Grapheme_Base # L& GREEK CAPITAL LETTER ALPHA WITH TONOS +0387 ; Grapheme_Base # Po GREEK ANO TELEIA +0388..038A ; Grapheme_Base # L& [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS +038C ; Grapheme_Base # L& GREEK CAPITAL LETTER OMICRON WITH TONOS +038E..03A1 ; Grapheme_Base # L& [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO +03A3..03F5 ; Grapheme_Base # L& [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL +03F6 ; Grapheme_Base # Sm GREEK REVERSED LUNATE EPSILON SYMBOL +03F7..0481 ; Grapheme_Base # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA +0482 ; Grapheme_Base # So CYRILLIC THOUSANDS SIGN +048A..052F ; Grapheme_Base # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER +0531..0556 ; Grapheme_Base # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH +0559 ; Grapheme_Base # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING +055A..055F ; Grapheme_Base # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK +0560..0588 ; Grapheme_Base # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE +0589 ; Grapheme_Base # Po ARMENIAN FULL STOP +058A ; Grapheme_Base # Pd ARMENIAN HYPHEN +058D..058E ; Grapheme_Base # So [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN +058F ; Grapheme_Base # Sc ARMENIAN DRAM SIGN +05BE ; Grapheme_Base # Pd HEBREW PUNCTUATION MAQAF +05C0 ; Grapheme_Base # Po HEBREW PUNCTUATION PASEQ +05C3 ; Grapheme_Base # Po HEBREW PUNCTUATION SOF PASUQ +05C6 ; Grapheme_Base # Po HEBREW PUNCTUATION NUN HAFUKHA +05D0..05EA ; Grapheme_Base # Lo [27] HEBREW LETTER ALEF..HEBREW LETTER TAV +05EF..05F2 ; Grapheme_Base # Lo [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD +05F3..05F4 ; Grapheme_Base # Po [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM +0606..0608 ; Grapheme_Base # Sm [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY +0609..060A ; Grapheme_Base # Po [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN +060B ; Grapheme_Base # Sc AFGHANI SIGN +060C..060D ; Grapheme_Base # Po [2] ARABIC COMMA..ARABIC DATE SEPARATOR +060E..060F ; Grapheme_Base # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA +061B ; Grapheme_Base # Po ARABIC SEMICOLON +061D..061F ; Grapheme_Base # Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK +0620..063F ; Grapheme_Base # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE +0640 ; Grapheme_Base # Lm ARABIC TATWEEL +0641..064A ; Grapheme_Base # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH +0660..0669 ; Grapheme_Base # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE +066A..066D ; Grapheme_Base # Po [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR +066E..066F ; Grapheme_Base # Lo [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF +0671..06D3 ; Grapheme_Base # Lo [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +06D4 ; Grapheme_Base # Po ARABIC FULL STOP +06D5 ; Grapheme_Base # Lo ARABIC LETTER AE +06DE ; Grapheme_Base # So ARABIC START OF RUB EL HIZB +06E5..06E6 ; Grapheme_Base # Lm [2] ARABIC SMALL WAW..ARABIC SMALL YEH +06E9 ; Grapheme_Base # So ARABIC PLACE OF SAJDAH +06EE..06EF ; Grapheme_Base # Lo [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V +06F0..06F9 ; Grapheme_Base # Nd [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE +06FA..06FC ; Grapheme_Base # Lo [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW +06FD..06FE ; Grapheme_Base # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN +06FF ; Grapheme_Base # Lo ARABIC LETTER HEH WITH INVERTED V +0700..070D ; Grapheme_Base # Po [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS +0710 ; Grapheme_Base # Lo SYRIAC LETTER ALAPH +0712..072F ; Grapheme_Base # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH +074D..07A5 ; Grapheme_Base # Lo [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU +07B1 ; Grapheme_Base # Lo THAANA LETTER NAA +07C0..07C9 ; Grapheme_Base # Nd [10] NKO DIGIT ZERO..NKO DIGIT NINE +07CA..07EA ; Grapheme_Base # Lo [33] NKO LETTER A..NKO LETTER JONA RA +07F4..07F5 ; Grapheme_Base # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE +07F6 ; Grapheme_Base # So NKO SYMBOL OO DENNEN +07F7..07F9 ; Grapheme_Base # Po [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK +07FA ; Grapheme_Base # Lm NKO LAJANYALAN +07FE..07FF ; Grapheme_Base # Sc [2] NKO DOROME SIGN..NKO TAMAN SIGN +0800..0815 ; Grapheme_Base # Lo [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF +081A ; Grapheme_Base # Lm SAMARITAN MODIFIER LETTER EPENTHETIC YUT +0824 ; Grapheme_Base # Lm SAMARITAN MODIFIER LETTER SHORT A +0828 ; Grapheme_Base # Lm SAMARITAN MODIFIER LETTER I +0830..083E ; Grapheme_Base # Po [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU +0840..0858 ; Grapheme_Base # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN +085E ; Grapheme_Base # Po MANDAIC PUNCTUATION +0860..086A ; Grapheme_Base # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA +0870..0887 ; Grapheme_Base # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0888 ; Grapheme_Base # Sk ARABIC RAISED ROUND DOT +0889..088F ; Grapheme_Base # Lo [7] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER NOON WITH RING ABOVE +08A0..08C8 ; Grapheme_Base # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; Grapheme_Base # Lm ARABIC SMALL FARSI YEH +0903 ; Grapheme_Base # Mc DEVANAGARI SIGN VISARGA +0904..0939 ; Grapheme_Base # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA +093B ; Grapheme_Base # Mc DEVANAGARI VOWEL SIGN OOE +093D ; Grapheme_Base # Lo DEVANAGARI SIGN AVAGRAHA +093E..0940 ; Grapheme_Base # Mc [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II +0949..094C ; Grapheme_Base # Mc [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU +094E..094F ; Grapheme_Base # Mc [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW +0950 ; Grapheme_Base # Lo DEVANAGARI OM +0958..0961 ; Grapheme_Base # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL +0964..0965 ; Grapheme_Base # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA +0966..096F ; Grapheme_Base # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE +0970 ; Grapheme_Base # Po DEVANAGARI ABBREVIATION SIGN +0971 ; Grapheme_Base # Lm DEVANAGARI SIGN HIGH SPACING DOT +0972..0980 ; Grapheme_Base # Lo [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI +0982..0983 ; Grapheme_Base # Mc [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA +0985..098C ; Grapheme_Base # Lo [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L +098F..0990 ; Grapheme_Base # Lo [2] BENGALI LETTER E..BENGALI LETTER AI +0993..09A8 ; Grapheme_Base # Lo [22] BENGALI LETTER O..BENGALI LETTER NA +09AA..09B0 ; Grapheme_Base # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA +09B2 ; Grapheme_Base # Lo BENGALI LETTER LA +09B6..09B9 ; Grapheme_Base # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA +09BD ; Grapheme_Base # Lo BENGALI SIGN AVAGRAHA +09BF..09C0 ; Grapheme_Base # Mc [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II +09C7..09C8 ; Grapheme_Base # Mc [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI +09CB..09CC ; Grapheme_Base # Mc [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU +09CE ; Grapheme_Base # Lo BENGALI LETTER KHANDA TA +09DC..09DD ; Grapheme_Base # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF..09E1 ; Grapheme_Base # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL +09E6..09EF ; Grapheme_Base # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE +09F0..09F1 ; Grapheme_Base # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL +09F2..09F3 ; Grapheme_Base # Sc [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN +09F4..09F9 ; Grapheme_Base # No [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN +09FA ; Grapheme_Base # So BENGALI ISSHAR +09FB ; Grapheme_Base # Sc BENGALI GANDA MARK +09FC ; Grapheme_Base # Lo BENGALI LETTER VEDIC ANUSVARA +09FD ; Grapheme_Base # Po BENGALI ABBREVIATION SIGN +0A03 ; Grapheme_Base # Mc GURMUKHI SIGN VISARGA +0A05..0A0A ; Grapheme_Base # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU +0A0F..0A10 ; Grapheme_Base # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI +0A13..0A28 ; Grapheme_Base # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA +0A2A..0A30 ; Grapheme_Base # Lo [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA +0A32..0A33 ; Grapheme_Base # Lo [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA +0A35..0A36 ; Grapheme_Base # Lo [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA +0A38..0A39 ; Grapheme_Base # Lo [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA +0A3E..0A40 ; Grapheme_Base # Mc [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II +0A59..0A5C ; Grapheme_Base # Lo [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA +0A5E ; Grapheme_Base # Lo GURMUKHI LETTER FA +0A66..0A6F ; Grapheme_Base # Nd [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE +0A72..0A74 ; Grapheme_Base # Lo [3] GURMUKHI IRI..GURMUKHI EK ONKAR +0A76 ; Grapheme_Base # Po GURMUKHI ABBREVIATION SIGN +0A83 ; Grapheme_Base # Mc GUJARATI SIGN VISARGA +0A85..0A8D ; Grapheme_Base # Lo [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E +0A8F..0A91 ; Grapheme_Base # Lo [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O +0A93..0AA8 ; Grapheme_Base # Lo [22] GUJARATI LETTER O..GUJARATI LETTER NA +0AAA..0AB0 ; Grapheme_Base # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA +0AB2..0AB3 ; Grapheme_Base # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA +0AB5..0AB9 ; Grapheme_Base # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA +0ABD ; Grapheme_Base # Lo GUJARATI SIGN AVAGRAHA +0ABE..0AC0 ; Grapheme_Base # Mc [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II +0AC9 ; Grapheme_Base # Mc GUJARATI VOWEL SIGN CANDRA O +0ACB..0ACC ; Grapheme_Base # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU +0AD0 ; Grapheme_Base # Lo GUJARATI OM +0AE0..0AE1 ; Grapheme_Base # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL +0AE6..0AEF ; Grapheme_Base # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE +0AF0 ; Grapheme_Base # Po GUJARATI ABBREVIATION SIGN +0AF1 ; Grapheme_Base # Sc GUJARATI RUPEE SIGN +0AF9 ; Grapheme_Base # Lo GUJARATI LETTER ZHA +0B02..0B03 ; Grapheme_Base # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA +0B05..0B0C ; Grapheme_Base # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L +0B0F..0B10 ; Grapheme_Base # Lo [2] ORIYA LETTER E..ORIYA LETTER AI +0B13..0B28 ; Grapheme_Base # Lo [22] ORIYA LETTER O..ORIYA LETTER NA +0B2A..0B30 ; Grapheme_Base # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA +0B32..0B33 ; Grapheme_Base # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA +0B35..0B39 ; Grapheme_Base # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA +0B3D ; Grapheme_Base # Lo ORIYA SIGN AVAGRAHA +0B40 ; Grapheme_Base # Mc ORIYA VOWEL SIGN II +0B47..0B48 ; Grapheme_Base # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI +0B4B..0B4C ; Grapheme_Base # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU +0B5C..0B5D ; Grapheme_Base # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0B5F..0B61 ; Grapheme_Base # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL +0B66..0B6F ; Grapheme_Base # Nd [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE +0B70 ; Grapheme_Base # So ORIYA ISSHAR +0B71 ; Grapheme_Base # Lo ORIYA LETTER WA +0B72..0B77 ; Grapheme_Base # No [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS +0B83 ; Grapheme_Base # Lo TAMIL SIGN VISARGA +0B85..0B8A ; Grapheme_Base # Lo [6] TAMIL LETTER A..TAMIL LETTER UU +0B8E..0B90 ; Grapheme_Base # Lo [3] TAMIL LETTER E..TAMIL LETTER AI +0B92..0B95 ; Grapheme_Base # Lo [4] TAMIL LETTER O..TAMIL LETTER KA +0B99..0B9A ; Grapheme_Base # Lo [2] TAMIL LETTER NGA..TAMIL LETTER CA +0B9C ; Grapheme_Base # Lo TAMIL LETTER JA +0B9E..0B9F ; Grapheme_Base # Lo [2] TAMIL LETTER NYA..TAMIL LETTER TTA +0BA3..0BA4 ; Grapheme_Base # Lo [2] TAMIL LETTER NNA..TAMIL LETTER TA +0BA8..0BAA ; Grapheme_Base # Lo [3] TAMIL LETTER NA..TAMIL LETTER PA +0BAE..0BB9 ; Grapheme_Base # Lo [12] TAMIL LETTER MA..TAMIL LETTER HA +0BBF ; Grapheme_Base # Mc TAMIL VOWEL SIGN I +0BC1..0BC2 ; Grapheme_Base # Mc [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU +0BC6..0BC8 ; Grapheme_Base # Mc [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI +0BCA..0BCC ; Grapheme_Base # Mc [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU +0BD0 ; Grapheme_Base # Lo TAMIL OM +0BE6..0BEF ; Grapheme_Base # Nd [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE +0BF0..0BF2 ; Grapheme_Base # No [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND +0BF3..0BF8 ; Grapheme_Base # So [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN +0BF9 ; Grapheme_Base # Sc TAMIL RUPEE SIGN +0BFA ; Grapheme_Base # So TAMIL NUMBER SIGN +0C01..0C03 ; Grapheme_Base # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA +0C05..0C0C ; Grapheme_Base # Lo [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L +0C0E..0C10 ; Grapheme_Base # Lo [3] TELUGU LETTER E..TELUGU LETTER AI +0C12..0C28 ; Grapheme_Base # Lo [23] TELUGU LETTER O..TELUGU LETTER NA +0C2A..0C39 ; Grapheme_Base # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA +0C3D ; Grapheme_Base # Lo TELUGU SIGN AVAGRAHA +0C41..0C44 ; Grapheme_Base # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR +0C58..0C5A ; Grapheme_Base # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5C..0C5D ; Grapheme_Base # Lo [2] TELUGU ARCHAIC SHRII..TELUGU LETTER NAKAARA POLLU +0C60..0C61 ; Grapheme_Base # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL +0C66..0C6F ; Grapheme_Base # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE +0C77 ; Grapheme_Base # Po TELUGU SIGN SIDDHAM +0C78..0C7E ; Grapheme_Base # No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR +0C7F ; Grapheme_Base # So TELUGU SIGN TUUMU +0C80 ; Grapheme_Base # Lo KANNADA SIGN SPACING CANDRABINDU +0C82..0C83 ; Grapheme_Base # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA +0C84 ; Grapheme_Base # Po KANNADA SIGN SIDDHAM +0C85..0C8C ; Grapheme_Base # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L +0C8E..0C90 ; Grapheme_Base # Lo [3] KANNADA LETTER E..KANNADA LETTER AI +0C92..0CA8 ; Grapheme_Base # Lo [23] KANNADA LETTER O..KANNADA LETTER NA +0CAA..0CB3 ; Grapheme_Base # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA +0CB5..0CB9 ; Grapheme_Base # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA +0CBD ; Grapheme_Base # Lo KANNADA SIGN AVAGRAHA +0CBE ; Grapheme_Base # Mc KANNADA VOWEL SIGN AA +0CC1 ; Grapheme_Base # Mc KANNADA VOWEL SIGN U +0CC3..0CC4 ; Grapheme_Base # Mc [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR +0CDC..0CDE ; Grapheme_Base # Lo [3] KANNADA ARCHAIC SHRII..KANNADA LETTER FA +0CE0..0CE1 ; Grapheme_Base # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL +0CE6..0CEF ; Grapheme_Base # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE +0CF1..0CF2 ; Grapheme_Base # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA +0CF3 ; Grapheme_Base # Mc KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT +0D02..0D03 ; Grapheme_Base # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA +0D04..0D0C ; Grapheme_Base # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L +0D0E..0D10 ; Grapheme_Base # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI +0D12..0D3A ; Grapheme_Base # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA +0D3D ; Grapheme_Base # Lo MALAYALAM SIGN AVAGRAHA +0D3F..0D40 ; Grapheme_Base # Mc [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II +0D46..0D48 ; Grapheme_Base # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI +0D4A..0D4C ; Grapheme_Base # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU +0D4E ; Grapheme_Base # Lo MALAYALAM LETTER DOT REPH +0D4F ; Grapheme_Base # So MALAYALAM SIGN PARA +0D54..0D56 ; Grapheme_Base # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL +0D58..0D5E ; Grapheme_Base # No [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH +0D5F..0D61 ; Grapheme_Base # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL +0D66..0D6F ; Grapheme_Base # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE +0D70..0D78 ; Grapheme_Base # No [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS +0D79 ; Grapheme_Base # So MALAYALAM DATE MARK +0D7A..0D7F ; Grapheme_Base # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K +0D82..0D83 ; Grapheme_Base # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA +0D85..0D96 ; Grapheme_Base # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA +0D9A..0DB1 ; Grapheme_Base # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA +0DB3..0DBB ; Grapheme_Base # Lo [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA +0DBD ; Grapheme_Base # Lo SINHALA LETTER DANTAJA LAYANNA +0DC0..0DC6 ; Grapheme_Base # Lo [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA +0DD0..0DD1 ; Grapheme_Base # Mc [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA +0DD8..0DDE ; Grapheme_Base # Mc [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA +0DE6..0DEF ; Grapheme_Base # Nd [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE +0DF2..0DF3 ; Grapheme_Base # Mc [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA +0DF4 ; Grapheme_Base # Po SINHALA PUNCTUATION KUNDDALIYA +0E01..0E30 ; Grapheme_Base # Lo [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A +0E32..0E33 ; Grapheme_Base # Lo [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM +0E3F ; Grapheme_Base # Sc THAI CURRENCY SYMBOL BAHT +0E40..0E45 ; Grapheme_Base # Lo [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO +0E46 ; Grapheme_Base # Lm THAI CHARACTER MAIYAMOK +0E4F ; Grapheme_Base # Po THAI CHARACTER FONGMAN +0E50..0E59 ; Grapheme_Base # Nd [10] THAI DIGIT ZERO..THAI DIGIT NINE +0E5A..0E5B ; Grapheme_Base # Po [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT +0E81..0E82 ; Grapheme_Base # Lo [2] LAO LETTER KO..LAO LETTER KHO SUNG +0E84 ; Grapheme_Base # Lo LAO LETTER KHO TAM +0E86..0E8A ; Grapheme_Base # Lo [5] LAO LETTER PALI GHA..LAO LETTER SO TAM +0E8C..0EA3 ; Grapheme_Base # Lo [24] LAO LETTER PALI JHA..LAO LETTER LO LING +0EA5 ; Grapheme_Base # Lo LAO LETTER LO LOOT +0EA7..0EB0 ; Grapheme_Base # Lo [10] LAO LETTER WO..LAO VOWEL SIGN A +0EB2..0EB3 ; Grapheme_Base # Lo [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM +0EBD ; Grapheme_Base # Lo LAO SEMIVOWEL SIGN NYO +0EC0..0EC4 ; Grapheme_Base # Lo [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI +0EC6 ; Grapheme_Base # Lm LAO KO LA +0ED0..0ED9 ; Grapheme_Base # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE +0EDC..0EDF ; Grapheme_Base # Lo [4] LAO HO NO..LAO LETTER KHMU NYO +0F00 ; Grapheme_Base # Lo TIBETAN SYLLABLE OM +0F01..0F03 ; Grapheme_Base # So [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA +0F04..0F12 ; Grapheme_Base # Po [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD +0F13 ; Grapheme_Base # So TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN +0F14 ; Grapheme_Base # Po TIBETAN MARK GTER TSHEG +0F15..0F17 ; Grapheme_Base # So [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS +0F1A..0F1F ; Grapheme_Base # So [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG +0F20..0F29 ; Grapheme_Base # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE +0F2A..0F33 ; Grapheme_Base # No [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO +0F34 ; Grapheme_Base # So TIBETAN MARK BSDUS RTAGS +0F36 ; Grapheme_Base # So TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN +0F38 ; Grapheme_Base # So TIBETAN MARK CHE MGO +0F3A ; Grapheme_Base # Ps TIBETAN MARK GUG RTAGS GYON +0F3B ; Grapheme_Base # Pe TIBETAN MARK GUG RTAGS GYAS +0F3C ; Grapheme_Base # Ps TIBETAN MARK ANG KHANG GYON +0F3D ; Grapheme_Base # Pe TIBETAN MARK ANG KHANG GYAS +0F3E..0F3F ; Grapheme_Base # Mc [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES +0F40..0F47 ; Grapheme_Base # Lo [8] TIBETAN LETTER KA..TIBETAN LETTER JA +0F49..0F6C ; Grapheme_Base # Lo [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA +0F7F ; Grapheme_Base # Mc TIBETAN SIGN RNAM BCAD +0F85 ; Grapheme_Base # Po TIBETAN MARK PALUTA +0F88..0F8C ; Grapheme_Base # Lo [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN +0FBE..0FC5 ; Grapheme_Base # So [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE +0FC7..0FCC ; Grapheme_Base # So [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL +0FCE..0FCF ; Grapheme_Base # So [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM +0FD0..0FD4 ; Grapheme_Base # Po [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA +0FD5..0FD8 ; Grapheme_Base # So [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS +0FD9..0FDA ; Grapheme_Base # Po [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS +1000..102A ; Grapheme_Base # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU +102B..102C ; Grapheme_Base # Mc [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA +1031 ; Grapheme_Base # Mc MYANMAR VOWEL SIGN E +1038 ; Grapheme_Base # Mc MYANMAR SIGN VISARGA +103B..103C ; Grapheme_Base # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA +103F ; Grapheme_Base # Lo MYANMAR LETTER GREAT SA +1040..1049 ; Grapheme_Base # Nd [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE +104A..104F ; Grapheme_Base # Po [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE +1050..1055 ; Grapheme_Base # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL +1056..1057 ; Grapheme_Base # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR +105A..105D ; Grapheme_Base # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE +1061 ; Grapheme_Base # Lo MYANMAR LETTER SGAW KAREN SHA +1062..1064 ; Grapheme_Base # Mc [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO +1065..1066 ; Grapheme_Base # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA +1067..106D ; Grapheme_Base # Mc [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5 +106E..1070 ; Grapheme_Base # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA +1075..1081 ; Grapheme_Base # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA +1083..1084 ; Grapheme_Base # Mc [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E +1087..108C ; Grapheme_Base # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3 +108E ; Grapheme_Base # Lo MYANMAR LETTER RUMAI PALAUNG FA +108F ; Grapheme_Base # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5 +1090..1099 ; Grapheme_Base # Nd [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE +109A..109C ; Grapheme_Base # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A +109E..109F ; Grapheme_Base # So [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION +10A0..10C5 ; Grapheme_Base # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE +10C7 ; Grapheme_Base # L& GEORGIAN CAPITAL LETTER YN +10CD ; Grapheme_Base # L& GEORGIAN CAPITAL LETTER AEN +10D0..10FA ; Grapheme_Base # L& [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN +10FB ; Grapheme_Base # Po GEORGIAN PARAGRAPH SEPARATOR +10FC ; Grapheme_Base # Lm MODIFIER LETTER GEORGIAN NAR +10FD..10FF ; Grapheme_Base # L& [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN +1100..1248 ; Grapheme_Base # Lo [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA +124A..124D ; Grapheme_Base # Lo [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE +1250..1256 ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO +1258 ; Grapheme_Base # Lo ETHIOPIC SYLLABLE QHWA +125A..125D ; Grapheme_Base # Lo [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE +1260..1288 ; Grapheme_Base # Lo [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA +128A..128D ; Grapheme_Base # Lo [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE +1290..12B0 ; Grapheme_Base # Lo [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA +12B2..12B5 ; Grapheme_Base # Lo [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE +12B8..12BE ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO +12C0 ; Grapheme_Base # Lo ETHIOPIC SYLLABLE KXWA +12C2..12C5 ; Grapheme_Base # Lo [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE +12C8..12D6 ; Grapheme_Base # Lo [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O +12D8..1310 ; Grapheme_Base # Lo [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA +1312..1315 ; Grapheme_Base # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE +1318..135A ; Grapheme_Base # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA +1360..1368 ; Grapheme_Base # Po [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR +1369..137C ; Grapheme_Base # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND +1380..138F ; Grapheme_Base # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE +1390..1399 ; Grapheme_Base # So [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT +13A0..13F5 ; Grapheme_Base # L& [86] CHEROKEE LETTER A..CHEROKEE LETTER MV +13F8..13FD ; Grapheme_Base # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV +1400 ; Grapheme_Base # Pd CANADIAN SYLLABICS HYPHEN +1401..166C ; Grapheme_Base # Lo [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA +166D ; Grapheme_Base # So CANADIAN SYLLABICS CHI SIGN +166E ; Grapheme_Base # Po CANADIAN SYLLABICS FULL STOP +166F..167F ; Grapheme_Base # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W +1680 ; Grapheme_Base # Zs OGHAM SPACE MARK +1681..169A ; Grapheme_Base # Lo [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH +169B ; Grapheme_Base # Ps OGHAM FEATHER MARK +169C ; Grapheme_Base # Pe OGHAM REVERSED FEATHER MARK +16A0..16EA ; Grapheme_Base # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X +16EB..16ED ; Grapheme_Base # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION +16EE..16F0 ; Grapheme_Base # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL +16F1..16F8 ; Grapheme_Base # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC +1700..1711 ; Grapheme_Base # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA +171F..1731 ; Grapheme_Base # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA +1735..1736 ; Grapheme_Base # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION +1740..1751 ; Grapheme_Base # Lo [18] BUHID LETTER A..BUHID LETTER HA +1760..176C ; Grapheme_Base # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA +176E..1770 ; Grapheme_Base # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA +1780..17B3 ; Grapheme_Base # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU +17B6 ; Grapheme_Base # Mc KHMER VOWEL SIGN AA +17BE..17C5 ; Grapheme_Base # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU +17C7..17C8 ; Grapheme_Base # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU +17D4..17D6 ; Grapheme_Base # Po [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH +17D7 ; Grapheme_Base # Lm KHMER SIGN LEK TOO +17D8..17DA ; Grapheme_Base # Po [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT +17DB ; Grapheme_Base # Sc KHMER CURRENCY SYMBOL RIEL +17DC ; Grapheme_Base # Lo KHMER SIGN AVAKRAHASANYA +17E0..17E9 ; Grapheme_Base # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE +17F0..17F9 ; Grapheme_Base # No [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON +1800..1805 ; Grapheme_Base # Po [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS +1806 ; Grapheme_Base # Pd MONGOLIAN TODO SOFT HYPHEN +1807..180A ; Grapheme_Base # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU +1810..1819 ; Grapheme_Base # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE +1820..1842 ; Grapheme_Base # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI +1843 ; Grapheme_Base # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN +1844..1878 ; Grapheme_Base # Lo [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS +1880..1884 ; Grapheme_Base # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA +1887..18A8 ; Grapheme_Base # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA +18AA ; Grapheme_Base # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA +18B0..18F5 ; Grapheme_Base # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S +1900..191E ; Grapheme_Base # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA +1923..1926 ; Grapheme_Base # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU +1929..192B ; Grapheme_Base # Mc [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA +1930..1931 ; Grapheme_Base # Mc [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA +1933..1938 ; Grapheme_Base # Mc [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA +1940 ; Grapheme_Base # So LIMBU SIGN LOO +1944..1945 ; Grapheme_Base # Po [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK +1946..194F ; Grapheme_Base # Nd [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE +1950..196D ; Grapheme_Base # Lo [30] TAI LE LETTER KA..TAI LE LETTER AI +1970..1974 ; Grapheme_Base # Lo [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6 +1980..19AB ; Grapheme_Base # Lo [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA +19B0..19C9 ; Grapheme_Base # Lo [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2 +19D0..19D9 ; Grapheme_Base # Nd [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE +19DA ; Grapheme_Base # No NEW TAI LUE THAM DIGIT ONE +19DE..19FF ; Grapheme_Base # So [34] NEW TAI LUE SIGN LAE..KHMER SYMBOL DAP-PRAM ROC +1A00..1A16 ; Grapheme_Base # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA +1A19..1A1A ; Grapheme_Base # Mc [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O +1A1E..1A1F ; Grapheme_Base # Po [2] BUGINESE PALLAWA..BUGINESE END OF SECTION +1A20..1A54 ; Grapheme_Base # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA +1A55 ; Grapheme_Base # Mc TAI THAM CONSONANT SIGN MEDIAL RA +1A57 ; Grapheme_Base # Mc TAI THAM CONSONANT SIGN LA TANG LAI +1A61 ; Grapheme_Base # Mc TAI THAM VOWEL SIGN A +1A63..1A64 ; Grapheme_Base # Mc [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA +1A6D..1A72 ; Grapheme_Base # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI +1A80..1A89 ; Grapheme_Base # Nd [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE +1A90..1A99 ; Grapheme_Base # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE +1AA0..1AA6 ; Grapheme_Base # Po [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA +1AA7 ; Grapheme_Base # Lm TAI THAM SIGN MAI YAMOK +1AA8..1AAD ; Grapheme_Base # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG +1B04 ; Grapheme_Base # Mc BALINESE SIGN BISAH +1B05..1B33 ; Grapheme_Base # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA +1B3E..1B41 ; Grapheme_Base # Mc [4] BALINESE VOWEL SIGN TALING..BALINESE VOWEL SIGN TALING REPA TEDUNG +1B45..1B4C ; Grapheme_Base # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA +1B4E..1B4F ; Grapheme_Base # Po [2] BALINESE INVERTED CARIK SIKI..BALINESE INVERTED CARIK PAREREN +1B50..1B59 ; Grapheme_Base # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE +1B5A..1B60 ; Grapheme_Base # Po [7] BALINESE PANTI..BALINESE PAMENENG +1B61..1B6A ; Grapheme_Base # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE +1B74..1B7C ; Grapheme_Base # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING +1B7D..1B7F ; Grapheme_Base # Po [3] BALINESE PANTI LANTANG..BALINESE PANTI BAWAK +1B82 ; Grapheme_Base # Mc SUNDANESE SIGN PANGWISAD +1B83..1BA0 ; Grapheme_Base # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA +1BA1 ; Grapheme_Base # Mc SUNDANESE CONSONANT SIGN PAMINGKAL +1BA6..1BA7 ; Grapheme_Base # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG +1BAE..1BAF ; Grapheme_Base # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA +1BB0..1BB9 ; Grapheme_Base # Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE +1BBA..1BE5 ; Grapheme_Base # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U +1BE7 ; Grapheme_Base # Mc BATAK VOWEL SIGN E +1BEA..1BEC ; Grapheme_Base # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O +1BEE ; Grapheme_Base # Mc BATAK VOWEL SIGN U +1BFC..1BFF ; Grapheme_Base # Po [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT +1C00..1C23 ; Grapheme_Base # Lo [36] LEPCHA LETTER KA..LEPCHA LETTER A +1C24..1C2B ; Grapheme_Base # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU +1C34..1C35 ; Grapheme_Base # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG +1C3B..1C3F ; Grapheme_Base # Po [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK +1C40..1C49 ; Grapheme_Base # Nd [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE +1C4D..1C4F ; Grapheme_Base # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA +1C50..1C59 ; Grapheme_Base # Nd [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE +1C5A..1C77 ; Grapheme_Base # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH +1C78..1C7D ; Grapheme_Base # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD +1C7E..1C7F ; Grapheme_Base # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD +1C80..1C8A ; Grapheme_Base # L& [11] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER TJE +1C90..1CBA ; Grapheme_Base # L& [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN +1CBD..1CBF ; Grapheme_Base # L& [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN +1CC0..1CC7 ; Grapheme_Base # Po [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA +1CD3 ; Grapheme_Base # Po VEDIC SIGN NIHSHVASA +1CE1 ; Grapheme_Base # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA +1CE9..1CEC ; Grapheme_Base # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL +1CEE..1CF3 ; Grapheme_Base # Lo [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA +1CF5..1CF6 ; Grapheme_Base # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA +1CF7 ; Grapheme_Base # Mc VEDIC SIGN ATIKRAMA +1CFA ; Grapheme_Base # Lo VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA +1D00..1D2B ; Grapheme_Base # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL +1D2C..1D6A ; Grapheme_Base # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI +1D6B..1D77 ; Grapheme_Base # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G +1D78 ; Grapheme_Base # Lm MODIFIER LETTER CYRILLIC EN +1D79..1D9A ; Grapheme_Base # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK +1D9B..1DBF ; Grapheme_Base # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA +1E00..1F15 ; Grapheme_Base # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F18..1F1D ; Grapheme_Base # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F20..1F45 ; Grapheme_Base # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F48..1F4D ; Grapheme_Base # L& [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50..1F57 ; Grapheme_Base # L& [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F59 ; Grapheme_Base # L& GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B ; Grapheme_Base # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D ; Grapheme_Base # L& GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F..1F7D ; Grapheme_Base # L& [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA +1F80..1FB4 ; Grapheme_Base # L& [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6..1FBC ; Grapheme_Base # L& [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBD ; Grapheme_Base # Sk GREEK KORONIS +1FBE ; Grapheme_Base # L& GREEK PROSGEGRAMMENI +1FBF..1FC1 ; Grapheme_Base # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI +1FC2..1FC4 ; Grapheme_Base # L& [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6..1FCC ; Grapheme_Base # L& [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FCD..1FCF ; Grapheme_Base # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI +1FD0..1FD3 ; Grapheme_Base # L& [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6..1FDB ; Grapheme_Base # L& [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA +1FDD..1FDF ; Grapheme_Base # Sk [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI +1FE0..1FEC ; Grapheme_Base # L& [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA +1FED..1FEF ; Grapheme_Base # Sk [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA +1FF2..1FF4 ; Grapheme_Base # L& [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6..1FFC ; Grapheme_Base # L& [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +1FFD..1FFE ; Grapheme_Base # Sk [2] GREEK OXIA..GREEK DASIA +2000..200A ; Grapheme_Base # Zs [11] EN QUAD..HAIR SPACE +2010..2015 ; Grapheme_Base # Pd [6] HYPHEN..HORIZONTAL BAR +2016..2017 ; Grapheme_Base # Po [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE +2018 ; Grapheme_Base # Pi LEFT SINGLE QUOTATION MARK +2019 ; Grapheme_Base # Pf RIGHT SINGLE QUOTATION MARK +201A ; Grapheme_Base # Ps SINGLE LOW-9 QUOTATION MARK +201B..201C ; Grapheme_Base # Pi [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK +201D ; Grapheme_Base # Pf RIGHT DOUBLE QUOTATION MARK +201E ; Grapheme_Base # Ps DOUBLE LOW-9 QUOTATION MARK +201F ; Grapheme_Base # Pi DOUBLE HIGH-REVERSED-9 QUOTATION MARK +2020..2027 ; Grapheme_Base # Po [8] DAGGER..HYPHENATION POINT +202F ; Grapheme_Base # Zs NARROW NO-BREAK SPACE +2030..2038 ; Grapheme_Base # Po [9] PER MILLE SIGN..CARET +2039 ; Grapheme_Base # Pi SINGLE LEFT-POINTING ANGLE QUOTATION MARK +203A ; Grapheme_Base # Pf SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +203B..203E ; Grapheme_Base # Po [4] REFERENCE MARK..OVERLINE +203F..2040 ; Grapheme_Base # Pc [2] UNDERTIE..CHARACTER TIE +2041..2043 ; Grapheme_Base # Po [3] CARET INSERTION POINT..HYPHEN BULLET +2044 ; Grapheme_Base # Sm FRACTION SLASH +2045 ; Grapheme_Base # Ps LEFT SQUARE BRACKET WITH QUILL +2046 ; Grapheme_Base # Pe RIGHT SQUARE BRACKET WITH QUILL +2047..2051 ; Grapheme_Base # Po [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY +2052 ; Grapheme_Base # Sm COMMERCIAL MINUS SIGN +2053 ; Grapheme_Base # Po SWUNG DASH +2054 ; Grapheme_Base # Pc INVERTED UNDERTIE +2055..205E ; Grapheme_Base # Po [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS +205F ; Grapheme_Base # Zs MEDIUM MATHEMATICAL SPACE +2070 ; Grapheme_Base # No SUPERSCRIPT ZERO +2071 ; Grapheme_Base # Lm SUPERSCRIPT LATIN SMALL LETTER I +2074..2079 ; Grapheme_Base # No [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE +207A..207C ; Grapheme_Base # Sm [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN +207D ; Grapheme_Base # Ps SUPERSCRIPT LEFT PARENTHESIS +207E ; Grapheme_Base # Pe SUPERSCRIPT RIGHT PARENTHESIS +207F ; Grapheme_Base # Lm SUPERSCRIPT LATIN SMALL LETTER N +2080..2089 ; Grapheme_Base # No [10] SUBSCRIPT ZERO..SUBSCRIPT NINE +208A..208C ; Grapheme_Base # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN +208D ; Grapheme_Base # Ps SUBSCRIPT LEFT PARENTHESIS +208E ; Grapheme_Base # Pe SUBSCRIPT RIGHT PARENTHESIS +2090..209C ; Grapheme_Base # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T +20A0..20C1 ; Grapheme_Base # Sc [34] EURO-CURRENCY SIGN..SAUDI RIYAL SIGN +2100..2101 ; Grapheme_Base # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT +2102 ; Grapheme_Base # L& DOUBLE-STRUCK CAPITAL C +2103..2106 ; Grapheme_Base # So [4] DEGREE CELSIUS..CADA UNA +2107 ; Grapheme_Base # L& EULER CONSTANT +2108..2109 ; Grapheme_Base # So [2] SCRUPLE..DEGREE FAHRENHEIT +210A..2113 ; Grapheme_Base # L& [10] SCRIPT SMALL G..SCRIPT SMALL L +2114 ; Grapheme_Base # So L B BAR SYMBOL +2115 ; Grapheme_Base # L& DOUBLE-STRUCK CAPITAL N +2116..2117 ; Grapheme_Base # So [2] NUMERO SIGN..SOUND RECORDING COPYRIGHT +2118 ; Grapheme_Base # Sm SCRIPT CAPITAL P +2119..211D ; Grapheme_Base # L& [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R +211E..2123 ; Grapheme_Base # So [6] PRESCRIPTION TAKE..VERSICLE +2124 ; Grapheme_Base # L& DOUBLE-STRUCK CAPITAL Z +2125 ; Grapheme_Base # So OUNCE SIGN +2126 ; Grapheme_Base # L& OHM SIGN +2127 ; Grapheme_Base # So INVERTED OHM SIGN +2128 ; Grapheme_Base # L& BLACK-LETTER CAPITAL Z +2129 ; Grapheme_Base # So TURNED GREEK SMALL LETTER IOTA +212A..212D ; Grapheme_Base # L& [4] KELVIN SIGN..BLACK-LETTER CAPITAL C +212E ; Grapheme_Base # So ESTIMATED SYMBOL +212F..2134 ; Grapheme_Base # L& [6] SCRIPT SMALL E..SCRIPT SMALL O +2135..2138 ; Grapheme_Base # Lo [4] ALEF SYMBOL..DALET SYMBOL +2139 ; Grapheme_Base # L& INFORMATION SOURCE +213A..213B ; Grapheme_Base # So [2] ROTATED CAPITAL Q..FACSIMILE SIGN +213C..213F ; Grapheme_Base # L& [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI +2140..2144 ; Grapheme_Base # Sm [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y +2145..2149 ; Grapheme_Base # L& [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J +214A ; Grapheme_Base # So PROPERTY LINE +214B ; Grapheme_Base # Sm TURNED AMPERSAND +214C..214D ; Grapheme_Base # So [2] PER SIGN..AKTIESELSKAB +214E ; Grapheme_Base # L& TURNED SMALL F +214F ; Grapheme_Base # So SYMBOL FOR SAMARITAN SOURCE +2150..215F ; Grapheme_Base # No [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE +2160..2182 ; Grapheme_Base # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND +2183..2184 ; Grapheme_Base # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C +2185..2188 ; Grapheme_Base # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND +2189 ; Grapheme_Base # No VULGAR FRACTION ZERO THIRDS +218A..218B ; Grapheme_Base # So [2] TURNED DIGIT TWO..TURNED DIGIT THREE +2190..2194 ; Grapheme_Base # Sm [5] LEFTWARDS ARROW..LEFT RIGHT ARROW +2195..2199 ; Grapheme_Base # So [5] UP DOWN ARROW..SOUTH WEST ARROW +219A..219B ; Grapheme_Base # Sm [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE +219C..219F ; Grapheme_Base # So [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW +21A0 ; Grapheme_Base # Sm RIGHTWARDS TWO HEADED ARROW +21A1..21A2 ; Grapheme_Base # So [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL +21A3 ; Grapheme_Base # Sm RIGHTWARDS ARROW WITH TAIL +21A4..21A5 ; Grapheme_Base # So [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR +21A6 ; Grapheme_Base # Sm RIGHTWARDS ARROW FROM BAR +21A7..21AD ; Grapheme_Base # So [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW +21AE ; Grapheme_Base # Sm LEFT RIGHT ARROW WITH STROKE +21AF..21CD ; Grapheme_Base # So [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE +21CE..21CF ; Grapheme_Base # Sm [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE +21D0..21D1 ; Grapheme_Base # So [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW +21D2 ; Grapheme_Base # Sm RIGHTWARDS DOUBLE ARROW +21D3 ; Grapheme_Base # So DOWNWARDS DOUBLE ARROW +21D4 ; Grapheme_Base # Sm LEFT RIGHT DOUBLE ARROW +21D5..21F3 ; Grapheme_Base # So [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW +21F4..22FF ; Grapheme_Base # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP +2300..2307 ; Grapheme_Base # So [8] DIAMETER SIGN..WAVY LINE +2308 ; Grapheme_Base # Ps LEFT CEILING +2309 ; Grapheme_Base # Pe RIGHT CEILING +230A ; Grapheme_Base # Ps LEFT FLOOR +230B ; Grapheme_Base # Pe RIGHT FLOOR +230C..231F ; Grapheme_Base # So [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER +2320..2321 ; Grapheme_Base # Sm [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL +2322..2328 ; Grapheme_Base # So [7] FROWN..KEYBOARD +2329 ; Grapheme_Base # Ps LEFT-POINTING ANGLE BRACKET +232A ; Grapheme_Base # Pe RIGHT-POINTING ANGLE BRACKET +232B..237B ; Grapheme_Base # So [81] ERASE TO THE LEFT..NOT CHECK MARK +237C ; Grapheme_Base # Sm RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW +237D..239A ; Grapheme_Base # So [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL +239B..23B3 ; Grapheme_Base # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM +23B4..23DB ; Grapheme_Base # So [40] TOP SQUARE BRACKET..FUSE +23DC..23E1 ; Grapheme_Base # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET +23E2..2429 ; Grapheme_Base # So [72] WHITE TRAPEZIUM..SYMBOL FOR DELETE MEDIUM SHADE FORM +2440..244A ; Grapheme_Base # So [11] OCR HOOK..OCR DOUBLE BACKSLASH +2460..249B ; Grapheme_Base # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP +249C..24E9 ; Grapheme_Base # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z +24EA..24FF ; Grapheme_Base # No [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO +2500..25B6 ; Grapheme_Base # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE +25B7 ; Grapheme_Base # Sm WHITE RIGHT-POINTING TRIANGLE +25B8..25C0 ; Grapheme_Base # So [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE +25C1 ; Grapheme_Base # Sm WHITE LEFT-POINTING TRIANGLE +25C2..25F7 ; Grapheme_Base # So [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT +25F8..25FF ; Grapheme_Base # Sm [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE +2600..266E ; Grapheme_Base # So [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN +266F ; Grapheme_Base # Sm MUSIC SHARP SIGN +2670..2767 ; Grapheme_Base # So [248] WEST SYRIAC CROSS..ROTATED FLORAL HEART BULLET +2768 ; Grapheme_Base # Ps MEDIUM LEFT PARENTHESIS ORNAMENT +2769 ; Grapheme_Base # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT +276A ; Grapheme_Base # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT +276B ; Grapheme_Base # Pe MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT +276C ; Grapheme_Base # Ps MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT +276D ; Grapheme_Base # Pe MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT +276E ; Grapheme_Base # Ps HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT +276F ; Grapheme_Base # Pe HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT +2770 ; Grapheme_Base # Ps HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT +2771 ; Grapheme_Base # Pe HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT +2772 ; Grapheme_Base # Ps LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT +2773 ; Grapheme_Base # Pe LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT +2774 ; Grapheme_Base # Ps MEDIUM LEFT CURLY BRACKET ORNAMENT +2775 ; Grapheme_Base # Pe MEDIUM RIGHT CURLY BRACKET ORNAMENT +2776..2793 ; Grapheme_Base # No [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN +2794..27BF ; Grapheme_Base # So [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP +27C0..27C4 ; Grapheme_Base # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET +27C5 ; Grapheme_Base # Ps LEFT S-SHAPED BAG DELIMITER +27C6 ; Grapheme_Base # Pe RIGHT S-SHAPED BAG DELIMITER +27C7..27E5 ; Grapheme_Base # Sm [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK +27E6 ; Grapheme_Base # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET +27E7 ; Grapheme_Base # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET +27E8 ; Grapheme_Base # Ps MATHEMATICAL LEFT ANGLE BRACKET +27E9 ; Grapheme_Base # Pe MATHEMATICAL RIGHT ANGLE BRACKET +27EA ; Grapheme_Base # Ps MATHEMATICAL LEFT DOUBLE ANGLE BRACKET +27EB ; Grapheme_Base # Pe MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET +27EC ; Grapheme_Base # Ps MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET +27ED ; Grapheme_Base # Pe MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET +27EE ; Grapheme_Base # Ps MATHEMATICAL LEFT FLATTENED PARENTHESIS +27EF ; Grapheme_Base # Pe MATHEMATICAL RIGHT FLATTENED PARENTHESIS +27F0..27FF ; Grapheme_Base # Sm [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW +2800..28FF ; Grapheme_Base # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678 +2900..2982 ; Grapheme_Base # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON +2983 ; Grapheme_Base # Ps LEFT WHITE CURLY BRACKET +2984 ; Grapheme_Base # Pe RIGHT WHITE CURLY BRACKET +2985 ; Grapheme_Base # Ps LEFT WHITE PARENTHESIS +2986 ; Grapheme_Base # Pe RIGHT WHITE PARENTHESIS +2987 ; Grapheme_Base # Ps Z NOTATION LEFT IMAGE BRACKET +2988 ; Grapheme_Base # Pe Z NOTATION RIGHT IMAGE BRACKET +2989 ; Grapheme_Base # Ps Z NOTATION LEFT BINDING BRACKET +298A ; Grapheme_Base # Pe Z NOTATION RIGHT BINDING BRACKET +298B ; Grapheme_Base # Ps LEFT SQUARE BRACKET WITH UNDERBAR +298C ; Grapheme_Base # Pe RIGHT SQUARE BRACKET WITH UNDERBAR +298D ; Grapheme_Base # Ps LEFT SQUARE BRACKET WITH TICK IN TOP CORNER +298E ; Grapheme_Base # Pe RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +298F ; Grapheme_Base # Ps LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +2990 ; Grapheme_Base # Pe RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER +2991 ; Grapheme_Base # Ps LEFT ANGLE BRACKET WITH DOT +2992 ; Grapheme_Base # Pe RIGHT ANGLE BRACKET WITH DOT +2993 ; Grapheme_Base # Ps LEFT ARC LESS-THAN BRACKET +2994 ; Grapheme_Base # Pe RIGHT ARC GREATER-THAN BRACKET +2995 ; Grapheme_Base # Ps DOUBLE LEFT ARC GREATER-THAN BRACKET +2996 ; Grapheme_Base # Pe DOUBLE RIGHT ARC LESS-THAN BRACKET +2997 ; Grapheme_Base # Ps LEFT BLACK TORTOISE SHELL BRACKET +2998 ; Grapheme_Base # Pe RIGHT BLACK TORTOISE SHELL BRACKET +2999..29D7 ; Grapheme_Base # Sm [63] DOTTED FENCE..BLACK HOURGLASS +29D8 ; Grapheme_Base # Ps LEFT WIGGLY FENCE +29D9 ; Grapheme_Base # Pe RIGHT WIGGLY FENCE +29DA ; Grapheme_Base # Ps LEFT DOUBLE WIGGLY FENCE +29DB ; Grapheme_Base # Pe RIGHT DOUBLE WIGGLY FENCE +29DC..29FB ; Grapheme_Base # Sm [32] INCOMPLETE INFINITY..TRIPLE PLUS +29FC ; Grapheme_Base # Ps LEFT-POINTING CURVED ANGLE BRACKET +29FD ; Grapheme_Base # Pe RIGHT-POINTING CURVED ANGLE BRACKET +29FE..2AFF ; Grapheme_Base # Sm [258] TINY..N-ARY WHITE VERTICAL BAR +2B00..2B2F ; Grapheme_Base # So [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE +2B30..2B44 ; Grapheme_Base # Sm [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET +2B45..2B46 ; Grapheme_Base # So [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW +2B47..2B4C ; Grapheme_Base # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR +2B4D..2B73 ; Grapheme_Base # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR +2B76..2BFF ; Grapheme_Base # So [138] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..HELLSCHREIBER PAUSE SYMBOL +2C00..2C7B ; Grapheme_Base # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E +2C7C..2C7D ; Grapheme_Base # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V +2C7E..2CE4 ; Grapheme_Base # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI +2CE5..2CEA ; Grapheme_Base # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA +2CEB..2CEE ; Grapheme_Base # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA +2CF2..2CF3 ; Grapheme_Base # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI +2CF9..2CFC ; Grapheme_Base # Po [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER +2CFD ; Grapheme_Base # No COPTIC FRACTION ONE HALF +2CFE..2CFF ; Grapheme_Base # Po [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER +2D00..2D25 ; Grapheme_Base # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE +2D27 ; Grapheme_Base # L& GEORGIAN SMALL LETTER YN +2D2D ; Grapheme_Base # L& GEORGIAN SMALL LETTER AEN +2D30..2D67 ; Grapheme_Base # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO +2D6F ; Grapheme_Base # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK +2D70 ; Grapheme_Base # Po TIFINAGH SEPARATOR MARK +2D80..2D96 ; Grapheme_Base # Lo [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE +2DA0..2DA6 ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO +2DA8..2DAE ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO +2DB0..2DB6 ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO +2DB8..2DBE ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO +2DC0..2DC6 ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO +2DC8..2DCE ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO +2DD0..2DD6 ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO +2DD8..2DDE ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO +2E00..2E01 ; Grapheme_Base # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER +2E02 ; Grapheme_Base # Pi LEFT SUBSTITUTION BRACKET +2E03 ; Grapheme_Base # Pf RIGHT SUBSTITUTION BRACKET +2E04 ; Grapheme_Base # Pi LEFT DOTTED SUBSTITUTION BRACKET +2E05 ; Grapheme_Base # Pf RIGHT DOTTED SUBSTITUTION BRACKET +2E06..2E08 ; Grapheme_Base # Po [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER +2E09 ; Grapheme_Base # Pi LEFT TRANSPOSITION BRACKET +2E0A ; Grapheme_Base # Pf RIGHT TRANSPOSITION BRACKET +2E0B ; Grapheme_Base # Po RAISED SQUARE +2E0C ; Grapheme_Base # Pi LEFT RAISED OMISSION BRACKET +2E0D ; Grapheme_Base # Pf RIGHT RAISED OMISSION BRACKET +2E0E..2E16 ; Grapheme_Base # Po [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE +2E17 ; Grapheme_Base # Pd DOUBLE OBLIQUE HYPHEN +2E18..2E19 ; Grapheme_Base # Po [2] INVERTED INTERROBANG..PALM BRANCH +2E1A ; Grapheme_Base # Pd HYPHEN WITH DIAERESIS +2E1B ; Grapheme_Base # Po TILDE WITH RING ABOVE +2E1C ; Grapheme_Base # Pi LEFT LOW PARAPHRASE BRACKET +2E1D ; Grapheme_Base # Pf RIGHT LOW PARAPHRASE BRACKET +2E1E..2E1F ; Grapheme_Base # Po [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW +2E20 ; Grapheme_Base # Pi LEFT VERTICAL BAR WITH QUILL +2E21 ; Grapheme_Base # Pf RIGHT VERTICAL BAR WITH QUILL +2E22 ; Grapheme_Base # Ps TOP LEFT HALF BRACKET +2E23 ; Grapheme_Base # Pe TOP RIGHT HALF BRACKET +2E24 ; Grapheme_Base # Ps BOTTOM LEFT HALF BRACKET +2E25 ; Grapheme_Base # Pe BOTTOM RIGHT HALF BRACKET +2E26 ; Grapheme_Base # Ps LEFT SIDEWAYS U BRACKET +2E27 ; Grapheme_Base # Pe RIGHT SIDEWAYS U BRACKET +2E28 ; Grapheme_Base # Ps LEFT DOUBLE PARENTHESIS +2E29 ; Grapheme_Base # Pe RIGHT DOUBLE PARENTHESIS +2E2A..2E2E ; Grapheme_Base # Po [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK +2E2F ; Grapheme_Base # Lm VERTICAL TILDE +2E30..2E39 ; Grapheme_Base # Po [10] RING POINT..TOP HALF SECTION SIGN +2E3A..2E3B ; Grapheme_Base # Pd [2] TWO-EM DASH..THREE-EM DASH +2E3C..2E3F ; Grapheme_Base # Po [4] STENOGRAPHIC FULL STOP..CAPITULUM +2E40 ; Grapheme_Base # Pd DOUBLE HYPHEN +2E41 ; Grapheme_Base # Po REVERSED COMMA +2E42 ; Grapheme_Base # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK +2E43..2E4F ; Grapheme_Base # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER +2E50..2E51 ; Grapheme_Base # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR +2E52..2E54 ; Grapheme_Base # Po [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK +2E55 ; Grapheme_Base # Ps LEFT SQUARE BRACKET WITH STROKE +2E56 ; Grapheme_Base # Pe RIGHT SQUARE BRACKET WITH STROKE +2E57 ; Grapheme_Base # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E58 ; Grapheme_Base # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E59 ; Grapheme_Base # Ps TOP HALF LEFT PARENTHESIS +2E5A ; Grapheme_Base # Pe TOP HALF RIGHT PARENTHESIS +2E5B ; Grapheme_Base # Ps BOTTOM HALF LEFT PARENTHESIS +2E5C ; Grapheme_Base # Pe BOTTOM HALF RIGHT PARENTHESIS +2E5D ; Grapheme_Base # Pd OBLIQUE HYPHEN +2E80..2E99 ; Grapheme_Base # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP +2E9B..2EF3 ; Grapheme_Base # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE +2F00..2FD5 ; Grapheme_Base # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE +2FF0..2FFF ; Grapheme_Base # So [16] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION +3000 ; Grapheme_Base # Zs IDEOGRAPHIC SPACE +3001..3003 ; Grapheme_Base # Po [3] IDEOGRAPHIC COMMA..DITTO MARK +3004 ; Grapheme_Base # So JAPANESE INDUSTRIAL STANDARD SYMBOL +3005 ; Grapheme_Base # Lm IDEOGRAPHIC ITERATION MARK +3006 ; Grapheme_Base # Lo IDEOGRAPHIC CLOSING MARK +3007 ; Grapheme_Base # Nl IDEOGRAPHIC NUMBER ZERO +3008 ; Grapheme_Base # Ps LEFT ANGLE BRACKET +3009 ; Grapheme_Base # Pe RIGHT ANGLE BRACKET +300A ; Grapheme_Base # Ps LEFT DOUBLE ANGLE BRACKET +300B ; Grapheme_Base # Pe RIGHT DOUBLE ANGLE BRACKET +300C ; Grapheme_Base # Ps LEFT CORNER BRACKET +300D ; Grapheme_Base # Pe RIGHT CORNER BRACKET +300E ; Grapheme_Base # Ps LEFT WHITE CORNER BRACKET +300F ; Grapheme_Base # Pe RIGHT WHITE CORNER BRACKET +3010 ; Grapheme_Base # Ps LEFT BLACK LENTICULAR BRACKET +3011 ; Grapheme_Base # Pe RIGHT BLACK LENTICULAR BRACKET +3012..3013 ; Grapheme_Base # So [2] POSTAL MARK..GETA MARK +3014 ; Grapheme_Base # Ps LEFT TORTOISE SHELL BRACKET +3015 ; Grapheme_Base # Pe RIGHT TORTOISE SHELL BRACKET +3016 ; Grapheme_Base # Ps LEFT WHITE LENTICULAR BRACKET +3017 ; Grapheme_Base # Pe RIGHT WHITE LENTICULAR BRACKET +3018 ; Grapheme_Base # Ps LEFT WHITE TORTOISE SHELL BRACKET +3019 ; Grapheme_Base # Pe RIGHT WHITE TORTOISE SHELL BRACKET +301A ; Grapheme_Base # Ps LEFT WHITE SQUARE BRACKET +301B ; Grapheme_Base # Pe RIGHT WHITE SQUARE BRACKET +301C ; Grapheme_Base # Pd WAVE DASH +301D ; Grapheme_Base # Ps REVERSED DOUBLE PRIME QUOTATION MARK +301E..301F ; Grapheme_Base # Pe [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK +3020 ; Grapheme_Base # So POSTAL MARK FACE +3021..3029 ; Grapheme_Base # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE +3030 ; Grapheme_Base # Pd WAVY DASH +3031..3035 ; Grapheme_Base # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF +3036..3037 ; Grapheme_Base # So [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL +3038..303A ; Grapheme_Base # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY +303B ; Grapheme_Base # Lm VERTICAL IDEOGRAPHIC ITERATION MARK +303C ; Grapheme_Base # Lo MASU MARK +303D ; Grapheme_Base # Po PART ALTERNATION MARK +303E..303F ; Grapheme_Base # So [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE +3041..3096 ; Grapheme_Base # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE +309B..309C ; Grapheme_Base # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +309D..309E ; Grapheme_Base # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK +309F ; Grapheme_Base # Lo HIRAGANA DIGRAPH YORI +30A0 ; Grapheme_Base # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN +30A1..30FA ; Grapheme_Base # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO +30FB ; Grapheme_Base # Po KATAKANA MIDDLE DOT +30FC..30FE ; Grapheme_Base # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK +30FF ; Grapheme_Base # Lo KATAKANA DIGRAPH KOTO +3105..312F ; Grapheme_Base # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN +3131..318E ; Grapheme_Base # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE +3190..3191 ; Grapheme_Base # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK +3192..3195 ; Grapheme_Base # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK +3196..319F ; Grapheme_Base # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK +31A0..31BF ; Grapheme_Base # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH +31C0..31E5 ; Grapheme_Base # So [38] CJK STROKE T..CJK STROKE SZP +31EF ; Grapheme_Base # So IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION +31F0..31FF ; Grapheme_Base # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO +3200..321E ; Grapheme_Base # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU +3220..3229 ; Grapheme_Base # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN +322A..3247 ; Grapheme_Base # So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO +3248..324F ; Grapheme_Base # No [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE +3250 ; Grapheme_Base # So PARTNERSHIP SIGN +3251..325F ; Grapheme_Base # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE +3260..327F ; Grapheme_Base # So [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL +3280..3289 ; Grapheme_Base # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN +328A..32B0 ; Grapheme_Base # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT +32B1..32BF ; Grapheme_Base # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY +32C0..33FF ; Grapheme_Base # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL +3400..4DBF ; Grapheme_Base # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF +4DC0..4DFF ; Grapheme_Base # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION +4E00..A014 ; Grapheme_Base # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E +A015 ; Grapheme_Base # Lm YI SYLLABLE WU +A016..A48C ; Grapheme_Base # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR +A490..A4C6 ; Grapheme_Base # So [55] YI RADICAL QOT..YI RADICAL KE +A4D0..A4F7 ; Grapheme_Base # Lo [40] LISU LETTER BA..LISU LETTER OE +A4F8..A4FD ; Grapheme_Base # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU +A4FE..A4FF ; Grapheme_Base # Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP +A500..A60B ; Grapheme_Base # Lo [268] VAI SYLLABLE EE..VAI SYLLABLE NG +A60C ; Grapheme_Base # Lm VAI SYLLABLE LENGTHENER +A60D..A60F ; Grapheme_Base # Po [3] VAI COMMA..VAI QUESTION MARK +A610..A61F ; Grapheme_Base # Lo [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG +A620..A629 ; Grapheme_Base # Nd [10] VAI DIGIT ZERO..VAI DIGIT NINE +A62A..A62B ; Grapheme_Base # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO +A640..A66D ; Grapheme_Base # L& [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O +A66E ; Grapheme_Base # Lo CYRILLIC LETTER MULTIOCULAR O +A673 ; Grapheme_Base # Po SLAVONIC ASTERISK +A67E ; Grapheme_Base # Po CYRILLIC KAVYKA +A67F ; Grapheme_Base # Lm CYRILLIC PAYEROK +A680..A69B ; Grapheme_Base # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O +A69C..A69D ; Grapheme_Base # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN +A6A0..A6E5 ; Grapheme_Base # Lo [70] BAMUM LETTER A..BAMUM LETTER KI +A6E6..A6EF ; Grapheme_Base # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM +A6F2..A6F7 ; Grapheme_Base # Po [6] BAMUM NJAEMLI..BAMUM QUESTION MARK +A700..A716 ; Grapheme_Base # Sk [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR +A717..A71F ; Grapheme_Base # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK +A720..A721 ; Grapheme_Base # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE +A722..A76F ; Grapheme_Base # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON +A770 ; Grapheme_Base # Lm MODIFIER LETTER US +A771..A787 ; Grapheme_Base # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T +A788 ; Grapheme_Base # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT +A789..A78A ; Grapheme_Base # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN +A78B..A78E ; Grapheme_Base # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT +A78F ; Grapheme_Base # Lo LATIN LETTER SINOLOGICAL DOT +A790..A7DC ; Grapheme_Base # L& [77] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F1..A7F4 ; Grapheme_Base # Lm [4] MODIFIER LETTER CAPITAL S..MODIFIER LETTER CAPITAL Q +A7F5..A7F6 ; Grapheme_Base # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H +A7F7 ; Grapheme_Base # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I +A7F8..A7F9 ; Grapheme_Base # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE +A7FA ; Grapheme_Base # L& LATIN LETTER SMALL CAPITAL TURNED M +A7FB..A801 ; Grapheme_Base # Lo [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I +A803..A805 ; Grapheme_Base # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O +A807..A80A ; Grapheme_Base # Lo [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO +A80C..A822 ; Grapheme_Base # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO +A823..A824 ; Grapheme_Base # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I +A827 ; Grapheme_Base # Mc SYLOTI NAGRI VOWEL SIGN OO +A828..A82B ; Grapheme_Base # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4 +A830..A835 ; Grapheme_Base # No [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS +A836..A837 ; Grapheme_Base # So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK +A838 ; Grapheme_Base # Sc NORTH INDIC RUPEE MARK +A839 ; Grapheme_Base # So NORTH INDIC QUANTITY MARK +A840..A873 ; Grapheme_Base # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU +A874..A877 ; Grapheme_Base # Po [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD +A880..A881 ; Grapheme_Base # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA +A882..A8B3 ; Grapheme_Base # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA +A8B4..A8C3 ; Grapheme_Base # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU +A8CE..A8CF ; Grapheme_Base # Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA +A8D0..A8D9 ; Grapheme_Base # Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE +A8F2..A8F7 ; Grapheme_Base # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA +A8F8..A8FA ; Grapheme_Base # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET +A8FB ; Grapheme_Base # Lo DEVANAGARI HEADSTROKE +A8FC ; Grapheme_Base # Po DEVANAGARI SIGN SIDDHAM +A8FD..A8FE ; Grapheme_Base # Lo [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY +A900..A909 ; Grapheme_Base # Nd [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE +A90A..A925 ; Grapheme_Base # Lo [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO +A92E..A92F ; Grapheme_Base # Po [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA +A930..A946 ; Grapheme_Base # Lo [23] REJANG LETTER KA..REJANG LETTER A +A952 ; Grapheme_Base # Mc REJANG CONSONANT SIGN H +A95F ; Grapheme_Base # Po REJANG SECTION MARK +A960..A97C ; Grapheme_Base # Lo [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH +A983 ; Grapheme_Base # Mc JAVANESE SIGN WIGNYAN +A984..A9B2 ; Grapheme_Base # Lo [47] JAVANESE LETTER A..JAVANESE LETTER HA +A9B4..A9B5 ; Grapheme_Base # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG +A9BA..A9BB ; Grapheme_Base # Mc [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE +A9BE..A9BF ; Grapheme_Base # Mc [2] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE CONSONANT SIGN CAKRA +A9C1..A9CD ; Grapheme_Base # Po [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH +A9CF ; Grapheme_Base # Lm JAVANESE PANGRANGKEP +A9D0..A9D9 ; Grapheme_Base # Nd [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE +A9DE..A9DF ; Grapheme_Base # Po [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN +A9E0..A9E4 ; Grapheme_Base # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA +A9E6 ; Grapheme_Base # Lm MYANMAR MODIFIER LETTER SHAN REDUPLICATION +A9E7..A9EF ; Grapheme_Base # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA +A9F0..A9F9 ; Grapheme_Base # Nd [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE +A9FA..A9FE ; Grapheme_Base # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA +AA00..AA28 ; Grapheme_Base # Lo [41] CHAM LETTER A..CHAM LETTER HA +AA2F..AA30 ; Grapheme_Base # Mc [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI +AA33..AA34 ; Grapheme_Base # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA +AA40..AA42 ; Grapheme_Base # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG +AA44..AA4B ; Grapheme_Base # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS +AA4D ; Grapheme_Base # Mc CHAM CONSONANT SIGN FINAL H +AA50..AA59 ; Grapheme_Base # Nd [10] CHAM DIGIT ZERO..CHAM DIGIT NINE +AA5C..AA5F ; Grapheme_Base # Po [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA +AA60..AA6F ; Grapheme_Base # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA +AA70 ; Grapheme_Base # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION +AA71..AA76 ; Grapheme_Base # Lo [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM +AA77..AA79 ; Grapheme_Base # So [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO +AA7A ; Grapheme_Base # Lo MYANMAR LETTER AITON RA +AA7B ; Grapheme_Base # Mc MYANMAR SIGN PAO KAREN TONE +AA7D ; Grapheme_Base # Mc MYANMAR SIGN TAI LAING TONE-5 +AA7E..AAAF ; Grapheme_Base # Lo [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O +AAB1 ; Grapheme_Base # Lo TAI VIET VOWEL AA +AAB5..AAB6 ; Grapheme_Base # Lo [2] TAI VIET VOWEL E..TAI VIET VOWEL O +AAB9..AABD ; Grapheme_Base # Lo [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN +AAC0 ; Grapheme_Base # Lo TAI VIET TONE MAI NUENG +AAC2 ; Grapheme_Base # Lo TAI VIET TONE MAI SONG +AADB..AADC ; Grapheme_Base # Lo [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG +AADD ; Grapheme_Base # Lm TAI VIET SYMBOL SAM +AADE..AADF ; Grapheme_Base # Po [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI +AAE0..AAEA ; Grapheme_Base # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA +AAEB ; Grapheme_Base # Mc MEETEI MAYEK VOWEL SIGN II +AAEE..AAEF ; Grapheme_Base # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU +AAF0..AAF1 ; Grapheme_Base # Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM +AAF2 ; Grapheme_Base # Lo MEETEI MAYEK ANJI +AAF3..AAF4 ; Grapheme_Base # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK +AAF5 ; Grapheme_Base # Mc MEETEI MAYEK VOWEL SIGN VISARGA +AB01..AB06 ; Grapheme_Base # Lo [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO +AB09..AB0E ; Grapheme_Base # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO +AB11..AB16 ; Grapheme_Base # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO +AB20..AB26 ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO +AB28..AB2E ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO +AB30..AB5A ; Grapheme_Base # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG +AB5B ; Grapheme_Base # Sk MODIFIER BREVE WITH INVERTED BREVE +AB5C..AB5F ; Grapheme_Base # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK +AB60..AB68 ; Grapheme_Base # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE +AB69 ; Grapheme_Base # Lm MODIFIER LETTER SMALL TURNED W +AB6A..AB6B ; Grapheme_Base # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK +AB70..ABBF ; Grapheme_Base # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA +ABC0..ABE2 ; Grapheme_Base # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM +ABE3..ABE4 ; Grapheme_Base # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP +ABE6..ABE7 ; Grapheme_Base # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP +ABE9..ABEA ; Grapheme_Base # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG +ABEB ; Grapheme_Base # Po MEETEI MAYEK CHEIKHEI +ABEC ; Grapheme_Base # Mc MEETEI MAYEK LUM IYEK +ABF0..ABF9 ; Grapheme_Base # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE +AC00..D7A3 ; Grapheme_Base # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH +D7B0..D7C6 ; Grapheme_Base # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E +D7CB..D7FB ; Grapheme_Base # Lo [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH +F900..FA6D ; Grapheme_Base # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D +FA70..FAD9 ; Grapheme_Base # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +FB00..FB06 ; Grapheme_Base # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST +FB13..FB17 ; Grapheme_Base # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH +FB1D ; Grapheme_Base # Lo HEBREW LETTER YOD WITH HIRIQ +FB1F..FB28 ; Grapheme_Base # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV +FB29 ; Grapheme_Base # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN +FB2A..FB36 ; Grapheme_Base # Lo [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH +FB38..FB3C ; Grapheme_Base # Lo [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH +FB3E ; Grapheme_Base # Lo HEBREW LETTER MEM WITH DAGESH +FB40..FB41 ; Grapheme_Base # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH +FB43..FB44 ; Grapheme_Base # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH +FB46..FBB1 ; Grapheme_Base # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM +FBB2..FBC2 ; Grapheme_Base # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE +FBC3..FBD2 ; Grapheme_Base # So [16] ARABIC LIGATURE JALLA WA-ALAA..ARABIC LIGATURE ALAYHI AR-RAHMAH +FBD3..FD3D ; Grapheme_Base # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD3E ; Grapheme_Base # Pe ORNATE LEFT PARENTHESIS +FD3F ; Grapheme_Base # Ps ORNATE RIGHT PARENTHESIS +FD40..FD4F ; Grapheme_Base # So [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH +FD50..FD8F ; Grapheme_Base # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FD90..FD91 ; Grapheme_Base # So [2] ARABIC LIGATURE RAHMATU ALLAAHI ALAYH..ARABIC LIGATURE RAHMATU ALLAAHI ALAYHAA +FD92..FDC7 ; Grapheme_Base # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDC8..FDCF ; Grapheme_Base # So [8] ARABIC LIGATURE RAHIMAHU ALLAAH TAAALAA..ARABIC LIGATURE SALAAMUHU ALAYNAA +FDF0..FDFB ; Grapheme_Base # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU +FDFC ; Grapheme_Base # Sc RIAL SIGN +FDFD..FDFF ; Grapheme_Base # So [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL +FE10..FE16 ; Grapheme_Base # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK +FE17 ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET +FE18 ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET +FE19 ; Grapheme_Base # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS +FE30 ; Grapheme_Base # Po PRESENTATION FORM FOR VERTICAL TWO DOT LEADER +FE31..FE32 ; Grapheme_Base # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH +FE33..FE34 ; Grapheme_Base # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE +FE35 ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS +FE36 ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS +FE37 ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET +FE38 ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET +FE39 ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET +FE3A ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET +FE3B ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET +FE3C ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET +FE3D ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET +FE3E ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET +FE3F ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET +FE40 ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET +FE41 ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET +FE42 ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET +FE43 ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET +FE44 ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET +FE45..FE46 ; Grapheme_Base # Po [2] SESAME DOT..WHITE SESAME DOT +FE47 ; Grapheme_Base # Ps PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET +FE48 ; Grapheme_Base # Pe PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET +FE49..FE4C ; Grapheme_Base # Po [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE +FE4D..FE4F ; Grapheme_Base # Pc [3] DASHED LOW LINE..WAVY LOW LINE +FE50..FE52 ; Grapheme_Base # Po [3] SMALL COMMA..SMALL FULL STOP +FE54..FE57 ; Grapheme_Base # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK +FE58 ; Grapheme_Base # Pd SMALL EM DASH +FE59 ; Grapheme_Base # Ps SMALL LEFT PARENTHESIS +FE5A ; Grapheme_Base # Pe SMALL RIGHT PARENTHESIS +FE5B ; Grapheme_Base # Ps SMALL LEFT CURLY BRACKET +FE5C ; Grapheme_Base # Pe SMALL RIGHT CURLY BRACKET +FE5D ; Grapheme_Base # Ps SMALL LEFT TORTOISE SHELL BRACKET +FE5E ; Grapheme_Base # Pe SMALL RIGHT TORTOISE SHELL BRACKET +FE5F..FE61 ; Grapheme_Base # Po [3] SMALL NUMBER SIGN..SMALL ASTERISK +FE62 ; Grapheme_Base # Sm SMALL PLUS SIGN +FE63 ; Grapheme_Base # Pd SMALL HYPHEN-MINUS +FE64..FE66 ; Grapheme_Base # Sm [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN +FE68 ; Grapheme_Base # Po SMALL REVERSE SOLIDUS +FE69 ; Grapheme_Base # Sc SMALL DOLLAR SIGN +FE6A..FE6B ; Grapheme_Base # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT +FE70..FE74 ; Grapheme_Base # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM +FE76..FEFC ; Grapheme_Base # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM +FF01..FF03 ; Grapheme_Base # Po [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN +FF04 ; Grapheme_Base # Sc FULLWIDTH DOLLAR SIGN +FF05..FF07 ; Grapheme_Base # Po [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE +FF08 ; Grapheme_Base # Ps FULLWIDTH LEFT PARENTHESIS +FF09 ; Grapheme_Base # Pe FULLWIDTH RIGHT PARENTHESIS +FF0A ; Grapheme_Base # Po FULLWIDTH ASTERISK +FF0B ; Grapheme_Base # Sm FULLWIDTH PLUS SIGN +FF0C ; Grapheme_Base # Po FULLWIDTH COMMA +FF0D ; Grapheme_Base # Pd FULLWIDTH HYPHEN-MINUS +FF0E..FF0F ; Grapheme_Base # Po [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS +FF10..FF19 ; Grapheme_Base # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE +FF1A..FF1B ; Grapheme_Base # Po [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON +FF1C..FF1E ; Grapheme_Base # Sm [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN +FF1F..FF20 ; Grapheme_Base # Po [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT +FF21..FF3A ; Grapheme_Base # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z +FF3B ; Grapheme_Base # Ps FULLWIDTH LEFT SQUARE BRACKET +FF3C ; Grapheme_Base # Po FULLWIDTH REVERSE SOLIDUS +FF3D ; Grapheme_Base # Pe FULLWIDTH RIGHT SQUARE BRACKET +FF3E ; Grapheme_Base # Sk FULLWIDTH CIRCUMFLEX ACCENT +FF3F ; Grapheme_Base # Pc FULLWIDTH LOW LINE +FF40 ; Grapheme_Base # Sk FULLWIDTH GRAVE ACCENT +FF41..FF5A ; Grapheme_Base # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +FF5B ; Grapheme_Base # Ps FULLWIDTH LEFT CURLY BRACKET +FF5C ; Grapheme_Base # Sm FULLWIDTH VERTICAL LINE +FF5D ; Grapheme_Base # Pe FULLWIDTH RIGHT CURLY BRACKET +FF5E ; Grapheme_Base # Sm FULLWIDTH TILDE +FF5F ; Grapheme_Base # Ps FULLWIDTH LEFT WHITE PARENTHESIS +FF60 ; Grapheme_Base # Pe FULLWIDTH RIGHT WHITE PARENTHESIS +FF61 ; Grapheme_Base # Po HALFWIDTH IDEOGRAPHIC FULL STOP +FF62 ; Grapheme_Base # Ps HALFWIDTH LEFT CORNER BRACKET +FF63 ; Grapheme_Base # Pe HALFWIDTH RIGHT CORNER BRACKET +FF64..FF65 ; Grapheme_Base # Po [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT +FF66..FF6F ; Grapheme_Base # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU +FF70 ; Grapheme_Base # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF71..FF9D ; Grapheme_Base # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N +FFA0..FFBE ; Grapheme_Base # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH +FFC2..FFC7 ; Grapheme_Base # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E +FFCA..FFCF ; Grapheme_Base # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE +FFD2..FFD7 ; Grapheme_Base # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU +FFDA..FFDC ; Grapheme_Base # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I +FFE0..FFE1 ; Grapheme_Base # Sc [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN +FFE2 ; Grapheme_Base # Sm FULLWIDTH NOT SIGN +FFE3 ; Grapheme_Base # Sk FULLWIDTH MACRON +FFE4 ; Grapheme_Base # So FULLWIDTH BROKEN BAR +FFE5..FFE6 ; Grapheme_Base # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN +FFE8 ; Grapheme_Base # So HALFWIDTH FORMS LIGHT VERTICAL +FFE9..FFEC ; Grapheme_Base # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW +FFED..FFEE ; Grapheme_Base # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE +FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER +10000..1000B ; Grapheme_Base # Lo [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE +1000D..10026 ; Grapheme_Base # Lo [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO +10028..1003A ; Grapheme_Base # Lo [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO +1003C..1003D ; Grapheme_Base # Lo [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE +1003F..1004D ; Grapheme_Base # Lo [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO +10050..1005D ; Grapheme_Base # Lo [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089 +10080..100FA ; Grapheme_Base # Lo [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305 +10100..10102 ; Grapheme_Base # Po [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK +10107..10133 ; Grapheme_Base # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND +10137..1013F ; Grapheme_Base # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT +10140..10174 ; Grapheme_Base # Nl [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS +10175..10178 ; Grapheme_Base # No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN +10179..10189 ; Grapheme_Base # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN +1018A..1018B ; Grapheme_Base # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN +1018C..1018E ; Grapheme_Base # So [3] GREEK SINUSOID SIGN..NOMISMA SIGN +10190..1019C ; Grapheme_Base # So [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL +101A0 ; Grapheme_Base # So GREEK SYMBOL TAU RHO +101D0..101FC ; Grapheme_Base # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND +10280..1029C ; Grapheme_Base # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X +102A0..102D0 ; Grapheme_Base # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3 +102E1..102FB ; Grapheme_Base # No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED +10300..1031F ; Grapheme_Base # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS +10320..10323 ; Grapheme_Base # No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY +1032D..10340 ; Grapheme_Base # Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA +10341 ; Grapheme_Base # Nl GOTHIC LETTER NINETY +10342..10349 ; Grapheme_Base # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL +1034A ; Grapheme_Base # Nl GOTHIC LETTER NINE HUNDRED +10350..10375 ; Grapheme_Base # Lo [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA +10380..1039D ; Grapheme_Base # Lo [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU +1039F ; Grapheme_Base # Po UGARITIC WORD DIVIDER +103A0..103C3 ; Grapheme_Base # Lo [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA +103C8..103CF ; Grapheme_Base # Lo [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH +103D0 ; Grapheme_Base # Po OLD PERSIAN WORD DIVIDER +103D1..103D5 ; Grapheme_Base # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED +10400..1044F ; Grapheme_Base # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW +10450..1049D ; Grapheme_Base # Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO +104A0..104A9 ; Grapheme_Base # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE +104B0..104D3 ; Grapheme_Base # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +104D8..104FB ; Grapheme_Base # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10500..10527 ; Grapheme_Base # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE +10530..10563 ; Grapheme_Base # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW +1056F ; Grapheme_Base # Po CAUCASIAN ALBANIAN CITATION MARK +10570..1057A ; Grapheme_Base # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Grapheme_Base # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Grapheme_Base # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Grapheme_Base # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; Grapheme_Base # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Grapheme_Base # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Grapheme_Base # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Grapheme_Base # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +105C0..105F3 ; Grapheme_Base # Lo [52] TODHRI LETTER A..TODHRI LETTER OO +10600..10736 ; Grapheme_Base # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 +10740..10755 ; Grapheme_Base # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE +10760..10767 ; Grapheme_Base # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; Grapheme_Base # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Grapheme_Base # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Grapheme_Base # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL +10800..10805 ; Grapheme_Base # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA +10808 ; Grapheme_Base # Lo CYPRIOT SYLLABLE JO +1080A..10835 ; Grapheme_Base # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO +10837..10838 ; Grapheme_Base # Lo [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE +1083C ; Grapheme_Base # Lo CYPRIOT SYLLABLE ZA +1083F..10855 ; Grapheme_Base # Lo [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW +10857 ; Grapheme_Base # Po IMPERIAL ARAMAIC SECTION SIGN +10858..1085F ; Grapheme_Base # No [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND +10860..10876 ; Grapheme_Base # Lo [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW +10877..10878 ; Grapheme_Base # So [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON +10879..1087F ; Grapheme_Base # No [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY +10880..1089E ; Grapheme_Base # Lo [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW +108A7..108AF ; Grapheme_Base # No [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED +108E0..108F2 ; Grapheme_Base # Lo [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH +108F4..108F5 ; Grapheme_Base # Lo [2] HATRAN LETTER SHIN..HATRAN LETTER TAW +108FB..108FF ; Grapheme_Base # No [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED +10900..10915 ; Grapheme_Base # Lo [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU +10916..1091B ; Grapheme_Base # No [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE +1091F ; Grapheme_Base # Po PHOENICIAN WORD SEPARATOR +10920..10939 ; Grapheme_Base # Lo [26] LYDIAN LETTER A..LYDIAN LETTER C +1093F ; Grapheme_Base # Po LYDIAN TRIANGULAR MARK +10940..10959 ; Grapheme_Base # Lo [26] SIDETIC LETTER N01..SIDETIC LETTER N26 +10980..109B7 ; Grapheme_Base # Lo [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA +109BC..109BD ; Grapheme_Base # No [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF +109BE..109BF ; Grapheme_Base # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN +109C0..109CF ; Grapheme_Base # No [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY +109D2..109FF ; Grapheme_Base # No [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS +10A00 ; Grapheme_Base # Lo KHAROSHTHI LETTER A +10A10..10A13 ; Grapheme_Base # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA +10A15..10A17 ; Grapheme_Base # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA +10A19..10A35 ; Grapheme_Base # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA +10A40..10A48 ; Grapheme_Base # No [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF +10A50..10A58 ; Grapheme_Base # Po [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES +10A60..10A7C ; Grapheme_Base # Lo [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH +10A7D..10A7E ; Grapheme_Base # No [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY +10A7F ; Grapheme_Base # Po OLD SOUTH ARABIAN NUMERIC INDICATOR +10A80..10A9C ; Grapheme_Base # Lo [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH +10A9D..10A9F ; Grapheme_Base # No [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY +10AC0..10AC7 ; Grapheme_Base # Lo [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW +10AC8 ; Grapheme_Base # So MANICHAEAN SIGN UD +10AC9..10AE4 ; Grapheme_Base # Lo [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW +10AEB..10AEF ; Grapheme_Base # No [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED +10AF0..10AF6 ; Grapheme_Base # Po [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER +10B00..10B35 ; Grapheme_Base # Lo [54] AVESTAN LETTER A..AVESTAN LETTER HE +10B39..10B3F ; Grapheme_Base # Po [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION +10B40..10B55 ; Grapheme_Base # Lo [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW +10B58..10B5F ; Grapheme_Base # No [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND +10B60..10B72 ; Grapheme_Base # Lo [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW +10B78..10B7F ; Grapheme_Base # No [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND +10B80..10B91 ; Grapheme_Base # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW +10B99..10B9C ; Grapheme_Base # Po [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT +10BA9..10BAF ; Grapheme_Base # No [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED +10C00..10C48 ; Grapheme_Base # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH +10C80..10CB2 ; Grapheme_Base # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US +10CC0..10CF2 ; Grapheme_Base # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US +10CFA..10CFF ; Grapheme_Base # No [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND +10D00..10D23 ; Grapheme_Base # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA +10D30..10D39 ; Grapheme_Base # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE +10D40..10D49 ; Grapheme_Base # Nd [10] GARAY DIGIT ZERO..GARAY DIGIT NINE +10D4A..10D4D ; Grapheme_Base # Lo [4] GARAY VOWEL SIGN A..GARAY VOWEL SIGN EE +10D4E ; Grapheme_Base # Lm GARAY VOWEL LENGTH MARK +10D4F ; Grapheme_Base # Lo GARAY SUKUN +10D50..10D65 ; Grapheme_Base # L& [22] GARAY CAPITAL LETTER A..GARAY CAPITAL LETTER OLD NA +10D6E ; Grapheme_Base # Pd GARAY HYPHEN +10D6F ; Grapheme_Base # Lm GARAY REDUPLICATION MARK +10D70..10D85 ; Grapheme_Base # L& [22] GARAY SMALL LETTER A..GARAY SMALL LETTER OLD NA +10D8E..10D8F ; Grapheme_Base # Sm [2] GARAY PLUS SIGN..GARAY MINUS SIGN +10E60..10E7E ; Grapheme_Base # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS +10E80..10EA9 ; Grapheme_Base # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET +10EAD ; Grapheme_Base # Pd YEZIDI HYPHENATION MARK +10EB0..10EB1 ; Grapheme_Base # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE +10EC2..10EC4 ; Grapheme_Base # Lo [3] ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW +10EC5 ; Grapheme_Base # Lm ARABIC SMALL YEH BARREE WITH TWO DOTS BELOW +10EC6..10EC7 ; Grapheme_Base # Lo [2] ARABIC LETTER THIN NOON..ARABIC LETTER YEH WITH FOUR DOTS BELOW +10ED0 ; Grapheme_Base # Po ARABIC BIBLICAL END OF VERSE +10ED1..10ED8 ; Grapheme_Base # So [8] ARABIC LIGATURE ALAYHAA AS-SALAATU WAS-SALAAM..ARABIC LIGATURE NAWWARA ALLAAHU MARQADAH +10F00..10F1C ; Grapheme_Base # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL +10F1D..10F26 ; Grapheme_Base # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF +10F27 ; Grapheme_Base # Lo OLD SOGDIAN LIGATURE AYIN-DALETH +10F30..10F45 ; Grapheme_Base # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN +10F51..10F54 ; Grapheme_Base # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED +10F55..10F59 ; Grapheme_Base # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT +10F70..10F81 ; Grapheme_Base # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10F86..10F89 ; Grapheme_Base # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS +10FB0..10FC4 ; Grapheme_Base # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW +10FC5..10FCB ; Grapheme_Base # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED +10FE0..10FF6 ; Grapheme_Base # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH +11000 ; Grapheme_Base # Mc BRAHMI SIGN CANDRABINDU +11002 ; Grapheme_Base # Mc BRAHMI SIGN VISARGA +11003..11037 ; Grapheme_Base # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA +11047..1104D ; Grapheme_Base # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS +11052..11065 ; Grapheme_Base # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND +11066..1106F ; Grapheme_Base # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE +11071..11072 ; Grapheme_Base # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11075 ; Grapheme_Base # Lo BRAHMI LETTER OLD TAMIL LLA +11082 ; Grapheme_Base # Mc KAITHI SIGN VISARGA +11083..110AF ; Grapheme_Base # Lo [45] KAITHI LETTER A..KAITHI LETTER HA +110B0..110B2 ; Grapheme_Base # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II +110B7..110B8 ; Grapheme_Base # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU +110BB..110BC ; Grapheme_Base # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN +110BE..110C1 ; Grapheme_Base # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA +110D0..110E8 ; Grapheme_Base # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE +110F0..110F9 ; Grapheme_Base # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE +11103..11126 ; Grapheme_Base # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA +1112C ; Grapheme_Base # Mc CHAKMA VOWEL SIGN E +11136..1113F ; Grapheme_Base # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE +11140..11143 ; Grapheme_Base # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK +11144 ; Grapheme_Base # Lo CHAKMA LETTER LHAA +11145..11146 ; Grapheme_Base # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI +11147 ; Grapheme_Base # Lo CHAKMA LETTER VAA +11150..11172 ; Grapheme_Base # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA +11174..11175 ; Grapheme_Base # Po [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK +11176 ; Grapheme_Base # Lo MAHAJANI LIGATURE SHRI +11182 ; Grapheme_Base # Mc SHARADA SIGN VISARGA +11183..111B2 ; Grapheme_Base # Lo [48] SHARADA LETTER A..SHARADA LETTER HA +111B3..111B5 ; Grapheme_Base # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II +111BF ; Grapheme_Base # Mc SHARADA VOWEL SIGN AU +111C1..111C4 ; Grapheme_Base # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM +111C5..111C8 ; Grapheme_Base # Po [4] SHARADA DANDA..SHARADA SEPARATOR +111CD ; Grapheme_Base # Po SHARADA SUTRA MARK +111CE ; Grapheme_Base # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E +111D0..111D9 ; Grapheme_Base # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE +111DA ; Grapheme_Base # Lo SHARADA EKAM +111DB ; Grapheme_Base # Po SHARADA SIGN SIDDHAM +111DC ; Grapheme_Base # Lo SHARADA HEADSTROKE +111DD..111DF ; Grapheme_Base # Po [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2 +111E1..111F4 ; Grapheme_Base # No [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND +11200..11211 ; Grapheme_Base # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA +11213..1122B ; Grapheme_Base # Lo [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA +1122C..1122E ; Grapheme_Base # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II +11232..11233 ; Grapheme_Base # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU +11238..1123D ; Grapheme_Base # Po [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN +1123F..11240 ; Grapheme_Base # Lo [2] KHOJKI LETTER QA..KHOJKI LETTER SHORT I +11280..11286 ; Grapheme_Base # Lo [7] MULTANI LETTER A..MULTANI LETTER GA +11288 ; Grapheme_Base # Lo MULTANI LETTER GHA +1128A..1128D ; Grapheme_Base # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA +1128F..1129D ; Grapheme_Base # Lo [15] MULTANI LETTER NYA..MULTANI LETTER BA +1129F..112A8 ; Grapheme_Base # Lo [10] MULTANI LETTER BHA..MULTANI LETTER RHA +112A9 ; Grapheme_Base # Po MULTANI SECTION MARK +112B0..112DE ; Grapheme_Base # Lo [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA +112E0..112E2 ; Grapheme_Base # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II +112F0..112F9 ; Grapheme_Base # Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE +11302..11303 ; Grapheme_Base # Mc [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA +11305..1130C ; Grapheme_Base # Lo [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L +1130F..11310 ; Grapheme_Base # Lo [2] GRANTHA LETTER EE..GRANTHA LETTER AI +11313..11328 ; Grapheme_Base # Lo [22] GRANTHA LETTER OO..GRANTHA LETTER NA +1132A..11330 ; Grapheme_Base # Lo [7] GRANTHA LETTER PA..GRANTHA LETTER RA +11332..11333 ; Grapheme_Base # Lo [2] GRANTHA LETTER LA..GRANTHA LETTER LLA +11335..11339 ; Grapheme_Base # Lo [5] GRANTHA LETTER VA..GRANTHA LETTER HA +1133D ; Grapheme_Base # Lo GRANTHA SIGN AVAGRAHA +1133F ; Grapheme_Base # Mc GRANTHA VOWEL SIGN I +11341..11344 ; Grapheme_Base # Mc [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR +11347..11348 ; Grapheme_Base # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI +1134B..1134C ; Grapheme_Base # Mc [2] GRANTHA VOWEL SIGN OO..GRANTHA VOWEL SIGN AU +11350 ; Grapheme_Base # Lo GRANTHA OM +1135D..11361 ; Grapheme_Base # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL +11362..11363 ; Grapheme_Base # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL +11380..11389 ; Grapheme_Base # Lo [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL +1138B ; Grapheme_Base # Lo TULU-TIGALARI LETTER EE +1138E ; Grapheme_Base # Lo TULU-TIGALARI LETTER AI +11390..113B5 ; Grapheme_Base # Lo [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA +113B7 ; Grapheme_Base # Lo TULU-TIGALARI SIGN AVAGRAHA +113B9..113BA ; Grapheme_Base # Mc [2] TULU-TIGALARI VOWEL SIGN I..TULU-TIGALARI VOWEL SIGN II +113CA ; Grapheme_Base # Mc TULU-TIGALARI SIGN CANDRA ANUNASIKA +113CC..113CD ; Grapheme_Base # Mc [2] TULU-TIGALARI SIGN ANUSVARA..TULU-TIGALARI SIGN VISARGA +113D1 ; Grapheme_Base # Lo TULU-TIGALARI REPHA +113D3 ; Grapheme_Base # Lo TULU-TIGALARI SIGN PLUTA +113D4..113D5 ; Grapheme_Base # Po [2] TULU-TIGALARI DANDA..TULU-TIGALARI DOUBLE DANDA +113D7..113D8 ; Grapheme_Base # Po [2] TULU-TIGALARI SIGN OM PUSHPIKA..TULU-TIGALARI SIGN SHRII PUSHPIKA +11400..11434 ; Grapheme_Base # Lo [53] NEWA LETTER A..NEWA LETTER HA +11435..11437 ; Grapheme_Base # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II +11440..11441 ; Grapheme_Base # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU +11445 ; Grapheme_Base # Mc NEWA SIGN VISARGA +11447..1144A ; Grapheme_Base # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI +1144B..1144F ; Grapheme_Base # Po [5] NEWA DANDA..NEWA ABBREVIATION SIGN +11450..11459 ; Grapheme_Base # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE +1145A..1145B ; Grapheme_Base # Po [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK +1145D ; Grapheme_Base # Po NEWA INSERTION SIGN +1145F..11461 ; Grapheme_Base # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA +11480..114AF ; Grapheme_Base # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA +114B1..114B2 ; Grapheme_Base # Mc [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II +114B9 ; Grapheme_Base # Mc TIRHUTA VOWEL SIGN E +114BB..114BC ; Grapheme_Base # Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O +114BE ; Grapheme_Base # Mc TIRHUTA VOWEL SIGN AU +114C1 ; Grapheme_Base # Mc TIRHUTA SIGN VISARGA +114C4..114C5 ; Grapheme_Base # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG +114C6 ; Grapheme_Base # Po TIRHUTA ABBREVIATION SIGN +114C7 ; Grapheme_Base # Lo TIRHUTA OM +114D0..114D9 ; Grapheme_Base # Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE +11580..115AE ; Grapheme_Base # Lo [47] SIDDHAM LETTER A..SIDDHAM LETTER HA +115B0..115B1 ; Grapheme_Base # Mc [2] SIDDHAM VOWEL SIGN I..SIDDHAM VOWEL SIGN II +115B8..115BB ; Grapheme_Base # Mc [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU +115BE ; Grapheme_Base # Mc SIDDHAM SIGN VISARGA +115C1..115D7 ; Grapheme_Base # Po [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES +115D8..115DB ; Grapheme_Base # Lo [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U +11600..1162F ; Grapheme_Base # Lo [48] MODI LETTER A..MODI LETTER LLA +11630..11632 ; Grapheme_Base # Mc [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II +1163B..1163C ; Grapheme_Base # Mc [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU +1163E ; Grapheme_Base # Mc MODI SIGN VISARGA +11641..11643 ; Grapheme_Base # Po [3] MODI DANDA..MODI ABBREVIATION SIGN +11644 ; Grapheme_Base # Lo MODI SIGN HUVA +11650..11659 ; Grapheme_Base # Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE +11660..1166C ; Grapheme_Base # Po [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT +11680..116AA ; Grapheme_Base # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA +116AC ; Grapheme_Base # Mc TAKRI SIGN VISARGA +116AE..116AF ; Grapheme_Base # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II +116B8 ; Grapheme_Base # Lo TAKRI LETTER ARCHAIC KHA +116B9 ; Grapheme_Base # Po TAKRI ABBREVIATION SIGN +116C0..116C9 ; Grapheme_Base # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE +116D0..116E3 ; Grapheme_Base # Nd [20] MYANMAR PAO DIGIT ZERO..MYANMAR EASTERN PWO KAREN DIGIT NINE +11700..1171A ; Grapheme_Base # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA +1171E ; Grapheme_Base # Mc AHOM CONSONANT SIGN MEDIAL RA +11720..11721 ; Grapheme_Base # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA +11726 ; Grapheme_Base # Mc AHOM VOWEL SIGN E +11730..11739 ; Grapheme_Base # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE +1173A..1173B ; Grapheme_Base # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY +1173C..1173E ; Grapheme_Base # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI +1173F ; Grapheme_Base # So AHOM SYMBOL VI +11740..11746 ; Grapheme_Base # Lo [7] AHOM LETTER CA..AHOM LETTER LLA +11800..1182B ; Grapheme_Base # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA +1182C..1182E ; Grapheme_Base # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II +11838 ; Grapheme_Base # Mc DOGRA SIGN VISARGA +1183B ; Grapheme_Base # Po DOGRA ABBREVIATION SIGN +118A0..118DF ; Grapheme_Base # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO +118E0..118E9 ; Grapheme_Base # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE +118EA..118F2 ; Grapheme_Base # No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY +118FF..11906 ; Grapheme_Base # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E +11909 ; Grapheme_Base # Lo DIVES AKURU LETTER O +1190C..11913 ; Grapheme_Base # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA +11915..11916 ; Grapheme_Base # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA +11918..1192F ; Grapheme_Base # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA +11931..11935 ; Grapheme_Base # Mc [5] DIVES AKURU VOWEL SIGN I..DIVES AKURU VOWEL SIGN E +11937..11938 ; Grapheme_Base # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O +1193F ; Grapheme_Base # Lo DIVES AKURU PREFIXED NASAL SIGN +11940 ; Grapheme_Base # Mc DIVES AKURU MEDIAL YA +11941 ; Grapheme_Base # Lo DIVES AKURU INITIAL RA +11942 ; Grapheme_Base # Mc DIVES AKURU MEDIAL RA +11944..11946 ; Grapheme_Base # Po [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK +11950..11959 ; Grapheme_Base # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE +119A0..119A7 ; Grapheme_Base # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR +119AA..119D0 ; Grapheme_Base # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA +119D1..119D3 ; Grapheme_Base # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II +119DC..119DF ; Grapheme_Base # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA +119E1 ; Grapheme_Base # Lo NANDINAGARI SIGN AVAGRAHA +119E2 ; Grapheme_Base # Po NANDINAGARI SIGN SIDDHAM +119E3 ; Grapheme_Base # Lo NANDINAGARI HEADSTROKE +119E4 ; Grapheme_Base # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E +11A00 ; Grapheme_Base # Lo ZANABAZAR SQUARE LETTER A +11A0B..11A32 ; Grapheme_Base # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA +11A39 ; Grapheme_Base # Mc ZANABAZAR SQUARE SIGN VISARGA +11A3A ; Grapheme_Base # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA +11A3F..11A46 ; Grapheme_Base # Po [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK +11A50 ; Grapheme_Base # Lo SOYOMBO LETTER A +11A57..11A58 ; Grapheme_Base # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU +11A5C..11A89 ; Grapheme_Base # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA +11A97 ; Grapheme_Base # Mc SOYOMBO SIGN VISARGA +11A9A..11A9C ; Grapheme_Base # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD +11A9D ; Grapheme_Base # Lo SOYOMBO MARK PLUTA +11A9E..11AA2 ; Grapheme_Base # Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2 +11AB0..11AF8 ; Grapheme_Base # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +11B00..11B09 ; Grapheme_Base # Po [10] DEVANAGARI HEAD MARK..DEVANAGARI SIGN MINDU +11B61 ; Grapheme_Base # Mc SHARADA VOWEL SIGN OOE +11B65 ; Grapheme_Base # Mc SHARADA VOWEL SIGN SHORT O +11B67 ; Grapheme_Base # Mc SHARADA VOWEL SIGN CANDRA O +11BC0..11BE0 ; Grapheme_Base # Lo [33] SUNUWAR LETTER DEVI..SUNUWAR LETTER KLOKO +11BE1 ; Grapheme_Base # Po SUNUWAR SIGN PVO +11BF0..11BF9 ; Grapheme_Base # Nd [10] SUNUWAR DIGIT ZERO..SUNUWAR DIGIT NINE +11C00..11C08 ; Grapheme_Base # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L +11C0A..11C2E ; Grapheme_Base # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA +11C2F ; Grapheme_Base # Mc BHAIKSUKI VOWEL SIGN AA +11C3E ; Grapheme_Base # Mc BHAIKSUKI SIGN VISARGA +11C40 ; Grapheme_Base # Lo BHAIKSUKI SIGN AVAGRAHA +11C41..11C45 ; Grapheme_Base # Po [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2 +11C50..11C59 ; Grapheme_Base # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE +11C5A..11C6C ; Grapheme_Base # No [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK +11C70..11C71 ; Grapheme_Base # Po [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD +11C72..11C8F ; Grapheme_Base # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A +11CA9 ; Grapheme_Base # Mc MARCHEN SUBJOINED LETTER YA +11CB1 ; Grapheme_Base # Mc MARCHEN VOWEL SIGN I +11CB4 ; Grapheme_Base # Mc MARCHEN VOWEL SIGN O +11D00..11D06 ; Grapheme_Base # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E +11D08..11D09 ; Grapheme_Base # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O +11D0B..11D30 ; Grapheme_Base # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA +11D46 ; Grapheme_Base # Lo MASARAM GONDI REPHA +11D50..11D59 ; Grapheme_Base # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE +11D60..11D65 ; Grapheme_Base # Lo [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU +11D67..11D68 ; Grapheme_Base # Lo [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI +11D6A..11D89 ; Grapheme_Base # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA +11D8A..11D8E ; Grapheme_Base # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU +11D93..11D94 ; Grapheme_Base # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU +11D96 ; Grapheme_Base # Mc GUNJALA GONDI SIGN VISARGA +11D98 ; Grapheme_Base # Lo GUNJALA GONDI OM +11DA0..11DA9 ; Grapheme_Base # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE +11DB0..11DD8 ; Grapheme_Base # Lo [41] TOLONG SIKI LETTER I..TOLONG SIKI LETTER RRH +11DD9 ; Grapheme_Base # Lm TOLONG SIKI SIGN SELA +11DDA..11DDB ; Grapheme_Base # Lo [2] TOLONG SIKI SIGN HECAKA..TOLONG SIKI UNGGA +11DE0..11DE9 ; Grapheme_Base # Nd [10] TOLONG SIKI DIGIT ZERO..TOLONG SIKI DIGIT NINE +11EE0..11EF2 ; Grapheme_Base # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA +11EF5..11EF6 ; Grapheme_Base # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O +11EF7..11EF8 ; Grapheme_Base # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION +11F02 ; Grapheme_Base # Lo KAWI SIGN REPHA +11F03 ; Grapheme_Base # Mc KAWI SIGN VISARGA +11F04..11F10 ; Grapheme_Base # Lo [13] KAWI LETTER A..KAWI LETTER O +11F12..11F33 ; Grapheme_Base # Lo [34] KAWI LETTER KA..KAWI LETTER JNYA +11F34..11F35 ; Grapheme_Base # Mc [2] KAWI VOWEL SIGN AA..KAWI VOWEL SIGN ALTERNATE AA +11F3E..11F3F ; Grapheme_Base # Mc [2] KAWI VOWEL SIGN E..KAWI VOWEL SIGN AI +11F43..11F4F ; Grapheme_Base # Po [13] KAWI DANDA..KAWI PUNCTUATION CLOSING SPIRAL +11F50..11F59 ; Grapheme_Base # Nd [10] KAWI DIGIT ZERO..KAWI DIGIT NINE +11FB0 ; Grapheme_Base # Lo LISU LETTER YHA +11FC0..11FD4 ; Grapheme_Base # No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH +11FD5..11FDC ; Grapheme_Base # So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI +11FDD..11FE0 ; Grapheme_Base # Sc [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN +11FE1..11FF1 ; Grapheme_Base # So [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA +11FFF ; Grapheme_Base # Po TAMIL PUNCTUATION END OF TEXT +12000..12399 ; Grapheme_Base # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U +12400..1246E ; Grapheme_Base # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM +12470..12474 ; Grapheme_Base # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON +12480..12543 ; Grapheme_Base # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; Grapheme_Base # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 +12FF1..12FF2 ; Grapheme_Base # Po [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302 +13000..1342F ; Grapheme_Base # Lo [1072] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH V011D +13441..13446 ; Grapheme_Base # Lo [6] EGYPTIAN HIEROGLYPH FULL BLANK..EGYPTIAN HIEROGLYPH WIDE LOST SIGN +13460..143FA ; Grapheme_Base # Lo [3995] EGYPTIAN HIEROGLYPH-13460..EGYPTIAN HIEROGLYPH-143FA +14400..14646 ; Grapheme_Base # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 +16100..1611D ; Grapheme_Base # Lo [30] GURUNG KHEMA LETTER A..GURUNG KHEMA LETTER SA +1612A..1612C ; Grapheme_Base # Mc [3] GURUNG KHEMA CONSONANT SIGN MEDIAL YA..GURUNG KHEMA CONSONANT SIGN MEDIAL HA +16130..16139 ; Grapheme_Base # Nd [10] GURUNG KHEMA DIGIT ZERO..GURUNG KHEMA DIGIT NINE +16800..16A38 ; Grapheme_Base # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ +16A40..16A5E ; Grapheme_Base # Lo [31] MRO LETTER TA..MRO LETTER TEK +16A60..16A69 ; Grapheme_Base # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE +16A6E..16A6F ; Grapheme_Base # Po [2] MRO DANDA..MRO DOUBLE DANDA +16A70..16ABE ; Grapheme_Base # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AC0..16AC9 ; Grapheme_Base # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE +16AD0..16AED ; Grapheme_Base # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I +16AF5 ; Grapheme_Base # Po BASSA VAH FULL STOP +16B00..16B2F ; Grapheme_Base # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU +16B37..16B3B ; Grapheme_Base # Po [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM +16B3C..16B3F ; Grapheme_Base # So [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB +16B40..16B43 ; Grapheme_Base # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM +16B44 ; Grapheme_Base # Po PAHAWH HMONG SIGN XAUS +16B45 ; Grapheme_Base # So PAHAWH HMONG SIGN CIM TSOV ROG +16B50..16B59 ; Grapheme_Base # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE +16B5B..16B61 ; Grapheme_Base # No [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS +16B63..16B77 ; Grapheme_Base # Lo [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS +16B7D..16B8F ; Grapheme_Base # Lo [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ +16D40..16D42 ; Grapheme_Base # Lm [3] KIRAT RAI SIGN ANUSVARA..KIRAT RAI SIGN VISARGA +16D43..16D6A ; Grapheme_Base # Lo [40] KIRAT RAI LETTER A..KIRAT RAI VOWEL SIGN AU +16D6B..16D6C ; Grapheme_Base # Lm [2] KIRAT RAI SIGN VIRAMA..KIRAT RAI SIGN SAAT +16D6D..16D6F ; Grapheme_Base # Po [3] KIRAT RAI SIGN YUPI..KIRAT RAI DOUBLE DANDA +16D70..16D79 ; Grapheme_Base # Nd [10] KIRAT RAI DIGIT ZERO..KIRAT RAI DIGIT NINE +16E40..16E7F ; Grapheme_Base # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y +16E80..16E96 ; Grapheme_Base # No [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM +16E97..16E9A ; Grapheme_Base # Po [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH +16EA0..16EB8 ; Grapheme_Base # L& [25] BERIA ERFE CAPITAL LETTER ARKAB..BERIA ERFE CAPITAL LETTER AY +16EBB..16ED3 ; Grapheme_Base # L& [25] BERIA ERFE SMALL LETTER ARKAB..BERIA ERFE SMALL LETTER AY +16F00..16F4A ; Grapheme_Base # Lo [75] MIAO LETTER PA..MIAO LETTER RTE +16F50 ; Grapheme_Base # Lo MIAO LETTER NASALIZATION +16F51..16F87 ; Grapheme_Base # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI +16F93..16F9F ; Grapheme_Base # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 +16FE0..16FE1 ; Grapheme_Base # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK +16FE2 ; Grapheme_Base # Po OLD CHINESE HOOK MARK +16FE3 ; Grapheme_Base # Lm OLD CHINESE ITERATION MARK +16FF2..16FF3 ; Grapheme_Base # Lm [2] CHINESE SMALL SIMPLIFIED ER..CHINESE SMALL TRADITIONAL ER +16FF4..16FF6 ; Grapheme_Base # Nl [3] YANGQIN SIGN SLOW ONE BEAT..YANGQIN SIGN SLOW TWO BEATS +17000..18CD5 ; Grapheme_Base # Lo [7382] TANGUT IDEOGRAPH-17000..KHITAN SMALL SCRIPT CHARACTER-18CD5 +18CFF..18D1E ; Grapheme_Base # Lo [32] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D1E +18D80..18DF2 ; Grapheme_Base # Lo [115] TANGUT COMPONENT-769..TANGUT COMPONENT-883 +1AFF0..1AFF3 ; Grapheme_Base # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; Grapheme_Base # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; Grapheme_Base # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B000..1B122 ; Grapheme_Base # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU +1B132 ; Grapheme_Base # Lo HIRAGANA LETTER SMALL KO +1B150..1B152 ; Grapheme_Base # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO +1B155 ; Grapheme_Base # Lo KATAKANA LETTER SMALL KO +1B164..1B167 ; Grapheme_Base # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N +1B170..1B2FB ; Grapheme_Base # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB +1BC00..1BC6A ; Grapheme_Base # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M +1BC70..1BC7C ; Grapheme_Base # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK +1BC80..1BC88 ; Grapheme_Base # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL +1BC90..1BC99 ; Grapheme_Base # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW +1BC9C ; Grapheme_Base # So DUPLOYAN SIGN O WITH CROSS +1BC9F ; Grapheme_Base # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP +1CC00..1CCEF ; Grapheme_Base # So [240] UP-POINTING GO-KART..OUTLINED LATIN CAPITAL LETTER Z +1CCF0..1CCF9 ; Grapheme_Base # Nd [10] OUTLINED DIGIT ZERO..OUTLINED DIGIT NINE +1CCFA..1CCFC ; Grapheme_Base # So [3] SNAKE SYMBOL..NOSE SYMBOL +1CD00..1CEB3 ; Grapheme_Base # So [436] BLOCK OCTANT-3..BLACK RIGHT TRIANGLE CARET +1CEBA..1CED0 ; Grapheme_Base # So [23] FRAGILE SYMBOL..LEUKOTHEA +1CEE0..1CEEF ; Grapheme_Base # So [16] GEOMANTIC FIGURE POPULUS..GEOMANTIC FIGURE VIA +1CEF0 ; Grapheme_Base # Sm MEDIUM SMALL WHITE CIRCLE WITH HORIZONTAL BAR +1CF50..1CFC3 ; Grapheme_Base # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK +1D000..1D0F5 ; Grapheme_Base # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO +1D100..1D126 ; Grapheme_Base # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 +1D129..1D164 ; Grapheme_Base # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +1D16A..1D16C ; Grapheme_Base # So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3 +1D183..1D184 ; Grapheme_Base # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN +1D18C..1D1A9 ; Grapheme_Base # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH +1D1AE..1D1EA ; Grapheme_Base # So [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON +1D200..1D241 ; Grapheme_Base # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 +1D245 ; Grapheme_Base # So GREEK MUSICAL LEIMMA +1D2C0..1D2D3 ; Grapheme_Base # No [20] KAKTOVIK NUMERAL ZERO..KAKTOVIK NUMERAL NINETEEN +1D2E0..1D2F3 ; Grapheme_Base # No [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN +1D300..1D356 ; Grapheme_Base # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING +1D360..1D378 ; Grapheme_Base # No [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE +1D400..1D454 ; Grapheme_Base # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G +1D456..1D49C ; Grapheme_Base # L& [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A +1D49E..1D49F ; Grapheme_Base # L& [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D +1D4A2 ; Grapheme_Base # L& MATHEMATICAL SCRIPT CAPITAL G +1D4A5..1D4A6 ; Grapheme_Base # L& [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K +1D4A9..1D4AC ; Grapheme_Base # L& [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q +1D4AE..1D4B9 ; Grapheme_Base # L& [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D +1D4BB ; Grapheme_Base # L& MATHEMATICAL SCRIPT SMALL F +1D4BD..1D4C3 ; Grapheme_Base # L& [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N +1D4C5..1D505 ; Grapheme_Base # L& [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B +1D507..1D50A ; Grapheme_Base # L& [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G +1D50D..1D514 ; Grapheme_Base # L& [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q +1D516..1D51C ; Grapheme_Base # L& [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y +1D51E..1D539 ; Grapheme_Base # L& [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D53B..1D53E ; Grapheme_Base # L& [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D540..1D544 ; Grapheme_Base # L& [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D546 ; Grapheme_Base # L& MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D54A..1D550 ; Grapheme_Base # L& [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D552..1D6A5 ; Grapheme_Base # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J +1D6A8..1D6C0 ; Grapheme_Base # L& [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA +1D6C1 ; Grapheme_Base # Sm MATHEMATICAL BOLD NABLA +1D6C2..1D6DA ; Grapheme_Base # L& [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA +1D6DB ; Grapheme_Base # Sm MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +1D6DC..1D6FA ; Grapheme_Base # L& [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA +1D6FB ; Grapheme_Base # Sm MATHEMATICAL ITALIC NABLA +1D6FC..1D714 ; Grapheme_Base # L& [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA +1D715 ; Grapheme_Base # Sm MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +1D716..1D734 ; Grapheme_Base # L& [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D735 ; Grapheme_Base # Sm MATHEMATICAL BOLD ITALIC NABLA +1D736..1D74E ; Grapheme_Base # L& [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D74F ; Grapheme_Base # Sm MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +1D750..1D76E ; Grapheme_Base # L& [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D76F ; Grapheme_Base # Sm MATHEMATICAL SANS-SERIF BOLD NABLA +1D770..1D788 ; Grapheme_Base # L& [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D789 ; Grapheme_Base # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +1D78A..1D7A8 ; Grapheme_Base # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1D7A9 ; Grapheme_Base # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA +1D7AA..1D7C2 ; Grapheme_Base # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +1D7C3 ; Grapheme_Base # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL +1D7C4..1D7CB ; Grapheme_Base # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1D7CE..1D7FF ; Grapheme_Base # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE +1D800..1D9FF ; Grapheme_Base # So [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD +1DA37..1DA3A ; Grapheme_Base # So [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE +1DA6D..1DA74 ; Grapheme_Base # So [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING +1DA76..1DA83 ; Grapheme_Base # So [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH +1DA85..1DA86 ; Grapheme_Base # So [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS +1DA87..1DA8B ; Grapheme_Base # Po [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS +1DF00..1DF09 ; Grapheme_Base # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; Grapheme_Base # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; Grapheme_Base # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL +1DF25..1DF2A ; Grapheme_Base # L& [6] LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK..LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK +1E030..1E06D ; Grapheme_Base # Lm [62] MODIFIER LETTER CYRILLIC SMALL A..MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE +1E100..1E12C ; Grapheme_Base # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W +1E137..1E13D ; Grapheme_Base # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER +1E140..1E149 ; Grapheme_Base # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE +1E14E ; Grapheme_Base # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E14F ; Grapheme_Base # So NYIAKENG PUACHUE HMONG CIRCLED CA +1E290..1E2AD ; Grapheme_Base # Lo [30] TOTO LETTER PA..TOTO LETTER A +1E2C0..1E2EB ; Grapheme_Base # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH +1E2F0..1E2F9 ; Grapheme_Base # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE +1E2FF ; Grapheme_Base # Sc WANCHO NGUN SIGN +1E4D0..1E4EA ; Grapheme_Base # Lo [27] NAG MUNDARI LETTER O..NAG MUNDARI LETTER ELL +1E4EB ; Grapheme_Base # Lm NAG MUNDARI SIGN OJOD +1E4F0..1E4F9 ; Grapheme_Base # Nd [10] NAG MUNDARI DIGIT ZERO..NAG MUNDARI DIGIT NINE +1E5D0..1E5ED ; Grapheme_Base # Lo [30] OL ONAL LETTER O..OL ONAL LETTER EG +1E5F0 ; Grapheme_Base # Lo OL ONAL SIGN HODDOND +1E5F1..1E5FA ; Grapheme_Base # Nd [10] OL ONAL DIGIT ZERO..OL ONAL DIGIT NINE +1E5FF ; Grapheme_Base # Po OL ONAL ABBREVIATION SIGN +1E6C0..1E6DE ; Grapheme_Base # Lo [31] TAI YO LETTER LOW KO..TAI YO LETTER HIGH KVO +1E6E0..1E6E2 ; Grapheme_Base # Lo [3] TAI YO LETTER AA..TAI YO LETTER UE +1E6E4..1E6E5 ; Grapheme_Base # Lo [2] TAI YO LETTER U..TAI YO LETTER AE +1E6E7..1E6ED ; Grapheme_Base # Lo [7] TAI YO LETTER O..TAI YO LETTER AUE +1E6F0..1E6F4 ; Grapheme_Base # Lo [5] TAI YO LETTER AN..TAI YO LETTER AP +1E6FE ; Grapheme_Base # Lo TAI YO SYMBOL MUEANG +1E6FF ; Grapheme_Base # Lm TAI YO XAM LAI +1E7E0..1E7E6 ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; Grapheme_Base # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; Grapheme_Base # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; Grapheme_Base # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE +1E800..1E8C4 ; Grapheme_Base # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON +1E8C7..1E8CF ; Grapheme_Base # No [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE +1E900..1E943 ; Grapheme_Base # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA +1E94B ; Grapheme_Base # Lm ADLAM NASALIZATION MARK +1E950..1E959 ; Grapheme_Base # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE +1E95E..1E95F ; Grapheme_Base # Po [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK +1EC71..1ECAB ; Grapheme_Base # No [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE +1ECAC ; Grapheme_Base # So INDIC SIYAQ PLACEHOLDER +1ECAD..1ECAF ; Grapheme_Base # No [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS +1ECB0 ; Grapheme_Base # Sc INDIC SIYAQ RUPEE MARK +1ECB1..1ECB4 ; Grapheme_Base # No [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK +1ED01..1ED2D ; Grapheme_Base # No [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND +1ED2E ; Grapheme_Base # So OTTOMAN SIYAQ MARRATAN +1ED2F..1ED3D ; Grapheme_Base # No [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH +1EE00..1EE03 ; Grapheme_Base # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL +1EE05..1EE1F ; Grapheme_Base # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF +1EE21..1EE22 ; Grapheme_Base # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM +1EE24 ; Grapheme_Base # Lo ARABIC MATHEMATICAL INITIAL HEH +1EE27 ; Grapheme_Base # Lo ARABIC MATHEMATICAL INITIAL HAH +1EE29..1EE32 ; Grapheme_Base # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF +1EE34..1EE37 ; Grapheme_Base # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH +1EE39 ; Grapheme_Base # Lo ARABIC MATHEMATICAL INITIAL DAD +1EE3B ; Grapheme_Base # Lo ARABIC MATHEMATICAL INITIAL GHAIN +1EE42 ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED JEEM +1EE47 ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED HAH +1EE49 ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED YEH +1EE4B ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED LAM +1EE4D..1EE4F ; Grapheme_Base # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN +1EE51..1EE52 ; Grapheme_Base # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF +1EE54 ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED SHEEN +1EE57 ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED KHAH +1EE59 ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED DAD +1EE5B ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED GHAIN +1EE5D ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON +1EE5F ; Grapheme_Base # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF +1EE61..1EE62 ; Grapheme_Base # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM +1EE64 ; Grapheme_Base # Lo ARABIC MATHEMATICAL STRETCHED HEH +1EE67..1EE6A ; Grapheme_Base # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF +1EE6C..1EE72 ; Grapheme_Base # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF +1EE74..1EE77 ; Grapheme_Base # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH +1EE79..1EE7C ; Grapheme_Base # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH +1EE7E ; Grapheme_Base # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH +1EE80..1EE89 ; Grapheme_Base # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH +1EE8B..1EE9B ; Grapheme_Base # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN +1EEA1..1EEA3 ; Grapheme_Base # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL +1EEA5..1EEA9 ; Grapheme_Base # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH +1EEAB..1EEBB ; Grapheme_Base # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN +1EEF0..1EEF1 ; Grapheme_Base # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL +1F000..1F02B ; Grapheme_Base # So [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK +1F030..1F093 ; Grapheme_Base # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06 +1F0A0..1F0AE ; Grapheme_Base # So [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES +1F0B1..1F0BF ; Grapheme_Base # So [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER +1F0C1..1F0CF ; Grapheme_Base # So [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER +1F0D1..1F0F5 ; Grapheme_Base # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21 +1F100..1F10C ; Grapheme_Base # No [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO +1F10D..1F1AD ; Grapheme_Base # So [161] CIRCLED ZERO WITH SLASH..MASK WORK SYMBOL +1F1E6..1F202 ; Grapheme_Base # So [29] REGIONAL INDICATOR SYMBOL LETTER A..SQUARED KATAKANA SA +1F210..1F23B ; Grapheme_Base # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D +1F240..1F248 ; Grapheme_Base # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 +1F250..1F251 ; Grapheme_Base # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT +1F260..1F265 ; Grapheme_Base # So [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI +1F300..1F3FA ; Grapheme_Base # So [251] CYCLONE..AMPHORA +1F3FB..1F3FF ; Grapheme_Base # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 +1F400..1F6D8 ; Grapheme_Base # So [729] RAT..LANDSLIDE +1F6DC..1F6EC ; Grapheme_Base # So [17] WIRELESS..AIRPLANE ARRIVING +1F6F0..1F6FC ; Grapheme_Base # So [13] SATELLITE..ROLLER SKATE +1F700..1F7D9 ; Grapheme_Base # So [218] ALCHEMICAL SYMBOL FOR QUINTESSENCE..NINE POINTED WHITE STAR +1F7E0..1F7EB ; Grapheme_Base # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE +1F7F0 ; Grapheme_Base # So HEAVY EQUALS SIGN +1F800..1F80B ; Grapheme_Base # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD +1F810..1F847 ; Grapheme_Base # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW +1F850..1F859 ; Grapheme_Base # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW +1F860..1F887 ; Grapheme_Base # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW +1F890..1F8AD ; Grapheme_Base # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS +1F8B0..1F8BB ; Grapheme_Base # So [12] ARROW POINTING UPWARDS THEN NORTH WEST..SOUTH WEST ARROW FROM BAR +1F8C0..1F8C1 ; Grapheme_Base # So [2] LEFTWARDS ARROW FROM DOWNWARDS ARROW..RIGHTWARDS ARROW FROM DOWNWARDS ARROW +1F8D0..1F8D8 ; Grapheme_Base # Sm [9] LONG RIGHTWARDS ARROW OVER LONG LEFTWARDS ARROW..LONG LEFT RIGHT ARROW WITH DEPENDENT LOBE +1F900..1FA57 ; Grapheme_Base # So [344] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS ALFIL +1FA60..1FA6D ; Grapheme_Base # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER +1FA70..1FA7C ; Grapheme_Base # So [13] BALLET SHOES..CRUTCH +1FA80..1FA8A ; Grapheme_Base # So [11] YO-YO..TROMBONE +1FA8E..1FAC6 ; Grapheme_Base # So [57] TREASURE CHEST..FINGERPRINT +1FAC8 ; Grapheme_Base # So HAIRY CREATURE +1FACD..1FADC ; Grapheme_Base # So [16] ORCA..ROOT VEGETABLE +1FADF..1FAEA ; Grapheme_Base # So [12] SPLATTER..DISTORTED FACE +1FAEF..1FAF8 ; Grapheme_Base # So [10] FIGHT CLOUD..RIGHTWARDS PUSHING HAND +1FB00..1FB92 ; Grapheme_Base # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK +1FB94..1FBEF ; Grapheme_Base # So [92] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE +1FBF0..1FBF9 ; Grapheme_Base # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE +1FBFA ; Grapheme_Base # So ALARM BELL SYMBOL +20000..2A6DF ; Grapheme_Base # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B81D ; Grapheme_Base # Lo [4382] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B81D +2B820..2CEAD ; Grapheme_Base # Lo [5774] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEAD +2CEB0..2EBE0 ; Grapheme_Base # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 +2EBF0..2EE5D ; Grapheme_Base # Lo [622] CJK UNIFIED IDEOGRAPH-2EBF0..CJK UNIFIED IDEOGRAPH-2EE5D +2F800..2FA1D ; Grapheme_Base # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D +30000..3134A ; Grapheme_Base # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A +31350..33479 ; Grapheme_Base # Lo [8490] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-33479 + +# Total code points: 157494 + +# ================================================ + +# Derived Property: Grapheme_Link (deprecated) +# Generated from: Canonical_Combining_Class=Virama +# Use Canonical_Combining_Class=Virama directly instead + +094D ; Grapheme_Link # Mn DEVANAGARI SIGN VIRAMA +09CD ; Grapheme_Link # Mn BENGALI SIGN VIRAMA +0A4D ; Grapheme_Link # Mn GURMUKHI SIGN VIRAMA +0ACD ; Grapheme_Link # Mn GUJARATI SIGN VIRAMA +0B4D ; Grapheme_Link # Mn ORIYA SIGN VIRAMA +0BCD ; Grapheme_Link # Mn TAMIL SIGN VIRAMA +0C4D ; Grapheme_Link # Mn TELUGU SIGN VIRAMA +0CCD ; Grapheme_Link # Mn KANNADA SIGN VIRAMA +0D3B..0D3C ; Grapheme_Link # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA +0D4D ; Grapheme_Link # Mn MALAYALAM SIGN VIRAMA +0DCA ; Grapheme_Link # Mn SINHALA SIGN AL-LAKUNA +0E3A ; Grapheme_Link # Mn THAI CHARACTER PHINTHU +0EBA ; Grapheme_Link # Mn LAO SIGN PALI VIRAMA +0F84 ; Grapheme_Link # Mn TIBETAN MARK HALANTA +1039..103A ; Grapheme_Link # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT +1714 ; Grapheme_Link # Mn TAGALOG SIGN VIRAMA +1715 ; Grapheme_Link # Mc TAGALOG SIGN PAMUDPOD +1734 ; Grapheme_Link # Mc HANUNOO SIGN PAMUDPOD +17D2 ; Grapheme_Link # Mn KHMER SIGN COENG +1A60 ; Grapheme_Link # Mn TAI THAM SIGN SAKOT +1B44 ; Grapheme_Link # Mc BALINESE ADEG ADEG +1BAA ; Grapheme_Link # Mc SUNDANESE SIGN PAMAAEH +1BAB ; Grapheme_Link # Mn SUNDANESE SIGN VIRAMA +1BF2..1BF3 ; Grapheme_Link # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN +2D7F ; Grapheme_Link # Mn TIFINAGH CONSONANT JOINER +A806 ; Grapheme_Link # Mn SYLOTI NAGRI SIGN HASANTA +A82C ; Grapheme_Link # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA +A8C4 ; Grapheme_Link # Mn SAURASHTRA SIGN VIRAMA +A953 ; Grapheme_Link # Mc REJANG VIRAMA +A9C0 ; Grapheme_Link # Mc JAVANESE PANGKON +AAF6 ; Grapheme_Link # Mn MEETEI MAYEK VIRAMA +ABED ; Grapheme_Link # Mn MEETEI MAYEK APUN IYEK +10A3F ; Grapheme_Link # Mn KHAROSHTHI VIRAMA +11046 ; Grapheme_Link # Mn BRAHMI VIRAMA +11070 ; Grapheme_Link # Mn BRAHMI SIGN OLD TAMIL VIRAMA +1107F ; Grapheme_Link # Mn BRAHMI NUMBER JOINER +110B9 ; Grapheme_Link # Mn KAITHI SIGN VIRAMA +11133..11134 ; Grapheme_Link # Mn [2] CHAKMA VIRAMA..CHAKMA MAAYYAA +111C0 ; Grapheme_Link # Mc SHARADA SIGN VIRAMA +11235 ; Grapheme_Link # Mc KHOJKI SIGN VIRAMA +112EA ; Grapheme_Link # Mn KHUDAWADI SIGN VIRAMA +1134D ; Grapheme_Link # Mc GRANTHA SIGN VIRAMA +113CE ; Grapheme_Link # Mn TULU-TIGALARI SIGN VIRAMA +113CF ; Grapheme_Link # Mc TULU-TIGALARI SIGN LOOPED VIRAMA +113D0 ; Grapheme_Link # Mn TULU-TIGALARI CONJOINER +11442 ; Grapheme_Link # Mn NEWA SIGN VIRAMA +114C2 ; Grapheme_Link # Mn TIRHUTA SIGN VIRAMA +115BF ; Grapheme_Link # Mn SIDDHAM SIGN VIRAMA +1163F ; Grapheme_Link # Mn MODI SIGN VIRAMA +116B6 ; Grapheme_Link # Mc TAKRI SIGN VIRAMA +1172B ; Grapheme_Link # Mn AHOM SIGN KILLER +11839 ; Grapheme_Link # Mn DOGRA SIGN VIRAMA +1193D ; Grapheme_Link # Mc DIVES AKURU SIGN HALANTA +1193E ; Grapheme_Link # Mn DIVES AKURU VIRAMA +119E0 ; Grapheme_Link # Mn NANDINAGARI SIGN VIRAMA +11A34 ; Grapheme_Link # Mn ZANABAZAR SQUARE SIGN VIRAMA +11A47 ; Grapheme_Link # Mn ZANABAZAR SQUARE SUBJOINER +11A99 ; Grapheme_Link # Mn SOYOMBO SUBJOINER +11C3F ; Grapheme_Link # Mn BHAIKSUKI SIGN VIRAMA +11D44..11D45 ; Grapheme_Link # Mn [2] MASARAM GONDI SIGN HALANTA..MASARAM GONDI VIRAMA +11D97 ; Grapheme_Link # Mn GUNJALA GONDI VIRAMA +11F41 ; Grapheme_Link # Mc KAWI SIGN KILLER +11F42 ; Grapheme_Link # Mn KAWI CONJOINER +1612F ; Grapheme_Link # Mn GURUNG KHEMA SIGN THOLHOMA + +# Total code points: 69 + +# ================================================ + +# Derived Property: Indic_Conjunct_Break +# Generated from the Grapheme_Cluster_Break, Indic_Syllabic_Category, +# Canonical_Combining_Class, and Script properties as described in UAX #44: +# https://www.unicode.org/reports/tr44/. + +# All code points not explicitly listed for Indic_Conjunct_Break +# have the value None. + +# @missing: 0000..10FFFF; InCB; None + +# ================================================ + +# Indic_Conjunct_Break=Linker + +094D ; InCB; Linker # Mn DEVANAGARI SIGN VIRAMA +09CD ; InCB; Linker # Mn BENGALI SIGN VIRAMA +0ACD ; InCB; Linker # Mn GUJARATI SIGN VIRAMA +0B4D ; InCB; Linker # Mn ORIYA SIGN VIRAMA +0C4D ; InCB; Linker # Mn TELUGU SIGN VIRAMA +0D4D ; InCB; Linker # Mn MALAYALAM SIGN VIRAMA +1039 ; InCB; Linker # Mn MYANMAR SIGN VIRAMA +17D2 ; InCB; Linker # Mn KHMER SIGN COENG +1A60 ; InCB; Linker # Mn TAI THAM SIGN SAKOT +1B44 ; InCB; Linker # Mc BALINESE ADEG ADEG +1BAB ; InCB; Linker # Mn SUNDANESE SIGN VIRAMA +A9C0 ; InCB; Linker # Mc JAVANESE PANGKON +AAF6 ; InCB; Linker # Mn MEETEI MAYEK VIRAMA +10A3F ; InCB; Linker # Mn KHAROSHTHI VIRAMA +11133 ; InCB; Linker # Mn CHAKMA VIRAMA +113D0 ; InCB; Linker # Mn TULU-TIGALARI CONJOINER +1193E ; InCB; Linker # Mn DIVES AKURU VIRAMA +11A47 ; InCB; Linker # Mn ZANABAZAR SQUARE SUBJOINER +11A99 ; InCB; Linker # Mn SOYOMBO SUBJOINER +11F42 ; InCB; Linker # Mn KAWI CONJOINER + +# Total code points: 20 + +# ================================================ + +# Indic_Conjunct_Break=Consonant + +0915..0939 ; InCB; Consonant # Lo [37] DEVANAGARI LETTER KA..DEVANAGARI LETTER HA +0958..095F ; InCB; Consonant # Lo [8] DEVANAGARI LETTER QA..DEVANAGARI LETTER YYA +0978..097F ; InCB; Consonant # Lo [8] DEVANAGARI LETTER MARWARI DDA..DEVANAGARI LETTER BBA +0995..09A8 ; InCB; Consonant # Lo [20] BENGALI LETTER KA..BENGALI LETTER NA +09AA..09B0 ; InCB; Consonant # Lo [7] BENGALI LETTER PA..BENGALI LETTER RA +09B2 ; InCB; Consonant # Lo BENGALI LETTER LA +09B6..09B9 ; InCB; Consonant # Lo [4] BENGALI LETTER SHA..BENGALI LETTER HA +09DC..09DD ; InCB; Consonant # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA +09DF ; InCB; Consonant # Lo BENGALI LETTER YYA +09F0..09F1 ; InCB; Consonant # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL +0A95..0AA8 ; InCB; Consonant # Lo [20] GUJARATI LETTER KA..GUJARATI LETTER NA +0AAA..0AB0 ; InCB; Consonant # Lo [7] GUJARATI LETTER PA..GUJARATI LETTER RA +0AB2..0AB3 ; InCB; Consonant # Lo [2] GUJARATI LETTER LA..GUJARATI LETTER LLA +0AB5..0AB9 ; InCB; Consonant # Lo [5] GUJARATI LETTER VA..GUJARATI LETTER HA +0AF9 ; InCB; Consonant # Lo GUJARATI LETTER ZHA +0B15..0B28 ; InCB; Consonant # Lo [20] ORIYA LETTER KA..ORIYA LETTER NA +0B2A..0B30 ; InCB; Consonant # Lo [7] ORIYA LETTER PA..ORIYA LETTER RA +0B32..0B33 ; InCB; Consonant # Lo [2] ORIYA LETTER LA..ORIYA LETTER LLA +0B35..0B39 ; InCB; Consonant # Lo [5] ORIYA LETTER VA..ORIYA LETTER HA +0B5C..0B5D ; InCB; Consonant # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA +0B5F ; InCB; Consonant # Lo ORIYA LETTER YYA +0B71 ; InCB; Consonant # Lo ORIYA LETTER WA +0C15..0C28 ; InCB; Consonant # Lo [20] TELUGU LETTER KA..TELUGU LETTER NA +0C2A..0C39 ; InCB; Consonant # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA +0C58..0C5A ; InCB; Consonant # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0D15..0D3A ; InCB; Consonant # Lo [38] MALAYALAM LETTER KA..MALAYALAM LETTER TTTA +1000..102A ; InCB; Consonant # Lo [43] MYANMAR LETTER KA..MYANMAR LETTER AU +103F ; InCB; Consonant # Lo MYANMAR LETTER GREAT SA +1050..1055 ; InCB; Consonant # Lo [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL +105A..105D ; InCB; Consonant # Lo [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE +1061 ; InCB; Consonant # Lo MYANMAR LETTER SGAW KAREN SHA +1065..1066 ; InCB; Consonant # Lo [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA +106E..1070 ; InCB; Consonant # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA +1075..1081 ; InCB; Consonant # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA +108E ; InCB; Consonant # Lo MYANMAR LETTER RUMAI PALAUNG FA +1780..17B3 ; InCB; Consonant # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU +1A20..1A54 ; InCB; Consonant # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA +1B0B..1B0C ; InCB; Consonant # Lo [2] BALINESE LETTER RA REPA..BALINESE LETTER RA REPA TEDUNG +1B13..1B33 ; InCB; Consonant # Lo [33] BALINESE LETTER KA..BALINESE LETTER HA +1B45..1B4C ; InCB; Consonant # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA +1B83..1BA0 ; InCB; Consonant # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA +1BAE..1BAF ; InCB; Consonant # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA +1BBB..1BBD ; InCB; Consonant # Lo [3] SUNDANESE LETTER REU..SUNDANESE LETTER BHA +A989..A98B ; InCB; Consonant # Lo [3] JAVANESE LETTER PA CEREK..JAVANESE LETTER NGA LELET RASWADI +A98F..A9B2 ; InCB; Consonant # Lo [36] JAVANESE LETTER KA..JAVANESE LETTER HA +A9E0..A9E4 ; InCB; Consonant # Lo [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA +A9E7..A9EF ; InCB; Consonant # Lo [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA +A9FA..A9FE ; InCB; Consonant # Lo [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA +AA60..AA6F ; InCB; Consonant # Lo [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA +AA71..AA73 ; InCB; Consonant # Lo [3] MYANMAR LETTER KHAMTI XA..MYANMAR LETTER KHAMTI RA +AA7A ; InCB; Consonant # Lo MYANMAR LETTER AITON RA +AA7E..AA7F ; InCB; Consonant # Lo [2] MYANMAR LETTER SHWE PALAUNG CHA..MYANMAR LETTER SHWE PALAUNG SHA +AAE0..AAEA ; InCB; Consonant # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA +ABC0..ABDA ; InCB; Consonant # Lo [27] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER BHAM +10A00 ; InCB; Consonant # Lo KHAROSHTHI LETTER A +10A10..10A13 ; InCB; Consonant # Lo [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA +10A15..10A17 ; InCB; Consonant # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA +10A19..10A35 ; InCB; Consonant # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA +11103..11126 ; InCB; Consonant # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA +11144 ; InCB; Consonant # Lo CHAKMA LETTER LHAA +11147 ; InCB; Consonant # Lo CHAKMA LETTER VAA +11380..11389 ; InCB; Consonant # Lo [10] TULU-TIGALARI LETTER A..TULU-TIGALARI LETTER VOCALIC LL +1138B ; InCB; Consonant # Lo TULU-TIGALARI LETTER EE +1138E ; InCB; Consonant # Lo TULU-TIGALARI LETTER AI +11390..113B5 ; InCB; Consonant # Lo [38] TULU-TIGALARI LETTER OO..TULU-TIGALARI LETTER LLLA +11900..11906 ; InCB; Consonant # Lo [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E +11909 ; InCB; Consonant # Lo DIVES AKURU LETTER O +1190C..11913 ; InCB; Consonant # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA +11915..11916 ; InCB; Consonant # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA +11918..1192F ; InCB; Consonant # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA +11A00 ; InCB; Consonant # Lo ZANABAZAR SQUARE LETTER A +11A0B..11A32 ; InCB; Consonant # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA +11A50 ; InCB; Consonant # Lo SOYOMBO LETTER A +11A5C..11A83 ; InCB; Consonant # Lo [40] SOYOMBO LETTER KA..SOYOMBO LETTER KSSA +11F04..11F10 ; InCB; Consonant # Lo [13] KAWI LETTER A..KAWI LETTER O +11F12..11F33 ; InCB; Consonant # Lo [34] KAWI LETTER KA..KAWI LETTER JNYA + +# Total code points: 911 + +# ================================================ + +# Indic_Conjunct_Break=Extend + +0300..036F ; InCB; Extend # Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X +0483..0487 ; InCB; Extend # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE +0488..0489 ; InCB; Extend # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN +0591..05BD ; InCB; Extend # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG +05BF ; InCB; Extend # Mn HEBREW POINT RAFE +05C1..05C2 ; InCB; Extend # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT +05C4..05C5 ; InCB; Extend # Mn [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT +05C7 ; InCB; Extend # Mn HEBREW POINT QAMATS QATAN +0610..061A ; InCB; Extend # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA +064B..065F ; InCB; Extend # Mn [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW +0670 ; InCB; Extend # Mn ARABIC LETTER SUPERSCRIPT ALEF +06D6..06DC ; InCB; Extend # Mn [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN +06DF..06E4 ; InCB; Extend # Mn [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA +06E7..06E8 ; InCB; Extend # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON +06EA..06ED ; InCB; Extend # Mn [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM +0711 ; InCB; Extend # Mn SYRIAC LETTER SUPERSCRIPT ALAPH +0730..074A ; InCB; Extend # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH +07A6..07B0 ; InCB; Extend # Mn [11] THAANA ABAFILI..THAANA SUKUN +07EB..07F3 ; InCB; Extend # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE +07FD ; InCB; Extend # Mn NKO DANTAYALAN +0816..0819 ; InCB; Extend # Mn [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH +081B..0823 ; InCB; Extend # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A +0825..0827 ; InCB; Extend # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U +0829..082D ; InCB; Extend # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA +0859..085B ; InCB; Extend # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK +0897..089F ; InCB; Extend # Mn [9] ARABIC PEPET..ARABIC HALF MADDA OVER MADDA +08CA..08E1 ; InCB; Extend # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA +08E3..0902 ; InCB; Extend # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA +093A ; InCB; Extend # Mn DEVANAGARI VOWEL SIGN OE +093C ; InCB; Extend # Mn DEVANAGARI SIGN NUKTA +0941..0948 ; InCB; Extend # Mn [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI +0951..0957 ; InCB; Extend # Mn [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE +0962..0963 ; InCB; Extend # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL +0981 ; InCB; Extend # Mn BENGALI SIGN CANDRABINDU +09BC ; InCB; Extend # Mn BENGALI SIGN NUKTA +09BE ; InCB; Extend # Mc BENGALI VOWEL SIGN AA +09C1..09C4 ; InCB; Extend # Mn [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR +09D7 ; InCB; Extend # Mc BENGALI AU LENGTH MARK +09E2..09E3 ; InCB; Extend # Mn [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL +09FE ; InCB; Extend # Mn BENGALI SANDHI MARK +0A01..0A02 ; InCB; Extend # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI +0A3C ; InCB; Extend # Mn GURMUKHI SIGN NUKTA +0A41..0A42 ; InCB; Extend # Mn [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU +0A47..0A48 ; InCB; Extend # Mn [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI +0A4B..0A4D ; InCB; Extend # Mn [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA +0A51 ; InCB; Extend # Mn GURMUKHI SIGN UDAAT +0A70..0A71 ; InCB; Extend # Mn [2] GURMUKHI TIPPI..GURMUKHI ADDAK +0A75 ; InCB; Extend # Mn GURMUKHI SIGN YAKASH +0A81..0A82 ; InCB; Extend # Mn [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA +0ABC ; InCB; Extend # Mn GUJARATI SIGN NUKTA +0AC1..0AC5 ; InCB; Extend # Mn [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E +0AC7..0AC8 ; InCB; Extend # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI +0AE2..0AE3 ; InCB; Extend # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL +0AFA..0AFF ; InCB; Extend # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE +0B01 ; InCB; Extend # Mn ORIYA SIGN CANDRABINDU +0B3C ; InCB; Extend # Mn ORIYA SIGN NUKTA +0B3E ; InCB; Extend # Mc ORIYA VOWEL SIGN AA +0B3F ; InCB; Extend # Mn ORIYA VOWEL SIGN I +0B41..0B44 ; InCB; Extend # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR +0B55..0B56 ; InCB; Extend # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK +0B57 ; InCB; Extend # Mc ORIYA AU LENGTH MARK +0B62..0B63 ; InCB; Extend # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL +0B82 ; InCB; Extend # Mn TAMIL SIGN ANUSVARA +0BBE ; InCB; Extend # Mc TAMIL VOWEL SIGN AA +0BC0 ; InCB; Extend # Mn TAMIL VOWEL SIGN II +0BCD ; InCB; Extend # Mn TAMIL SIGN VIRAMA +0BD7 ; InCB; Extend # Mc TAMIL AU LENGTH MARK +0C00 ; InCB; Extend # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE +0C04 ; InCB; Extend # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE +0C3C ; InCB; Extend # Mn TELUGU SIGN NUKTA +0C3E..0C40 ; InCB; Extend # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II +0C46..0C48 ; InCB; Extend # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI +0C4A..0C4C ; InCB; Extend # Mn [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU +0C55..0C56 ; InCB; Extend # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK +0C62..0C63 ; InCB; Extend # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL +0C81 ; InCB; Extend # Mn KANNADA SIGN CANDRABINDU +0CBC ; InCB; Extend # Mn KANNADA SIGN NUKTA +0CBF ; InCB; Extend # Mn KANNADA VOWEL SIGN I +0CC0 ; InCB; Extend # Mc KANNADA VOWEL SIGN II +0CC2 ; InCB; Extend # Mc KANNADA VOWEL SIGN UU +0CC6 ; InCB; Extend # Mn KANNADA VOWEL SIGN E +0CC7..0CC8 ; InCB; Extend # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI +0CCA..0CCB ; InCB; Extend # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO +0CCC..0CCD ; InCB; Extend # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA +0CD5..0CD6 ; InCB; Extend # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK +0CE2..0CE3 ; InCB; Extend # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL +0D00..0D01 ; InCB; Extend # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU +0D3B..0D3C ; InCB; Extend # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA +0D3E ; InCB; Extend # Mc MALAYALAM VOWEL SIGN AA +0D41..0D44 ; InCB; Extend # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR +0D57 ; InCB; Extend # Mc MALAYALAM AU LENGTH MARK +0D62..0D63 ; InCB; Extend # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL +0D81 ; InCB; Extend # Mn SINHALA SIGN CANDRABINDU +0DCA ; InCB; Extend # Mn SINHALA SIGN AL-LAKUNA +0DCF ; InCB; Extend # Mc SINHALA VOWEL SIGN AELA-PILLA +0DD2..0DD4 ; InCB; Extend # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA +0DD6 ; InCB; Extend # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA +0DDF ; InCB; Extend # Mc SINHALA VOWEL SIGN GAYANUKITTA +0E31 ; InCB; Extend # Mn THAI CHARACTER MAI HAN-AKAT +0E34..0E3A ; InCB; Extend # Mn [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU +0E47..0E4E ; InCB; Extend # Mn [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN +0EB1 ; InCB; Extend # Mn LAO VOWEL SIGN MAI KAN +0EB4..0EBC ; InCB; Extend # Mn [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO +0EC8..0ECE ; InCB; Extend # Mn [7] LAO TONE MAI EK..LAO YAMAKKAN +0F18..0F19 ; InCB; Extend # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS +0F35 ; InCB; Extend # Mn TIBETAN MARK NGAS BZUNG NYI ZLA +0F37 ; InCB; Extend # Mn TIBETAN MARK NGAS BZUNG SGOR RTAGS +0F39 ; InCB; Extend # Mn TIBETAN MARK TSA -PHRU +0F71..0F7E ; InCB; Extend # Mn [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO +0F80..0F84 ; InCB; Extend # Mn [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA +0F86..0F87 ; InCB; Extend # Mn [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS +0F8D..0F97 ; InCB; Extend # Mn [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA +0F99..0FBC ; InCB; Extend # Mn [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA +0FC6 ; InCB; Extend # Mn TIBETAN SYMBOL PADMA GDAN +102D..1030 ; InCB; Extend # Mn [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU +1032..1037 ; InCB; Extend # Mn [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW +103A ; InCB; Extend # Mn MYANMAR SIGN ASAT +103D..103E ; InCB; Extend # Mn [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA +1058..1059 ; InCB; Extend # Mn [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL +105E..1060 ; InCB; Extend # Mn [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA +1071..1074 ; InCB; Extend # Mn [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE +1082 ; InCB; Extend # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA +1085..1086 ; InCB; Extend # Mn [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y +108D ; InCB; Extend # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE +109D ; InCB; Extend # Mn MYANMAR VOWEL SIGN AITON AI +135D..135F ; InCB; Extend # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK +1712..1714 ; InCB; Extend # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA +1715 ; InCB; Extend # Mc TAGALOG SIGN PAMUDPOD +1732..1733 ; InCB; Extend # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1734 ; InCB; Extend # Mc HANUNOO SIGN PAMUDPOD +1752..1753 ; InCB; Extend # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U +1772..1773 ; InCB; Extend # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U +17B4..17B5 ; InCB; Extend # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA +17B7..17BD ; InCB; Extend # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA +17C6 ; InCB; Extend # Mn KHMER SIGN NIKAHIT +17C9..17D1 ; InCB; Extend # Mn [9] KHMER SIGN MUUSIKATOAN..KHMER SIGN VIRIAM +17D3 ; InCB; Extend # Mn KHMER SIGN BATHAMASAT +17DD ; InCB; Extend # Mn KHMER SIGN ATTHACAN +180B..180D ; InCB; Extend # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; InCB; Extend # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR +1885..1886 ; InCB; Extend # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA +18A9 ; InCB; Extend # Mn MONGOLIAN LETTER ALI GALI DAGALGA +1920..1922 ; InCB; Extend # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U +1927..1928 ; InCB; Extend # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O +1932 ; InCB; Extend # Mn LIMBU SMALL LETTER ANUSVARA +1939..193B ; InCB; Extend # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I +1A17..1A18 ; InCB; Extend # Mn [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U +1A1B ; InCB; Extend # Mn BUGINESE VOWEL SIGN AE +1A56 ; InCB; Extend # Mn TAI THAM CONSONANT SIGN MEDIAL LA +1A58..1A5E ; InCB; Extend # Mn [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA +1A62 ; InCB; Extend # Mn TAI THAM VOWEL SIGN MAI SAT +1A65..1A6C ; InCB; Extend # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW +1A73..1A7C ; InCB; Extend # Mn [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN +1A7F ; InCB; Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT +1AB0..1ABD ; InCB; Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW +1ABE ; InCB; Extend # Me COMBINING PARENTHESES OVERLAY +1ABF..1ADD ; InCB; Extend # Mn [31] COMBINING LATIN SMALL LETTER W BELOW..COMBINING DOT-AND-RING BELOW +1AE0..1AEB ; InCB; Extend # Mn [12] COMBINING LEFT TACK ABOVE..COMBINING DOUBLE RIGHTWARDS ARROW ABOVE +1B00..1B03 ; InCB; Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG +1B34 ; InCB; Extend # Mn BALINESE SIGN REREKAN +1B35 ; InCB; Extend # Mc BALINESE VOWEL SIGN TEDUNG +1B36..1B3A ; InCB; Extend # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA +1B3B ; InCB; Extend # Mc BALINESE VOWEL SIGN RA REPA TEDUNG +1B3C ; InCB; Extend # Mn BALINESE VOWEL SIGN LA LENGA +1B3D ; InCB; Extend # Mc BALINESE VOWEL SIGN LA LENGA TEDUNG +1B42 ; InCB; Extend # Mn BALINESE VOWEL SIGN PEPET +1B43 ; InCB; Extend # Mc BALINESE VOWEL SIGN PEPET TEDUNG +1B6B..1B73 ; InCB; Extend # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG +1B80..1B81 ; InCB; Extend # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR +1BA2..1BA5 ; InCB; Extend # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU +1BA8..1BA9 ; InCB; Extend # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG +1BAA ; InCB; Extend # Mc SUNDANESE SIGN PAMAAEH +1BAC..1BAD ; InCB; Extend # Mn [2] SUNDANESE CONSONANT SIGN PASANGAN MA..SUNDANESE CONSONANT SIGN PASANGAN WA +1BE6 ; InCB; Extend # Mn BATAK SIGN TOMPI +1BE8..1BE9 ; InCB; Extend # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE +1BED ; InCB; Extend # Mn BATAK VOWEL SIGN KARO O +1BEF..1BF1 ; InCB; Extend # Mn [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H +1BF2..1BF3 ; InCB; Extend # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN +1C2C..1C33 ; InCB; Extend # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T +1C36..1C37 ; InCB; Extend # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA +1CD0..1CD2 ; InCB; Extend # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA +1CD4..1CE0 ; InCB; Extend # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA +1CE2..1CE8 ; InCB; Extend # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL +1CED ; InCB; Extend # Mn VEDIC SIGN TIRYAK +1CF4 ; InCB; Extend # Mn VEDIC TONE CANDRA ABOVE +1CF8..1CF9 ; InCB; Extend # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE +1DC0..1DFF ; InCB; Extend # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +200D ; InCB; Extend # Cf ZERO WIDTH JOINER +20D0..20DC ; InCB; Extend # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE +20DD..20E0 ; InCB; Extend # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH +20E1 ; InCB; Extend # Mn COMBINING LEFT RIGHT ARROW ABOVE +20E2..20E4 ; InCB; Extend # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE +20E5..20F0 ; InCB; Extend # Mn [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE +2CEF..2CF1 ; InCB; Extend # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS +2D7F ; InCB; Extend # Mn TIFINAGH CONSONANT JOINER +2DE0..2DFF ; InCB; Extend # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS +302A..302D ; InCB; Extend # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK +302E..302F ; InCB; Extend # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK +3099..309A ; InCB; Extend # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +A66F ; InCB; Extend # Mn COMBINING CYRILLIC VZMET +A670..A672 ; InCB; Extend # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN +A674..A67D ; InCB; Extend # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK +A69E..A69F ; InCB; Extend # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E +A6F0..A6F1 ; InCB; Extend # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS +A802 ; InCB; Extend # Mn SYLOTI NAGRI SIGN DVISVARA +A806 ; InCB; Extend # Mn SYLOTI NAGRI SIGN HASANTA +A80B ; InCB; Extend # Mn SYLOTI NAGRI SIGN ANUSVARA +A825..A826 ; InCB; Extend # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E +A82C ; InCB; Extend # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA +A8C4..A8C5 ; InCB; Extend # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU +A8E0..A8F1 ; InCB; Extend # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA +A8FF ; InCB; Extend # Mn DEVANAGARI VOWEL SIGN AY +A926..A92D ; InCB; Extend # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU +A947..A951 ; InCB; Extend # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R +A953 ; InCB; Extend # Mc REJANG VIRAMA +A980..A982 ; InCB; Extend # Mn [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR +A9B3 ; InCB; Extend # Mn JAVANESE SIGN CECAK TELU +A9B6..A9B9 ; InCB; Extend # Mn [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT +A9BC..A9BD ; InCB; Extend # Mn [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET +A9E5 ; InCB; Extend # Mn MYANMAR SIGN SHAN SAW +AA29..AA2E ; InCB; Extend # Mn [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE +AA31..AA32 ; InCB; Extend # Mn [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE +AA35..AA36 ; InCB; Extend # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA +AA43 ; InCB; Extend # Mn CHAM CONSONANT SIGN FINAL NG +AA4C ; InCB; Extend # Mn CHAM CONSONANT SIGN FINAL M +AA7C ; InCB; Extend # Mn MYANMAR SIGN TAI LAING TONE-2 +AAB0 ; InCB; Extend # Mn TAI VIET MAI KANG +AAB2..AAB4 ; InCB; Extend # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U +AAB7..AAB8 ; InCB; Extend # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA +AABE..AABF ; InCB; Extend # Mn [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK +AAC1 ; InCB; Extend # Mn TAI VIET TONE MAI THO +AAEC..AAED ; InCB; Extend # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI +ABE5 ; InCB; Extend # Mn MEETEI MAYEK VOWEL SIGN ANAP +ABE8 ; InCB; Extend # Mn MEETEI MAYEK VOWEL SIGN UNAP +ABED ; InCB; Extend # Mn MEETEI MAYEK APUN IYEK +FB1E ; InCB; Extend # Mn HEBREW POINT JUDEO-SPANISH VARIKA +FE00..FE0F ; InCB; Extend # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 +FE20..FE2F ; InCB; Extend # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF +FF9E..FF9F ; InCB; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +101FD ; InCB; Extend # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE +102E0 ; InCB; Extend # Mn COPTIC EPACT THOUSANDS MARK +10376..1037A ; InCB; Extend # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII +10A01..10A03 ; InCB; Extend # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R +10A05..10A06 ; InCB; Extend # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O +10A0C..10A0F ; InCB; Extend # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA +10A38..10A3A ; InCB; Extend # Mn [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW +10AE5..10AE6 ; InCB; Extend # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW +10D24..10D27 ; InCB; Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI +10D69..10D6D ; InCB; Extend # Mn [5] GARAY VOWEL SIGN E..GARAY CONSONANT NASALIZATION MARK +10EAB..10EAC ; InCB; Extend # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK +10EFA..10EFF ; InCB; Extend # Mn [6] ARABIC DOUBLE VERTICAL BAR BELOW..ARABIC SMALL LOW WORD MADDA +10F46..10F50 ; InCB; Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F82..10F85 ; InCB; Extend # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW +11001 ; InCB; Extend # Mn BRAHMI SIGN ANUSVARA +11038..11046 ; InCB; Extend # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11070 ; InCB; Extend # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11073..11074 ; InCB; Extend # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +1107F..11081 ; InCB; Extend # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA +110B3..110B6 ; InCB; Extend # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI +110B9..110BA ; InCB; Extend # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; InCB; Extend # Mn KAITHI VOWEL SIGN VOCALIC R +11100..11102 ; InCB; Extend # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA +11127..1112B ; InCB; Extend # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU +1112D..11132 ; InCB; Extend # Mn [6] CHAKMA VOWEL SIGN AI..CHAKMA AU MARK +11134 ; InCB; Extend # Mn CHAKMA MAAYYAA +11173 ; InCB; Extend # Mn MAHAJANI SIGN NUKTA +11180..11181 ; InCB; Extend # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA +111B6..111BE ; InCB; Extend # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O +111C0 ; InCB; Extend # Mc SHARADA SIGN VIRAMA +111C9..111CC ; InCB; Extend # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK +111CF ; InCB; Extend # Mn SHARADA SIGN INVERTED CANDRABINDU +1122F..11231 ; InCB; Extend # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI +11234 ; InCB; Extend # Mn KHOJKI SIGN ANUSVARA +11235 ; InCB; Extend # Mc KHOJKI SIGN VIRAMA +11236..11237 ; InCB; Extend # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA +1123E ; InCB; Extend # Mn KHOJKI SIGN SUKUN +11241 ; InCB; Extend # Mn KHOJKI VOWEL SIGN VOCALIC R +112DF ; InCB; Extend # Mn KHUDAWADI SIGN ANUSVARA +112E3..112EA ; InCB; Extend # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA +11300..11301 ; InCB; Extend # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU +1133B..1133C ; InCB; Extend # Mn [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA +1133E ; InCB; Extend # Mc GRANTHA VOWEL SIGN AA +11340 ; InCB; Extend # Mn GRANTHA VOWEL SIGN II +1134D ; InCB; Extend # Mc GRANTHA SIGN VIRAMA +11357 ; InCB; Extend # Mc GRANTHA AU LENGTH MARK +11366..1136C ; InCB; Extend # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX +11370..11374 ; InCB; Extend # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA +113B8 ; InCB; Extend # Mc TULU-TIGALARI VOWEL SIGN AA +113BB..113C0 ; InCB; Extend # Mn [6] TULU-TIGALARI VOWEL SIGN U..TULU-TIGALARI VOWEL SIGN VOCALIC LL +113C2 ; InCB; Extend # Mc TULU-TIGALARI VOWEL SIGN EE +113C5 ; InCB; Extend # Mc TULU-TIGALARI VOWEL SIGN AI +113C7..113C9 ; InCB; Extend # Mc [3] TULU-TIGALARI VOWEL SIGN OO..TULU-TIGALARI AU LENGTH MARK +113CE ; InCB; Extend # Mn TULU-TIGALARI SIGN VIRAMA +113CF ; InCB; Extend # Mc TULU-TIGALARI SIGN LOOPED VIRAMA +113D2 ; InCB; Extend # Mn TULU-TIGALARI GEMINATION MARK +113E1..113E2 ; InCB; Extend # Mn [2] TULU-TIGALARI VEDIC TONE SVARITA..TULU-TIGALARI VEDIC TONE ANUDATTA +11438..1143F ; InCB; Extend # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI +11442..11444 ; InCB; Extend # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA +11446 ; InCB; Extend # Mn NEWA SIGN NUKTA +1145E ; InCB; Extend # Mn NEWA SANDHI MARK +114B0 ; InCB; Extend # Mc TIRHUTA VOWEL SIGN AA +114B3..114B8 ; InCB; Extend # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL +114BA ; InCB; Extend # Mn TIRHUTA VOWEL SIGN SHORT E +114BD ; InCB; Extend # Mc TIRHUTA VOWEL SIGN SHORT O +114BF..114C0 ; InCB; Extend # Mn [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA +114C2..114C3 ; InCB; Extend # Mn [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA +115AF ; InCB; Extend # Mc SIDDHAM VOWEL SIGN AA +115B2..115B5 ; InCB; Extend # Mn [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR +115BC..115BD ; InCB; Extend # Mn [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA +115BF..115C0 ; InCB; Extend # Mn [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA +115DC..115DD ; InCB; Extend # Mn [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU +11633..1163A ; InCB; Extend # Mn [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI +1163D ; InCB; Extend # Mn MODI SIGN ANUSVARA +1163F..11640 ; InCB; Extend # Mn [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA +116AB ; InCB; Extend # Mn TAKRI SIGN ANUSVARA +116AD ; InCB; Extend # Mn TAKRI VOWEL SIGN AA +116B0..116B5 ; InCB; Extend # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU +116B6 ; InCB; Extend # Mc TAKRI SIGN VIRAMA +116B7 ; InCB; Extend # Mn TAKRI SIGN NUKTA +1171D ; InCB; Extend # Mn AHOM CONSONANT SIGN MEDIAL LA +1171F ; InCB; Extend # Mn AHOM CONSONANT SIGN MEDIAL LIGATING RA +11722..11725 ; InCB; Extend # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU +11727..1172B ; InCB; Extend # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER +1182F..11837 ; InCB; Extend # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA +11839..1183A ; InCB; Extend # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA +11930 ; InCB; Extend # Mc DIVES AKURU VOWEL SIGN AA +1193B..1193C ; InCB; Extend # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU +1193D ; InCB; Extend # Mc DIVES AKURU SIGN HALANTA +11943 ; InCB; Extend # Mn DIVES AKURU SIGN NUKTA +119D4..119D7 ; InCB; Extend # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR +119DA..119DB ; InCB; Extend # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI +119E0 ; InCB; Extend # Mn NANDINAGARI SIGN VIRAMA +11A01..11A0A ; InCB; Extend # Mn [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK +11A33..11A38 ; InCB; Extend # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA +11A3B..11A3E ; InCB; Extend # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA +11A51..11A56 ; InCB; Extend # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE +11A59..11A5B ; InCB; Extend # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK +11A8A..11A96 ; InCB; Extend # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA +11A98 ; InCB; Extend # Mn SOYOMBO GEMINATION MARK +11B60 ; InCB; Extend # Mn SHARADA VOWEL SIGN OE +11B62..11B64 ; InCB; Extend # Mn [3] SHARADA VOWEL SIGN UE..SHARADA VOWEL SIGN SHORT E +11B66 ; InCB; Extend # Mn SHARADA VOWEL SIGN CANDRA E +11C30..11C36 ; InCB; Extend # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L +11C38..11C3D ; InCB; Extend # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA +11C3F ; InCB; Extend # Mn BHAIKSUKI SIGN VIRAMA +11C92..11CA7 ; InCB; Extend # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA +11CAA..11CB0 ; InCB; Extend # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA +11CB2..11CB3 ; InCB; Extend # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E +11CB5..11CB6 ; InCB; Extend # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU +11D31..11D36 ; InCB; Extend # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R +11D3A ; InCB; Extend # Mn MASARAM GONDI VOWEL SIGN E +11D3C..11D3D ; InCB; Extend # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O +11D3F..11D45 ; InCB; Extend # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA +11D47 ; InCB; Extend # Mn MASARAM GONDI RA-KARA +11D90..11D91 ; InCB; Extend # Mn [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI +11D95 ; InCB; Extend # Mn GUNJALA GONDI SIGN ANUSVARA +11D97 ; InCB; Extend # Mn GUNJALA GONDI VIRAMA +11EF3..11EF4 ; InCB; Extend # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U +11F00..11F01 ; InCB; Extend # Mn [2] KAWI SIGN CANDRABINDU..KAWI SIGN ANUSVARA +11F36..11F3A ; InCB; Extend # Mn [5] KAWI VOWEL SIGN I..KAWI VOWEL SIGN VOCALIC R +11F40 ; InCB; Extend # Mn KAWI VOWEL SIGN EU +11F41 ; InCB; Extend # Mc KAWI SIGN KILLER +11F5A ; InCB; Extend # Mn KAWI SIGN NUKTA +13440 ; InCB; Extend # Mn EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY +13447..13455 ; InCB; Extend # Mn [15] EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START..EGYPTIAN HIEROGLYPH MODIFIER DAMAGED +1611E..16129 ; InCB; Extend # Mn [12] GURUNG KHEMA VOWEL SIGN AA..GURUNG KHEMA VOWEL LENGTH MARK +1612D..1612F ; InCB; Extend # Mn [3] GURUNG KHEMA SIGN ANUSVARA..GURUNG KHEMA SIGN THOLHOMA +16AF0..16AF4 ; InCB; Extend # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE +16B30..16B36 ; InCB; Extend # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM +16F4F ; InCB; Extend # Mn MIAO SIGN CONSONANT MODIFIER BAR +16F8F..16F92 ; InCB; Extend # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW +16FE4 ; InCB; Extend # Mn KHITAN SMALL SCRIPT FILLER +16FF0..16FF1 ; InCB; Extend # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY +1BC9D..1BC9E ; InCB; Extend # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1CF00..1CF2D ; InCB; Extend # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; InCB; Extend # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG +1D165..1D166 ; InCB; Extend # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM +1D167..1D169 ; InCB; Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 +1D16D..1D172 ; InCB; Extend # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 +1D17B..1D182 ; InCB; Extend # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE +1D185..1D18B ; InCB; Extend # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE +1D1AA..1D1AD ; InCB; Extend # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO +1D242..1D244 ; InCB; Extend # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME +1DA00..1DA36 ; InCB; Extend # Mn [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN +1DA3B..1DA6C ; InCB; Extend # Mn [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT +1DA75 ; InCB; Extend # Mn SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS +1DA84 ; InCB; Extend # Mn SIGNWRITING LOCATION HEAD NECK +1DA9B..1DA9F ; InCB; Extend # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 +1DAA1..1DAAF ; InCB; Extend # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 +1E000..1E006 ; InCB; Extend # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE +1E008..1E018 ; InCB; Extend # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU +1E01B..1E021 ; InCB; Extend # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI +1E023..1E024 ; InCB; Extend # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS +1E026..1E02A ; InCB; Extend # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA +1E08F ; InCB; Extend # Mn COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +1E130..1E136 ; InCB; Extend # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E2AE ; InCB; Extend # Mn TOTO SIGN RISING TONE +1E2EC..1E2EF ; InCB; Extend # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI +1E4EC..1E4EF ; InCB; Extend # Mn [4] NAG MUNDARI SIGN MUHOR..NAG MUNDARI SIGN SUTUH +1E5EE..1E5EF ; InCB; Extend # Mn [2] OL ONAL SIGN MU..OL ONAL SIGN IKIR +1E6E3 ; InCB; Extend # Mn TAI YO SIGN UE +1E6E6 ; InCB; Extend # Mn TAI YO SIGN AU +1E6EE..1E6EF ; InCB; Extend # Mn [2] TAI YO SIGN AY..TAI YO SIGN ANG +1E6F5 ; InCB; Extend # Mn TAI YO SIGN OM +1E8D0..1E8D6 ; InCB; Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS +1E944..1E94A ; InCB; Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA +1F3FB..1F3FF ; InCB; Extend # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 +E0020..E007F ; InCB; Extend # Cf [96] TAG SPACE..CANCEL TAG +E0100..E01EF ; InCB; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 + +# Total code points: 2217 + +# EOF From 07853db2c0effef3298059853b3efd087e21b94e Mon Sep 17 00:00:00 2001 From: Juan Cruz Viotti Date: Tue, 25 Aug 2026 13:58:25 -0300 Subject: [PATCH 2/3] ARM fix Signed-off-by: Juan Cruz Viotti --- DEPENDENCIES | 2 +- vendor/core/cmake/FindLibDeflate.cmake | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/DEPENDENCIES b/DEPENDENCIES index 0b4ca2486..103016d83 100644 --- a/DEPENDENCIES +++ b/DEPENDENCIES @@ -1,6 +1,6 @@ vendorpull https://github.com/sourcemeta/vendorpull 1dcbac42809cf87cb5b045106b863e17ad84ba02 uwebsockets https://github.com/uNetworking/uWebSockets v20.79.0 -core https://github.com/sourcemeta/core 0d35d4ea6d2d21d84feaec7b2451fb1c7f36b936 +core https://github.com/sourcemeta/core b890ad46edb22694e9fecb194facdafbfd682648 blaze https://github.com/sourcemeta/blaze 714bea1948f551918682236c75c1d386f8051adb jsonbinpack https://github.com/sourcemeta/jsonbinpack a97365f29e673cd7a278da8b87a8b083ae81774d jsonschema https://github.com/sourcemeta/jsonschema 11d4305852cc9084ff9c758d44e595ca7b0c839c diff --git a/vendor/core/cmake/FindLibDeflate.cmake b/vendor/core/cmake/FindLibDeflate.cmake index b07a2050e..1b830bbbb 100644 --- a/vendor/core/cmake/FindLibDeflate.cmake +++ b/vendor/core/cmake/FindLibDeflate.cmake @@ -105,6 +105,13 @@ if(NOT LibDeflate_FOUND) target_include_directories(libdeflate PRIVATE "${LIBDEFLATE_LIB_DIR}") + # The processor feature detection this library performs on Linux reaches for + # interfaces that the C library only declares outside the strict ISO mode + # this project otherwise compiles C in + if(SOURCEMETA_OS_LINUX) + target_compile_definitions(libdeflate PRIVATE _GNU_SOURCE) + endif() + if(SOURCEMETA_COMPILER_LLVM OR SOURCEMETA_COMPILER_GCC) target_compile_options(libdeflate PRIVATE -Wno-conversion) target_compile_options(libdeflate PRIVATE -Wno-sign-conversion) From 9bd85d5079dbdc33b2b89c83551cb5214556017c Mon Sep 17 00:00:00 2001 From: Juan Cruz Viotti Date: Tue, 25 Aug 2026 14:02:33 -0300 Subject: [PATCH 3/3] Includes Signed-off-by: Juan Cruz Viotti --- .../sourcemeta/one/enterprise_server_action_metrics_v1.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/enterprise/server/include/sourcemeta/one/enterprise_server_action_metrics_v1.h b/enterprise/server/include/sourcemeta/one/enterprise_server_action_metrics_v1.h index b6419d8d3..e58f7b423 100644 --- a/enterprise/server/include/sourcemeta/one/enterprise_server_action_metrics_v1.h +++ b/enterprise/server/include/sourcemeta/one/enterprise_server_action_metrics_v1.h @@ -16,12 +16,13 @@ #include // std::ranges::transform #include // std::array #include // std::chrono::duration +#include // std::size_t +#include // std::uint64_t #include // std::filesystem::path #include // std::format #include // std::span #include // std::string #include // std::string_view -#include // std::vector class ActionMetrics_v1 : public sourcemeta::one::RouterAction { public: