From 514cadc2fac88e49035a6b30b16f431a4f82ac3d Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Mon, 11 Nov 2024 02:41:37 -0800 Subject: [PATCH 01/63] First pass on C++20-ification of the code --- .github/workflows/test.yml | 45 +- lib/CMakeLists.txt | 4 +- lib/inc/sys_string/config.h | 55 +- lib/inc/sys_string/impl/builder.h | 148 +++--- lib/inc/sys_string/impl/compare.h | 18 +- lib/inc/sys_string/impl/misc.h | 193 ++++--- .../sys_string/impl/platforms/android_java.h | 15 - .../sys_string/impl/platforms/apple_cfstr.h | 61 +-- .../impl/platforms/emscripten_javascript.h | 19 +- .../sys_string/impl/platforms/python_any.h | 56 +- .../sys_string/impl/platforms/unix_generic.h | 22 +- .../sys_string/impl/platforms/windows_bstr.h | 21 +- .../impl/platforms/windows_generic.h | 22 +- .../impl/platforms/windows_hstring.h | 20 - lib/inc/sys_string/impl/unicode/algorithms.h | 46 +- .../sys_string/impl/unicode/utf_encoding.h | 22 +- lib/inc/sys_string/impl/unicode/utf_util.h | 173 +++--- lib/inc/sys_string/impl/util/cursor.h | 492 ------------------ lib/inc/sys_string/impl/util/generic_buffer.h | 17 +- lib/inc/sys_string/impl/util/iter_util.h | 208 ++++++++ lib/inc/sys_string/impl/util/util.h | 71 +-- lib/inc/sys_string/sys_string.h | 186 +++---- lib/inc/sys_string/utf_view.h | 405 +++++++------- test/CMakeLists.txt | 4 +- test/test_builder.cpp | 56 +- test/test_general.cpp | 61 ++- test/test_utf_iteration.cpp | 178 ++++--- 27 files changed, 1055 insertions(+), 1563 deletions(-) delete mode 100644 lib/inc/sys_string/impl/util/cursor.h create mode 100644 lib/inc/sys_string/impl/util/iter_util.h diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1fbbe51..9120bf9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,7 @@ on: env: BUILD_TYPE: Release - NDK_VER: 21.3.6528147 + NDK_VER: 27.2.12479018 NDK_ARCH: x86_64 NDK_API: 29 @@ -28,31 +28,16 @@ jobs: include: - os: macos-latest - os: windows-latest - - os: ubuntu-latest - compiler: gcc - version: 11 - - os: ubuntu-latest - compiler: gcc - version: 12 - - os: ubuntu-latest - compiler: gcc - version: 13 - # See https://github.com/actions/runner-images/issues/8659 - # - os: ubuntu-latest - # compiler: clang - # version: 13 - # - os: ubuntu-latest - # compiler: clang - # version: 14 - - os: ubuntu-latest - compiler: clang - version: 15 - - os: ubuntu-latest - compiler: clang - version: 16 - - os: ubuntu-latest - compiler: clang - version: 17 + - {os: ubuntu-latest, compiler: gcc, version: 11 } + - {os: ubuntu-latest, compiler: gcc, version: 12 } + - {os: ubuntu-latest, compiler: gcc, version: 13 } + - {os: ubuntu-24.04, compiler: gcc, version: 14 } + - {os: ubuntu-latest, compiler: clang, version: 13 } + - {os: ubuntu-latest, compiler: clang, version: 14 } + - {os: ubuntu-latest, compiler: clang, version: 15 } + - {os: ubuntu-latest, compiler: clang, version: 16 } + - {os: ubuntu-latest, compiler: clang, version: 17 } + - {os: ubuntu-latest, compiler: clang, version: 18 } steps: - name: Checkout @@ -61,16 +46,18 @@ jobs: - name: System Setup shell: bash run: | - if [[ '${{ matrix.os }}' == 'ubuntu-latest' ]]; then + if [[ '${{ matrix.os }}' == ubuntu-* ]]; then if [[ '${{ matrix.compiler }}' == 'clang' ]]; then wget https://apt.llvm.org/llvm.sh chmod u+x llvm.sh - sudo ./llvm.sh ${{ matrix.version }} + sudo ./llvm.sh ${{ matrix.version }} + sudo apt-get install -y clang-tools-${{ matrix.version }} echo "CC=clang-${{ matrix.version }}" >> $GITHUB_ENV echo "CXX=clang++-${{ matrix.version }}" >> $GITHUB_ENV fi if [[ '${{ matrix.compiler }}' == 'gcc' ]]; then + sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install -y gcc-${{ matrix.version }} g++-${{ matrix.version }} echo "CC=gcc-${{ matrix.version }}" >> $GITHUB_ENV @@ -149,7 +136,7 @@ jobs: - name: Set Up Emscripten uses: mymindstorm/setup-emsdk@v14 with: - version: 3.1.26 + version: 3.1.70 actions-cache-folder: 'emsdk-cache' - name: Configure diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index bb33203..a55c9eb 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -32,7 +32,7 @@ set_target_properties(${LIBNAME} PROPERTIES target_compile_features(${LIBNAME} PUBLIC - cxx_std_17 + cxx_std_20 ) target_compile_options(${LIBNAME} @@ -105,7 +105,7 @@ set(UTIL_FILES ${SRCDIR}/inc/sys_string/impl/util/util.h ${SRCDIR}/inc/sys_string/impl/util/char_buffer.h ${SRCDIR}/inc/sys_string/impl/util/generic_buffer.h - ${SRCDIR}/inc/sys_string/impl/util/cursor.h + ${SRCDIR}/inc/sys_string/impl/util/iter_util.h ) source_group("Utils" FILES ${UTIL_FILES}) diff --git a/lib/inc/sys_string/config.h b/lib/inc/sys_string/config.h index c854ef2..1daac10 100644 --- a/lib/inc/sys_string/config.h +++ b/lib/inc/sys_string/config.h @@ -8,8 +8,18 @@ #ifndef HEADER_SYS_STRING_CONFIG_H_INCLUDED #define HEADER_SYS_STRING_CONFIG_H_INCLUDED -#define SYS_STRING_USE_SPACESHIP_OPERATOR (__cpp_impl_three_way_comparison >= 201907) -#define SYS_STRING_USE_CHAR8 (__cpp_char8_t >= 201811) +#if __cplusplus < 202002L || (defined(_MSVC_LANG) && _MSVC_LANG < 202002L) + #error This library requires C++20 or above +#endif + +#if __cpp_impl_three_way_comparison < 201907 + #error This library requires your compiler to support three-way comparison +#endif + +#if __cpp_char8_t < 201811 + #error This library requires your compiler to support char8_t +#endif + #if (defined(__APPLE__) && defined(__MACH__)) @@ -80,45 +90,14 @@ #include #endif -#define SYS_STRING_USE_SPAN (__cpp_lib_span >= 202002) -#define SYS_STRING_USE_STD_ENDIAN (__cpp_lib_endian >= 201907) -#define SYS_STRING_USE_RANGES (__cpp_lib_ranges >= 201911) - -#if __cpp_lib_constexpr_algorithms >= 201806 - #define SYS_STRING_CONSTEXPR_ALGO constexpr -#else - #define SYS_STRING_CONSTEXPR_ALGO +#if __cpp_lib_endian < 201907 + #error Your standard library does not support std::endian #endif -#if SYS_STRING_USE_STD_ENDIAN - - #include - namespace sysstr - { - using endian = std::endian; - } - -#else - - namespace sysstr - { - enum class endian - { - #ifdef _MSC_VER - little = 0, - big = 1, - native = little - #elif defined(__BYTE_ORDER__) - little = __ORDER_LITTLE_ENDIAN__, - big = __ORDER_BIG_ENDIAN__, - native = __BYTE_ORDER__ - #else - #error Please define byte order values for your compiler - #endif - }; - } - +#if __cpp_lib_ranges < 201911 + #error Your standard library does not support ranges #endif + #endif diff --git a/lib/inc/sys_string/impl/builder.h b/lib/inc/sys_string/impl/builder.h index 88a76fb..1dce139 100644 --- a/lib/inc/sys_string/impl/builder.h +++ b/lib/inc/sys_string/impl/builder.h @@ -20,14 +20,19 @@ namespace sysstr struct view_traits { - using char_access = const impl_type &; + using stored_reference = const impl_type *; - static constexpr const impl_type & adapt(const sys_string_builder_t & builder) noexcept - { return builder.m_impl; } + static constexpr bool enable_view = true; + static constexpr bool enable_borrowed_range = true; + + static constexpr const impl_type * adapt(const sys_string_builder_t & builder) noexcept + { return &builder.m_impl; } + static const impl_type & access(stored_reference ptr) noexcept + { return *ptr; } }; public: using size_type = typename impl_type::size_type; - using storage_type = typename impl_type::value_type; + using storage_type = typename impl_type::value_type; template using utf_view = utf_view; @@ -42,11 +47,10 @@ namespace sysstr using const_reverse_iterator = typename utf32_view::const_reverse_iterator; private: - template - using const_storage_cursor = decltype(util::cursor_begin(std::declval())); - - template - using storage_cursor = decltype(util::cursor_begin(std::declval())); + using const_storage_iterator = decltype(std::begin(std::declval())); + using const_storage_sentinel = decltype(std::end(std::declval())); + using const_storage_reverse_iterator = decltype(std::rbegin(std::declval())); + using const_storage_reverse_sentinel = decltype(std::rend(std::declval())); public: @@ -66,76 +70,88 @@ namespace sysstr { m_impl.resize(new_size); } iterator begin() const noexcept - { return storage_begin(); } - iterator end() const noexcept - { return storage_end(); } + { return iterator(std::begin(m_impl), std::end(m_impl)); } + std::default_sentinel_t end() const noexcept + { return std::default_sentinel; } const_iterator cbegin() const noexcept { return begin(); } - const_iterator cend() const noexcept + std::default_sentinel_t cend() const noexcept { return end(); } reverse_iterator rbegin() const noexcept - { return storage_begin(); } - reverse_iterator rend() const noexcept - { return storage_end(); } + { return reverse_iterator(std::rbegin(m_impl), std::rend(m_impl)); } + std::default_sentinel_t rend() const noexcept + { return std::default_sentinel; } const_reverse_iterator crbegin() const noexcept { return rbegin(); } - const_reverse_iterator crend() const noexcept + std::default_sentinel_t crend() const noexcept { return rend(); } + + reverse_iterator reverse(iterator it) const + { return reverse_iterator(it, std::rend(this->m_impl)); } + + iterator reverse(reverse_iterator it) const + { return iterator(it, std::end(this->m_impl)); } void push_back(char32_t c) { append_one(m_impl, c); } void pop_back() noexcept { - auto it = ++rbegin(); - m_impl.erase(m_impl.begin() + it.storage_pos(), m_impl.end()); + auto it = rbegin(); + m_impl.erase(it.storage_next().base(), std::end(m_impl)); } iterator insert(iterator where, char32_t c) { - using util::cursor_at; + auto res = insert_one(m_impl, where.storage_current(), c); + return iterator(res, std::end(m_impl)); + } - auto pos = where.storage_pos(); - insert_one(m_impl, m_impl.begin() + pos, c); - return storage_at(pos); + iterator insert(std::default_sentinel_t, char32_t c) + { + auto res = insert_one(m_impl, std::end(m_impl), c); + return iterator(res, std::end(m_impl)); } - template + template iterator insert(iterator where, const Char * str, size_t len) { - using util::cursor_at; + auto res = insert_many(m_impl, where.storage_current(), str, len); + return iterator(res, std::end(m_impl)); + } - auto pos = where.storage_pos(); - insert_many(m_impl, m_impl.begin() + pos, str, len); - return storage_at(pos); + template + iterator insert(std::default_sentinel_t, const Char * str, size_t len) + { + auto res = insert_many(m_impl, std::end(m_impl), str, len); + return iterator(res, std::end(m_impl)); } iterator erase(iterator where) noexcept { - using util::cursor_at; - - auto pos = where.storage_pos(); - auto where_it = m_impl.begin() + pos; - m_impl.erase(where_it, where_it + where.storage_size()); - return storage_at(pos); + auto res = m_impl.erase(where.storage_current(), where.storage_next()); + return iterator(res, std::end(m_impl)); } + iterator erase(iterator first, iterator last) noexcept { - using util::cursor_at; - - auto first_pos = first.storage_pos(); - auto last_pos = last.storage_pos(); - m_impl.erase(m_impl.begin() + first_pos, m_impl.begin() + last_pos); - return storage_at(first_pos); + auto res = m_impl.erase(first.storage_current(), last.storage_current()); + return iterator(res, std::end(m_impl)); + } + + iterator erase(iterator first, std::default_sentinel_t) noexcept + { + auto res = m_impl.erase(first.storage_current(), std::end(m_impl)); + return iterator(res, std::end(m_impl)); } sys_string_builder_t & append(char32_t c) { append_one(m_impl, c); return *this; } - template + template sys_string_builder_t & append(const Char * str, size_t len) { append_many(m_impl, str, len); return *this; } - template + template sys_string_builder_t & append(const Char * str) { append_many(m_impl, str, std::char_traits::length(str)); return *this; } @@ -159,26 +175,27 @@ namespace sysstr } static void append_one(impl_type & impl, char32_t c); - static void insert_one(impl_type & impl, typename impl_type::iterator where, char32_t c); + static typename impl_type::iterator insert_one(impl_type & impl, typename impl_type::iterator where, char32_t c); - template + template static void append_many(impl_type & impl, const Char * str, size_t len); - template - static void insert_many(impl_type & impl, typename impl_type::iterator pos, const Char * str, size_t len); + template + static typename impl_type::iterator insert_many(impl_type & impl, typename impl_type::iterator pos, const Char * str, size_t len); template void append_access(const Access & access); - template - auto storage_begin() const -> const_storage_cursor - { return util::cursor_begin(m_impl); } - template - auto storage_end() const -> const_storage_cursor - { return util::cursor_end(m_impl); } - template - auto storage_at(size_type pos) const -> const_storage_cursor - { return util::cursor_at(m_impl, pos); } + auto storage_begin() const + { return std::begin(m_impl); } + auto storage_end() const + { return std::end(m_impl); } + + auto storage_rbegin() const + { return std::rbegin(m_impl); } + auto storage_rend() const + { return std::rend(m_impl); } + private: impl_type m_impl; }; @@ -198,21 +215,24 @@ namespace sysstr } template - void sys_string_builder_t::insert_one(impl_type & impl, typename impl_type::iterator where, char32_t c) + auto sys_string_builder_t::insert_one(impl_type & impl, typename impl_type::iterator where, char32_t c) -> + typename impl_type::iterator { if constexpr (std::is_same_v) { - impl.insert(where, c); + return impl.insert(where, c); } else { using converter = utf_converter>; + auto pos = where - std::begin(impl); converter::convert(&c, &c + 1, std::inserter(impl, where)); + return std::begin(impl) + pos; } } template - template + template void sys_string_builder_t::append_many(impl_type & impl, const Char * str, size_t len) { if constexpr (std::is_same_v) @@ -228,18 +248,20 @@ namespace sysstr template - template - void sys_string_builder_t::insert_many(impl_type & impl, typename impl_type::iterator where, const Char * str, size_t len) + template + auto sys_string_builder_t::insert_many(impl_type & impl, typename impl_type::iterator where, const Char * str, size_t len) -> + typename impl_type::iterator { if constexpr (std::is_same_v) { - impl.insert(where, str, limit_size(len)); + return impl.insert(where, str, limit_size(len)); } else { - auto inserter = std::inserter(impl, where); using converter = utf_converter, utf_encoding_of>; - converter::convert(str, str + len, inserter); + auto pos = where - std::begin(impl); + converter::convert(str, str + len, std::inserter(impl, where)); + return std::begin(impl) + pos; } } diff --git a/lib/inc/sys_string/impl/compare.h b/lib/inc/sys_string/impl/compare.h index 29513d0..c5c5bb3 100644 --- a/lib/inc/sys_string/impl/compare.h +++ b/lib/inc/sys_string/impl/compare.h @@ -28,7 +28,7 @@ namespace sysstr return CFStringGetLength(lhs_ptr) == 0 ? ordering_equal : ordering_greater; CFComparisonResult res = CFStringCompare(lhs_ptr, rhs_ptr, 0); - return util::make_compare_result(int(res)); + return res <=> 0; } #endif @@ -49,7 +49,7 @@ namespace sysstr return PyUnicode_GetLength(lhs_ptr) == 0 ? ordering_equal : ordering_greater; int res = PyUnicode_Compare(lhs_ptr, rhs_ptr); - return util::make_compare_result(res); + return res <=> 0; } #endif @@ -69,8 +69,10 @@ namespace sysstr utf32_view lhs_view(lhs); utf32_view rhs_view(rhs); - auto lhs_first = lhs_view.begin(), lhs_last = lhs_view.end(); - auto rhs_first = rhs_view.begin(), rhs_last = rhs_view.end(); + auto lhs_first = lhs_view.begin(); + auto lhs_last = lhs_view.end(); + auto rhs_first = rhs_view.begin(); + auto rhs_last = rhs_view.end(); casefold folder; @@ -94,20 +96,16 @@ namespace sysstr if (shortest_length == 0) break; if (int res = std::char_traits::compare(lhs_buf, rhs_buf, shortest_length)) - return util::make_compare_result(res); + return res <=> 0; std::copy(lhs_buf + shortest_length, lhs_buf_end, lhs_buf); lhs_buf_end = lhs_buf_end - shortest_length; std::copy(rhs_buf + shortest_length, rhs_buf_end, rhs_buf); rhs_buf_end = rhs_buf_end - shortest_length; } - if (auto res = util::compare_3way(lhs_buf_end - lhs_buf, rhs_buf_end - rhs_buf); res != 0) + if (auto res = (lhs_buf_end - lhs_buf) <=> (rhs_buf_end - rhs_buf); res != 0) return res; -#if SYS_STRING_USE_SPACESHIP_OPERATOR return (rhs_first == rhs_last) <=> (lhs_first == lhs_last); -#else - return (rhs_first == rhs_last) - (lhs_first == lhs_last); -#endif } } diff --git a/lib/inc/sys_string/impl/misc.h b/lib/inc/sys_string/impl/misc.h index bb60dbd..7541837 100644 --- a/lib/inc/sys_string/impl/misc.h +++ b/lib/inc/sys_string/impl/misc.h @@ -76,7 +76,7 @@ namespace sysstr::util if (test_size > access.size()) return false; - return std::equal(test.begin(), test.end(), access.begin()); + return std::ranges::equal(test.begin(), test.end(), access.begin(), access.begin() + test_size); } } @@ -126,7 +126,7 @@ auto sysstr::sys_string_t::to_lower() const -> sys_string_t { sys_string_t::utf32_view view(*this); sys_string_builder_t builder; - tolower>()(view.cursor_begin(), std::back_inserter(builder.chars())); + tolower>()(view, std::back_inserter(builder.chars())); return builder.build(); } @@ -136,20 +136,20 @@ auto sysstr::sys_string_t::to_upper() const -> sys_string_t { sys_string_t::utf32_view view(*this); sys_string_builder_t builder; - toupper>()(view.cursor_begin(), std::back_inserter(builder.chars())); + toupper>()(view, std::back_inserter(builder.chars())); return builder.build(); } template -template +template Pred> auto sysstr::sys_string_t::trim(Pred pred) const -> sys_string_t { sys_string_t::utf32_view view(*this); - auto trimmed_start = view.cursor_begin(); + auto trimmed_start = view.begin(); for( ; ; ++trimmed_start) { - if (!trimmed_start) + if (trimmed_start == view.end()) return sys_string_t(); char32_t c = *trimmed_start; @@ -157,7 +157,7 @@ auto sysstr::sys_string_t::trim(Pred pred) const -> sys_string_t(); + auto trimmed_end = view.rbegin(); for( ; ; ++trimmed_end) { char32_t c = *trimmed_end; @@ -165,18 +165,19 @@ auto sysstr::sys_string_t::trim(Pred pred) const -> sys_string_t(trimmed_start.storage_cursor(), trimmed_end.storage_pos() - trimmed_start.storage_pos()); + return sys_string_t(trimmed_start.storage_current(), trimmed_end.storage_current().base()); } template -template +template Pred> auto sysstr::sys_string_t::ltrim(Pred pred) const -> sys_string_t { sys_string_t::utf32_view view(*this); - auto trimmed_start = view.cursor_begin(); + auto trimmed_start = view.begin(); + auto last = view.end(); for( ; ; ++trimmed_start) { - if (!trimmed_start) + if (trimmed_start == last) return sys_string_t(); char32_t c = *trimmed_start; @@ -184,19 +185,20 @@ auto sysstr::sys_string_t::ltrim(Pred pred) const -> sys_string_t(trimmed_start.storage_cursor(), this->storage_size() - trimmed_start.storage_pos()); + return sys_string_t(trimmed_start.storage_current(), trimmed_start.storage_last()); } template -template +template Pred> inline auto sysstr::sys_string_t::rtrim(Pred pred) const -> sys_string_t { sys_string_t::utf32_view view(*this); - auto trimmed_end = view.template cursor_begin(); + auto trimmed_end = view.rbegin(); + auto last = view.rend(); for( ; ; ++trimmed_end) { - if (!trimmed_end) + if (trimmed_end == last) return sys_string_t(); char32_t c = *trimmed_end; @@ -204,24 +206,21 @@ auto sysstr::sys_string_t::rtrim(Pred pred) const -> sys_string_t(trimmed_end.storage_cursor(), trimmed_end.storage_pos()); + return sys_string_t(trimmed_end.storage_current(), trimmed_end.storage_last()); } template -template -auto sysstr::sys_string_t::split(OutIt dest, Search search) const -> - std::enable_if_t, OutIt> +template> OutIt> +auto sysstr::sys_string_t::split(OutIt dest, Search search) const -> OutIt +requires(std::is_invocable_v) { utf32_view view(*this); return util::split>(view.begin(), view.end(), dest, search); } template -template -auto sysstr::sys_string_t::split(OutIt dest, const StringOrChar & sep, size_t max_split) const -> - std::enable_if_t, OutIt> +template StringOrChar, std::output_iterator> OutIt> +auto sysstr::sys_string_t::split(OutIt dest, const StringOrChar & sep, size_t max_split) const -> OutIt { util::string_or_char32_char_access sep_access(sep); if (!sep_access.is_valid() || sep_access.size() == 0) @@ -234,24 +233,25 @@ auto sysstr::sys_string_t::split(OutIt dest, const StringOrChar & sep, auto sep_begin = sep_access.begin(); auto sep_end = sep_access.end(); - auto sep_size = sep_access.size(); return util::split>(access.begin(), access.end(), dest, - [sep_begin, sep_end, sep_size, max_split] (auto str_start, auto str_end) mutable noexcept { + [sep_begin, sep_end, max_split] (auto str_start, auto str_end) mutable noexcept { if (max_split == 0) - return std::pair(str_end, str_end); + { + std::ranges::advance(str_start, str_end); + return std::pair(str_start, str_start); + } + --max_split; - auto found_it = std::search(str_start, str_end, sep_begin, sep_end); - if (found_it == str_end) - return std::pair(str_end, str_end); - return std::pair(found_it, found_it + sep_size); + auto result = std::ranges::search(str_start, str_end, sep_begin, sep_end); + return std::pair(result.begin(), result.end()); }); } template -template +template auto sysstr::sys_string_t::join(FwdIt first, FwdIt last) const -> sys_string_t { sys_string_builder_t builder; @@ -276,10 +276,11 @@ namespace sysstr::util return false; const auto test_size = test.size(); - if (test_size > access.size()) + const auto access_size = access.size(); + if (test_size > access_size) return false; - return std::equal(test.begin(), test.end(), access.end() - test_size); + return std::ranges::equal(test.begin(), test.end(), access.begin() + access_size - test_size, access.end()); } template @@ -290,27 +291,25 @@ namespace sysstr::util const auto test_size = test.size(); const auto access_size = access.size(); - if (test_size > access.size()) + if (test_size > access_size) return false; - if (access_size == 0) return true; - auto access_end = access.end(); - return std::search(access.begin(), access_end, test.begin(), test.end()) != access_end; + return std::ranges::search(access, test).begin() != access.end(); } } template -template -auto sysstr::sys_string_t::starts_with(const StringOrChar & prefix) const -> std::enable_if_t, bool> +template StringOrChar> +auto sysstr::sys_string_t::starts_with(const StringOrChar & prefix) const -> bool { return util::has_prefix(sys_string_t::char_access(*this), util::string_or_char32_char_access(prefix)); } template -template +template auto sysstr::sys_string_t::find_prefix(InIt first, InIt last) const -> InIt { using item_type = typename std::iterator_traits::value_type; @@ -322,9 +321,8 @@ auto sysstr::sys_string_t::find_prefix(InIt first, InIt last) const -> } template -template -auto sysstr::sys_string_t::remove_prefix(const StringOrChar & prefix) const - -> std::enable_if_t, sys_string_t> +template StringOrChar> +auto sysstr::sys_string_t::remove_prefix(const StringOrChar & prefix) const -> sys_string_t { sys_string_t::char_access access(*this); util::string_or_char32_char_access prefix_access(prefix); @@ -335,27 +333,25 @@ auto sysstr::sys_string_t::remove_prefix(const StringOrChar & prefix) c template -template -auto sysstr::sys_string_t::ends_with(const StringOrChar & suffix) const - -> std::enable_if_t, bool> +template StringOrChar> +auto sysstr::sys_string_t::ends_with(const StringOrChar & suffix) const -> bool { return util::has_suffix(sys_string_t::char_access(*this), util::string_or_char32_char_access(suffix)); } template -template -auto sysstr::sys_string_t::remove_suffix(const StringOrChar & suffix) const - -> std::enable_if_t, sys_string_t> +template StringOrChar> +auto sysstr::sys_string_t::remove_suffix(const StringOrChar & suffix) const -> sys_string_t { sys_string_t::char_access access(*this); util::string_or_char32_char_access suffix_access(suffix); if (!has_suffix(access, suffix_access)) return *this; - return sys_string_t(access.begin(), access.end() - suffix_access.size()); + return sys_string_t(access.begin(), access.size() - suffix_access.size()); } template -template +template auto sysstr::sys_string_t::find_suffix(InIt first, InIt last) const -> InIt { using item_type = typename std::iterator_traits::value_type; @@ -367,14 +363,14 @@ auto sysstr::sys_string_t::find_suffix(InIt first, InIt last) const -> } template -template -auto sysstr::sys_string_t::contains(const StringOrChar & inner) const -> std::enable_if_t, bool> +template StringOrChar> +auto sysstr::sys_string_t::contains(const StringOrChar & inner) const -> bool { return util::has_infix(sys_string_t::char_access(*this), util::string_or_char32_char_access(inner)); } template -template +template auto sysstr::sys_string_t::find_contained(InIt first, InIt last) const -> InIt { using item_type = typename std::iterator_traits::value_type; @@ -386,9 +382,8 @@ auto sysstr::sys_string_t::find_contained(InIt first, InIt last) const } template -template -auto sysstr::sys_string_t::replace(const StringOrChar1 & old, const StringOrChar2 & new_, size_t max_count) const -> - std::enable_if_t && is_string_or_char, sys_string_t> +template StringOrChar1, sysstr::sys_string_or_char StringOrChar2> +auto sysstr::sys_string_t::replace(const StringOrChar1 & old, const StringOrChar2 & new_, size_t max_count) const -> sys_string_t { if (max_count == 0) return *this; @@ -405,15 +400,15 @@ auto sysstr::sys_string_t::replace(const StringOrChar1 & old, const Str for( ; ; ) { - auto found = std::search(first, last, old_access.begin(), old_access.end()); - std::copy(first, found, std::back_inserter(builder.chars())); - if (found == last) + auto found_range = std::ranges::search(first, last, old_access.begin(), old_access.end()); + std::ranges::copy(first, found_range.begin(), std::back_inserter(builder.chars())); + if (found_range.begin() == last) break; builder.append(new_); - first = found + old_access.size(); + first = found_range.end(); if (--max_count == 0) { - std::copy(first, last, std::back_inserter(builder.chars())); + std::ranges::copy(first, last, std::back_inserter(builder.chars())); break; } } @@ -422,82 +417,76 @@ auto sysstr::sys_string_t::replace(const StringOrChar1 & old, const Str } template -template -auto sysstr::sys_string_t::suffix_after_first(const StringOrChar & divider) const -> - std::enable_if_t, std::optional> +template StringOrChar> +auto sysstr::sys_string_t::suffix_after_first(const StringOrChar & divider) const -> std::optional { sys_string_t::char_access my_access(*this); util::string_or_char32_char_access divider_access(divider); - auto it = std::search(my_access.begin(), my_access.end(), divider_access.begin(), divider_access.end()); - if (it == my_access.end() && divider_access.size() != 0) + auto found_range = std::ranges::search(my_access, divider_access); + if (found_range.begin() == my_access.end() && divider_access.size() != 0) return std::nullopt; - it += divider_access.size(); - return sys_string_t(it, my_access.end()); + return sys_string_t(found_range.end(), my_access.end()); } template -template -auto sysstr::sys_string_t::prefix_before_first(const StringOrChar & divider) const -> - std::enable_if_t, std::optional> +template StringOrChar> +auto sysstr::sys_string_t::prefix_before_first(const StringOrChar & divider) const -> std::optional { sys_string_t::char_access my_access(*this); util::string_or_char32_char_access divider_access(divider); - auto it = std::search(my_access.begin(), my_access.end(), divider_access.begin(), divider_access.end()); - if (it == my_access.end() && divider_access.size() != 0) + auto found_range = std::ranges::search(my_access, divider_access); + if (found_range.begin() == my_access.end() && divider_access.size() != 0) return std::nullopt; - return sys_string_t(my_access.begin(), it); + return sys_string_t(my_access.begin(), found_range.begin()); } template -template -auto sysstr::sys_string_t::suffix_after_last(const StringOrChar & divider) const -> - std::enable_if_t, std::optional> +template StringOrChar> +auto sysstr::sys_string_t::suffix_after_last(const StringOrChar & divider) const -> std::optional { sys_string_t::char_access my_access(*this); util::string_or_char32_char_access divider_access(divider); - auto it = std::search(my_access.rbegin(), my_access.rend(), divider_access.rbegin(), divider_access.rend()); - if (it == my_access.rend() && divider_access.size() != 0) + auto found_range = std::ranges::search(my_access.rbegin(), my_access.rend(), divider_access.rbegin(), divider_access.rend()); + if (found_range.begin() == my_access.rend() && divider_access.size() != 0) return std::nullopt; - return sys_string_t(my_access.begin() + (my_access.rend() - it), my_access.end()); + return sys_string_t(found_range.begin().base(), my_access.end()); } template -template -auto sysstr::sys_string_t::prefix_before_last(const StringOrChar & divider) const -> - std::enable_if_t, std::optional> +template StringOrChar> +auto sysstr::sys_string_t::prefix_before_last(const StringOrChar & divider) const -> std::optional { sys_string_t::char_access my_access(*this); util::string_or_char32_char_access divider_access(divider); - auto it = std::search(my_access.rbegin(), my_access.rend(), divider_access.rbegin(), divider_access.rend()); - if (it == my_access.rend() && divider_access.size() != 0) + auto found_range = std::ranges::search(my_access.rbegin(), my_access.rend(), divider_access.rbegin(), divider_access.rend()); + if (found_range.begin() == my_access.rend() && divider_access.size() != 0) return std::nullopt; - it += divider_access.size(); - return sys_string_t(my_access.begin(), my_access.begin() + (my_access.rend() - it)); + return sys_string_t(my_access.begin(), found_range.end().base()); } template -template -auto sysstr::sys_string_t::partition_at_first(const StringOrChar & divider) const -> - std::enable_if_t, std::optional>> +template StringOrChar> +auto sysstr::sys_string_t::partition_at_first(const StringOrChar & divider) const -> + std::optional> { sys_string_t::char_access my_access(*this); util::string_or_char32_char_access divider_access(divider); - auto it = std::search(my_access.begin(), my_access.end(), divider_access.begin(), divider_access.end()); - if (it == my_access.end() && divider_access.size() != 0) + auto found_range = std::ranges::search(my_access, divider_access); + if (found_range.begin() == my_access.end() && divider_access.size() != 0) return std::nullopt; - return std::pair(sys_string_t(my_access.begin(), it), sys_string_t(it + divider_access.size(), my_access.end())); + return std::pair(sys_string_t(my_access.begin(), found_range.begin()), sys_string_t(found_range.end(), my_access.end())); } template -template -auto sysstr::sys_string_t::partition_at_last(const StringOrChar & divider) const -> - std::enable_if_t, std::optional>> +template StringOrChar> +auto sysstr::sys_string_t::partition_at_last(const StringOrChar & divider) const -> + std::optional> { sys_string_t::char_access my_access(*this); util::string_or_char32_char_access divider_access(divider); - auto it = std::search(my_access.rbegin(), my_access.rend(), divider_access.rbegin(), divider_access.rend()); - if (it == my_access.rend() && divider_access.size() != 0) + auto found_range = std::ranges::search(my_access.rbegin(), my_access.rend(), divider_access.rbegin(), divider_access.rend()); + if (found_range.begin() == my_access.rend() && divider_access.size() != 0) return std::nullopt; - return std::pair(sys_string_t(my_access.begin(), my_access.begin() + (my_access.rend() - it - divider_access.size())), - sys_string_t(my_access.begin() + (my_access.rend() - it), my_access.end())); + return std::pair(sys_string_t(my_access.begin(), found_range.end().base()), + sys_string_t(found_range.begin().base(), my_access.end())); } diff --git a/lib/inc/sys_string/impl/platforms/android_java.h b/lib/inc/sys_string/impl/platforms/android_java.h index 893cb11..795d3ee 100644 --- a/lib/inc/sys_string/impl/platforms/android_java.h +++ b/lib/inc/sys_string/impl/platforms/android_java.h @@ -137,21 +137,6 @@ namespace sysstr::util namespace sysstr { - template<> - inline sys_string_t::sys_string_t(const char_access::cursor & src, size_type length): - sys_string_t(src.iterator(), length) - {} - - template<> - inline sys_string_t::sys_string_t(const char_access::reverse_cursor & src, size_type length): - sys_string_t(src.iterator() - length, length) - {} - - template<> - inline sys_string_t::sys_string_t(const char_access::iterator & first, const char_access::iterator & last): - sys_string_t(first, last - first) - {} - using sys_string_android = sys_string_t; using sys_string_android_builder = sys_string_builder_t; } diff --git a/lib/inc/sys_string/impl/platforms/apple_cfstr.h b/lib/inc/sys_string/impl/platforms/apple_cfstr.h index 767ea50..ed0e800 100644 --- a/lib/inc/sys_string/impl/platforms/apple_cfstr.h +++ b/lib/inc/sys_string/impl/platforms/apple_cfstr.h @@ -216,12 +216,9 @@ namespace sysstr::util using reference = value_type; using pointer = void; - using cursor = index_cursor; - using reverse_cursor = index_cursor; - - using iterator = cursor; + using iterator = index_iterator; using const_iterator = iterator; - using reverse_iterator = reverse_cursor; + using reverse_iterator = index_iterator; using const_reverse_iterator = reverse_iterator; public: cf_char_access(const sys_string_t & src) noexcept; @@ -254,29 +251,21 @@ namespace sysstr::util size_type size() const noexcept { return m_size; } - template - auto cursor_begin() const noexcept -> index_cursor - { return index_cursor(*this, bool(Direction) ? 0 : m_size); } - - template - auto cursor_end() const noexcept -> index_cursor - { return index_cursor(*this, bool(Direction) ? m_size : 0); } - iterator begin() const noexcept - { return cursor_begin(); } - iterator end() const noexcept - { return cursor_end(); } + { return iterator(*this, 0); } + std::default_sentinel_t end() const noexcept + { return std::default_sentinel; } const_iterator cbegin() const noexcept { return begin(); } - const_iterator cend() const noexcept + std::default_sentinel_t cend() const noexcept { return end(); } reverse_iterator rbegin() const noexcept - { return cursor_begin(); } - reverse_iterator rend() const noexcept - { return cursor_end(); } + { return reverse_iterator(*this, m_size); } + std::default_sentinel_t rend() const noexcept + { return std::default_sentinel; } const_reverse_iterator crbegin() const noexcept { return rbegin(); } - const_reverse_iterator crend() const noexcept + std::default_sentinel_t crend() const noexcept { return rend(); } const char * c_str() const noexcept @@ -362,13 +351,11 @@ namespace sysstr cf_storage(buffer_from(str, len), handle_retain::no) {} - #if SYS_STRING_USE_CHAR8 - template<> - cf_storage(const char8_t * str, size_t len): - cf_storage(buffer_from((const char *)str, len), handle_retain::no) - {} - #endif - + template<> + cf_storage(const char8_t * str, size_t len): + cf_storage(buffer_from((const char *)str, len), handle_retain::no) + {} + template<> cf_storage(const char16_t * str, size_t len) : m_str(util::check_create( @@ -379,6 +366,10 @@ namespace sysstr cf_storage(const char32_t * str, size_t len): cf_storage(buffer_from(str, len), handle_retain::no) {} + + cf_storage(const char_access::iterator & first, size_type length): + cf_storage(first.container() ? first.container()->get_string() : nullptr, first.index(), first.index() + length) + {} ~cf_storage() noexcept { release(m_str); } @@ -505,20 +496,6 @@ namespace sysstr::util namespace sysstr { - template<> - inline sys_string_t::sys_string_t(const char_access::cursor & src, size_type length): - sys_string_t(src.container() ? src.container()->get_string() : nullptr, src.position(), src.position() + length) - {} - - template<> - inline sys_string_t::sys_string_t(const char_access::reverse_cursor & src, size_type length): - sys_string_t(src.container() ? src.container()->get_string() : nullptr, src.position() - length, src.position()) - {} - - template<> - inline sys_string_t::sys_string_t(const char_access::iterator & first, const char_access::iterator & last): - sys_string_t(first, last.position() - first.position()) - {} using sys_string_cfstr = sys_string_t; using sys_string_cfstr_builder = sys_string_builder_t; diff --git a/lib/inc/sys_string/impl/platforms/emscripten_javascript.h b/lib/inc/sys_string/impl/platforms/emscripten_javascript.h index 9dabe8b..9a3d3fc 100644 --- a/lib/inc/sys_string/impl/platforms/emscripten_javascript.h +++ b/lib/inc/sys_string/impl/platforms/emscripten_javascript.h @@ -60,8 +60,8 @@ namespace sysstr {} #ifdef _MSC_VER - template - emscripten_storage(const Char * str, size_t len, std::enable_if_t> * = nullptr): + template + emscripten_storage(const Char * str, size_t len): super(str, len) {} #endif @@ -161,21 +161,6 @@ namespace sysstr::util namespace sysstr { - template<> - inline sys_string_t::sys_string_t(const char_access::cursor & src, size_type length): - sys_string_t(src.iterator(), length) - {} - - template<> - inline sys_string_t::sys_string_t(const char_access::reverse_cursor & src, size_type length): - sys_string_t(src.iterator() - length, length) - {} - - template<> - inline sys_string_t::sys_string_t(const char_access::iterator & first, const char_access::iterator & last): - sys_string_t(first, last - first) - {} - using sys_string_emscripten = sys_string_t; using sys_string_emscripten_builder = sys_string_builder_t; } diff --git a/lib/inc/sys_string/impl/platforms/python_any.h b/lib/inc/sys_string/impl/platforms/python_any.h index a944f72..a4cf647 100644 --- a/lib/inc/sys_string/impl/platforms/python_any.h +++ b/lib/inc/sys_string/impl/platforms/python_any.h @@ -175,7 +175,7 @@ namespace sysstr::util { auto size = builder.size(); return std::visit([&](auto && buf) { - int dumbPyPy = (endian::native != endian::little) - (endian::native == endian::little); + int dumbPyPy = (std::endian::native != std::endian::little) - (std::endian::native == std::endian::little); return size ? check_create(PyUnicode_DecodeUTF32((const char *)buf.data(), size * sizeof(char32_t), "replace", &dumbPyPy)) : nullptr; }, builder.release()); @@ -189,12 +189,9 @@ namespace sysstr::util using reference = value_type; using pointer = void; - using cursor = index_cursor; - using reverse_cursor = index_cursor; - - using iterator = cursor; + using iterator = index_iterator; using const_iterator = iterator; - using reverse_iterator = reverse_cursor; + using reverse_iterator = index_iterator; using const_reverse_iterator = reverse_iterator; public: @@ -218,29 +215,21 @@ namespace sysstr::util size_type size() const noexcept { return m_size; } - template - auto cursor_begin() const noexcept -> index_cursor - { return index_cursor(*this, bool(Direction) ? 0 : m_size); } - - template - auto cursor_end() const noexcept -> index_cursor - { return index_cursor(*this, bool(Direction) ? m_size : 0); } - iterator begin() const noexcept - { return cursor_begin(); } - iterator end() const noexcept - { return cursor_end(); } + { return iterator(*this, 0); } + std::default_sentinel_t end() const noexcept + { return std::default_sentinel; } const_iterator cbegin() const noexcept { return begin(); } - const_iterator cend() const noexcept + std::default_sentinel_t cend() const noexcept { return end(); } reverse_iterator rbegin() const noexcept - { return cursor_begin(); } - reverse_iterator rend() const noexcept - { return cursor_end(); } + { return reverse_iterator(*this, m_size); } + std::default_sentinel_t rend() const noexcept + { return std::default_sentinel; } const_reverse_iterator crbegin() const noexcept { return rbegin(); } - const_reverse_iterator crend() const noexcept + std::default_sentinel_t crend() const noexcept { return rend(); } const char * c_str() const noexcept @@ -299,6 +288,10 @@ namespace sysstr py_storage(const Char * str, size_t len): py_storage(create_from(str, len), handle_retain::no) {} + + py_storage(const char_access::iterator & first, size_type length): + py_storage(first.container() ? first.container()->get_string() : nullptr, first.index(), first.index() + length) + {} ~py_storage() noexcept @@ -394,10 +387,10 @@ namespace sysstr if constexpr (utf_encoding_of == utf_encoding::utf8) { return util::check_create(PyUnicode_DecodeUTF8((const char *)str, len, "replace")); } else if constexpr (utf_encoding_of == utf_encoding::utf16) { - int dumbPyPy = (endian::native != endian::little) - (endian::native == endian::little); + int dumbPyPy = (std::endian::native != std::endian::little) - (std::endian::native == std::endian::little); return util::check_create(PyUnicode_DecodeUTF16((const char *)str, len * sizeof(char16_t), "replace", &dumbPyPy)); } else if constexpr (utf_encoding_of == utf_encoding::utf32) { - int dumbPyPy = (endian::native != endian::little) - (endian::native == endian::little); + int dumbPyPy = (std::endian::native != std::endian::little) - (std::endian::native == std::endian::little); return util::check_create(PyUnicode_DecodeUTF32((const char *)str, len * sizeof(char32_t), "replace", &dumbPyPy)); } } @@ -503,21 +496,6 @@ namespace sysstr::util namespace sysstr { - template<> - inline sys_string_t::sys_string_t(const char_access::cursor & src, size_type length): - sys_string_t(src.container() ? src.container()->get_string() : nullptr, src.position(), src.position() + length) - {} - - template<> - inline sys_string_t::sys_string_t(const char_access::reverse_cursor & src, size_type length): - sys_string_t(src.container() ? src.container()->get_string() : nullptr, src.position() - length, src.position()) - {} - - template<> - inline sys_string_t::sys_string_t(const char_access::iterator & first, const char_access::iterator & last): - sys_string_t(first, last.position() - first.position()) - {} - using sys_string_pystr = sys_string_t; using sys_string_pystr_builder = sys_string_builder_t; } diff --git a/lib/inc/sys_string/impl/platforms/unix_generic.h b/lib/inc/sys_string/impl/platforms/unix_generic.h index a22b66e..ac6f480 100644 --- a/lib/inc/sys_string/impl/platforms/unix_generic.h +++ b/lib/inc/sys_string/impl/platforms/unix_generic.h @@ -59,8 +59,8 @@ namespace sysstr using super::super; #ifdef _MSC_VER - template - generic_storage(const Char * str, size_t len, std::enable_if_t> * = nullptr): + template + generic_storage(const Char * str, size_t len): super(str, len) {} #endif @@ -111,24 +111,6 @@ namespace sysstr::util namespace sysstr { - template<> - inline - sys_string_t::sys_string_t(const char_access::cursor & src, size_type length): - sys_string_t(src.iterator(), length) - {} - - template<> - inline - sys_string_t::sys_string_t(const char_access::reverse_cursor & src, size_type length): - sys_string_t(src.iterator() - length, length) - {} - - template<> - inline - sys_string_t::sys_string_t(const char_access::iterator & first, const char_access::iterator & last): - sys_string_t(first, last - first) - {} - using sys_string_generic = sys_string_t; using sys_string_generic_builder = sys_string_builder_t; } diff --git a/lib/inc/sys_string/impl/platforms/windows_bstr.h b/lib/inc/sys_string/impl/platforms/windows_bstr.h index 17abc01..bfd4a54 100644 --- a/lib/inc/sys_string/impl/platforms/windows_bstr.h +++ b/lib/inc/sys_string/impl/platforms/windows_bstr.h @@ -400,8 +400,6 @@ namespace sysstr::util using reverse_iterator = std::reverse_iterator; using const_reverse_iterator = reverse_iterator; - using cursor = iter_cursor; - using reverse_cursor = iter_cursor; public: bstr_char_access(const bstr_buffer & buffer) noexcept : m_chars(buffer.chars()), @@ -535,8 +533,8 @@ namespace sysstr::util protected: - template - bstr_storage(const Char * str, size_t len, std::enable_if_t> * = nullptr): + template + bstr_storage(const Char * str, size_t len): m_buffer(str, len) {} @@ -611,21 +609,6 @@ namespace sysstr::util namespace sysstr { - template<> - inline sys_string_t::sys_string_t(const char_access::cursor & src, size_type length) : - sys_string_t(src.iterator(), length) - {} - - template<> - inline sys_string_t::sys_string_t(const char_access::reverse_cursor & src, size_type length) : - sys_string_t(src.iterator() - length, length) - {} - - template<> - inline sys_string_t::sys_string_t(const char_access::iterator & first, const char_access::iterator & last) : - sys_string_t(first, size_type(last - first)) - {} - using sys_string_bstr = sys_string_t; using sys_string_bstr_builder = sys_string_builder_t; } diff --git a/lib/inc/sys_string/impl/platforms/windows_generic.h b/lib/inc/sys_string/impl/platforms/windows_generic.h index 33444e7..ee8a9aa 100644 --- a/lib/inc/sys_string/impl/platforms/windows_generic.h +++ b/lib/inc/sys_string/impl/platforms/windows_generic.h @@ -56,8 +56,8 @@ namespace sysstr public: using super::super; - template - win_generic_storage(const Char * str, size_t len, std::enable_if_t> * = nullptr): + template + win_generic_storage(const Char * str, size_t len): super(str, len) {} @@ -106,24 +106,6 @@ namespace sysstr::util namespace sysstr { - template<> - inline - sys_string_t::sys_string_t(const char_access::cursor & src, size_type length): - sys_string_t(src.iterator(), length) - {} - - template<> - inline - sys_string_t::sys_string_t(const char_access::reverse_cursor & src, size_type length): - sys_string_t(src.iterator() - length, length) - {} - - template<> - inline - sys_string_t::sys_string_t(const char_access::iterator & first, const char_access::iterator & last): - sys_string_t(first, last - first) - {} - using sys_string_win_generic = sys_string_t; using sys_string_win_generic_builder = sys_string_builder_t; } diff --git a/lib/inc/sys_string/impl/platforms/windows_hstring.h b/lib/inc/sys_string/impl/platforms/windows_hstring.h index f27e243..2a1fedc 100644 --- a/lib/inc/sys_string/impl/platforms/windows_hstring.h +++ b/lib/inc/sys_string/impl/platforms/windows_hstring.h @@ -167,8 +167,6 @@ namespace sysstr::util using reverse_iterator = std::reverse_iterator; using const_reverse_iterator = reverse_iterator; - using cursor = iter_cursor; - using reverse_cursor = iter_cursor; public: hstring_char_access(const sys_string_t & src) noexcept; ~hstring_char_access() noexcept @@ -264,12 +262,10 @@ namespace sysstr hstring_storage(buffer_from(str, len), handle_retain::no) {} -#if SYS_STRING_USE_CHAR8 template<> hstring_storage(const char8_t * str, size_t len): hstring_storage(buffer_from((const char *)str, len), handle_retain::no) {} -#endif template<> hstring_storage(const char16_t * str, size_t len) : @@ -434,22 +430,6 @@ namespace sysstr namespace sysstr { - template<> - inline sys_string_t::sys_string_t(const char_access::cursor & src, size_type length): - sys_string_t(src.iterator(), length) - {} - - template<> - inline sys_string_t::sys_string_t(const char_access::reverse_cursor & src, size_type length): - sys_string_t(src.iterator() - length, length) - {} - - template<> - inline sys_string_t::sys_string_t(const char_access::iterator & first, - const char_access::iterator & last): - sys_string_t(first, size_type(last - first)) - {} - using sys_string_hstring = sys_string_t; using sys_string_hstring_builder = sys_string_builder_t; } diff --git a/lib/inc/sys_string/impl/unicode/algorithms.h b/lib/inc/sys_string/impl/unicode/algorithms.h index 61f466c..1014901 100644 --- a/lib/inc/sys_string/impl/unicode/algorithms.h +++ b/lib/inc/sys_string/impl/unicode/algorithms.h @@ -10,6 +10,9 @@ #include +#include +#include + namespace sysstr { struct isspace @@ -37,13 +40,15 @@ namespace sysstr class sigma_tolower { public: - template - auto operator()(Cursor cursor) const noexcept -> char32_t + template + auto operator()(const Range & range, + std::ranges::iterator_t where) const noexcept -> char32_t { - if (any_non_cased_then_cased(cursor.reverse())) + auto reversed = range.reverse(where); + if (any_non_cased_then_cased(reversed, std::rend(range))) { - ++cursor; - if (!any_non_cased_then_cased(cursor)) + ++where; + if (!any_non_cased_then_cased(where, std::end(range))) { return U'\u03C2'; //replace with ς } @@ -51,12 +56,12 @@ namespace sysstr return U'\u03C3'; // replace with σ } private: - template - auto any_non_cased_then_cased(Cursor cursor) const noexcept -> bool + template Sentinel> + auto any_non_cased_then_cased(It first, Sentinel last) const noexcept -> bool { - for( ; cursor; ++cursor) + for( ; first != last; ++first) { - auto c = *cursor; + auto c = *first; auto props = unicode::get_char_prop(c); if (uint8_t(props & unicode::char_prop::case_ignorable)) continue; @@ -70,21 +75,24 @@ namespace sysstr template struct tolower { - template - inline auto operator()(Cursor cursor, OutIt dest) noexcept(noexcept(*dest++ = utf_char_of())) -> OutIt + template> OutIt> + inline auto operator()(const Range & range, OutIt dest) noexcept(noexcept(*dest++ = utf_char_of())) -> OutIt { using namespace util::unicode; + + auto first = std::begin(range); + auto last = std::end(range); - for( ; cursor; ++cursor) + for( ; first != last; ++first) { - auto c = *cursor; + auto c = *first; if (c != U'\u03A3') // not Σ { dest = mapper::to_lower_case.map_char(c, dest); } else { - char32_t lc = util::sigma_tolower()(cursor); + char32_t lc = util::sigma_tolower()(range, first); auto writer = utf32_output::make_writer([&](auto value) { *dest++ = value; }); @@ -98,14 +106,16 @@ namespace sysstr template struct toupper { - template - inline auto operator()(Cursor cursor, OutIt dest) noexcept(noexcept(*dest++ = utf_char_of())) -> OutIt + template> OutIt> + inline auto operator()(const Range & range, OutIt dest) noexcept(noexcept(*dest++ = utf_char_of())) -> OutIt { using namespace util::unicode; - for( ; cursor; ++cursor) + auto first = std::begin(range); + auto last = std::end(range); + for( ; first != last; ++first) { - auto c = *cursor; + auto c = *first; dest = mapper::to_upper_case.map_char(c, dest); } diff --git a/lib/inc/sys_string/impl/unicode/utf_encoding.h b/lib/inc/sys_string/impl/unicode/utf_encoding.h index cfe2ea7..ed48385 100644 --- a/lib/inc/sys_string/impl/unicode/utf_encoding.h +++ b/lib/inc/sys_string/impl/unicode/utf_encoding.h @@ -57,9 +57,7 @@ namespace sysstr template<> struct utf_encoding_value { static constexpr utf_encoding value = utf8; }; template<> struct utf_encoding_value { static constexpr utf_encoding value = utf8; }; template<> struct utf_encoding_value { static constexpr utf_encoding value = utf8; }; - #if SYS_STRING_USE_CHAR8 template<> struct utf_encoding_value { static constexpr utf_encoding value = utf8; }; - #endif template<> struct utf_encoding_value { static constexpr utf_encoding value = utf16; }; template<> struct utf_encoding_value { static constexpr utf_encoding value = utf32; }; #if SYS_STRING_WCHAR_T_IS_UTF16 @@ -68,21 +66,11 @@ namespace sysstr template constexpr utf_encoding utf_encoding_of = utf_encoding_value>::value; - template struct has_utf_encoding_type : public std::false_type {}; - template<> struct has_utf_encoding_type : public std::true_type {}; - template<> struct has_utf_encoding_type : public std::true_type {}; - template<> struct has_utf_encoding_type : public std::true_type {}; - #if SYS_STRING_USE_CHAR8 - template<> struct has_utf_encoding_type : public std::true_type {}; - #endif - template<> struct has_utf_encoding_type : public std::true_type {}; - template<> struct has_utf_encoding_type : public std::true_type {}; - #if SYS_STRING_WCHAR_T_IS_UTF16 - template<> struct has_utf_encoding_type : public std::true_type {}; - #endif - - template constexpr bool has_utf_encoding = has_utf_encoding_type>::value; - + template concept has_utf_encoding = requires { + utf_encoding_of; + }; + + template struct utf_encoding_max_length; template<> struct utf_encoding_max_length { static constexpr size_t value = 4; }; template<> struct utf_encoding_max_length { static constexpr size_t value = 2; }; diff --git a/lib/inc/sys_string/impl/unicode/utf_util.h b/lib/inc/sys_string/impl/unicode/utf_util.h index e3ff184..fe2a7f9 100644 --- a/lib/inc/sys_string/impl/unicode/utf_util.h +++ b/lib/inc/sys_string/impl/unicode/utf_util.h @@ -9,7 +9,6 @@ #define HEADER_SYS_STRING_UNICODE_UTF_UTIL_INCLUDED #include -#include #include namespace sysstr @@ -19,55 +18,55 @@ namespace sysstr class utf_converter { private: - template - static void reading(InCursor & cursor) noexcept(noexcept(*cursor) && noexcept(++cursor) && noexcept(bool(cursor))); - template - static void reading(InIt first, EndIt last) noexcept(noexcept(*first++) && noexcept(first != last)); - template + template EndIt> + static void reading(It first, EndIt last) noexcept(noexcept(*first++) && noexcept(first != last)); + template + static void reading(Range && range) noexcept(noexcept(reading(std::begin(range), std::end(range)))); + template> OutIt> static void writing(OutIt dest) noexcept(noexcept(*dest++ = utf_char_of())); template static void applying(Func func) noexcept(noexcept(func(utf_char_of()))); public: - template - static Func for_each_converted(InCursor & cursor, Func func) noexcept(noexcept(reading(cursor)) && noexcept(applying(func))); - - template + template + static Func for_each_converted(Range && range, Func func) noexcept(noexcept(reading(std::forward(range))) && noexcept(applying(func))); + + template> OutIt> SYS_STRING_FORCE_INLINE - static OutIt convert(InCursor & cursor, OutIt dest) noexcept(noexcept(reading(cursor)) && noexcept(writing(dest))) + static OutIt convert(Range && range, OutIt dest) noexcept(noexcept(reading(std::forward(range))) && noexcept(writing(dest))) { - for_each_converted(cursor, [&](auto c) { *dest++ = c; }); + for_each_converted(std::forward(range), [&](auto c) { *dest++ = c; }); return dest; } - - template + + template SYS_STRING_FORCE_INLINE - static size_t converted_length(InCursor & cursor) noexcept(noexcept(reading(cursor))) + static size_t converted_length(Range && range) noexcept(noexcept(reading(std::forward(range)))) { size_t ret = 0; - for_each_converted(cursor, [&](auto) { ++ret; }); + for_each_converted(std::forward(range), [&](auto) { ++ret; }); return ret; } - template + template EndIt, class Func> SYS_STRING_FORCE_INLINE - static Func for_each_converted(InIt first, EndIt last, Func func) noexcept(noexcept(reading(first, last)) && noexcept(applying(func))) + static Func for_each_converted(It first, EndIt last, Func func) noexcept(noexcept(reading(first, last)) && noexcept(applying(func))) { - util::iter_cursor cursor(first, last, first); - return for_each_converted(cursor, func); + using range_t = std::ranges::subrange; + return for_each_converted(range_t(first, last), func); } - template + template EndIt, std::output_iterator> OutIt> SYS_STRING_FORCE_INLINE - static OutIt convert(InIt first, EndIt last, OutIt dest) noexcept(noexcept(reading(first, last)) && noexcept(writing(dest))) + static OutIt convert(It first, EndIt last, OutIt dest) noexcept(noexcept(reading(first, last)) && noexcept(writing(dest))) { for_each_converted(first, last, [&](auto c) { *dest++ = c; }); return dest; } - template + template EndIt> SYS_STRING_FORCE_INLINE - static size_t converted_length(InIt first, EndIt last) noexcept(noexcept(reading(first, last))) + static size_t converted_length(It first, EndIt last) noexcept(noexcept(reading(first, last))) { size_t ret = 0; for_each_converted(first, last, [&](auto) { ++ret; }); @@ -80,33 +79,32 @@ namespace sysstr class utf32_input { private: - template - static void reading(InCursor & cursor) noexcept(noexcept(*cursor) && noexcept(++cursor) && noexcept(bool(cursor))); - template - static void reading(InIt first, EndIt last) noexcept(noexcept(*first++) && noexcept(first != last)); + template EndIt> + static void reading(It first, EndIt last) noexcept(noexcept(*first++) && noexcept(first != last)); + template + static void reading(Range && range) noexcept(noexcept(reading(std::begin(range), std::end(range)))); public: - template - static char32_t read(InCursor & cursor) noexcept(noexcept(reading(cursor))); + template EndIt> + static char32_t read(It & first, EndIt last) noexcept(noexcept(reading(first,last))); - template - static char32_t read_reversed(InCursor & cursor) noexcept(noexcept(reading(cursor))); + template EndIt> + static char32_t read_reversed(It & first, EndIt last) noexcept(noexcept(reading(first,last))); - template + template SYS_STRING_FORCE_INLINE - static Sink read(InCursor & cursor, Sink sink) noexcept(noexcept(reading(cursor)) && noexcept(sink(char32_t()))) + static Sink read(Range && range, Sink sink) noexcept(noexcept(reading(std::forward(range))) && noexcept(sink(char32_t()))) { - while(cursor) - sink(read(cursor)); - return sink; + return read(std::begin(std::forward(range)), std::end(std::forward(range)), sink); } - template + template EndIt, class Sink> SYS_STRING_FORCE_INLINE - static Sink read(InIt first, EndIt last, Sink sink) noexcept(noexcept(reading(first,last)) && noexcept(sink(char32_t()))) + static Sink read(It first, EndIt last, Sink sink) noexcept(noexcept(reading(first,last)) && noexcept(sink(char32_t()))) { - util::iter_cursor cursor(first, last, first); - return read(cursor, sink); + while(first != last) + sink(read(first, last)); + return sink; } }; @@ -160,115 +158,114 @@ namespace sysstr }; template - template + template SYS_STRING_FORCE_INLINE - Func utf_converter::for_each_converted(InCursor & cursor, Func func) noexcept(noexcept(reading(cursor)) && noexcept(applying(func))) + Func utf_converter::for_each_converted(Range && range, Func func) + noexcept(noexcept(reading(std::forward(range))) && noexcept(applying(func))) { - return utf32_input::read(cursor, utf32_output::make_writer(func)).sink; + return utf32_input::read(std::forward(range), utf32_output::make_writer(func)).sink; } //MARK:- UTF-16 - #ifndef __INTELLISENSE__ template<> - template + template EndIt> SYS_STRING_FORCE_INLINE - char32_t utf32_input::read(InCursor & cursor) noexcept(noexcept(reading(cursor))) + char32_t utf32_input::read(It & first, EndIt last) noexcept(noexcept(reading(first,last))) { utf_codepoint_decoder decoder; - decoder.put(uint16_t(*cursor)); - ++cursor; + decoder.put(uint16_t(*first)); + ++first; if (decoder.done()) return char32_t{decoder.value()}; - if (decoder.error() || !cursor) + if (decoder.error() || first == last) return char32_t{U'\uFFFD'}; - decoder.put(uint16_t(*cursor)); + decoder.put(uint16_t(*first)); if (!decoder.done()) return char32_t{U'\uFFFD'}; - ++cursor; + ++first; return char32_t{decoder.value()}; } template<> - template + template EndIt> SYS_STRING_FORCE_INLINE - char32_t utf32_input::read_reversed(InCursor & cursor) noexcept(noexcept(reading(cursor))) + char32_t utf32_input::read_reversed(It & first, EndIt last) noexcept(noexcept(reading(first, last))) { utf_reverse_codepoint_decoder decoder; - decoder.put(uint16_t(*cursor)); - ++cursor; + decoder.put(uint16_t(*first)); + ++first; if (decoder.done()) return char32_t{decoder.value()}; - if (decoder.error() || !cursor) + if (decoder.error() || first == last) return char32_t{U'\uFFFD'}; - decoder.put(uint16_t(*cursor)); + decoder.put(uint16_t(*first)); if (!decoder.done()) return char32_t{U'\uFFFD'}; - ++cursor; + ++first; return char32_t{decoder.value()}; } - #endif //MARK:- UTF-8 - #ifndef __INTELLISENSE__ template<> - template + template EndIt> SYS_STRING_FORCE_INLINE - char32_t utf32_input::read(InCursor & cursor) noexcept(noexcept(reading(cursor))) + char32_t utf32_input::read(It & first, EndIt last) noexcept(noexcept(reading(first, last))) { - uint8_t byte = uint8_t(*cursor); - ++cursor; + uint8_t byte = uint8_t(*first); + ++first; if (byte <= 0x7f) return char32_t{byte}; utf_codepoint_decoder decoder; decoder.put(byte); - if (decoder.error() || !cursor) + if (decoder.error() || first == last) return char32_t{U'\uFFFD'}; for ( ; ; ) { - byte = uint8_t(*cursor); + byte = uint8_t(*first); decoder.put(byte); if (decoder.error()) return char32_t{U'\uFFFD'}; - ++cursor; + ++first; if (decoder.done()) return char32_t{decoder.value()}; - if (!cursor) + if (first == last) return char32_t{U'\uFFFD'}; } } template<> - template + template EndIt> SYS_STRING_FORCE_INLINE - char32_t utf32_input::read_reversed(InCursor & cursor) noexcept(noexcept(reading(cursor))) + char32_t utf32_input::read_reversed(It & first, EndIt last) noexcept(noexcept(reading(first, last))) { - uint8_t byte = uint8_t(*cursor); - ++cursor; + uint8_t byte = uint8_t(*first); + ++first; if (byte <= 0x7f) return char32_t{byte}; utf_reverse_codepoint_decoder decoder; decoder.put(byte); - if (decoder.error() || !cursor) + if (decoder.error() || first == last) return char32_t{U'\uFFFD'}; - for (uint8_t rewind_count = 1; ; ++rewind_count) + It rewind_point = first; + for ( ; ; ) { - byte = uint8_t(*cursor); - ++cursor; + byte = uint8_t(*first); + ++first; decoder.put(byte); if (decoder.done()) @@ -276,38 +273,36 @@ namespace sysstr if (decoder.error()) { - cursor -= rewind_count; + first = std::move(rewind_point); return char32_t{U'\uFFFD'}; } - if (!cursor) + if (first == last) return char32_t{u'\uFFFD'}; } } - #endif //MARK:- UTF-32 - #ifndef __INTELLISENSE__ template<> - template + template EndIt> SYS_STRING_FORCE_INLINE - char32_t utf32_input::read(InCursor & cursor) noexcept(noexcept(reading(cursor))) + char32_t utf32_input::read(It & first, EndIt last) noexcept(noexcept(reading(first, last))) { utf_codepoint_decoder decoder; - bool res = decoder.put(uint32_t(*cursor)); - ++cursor; + bool res = decoder.put(uint32_t(*first)); + ++first; return res ? char32_t{decoder.value()} : U'\uFFFD'; } template<> - template - char32_t utf32_input::read_reversed(InCursor & cursor) noexcept(noexcept(reading(cursor))) + template EndIt> + SYS_STRING_FORCE_INLINE + char32_t utf32_input::read_reversed(It & first, EndIt last) noexcept(noexcept(reading(first, last))) { - return utf32_input::read(cursor); + return utf32_input::read(first, last); } - #endif } #endif diff --git a/lib/inc/sys_string/impl/util/cursor.h b/lib/inc/sys_string/impl/util/cursor.h deleted file mode 100644 index 51221d3..0000000 --- a/lib/inc/sys_string/impl/util/cursor.h +++ /dev/null @@ -1,492 +0,0 @@ -// -// Copyright 2020 Eugene Gershnik -// -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file or at -// https://github.com/gershnik/sys_string/blob/master/LICENSE -// -#ifndef HEADER_SYS_STRING_CURSOR_H_INCLUDED -#define HEADER_SYS_STRING_CURSOR_H_INCLUDED - -#include - -#include -#include -#include - -namespace sysstr::util -{ - enum class cursor_direction : bool - { - backward = false, - forward = true - }; - constexpr cursor_direction reverse(cursor_direction dir) noexcept - { return cursor_direction(!bool(dir)); } - - template - class index_cursor - { - friend index_cursor; - - private: - using container_ptr = Container *; - - public: - using size_type = decltype(std::size(std::declval())); - using reference = decltype(std::declval()[0]); - - using difference_type = std::make_signed_t; - using value_type = std::remove_cv_t>; - using pointer = std::conditional_t, std::add_pointer_t>, void>; - - using iterator_category = std::random_access_iterator_tag; - - using reverse_type = index_cursor; - - static constexpr bool is_forward = (Direction == cursor_direction::forward); - static constexpr bool is_reverse = !is_forward; - public: - constexpr index_cursor() noexcept = default; - - constexpr index_cursor(Container & cont, size_type idx) noexcept : - m_cont(&cont), - m_idx(idx) - {} - - template - constexpr index_cursor(const index_cursor & src) noexcept : - m_cont(src.m_cont), - m_idx(src.m_idx) - {} - - template - constexpr index_cursor(const index_cursor & src, size_type idx) noexcept : - m_cont(src.m_cont), - m_idx(idx) - {} - - constexpr reference operator*() const - { return (*this->m_cont)[this->m_idx - !index_cursor::is_forward]; } - - index_cursor & operator++() noexcept - { - (*this) += 1; - return *this; - } - index_cursor operator++(int) noexcept - { - index_cursor ret = *this; - (*this) += 1; - return ret; - } - index_cursor & operator+=(difference_type diff) noexcept - { - if constexpr (index_cursor::is_forward) - this->m_idx += diff; - else - this->m_idx -= diff; - return *this; - } - index_cursor & operator--() noexcept - { - (*this) += -1; - return *this; - } - index_cursor operator--(int) noexcept - { - index_cursor ret = *this; - (*this) += -1; - return ret; - } - index_cursor & operator-=(difference_type diff) noexcept - { - (*this) += -diff; - return *this; - } - - friend constexpr index_cursor operator+(const index_cursor & lhs, difference_type rhs) noexcept - { - index_cursor ret(lhs); - ret += rhs; - return ret; - } - - friend constexpr index_cursor operator+(difference_type lhs, const index_cursor & rhs) noexcept - { - index_cursor ret(rhs); - ret += lhs; - return ret; - } - - friend constexpr index_cursor operator-(const index_cursor & lhs, difference_type rhs) noexcept - { - index_cursor ret(lhs); - ret -= rhs; - return ret; - } - - friend constexpr difference_type operator-(const index_cursor & lhs, const index_cursor & rhs) noexcept - { return index_cursor::is_forward ? (lhs.m_idx - rhs.m_idx) : (rhs.m_idx - lhs.m_idx); } - - explicit constexpr operator bool() const - { return this->m_idx != (index_cursor::is_forward ? std::size(*this->m_cont) : 0); } - - - friend constexpr bool operator==(const index_cursor & lhs, const index_cursor & rhs) noexcept - { return lhs.m_idx == rhs.m_idx; } - friend constexpr bool operator!=(const index_cursor & lhs, const index_cursor & rhs) noexcept - { return !(lhs == rhs); } - - friend constexpr bool operator==(const index_cursor & lhs, std::nullptr_t) noexcept - { return !lhs; } - friend constexpr bool operator==(std::nullptr_t, const index_cursor & rhs) noexcept - { return !rhs; } - friend constexpr bool operator!=(const index_cursor & lhs, std::nullptr_t rhs) noexcept - { return !(lhs == rhs); } - friend constexpr bool operator!=(std::nullptr_t lhs, const index_cursor & rhs) noexcept - { return !(lhs == rhs); } - - #if SYS_STRING_USE_SPACESHIP_OPERATOR - - friend std::strong_ordering operator<=>(const index_cursor & lhs, const index_cursor & rhs) noexcept - { return is_forward ? lhs.m_idx <=> rhs.m_idx : rhs.m_idx <=> lhs.m_idx; } - #else - friend bool operator<(const index_cursor & lhs, const index_cursor & rhs) noexcept - { return index_cursor::is_forward ? lhs.m_idx < rhs.m_idx : rhs.m_idx < lhs.m_idx; } - friend bool operator<=(const index_cursor & lhs, const index_cursor & rhs) noexcept - { return index_cursor::is_forward ? lhs.m_idx <= rhs.m_idx : rhs.m_idx <= lhs.m_idx;; } - friend bool operator>(const index_cursor & lhs, const index_cursor & rhs) noexcept - { return index_cursor::is_forward ? lhs.m_idx > rhs.m_idx : rhs.m_idx > lhs.m_idx;; } - friend bool operator>=(const index_cursor & lhs, const index_cursor & rhs) noexcept - { return index_cursor::is_forward ? lhs.m_idx >= rhs.m_idx : rhs.m_idx >= lhs.m_idx;; } - #endif - - - constexpr reverse_type reverse() const noexcept - { return reverse_type(*this); } - - constexpr size_type position() const noexcept - { return this->m_idx; } - - container_ptr container() const noexcept - { return m_cont; } - - friend auto operator<<(std::ostream & str, const index_cursor & c) -> std::ostream & - { return str << c.m_idx; } - - private: - container_ptr m_cont = nullptr; - size_type m_idx = 0; - }; - - template - using iterator_of = decltype(std::begin(std::declval>())); - template - using end_iterator_of = decltype(std::end(std::declval>())); - - - template::difference_type>> - class iter_cursor - { - friend iter_cursor; - public: - static constexpr bool is_forward = Direction == cursor_direction::forward; - static constexpr bool is_reverse = !is_forward; - private: - static constexpr bool is_bidi = std::is_convertible_v::iterator_category, std::bidirectional_iterator_tag>; - static constexpr bool is_random = std::is_convertible_v::iterator_category, std::random_access_iterator_tag>; - - static_assert(is_bidi || is_forward, "Iterator must be at least bidirectional to support reverse cursor"); - - public: - using size_type = SizeT; - using reference = typename std::iterator_traits::reference; - using value_type = typename std::iterator_traits::value_type; - using pointer = typename std::iterator_traits::pointer; - - using difference_type = std::make_signed_t; - - using iterator_category = typename std::iterator_traits::iterator_category; - - using reverse_type = iter_cursor; - - public: - constexpr iter_cursor() = default; - - constexpr iter_cursor(It begin, EndIt end, It current) : - m_begin(std::move(begin)), - m_end(std::move(end)), - m_current(std::move(current)) - {} - - template - constexpr iter_cursor(Container & cont, - std::enable_if_t, It> && std::is_same_v, EndIt>, - It> current) : - m_begin(std::begin(cont)), - m_end(std::end(cont)), - m_current(std::move(current)) - {} - - template - constexpr iter_cursor(const iter_cursor & src) : - m_begin(src.m_begin), - m_end(src.m_end), - m_current(src.m_current) - {} - - constexpr reference operator*() const - { - if constexpr (iter_cursor::is_forward) - { - return *this->m_current; - } - else - { - It temp(this->m_current); - --temp; - return *temp; - } - } - - - iter_cursor & operator++() - { - if constexpr (iter_cursor::is_forward) - ++this->m_current; - else - --this->m_current; - return *this; - } - - iter_cursor operator++(int) - { - iter_cursor ret = *this; - ++(*this); - return ret; - } - - template - std::enable_if_t & operator--() - { - if constexpr (iter_cursor::is_forward) - --this->m_current; - else - ++this->m_current; - return *this; - } - - template - std::enable_if_t operator--(int) - { - iter_cursor ret = *this; - --(*this); - return ret; - } - - template - std::enable_if_t & operator+=(difference_type diff) - { - constexpr difference_type diff_sign = -2 * !iter_cursor::is_forward + 1; - this->m_current += diff_sign * diff; - return *this; - } - - template - std::enable_if_t & operator-=(difference_type diff) - { - *this += -diff; - return *this; - } - - template - friend std::enable_if_t operator+(const iter_cursor & lhs, difference_type rhs) - { - iter_cursor ret(lhs); - ret += rhs; - return ret; - } - - template - friend std::enable_if_t operator+(difference_type lhs, const iter_cursor & rhs) - { - iter_cursor ret(rhs); - ret += lhs; - return ret; - } - - template - friend std::enable_if_t operator-(const iter_cursor & lhs, difference_type rhs) - { - iter_cursor ret(lhs); - ret -= rhs; - return ret; - } - - template - friend std::enable_if_t operator-(const iter_cursor & lhs, const iter_cursor & rhs) - { - if constexpr (iter_cursor::is_forward) - return difference_type(lhs.m_current - rhs.m_current); - else - return difference_type(rhs.m_current - lhs.m_current); - } - - explicit constexpr operator bool() const - { return this->m_current != (iter_cursor::is_forward ? this->m_end : this->m_begin); } - - - friend constexpr bool operator==(const iter_cursor & lhs, const iter_cursor & rhs) - { return lhs.m_current == rhs.m_current; } - friend constexpr bool operator!=(const iter_cursor & lhs, const iter_cursor & rhs) - { return !(lhs == rhs); } - - friend constexpr bool operator==(const iter_cursor & lhs, std::nullptr_t) - { return !lhs; } - friend constexpr bool operator==(std::nullptr_t, const iter_cursor & rhs) - { return !rhs; } - friend constexpr bool operator!=(const iter_cursor & lhs, std::nullptr_t rhs) - { return !(lhs == rhs); } - friend constexpr bool operator!=(std::nullptr_t lhs, const iter_cursor & rhs) - { return !(lhs == rhs); } - - #if SYS_STRING_USE_SPACESHIP_OPERATOR - - template - friend std::enable_if_t operator<=>(const iter_cursor & lhs, const iter_cursor & rhs) - { return (lhs - rhs) <=> 0; } - #else - template - friend std::enable_if_t operator<(const iter_cursor & lhs, const iter_cursor & rhs) - { return (lhs - rhs) < 0; } - template - friend std::enable_if_t operator<=(const iter_cursor & lhs, const iter_cursor & rhs) - { return (lhs - rhs) <= 0; } - template - friend std::enable_if_t operator>(const iter_cursor & lhs, const iter_cursor & rhs) - { return (lhs - rhs) > 0; } - template - friend std::enable_if_t operator>=(const iter_cursor & lhs, const iter_cursor & rhs) - { return (lhs - rhs) >= 0; } - #endif - - template - constexpr std::enable_if_t reverse() const - { return reverse_type(*this); } - - - template - constexpr std::enable_if_t position() const - { return size_type(this->m_current - this->m_begin); } - - It iterator() const - { return m_current; } - - friend auto operator<<(std::ostream & str, const iter_cursor & c) -> std::ostream & - { - if constexpr (is_random) - return str << c.position(); - else - return str << "non random iter_cursor"; - } - private: - It m_begin {}; - EndIt m_end {}; - It m_current {}; - }; - - - template - struct call_member_cursor_begin - { - template - auto operator()(T && obj) const -> decltype(std::forward(obj).template cursor_begin()); - }; - template - struct call_member_cursor_end - { - template - auto operator()(T && obj) const -> decltype(std::forward(obj).template cursor_end()); - }; - - - template - constexpr bool has_member_cursor_begin = std::is_invocable_v, std::remove_reference_t>; - template - constexpr bool has_member_cursor_end = std::is_invocable_v, std::remove_reference_t>; - - template - SYS_STRING_FORCE_INLINE - auto cursor_begin(T && cont) -> decltype(cont.template cursor_begin()) - { - static_assert(noexcept(cont.template cursor_begin()), "member cursor_begin must be noexcept"); - return cont.template cursor_begin(); - } - - template - SYS_STRING_FORCE_INLINE - auto cursor_end(T && cont) -> decltype(cont.template cursor_end()) - { - return cont.template cursor_end(); - } - - template - SYS_STRING_FORCE_INLINE - auto cursor_at(T && cont, typename T::size_type size) -> decltype(cont.template cursor_at(size)) - { - return cont.template cursor_at(size); - } - - template - SYS_STRING_FORCE_INLINE - auto cursor_begin(T && cont) -> std::enable_if_t, - iter_cursor, end_iterator_of, Direction, decltype(std::size(cont))>> - { - if constexpr (Direction == cursor_direction::forward) - return iter_cursor, end_iterator_of, Direction, decltype(std::size(cont))>(cont, std::begin(cont)); - else - return iter_cursor, end_iterator_of, Direction, decltype(std::size(cont))>(cont, std::end(cont)); - } - - template - SYS_STRING_FORCE_INLINE - auto cursor_end(T && cont) -> std::enable_if_t, - iter_cursor, end_iterator_of, Direction, decltype(std::size(cont))>> - { - if constexpr (Direction == cursor_direction::forward) - return iter_cursor, end_iterator_of, Direction, decltype(std::size(cont))>(cont, std::end(cont)); - else - return iter_cursor, end_iterator_of, Direction, decltype(std::size(cont))>(cont, std::begin(cont)); - } - - template - SYS_STRING_FORCE_INLINE - auto cursor_at(T && cont, decltype(std::size(cont)) pos) -> std::enable_if_t< - !has_member_cursor_begin && - std::is_convertible_v>::iterator_category, std::random_access_iterator_tag>, - iter_cursor, end_iterator_of, Direction, decltype(std::size(cont))>> - { - if constexpr (Direction == cursor_direction::forward) - return iter_cursor, end_iterator_of, Direction, decltype(std::size(cont))>(cont, std::begin(cont) + pos); - else - return iter_cursor, end_iterator_of, Direction, decltype(std::size(cont))>(cont, std::end(cont) - pos); - } -} - -#endif diff --git a/lib/inc/sys_string/impl/util/generic_buffer.h b/lib/inc/sys_string/impl/util/generic_buffer.h index 2450a9a..a45590c 100644 --- a/lib/inc/sys_string/impl/util/generic_buffer.h +++ b/lib/inc/sys_string/impl/util/generic_buffer.h @@ -16,6 +16,7 @@ #include #include #include +#include namespace sysstr::util::generic { @@ -318,7 +319,7 @@ namespace sysstr::util::generic return SizeT(len); } private: - static_assert(endian::native == endian::little || endian::native == endian::big, + static_assert(std::endian::native == std::endian::little || std::endian::native == std::endian::big, "Only little or big endian architectures are currently supported"); static constexpr size_t data_size = 4 * sizeof(void *); @@ -330,7 +331,7 @@ namespace sysstr::util::generic const uintptr_t & dynamic_ptr_value() const noexcept { - if constexpr (endian::native == endian::little) + if constexpr (std::endian::native == std::endian::little) return *reinterpret_cast(&this->m_data[0]); else return *(reinterpret_cast(&this->m_data[data_size]) - 1); @@ -340,7 +341,7 @@ namespace sysstr::util::generic const uintptr_t & dynamic_size_value() const noexcept { - if constexpr (endian::native == endian::little) + if constexpr (std::endian::native == std::endian::little) return *(reinterpret_cast(&this->m_data[0]) + 1); else return *(reinterpret_cast(&this->m_data[data_size]) - 2); @@ -350,7 +351,7 @@ namespace sysstr::util::generic const CharT * get_static_data() const noexcept { - if constexpr (endian::native == endian::little) + if constexpr (std::endian::native == std::endian::little) return reinterpret_cast(&this->m_data[0]) + 1; else return reinterpret_cast(&this->m_data[0]); @@ -360,7 +361,7 @@ namespace sysstr::util::generic const std::byte & marker_byte() const noexcept { - if constexpr (endian::native == endian::little) + if constexpr (std::endian::native == std::endian::little) return this->m_data[0]; else return this->m_data[data_size - 1]; @@ -393,8 +394,6 @@ namespace sysstr::util::generic using reverse_iterator = std::reverse_iterator; using const_reverse_iterator = reverse_iterator; - using cursor = iter_cursor; - using reverse_cursor = iter_cursor; public: char_access(const buffer & buffer) noexcept: m_chars(buffer.data()), @@ -545,8 +544,8 @@ namespace sysstr::util::generic storage & operator=(const storage & rhs) noexcept = default; storage & operator=(storage && rhs) noexcept = default; - template - storage(const Char * str, size_t len, std::enable_if_t> * = nullptr) : + template + storage(const Char * str, size_t len) : m_buffer(str, len) {} diff --git a/lib/inc/sys_string/impl/util/iter_util.h b/lib/inc/sys_string/impl/util/iter_util.h new file mode 100644 index 0000000..20b2848 --- /dev/null +++ b/lib/inc/sys_string/impl/util/iter_util.h @@ -0,0 +1,208 @@ +// +// Copyright 2020 Eugene Gershnik +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file or at +// https://github.com/gershnik/sys_string/blob/master/LICENSE +// +#ifndef HEADER_SYS_STRING_ITER_UTIL_H_INCLUDED +#define HEADER_SYS_STRING_ITER_UTIL_H_INCLUDED + +#include + +#include + +namespace sysstr::util +{ + enum class iter_direction : bool + { + backward = false, + forward = true + }; + constexpr iter_direction reverse(iter_direction dir) noexcept + { return iter_direction(!bool(dir)); } + + +// template +// class fixed_insert_iterator : private std::insert_iterator +// { +// private: +// using super = std::insert_iterator; +// public: +// using typename super::difference_type; +// +// using super::insert_iterator; +// using super::iter; +// using super::operator*; +// +// constexpr fixed_insert_iterator & operator++() +// { return static_cast(super::operator++()); } +// +// constexpr fixed_insert_iterator & operator++( int ) +// { return static_cast(super::operator++(int{})); } +// }; + + template + concept reverse_iterator_of = + std::input_iterator && + std::input_iterator && + std::is_constructible_v && + requires(T t) { + + { t.base() } -> std::same_as; + }; + + + template + concept indexable = requires(T & t, decltype(std::size(t)) n) + { + t[n]; + }; + + template + class index_iterator + { + static_assert(indexable); + + friend index_iterator; + private: + using container_ptr = Container *; + + public: + using size_type = decltype(std::size(std::declval())); + using reference = decltype(std::declval()[0]); + using difference_type = std::make_signed_t; + using value_type = std::remove_cv_t>; + + static constexpr bool is_forward = (Direction == iter_direction::forward); + static constexpr bool is_reverse = !is_forward; + public: + constexpr index_iterator() noexcept = default; + + constexpr index_iterator(Container & cont, size_type idx) noexcept : + m_cont(&cont), + m_idx(idx) + {} + + template + constexpr index_iterator(const index_iterator & src) noexcept : + m_cont(src.m_cont), + m_idx(src.m_idx) + {} + + template + constexpr index_iterator(const index_iterator & src, size_type idx) noexcept : + m_cont(src.m_cont), + m_idx(idx) + {} + + constexpr reference operator*() const + { return (*this->m_cont)[this->m_idx - !index_iterator::is_forward]; } + + constexpr reference operator[](difference_type idx) const + { + if constexpr (index_iterator::is_forward) + return (*this->m_cont)[this->m_idx + idx]; + else + return (*this->m_cont)[this->m_idx - 1 - idx]; + } + + constexpr index_iterator & operator++() noexcept + { + (*this) += 1; + return *this; + } + constexpr index_iterator operator++(int) noexcept + { + index_iterator ret = *this; + (*this) += 1; + return ret; + } + constexpr index_iterator & operator+=(difference_type diff) noexcept + { + if constexpr (index_iterator::is_forward) + this->m_idx += diff; + else + this->m_idx -= diff; + return *this; + } + index_iterator & operator--() noexcept + { + (*this) += -1; + return *this; + } + index_iterator operator--(int) noexcept + { + index_iterator ret = *this; + (*this) += -1; + return ret; + } + index_iterator & operator-=(difference_type diff) noexcept + { + (*this) += -diff; + return *this; + } + friend constexpr index_iterator operator+(const index_iterator & lhs, difference_type rhs) noexcept + { + index_iterator ret(lhs); + ret += rhs; + return ret; + } + + friend constexpr index_iterator operator+(difference_type lhs, const index_iterator & rhs) noexcept + { + index_iterator ret(rhs); + ret += lhs; + return ret; + } + + friend constexpr difference_type operator-(const index_iterator & lhs, const index_iterator & rhs) noexcept + { return index_iterator::is_forward ? (lhs.m_idx - rhs.m_idx) : (rhs.m_idx - lhs.m_idx); } + + friend constexpr difference_type operator-(const index_iterator & lhs, std::default_sentinel_t) noexcept + { return index_iterator::is_forward ? (lhs.m_idx - std::size(*lhs.m_cont)) : -lhs.m_idx; } + + friend constexpr difference_type operator-(std::default_sentinel_t, const index_iterator & rhs) noexcept + { return index_iterator::is_forward ? (std::size(*rhs.m_cont) - rhs.m_idx) : rhs.m_idx; } + + friend constexpr index_iterator operator-(const index_iterator & lhs, difference_type rhs) noexcept + { + index_iterator ret(lhs); + ret -= rhs; + return ret; + } + + friend constexpr bool operator==(const index_iterator & lhs, const index_iterator & rhs) noexcept + { return lhs.m_idx == rhs.m_idx; } + friend constexpr bool operator!=(const index_iterator & lhs, const index_iterator & rhs) noexcept + { return !(lhs == rhs); } + + friend constexpr bool operator==(const index_iterator & lhs, std::default_sentinel_t) noexcept + { return lhs.m_idx == (index_iterator::is_forward ? std::size(*lhs.m_cont) : 0); } + friend constexpr bool operator==(std::default_sentinel_t, const index_iterator & rhs) noexcept + { return rhs == std::default_sentinel; } + friend constexpr bool operator!=(const index_iterator & lhs, std::default_sentinel_t) noexcept + { return !(lhs == std::default_sentinel); } + friend constexpr bool operator!=(std::default_sentinel_t, const index_iterator & rhs) noexcept + { return !(rhs == std::default_sentinel); } + + friend constexpr std::strong_ordering operator<=>(const index_iterator & lhs, const index_iterator & rhs) noexcept + { return is_forward ? lhs.m_idx <=> rhs.m_idx : rhs.m_idx <=> lhs.m_idx; } + + + constexpr size_type index() const noexcept + { return this->m_idx; } + + container_ptr container() const noexcept + { return m_cont; } + + index_iterator base() const requires(is_reverse) + { return index_iterator(*this); } + + private: + container_ptr m_cont = nullptr; + size_type m_idx = 0; + }; +} + +#endif diff --git a/lib/inc/sys_string/impl/util/util.h b/lib/inc/sys_string/impl/util/util.h index b00f329..bf2b09c 100644 --- a/lib/inc/sys_string/impl/util/util.h +++ b/lib/inc/sys_string/impl/util/util.h @@ -13,9 +13,7 @@ #include #include #include -#if SYS_STRING_USE_SPACESHIP_OPERATOR - #include -#endif +#include namespace sysstr::util { @@ -47,78 +45,25 @@ namespace sysstr::util template static constexpr bool dependent_bool = Val; - inline constexpr auto make_compare_result(int res) - { - #if SYS_STRING_USE_SPACESHIP_OPERATOR - return res <=> 0; - #else - return res; - #endif - } - - template - inline constexpr auto compare_3way(T a, T b) - { - #if SYS_STRING_USE_SPACESHIP_OPERATOR - return a <=> b; - #else - return (a > b) - (a < b); - #endif - } - template inline constexpr auto compare_3way(const Char * lhs, size_t lhs_size, const Char * rhs, size_t rhs_size) noexcept { auto shortest_length = std::min(lhs_size, rhs_size); int res = std::char_traits::compare(lhs, rhs, shortest_length); - #if SYS_STRING_USE_SPACESHIP_OPERATOR - if (res != 0) - return res <=> 0; - #else - if (res != 0) - return res; - #endif - return compare_3way(lhs_size, rhs_size); - } - - template - inline constexpr auto lexicographical_compare_3way(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2) - { - for ( ; (first1 != last1) && (first2 != last2); ++first1, (void) ++first2 ) - { - if (auto res = compare_3way(*first1, *first2)) - return res; - } - #if SYS_STRING_USE_SPACESHIP_OPERATOR - return (first2 == last2) <=> (first1 == last1); - #else - return (first2 == last2) - (first1 == last1); - #endif - } - - template - inline constexpr auto lexicographical_compare_3way(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, Compare3Way comp) - { - for ( ; (first1 != last1) && (first2 != last2); ++first1, (void) ++first2 ) - { - if (auto res = comp(*first1, *first2); res != 0) - return res; - } - #if SYS_STRING_USE_SPACESHIP_OPERATOR - return (first2 == last2) <=> (first1 == last1); - #else - return (first2 == last2) - (first1 == last1); - #endif + if (auto ord = (res <=> 0); ord != 0) + return ord; + return lhs_size <=> rhs_size; } - template - auto split(InIt str_start, InIt str_end, OutIt dest, Pred pred) -> OutIt + template Sentinel, std::output_iterator OutIt, class Pred> + auto split(It str_start, Sentinel str_end, OutIt dest, Pred pred) -> OutIt + requires(std::is_constructible_v, std::tuple_element_t<1, decltype(pred(str_start, str_end))>>) { for( ; ; ) { auto [found_start, found_end] = pred(str_start, str_end); *dest++ = OutT(str_start, found_start); - if (found_start == str_end) + if (found_start == found_end) break; str_start = found_end; } diff --git a/lib/inc/sys_string/sys_string.h b/lib/inc/sys_string/sys_string.h index 10c14f0..4d0fb35 100644 --- a/lib/inc/sys_string/sys_string.h +++ b/lib/inc/sys_string/sys_string.h @@ -19,14 +19,9 @@ #include #include #include +#include #include -#if SYS_STRING_USE_SPACESHIP_OPERATOR - #include -#endif -#if SYS_STRING_USE_SPAN - #include -#endif #define HEADER_SYS_STRING_H_INSIDE @@ -69,6 +64,10 @@ namespace sysstr::util namespace sysstr { + template + concept sys_string_or_char = std::is_same_v, sys_string_t> || + std::is_same_v, char32_t>; + template class sys_string_t : public Storage { @@ -79,15 +78,17 @@ namespace sysstr struct view_traits { - using char_access = typename Storage::char_access; + using stored_reference = typename Storage::char_access; + + static constexpr bool enable_view = false; + static constexpr bool enable_borrowed_range = false; static constexpr const sys_string_t & adapt(const sys_string_t & str) noexcept { return str; } + static const stored_reference & access(const stored_reference & acc) noexcept + { return acc; } }; - template - static constexpr bool is_string_or_char = std::is_same_v>, sys_string_t> || - std::is_same_v>, char32_t>; public: using size_type = typename storage::size_type; using storage_type = typename storage::storage_type; @@ -104,17 +105,10 @@ namespace sysstr using utf16_view = utf_view; using utf32_view = utf_view; - #if SYS_STRING_USE_SPACESHIP_OPERATOR using compare_result = std::strong_ordering; static constexpr compare_result ordering_less = std::strong_ordering::less; static constexpr compare_result ordering_equal = std::strong_ordering::equal; static constexpr compare_result ordering_greater = std::strong_ordering::greater; - #else - using compare_result = int; - static constexpr compare_result ordering_less = -1; - static constexpr compare_result ordering_equal = 0; - static constexpr compare_result ordering_greater = 1; - #endif public: sys_string_t() noexcept = default; @@ -127,53 +121,44 @@ namespace sysstr using storage::storage; - template - sys_string_t(const Char * str, size_t len, std::enable_if_t> * = nullptr) : + template + sys_string_t(const Char * str, size_t len) : storage(str, len) {} - template - sys_string_t(const Char * str, std::enable_if_t> * = nullptr) : + template + sys_string_t(const Char * str) : sys_string_t(str, str ? std::char_traits::length(str) : 0) {} - template - sys_string_t(char val, std::enable_if_t> * = nullptr) : + template + sys_string_t(Char val) : sys_string_t(&val, 1) {} - template - sys_string_t(const std::basic_string & val, std::enable_if_t> * = nullptr) : - sys_string_t(val.data(), val.size()) + template + requires(has_utf_encoding>) + sys_string_t(Range && val) : + sys_string_t(std::ranges::data(std::forward(val)), std::ranges::size(std::forward(val))) {} - template - sys_string_t(const std::basic_string_view & val, std::enable_if_t> * = nullptr) : - sys_string_t(val.data(), val.size()) - {} - - template - sys_string_t(const std::vector & val, std::enable_if_t> * = nullptr) : - sys_string_t(val.data(), val.size()) + sys_string_t(const typename utf32_view::iterator & first, const typename utf32_view::iterator & last): + sys_string_t(first.storage_current(), last.storage_current()) {} - #if SYS_STRING_USE_SPAN - template - sys_string_t(const std::span & val, std::enable_if_t> * = nullptr) : - sys_string_t(val.data(), val.size()) + sys_string_t(const typename utf32_view::iterator & first, std::default_sentinel_t): + sys_string_t(first.storage_current(), first.storage_last()) {} - #endif - - sys_string_t(const typename utf32_view::iterator & first, const typename utf32_view::iterator & last): - sys_string_t(first.storage_cursor(), last.storage_pos() - first.storage_pos()) + template EndIt> + sys_string_t(const typename char_access::iterator & first, const EndIt & last): + sys_string_t(first, last - first) {} - - sys_string_t(const typename char_access::iterator & first, const typename char_access::iterator & last); - sys_string_t(const typename char_access::cursor & src, size_type length); - - sys_string_t(const typename char_access::reverse_cursor & src, size_type length); + template EndIt> + sys_string_t(const typename char_access::reverse_iterator & first, const EndIt & last): + sys_string_t(first.base() - (last - first), first.base()) + {} explicit sys_string_t(storage && st) noexcept : storage(std::move(st)) {} @@ -208,100 +193,81 @@ namespace sysstr friend auto operator!=(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> bool { return compare(lhs, rhs) != 0; } - #if SYS_STRING_USE_SPACESHIP_OPERATOR friend auto operator<=>(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> std::strong_ordering { return compare(lhs, rhs); } - #else - - friend auto operator<(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> bool - { return compare(lhs, rhs) < 0; } - friend auto operator<=(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> bool - { return compare(lhs, rhs) <= 0; } - friend auto operator>(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> bool - { return compare(lhs, rhs) > 0; } - friend auto operator>=(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> bool - { return compare(lhs, rhs) >= 0; } - - #endif friend auto compare(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> compare_result { return sys_string_t::compare(lhs, rhs); } friend auto compare_no_case(const sys_string_t lhs, const sys_string_t & rhs) noexcept -> compare_result { return sys_string_t::compare_no_case(lhs, rhs); } - template - friend auto operator+(const StringOrChar1 lhs, const StringOrChar2 rhs) -> - std::enable_if_t::is_string_or_char && sys_string_t::is_string_or_char, - util::addition> + template StringOrChar1, sys_string_or_char StringOrChar2> + friend auto operator+(const StringOrChar1 lhs, const StringOrChar2 rhs) -> util::addition { return util::addition(std::move(lhs), std::move(rhs)); } auto to_lower() const -> sys_string_t; auto to_upper() const -> sys_string_t; - template + template Pred = isspace> auto trim(Pred pred = Pred()) const -> sys_string_t; - template + template Pred = isspace> auto ltrim(Pred pred = Pred()) const -> sys_string_t; - template + template Pred = isspace> auto rtrim(Pred pred = Pred()) const -> sys_string_t; - template - auto split(OutIt dest, Search pred) const -> - std::enable_if_t, OutIt>; - template - auto split(OutIt dest, const StringOrChar & sep, size_t max_split = std::numeric_limits::max()) const -> - std::enable_if_t, OutIt>; + template> OutIt> + auto split(OutIt dest, Search search) const -> OutIt + requires(std::is_invocable_v); + + template StringOrChar, std::output_iterator> OutIt> + auto split(OutIt dest, const StringOrChar & sep, size_t max_split = std::numeric_limits::max()) const -> OutIt; - template + template auto join(FwdIt first, FwdIt last) const -> sys_string_t; - template - auto starts_with(const StringOrChar & prefix) const -> std::enable_if_t, bool>; - template + template StringOrChar> + auto starts_with(const StringOrChar & prefix) const -> bool; + + template auto find_prefix(InIt first, InIt last) const -> InIt; - template - auto remove_prefix(const StringOrChar & prefix) const -> std::enable_if_t, sys_string_t>; + template StringOrChar> + auto remove_prefix(const StringOrChar & prefix) const -> sys_string_t; - template - auto ends_with(const StringOrChar & suffix) const -> std::enable_if_t, bool>; - template + template StringOrChar> + auto ends_with(const StringOrChar & suffix) const -> bool; + + template auto find_suffix(InIt first, InIt last) const -> InIt; - template - auto remove_suffix(const StringOrChar & prefix) const -> std::enable_if_t, sys_string_t>; + template StringOrChar> + auto remove_suffix(const StringOrChar & prefix) const -> sys_string_t; - template - auto contains(const StringOrChar & inner) const -> std::enable_if_t, bool>; - template + template StringOrChar> + auto contains(const StringOrChar & inner) const -> bool; + + template auto find_contained(InIt first, InIt last) const -> InIt; - template + template StringOrChar1, sys_string_or_char StringOrChar2> auto replace(const StringOrChar1 & old, const StringOrChar2 & new_, - size_t max_count = std::numeric_limits::max()) const -> - std::enable_if_t && is_string_or_char, sys_string_t>; - - template - auto suffix_after_first(const StringOrChar & divider) const -> - std::enable_if_t, std::optional>; - template - auto prefix_before_first(const StringOrChar & divider) const -> - std::enable_if_t, std::optional>; - template - auto suffix_after_last(const StringOrChar & divider) const -> - std::enable_if_t, std::optional>; - template - auto prefix_before_last(const StringOrChar & divider) const -> - std::enable_if_t, std::optional>; - - template - auto partition_at_first(const StringOrChar & divider) const -> - std::enable_if_t, std::optional>>; - template - auto partition_at_last(const StringOrChar & divider) const -> - std::enable_if_t, std::optional>>; + size_t max_count = std::numeric_limits::max()) const -> sys_string_t; + + template StringOrChar> + auto suffix_after_first(const StringOrChar & divider) const -> std::optional; + template StringOrChar> + auto prefix_before_first(const StringOrChar & divider) const -> std::optional; + template StringOrChar> + auto suffix_after_last(const StringOrChar & divider) const -> std::optional; + template StringOrChar> + auto prefix_before_last(const StringOrChar & divider) const -> std::optional; + + template StringOrChar> + auto partition_at_first(const StringOrChar & divider) const -> std::optional>; + template StringOrChar> + auto partition_at_last(const StringOrChar & divider) const -> std::optional>; private: static auto compare(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> compare_result; diff --git a/lib/inc/sys_string/utf_view.h b/lib/inc/sys_string/utf_view.h index 56890bf..9416dd2 100644 --- a/lib/inc/sys_string/utf_view.h +++ b/lib/inc/sys_string/utf_view.h @@ -9,63 +9,101 @@ #define HEADER_SYS_STRING_UTF_VIEW_H_INCLUDED #include -#include +#include #include +#include +#include namespace sysstr { template struct utf_access_traits; + + template + concept utf_access_traits_t = requires(const Container & cont) + { + typename T::stored_reference; + + { T::enable_view } -> std::convertible_to; + { T::enable_borrowed_range } -> std::convertible_to; + { typename T::stored_reference(T::adapt(cont)) }; + { T::access(std::declval()) } -> std::ranges::bidirectional_range; + } && (T::enable_view || !T::enable_view) && (T::enable_borrowed_range || !T::enable_borrowed_range); - template> + template Traits = utf_access_traits> class utf_view; - + namespace util { - template + template EndIt> SYS_STRING_FORCE_INLINE - char32_t current_utf32(Cursor & cursor) + char32_t current_utf32(It & it, EndIt last) { - if constexpr (Cursor::is_forward) - return utf32_input>::read(cursor); + constexpr auto encoding = utf_encoding_of::value_type>; + if constexpr (Direction == iter_direction::forward) + return utf32_input::read(it, last); else - return utf32_input>::read_reversed(cursor); + return utf32_input::read_reversed(it, last); } - template - class utf_cursor + template EndIt, iter_direction Direction> + class utf_iterator { - static_assert(std::is_convertible_v, - "Underlying cursor must be random access to be wrappable in utf_cursor"); - - friend utf_cursor; + template EndX, iter_direction D> + friend class utf_iterator; public: - using size_type = typename Cursor::size_type; - using difference_type = typename Cursor::difference_type; + using difference_type = typename std::iterator_traits::difference_type; + using size_type = std::make_unsigned_t; using value_type = utf_char_of; using reference = const value_type; using pointer = void; using iterator_category = std::forward_iterator_tag; - using reverse_type = utf_cursor; - - static constexpr bool is_reverse = Cursor::is_reverse; - static constexpr bool is_forward = Cursor::is_forward; + static constexpr bool is_forward = (Direction == iter_direction::forward); + static constexpr bool is_reverse = !is_forward; public: - constexpr utf_cursor() noexcept(std::is_nothrow_constructible_v): - m_char_idx(0), - m_current_storage_size(0) - {} + constexpr utf_iterator() = default; SYS_STRING_FORCE_INLINE - constexpr utf_cursor(const Cursor & wrapped) noexcept(std::is_nothrow_copy_constructible_v): - m_next(wrapped) + constexpr utf_iterator(It first, EndIt last) noexcept(std::is_nothrow_move_constructible_v && + std::is_nothrow_move_constructible_v): + m_current(std::move(first)), + m_next(m_current), + m_last(std::move(last)) { this->load_next(); } - + + template OtherEndIt> + requires(Direction == iter_direction::forward && reverse_iterator_of) + utf_iterator(const utf_iterator & rev, + EndIt last): + m_current(rev.storage_next().base()), + m_next(rev.storage_current().base()), + m_last(std::move(last)), + m_encoder(rev.m_encoder), + m_char_idx(rev.m_char_idx) + { + if (m_current != m_last) + ++*this; + } + + template OtherEndIt> + requires(Direction == iter_direction::backward && reverse_iterator_of) + utf_iterator(const utf_iterator & fwd, + EndIt last): + m_current(fwd.storage_next()), + m_next(fwd.storage_current()), + m_last(std::move(last)), + m_encoder(fwd.m_encoder), + m_char_idx(fwd.m_char_idx) + { + if (m_current != m_last) + ++*this; + } + constexpr value_type operator*() const noexcept { return this->m_encoder.begin()[this->m_char_idx]; } @@ -73,7 +111,7 @@ namespace sysstr { return this->m_char_idx != this->m_encoder.size(); } SYS_STRING_FORCE_INLINE - constexpr utf_cursor & operator++() + constexpr utf_iterator & operator++() { if constexpr (is_forward) { @@ -89,257 +127,199 @@ namespace sysstr } } + this->m_current = this->m_next; this->load_next(); return *this; } - constexpr utf_cursor operator++(int) + constexpr utf_iterator operator++(int) { - utf_cursor ret = *this; + utf_iterator ret = *this; ++(*this); return ret; } - friend constexpr bool operator==(const utf_cursor & lhs, const utf_cursor & rhs) - { return lhs.m_current_storage_size == rhs.m_current_storage_size && lhs.m_char_idx == rhs.m_char_idx && lhs.m_next == rhs.m_next; } - friend constexpr bool operator!=(const utf_cursor & lhs, const utf_cursor & rhs) + friend constexpr bool operator==(const utf_iterator & lhs, const utf_iterator & rhs) + { return lhs.m_char_idx == rhs.m_char_idx && lhs.m_current == rhs.m_current; } + friend constexpr bool operator!=(const utf_iterator & lhs, const utf_iterator & rhs) { return !(lhs == rhs); } - friend constexpr bool operator==(const utf_cursor & lhs, std::nullptr_t) + friend constexpr bool operator==(const utf_iterator & lhs, std::default_sentinel_t) { return !lhs; } - friend constexpr bool operator==(std::nullptr_t, const utf_cursor & rhs) + friend constexpr bool operator==(std::default_sentinel_t, const utf_iterator & rhs) { return !rhs; } - friend constexpr bool operator!=(const utf_cursor & lhs, std::nullptr_t rhs) + friend constexpr bool operator!=(const utf_iterator & lhs, std::default_sentinel_t rhs) { return !(lhs == rhs); } - friend constexpr bool operator!=(std::nullptr_t lhs, const utf_cursor & rhs) + friend constexpr bool operator!=(std::default_sentinel_t lhs, const utf_iterator & rhs) { return !(lhs == rhs); } - reverse_type reverse() const - { - auto reverse_next = this->m_next.reverse(); - reverse_next += this->m_current_storage_size; - reverse_type ret(std::move(reverse_next), this->m_encoder, this->m_char_idx, this->m_current_storage_size); - ++ret; - return ret; - } - - utf_cursor char_start() const - { return this->storage_cursor(); } - size_type storage_pos() const - { - if constexpr (is_forward) - return this->m_next.position() - this->m_current_storage_size; - else - return this->m_next.position() + this->m_current_storage_size; - } - - size_type storage_size() const noexcept - { return this->m_current_storage_size; } - - const Cursor storage_cursor() const - { return this->m_next - this->m_current_storage_size; } + const It storage_current() const + { return this->m_current; } + const It storage_next() const + { return this->m_next; } + EndIt storage_last() const + { return this->m_last; } - friend auto operator<<(std::ostream & str, const utf_cursor & c) -> std::ostream & - { - str << c.storage_cursor() << ", char " << c.m_char_idx << " in {"; - for (uint8_t i = 0; i < c.m_encoder.size(); ++i) - { - if (i) - str << ','; - str << unsigned(c.m_encoder.begin()[i]); - } - str << "}"; - return str; - } private: - utf_cursor(Cursor && next, - const utf_codepoint_encoder & encoder, - uint8_t char_idx, - uint8_t storage_size) noexcept(std::is_nothrow_move_constructible_v): - m_next(std::move(next)), - m_encoder(encoder), - m_char_idx(char_idx), - m_current_storage_size(storage_size) - {} - SYS_STRING_FORCE_INLINE constexpr void load_next() { - if (this->m_next) + if (this->m_next != this->m_last) { - auto original_pos = this->m_next.position(); - auto c = current_utf32(this->m_next); + auto c = current_utf32(this->m_next, this->m_last); this->m_encoder.put(c); if constexpr (is_forward) { this->m_char_idx = 0; - this->m_current_storage_size = uint8_t(this->m_next.position() - original_pos); } else { this->m_char_idx = uint8_t(this->m_encoder.size() - 1); - this->m_current_storage_size = uint8_t(original_pos - this->m_next.position()); } } else { this->m_encoder.clear(); this->m_char_idx = 0; - this->m_current_storage_size = 0; } } private: - Cursor m_next; + It m_current{}; + It m_next{}; + [[no_unique_address]] EndIt m_last{}; utf_codepoint_encoder m_encoder; - uint8_t m_char_idx; - uint8_t m_current_storage_size; + uint8_t m_char_idx = 0; }; - template - class utf_cursor + template EndIt, iter_direction Direction> + class utf_iterator { - static_assert(std::is_convertible_v, - "Underlying cursor must be random access to be wrappable in utf_cursor"); public: - using size_type = typename Cursor::size_type; - using difference_type = typename Cursor::difference_type; + using difference_type = typename std::iterator_traits::difference_type; + using size_type = std::make_unsigned_t; using value_type = char32_t; using reference = const char32_t; using pointer = void; using iterator_category = std::forward_iterator_tag; - using reverse_type = utf_cursor; - - static constexpr bool is_reverse = Cursor::is_reverse; - static constexpr bool is_forward = Cursor::is_forward; + static constexpr bool is_forward = (Direction == iter_direction::forward); + static constexpr bool is_reverse = !is_forward; public: - constexpr utf_cursor() = default; + constexpr utf_iterator() = default; SYS_STRING_FORCE_INLINE - constexpr utf_cursor(const Cursor & wrapped) noexcept(std::is_nothrow_copy_constructible_v) : - m_current(wrapped) + constexpr utf_iterator(It first, EndIt last) noexcept(std::is_nothrow_move_constructible_v && + std::is_nothrow_move_constructible_v) : + m_current(std::move(first)), + m_next(m_current), + m_last(std::move(last)) { this->load_next(); } + + template OtherEndIt> + requires(Direction == iter_direction::forward && reverse_iterator_of) + utf_iterator(const utf_iterator & rev, + EndIt last): + utf_iterator(rev.storage_current().base(), last) + {} + + template OtherEndIt> + requires(Direction == iter_direction::backward && reverse_iterator_of) + utf_iterator(const utf_iterator & fwd, + EndIt last): + utf_iterator(It(fwd.storage_current()), last) + {} constexpr value_type operator*() const noexcept { return this->m_value; } - explicit constexpr operator bool() const - { return bool(this->m_current); } - SYS_STRING_FORCE_INLINE - constexpr utf_cursor & operator++() + constexpr utf_iterator & operator++() { - this->m_current += this->m_current_storage_size; - this->m_current_storage_size = 0; + this->m_current = this->m_next; this->load_next(); return *this; } SYS_STRING_FORCE_INLINE - constexpr utf_cursor operator++(int) + constexpr utf_iterator operator++(int) { - utf_cursor ret = *this; + utf_iterator ret = *this; ++(*this); return ret; } - friend constexpr bool operator==(const utf_cursor & lhs, const utf_cursor & rhs) + friend constexpr bool operator==(const utf_iterator & lhs, const utf_iterator & rhs) { return lhs.m_current == rhs.m_current; } - friend constexpr bool operator!=(const utf_cursor & lhs, const utf_cursor & rhs) - { return !(lhs == rhs); } - - friend constexpr bool operator==(const utf_cursor & lhs, std::nullptr_t) - { return !lhs; } - friend constexpr bool operator==(std::nullptr_t, const utf_cursor & rhs) - { return !rhs; } - friend constexpr bool operator!=(const utf_cursor & lhs, std::nullptr_t rhs) - { return !(lhs == rhs); } - friend constexpr bool operator!=(std::nullptr_t lhs, const utf_cursor & rhs) - { return !(lhs == rhs); } - - reverse_type reverse() const - { return this->m_current.reverse(); } + friend constexpr bool operator!=(const utf_iterator & lhs, const utf_iterator & rhs) + { return lhs.m_current != rhs.m_current; } - const utf_cursor & char_start() const noexcept - { return *this; } + friend constexpr bool operator==(const utf_iterator & lhs, std::default_sentinel_t) + { return lhs.m_current == lhs.m_last; } + friend constexpr bool operator==(std::default_sentinel_t, const utf_iterator & rhs) + { return rhs.m_current == rhs.m_last; } + friend constexpr bool operator!=(const utf_iterator & lhs, std::default_sentinel_t) + { return lhs.m_current != lhs.m_last; } + friend constexpr bool operator!=(std::default_sentinel_t, const utf_iterator & rhs) + { return rhs.m_current != rhs.m_last; } - size_type storage_pos() const - { return this->m_current.position(); } - - size_type storage_size() const noexcept - { return this->m_current_storage_size; } - - const Cursor storage_cursor() const + It storage_current() const { return this->m_current; } + It storage_next() const + { return this->m_next; } + EndIt storage_last() const + { return this->m_last; } - friend auto operator<<(std::ostream & str, const utf_cursor & c) -> std::ostream & - { - str << c.m_current << ", value " << uint32_t(c.m_value); - return str; - } private: SYS_STRING_FORCE_INLINE void load_next() { - if (Cursor next = this->m_current) - { - this->m_value = current_utf32(next); - if constexpr (is_forward) - this->m_current_storage_size = uint8_t(next.position() - this->m_current.position()); - else - this->m_current_storage_size = uint8_t(this->m_current.position() - next.position()); - } + if (this->m_next != this->m_last) + this->m_value = current_utf32(this->m_next, this->m_last); } private: - Cursor m_current; + It m_current{}; + It m_next{}; + [[no_unique_address]] EndIt m_last{}; value_type m_value = 0; - uint8_t m_current_storage_size = 0; }; } - - template - struct utf_access_traits + + template + struct utf_access_traits { - using char_access = std::add_lvalue_reference_t; + using stored_reference = std::add_pointer_t>; - static decltype(auto) adapt(std::add_lvalue_reference_t src) noexcept - { - return src; - } - }; - - template - struct utf_access_traits - { - using char_access = std::basic_string_view; + static constexpr bool enable_view = true; + static constexpr bool enable_borrowed_range = true; - static constexpr std::basic_string_view adapt(Char (& src) [N]) noexcept - { return src; } + static decltype(auto) adapt(std::add_lvalue_reference_t src) noexcept + { return &src; } + static std::add_lvalue_reference_t access(stored_reference ptr) noexcept + { return *ptr; } }; - template + + template Traits> class utf_view { private: - using char_access = typename Traits::char_access; + using stored_reference = typename Traits::stored_reference; - template - static auto detect_cursor_type(std::add_pointer_t access = nullptr) noexcept - { - using util::cursor_begin; - return cursor_begin(*access); - } - using access_cursor_type = decltype(detect_cursor_type()); - using access_reverse_cursor_type = decltype(detect_cursor_type()); + static constexpr auto source_encoding = utf_encoding_of()))>>; + + using access_iterator = decltype(std::begin(Traits::access(std::declval()))); + using access_sentinel = decltype(std::end(Traits::access(std::declval()))); + using access_reverse_iterator = decltype(std::rbegin(Traits::access(std::declval()))); + using access_reverse_sentinel = decltype(std::rend(Traits::access(std::declval()))); public: - using iterator = util::utf_cursor; + using iterator = util::utf_iterator; using const_iterator = iterator; - using reverse_iterator = util::utf_cursor; + using reverse_iterator = util::utf_iterator; using const_reverse_iterator = reverse_iterator; using value_type = typename iterator::value_type; @@ -348,60 +328,55 @@ namespace sysstr using pointer = typename iterator::pointer; using const_pointer = pointer; - using cursor_type = util::utf_cursor; - using reverse_cursor_type = util::utf_cursor; + using iter_direction = util::iter_direction; - using cursor_direction = util::cursor_direction; - - static constexpr auto forward = cursor_direction::forward; - static constexpr auto backward = cursor_direction::backward; + static constexpr auto forward = iter_direction::forward; + static constexpr auto backward = iter_direction::backward; public: - utf_view(const Container & src) noexcept(noexcept(char_access(Traits::adapt(src)))) : m_access(Traits::adapt(src)) + utf_view(const Container & src) noexcept(noexcept(stored_reference(Traits::adapt(src)))) : + m_ref(Traits::adapt(src)) {} SYS_STRING_FORCE_INLINE iterator begin() const - { return this->cursor_begin(); } - SYS_STRING_FORCE_INLINE iterator end() const - { return this->cursor_end(); } + { return iterator(std::begin(Traits::access(this->m_ref)), std::end(Traits::access(this->m_ref))); } + SYS_STRING_FORCE_INLINE std::default_sentinel_t end() const + { return std::default_sentinel; } SYS_STRING_FORCE_INLINE const_iterator cbegin() const { return begin(); } - SYS_STRING_FORCE_INLINE const_iterator cend() const + SYS_STRING_FORCE_INLINE std::default_sentinel_t cend() const { return end(); } SYS_STRING_FORCE_INLINE reverse_iterator rbegin() const - { return this->cursor_begin(); } - SYS_STRING_FORCE_INLINE reverse_iterator rend() const - { return this->cursor_end(); } + { return reverse_iterator(std::rbegin(Traits::access(this->m_ref)), std::rend(Traits::access(this->m_ref))); } + SYS_STRING_FORCE_INLINE std::default_sentinel_t rend() const + { return std::default_sentinel; } SYS_STRING_FORCE_INLINE const_reverse_iterator crbegin() const { return rbegin(); } - SYS_STRING_FORCE_INLINE const_reverse_iterator crend() const + SYS_STRING_FORCE_INLINE std::default_sentinel_t crend() const { return rend(); } - - template - SYS_STRING_FORCE_INLINE - decltype(auto) cursor_begin() const - { - using util::cursor_begin, util::utf_cursor; - return utf_cursor())>(cursor_begin(this->m_access)); - } - - template - SYS_STRING_FORCE_INLINE - decltype(auto) cursor_end() const - { - using util::cursor_end, util::utf_cursor; - return utf_cursor())>(cursor_end(this->m_access)); - } + + reverse_iterator reverse(iterator it) const + { return reverse_iterator(it, std::rend(Traits::access(this->m_ref))); } + + iterator reverse(reverse_iterator it) const + { return iterator(it, std::end(Traits::access(this->m_ref))); } template decltype(auto) each(Func func) const { - using util::cursor_begin; - constexpr auto source_encoding = utf_encoding_of; - return utf_converter::for_each_converted(cursor_begin(this->m_access), func); + return utf_converter::for_each_converted(Traits::access(this->m_ref), func); } private: - char_access m_access; + stored_reference m_ref; }; } +namespace std::ranges { + template Traits> + constexpr bool enable_view> = Traits::enable_view; + + template Traits> + constexpr bool enable_borrowed_range> = Traits::enable_borrowed_range; +} + + #endif diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 86c03cf..529758d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -22,12 +22,12 @@ if(${Python3_Development_FOUND}) endif() set (CXX_STANDARDS - 17 20 + 23 ) -set(CXX_STANDARD_17 17) set(CXX_STANDARD_20 20) +set(CXX_STANDARD_23 23) if (WIN32) diff --git a/test/test_builder.cpp b/test/test_builder.cpp index a5ce790..a0bf95b 100644 --- a/test/test_builder.cpp +++ b/test/test_builder.cpp @@ -12,6 +12,34 @@ using namespace sysstr; +static_assert(std::ranges::forward_range); +static_assert(!std::ranges::random_access_range); +static_assert(!std::ranges::common_range); +static_assert(!std::ranges::view); +static_assert(!std::ranges::borrowed_range); +static_assert(std::ranges::viewable_range); + +static_assert(std::ranges::forward_range); +static_assert(!std::ranges::bidirectional_range); +static_assert(!std::ranges::common_range); +static_assert(std::ranges::view); +static_assert(std::ranges::borrowed_range); +static_assert(std::ranges::viewable_range); + +static_assert(std::ranges::forward_range); +static_assert(!std::ranges::bidirectional_range); +static_assert(!std::ranges::common_range); +static_assert(std::ranges::view); +static_assert(std::ranges::borrowed_range); +static_assert(std::ranges::viewable_range); + +static_assert(std::ranges::forward_range); +static_assert(!std::ranges::bidirectional_range); +static_assert(!std::ranges::common_range); +static_assert(std::ranges::view); +static_assert(std::ranges::borrowed_range); +static_assert(std::ranges::viewable_range); + TEST_CASE( "Builder basics", "[builder]") { CHECK(sys_string_builder().build() == S("")); @@ -49,17 +77,25 @@ TEST_CASE( "Builder iteration", "[builder]") { CHECK(*builder.begin() == U'🪀'); CHECK(*builder.rbegin() == U'🀁'); - CHECK(std::distance(builder.begin(), builder.end()) == 7); - CHECK(std::distance(builder.rbegin(), builder.rend()) == 7); - - CHECK(builder.begin().reverse() == builder.rend()); - CHECK(builder.end().reverse() == builder.rbegin()); - CHECK(builder.rbegin().reverse() == builder.end()); - CHECK(builder.rend().reverse() == builder.begin()); + CHECK(std::ranges::distance(builder.begin(), builder.end()) == 7); + CHECK(std::ranges::distance(builder.rbegin(), builder.rend()) == 7); + + auto last = builder.begin(); + while(last != builder.end()) + ++last; + + auto rlast = builder.rbegin(); + while(rlast != builder.rend()) + ++rlast; + + CHECK(builder.reverse(builder.begin()) == rlast); + CHECK(builder.reverse(last) == builder.rbegin()); + CHECK(builder.reverse(builder.rbegin()) == last); + CHECK(builder.reverse(rlast) == builder.begin()); CHECK(builder.begin() == builder.cbegin()); - CHECK(builder.end() == builder.cend()); + //CHECK(builder.end() == builder.cend()); CHECK(builder.rbegin() == builder.crbegin()); - CHECK(builder.rend() == builder.crend()); + //CHECK(builder.rend() == builder.crend()); } @@ -122,7 +158,7 @@ TEST_CASE( "Builder erase", "[builder]") { CHECK(builder.build() == S("🩳�𐊃𐜃𐤈🀁")); builder.append(u"🪀🩳�𐊃𐜃𐤈🀁"); - it = builder.erase((++builder.rbegin()).reverse()); + it = builder.erase(builder.reverse(++builder.rbegin())); CHECK(it == builder.end()); CHECK(builder.build() == S("🪀🩳�𐊃𐜃𐤈")); diff --git a/test/test_general.cpp b/test/test_general.cpp index 9432188..6740402 100644 --- a/test/test_general.cpp +++ b/test/test_general.cpp @@ -22,21 +22,38 @@ static_assert(std::is_nothrow_destructible_v); static_assert(std::is_nothrow_swappable_v); static_assert(std::is_standard_layout_v); -#if SYS_STRING_USE_SPACESHIP_OPERATOR - template - bool is_eq(T val) - { return std::partial_ordering(val) == 0; } - template - bool is_lt(T val) - { return std::partial_ordering(val) != 0; } -#else - template - bool is_eq(T val) - { return val == 0; } - template - bool is_lt(T val) - { return val < 0; } -#endif +static_assert(std::ranges::random_access_range); +static_assert(!std::ranges::view); +static_assert(!std::ranges::borrowed_range); +static_assert(!std::ranges::viewable_range); + +static_assert(std::ranges::forward_range); +static_assert(!std::ranges::bidirectional_range); +static_assert(!std::ranges::common_range); +static_assert(!std::ranges::view); +static_assert(!std::ranges::borrowed_range); +static_assert(!std::ranges::viewable_range); + +static_assert(std::ranges::forward_range); +static_assert(!std::ranges::bidirectional_range); +static_assert(!std::ranges::common_range); +static_assert(!std::ranges::view); +static_assert(!std::ranges::borrowed_range); +static_assert(!std::ranges::viewable_range); + +static_assert(std::ranges::forward_range); +static_assert(!std::ranges::bidirectional_range); +static_assert(!std::ranges::common_range); +static_assert(!std::ranges::view); +static_assert(!std::ranges::borrowed_range); +static_assert(!std::ranges::viewable_range); + +template +bool is_eq(T val) + { return std::partial_ordering(val) == 0; } +template +bool is_lt(T val) + { return std::partial_ordering(val) != 0; } template const CharT * select([[maybe_unused]] const char * s8, [[maybe_unused]] const char16_t * s16, @@ -92,7 +109,7 @@ TEST_CASE( "Iteration", "[general]" ) { converted.clear(); sys_string::utf8_view view(str); - std::copy(view.rbegin(), view.rend(), std::back_inserter(converted)); + std::ranges::copy(view.rbegin(), view.rend(), std::back_inserter(converted)); CHECK(converted == std::string{expected.rbegin(), expected.rend()}); converted.clear(); @@ -114,7 +131,7 @@ TEST_CASE( "Iteration", "[general]" ) { converted.clear(); sys_string::utf16_view view(str); - std::copy(view.rbegin(), view.rend(), std::back_inserter(converted)); + std::ranges::copy(view.rbegin(), view.rend(), std::back_inserter(converted)); CHECK(converted == std::u16string{expected.rbegin(), expected.rend()}); converted.clear(); @@ -137,7 +154,7 @@ TEST_CASE( "Iteration", "[general]" ) { converted.clear(); sys_string::utf32_view view(str); - std::copy(view.rbegin(), view.rend(), std::back_inserter(converted)); + std::ranges::copy(view.rbegin(), view.rend(), std::back_inserter(converted)); CHECK(converted == std::u32string{expected.rbegin(), expected.rend()}); converted.clear(); @@ -163,7 +180,7 @@ TEST_CASE( "Iteration", "[general]" ) { converted.clear(); sys_string::char_access access(str); - std::copy(access.rbegin(), access.rend(), std::back_inserter(converted)); + std::ranges::copy(access.rbegin(), access.rend(), std::back_inserter(converted)); CHECK(converted == std::basic_string{expected.rbegin(), expected.rend()}); converted.clear(); @@ -316,13 +333,13 @@ TEST_CASE( "Split", "[general]" ) { CHECK(splitter(S("a"), S("")) == std::vector({S("a")})); CHECK(splitter(S("ab"), S("")) == std::vector({S("ab")})); - auto searcher = [] (sys_string::utf32_view::iterator str_start, sys_string::utf32_view::iterator str_end) noexcept { + auto searcher = [] (sys_string::utf32_view::iterator str_start, std::default_sentinel_t str_end) noexcept { constexpr char32_t seps[] = U"xyz"; - auto found_it = std::find_first_of(str_start, str_end, std::begin(seps), std::end(seps)); + auto found_it = std::ranges::find_first_of(str_start, str_end, std::begin(seps), std::end(seps)); if (found_it == str_end) - return std::pair(str_end, str_end); + return std::pair(found_it, found_it); auto found_end = found_it; ++found_end; return std::pair(found_it, found_end); diff --git a/test/test_utf_iteration.cpp b/test/test_utf_iteration.cpp index 2532dff..ae689ec 100644 --- a/test/test_utf_iteration.cpp +++ b/test/test_utf_iteration.cpp @@ -28,14 +28,12 @@ namespace return str; } -#if SYS_STRING_USE_CHAR8 std::string printable(const std::u8string_view & str) { return std::string((const char *)str.data(), str.size()); } -#endif std::string printable(const std::u16string_view & str) { @@ -52,96 +50,116 @@ namespace } } -template -std::basic_string reverse(const std::basic_string_view & str) +template +std::basic_string> reverse(const Cont & str) { - return std::basic_string(str.crbegin(), str.crend()); + return std::basic_string>(std::crbegin(str), std::crend(str)); } -template -std::basic_string reverse(const Char (&str)[N]) +template +void check_reversibility(const View & view, It first, EndIt last) { - return std::basic_string(std::reverse_iterator(str + N - 1), std::reverse_iterator(str)); + auto rlast = view.reverse(first); + for(auto it = first; it != last; ++it) { + std::basic_string forward_reversed; + std::copy(first, it, std::back_inserter(forward_reversed)); + forward_reversed = reverse(forward_reversed); + std::basic_string reversed; + std::copy(view.reverse(it), rlast, std::back_inserter(reversed)); + CHECK(forward_reversed == reversed); + } } -template -void check_view_iteration(const View & view, - const ExpectedCont & expected, - const ExpectedBackwardCont & expected_backward) -{ - std::basic_string dest; - std::copy(view.begin(), view.end(), std::back_inserter(dest)); - CHECK(dest == expected); - dest.clear(); - std::copy(view.cbegin(), view.cend(), std::back_inserter(dest)); - CHECK(dest == expected); - dest.clear(); - std::copy(view.rbegin(), view.rend(), std::back_inserter(dest)); - CHECK(dest == expected_backward); - dest.clear(); - std::copy(view.crbegin(), view.crend(), std::back_inserter(dest)); - CHECK(dest == expected_backward); - - - CHECK(view.begin().reverse() == view.rend()); - CHECK(view.rbegin().reverse() == view.end()); - CHECK(view.end().reverse() == view.rbegin()); - CHECK(view.rend().reverse() == view.begin()); - CHECK(view.cbegin().reverse() == view.crend()); - CHECK(view.crbegin().reverse() == view.cend()); - CHECK(view.cend().reverse() == view.crbegin()); - CHECK(view.crend().reverse() == view.cbegin()); -} -template +template +requires(utf_encoding_of> == SrcEnc && + utf_encoding_of> == DstEnc && + std::is_same_v, std::ranges::range_value_t>) void do_check_iteration(const SrcCont & src, const ExpectedCont & expected, - const ExpectedBackwardCont & expected_backward) + const ExpectedBackwardCont & expected_backward, + bool check_reverse) { - using src_char_t = std::remove_const_t>; - using expected_char_t = std::remove_const_t>; - using expected_backward_char_t = std::remove_const_t>; + INFO( "From: utf" << SrcEnc << " to: utf" << DstEnc << " src: `" << printable(src) << '`'); + + using view_type = utf_view; - static_assert(std::is_same_v); - static_assert(std::is_same_v>); + view_type view(src); - INFO( "From: " << SrcEnc << " to: " << DstEnc << " src: " << printable(src)); + std::basic_string expected_str(std::begin(expected), std::end(expected)); + std::basic_string expected_backward_str(std::begin(expected_backward), std::end(expected_backward)); + std::basic_string dest; + std::ranges::copy(view.begin(), view.end(), std::back_inserter(dest)); + CHECK(dest == expected_str); + dest.clear(); + std::ranges::copy(view.cbegin(), view.cend(), std::back_inserter(dest)); + CHECK(dest == expected_str); + dest.clear(); + std::ranges::copy(view.rbegin(), view.rend(), std::back_inserter(dest)); + CHECK(dest == expected_backward_str); + dest.clear(); + std::ranges::copy(view.crbegin(), view.crend(), std::back_inserter(dest)); + CHECK(dest == expected_backward_str); + + auto last = view.begin(); + while(last != view.end()) + ++last; + + auto clast = view.cbegin(); + while(clast != view.cend()) + ++clast; + + auto rlast = view.rbegin(); + while(rlast != view.rend()) + ++rlast; + + auto crlast = view.crbegin(); + while(crlast != view.crend()) + ++crlast; + + CHECK(view.reverse(view.begin()) == rlast); + CHECK(view.reverse(view.rbegin()) == last); + CHECK(view.reverse(last) == view.rbegin()); + CHECK(view.reverse(rlast) == view.begin()); - utf_view, const SrcCont> view(src); - check_view_iteration(view, expected, expected_backward); + CHECK(view.reverse(view.cbegin()) == crlast); + CHECK(view.reverse(view.crbegin()) == clast); + CHECK(view.reverse(clast) == view.crbegin()); + CHECK(view.reverse(crlast) == view.cbegin()); - std::basic_string_view storage_view(src); - auto sfirst = storage_view.begin(), slast = storage_view.end(); - auto it = view.begin(), last = view.end(); - for( ; ; ) + if (check_reverse) { - auto sit = sfirst + it.storage_pos(); - CHECK(sit == it.storage_pos() + sfirst); - CHECK(sit - it.storage_pos() == sfirst); - CHECK(sit - sfirst == (typename std::iterator_traits::difference_type)(it.storage_pos())); - CHECK(sit >= sfirst); - CHECK((sit == sfirst || sit > sfirst)); - CHECK(sit <= slast); - CHECK((sit == slast || sit < slast)); - if (it == last) - break; - ++it; + check_reversibility(view, view.begin(), view.end()); + check_reversibility(view, view.rbegin(), view.rend()); } } -template +template +requires(utf_encoding_of> == SrcEnc && + utf_encoding_of> == DstEnc) void check_iteration(const SrcCont & src, const ExpectedCont & expected) { - do_check_iteration(src, expected, reverse(expected)); + do_check_iteration(src, expected, reverse(expected), true); } -template +template +requires(utf_encoding_of> == SrcEnc && + utf_encoding_of> == DstEnc && + std::is_same_v, std::ranges::range_value_t>) void check_iteration(const SrcCont & src, const ExpectedCont & expected, const ExpectedBackwardCont & expected_backward) { - do_check_iteration(src, expected, reverse(expected_backward)); + do_check_iteration(src, expected, reverse(expected_backward), false); } @@ -153,9 +171,9 @@ TEST_CASE( "UTF8 Iteration on UTF8 sequence", "[utf_iteration]") { check_iteration("", ""); check_iteration("a", "a"); check_iteration(u8"¢", "¢"); //2-byte - check_iteration("ह"s, "ह"); //3-byte - check_iteration("𐍈"sv, "𐍈"); //4-byte - check_iteration("🤢"sv, "🤢"); //out of bmp in surrogate range + check_iteration("ह"s, "ह"sv); //3-byte + check_iteration("𐍈"sv, "𐍈"s); //4-byte + check_iteration("🤢"sv, "🤢"s); //out of bmp in surrogate range //1 Some correct UTF-8 text check_iteration("a水𐀀𝄞bcå®®", "a水𐀀𝄞bcå®®"); @@ -287,9 +305,9 @@ TEST_CASE( "UTF16 Iteration on UTF8 sequence", "[utf_iteration]") { check_iteration("", u""); check_iteration("a", u"a"); check_iteration(u8"¢", u"¢"); //2-byte - check_iteration("ह"s, u"ह"); //3-byte - check_iteration("𐍈"sv, u"𐍈"); //4-byte - check_iteration("🤢"sv, u"🤢"); //out of bmp in surrogate range + check_iteration("ह"s, u"ह"sv); //3-byte + check_iteration("𐍈"sv, u"𐍈"s); //4-byte + check_iteration("🤢"sv, u"🤢"s); //out of bmp in surrogate range //1 Some correct UTF-8 text check_iteration("a水𐀀𝄞bcå®®", u"a水𐀀𝄞bcå®®"); @@ -421,9 +439,9 @@ TEST_CASE( "UTF32 Iteration on UTF8 sequence", "[utf_iteration]") { check_iteration("", U""); check_iteration("a", U"a"); check_iteration(u8"¢", U"¢"); //2-byte - check_iteration("ह"s, U"ह"); //3-byte - check_iteration("𐍈"sv, U"𐍈"); //4-byte - check_iteration("🤢"sv, U"🤢"); //out of bmp in surrogate range + check_iteration("ह"s, U"ह"sv); //3-byte + check_iteration("𐍈"sv, U"𐍈"s); //4-byte + check_iteration("🤢"sv, U"🤢"s); //out of bmp in surrogate range //1 Some correct UTF-8 text check_iteration("a水𐀀𝄞bcå®®", U"a水𐀀𝄞bcå®®"); @@ -601,9 +619,9 @@ TEST_CASE( "UTF32 Iteration on UTF16 sequence", "[utf_iteration]") { TEST_CASE( "UTF8 Iteration on UTF32 sequence", "[utf_iteration]") { - check_iteration(U""s, ""); - check_iteration(U"a"s, "a"); - check_iteration(U"ab"s, "ab"); + check_iteration(U""s, ""sv); + check_iteration(U"a"s, "a"sv); + check_iteration(U"ab"s, "ab"sv); check_iteration(U"¢", "¢"); //2-byte check_iteration(U"ह", "ह"); //3-byte @@ -622,9 +640,9 @@ TEST_CASE( "UTF8 Iteration on UTF32 sequence", "[utf_iteration]") { TEST_CASE( "UTF16 Iteration on UTF32 sequence", "[utf_iteration]") { - check_iteration(U""s, u""); - check_iteration(U"a"s, u"a"); - check_iteration(U"ab"s, u"ab"); + check_iteration(U""s, u""sv); + check_iteration(U"a"s, u"a"sv); + check_iteration(U"ab"s, u"ab"sv); check_iteration(U"¢", u"¢"); //2-byte check_iteration(U"ह", u"ह"); //3-byte From 30de539f615ce31123ab9f10acc34101a8d73a71 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Mon, 11 Nov 2024 22:47:38 -0800 Subject: [PATCH 02/63] Fixing MSVC language version check --- lib/inc/sys_string/config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/inc/sys_string/config.h b/lib/inc/sys_string/config.h index 1daac10..6c6fa18 100644 --- a/lib/inc/sys_string/config.h +++ b/lib/inc/sys_string/config.h @@ -8,7 +8,7 @@ #ifndef HEADER_SYS_STRING_CONFIG_H_INCLUDED #define HEADER_SYS_STRING_CONFIG_H_INCLUDED -#if __cplusplus < 202002L || (defined(_MSVC_LANG) && _MSVC_LANG < 202002L) +#if __cplusplus < 202002L && _MSVC_LANG < 202002L #error This library requires C++20 or above #endif From bdd1a97eb6830343862c052b0581819aff0290d4 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Mon, 11 Nov 2024 22:47:59 -0800 Subject: [PATCH 03/63] Fixing Mac CI --- .github/workflows/test.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9120bf9..ce6b598 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,7 +26,7 @@ jobs: fail-fast: false matrix: include: - - os: macos-latest + - {os: macos-latest, version: 16.0 } - os: windows-latest - {os: ubuntu-latest, compiler: gcc, version: 11 } - {os: ubuntu-latest, compiler: gcc, version: 12 } @@ -64,6 +64,9 @@ jobs: echo "CXX=g++-${{ matrix.version }}" >> $GITHUB_ENV fi fi + if [[ '${{ matrix.os }}' == macos-* ]]; then + echo "DEVELOPER_DIR=/Applications/Xcode_-${{ matrix.version }}.app" >> $GITHUB_ENV + fi - name: Configure shell: bash From 69d81a476ecfe4c2c0dc6ca189a958c64cfe69d7 Mon Sep 17 00:00:00 2001 From: gershnik Date: Mon, 11 Nov 2024 23:07:17 -0800 Subject: [PATCH 04/63] MSVC compilation fixes --- lib/inc/sys_string/impl/misc.h | 742 +++++++++--------- .../sys_string/impl/unicode/utf_encoding.h | 6 +- 2 files changed, 373 insertions(+), 375 deletions(-) diff --git a/lib/inc/sys_string/impl/misc.h b/lib/inc/sys_string/impl/misc.h index 7541837..ee7dde6 100644 --- a/lib/inc/sys_string/impl/misc.h +++ b/lib/inc/sys_string/impl/misc.h @@ -11,77 +11,77 @@ #include -namespace sysstr::util +namespace sysstr { - template - class string_or_char32_char_access; + namespace util + { + template + class string_or_char32_char_access; - template - class string_or_char32_char_access> - { - public: - string_or_char32_char_access(const sys_string_t & str) noexcept: - m_access(str) - {} - auto begin() const noexcept - { return m_access.begin(); } - auto end() const noexcept - { return m_access.end(); } - auto rbegin() const noexcept - { return m_access.rbegin(); } - auto rend() const noexcept - { return m_access.rend(); } - auto size() const noexcept - { return m_access.size(); } + template + class string_or_char32_char_access> + { + public: + string_or_char32_char_access(const sys_string_t & str) noexcept: + m_access(str) + {} + auto begin() const noexcept + { return m_access.begin(); } + auto end() const noexcept + { return m_access.end(); } + auto rbegin() const noexcept + { return m_access.rbegin(); } + auto rend() const noexcept + { return m_access.rend(); } + auto size() const noexcept + { return m_access.size(); } - constexpr auto is_valid() const noexcept -> bool - { return true; } - private: - typename sys_string_t::char_access m_access; - }; - - template - class string_or_char32_char_access - { - public: - string_or_char32_char_access(char32_t c) noexcept: - m_valid(m_encoded.put(c)) - {} + constexpr auto is_valid() const noexcept -> bool + { return true; } + private: + typename sys_string_t::char_access m_access; + }; + + template + class string_or_char32_char_access + { + public: + string_or_char32_char_access(char32_t c) noexcept: + m_valid(m_encoded.put(c)) + {} - auto begin() const noexcept - { return m_encoded.begin(); } - auto end() const noexcept - { return m_encoded.end(); } - auto rbegin() const noexcept - { return std::reverse_iterator(m_encoded.end()); } - auto rend() const noexcept - { return std::reverse_iterator(m_encoded.begin()); } - auto size() const noexcept - { return typename sys_string_t::size_type(m_encoded.end() - m_encoded.begin()); } + auto begin() const noexcept + { return m_encoded.begin(); } + auto end() const noexcept + { return m_encoded.end(); } + auto rbegin() const noexcept + { return std::reverse_iterator(m_encoded.end()); } + auto rend() const noexcept + { return std::reverse_iterator(m_encoded.begin()); } + auto size() const noexcept + { return typename sys_string_t::size_type(m_encoded.end() - m_encoded.begin()); } - auto is_valid() const noexcept -> bool - { return m_valid; } - private: - utf_codepoint_encoder::storage_type>, true> m_encoded; - bool m_valid; - }; - - template - inline auto has_prefix(const CharAccess & access, const Cont & test) noexcept -> bool - { - if (!test.is_valid()) - return false; + auto is_valid() const noexcept -> bool + { return m_valid; } + private: + utf_codepoint_encoder::storage_type>, true> m_encoded; + bool m_valid; + }; + + template + inline auto has_prefix(const CharAccess & access, const Cont & test) noexcept -> bool + { + if (!test.is_valid()) + return false; - const auto test_size = test.size(); - if (test_size > access.size()) - return false; + const auto test_size = test.size(); + if (test_size > access.size()) + return false; - return std::ranges::equal(test.begin(), test.end(), access.begin(), access.begin() + test_size); + return std::ranges::equal(test.begin(), test.end(), access.begin(), access.begin() + test_size); + } } -} -namespace sysstr -{ template inline @@ -116,377 +116,375 @@ namespace sysstr #endif -} - - -template -inline -auto sysstr::sys_string_t::to_lower() const -> sys_string_t -{ - sys_string_t::utf32_view view(*this); - sys_string_builder_t builder; - tolower>()(view, std::back_inserter(builder.chars())); - return builder.build(); -} + template + inline + auto sys_string_t::to_lower() const -> sys_string_t + { + sys_string_t::utf32_view view(*this); + sys_string_builder_t builder; + tolower>()(view, std::back_inserter(builder.chars())); + return builder.build(); + } -template -inline -auto sysstr::sys_string_t::to_upper() const -> sys_string_t -{ - sys_string_t::utf32_view view(*this); - sys_string_builder_t builder; - toupper>()(view, std::back_inserter(builder.chars())); - return builder.build(); -} + template + inline + auto sys_string_t::to_upper() const -> sys_string_t + { + sys_string_t::utf32_view view(*this); + sys_string_builder_t builder; + toupper>()(view, std::back_inserter(builder.chars())); + return builder.build(); + } -template -template Pred> -auto sysstr::sys_string_t::trim(Pred pred) const -> sys_string_t -{ - sys_string_t::utf32_view view(*this); - auto trimmed_start = view.begin(); - for( ; ; ++trimmed_start) + template + template Pred> + auto sys_string_t::trim(Pred pred) const -> sys_string_t { - if (trimmed_start == view.end()) - return sys_string_t(); + sys_string_t::utf32_view view(*this); + auto trimmed_start = view.begin(); + for( ; ; ++trimmed_start) + { + if (trimmed_start == view.end()) + return sys_string_t(); - char32_t c = *trimmed_start; - if (!pred(c)) - break; - } + char32_t c = *trimmed_start; + if (!pred(c)) + break; + } - auto trimmed_end = view.rbegin(); - for( ; ; ++trimmed_end) - { - char32_t c = *trimmed_end; - if (!pred(c)) - break; - } + auto trimmed_end = view.rbegin(); + for( ; ; ++trimmed_end) + { + char32_t c = *trimmed_end; + if (!pred(c)) + break; + } - return sys_string_t(trimmed_start.storage_current(), trimmed_end.storage_current().base()); -} + return sys_string_t(trimmed_start.storage_current(), trimmed_end.storage_current().base()); + } -template -template Pred> -auto sysstr::sys_string_t::ltrim(Pred pred) const -> sys_string_t -{ - sys_string_t::utf32_view view(*this); - auto trimmed_start = view.begin(); - auto last = view.end(); - for( ; ; ++trimmed_start) + template + template Pred> + auto sys_string_t::ltrim(Pred pred) const -> sys_string_t { - if (trimmed_start == last) - return sys_string_t(); + sys_string_t::utf32_view view(*this); + auto trimmed_start = view.begin(); + auto last = view.end(); + for( ; ; ++trimmed_start) + { + if (trimmed_start == last) + return sys_string_t(); - char32_t c = *trimmed_start; - if (!pred(c)) - break; - } + char32_t c = *trimmed_start; + if (!pred(c)) + break; + } - return sys_string_t(trimmed_start.storage_current(), trimmed_start.storage_last()); -} + return sys_string_t(trimmed_start.storage_current(), trimmed_start.storage_last()); + } -template -template Pred> -inline -auto sysstr::sys_string_t::rtrim(Pred pred) const -> sys_string_t -{ - sys_string_t::utf32_view view(*this); - auto trimmed_end = view.rbegin(); - auto last = view.rend(); - for( ; ; ++trimmed_end) + template + template Pred> + inline + auto sys_string_t::rtrim(Pred pred) const -> sys_string_t { - if (trimmed_end == last) - return sys_string_t(); + sys_string_t::utf32_view view(*this); + auto trimmed_end = view.rbegin(); + auto last = view.rend(); + for( ; ; ++trimmed_end) + { + if (trimmed_end == last) + return sys_string_t(); - char32_t c = *trimmed_end; - if (!pred(c)) - break; - } + char32_t c = *trimmed_end; + if (!pred(c)) + break; + } - return sys_string_t(trimmed_end.storage_current(), trimmed_end.storage_last()); -} - -template -template> OutIt> -auto sysstr::sys_string_t::split(OutIt dest, Search search) const -> OutIt -requires(std::is_invocable_v) -{ - utf32_view view(*this); - return util::split>(view.begin(), view.end(), dest, search); -} + return sys_string_t(trimmed_end.storage_current(), trimmed_end.storage_last()); + } -template -template StringOrChar, std::output_iterator> OutIt> -auto sysstr::sys_string_t::split(OutIt dest, const StringOrChar & sep, size_t max_split) const -> OutIt -{ - util::string_or_char32_char_access sep_access(sep); - if (!sep_access.is_valid() || sep_access.size() == 0) + template + template> OutIt> + auto sys_string_t::split(OutIt dest, Search search) const -> OutIt + requires(std::is_invocable_v) { - *dest++ = *this; - return dest; + utf32_view view(*this); + return util::split>(view.begin(), view.end(), dest, search); } + + template + template StringOrChar, std::output_iterator> OutIt> + auto sys_string_t::split(OutIt dest, const StringOrChar & sep, size_t max_split) const -> OutIt + { + util::string_or_char32_char_access sep_access(sep); + if (!sep_access.is_valid() || sep_access.size() == 0) + { + *dest++ = *this; + return dest; + } - sys_string_t::char_access access(*this); + sys_string_t::char_access access(*this); - auto sep_begin = sep_access.begin(); - auto sep_end = sep_access.end(); + auto sep_begin = sep_access.begin(); + auto sep_end = sep_access.end(); - return util::split>(access.begin(), access.end(), dest, - [sep_begin, sep_end, max_split] (auto str_start, auto str_end) mutable noexcept { + return util::split>(access.begin(), access.end(), dest, + [sep_begin, sep_end, max_split] (auto str_start, auto str_end) mutable noexcept { - if (max_split == 0) - { - std::ranges::advance(str_start, str_end); - return std::pair(str_start, str_start); - } + if (max_split == 0) + { + std::ranges::advance(str_start, str_end); + return std::pair(str_start, str_start); + } - --max_split; + --max_split; - auto result = std::ranges::search(str_start, str_end, sep_begin, sep_end); - return std::pair(result.begin(), result.end()); - }); -} + auto result = std::ranges::search(str_start, str_end, sep_begin, sep_end); + return std::pair(result.begin(), result.end()); + }); + } -template -template -auto sysstr::sys_string_t::join(FwdIt first, FwdIt last) const -> sys_string_t -{ - sys_string_builder_t builder; - bool has_one = false; - for( ; first != last; ++first) + template + template + auto sys_string_t::join(FwdIt first, FwdIt last) const -> sys_string_t { - if (has_one) - builder.append(*this); - else - has_one = true; - builder.append(*first); + sys_string_builder_t builder; + bool has_one = false; + for( ; first != last; ++first) + { + if (has_one) + builder.append(*this); + else + has_one = true; + builder.append(*first); + } + return builder.build(); } - return builder.build(); -} -namespace sysstr::util -{ - template - inline auto has_suffix(const CharAccess & access, const Cont & test) noexcept -> bool + namespace util { - if (!test.is_valid()) - return false; + template + inline auto has_suffix(const CharAccess & access, const Cont & test) noexcept -> bool + { + if (!test.is_valid()) + return false; - const auto test_size = test.size(); - const auto access_size = access.size(); - if (test_size > access_size) - return false; + const auto test_size = test.size(); + const auto access_size = access.size(); + if (test_size > access_size) + return false; - return std::ranges::equal(test.begin(), test.end(), access.begin() + access_size - test_size, access.end()); - } + return std::ranges::equal(test.begin(), test.end(), access.begin() + access_size - test_size, access.end()); + } - template - inline auto has_infix(const CharAccess & access, const Cont & test) noexcept -> bool - { - if (!test.is_valid()) - return false; + template + inline auto has_infix(const CharAccess & access, const Cont & test) noexcept -> bool + { + if (!test.is_valid()) + return false; - const auto test_size = test.size(); - const auto access_size = access.size(); - if (test_size > access_size) - return false; - if (access_size == 0) - return true; + const auto test_size = test.size(); + const auto access_size = access.size(); + if (test_size > access_size) + return false; + if (access_size == 0) + return true; - return std::ranges::search(access, test).begin() != access.end(); + return std::ranges::search(access, test).begin() != access.end(); + } } -} -template -template StringOrChar> -auto sysstr::sys_string_t::starts_with(const StringOrChar & prefix) const -> bool -{ - return util::has_prefix(sys_string_t::char_access(*this), util::string_or_char32_char_access(prefix)); -} + template + template StringOrChar> + auto sys_string_t::starts_with(const StringOrChar & prefix) const -> bool + { + return util::has_prefix(sys_string_t::char_access(*this), util::string_or_char32_char_access(prefix)); + } -template -template -auto sysstr::sys_string_t::find_prefix(InIt first, InIt last) const -> InIt -{ - using item_type = typename std::iterator_traits::value_type; + template + template + auto sys_string_t::find_prefix(InIt first, InIt last) const -> InIt + { + using item_type = typename std::iterator_traits::value_type; - sys_string_t::char_access str_access(*this); - return std::find_if(first, last, [&str_access] (auto & item) { - return util::has_prefix(str_access, util::string_or_char32_char_access(item)); - }); -} + sys_string_t::char_access str_access(*this); + return std::find_if(first, last, [&str_access] (auto & item) { + return util::has_prefix(str_access, util::string_or_char32_char_access(item)); + }); + } -template -template StringOrChar> -auto sysstr::sys_string_t::remove_prefix(const StringOrChar & prefix) const -> sys_string_t -{ - sys_string_t::char_access access(*this); - util::string_or_char32_char_access prefix_access(prefix); - if (!has_prefix(access, prefix_access)) - return *this; - return sys_string_t(access.begin() + prefix_access.size(), access.end()); -} + template + template StringOrChar> + auto sys_string_t::remove_prefix(const StringOrChar & prefix) const -> sys_string_t + { + sys_string_t::char_access access(*this); + util::string_or_char32_char_access prefix_access(prefix); + if (!has_prefix(access, prefix_access)) + return *this; + return sys_string_t(access.begin() + prefix_access.size(), access.end()); + } -template -template StringOrChar> -auto sysstr::sys_string_t::ends_with(const StringOrChar & suffix) const -> bool -{ - return util::has_suffix(sys_string_t::char_access(*this), util::string_or_char32_char_access(suffix)); -} + template + template StringOrChar> + auto sys_string_t::ends_with(const StringOrChar & suffix) const -> bool + { + return util::has_suffix(sys_string_t::char_access(*this), util::string_or_char32_char_access(suffix)); + } -template -template StringOrChar> -auto sysstr::sys_string_t::remove_suffix(const StringOrChar & suffix) const -> sys_string_t -{ - sys_string_t::char_access access(*this); - util::string_or_char32_char_access suffix_access(suffix); - if (!has_suffix(access, suffix_access)) - return *this; - return sys_string_t(access.begin(), access.size() - suffix_access.size()); -} + template + template StringOrChar> + auto sys_string_t::remove_suffix(const StringOrChar & suffix) const -> sys_string_t + { + sys_string_t::char_access access(*this); + util::string_or_char32_char_access suffix_access(suffix); + if (!has_suffix(access, suffix_access)) + return *this; + return sys_string_t(access.begin(), access.size() - suffix_access.size()); + } -template -template -auto sysstr::sys_string_t::find_suffix(InIt first, InIt last) const -> InIt -{ - using item_type = typename std::iterator_traits::value_type; + template + template + auto sys_string_t::find_suffix(InIt first, InIt last) const -> InIt + { + using item_type = typename std::iterator_traits::value_type; - sys_string_t::char_access str_access(*this); - return std::find_if(first, last, [&str_access] (auto & item) { - return util::has_suffix(str_access, util::string_or_char32_char_access(item)); - }); -} + sys_string_t::char_access str_access(*this); + return std::find_if(first, last, [&str_access] (auto & item) { + return util::has_suffix(str_access, util::string_or_char32_char_access(item)); + }); + } -template -template StringOrChar> -auto sysstr::sys_string_t::contains(const StringOrChar & inner) const -> bool -{ - return util::has_infix(sys_string_t::char_access(*this), util::string_or_char32_char_access(inner)); -} + template + template StringOrChar> + auto sys_string_t::contains(const StringOrChar & inner) const -> bool + { + return util::has_infix(sys_string_t::char_access(*this), util::string_or_char32_char_access(inner)); + } -template -template -auto sysstr::sys_string_t::find_contained(InIt first, InIt last) const -> InIt -{ - using item_type = typename std::iterator_traits::value_type; + template + template + auto sys_string_t::find_contained(InIt first, InIt last) const -> InIt + { + using item_type = typename std::iterator_traits::value_type; - sys_string_t::char_access str_access(*this); - return std::find_if(first, last, [&str_access] (auto & item) { - return util::has_infix(str_access, util::string_or_char32_char_access(item)); - }); -} + sys_string_t::char_access str_access(*this); + return std::find_if(first, last, [&str_access] (auto & item) { + return util::has_infix(str_access, util::string_or_char32_char_access(item)); + }); + } -template -template StringOrChar1, sysstr::sys_string_or_char StringOrChar2> -auto sysstr::sys_string_t::replace(const StringOrChar1 & old, const StringOrChar2 & new_, size_t max_count) const -> sys_string_t -{ - if (max_count == 0) - return *this; + template + template StringOrChar1, sys_string_or_char StringOrChar2> + auto sys_string_t::replace(const StringOrChar1 & old, const StringOrChar2 & new_, size_t max_count) const -> sys_string_t + { + if (max_count == 0) + return *this; - util::string_or_char32_char_access old_access(old); - if (!old_access.is_valid() || old_access.size() == 0) - return *this; + util::string_or_char32_char_access old_access(old); + if (!old_access.is_valid() || old_access.size() == 0) + return *this; - sys_string_t::char_access str_access(*this); - auto first = str_access.begin(); - const auto last = str_access.end(); + sys_string_t::char_access str_access(*this); + auto first = str_access.begin(); + const auto last = str_access.end(); - sys_string_builder_t builder; + sys_string_builder_t builder; - for( ; ; ) - { - auto found_range = std::ranges::search(first, last, old_access.begin(), old_access.end()); - std::ranges::copy(first, found_range.begin(), std::back_inserter(builder.chars())); - if (found_range.begin() == last) - break; - builder.append(new_); - first = found_range.end(); - if (--max_count == 0) + for( ; ; ) { - std::ranges::copy(first, last, std::back_inserter(builder.chars())); - break; + auto found_range = std::ranges::search(first, last, old_access.begin(), old_access.end()); + std::ranges::copy(first, found_range.begin(), std::back_inserter(builder.chars())); + if (found_range.begin() == last) + break; + builder.append(new_); + first = found_range.end(); + if (--max_count == 0) + { + std::ranges::copy(first, last, std::back_inserter(builder.chars())); + break; + } } - } - return builder.build(); -} + return builder.build(); + } -template -template StringOrChar> -auto sysstr::sys_string_t::suffix_after_first(const StringOrChar & divider) const -> std::optional -{ - sys_string_t::char_access my_access(*this); - util::string_or_char32_char_access divider_access(divider); - auto found_range = std::ranges::search(my_access, divider_access); - if (found_range.begin() == my_access.end() && divider_access.size() != 0) - return std::nullopt; - return sys_string_t(found_range.end(), my_access.end()); -} + template + template StringOrChar> + auto sys_string_t::suffix_after_first(const StringOrChar & divider) const -> std::optional + { + sys_string_t::char_access my_access(*this); + util::string_or_char32_char_access divider_access(divider); + auto found_range = std::ranges::search(my_access, divider_access); + if (found_range.begin() == my_access.end() && divider_access.size() != 0) + return std::nullopt; + return sys_string_t(found_range.end(), my_access.end()); + } -template -template StringOrChar> -auto sysstr::sys_string_t::prefix_before_first(const StringOrChar & divider) const -> std::optional -{ - sys_string_t::char_access my_access(*this); - util::string_or_char32_char_access divider_access(divider); - auto found_range = std::ranges::search(my_access, divider_access); - if (found_range.begin() == my_access.end() && divider_access.size() != 0) - return std::nullopt; - return sys_string_t(my_access.begin(), found_range.begin()); -} + template + template StringOrChar> + auto sys_string_t::prefix_before_first(const StringOrChar & divider) const -> std::optional + { + sys_string_t::char_access my_access(*this); + util::string_or_char32_char_access divider_access(divider); + auto found_range = std::ranges::search(my_access, divider_access); + if (found_range.begin() == my_access.end() && divider_access.size() != 0) + return std::nullopt; + return sys_string_t(my_access.begin(), found_range.begin()); + } -template -template StringOrChar> -auto sysstr::sys_string_t::suffix_after_last(const StringOrChar & divider) const -> std::optional -{ - sys_string_t::char_access my_access(*this); - util::string_or_char32_char_access divider_access(divider); - auto found_range = std::ranges::search(my_access.rbegin(), my_access.rend(), divider_access.rbegin(), divider_access.rend()); - if (found_range.begin() == my_access.rend() && divider_access.size() != 0) - return std::nullopt; - return sys_string_t(found_range.begin().base(), my_access.end()); -} + template + template StringOrChar> + auto sys_string_t::suffix_after_last(const StringOrChar & divider) const -> std::optional + { + sys_string_t::char_access my_access(*this); + util::string_or_char32_char_access divider_access(divider); + auto found_range = std::ranges::search(my_access.rbegin(), my_access.rend(), divider_access.rbegin(), divider_access.rend()); + if (found_range.begin() == my_access.rend() && divider_access.size() != 0) + return std::nullopt; + return sys_string_t(found_range.begin().base(), my_access.end()); + } -template -template StringOrChar> -auto sysstr::sys_string_t::prefix_before_last(const StringOrChar & divider) const -> std::optional -{ - sys_string_t::char_access my_access(*this); - util::string_or_char32_char_access divider_access(divider); - auto found_range = std::ranges::search(my_access.rbegin(), my_access.rend(), divider_access.rbegin(), divider_access.rend()); - if (found_range.begin() == my_access.rend() && divider_access.size() != 0) - return std::nullopt; - return sys_string_t(my_access.begin(), found_range.end().base()); -} + template + template StringOrChar> + auto sys_string_t::prefix_before_last(const StringOrChar & divider) const -> std::optional + { + sys_string_t::char_access my_access(*this); + util::string_or_char32_char_access divider_access(divider); + auto found_range = std::ranges::search(my_access.rbegin(), my_access.rend(), divider_access.rbegin(), divider_access.rend()); + if (found_range.begin() == my_access.rend() && divider_access.size() != 0) + return std::nullopt; + return sys_string_t(my_access.begin(), found_range.end().base()); + } -template -template StringOrChar> -auto sysstr::sys_string_t::partition_at_first(const StringOrChar & divider) const -> - std::optional> -{ - sys_string_t::char_access my_access(*this); - util::string_or_char32_char_access divider_access(divider); - auto found_range = std::ranges::search(my_access, divider_access); - if (found_range.begin() == my_access.end() && divider_access.size() != 0) - return std::nullopt; - return std::pair(sys_string_t(my_access.begin(), found_range.begin()), sys_string_t(found_range.end(), my_access.end())); -} + template + template StringOrChar> + auto sys_string_t::partition_at_first(const StringOrChar & divider) const -> + std::optional> + { + sys_string_t::char_access my_access(*this); + util::string_or_char32_char_access divider_access(divider); + auto found_range = std::ranges::search(my_access, divider_access); + if (found_range.begin() == my_access.end() && divider_access.size() != 0) + return std::nullopt; + return std::pair(sys_string_t(my_access.begin(), found_range.begin()), sys_string_t(found_range.end(), my_access.end())); + } -template -template StringOrChar> -auto sysstr::sys_string_t::partition_at_last(const StringOrChar & divider) const -> - std::optional> -{ - sys_string_t::char_access my_access(*this); - util::string_or_char32_char_access divider_access(divider); - auto found_range = std::ranges::search(my_access.rbegin(), my_access.rend(), divider_access.rbegin(), divider_access.rend()); - if (found_range.begin() == my_access.rend() && divider_access.size() != 0) - return std::nullopt; - return std::pair(sys_string_t(my_access.begin(), found_range.end().base()), - sys_string_t(found_range.begin().base(), my_access.end())); + template + template StringOrChar> + auto sys_string_t::partition_at_last(const StringOrChar & divider) const -> + std::optional> + { + sys_string_t::char_access my_access(*this); + util::string_or_char32_char_access divider_access(divider); + auto found_range = std::ranges::search(my_access.rbegin(), my_access.rend(), divider_access.rbegin(), divider_access.rend()); + if (found_range.begin() == my_access.rend() && divider_access.size() != 0) + return std::nullopt; + return std::pair(sys_string_t(my_access.begin(), found_range.end().base()), + sys_string_t(found_range.begin().base(), my_access.end())); + } } diff --git a/lib/inc/sys_string/impl/unicode/utf_encoding.h b/lib/inc/sys_string/impl/unicode/utf_encoding.h index ed48385..4ccb083 100644 --- a/lib/inc/sys_string/impl/unicode/utf_encoding.h +++ b/lib/inc/sys_string/impl/unicode/utf_encoding.h @@ -64,11 +64,11 @@ namespace sysstr template<> struct utf_encoding_value { static constexpr utf_encoding value = utf16; }; #endif - template constexpr utf_encoding utf_encoding_of = utf_encoding_value>::value; - template concept has_utf_encoding = requires { - utf_encoding_of; + utf_encoding_value>::value; }; + + template constexpr utf_encoding utf_encoding_of = utf_encoding_value>::value; template struct utf_encoding_max_length; From 2a5e24dd5697e4f63542366f1033ba6f0be88caf Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Mon, 11 Nov 2024 23:25:07 -0800 Subject: [PATCH 05/63] More CI fixes --- .github/workflows/test.yml | 4 ++-- test/test_general.cpp | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ce6b598..f3c1333 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,7 +26,7 @@ jobs: fail-fast: false matrix: include: - - {os: macos-latest, version: 16.0 } + - {os: macos-latest, version: 16 } - os: windows-latest - {os: ubuntu-latest, compiler: gcc, version: 11 } - {os: ubuntu-latest, compiler: gcc, version: 12 } @@ -65,7 +65,7 @@ jobs: fi fi if [[ '${{ matrix.os }}' == macos-* ]]; then - echo "DEVELOPER_DIR=/Applications/Xcode_-${{ matrix.version }}.app" >> $GITHUB_ENV + echo "DEVELOPER_DIR=/Applications/Xcode_${{ matrix.version }}.app" >> $GITHUB_ENV fi - name: Configure diff --git a/test/test_general.cpp b/test/test_general.cpp index 6740402..199305c 100644 --- a/test/test_general.cpp +++ b/test/test_general.cpp @@ -25,28 +25,24 @@ static_assert(std::is_standard_layout_v); static_assert(std::ranges::random_access_range); static_assert(!std::ranges::view); static_assert(!std::ranges::borrowed_range); -static_assert(!std::ranges::viewable_range); static_assert(std::ranges::forward_range); static_assert(!std::ranges::bidirectional_range); static_assert(!std::ranges::common_range); static_assert(!std::ranges::view); static_assert(!std::ranges::borrowed_range); -static_assert(!std::ranges::viewable_range); static_assert(std::ranges::forward_range); static_assert(!std::ranges::bidirectional_range); static_assert(!std::ranges::common_range); static_assert(!std::ranges::view); static_assert(!std::ranges::borrowed_range); -static_assert(!std::ranges::viewable_range); static_assert(std::ranges::forward_range); static_assert(!std::ranges::bidirectional_range); static_assert(!std::ranges::common_range); static_assert(!std::ranges::view); static_assert(!std::ranges::borrowed_range); -static_assert(!std::ranges::viewable_range); template bool is_eq(T val) From 1582bad6ff5e2cac444f166cf8c43f241954e4d4 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Tue, 12 Nov 2024 00:37:07 -0800 Subject: [PATCH 06/63] Making older compilers happy --- lib/inc/sys_string/impl/misc.h | 8 +- lib/inc/sys_string/impl/unicode/utf_util.h | 236 +++++++++------------ lib/inc/sys_string/impl/util/iter_util.h | 19 -- lib/inc/sys_string/sys_string.h | 10 +- 4 files changed, 114 insertions(+), 159 deletions(-) diff --git a/lib/inc/sys_string/impl/misc.h b/lib/inc/sys_string/impl/misc.h index ee7dde6..83794c1 100644 --- a/lib/inc/sys_string/impl/misc.h +++ b/lib/inc/sys_string/impl/misc.h @@ -207,17 +207,19 @@ namespace sysstr } template - template> OutIt> + template auto sys_string_t::split(OutIt dest, Search search) const -> OutIt - requires(std::is_invocable_v) + requires(std::output_iterator && + std::is_invocable_v) { utf32_view view(*this); return util::split>(view.begin(), view.end(), dest, search); } template - template StringOrChar, std::output_iterator> OutIt> + template StringOrChar, class OutIt> auto sys_string_t::split(OutIt dest, const StringOrChar & sep, size_t max_split) const -> OutIt + requires(std::output_iterator) { util::string_or_char32_char_access sep_access(sep); if (!sep_access.is_valid() || sep_access.size() == 0) diff --git a/lib/inc/sys_string/impl/unicode/utf_util.h b/lib/inc/sys_string/impl/unicode/utf_util.h index fe2a7f9..e841555 100644 --- a/lib/inc/sys_string/impl/unicode/utf_util.h +++ b/lib/inc/sys_string/impl/unicode/utf_util.h @@ -121,10 +121,17 @@ namespace sysstr SYS_STRING_FORCE_INLINE constexpr void operator()(char32_t value) noexcept(noexcept(sink(utf_char_of()))) { - utf_codepoint_encoder encoder; - encoder.put(value); - for(auto first = encoder.begin(), last = encoder.end(); first != last; ++first) - sink(*first); + if constexpr (To != utf32) + { + utf_codepoint_encoder encoder; + encoder.put(value); + for(auto first = encoder.begin(), last = encoder.end(); first != last; ++first) + sink(*first); + } + else + { + sink(value); + } } }; //Moronic GCC refuses to accept deduction guide not on namespace level @@ -135,28 +142,6 @@ namespace sysstr { return writer(sink); } }; - template<> - struct utf32_output - { - template - struct writer - { - Sink sink; - - writer(Sink s) : sink(s) {} - - constexpr void operator()(char32_t value) noexcept(noexcept(sink(value))) - { - sink(value); - } - }; - //Moronic GCC refuses to accept deduction guide not on namespace level - //https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79501 - //template writer(Sink sink) -> writer; - template static auto make_writer(Sink sink) -> writer - { return writer(sink); } - }; - template template SYS_STRING_FORCE_INLINE @@ -167,141 +152,126 @@ namespace sysstr } - //MARK:- UTF-16 - - template<> + template template EndIt> SYS_STRING_FORCE_INLINE - char32_t utf32_input::read(It & first, EndIt last) noexcept(noexcept(reading(first,last))) + char32_t utf32_input::read(It & first, EndIt last) noexcept(noexcept(reading(first,last))) { - utf_codepoint_decoder decoder; + if constexpr (From == utf8) + { + uint8_t byte = uint8_t(*first); + ++first; + if (byte <= 0x7f) + return char32_t{byte}; - decoder.put(uint16_t(*first)); - ++first; - if (decoder.done()) - return char32_t{decoder.value()}; + utf_codepoint_decoder decoder; + decoder.put(byte); + if (decoder.error() || first == last) + return char32_t{U'\uFFFD'}; - if (decoder.error() || first == last) - return char32_t{U'\uFFFD'}; + for ( ; ; ) + { + byte = uint8_t(*first); + decoder.put(byte); + if (decoder.error()) + return char32_t{U'\uFFFD'}; + ++first; + if (decoder.done()) + return char32_t{decoder.value()}; + if (first == last) + return char32_t{U'\uFFFD'}; + } + } + else if constexpr (From == utf16) + { + utf_codepoint_decoder decoder; - decoder.put(uint16_t(*first)); - if (!decoder.done()) - return char32_t{U'\uFFFD'}; - ++first; + decoder.put(uint16_t(*first)); + ++first; + if (decoder.done()) + return char32_t{decoder.value()}; - return char32_t{decoder.value()}; - } + if (decoder.error() || first == last) + return char32_t{U'\uFFFD'}; - template<> - template EndIt> - SYS_STRING_FORCE_INLINE - char32_t utf32_input::read_reversed(It & first, EndIt last) noexcept(noexcept(reading(first, last))) - { - utf_reverse_codepoint_decoder decoder; + decoder.put(uint16_t(*first)); + if (!decoder.done()) + return char32_t{U'\uFFFD'}; + ++first; - decoder.put(uint16_t(*first)); - ++first; - if (decoder.done()) return char32_t{decoder.value()}; + } + else if constexpr (From == utf32) + { + utf_codepoint_decoder decoder; + bool res = decoder.put(uint32_t(*first)); + ++first; + return res ? char32_t{decoder.value()} : U'\uFFFD'; + } - if (decoder.error() || first == last) - return char32_t{U'\uFFFD'}; - - decoder.put(uint16_t(*first)); - if (!decoder.done()) - return char32_t{U'\uFFFD'}; - ++first; - return char32_t{decoder.value()}; } - //MARK:- UTF-8 - - template<> + template template EndIt> SYS_STRING_FORCE_INLINE - char32_t utf32_input::read(It & first, EndIt last) noexcept(noexcept(reading(first, last))) + char32_t utf32_input::read_reversed(It & first, EndIt last) noexcept(noexcept(reading(first, last))) { - uint8_t byte = uint8_t(*first); - ++first; - if (byte <= 0x7f) - return char32_t{byte}; - - utf_codepoint_decoder decoder; - decoder.put(byte); - if (decoder.error() || first == last) - return char32_t{U'\uFFFD'}; - - for ( ; ; ) + if constexpr (From == utf8) { - byte = uint8_t(*first); - decoder.put(byte); - if (decoder.error()) - return char32_t{U'\uFFFD'}; + uint8_t byte = uint8_t(*first); ++first; - if (decoder.done()) - return char32_t{decoder.value()}; - if (first == last) + if (byte <= 0x7f) + return char32_t{byte}; + + utf_reverse_codepoint_decoder decoder; + decoder.put(byte); + if (decoder.error() || first == last) return char32_t{U'\uFFFD'}; - } - } - - template<> - template EndIt> - SYS_STRING_FORCE_INLINE - char32_t utf32_input::read_reversed(It & first, EndIt last) noexcept(noexcept(reading(first, last))) - { - uint8_t byte = uint8_t(*first); - ++first; - if (byte <= 0x7f) - return char32_t{byte}; - - utf_reverse_codepoint_decoder decoder; - decoder.put(byte); - if (decoder.error() || first == last) - return char32_t{U'\uFFFD'}; - It rewind_point = first; - for ( ; ; ) + It rewind_point = first; + for ( ; ; ) + { + byte = uint8_t(*first); + ++first; + decoder.put(byte); + + if (decoder.done()) + return char32_t{decoder.value()}; + + if (decoder.error()) + { + first = std::move(rewind_point); + return char32_t{U'\uFFFD'}; + } + + if (first == last) + return char32_t{u'\uFFFD'}; + } + } + else if constexpr (From == utf16) { - byte = uint8_t(*first); - ++first; - decoder.put(byte); + utf_reverse_codepoint_decoder decoder; + decoder.put(uint16_t(*first)); + ++first; if (decoder.done()) return char32_t{decoder.value()}; - - if (decoder.error()) - { - first = std::move(rewind_point); - return char32_t{U'\uFFFD'}; - } - - if (first == last) - return char32_t{u'\uFFFD'}; - } - } - //MARK:- UTF-32 + if (decoder.error() || first == last) + return char32_t{U'\uFFFD'}; - - template<> - template EndIt> - SYS_STRING_FORCE_INLINE - char32_t utf32_input::read(It & first, EndIt last) noexcept(noexcept(reading(first, last))) - { - utf_codepoint_decoder decoder; - bool res = decoder.put(uint32_t(*first)); - ++first; - return res ? char32_t{decoder.value()} : U'\uFFFD'; - } + decoder.put(uint16_t(*first)); + if (!decoder.done()) + return char32_t{U'\uFFFD'}; + ++first; - template<> - template EndIt> - SYS_STRING_FORCE_INLINE - char32_t utf32_input::read_reversed(It & first, EndIt last) noexcept(noexcept(reading(first, last))) - { - return utf32_input::read(first, last); + return char32_t{decoder.value()}; + } + else if constexpr (From == utf32) + { + return utf32_input::read(first, last); + } } } diff --git a/lib/inc/sys_string/impl/util/iter_util.h b/lib/inc/sys_string/impl/util/iter_util.h index 20b2848..12143bd 100644 --- a/lib/inc/sys_string/impl/util/iter_util.h +++ b/lib/inc/sys_string/impl/util/iter_util.h @@ -23,25 +23,6 @@ namespace sysstr::util { return iter_direction(!bool(dir)); } -// template -// class fixed_insert_iterator : private std::insert_iterator -// { -// private: -// using super = std::insert_iterator; -// public: -// using typename super::difference_type; -// -// using super::insert_iterator; -// using super::iter; -// using super::operator*; -// -// constexpr fixed_insert_iterator & operator++() -// { return static_cast(super::operator++()); } -// -// constexpr fixed_insert_iterator & operator++( int ) -// { return static_cast(super::operator++(int{})); } -// }; - template concept reverse_iterator_of = std::input_iterator && diff --git a/lib/inc/sys_string/sys_string.h b/lib/inc/sys_string/sys_string.h index 4d0fb35..e44379b 100644 --- a/lib/inc/sys_string/sys_string.h +++ b/lib/inc/sys_string/sys_string.h @@ -217,12 +217,14 @@ namespace sysstr template Pred = isspace> auto rtrim(Pred pred = Pred()) const -> sys_string_t; - template> OutIt> + template auto split(OutIt dest, Search search) const -> OutIt - requires(std::is_invocable_v); + requires(std::output_iterator && + std::is_invocable_v); - template StringOrChar, std::output_iterator> OutIt> - auto split(OutIt dest, const StringOrChar & sep, size_t max_split = std::numeric_limits::max()) const -> OutIt; + template StringOrChar, class OutIt> + auto split(OutIt dest, const StringOrChar & sep, size_t max_split = std::numeric_limits::max()) const -> OutIt + requires(std::output_iterator); template auto join(FwdIt first, FwdIt last) const -> sys_string_t; From e1a72817eb12bf6c99a02a90757567f9f85c27df Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Tue, 12 Nov 2024 08:54:08 -0800 Subject: [PATCH 07/63] Final compiler matrix --- .github/workflows/test.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f3c1333..b05e042 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -27,14 +27,14 @@ jobs: matrix: include: - {os: macos-latest, version: 16 } + - {os: macos-latest, version: "15.4" } + - os: windows-latest - - {os: ubuntu-latest, compiler: gcc, version: 11 } + - {os: ubuntu-latest, compiler: gcc, version: 12 } - {os: ubuntu-latest, compiler: gcc, version: 13 } - {os: ubuntu-24.04, compiler: gcc, version: 14 } - - {os: ubuntu-latest, compiler: clang, version: 13 } - - {os: ubuntu-latest, compiler: clang, version: 14 } - - {os: ubuntu-latest, compiler: clang, version: 15 } + - {os: ubuntu-latest, compiler: clang, version: 16 } - {os: ubuntu-latest, compiler: clang, version: 17 } - {os: ubuntu-latest, compiler: clang, version: 18 } From 08c4c04babca18fe6f9d82778412c1b8840004ea Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Tue, 12 Nov 2024 10:15:14 -0800 Subject: [PATCH 08/63] Limiting potential allocation sizes --- lib/inc/sys_string/impl/platforms/emscripten_javascript.h | 2 +- lib/inc/sys_string/impl/platforms/unix_generic.h | 2 +- lib/inc/sys_string/impl/platforms/windows_generic.h | 2 +- lib/inc/sys_string/impl/util/generic_buffer.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/inc/sys_string/impl/platforms/emscripten_javascript.h b/lib/inc/sys_string/impl/platforms/emscripten_javascript.h index 9a3d3fc..5a7320f 100644 --- a/lib/inc/sys_string/impl/platforms/emscripten_javascript.h +++ b/lib/inc/sys_string/impl/platforms/emscripten_javascript.h @@ -20,7 +20,7 @@ namespace sysstr::util using size_type = size_t; using hash_type = unsigned; - static constexpr size_type max_size = std::numeric_limits::max() / sizeof(char16_t); + static constexpr size_type max_size = std::numeric_limits::max() / sizeof(char16_t); }; template diff --git a/lib/inc/sys_string/impl/platforms/unix_generic.h b/lib/inc/sys_string/impl/platforms/unix_generic.h index ac6f480..60f6e61 100644 --- a/lib/inc/sys_string/impl/platforms/unix_generic.h +++ b/lib/inc/sys_string/impl/platforms/unix_generic.h @@ -23,7 +23,7 @@ namespace sysstr::util using size_type = size_t; using hash_type = unsigned; - static constexpr size_type max_size = std::numeric_limits::max() / sizeof(char); + static constexpr size_type max_size = std::numeric_limits::max() / sizeof(char); }; template diff --git a/lib/inc/sys_string/impl/platforms/windows_generic.h b/lib/inc/sys_string/impl/platforms/windows_generic.h index ee8a9aa..1bd5979 100644 --- a/lib/inc/sys_string/impl/platforms/windows_generic.h +++ b/lib/inc/sys_string/impl/platforms/windows_generic.h @@ -21,7 +21,7 @@ namespace sysstr::util using size_type = size_t; using hash_type = unsigned; - static constexpr size_type max_size = std::numeric_limits::max() / sizeof(char16_t); + static constexpr size_type max_size = std::numeric_limits::max() / sizeof(char16_t); }; template diff --git a/lib/inc/sys_string/impl/util/generic_buffer.h b/lib/inc/sys_string/impl/util/generic_buffer.h index a45590c..c9902d9 100644 --- a/lib/inc/sys_string/impl/util/generic_buffer.h +++ b/lib/inc/sys_string/impl/util/generic_buffer.h @@ -107,7 +107,7 @@ namespace sysstr::util::generic static constexpr uintptr_t dynamic_flag = 0b01; using dynamic_type = dynamic_buffer; public: - static constexpr SizeT max_size = SizeT(std::numeric_limits::max() - sizeof(dynamic_type)) / sizeof(CharT); + static constexpr SizeT max_size = SizeT(std::numeric_limits>::max() - sizeof(dynamic_type)) / sizeof(CharT); public: buffer() noexcept { From 377ca6aee00c96c2d9a7698353ebd22ee301fe8b Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Tue, 12 Nov 2024 10:37:26 -0800 Subject: [PATCH 09/63] Avoiding non-portable ssize_t --- lib/inc/sys_string/impl/platforms/emscripten_javascript.h | 2 +- lib/inc/sys_string/impl/platforms/unix_generic.h | 2 +- lib/inc/sys_string/impl/platforms/windows_generic.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/inc/sys_string/impl/platforms/emscripten_javascript.h b/lib/inc/sys_string/impl/platforms/emscripten_javascript.h index 5a7320f..a9d369b 100644 --- a/lib/inc/sys_string/impl/platforms/emscripten_javascript.h +++ b/lib/inc/sys_string/impl/platforms/emscripten_javascript.h @@ -20,7 +20,7 @@ namespace sysstr::util using size_type = size_t; using hash_type = unsigned; - static constexpr size_type max_size = std::numeric_limits::max() / sizeof(char16_t); + static constexpr size_type max_size = std::numeric_limits::max() / sizeof(char16_t); }; template diff --git a/lib/inc/sys_string/impl/platforms/unix_generic.h b/lib/inc/sys_string/impl/platforms/unix_generic.h index 60f6e61..04e3ea4 100644 --- a/lib/inc/sys_string/impl/platforms/unix_generic.h +++ b/lib/inc/sys_string/impl/platforms/unix_generic.h @@ -23,7 +23,7 @@ namespace sysstr::util using size_type = size_t; using hash_type = unsigned; - static constexpr size_type max_size = std::numeric_limits::max() / sizeof(char); + static constexpr size_type max_size = std::numeric_limits::max() / sizeof(char); }; template diff --git a/lib/inc/sys_string/impl/platforms/windows_generic.h b/lib/inc/sys_string/impl/platforms/windows_generic.h index 1bd5979..4294c28 100644 --- a/lib/inc/sys_string/impl/platforms/windows_generic.h +++ b/lib/inc/sys_string/impl/platforms/windows_generic.h @@ -21,7 +21,7 @@ namespace sysstr::util using size_type = size_t; using hash_type = unsigned; - static constexpr size_type max_size = std::numeric_limits::max() / sizeof(char16_t); + static constexpr size_type max_size = std::numeric_limits::max() / sizeof(char16_t); }; template From 7a83714a6cf8b500d6420796e81aa0d5604cc467 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Tue, 12 Nov 2024 10:37:43 -0800 Subject: [PATCH 10/63] Adjusting to new Github Xcode policy --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b05e042..3309daf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,8 +26,8 @@ jobs: fail-fast: false matrix: include: - - {os: macos-latest, version: 16 } - - {os: macos-latest, version: "15.4" } + - {os: macos-15, version: 16 } + - {os: macos-14, version: "15.4" } - os: windows-latest From 3d87b196b96b45a88e2f6fa0aff4e265ffc8a6ff Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Tue, 12 Nov 2024 23:34:32 -0800 Subject: [PATCH 11/63] More work on range semantics --- lib/inc/sys_string/impl/unicode/algorithms.h | 10 +-- lib/inc/sys_string/impl/util/iter_util.h | 84 +++++++++++++++--- lib/inc/sys_string/utf_view.h | 93 ++++++++++++++++++-- test/test_utf_iteration.cpp | 14 +++ 4 files changed, 176 insertions(+), 25 deletions(-) diff --git a/lib/inc/sys_string/impl/unicode/algorithms.h b/lib/inc/sys_string/impl/unicode/algorithms.h index 1014901..cea0cab 100644 --- a/lib/inc/sys_string/impl/unicode/algorithms.h +++ b/lib/inc/sys_string/impl/unicode/algorithms.h @@ -28,7 +28,7 @@ namespace sysstr { static constexpr auto max_output_length = util::unicode::mapper::max_mapped_length; - template + template> OutIt> auto operator()(char32_t c, OutIt dest) const noexcept(noexcept(*dest++ = utf_char_of())) -> OutIt { return util::unicode::mapper::case_fold.map_char(c, dest); @@ -40,11 +40,11 @@ namespace sysstr class sigma_tolower { public: - template + template auto operator()(const Range & range, std::ranges::iterator_t where) const noexcept -> char32_t { - auto reversed = range.reverse(where); + auto reversed = ranges::make_reverse_iterator(range, where); if (any_non_cased_then_cased(reversed, std::rend(range))) { ++where; @@ -75,7 +75,7 @@ namespace sysstr template struct tolower { - template> OutIt> + template> OutIt> inline auto operator()(const Range & range, OutIt dest) noexcept(noexcept(*dest++ = utf_char_of())) -> OutIt { using namespace util::unicode; @@ -106,7 +106,7 @@ namespace sysstr template struct toupper { - template> OutIt> + template> OutIt> inline auto operator()(const Range & range, OutIt dest) noexcept(noexcept(*dest++ = utf_char_of())) -> OutIt { using namespace util::unicode; diff --git a/lib/inc/sys_string/impl/util/iter_util.h b/lib/inc/sys_string/impl/util/iter_util.h index 12143bd..ec5ed54 100644 --- a/lib/inc/sys_string/impl/util/iter_util.h +++ b/lib/inc/sys_string/impl/util/iter_util.h @@ -11,18 +11,10 @@ #include #include +#include -namespace sysstr::util +namespace sysstr::ranges //non-standard extensions to std::ranges { - enum class iter_direction : bool - { - backward = false, - forward = true - }; - constexpr iter_direction reverse(iter_direction dir) noexcept - { return iter_direction(!bool(dir)); } - - template concept reverse_iterator_of = std::input_iterator && @@ -33,6 +25,74 @@ namespace sysstr::util { t.base() } -> std::same_as; }; + template + using reverse_iterator_t = decltype(std::ranges::rbegin(std::declval())); + template + using const_reverse_iterator_t = decltype(std::ranges::crbegin(std::declval())); + template + using reverse_sentinel_t = decltype(std::ranges::rend(std::declval())); + template + using const_reverse_sentinel_t = decltype(std::ranges::crend(std::declval())); + + template + concept reverse_traversable_range = std::ranges::range && requires(R & r) { + std::ranges::rbegin(r); + std::ranges::rend(r); + std::ranges::crbegin(r); + std::ranges::crend(r); + }; + + template + concept common_reverse_traversable_range = reverse_traversable_range && + std::ranges::common_range && + std::same_as, reverse_sentinel_t>; + + template + concept standard_reverse_traversable_range = common_reverse_traversable_range && + reverse_iterator_of, std::ranges::iterator_t>; + + + template + concept custom_reverse_traversable_range = reverse_traversable_range && requires(R & r) + { + { r.reverse(std::declval>()) } -> std::same_as>; + { r.reverse(std::declval>()) } -> std::same_as>; + }; + + + template + decltype(auto) make_reverse_iterator(R && /*range*/, std::ranges::iterator_t> it) + { return reverse_iterator_t(it); } + + template + decltype(auto) make_reverse_iterator(R && /*range*/, reverse_iterator_t> it) + { return it.base(); } + + template + decltype(auto) make_reverse_iterator(R && range, std::ranges::iterator_t> it) + { return range.reverse(it); } + + template + decltype(auto) make_reverse_iterator(R && range, reverse_iterator_t> it) + { return range.reverse(it); } + + template + concept reversible_range = reverse_traversable_range && requires(R & r) { + make_reverse_iterator(r, std::declval>>()); + make_reverse_iterator(r, std::declval>>()); + }; +} + +namespace sysstr::util +{ + enum class iter_direction : bool + { + backward = false, + forward = true + }; + constexpr iter_direction reverse(iter_direction dir) noexcept + { return iter_direction(!bool(dir)); } + template concept indexable = requires(T & t, decltype(std::size(t)) n) @@ -43,6 +103,8 @@ namespace sysstr::util template class index_iterator { + //We cannot declare ourselves as template becuase iterators are often declared as nested + //types and within a type the Container is incomplete. Sigh. static_assert(indexable); friend index_iterator; @@ -53,7 +115,7 @@ namespace sysstr::util using size_type = decltype(std::size(std::declval())); using reference = decltype(std::declval()[0]); using difference_type = std::make_signed_t; - using value_type = std::remove_cv_t>; + using value_type = std::remove_cvref_t; static constexpr bool is_forward = (Direction == iter_direction::forward); static constexpr bool is_reverse = !is_forward; diff --git a/lib/inc/sys_string/utf_view.h b/lib/inc/sys_string/utf_view.h index 9416dd2..887fe03 100644 --- a/lib/inc/sys_string/utf_view.h +++ b/lib/inc/sys_string/utf_view.h @@ -32,6 +32,7 @@ namespace sysstr } && (T::enable_view || !T::enable_view) && (T::enable_borrowed_range || !T::enable_borrowed_range); template Traits = utf_access_traits> + requires(std::ranges::input_range()))>>) class utf_view; namespace util @@ -77,7 +78,7 @@ namespace sysstr } template OtherEndIt> - requires(Direction == iter_direction::forward && reverse_iterator_of) + requires(Direction == iter_direction::forward && ranges::reverse_iterator_of) utf_iterator(const utf_iterator & rev, EndIt last): m_current(rev.storage_next().base()), @@ -91,7 +92,7 @@ namespace sysstr } template OtherEndIt> - requires(Direction == iter_direction::backward && reverse_iterator_of) + requires(Direction == iter_direction::backward && ranges::reverse_iterator_of) utf_iterator(const utf_iterator & fwd, EndIt last): m_current(fwd.storage_next()), @@ -221,14 +222,14 @@ namespace sysstr } template OtherEndIt> - requires(Direction == iter_direction::forward && reverse_iterator_of) + requires(Direction == iter_direction::forward && ranges::reverse_iterator_of) utf_iterator(const utf_iterator & rev, EndIt last): utf_iterator(rev.storage_current().base(), last) {} template OtherEndIt> - requires(Direction == iter_direction::backward && reverse_iterator_of) + requires(Direction == iter_direction::backward && ranges::reverse_iterator_of) utf_iterator(const utf_iterator & fwd, EndIt last): utf_iterator(It(fwd.storage_current()), last) @@ -289,22 +290,22 @@ namespace sysstr }; } - template + template struct utf_access_traits { - using stored_reference = std::add_pointer_t>; + using stored_reference = std::add_pointer_t>>; static constexpr bool enable_view = true; static constexpr bool enable_borrowed_range = true; - static decltype(auto) adapt(std::add_lvalue_reference_t src) noexcept + static decltype(auto) adapt(const std::add_const_t> & src) noexcept { return &src; } - static std::add_lvalue_reference_t access(stored_reference ptr) noexcept + static std::add_const_t> & access(stored_reference ptr) noexcept { return *ptr; } }; - template Traits> + requires(std::ranges::input_range()))>>) class utf_view { private: @@ -312,6 +313,53 @@ namespace sysstr static constexpr auto source_encoding = utf_encoding_of()))>>; + using access_iterator = decltype(std::begin(Traits::access(std::declval()))); + using access_sentinel = decltype(std::end(Traits::access(std::declval()))); + public: + using iterator = util::utf_iterator; + using const_iterator = iterator; + + using value_type = typename iterator::value_type; + using reference = typename iterator::reference; + using const_reference = reference; + using pointer = typename iterator::pointer; + using const_pointer = pointer; + + public: + utf_view(const Container & src) noexcept(noexcept(stored_reference(Traits::adapt(src)))) : + m_ref(Traits::adapt(src)) + {} + SYS_STRING_FORCE_INLINE iterator begin() const + { return iterator(std::begin(Traits::access(this->m_ref)), std::end(Traits::access(this->m_ref))); } + SYS_STRING_FORCE_INLINE std::default_sentinel_t end() const + { return std::default_sentinel; } + SYS_STRING_FORCE_INLINE const_iterator cbegin() const + { return begin(); } + SYS_STRING_FORCE_INLINE std::default_sentinel_t cend() const + { return end(); } + + + template + decltype(auto) each(Func func) const + { + return utf_converter::for_each_converted(Traits::access(this->m_ref), func); + } + + private: + stored_reference m_ref; + }; + + + template Traits> + requires(std::ranges::input_range()))>> && + ranges::reverse_traversable_range()))>>) + class utf_view + { + private: + using stored_reference = typename Traits::stored_reference; + + static constexpr auto source_encoding = utf_encoding_of()))>>; + using access_iterator = decltype(std::begin(Traits::access(std::declval()))); using access_sentinel = decltype(std::end(Traits::access(std::declval()))); using access_reverse_iterator = decltype(std::rbegin(Traits::access(std::declval()))); @@ -368,6 +416,33 @@ namespace sysstr private: stored_reference m_ref; }; + + #if __cpp_lib_ranges >= 202202L + + template + struct as_utf_func : + #if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION < 190000 + //libc++ lies about __cpp_lib_ranges + public std::__range_adaptor_closure> + #else + public std::ranges::range_adaptor_closure> + #endif + { + template + [[nodiscard]] constexpr auto operator()(Range && range) const + noexcept(noexcept(utf_view>(std::forward(range)))) + -> decltype(utf_view>(std::forward(range))) + { return utf_view>(std::forward(range)); } + + }; + + template + inline constexpr auto as_utf = as_utf_func{}; + inline constexpr auto as_utf8 = as_utf_func{}; + inline constexpr auto as_utf16 = as_utf_func{}; + inline constexpr auto as_utf32 = as_utf_func{}; + + #endif } namespace std::ranges { diff --git a/test/test_utf_iteration.cpp b/test/test_utf_iteration.cpp index ae689ec..9bf9091 100644 --- a/test/test_utf_iteration.cpp +++ b/test/test_utf_iteration.cpp @@ -680,5 +680,19 @@ TEST_CASE( "UTF32 Iteration on UTF32 sequence", "[utf_iteration]") { check_iteration(U"\x110000""a", U"\uFFFDa"); //too large + good } +TEST_CASE( "Ranges", "[utf_iteration]" ) { + +#if __cpp_lib_ranges >= 202202L + CHECK(std::ranges::equal(as_utf32(std::vector({'a', 'b', 'c'})), std::array{U'a', U'b', U'c'})); + CHECK(std::ranges::equal(std::vector({'a', 'b', 'c'}) | as_utf32, std::array{U'a', U'b', U'c'})); + + CHECK(std::ranges::equal(as_utf16(std::vector({'a', 'b', 'c'})), std::array{u'a', u'b', u'c'})); + CHECK(std::ranges::equal(std::vector({'a', 'b', 'c'}) | as_utf16, std::array{u'a', u'b', u'c'})); + + CHECK(std::ranges::equal(as_utf8(std::vector({u'a', u'b', u'c'})), std::array{'a', 'b', 'c'})); + CHECK(std::ranges::equal(std::vector({u'a', u'b', u'c'}) | as_utf8, std::array{'a', 'b', 'c'})); +#endif +} + From bd54c2b75dab42702fc2be99082f508766b37892 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Wed, 13 Nov 2024 09:41:34 -0800 Subject: [PATCH 12/63] Workaround for MSVC bugs w.r.t. constrained partial specializations --- lib/inc/sys_string/impl/util/iter_util.h | 6 +- lib/inc/sys_string/utf_view.h | 126 ++++++++--------------- 2 files changed, 45 insertions(+), 87 deletions(-) diff --git a/lib/inc/sys_string/impl/util/iter_util.h b/lib/inc/sys_string/impl/util/iter_util.h index ec5ed54..c51b89c 100644 --- a/lib/inc/sys_string/impl/util/iter_util.h +++ b/lib/inc/sys_string/impl/util/iter_util.h @@ -16,7 +16,7 @@ namespace sysstr::ranges //non-standard extensions to std::ranges { template - concept reverse_iterator_of = + concept reverse_iterator_for = std::input_iterator && std::input_iterator && std::is_constructible_v && @@ -48,8 +48,8 @@ namespace sysstr::ranges //non-standard extensions to std::ranges std::same_as, reverse_sentinel_t>; template - concept standard_reverse_traversable_range = common_reverse_traversable_range && - reverse_iterator_of, std::ranges::iterator_t>; + concept standard_reverse_traversable_range = reverse_traversable_range && + reverse_iterator_for, std::ranges::iterator_t>; template diff --git a/lib/inc/sys_string/utf_view.h b/lib/inc/sys_string/utf_view.h index 887fe03..f6bbe38 100644 --- a/lib/inc/sys_string/utf_view.h +++ b/lib/inc/sys_string/utf_view.h @@ -17,24 +17,6 @@ namespace sysstr { - template - struct utf_access_traits; - - template - concept utf_access_traits_t = requires(const Container & cont) - { - typename T::stored_reference; - - { T::enable_view } -> std::convertible_to; - { T::enable_borrowed_range } -> std::convertible_to; - { typename T::stored_reference(T::adapt(cont)) }; - { T::access(std::declval()) } -> std::ranges::bidirectional_range; - } && (T::enable_view || !T::enable_view) && (T::enable_borrowed_range || !T::enable_borrowed_range); - - template Traits = utf_access_traits> - requires(std::ranges::input_range()))>>) - class utf_view; - namespace util { template EndIt> @@ -78,7 +60,7 @@ namespace sysstr } template OtherEndIt> - requires(Direction == iter_direction::forward && ranges::reverse_iterator_of) + requires(Direction == iter_direction::forward && ranges::reverse_iterator_for) utf_iterator(const utf_iterator & rev, EndIt last): m_current(rev.storage_next().base()), @@ -92,7 +74,7 @@ namespace sysstr } template OtherEndIt> - requires(Direction == iter_direction::backward && ranges::reverse_iterator_of) + requires(Direction == iter_direction::backward && ranges::reverse_iterator_for) utf_iterator(const utf_iterator & fwd, EndIt last): m_current(fwd.storage_next()), @@ -222,14 +204,14 @@ namespace sysstr } template OtherEndIt> - requires(Direction == iter_direction::forward && ranges::reverse_iterator_of) + requires(Direction == iter_direction::forward && ranges::reverse_iterator_for) utf_iterator(const utf_iterator & rev, EndIt last): utf_iterator(rev.storage_current().base(), last) {} template OtherEndIt> - requires(Direction == iter_direction::backward && ranges::reverse_iterator_of) + requires(Direction == iter_direction::backward && ranges::reverse_iterator_for) utf_iterator(const utf_iterator & fwd, EndIt last): utf_iterator(It(fwd.storage_current()), last) @@ -289,7 +271,21 @@ namespace sysstr value_type m_value = 0; }; } - + + template + concept utf_access_traits_t = requires(const Container & cont) + { + typename T::stored_reference; + + { T::enable_view } -> std::convertible_to; + { T::enable_borrowed_range } -> std::convertible_to; + { typename T::stored_reference(T::adapt(cont)) }; + { T::access(std::declval()) } -> std::ranges::bidirectional_range; + } && (T::enable_view || !T::enable_view) && (T::enable_borrowed_range || !T::enable_borrowed_range); + + template + struct utf_access_traits; + template struct utf_access_traits { @@ -304,70 +300,35 @@ namespace sysstr { return *ptr; } }; - template Traits> + template Traits = utf_access_traits> requires(std::ranges::input_range()))>>) class utf_view { private: using stored_reference = typename Traits::stored_reference; - - static constexpr auto source_encoding = utf_encoding_of()))>>; + static constexpr bool is_reversible = ranges::reverse_traversable_range< + std::remove_reference_t()))>>; + static constexpr auto source_encoding = utf_encoding_of< + std::ranges::range_value_t()))>>; using access_iterator = decltype(std::begin(Traits::access(std::declval()))); using access_sentinel = decltype(std::end(Traits::access(std::declval()))); - public: - using iterator = util::utf_iterator; - using const_iterator = iterator; - - using value_type = typename iterator::value_type; - using reference = typename iterator::reference; - using const_reference = reference; - using pointer = typename iterator::pointer; - using const_pointer = pointer; - - public: - utf_view(const Container & src) noexcept(noexcept(stored_reference(Traits::adapt(src)))) : - m_ref(Traits::adapt(src)) - {} - SYS_STRING_FORCE_INLINE iterator begin() const - { return iterator(std::begin(Traits::access(this->m_ref)), std::end(Traits::access(this->m_ref))); } - SYS_STRING_FORCE_INLINE std::default_sentinel_t end() const - { return std::default_sentinel; } - SYS_STRING_FORCE_INLINE const_iterator cbegin() const - { return begin(); } - SYS_STRING_FORCE_INLINE std::default_sentinel_t cend() const - { return end(); } + using access_reverse_iterator = std::conditional_t()))), + void>; + using access_reverse_sentinel = std::conditional_t()))), + void>; - - template - decltype(auto) each(Func func) const - { - return utf_converter::for_each_converted(Traits::access(this->m_ref), func); - } - - private: - stored_reference m_ref; - }; - - - template Traits> - requires(std::ranges::input_range()))>> && - ranges::reverse_traversable_range()))>>) - class utf_view - { - private: - using stored_reference = typename Traits::stored_reference; - - static constexpr auto source_encoding = utf_encoding_of()))>>; - - using access_iterator = decltype(std::begin(Traits::access(std::declval()))); - using access_sentinel = decltype(std::end(Traits::access(std::declval()))); - using access_reverse_iterator = decltype(std::rbegin(Traits::access(std::declval()))); - using access_reverse_sentinel = decltype(std::rend(Traits::access(std::declval()))); + using iter_direction = util::iter_direction; + static constexpr auto forward = iter_direction::forward; + static constexpr auto backward = iter_direction::backward; public: using iterator = util::utf_iterator; using const_iterator = iterator; - using reverse_iterator = util::utf_iterator; + using reverse_iterator = std::conditional_t, + void>; using const_reverse_iterator = reverse_iterator; using value_type = typename iterator::value_type; @@ -376,10 +337,7 @@ namespace sysstr using pointer = typename iterator::pointer; using const_pointer = pointer; - using iter_direction = util::iter_direction; - static constexpr auto forward = iter_direction::forward; - static constexpr auto backward = iter_direction::backward; public: utf_view(const Container & src) noexcept(noexcept(stored_reference(Traits::adapt(src)))) : m_ref(Traits::adapt(src)) @@ -392,19 +350,19 @@ namespace sysstr { return begin(); } SYS_STRING_FORCE_INLINE std::default_sentinel_t cend() const { return end(); } - SYS_STRING_FORCE_INLINE reverse_iterator rbegin() const + SYS_STRING_FORCE_INLINE reverse_iterator rbegin() const requires(is_reversible) { return reverse_iterator(std::rbegin(Traits::access(this->m_ref)), std::rend(Traits::access(this->m_ref))); } - SYS_STRING_FORCE_INLINE std::default_sentinel_t rend() const + SYS_STRING_FORCE_INLINE std::default_sentinel_t rend() const requires(is_reversible) { return std::default_sentinel; } - SYS_STRING_FORCE_INLINE const_reverse_iterator crbegin() const + SYS_STRING_FORCE_INLINE const_reverse_iterator crbegin() const requires(is_reversible) { return rbegin(); } - SYS_STRING_FORCE_INLINE std::default_sentinel_t crend() const + SYS_STRING_FORCE_INLINE std::default_sentinel_t crend() const requires(is_reversible) { return rend(); } - reverse_iterator reverse(iterator it) const + reverse_iterator reverse(iterator it) const requires(is_reversible) { return reverse_iterator(it, std::rend(Traits::access(this->m_ref))); } - iterator reverse(reverse_iterator it) const + iterator reverse(reverse_iterator it) const requires(is_reversible) { return iterator(it, std::end(Traits::access(this->m_ref))); } template From 007043e927581b059fea67fb61cf9791c10e4a52 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Wed, 13 Nov 2024 23:36:34 -0800 Subject: [PATCH 13/63] Getting rid of external traits in utf_view --- lib/inc/sys_string/impl/builder.h | 17 +++++--- lib/inc/sys_string/sys_string.h | 26 +++++++----- lib/inc/sys_string/utf_view.h | 69 +++++++++++++++++-------------- test/test_builder.cpp | 3 ++ test/test_general.cpp | 60 +++++++++++++++++++++++++++ test/test_utf_iteration.cpp | 23 +++++++++++ 6 files changed, 149 insertions(+), 49 deletions(-) diff --git a/lib/inc/sys_string/impl/builder.h b/lib/inc/sys_string/impl/builder.h index 1dce139..b81564d 100644 --- a/lib/inc/sys_string/impl/builder.h +++ b/lib/inc/sys_string/impl/builder.h @@ -12,13 +12,21 @@ namespace sysstr { + template struct utf_access_traits_for> + { using type = typename sys_string_builder_t::utf_view_traits; }; + template class sys_string_builder_t { private: using impl_type = typename Storage::builder_impl; - struct view_traits + public: + using size_type = typename impl_type::size_type; + using storage_type = typename impl_type::value_type; + + + struct utf_view_traits { using stored_reference = const impl_type *; @@ -30,12 +38,9 @@ namespace sysstr static const impl_type & access(stored_reference ptr) noexcept { return *ptr; } }; - public: - using size_type = typename impl_type::size_type; - using storage_type = typename impl_type::value_type; - + template - using utf_view = utf_view; + using utf_view = utf_view; using utf8_view = utf_view; using utf16_view = utf_view; diff --git a/lib/inc/sys_string/sys_string.h b/lib/inc/sys_string/sys_string.h index e44379b..cf593e0 100644 --- a/lib/inc/sys_string/sys_string.h +++ b/lib/inc/sys_string/sys_string.h @@ -68,6 +68,10 @@ namespace sysstr concept sys_string_or_char = std::is_same_v, sys_string_t> || std::is_same_v, char32_t>; + + template struct utf_access_traits_for> + { using type = typename sys_string_t::utf_view_traits; }; + template class sys_string_t : public Storage { @@ -75,8 +79,17 @@ namespace sysstr friend typename Storage::char_access; private: using storage = Storage; + + public: + using size_type = typename storage::size_type; + using storage_type = typename storage::storage_type; + using hash_type = typename storage::hash_type; - struct view_traits + static constexpr size_type max_size = storage::max_size; + + using char_access = typename storage::char_access; + + struct utf_view_traits { using stored_reference = typename Storage::char_access; @@ -88,18 +101,9 @@ namespace sysstr static const stored_reference & access(const stored_reference & acc) noexcept { return acc; } }; - - public: - using size_type = typename storage::size_type; - using storage_type = typename storage::storage_type; - using hash_type = typename storage::hash_type; - - static constexpr size_type max_size = storage::max_size; - - using char_access = typename storage::char_access; template - using utf_view = utf_view; + using utf_view = utf_view; using utf8_view = utf_view; using utf16_view = utf_view; diff --git a/lib/inc/sys_string/utf_view.h b/lib/inc/sys_string/utf_view.h index f6bbe38..54fc023 100644 --- a/lib/inc/sys_string/utf_view.h +++ b/lib/inc/sys_string/utf_view.h @@ -273,7 +273,7 @@ namespace sysstr } template - concept utf_access_traits_t = requires(const Container & cont) + concept utf_access_traits = requires(const Container & cont) { typename T::stored_reference; @@ -283,42 +283,46 @@ namespace sysstr { T::access(std::declval()) } -> std::ranges::bidirectional_range; } && (T::enable_view || !T::enable_view) && (T::enable_borrowed_range || !T::enable_borrowed_range); - template - struct utf_access_traits; - - template - struct utf_access_traits + template + struct range_utf_access_traits { - using stored_reference = std::add_pointer_t>>; + using stored_reference = std::add_pointer_t>>; static constexpr bool enable_view = true; static constexpr bool enable_borrowed_range = true; - static decltype(auto) adapt(const std::add_const_t> & src) noexcept + static decltype(auto) adapt(const std::add_const_t> & src) noexcept { return &src; } - static std::add_const_t> & access(stored_reference ptr) noexcept + static std::add_const_t> & access(stored_reference ptr) noexcept { return *ptr; } }; - template Traits = utf_access_traits> - requires(std::ranges::input_range()))>>) + template struct utf_access_traits_for + { using type = range_utf_access_traits; }; + + template class utf_view { private: - using stored_reference = typename Traits::stored_reference; + using traits = typename utf_access_traits_for::type; + + static_assert(utf_access_traits); + static_assert(std::ranges::input_range()))>>); + + using stored_reference = typename traits::stored_reference; static constexpr bool is_reversible = ranges::reverse_traversable_range< - std::remove_reference_t()))>>; + std::remove_reference_t()))>>; static constexpr auto source_encoding = utf_encoding_of< - std::ranges::range_value_t()))>>; + std::ranges::range_value_t()))>>; - using access_iterator = decltype(std::begin(Traits::access(std::declval()))); - using access_sentinel = decltype(std::end(Traits::access(std::declval()))); + using access_iterator = decltype(std::begin(traits::access(std::declval()))); + using access_sentinel = decltype(std::end(traits::access(std::declval()))); using access_reverse_iterator = std::conditional_t()))), - void>; + decltype(std::rbegin(traits::access(std::declval()))), + void>; using access_reverse_sentinel = std::conditional_t()))), - void>; + decltype(std::rend(traits::access(std::declval()))), + void>; using iter_direction = util::iter_direction; static constexpr auto forward = iter_direction::forward; @@ -337,13 +341,14 @@ namespace sysstr using pointer = typename iterator::pointer; using const_pointer = pointer; - + static constexpr bool enable_view = traits::enable_view; + static constexpr bool enable_borrowed_range = traits::enable_borrowed_range; public: - utf_view(const Container & src) noexcept(noexcept(stored_reference(Traits::adapt(src)))) : - m_ref(Traits::adapt(src)) + utf_view(const Container & src) noexcept(noexcept(stored_reference(traits::adapt(src)))) : + m_ref(traits::adapt(src)) {} SYS_STRING_FORCE_INLINE iterator begin() const - { return iterator(std::begin(Traits::access(this->m_ref)), std::end(Traits::access(this->m_ref))); } + { return iterator(std::begin(traits::access(this->m_ref)), std::end(traits::access(this->m_ref))); } SYS_STRING_FORCE_INLINE std::default_sentinel_t end() const { return std::default_sentinel; } SYS_STRING_FORCE_INLINE const_iterator cbegin() const @@ -351,7 +356,7 @@ namespace sysstr SYS_STRING_FORCE_INLINE std::default_sentinel_t cend() const { return end(); } SYS_STRING_FORCE_INLINE reverse_iterator rbegin() const requires(is_reversible) - { return reverse_iterator(std::rbegin(Traits::access(this->m_ref)), std::rend(Traits::access(this->m_ref))); } + { return reverse_iterator(std::rbegin(traits::access(this->m_ref)), std::rend(traits::access(this->m_ref))); } SYS_STRING_FORCE_INLINE std::default_sentinel_t rend() const requires(is_reversible) { return std::default_sentinel; } SYS_STRING_FORCE_INLINE const_reverse_iterator crbegin() const requires(is_reversible) @@ -360,15 +365,15 @@ namespace sysstr { return rend(); } reverse_iterator reverse(iterator it) const requires(is_reversible) - { return reverse_iterator(it, std::rend(Traits::access(this->m_ref))); } + { return reverse_iterator(it, std::rend(traits::access(this->m_ref))); } iterator reverse(reverse_iterator it) const requires(is_reversible) - { return iterator(it, std::end(Traits::access(this->m_ref))); } + { return iterator(it, std::end(traits::access(this->m_ref))); } template decltype(auto) each(Func func) const { - return utf_converter::for_each_converted(Traits::access(this->m_ref), func); + return utf_converter::for_each_converted(traits::access(this->m_ref), func); } private: @@ -404,11 +409,11 @@ namespace sysstr } namespace std::ranges { - template Traits> - constexpr bool enable_view> = Traits::enable_view; + template + constexpr bool enable_view> = sysstr::utf_view::enable_view; - template Traits> - constexpr bool enable_borrowed_range> = Traits::enable_borrowed_range; + template + constexpr bool enable_borrowed_range> = sysstr::utf_view::enable_borrowed_range; } diff --git a/test/test_builder.cpp b/test/test_builder.cpp index a0bf95b..8e058de 100644 --- a/test/test_builder.cpp +++ b/test/test_builder.cpp @@ -25,6 +25,7 @@ static_assert(!std::ranges::common_range); static_assert(std::ranges::view); static_assert(std::ranges::borrowed_range); static_assert(std::ranges::viewable_range); +static_assert(ranges::custom_reverse_traversable_range); static_assert(std::ranges::forward_range); static_assert(!std::ranges::bidirectional_range); @@ -32,6 +33,7 @@ static_assert(!std::ranges::common_range); static_assert(std::ranges::view); static_assert(std::ranges::borrowed_range); static_assert(std::ranges::viewable_range); +static_assert(ranges::custom_reverse_traversable_range); static_assert(std::ranges::forward_range); static_assert(!std::ranges::bidirectional_range); @@ -39,6 +41,7 @@ static_assert(!std::ranges::common_range); static_assert(std::ranges::view); static_assert(std::ranges::borrowed_range); static_assert(std::ranges::viewable_range); +static_assert(ranges::custom_reverse_traversable_range); TEST_CASE( "Builder basics", "[builder]") { diff --git a/test/test_general.cpp b/test/test_general.cpp index 199305c..8addcca 100644 --- a/test/test_general.cpp +++ b/test/test_general.cpp @@ -31,18 +31,21 @@ static_assert(!std::ranges::bidirectional_range); static_assert(!std::ranges::common_range); static_assert(!std::ranges::view); static_assert(!std::ranges::borrowed_range); +static_assert(ranges::custom_reverse_traversable_range); static_assert(std::ranges::forward_range); static_assert(!std::ranges::bidirectional_range); static_assert(!std::ranges::common_range); static_assert(!std::ranges::view); static_assert(!std::ranges::borrowed_range); +static_assert(ranges::custom_reverse_traversable_range); static_assert(std::ranges::forward_range); static_assert(!std::ranges::bidirectional_range); static_assert(!std::ranges::common_range); static_assert(!std::ranges::view); static_assert(!std::ranges::borrowed_range); +static_assert(ranges::custom_reverse_traversable_range); template bool is_eq(T val) @@ -108,6 +111,23 @@ TEST_CASE( "Iteration", "[general]" ) { std::ranges::copy(view.rbegin(), view.rend(), std::back_inserter(converted)); CHECK(converted == std::string{expected.rbegin(), expected.rend()}); + converted.clear(); + std::ranges::copy(sys_string::utf8_view(str), std::back_inserter(converted)); + CHECK(converted == expected); + + converted.clear(); + std::ranges::copy(as_utf8(sys_string::char_access(str)), std::back_inserter(converted)); + CHECK(converted == expected); + + static_assert(std::is_same_v); + + bool res = std::ranges::equal(as_utf8(sys_string::char_access(str)) | std::views::take(1), std::array{'a'}); + CHECK(res); + + res = std::ranges::equal(std::views::all(view) | std::views::take(1), std::array{'a'}); + CHECK(res); + converted.clear(); for (char c: sys_string::utf8_view(empty)) { @@ -130,6 +150,23 @@ TEST_CASE( "Iteration", "[general]" ) { std::ranges::copy(view.rbegin(), view.rend(), std::back_inserter(converted)); CHECK(converted == std::u16string{expected.rbegin(), expected.rend()}); + converted.clear(); + std::ranges::copy(sys_string::utf16_view(str), std::back_inserter(converted)); + CHECK(converted == expected); + + converted.clear(); + std::ranges::copy(as_utf16(sys_string::char_access(str)), std::back_inserter(converted)); + CHECK(converted == expected); + + static_assert(std::is_same_v); + + bool res = std::ranges::equal(as_utf16(sys_string::char_access(str)) | std::views::take(1), std::array{'a'}); + CHECK(res); + + res = std::ranges::equal(std::views::all(view) | std::views::take(1), std::array{'a'}); + CHECK(res); + converted.clear(); for (char16_t c: sys_string::utf16_view(empty)) { @@ -152,6 +189,23 @@ TEST_CASE( "Iteration", "[general]" ) { sys_string::utf32_view view(str); std::ranges::copy(view.rbegin(), view.rend(), std::back_inserter(converted)); CHECK(converted == std::u32string{expected.rbegin(), expected.rend()}); + + converted.clear(); + std::ranges::copy(sys_string::utf32_view(str), std::back_inserter(converted)); + CHECK(converted == expected); + + converted.clear(); + std::ranges::copy(as_utf32(sys_string::char_access(str)), std::back_inserter(converted)); + CHECK(converted == expected); + + static_assert(std::is_same_v); + + bool res = std::ranges::equal(as_utf32(sys_string::char_access(str)) | std::views::take(1), std::array{'a'}); + CHECK(res); + + res = std::ranges::equal(std::views::all(view) | std::views::take(1), std::array{'a'}); + CHECK(res); converted.clear(); for (char32_t c: sys_string::utf16_view(empty)) @@ -594,3 +648,9 @@ TEST_CASE( "ostream", "[general]" ) { } #endif } + +TEST_CASE( "utf views", "[general]" ) { + + + +} \ No newline at end of file diff --git a/test/test_utf_iteration.cpp b/test/test_utf_iteration.cpp index 9bf9091..6fa2699 100644 --- a/test/test_utf_iteration.cpp +++ b/test/test_utf_iteration.cpp @@ -20,6 +20,29 @@ using namespace std::literals; [[maybe_unused]] static std::u32string clang_string_workaround(const char32_t* a, const char32_t* b) { return {a, b}; } #endif +static_assert(std::ranges::forward_range>>); +static_assert(!std::ranges::bidirectional_range>>); +static_assert(!std::ranges::common_range>>); +static_assert(std::ranges::view>>); +static_assert(std::ranges::borrowed_range>>); +static_assert(std::ranges::viewable_range>>); +static_assert(ranges::custom_reverse_traversable_range>>); + +static_assert(std::ranges::forward_range>>); +static_assert(!std::ranges::bidirectional_range>>); +static_assert(!std::ranges::common_range>>); +static_assert(std::ranges::view>>); +static_assert(std::ranges::borrowed_range>>); +static_assert(std::ranges::viewable_range>>); +static_assert(ranges::custom_reverse_traversable_range>>); + +static_assert(std::ranges::forward_range>>); +static_assert(!std::ranges::bidirectional_range>>); +static_assert(!std::ranges::common_range>>); +static_assert(std::ranges::view>>); +static_assert(std::ranges::borrowed_range>>); +static_assert(std::ranges::viewable_range>>); +static_assert(ranges::custom_reverse_traversable_range>>); namespace { From 9ebd637f62bbbe2843741f2befdf97f31fa65ab0 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Wed, 13 Nov 2024 23:38:58 -0800 Subject: [PATCH 14/63] Removing bogus file --- test/CMakeSettings.json | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100644 test/CMakeSettings.json diff --git a/test/CMakeSettings.json b/test/CMakeSettings.json deleted file mode 100644 index aadfcc1..0000000 --- a/test/CMakeSettings.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "configurations": [ - { - "name": "x64-Debug (default)", - "generator": "Ninja", - "configurationType": "Debug", - "inheritEnvironments": [ "msvc_x64_x64" ], - "buildRoot": "${projectDir}\\..\\out\\win\\build\\${name}", - "installRoot": "${projectDir}\\..\\out\\win\\install\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "" - }, - { - "name": "x64-Release", - "generator": "Ninja", - "configurationType": "RelWithDebInfo", - "inheritEnvironments": [ "msvc_x64_x64" ], - "buildRoot": "${projectDir}\\..\\out\\win\\build\\${name}", - "installRoot": "${projectDir}\\..\\out\\win\\install\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "" - } - ] -} \ No newline at end of file From 267857854ef428cd201aee56cea202b29dba3126 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Thu, 14 Nov 2024 00:00:03 -0800 Subject: [PATCH 15/63] Making as_utf available even without view piping --- lib/inc/sys_string/utf_view.h | 34 +++++++++++++++++----------------- test/test_utf_iteration.cpp | 4 ++-- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/lib/inc/sys_string/utf_view.h b/lib/inc/sys_string/utf_view.h index 54fc023..e52c9f5 100644 --- a/lib/inc/sys_string/utf_view.h +++ b/lib/inc/sys_string/utf_view.h @@ -379,33 +379,33 @@ namespace sysstr private: stored_reference m_ref; }; - + + template + struct as_utf_func #if __cpp_lib_ranges >= 202202L - - template - struct as_utf_func : + : #if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION < 190000 //libc++ lies about __cpp_lib_ranges public std::__range_adaptor_closure> #else public std::ranges::range_adaptor_closure> #endif - { - template - [[nodiscard]] constexpr auto operator()(Range && range) const - noexcept(noexcept(utf_view>(std::forward(range)))) - -> decltype(utf_view>(std::forward(range))) - { return utf_view>(std::forward(range)); } + #endif + { + template + [[nodiscard]] constexpr auto operator()(Range && range) const + noexcept(noexcept(utf_view>(std::forward(range)))) + -> decltype(utf_view>(std::forward(range))) + { return utf_view>(std::forward(range)); } - }; + }; - template - inline constexpr auto as_utf = as_utf_func{}; - inline constexpr auto as_utf8 = as_utf_func{}; - inline constexpr auto as_utf16 = as_utf_func{}; - inline constexpr auto as_utf32 = as_utf_func{}; + template + inline constexpr auto as_utf = as_utf_func{}; + inline constexpr auto as_utf8 = as_utf_func{}; + inline constexpr auto as_utf16 = as_utf_func{}; + inline constexpr auto as_utf32 = as_utf_func{}; - #endif } namespace std::ranges { diff --git a/test/test_utf_iteration.cpp b/test/test_utf_iteration.cpp index 6fa2699..082d415 100644 --- a/test/test_utf_iteration.cpp +++ b/test/test_utf_iteration.cpp @@ -61,14 +61,14 @@ namespace std::string printable(const std::u16string_view & str) { std::string ret; - utf_converter::convert(str.begin(), str.end(), std::back_inserter(ret)); + utf_converter::convert(str, std::back_inserter(ret)); return ret; } std::string printable(const std::u32string_view & str) { std::string ret; - utf_converter::convert(str.begin(), str.end(), std::back_inserter(ret)); + utf_converter::convert(str, std::back_inserter(ret)); return ret; } } From b0ceeb9a70ea932b301888be745e9fa3b7f94571 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Thu, 14 Nov 2024 00:00:20 -0800 Subject: [PATCH 16/63] Getting rid of no longer needed type detection --- lib/inc/sys_string/impl/builder.h | 21 ++++++++++----------- lib/inc/sys_string/sys_string.h | 10 ---------- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/lib/inc/sys_string/impl/builder.h b/lib/inc/sys_string/impl/builder.h index b81564d..8be69b9 100644 --- a/lib/inc/sys_string/impl/builder.h +++ b/lib/inc/sys_string/impl/builder.h @@ -161,7 +161,7 @@ namespace sysstr { append_many(m_impl, str, std::char_traits::length(str)); return *this; } sys_string_builder_t & append(const sys_string_t & str) - { append_access(typename sys_string_t::char_access(str)); return *this; } + { append_range(typename sys_string_t::char_access(str)); return *this; } sys_string_t build() noexcept { return util::build(m_impl); } @@ -188,8 +188,8 @@ namespace sysstr template static typename impl_type::iterator insert_many(impl_type & impl, typename impl_type::iterator pos, const Char * str, size_t len); - template - void append_access(const Access & access); + template + void append_range(const Range & range); auto storage_begin() const { return std::begin(m_impl); } @@ -271,20 +271,19 @@ namespace sysstr } template - template - inline void sys_string_builder_t::append_access(const Access & access) + template + inline void sys_string_builder_t::append_range(const Range & range) { - if constexpr (util::has_contiguous_data) + static_assert(std::is_same_v, storage_type>); + + if constexpr (std::ranges::contiguous_range) { - m_impl.append(access.data(), access.size()); + m_impl.append(std::data(range), std::size(range)); } else { - for(typename Access::size_type i = 0, count = access.size(); i < count; ++i) - { - auto c = access[i]; + for(storage_type c: range) m_impl.push_back(c); - } } } diff --git a/lib/inc/sys_string/sys_string.h b/lib/inc/sys_string/sys_string.h index cf593e0..c9bb1c4 100644 --- a/lib/inc/sys_string/sys_string.h +++ b/lib/inc/sys_string/sys_string.h @@ -45,16 +45,6 @@ namespace sysstr namespace sysstr::util { - struct char_access_data_detector - { - template - auto operator()(const CharAccess * access) noexcept(noexcept(access->data())) -> decltype(access->data()); - }; - - template - constexpr bool has_contiguous_data = - std::is_nothrow_invocable_r_v; - template class addition; From 2718ac499c7046ed4e57cd284aab7e769e7d0de4 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Thu, 14 Nov 2024 10:36:20 -0800 Subject: [PATCH 17/63] Separating utf_view and utf_access --- lib/inc/sys_string/impl/builder.h | 15 ++--- lib/inc/sys_string/impl/compare.h | 24 ++++---- lib/inc/sys_string/impl/misc.h | 34 +++++------ lib/inc/sys_string/sys_string.h | 99 +++++++++++++++++++++++-------- lib/inc/sys_string/utf_view.h | 82 ++++++++++--------------- test/test_general.cpp | 72 +++++++++++----------- 6 files changed, 174 insertions(+), 152 deletions(-) diff --git a/lib/inc/sys_string/impl/builder.h b/lib/inc/sys_string/impl/builder.h index 8be69b9..1117e3f 100644 --- a/lib/inc/sys_string/impl/builder.h +++ b/lib/inc/sys_string/impl/builder.h @@ -12,8 +12,8 @@ namespace sysstr { - template struct utf_access_traits_for> - { using type = typename sys_string_builder_t::utf_view_traits; }; + template struct utf_view_adapter_for> + { using type = typename sys_string_builder_t::utf_view_adapter; }; template class sys_string_builder_t @@ -26,17 +26,10 @@ namespace sysstr using storage_type = typename impl_type::value_type; - struct utf_view_traits + struct utf_view_adapter { - using stored_reference = const impl_type *; - - static constexpr bool enable_view = true; - static constexpr bool enable_borrowed_range = true; - static constexpr const impl_type * adapt(const sys_string_builder_t & builder) noexcept { return &builder.m_impl; } - static const impl_type & access(stored_reference ptr) noexcept - { return *ptr; } }; template @@ -275,7 +268,7 @@ namespace sysstr inline void sys_string_builder_t::append_range(const Range & range) { static_assert(std::is_same_v, storage_type>); - + if constexpr (std::ranges::contiguous_range) { m_impl.append(std::data(range), std::size(range)); diff --git a/lib/inc/sys_string/impl/compare.h b/lib/inc/sys_string/impl/compare.h index c5c5bb3..522a382 100644 --- a/lib/inc/sys_string/impl/compare.h +++ b/lib/inc/sys_string/impl/compare.h @@ -15,17 +15,17 @@ namespace sysstr #if (defined(__APPLE__) && defined(__MACH__)) template<> - inline auto sys_string_cfstr::compare(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> compare_result + inline auto sys_string_cfstr::compare(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> std::strong_ordering { auto lhs_ptr = lhs.cf_str(); auto rhs_ptr = rhs.cf_str(); if (lhs_ptr == rhs_ptr) - return ordering_equal; + return std::strong_ordering::equal; if (!lhs_ptr) - return CFStringGetLength(rhs_ptr) == 0 ? ordering_equal : ordering_less; + return CFStringGetLength(rhs_ptr) == 0 ? std::strong_ordering::equal : std::strong_ordering::less; if (!rhs_ptr) - return CFStringGetLength(lhs_ptr) == 0 ? ordering_equal : ordering_greater; + return CFStringGetLength(lhs_ptr) == 0 ? std::strong_ordering::equal : std::strong_ordering::greater; CFComparisonResult res = CFStringCompare(lhs_ptr, rhs_ptr, 0); return res <=> 0; @@ -36,17 +36,17 @@ namespace sysstr #if SYS_STRING_ENABLE_PYTHON template<> - inline auto sys_string_pystr::compare(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> compare_result + inline auto sys_string_pystr::compare(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> std::strong_ordering { auto lhs_ptr = lhs.py_str(); auto rhs_ptr = rhs.py_str(); if (lhs_ptr == rhs_ptr) - return ordering_equal; + return std::strong_ordering::equal; if (!lhs_ptr) - return PyUnicode_GetLength(rhs_ptr) == 0 ? ordering_equal : ordering_less; + return PyUnicode_GetLength(rhs_ptr) == 0 ? std::strong_ordering::equal : std::strong_ordering::less; if (!rhs_ptr) - return PyUnicode_GetLength(lhs_ptr) == 0 ? ordering_equal : ordering_greater; + return PyUnicode_GetLength(lhs_ptr) == 0 ? std::strong_ordering::equal : std::strong_ordering::greater; int res = PyUnicode_Compare(lhs_ptr, rhs_ptr); return res <=> 0; @@ -55,7 +55,7 @@ namespace sysstr #endif template - inline auto sys_string_t::compare(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> compare_result + inline auto sys_string_t::compare(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> std::strong_ordering { char_access lhs_access(lhs); char_access rhs_access(rhs); @@ -64,10 +64,10 @@ namespace sysstr } template - auto sys_string_t::compare_no_case(const sys_string_t lhs, const sys_string_t & rhs) noexcept -> compare_result + auto sys_string_t::compare_no_case(const sys_string_t lhs, const sys_string_t & rhs) noexcept -> std::strong_ordering { - utf32_view lhs_view(lhs); - utf32_view rhs_view(rhs); + utf32_access lhs_view(lhs); + utf32_access rhs_view(rhs); auto lhs_first = lhs_view.begin(); auto lhs_last = lhs_view.end(); diff --git a/lib/inc/sys_string/impl/misc.h b/lib/inc/sys_string/impl/misc.h index 83794c1..ffd7cd1 100644 --- a/lib/inc/sys_string/impl/misc.h +++ b/lib/inc/sys_string/impl/misc.h @@ -121,9 +121,9 @@ namespace sysstr inline auto sys_string_t::to_lower() const -> sys_string_t { - sys_string_t::utf32_view view(*this); + sys_string_t::utf32_access access(*this); sys_string_builder_t builder; - tolower>()(view, std::back_inserter(builder.chars())); + tolower>()(access, std::back_inserter(builder.chars())); return builder.build(); } @@ -131,9 +131,9 @@ namespace sysstr inline auto sys_string_t::to_upper() const -> sys_string_t { - sys_string_t::utf32_view view(*this); + sys_string_t::utf32_access access(*this); sys_string_builder_t builder; - toupper>()(view, std::back_inserter(builder.chars())); + toupper>()(access, std::back_inserter(builder.chars())); return builder.build(); } @@ -142,11 +142,11 @@ namespace sysstr template Pred> auto sys_string_t::trim(Pred pred) const -> sys_string_t { - sys_string_t::utf32_view view(*this); - auto trimmed_start = view.begin(); + sys_string_t::utf32_access access(*this); + auto trimmed_start = access.begin(); for( ; ; ++trimmed_start) { - if (trimmed_start == view.end()) + if (trimmed_start == access.end()) return sys_string_t(); char32_t c = *trimmed_start; @@ -154,7 +154,7 @@ namespace sysstr break; } - auto trimmed_end = view.rbegin(); + auto trimmed_end = access.rbegin(); for( ; ; ++trimmed_end) { char32_t c = *trimmed_end; @@ -169,9 +169,9 @@ namespace sysstr template Pred> auto sys_string_t::ltrim(Pred pred) const -> sys_string_t { - sys_string_t::utf32_view view(*this); - auto trimmed_start = view.begin(); - auto last = view.end(); + sys_string_t::utf32_access access(*this); + auto trimmed_start = access.begin(); + auto last = access.end(); for( ; ; ++trimmed_start) { if (trimmed_start == last) @@ -190,9 +190,9 @@ namespace sysstr inline auto sys_string_t::rtrim(Pred pred) const -> sys_string_t { - sys_string_t::utf32_view view(*this); - auto trimmed_end = view.rbegin(); - auto last = view.rend(); + sys_string_t::utf32_access access(*this); + auto trimmed_end = access.rbegin(); + auto last = access.rend(); for( ; ; ++trimmed_end) { if (trimmed_end == last) @@ -210,10 +210,10 @@ namespace sysstr template auto sys_string_t::split(OutIt dest, Search search) const -> OutIt requires(std::output_iterator && - std::is_invocable_v) + std::is_invocable_v) { - utf32_view view(*this); - return util::split>(view.begin(), view.end(), dest, search); + utf32_access access(*this); + return util::split>(access.begin(), access.end(), dest, search); } template diff --git a/lib/inc/sys_string/sys_string.h b/lib/inc/sys_string/sys_string.h index c9bb1c4..897ae8e 100644 --- a/lib/inc/sys_string/sys_string.h +++ b/lib/inc/sys_string/sys_string.h @@ -59,9 +59,6 @@ namespace sysstr std::is_same_v, char32_t>; - template struct utf_access_traits_for> - { using type = typename sys_string_t::utf_view_traits; }; - template class sys_string_t : public Storage { @@ -70,6 +67,8 @@ namespace sysstr private: using storage = Storage; + static_assert(std::ranges::random_access_range); + public: using size_type = typename storage::size_type; using storage_type = typename storage::storage_type; @@ -79,30 +78,78 @@ namespace sysstr using char_access = typename storage::char_access; - struct utf_view_traits + template + class utf_access { - using stored_reference = typename Storage::char_access; + private: + static constexpr auto source_encoding = utf_encoding_of())>>; + + using char_iterator = decltype(std::begin(std::declval())); + using char_sentinel = decltype(std::end(std::declval())); + using char_reverse_iterator = decltype(std::rbegin(std::declval())); + using char_reverse_sentinel = decltype(std::rend(std::declval())); + public: + using iterator = util::utf_iterator; + using const_iterator = iterator; + using reverse_iterator = util::utf_iterator; + using const_reverse_iterator = reverse_iterator; + + using value_type = typename iterator::value_type; + using reference = typename iterator::reference; + using const_reference = reference; + using pointer = typename iterator::pointer; + using const_pointer = pointer; + + public: + utf_access(const sys_string_t & src) noexcept(noexcept(char_access(src))) : + m_access(src) + {} + SYS_STRING_FORCE_INLINE iterator begin() const + { return iterator(std::begin(m_access), std::end(m_access)); } + SYS_STRING_FORCE_INLINE std::default_sentinel_t end() const + { return std::default_sentinel; } + SYS_STRING_FORCE_INLINE const_iterator cbegin() const + { return begin(); } + SYS_STRING_FORCE_INLINE std::default_sentinel_t cend() const + { return end(); } + SYS_STRING_FORCE_INLINE reverse_iterator rbegin() const + { return reverse_iterator(std::rbegin(m_access), std::rend(m_access)); } + SYS_STRING_FORCE_INLINE std::default_sentinel_t rend() const + { return std::default_sentinel; } + SYS_STRING_FORCE_INLINE const_reverse_iterator crbegin() const + { return rbegin(); } + SYS_STRING_FORCE_INLINE std::default_sentinel_t crend() const + { return rend(); } + + reverse_iterator reverse(iterator it) const + { return reverse_iterator(it, std::rend(m_access)); } + + iterator reverse(reverse_iterator it) const + { return iterator(it, std::end(m_access)); } - static constexpr bool enable_view = false; - static constexpr bool enable_borrowed_range = false; + template + decltype(auto) each(Func func) const + { return utf_converter::for_each_converted(m_access, func); } - static constexpr const sys_string_t & adapt(const sys_string_t & str) noexcept - { return str; } - static const stored_reference & access(const stored_reference & acc) noexcept - { return acc; } + private: + char_access m_access; }; + using utf8_access = utf_access; + using utf16_access = utf_access; + using utf32_access = utf_access; template - using utf_view = utf_view; + using utf_view [[deprecated("use utf_access")]] = utf_access; - using utf8_view = utf_view; - using utf16_view = utf_view; - using utf32_view = utf_view; + using utf8_view [[deprecated("use utf8_access")]] = utf8_access; + using utf16_view [[deprecated("use utf16_access")]] = utf16_access; + using utf32_view [[deprecated("use utf32_access")]] = utf32_access; + + using compare_result [[deprecated("use std::strong_ordering")]] = std::strong_ordering; + static constexpr std::strong_ordering ordering_less [[deprecated("use std::strong_ordering::less")]] = std::strong_ordering::less; + static constexpr std::strong_ordering ordering_equal [[deprecated("use std::strong_ordering::less")]] = std::strong_ordering::equal; + static constexpr std::strong_ordering ordering_greater [[deprecated("use std::strong_ordering::less")]] = std::strong_ordering::greater; - using compare_result = std::strong_ordering; - static constexpr compare_result ordering_less = std::strong_ordering::less; - static constexpr compare_result ordering_equal = std::strong_ordering::equal; - static constexpr compare_result ordering_greater = std::strong_ordering::greater; public: sys_string_t() noexcept = default; @@ -136,11 +183,11 @@ namespace sysstr sys_string_t(std::ranges::data(std::forward(val)), std::ranges::size(std::forward(val))) {} - sys_string_t(const typename utf32_view::iterator & first, const typename utf32_view::iterator & last): + sys_string_t(const typename utf32_access::iterator & first, const typename utf32_access::iterator & last): sys_string_t(first.storage_current(), last.storage_current()) {} - sys_string_t(const typename utf32_view::iterator & first, std::default_sentinel_t): + sys_string_t(const typename utf32_access::iterator & first, std::default_sentinel_t): sys_string_t(first.storage_current(), first.storage_last()) {} @@ -192,9 +239,9 @@ namespace sysstr { return compare(lhs, rhs); } - friend auto compare(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> compare_result + friend auto compare(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> std::strong_ordering { return sys_string_t::compare(lhs, rhs); } - friend auto compare_no_case(const sys_string_t lhs, const sys_string_t & rhs) noexcept -> compare_result + friend auto compare_no_case(const sys_string_t lhs, const sys_string_t & rhs) noexcept -> std::strong_ordering { return sys_string_t::compare_no_case(lhs, rhs); } template StringOrChar1, sys_string_or_char StringOrChar2> @@ -214,7 +261,7 @@ namespace sysstr template auto split(OutIt dest, Search search) const -> OutIt requires(std::output_iterator && - std::is_invocable_v); + std::is_invocable_v); template StringOrChar, class OutIt> auto split(OutIt dest, const StringOrChar & sep, size_t max_split = std::numeric_limits::max()) const -> OutIt @@ -266,8 +313,8 @@ namespace sysstr auto partition_at_last(const StringOrChar & divider) const -> std::optional>; private: - static auto compare(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> compare_result; - static auto compare_no_case(const sys_string_t lhs, const sys_string_t & rhs) noexcept -> compare_result; + static auto compare(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> std::strong_ordering; + static auto compare_no_case(const sys_string_t lhs, const sys_string_t & rhs) noexcept -> std::strong_ordering; }; diff --git a/lib/inc/sys_string/utf_view.h b/lib/inc/sys_string/utf_view.h index e52c9f5..719619a 100644 --- a/lib/inc/sys_string/utf_view.h +++ b/lib/inc/sys_string/utf_view.h @@ -273,60 +273,44 @@ namespace sysstr } template - concept utf_access_traits = requires(const Container & cont) + concept utf_view_adapter = requires(const Container & cont) { - typename T::stored_reference; - - { T::enable_view } -> std::convertible_to; - { T::enable_borrowed_range } -> std::convertible_to; - { typename T::stored_reference(T::adapt(cont)) }; - { T::access(std::declval()) } -> std::ranges::bidirectional_range; - } && (T::enable_view || !T::enable_view) && (T::enable_borrowed_range || !T::enable_borrowed_range); + { T::adapt(cont) } -> std::semiregular; + { *T::adapt(cont) } -> std::ranges::input_range; + }; - template - struct range_utf_access_traits + template + struct range_utf_view_adapter { - using stored_reference = std::add_pointer_t>>; - - static constexpr bool enable_view = true; - static constexpr bool enable_borrowed_range = true; - - static decltype(auto) adapt(const std::add_const_t> & src) noexcept - { return &src; } - static std::add_const_t> & access(stored_reference ptr) noexcept - { return *ptr; } + static auto adapt(const std::add_const_t> & src) noexcept + { return std::addressof(src); } }; - template struct utf_access_traits_for - { using type = range_utf_access_traits; }; + template struct utf_view_adapter_for + { using type = range_utf_view_adapter; }; template class utf_view { private: - using traits = typename utf_access_traits_for::type; - - static_assert(utf_access_traits); - static_assert(std::ranges::input_range()))>>); + using adapter = typename utf_view_adapter_for::type; + static_assert(utf_view_adapter); + + using range_pointer = decltype(adapter::adapt(std::declval())); + using range = decltype(*std::declval()); - using stored_reference = typename traits::stored_reference; - static constexpr bool is_reversible = ranges::reverse_traversable_range< - std::remove_reference_t()))>>; - static constexpr auto source_encoding = utf_encoding_of< - std::ranges::range_value_t()))>>; + static constexpr bool is_reversible = ranges::reverse_traversable_range>; + static constexpr auto source_encoding = utf_encoding_of>; - using access_iterator = decltype(std::begin(traits::access(std::declval()))); - using access_sentinel = decltype(std::end(traits::access(std::declval()))); + using access_iterator = decltype(std::begin(*std::declval())); + using access_sentinel = decltype(std::end(*std::declval())); using access_reverse_iterator = std::conditional_t()))), + decltype(std::rbegin(std::declval())), void>; using access_reverse_sentinel = std::conditional_t()))), + decltype(std::rend(std::declval())), void>; - using iter_direction = util::iter_direction; - static constexpr auto forward = iter_direction::forward; - static constexpr auto backward = iter_direction::backward; public: using iterator = util::utf_iterator; using const_iterator = iterator; @@ -341,14 +325,12 @@ namespace sysstr using pointer = typename iterator::pointer; using const_pointer = pointer; - static constexpr bool enable_view = traits::enable_view; - static constexpr bool enable_borrowed_range = traits::enable_borrowed_range; public: - utf_view(const Container & src) noexcept(noexcept(stored_reference(traits::adapt(src)))) : - m_ref(traits::adapt(src)) + utf_view(const Container & src) noexcept(noexcept(range_pointer(adapter::adapt(src)))) : + m_ptr(adapter::adapt(src)) {} SYS_STRING_FORCE_INLINE iterator begin() const - { return iterator(std::begin(traits::access(this->m_ref)), std::end(traits::access(this->m_ref))); } + { return iterator(std::begin(*m_ptr), std::end(*m_ptr)); } SYS_STRING_FORCE_INLINE std::default_sentinel_t end() const { return std::default_sentinel; } SYS_STRING_FORCE_INLINE const_iterator cbegin() const @@ -356,7 +338,7 @@ namespace sysstr SYS_STRING_FORCE_INLINE std::default_sentinel_t cend() const { return end(); } SYS_STRING_FORCE_INLINE reverse_iterator rbegin() const requires(is_reversible) - { return reverse_iterator(std::rbegin(traits::access(this->m_ref)), std::rend(traits::access(this->m_ref))); } + { return reverse_iterator(std::rbegin(*m_ptr), std::rend(*m_ptr)); } SYS_STRING_FORCE_INLINE std::default_sentinel_t rend() const requires(is_reversible) { return std::default_sentinel; } SYS_STRING_FORCE_INLINE const_reverse_iterator crbegin() const requires(is_reversible) @@ -365,21 +347,21 @@ namespace sysstr { return rend(); } reverse_iterator reverse(iterator it) const requires(is_reversible) - { return reverse_iterator(it, std::rend(traits::access(this->m_ref))); } + { return reverse_iterator(it, std::rend(*m_ptr)); } iterator reverse(reverse_iterator it) const requires(is_reversible) - { return iterator(it, std::end(traits::access(this->m_ref))); } + { return iterator(it, std::end(*m_ptr)); } template decltype(auto) each(Func func) const { - return utf_converter::for_each_converted(traits::access(this->m_ref), func); + return utf_converter::for_each_converted(*m_ptr, func); } private: - stored_reference m_ref; + range_pointer m_ptr; }; - + template struct as_utf_func #if __cpp_lib_ranges >= 202202L @@ -410,10 +392,10 @@ namespace sysstr namespace std::ranges { template - constexpr bool enable_view> = sysstr::utf_view::enable_view; + constexpr bool enable_view> = true; template - constexpr bool enable_borrowed_range> = sysstr::utf_view::enable_borrowed_range; + constexpr bool enable_borrowed_range> = true; } diff --git a/test/test_general.cpp b/test/test_general.cpp index 8addcca..ff86fda 100644 --- a/test/test_general.cpp +++ b/test/test_general.cpp @@ -26,26 +26,26 @@ static_assert(std::ranges::random_access_range); static_assert(!std::ranges::view); static_assert(!std::ranges::borrowed_range); -static_assert(std::ranges::forward_range); -static_assert(!std::ranges::bidirectional_range); -static_assert(!std::ranges::common_range); -static_assert(!std::ranges::view); -static_assert(!std::ranges::borrowed_range); -static_assert(ranges::custom_reverse_traversable_range); - -static_assert(std::ranges::forward_range); -static_assert(!std::ranges::bidirectional_range); -static_assert(!std::ranges::common_range); -static_assert(!std::ranges::view); -static_assert(!std::ranges::borrowed_range); -static_assert(ranges::custom_reverse_traversable_range); - -static_assert(std::ranges::forward_range); -static_assert(!std::ranges::bidirectional_range); -static_assert(!std::ranges::common_range); -static_assert(!std::ranges::view); -static_assert(!std::ranges::borrowed_range); -static_assert(ranges::custom_reverse_traversable_range); +static_assert(std::ranges::forward_range); +static_assert(!std::ranges::bidirectional_range); +static_assert(!std::ranges::common_range); +static_assert(!std::ranges::view); +static_assert(!std::ranges::borrowed_range); +static_assert(ranges::custom_reverse_traversable_range); + +static_assert(std::ranges::forward_range); +static_assert(!std::ranges::bidirectional_range); +static_assert(!std::ranges::common_range); +static_assert(!std::ranges::view); +static_assert(!std::ranges::borrowed_range); +static_assert(ranges::custom_reverse_traversable_range); + +static_assert(std::ranges::forward_range); +static_assert(!std::ranges::bidirectional_range); +static_assert(!std::ranges::common_range); +static_assert(!std::ranges::view); +static_assert(!std::ranges::borrowed_range); +static_assert(ranges::custom_reverse_traversable_range); template bool is_eq(T val) @@ -99,7 +99,7 @@ TEST_CASE( "Iteration", "[general]" ) { SECTION("utf8") { std::string converted; - for (char c: sys_string::utf8_view(str)) + for (char c: sys_string::utf8_access(str)) { converted.push_back(c); } @@ -107,12 +107,12 @@ TEST_CASE( "Iteration", "[general]" ) { CHECK(converted == expected); converted.clear(); - sys_string::utf8_view view(str); + sys_string::utf8_access view(str); std::ranges::copy(view.rbegin(), view.rend(), std::back_inserter(converted)); CHECK(converted == std::string{expected.rbegin(), expected.rend()}); converted.clear(); - std::ranges::copy(sys_string::utf8_view(str), std::back_inserter(converted)); + std::ranges::copy(sys_string::utf8_access(str), std::back_inserter(converted)); CHECK(converted == expected); converted.clear(); @@ -120,7 +120,7 @@ TEST_CASE( "Iteration", "[general]" ) { CHECK(converted == expected); static_assert(std::is_same_v); + sys_string::utf8_access::iterator>); bool res = std::ranges::equal(as_utf8(sys_string::char_access(str)) | std::views::take(1), std::array{'a'}); CHECK(res); @@ -129,7 +129,7 @@ TEST_CASE( "Iteration", "[general]" ) { CHECK(res); converted.clear(); - for (char c: sys_string::utf8_view(empty)) + for (char c: sys_string::utf8_access(empty)) { converted.push_back(c); } @@ -138,7 +138,7 @@ TEST_CASE( "Iteration", "[general]" ) { SECTION("utf16") { std::u16string converted; - for (char16_t c: sys_string::utf16_view(str)) + for (char16_t c: sys_string::utf16_access(str)) { converted.push_back(c); } @@ -146,12 +146,12 @@ TEST_CASE( "Iteration", "[general]" ) { CHECK(converted == expected); converted.clear(); - sys_string::utf16_view view(str); + sys_string::utf16_access view(str); std::ranges::copy(view.rbegin(), view.rend(), std::back_inserter(converted)); CHECK(converted == std::u16string{expected.rbegin(), expected.rend()}); converted.clear(); - std::ranges::copy(sys_string::utf16_view(str), std::back_inserter(converted)); + std::ranges::copy(sys_string::utf16_access(str), std::back_inserter(converted)); CHECK(converted == expected); converted.clear(); @@ -159,7 +159,7 @@ TEST_CASE( "Iteration", "[general]" ) { CHECK(converted == expected); static_assert(std::is_same_v); + sys_string::utf16_access::iterator>); bool res = std::ranges::equal(as_utf16(sys_string::char_access(str)) | std::views::take(1), std::array{'a'}); CHECK(res); @@ -168,7 +168,7 @@ TEST_CASE( "Iteration", "[general]" ) { CHECK(res); converted.clear(); - for (char16_t c: sys_string::utf16_view(empty)) + for (char16_t c: sys_string::utf16_access(empty)) { converted.push_back(c); } @@ -177,7 +177,7 @@ TEST_CASE( "Iteration", "[general]" ) { SECTION("utf32") { std::u32string converted; - for (char32_t c: sys_string::utf32_view(str)) + for (char32_t c: sys_string::utf32_access(str)) { converted.push_back(c); } @@ -186,12 +186,12 @@ TEST_CASE( "Iteration", "[general]" ) { converted.clear(); - sys_string::utf32_view view(str); + sys_string::utf32_access view(str); std::ranges::copy(view.rbegin(), view.rend(), std::back_inserter(converted)); CHECK(converted == std::u32string{expected.rbegin(), expected.rend()}); converted.clear(); - std::ranges::copy(sys_string::utf32_view(str), std::back_inserter(converted)); + std::ranges::copy(sys_string::utf32_access(str), std::back_inserter(converted)); CHECK(converted == expected); converted.clear(); @@ -199,7 +199,7 @@ TEST_CASE( "Iteration", "[general]" ) { CHECK(converted == expected); static_assert(std::is_same_v); + sys_string::utf32_access::iterator>); bool res = std::ranges::equal(as_utf32(sys_string::char_access(str)) | std::views::take(1), std::array{'a'}); CHECK(res); @@ -208,7 +208,7 @@ TEST_CASE( "Iteration", "[general]" ) { CHECK(res); converted.clear(); - for (char32_t c: sys_string::utf16_view(empty)) + for (char32_t c: sys_string::utf16_access(empty)) { converted.push_back(c); } @@ -383,7 +383,7 @@ TEST_CASE( "Split", "[general]" ) { CHECK(splitter(S("a"), S("")) == std::vector({S("a")})); CHECK(splitter(S("ab"), S("")) == std::vector({S("ab")})); - auto searcher = [] (sys_string::utf32_view::iterator str_start, std::default_sentinel_t str_end) noexcept { + auto searcher = [] (sys_string::utf32_access::iterator str_start, std::default_sentinel_t str_end) noexcept { constexpr char32_t seps[] = U"xyz"; From 0d8b807d792478e9f40f762fa062b5d7952459c2 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Thu, 14 Nov 2024 11:23:55 -0800 Subject: [PATCH 18/63] Renaming various confusing buffers --- .../sys_string/impl/platforms/android_java.h | 20 ++-- .../sys_string/impl/platforms/apple_cfstr.h | 2 +- .../impl/platforms/emscripten_javascript.h | 18 ++-- .../sys_string/impl/platforms/python_any.h | 2 +- .../sys_string/impl/platforms/unix_generic.h | 13 ++- .../sys_string/impl/platforms/windows_bstr.h | 2 +- .../impl/platforms/windows_generic.h | 12 +-- .../impl/platforms/windows_hstring.h | 2 +- lib/inc/sys_string/impl/util/char_buffer.h | 8 +- lib/inc/sys_string/impl/util/generic_buffer.h | 98 +++++++++---------- 10 files changed, 88 insertions(+), 89 deletions(-) diff --git a/lib/inc/sys_string/impl/platforms/android_java.h b/lib/inc/sys_string/impl/platforms/android_java.h index 795d3ee..3b195f9 100644 --- a/lib/inc/sys_string/impl/platforms/android_java.h +++ b/lib/inc/sys_string/impl/platforms/android_java.h @@ -25,12 +25,12 @@ namespace sysstr::util }; template - using static_buffer = generic::static_buffer; - using dynamic_buffer = generic::dynamic_buffer; + using static_string = generic::static_string; + using dynamic_string = generic::dynamic_string; - using buffer = generic::buffer; + using any_string = generic::any_string; - using builder_impl = generic::buffer_builder; + using builder_impl = generic::any_string_builder; using char_access = generic::char_access; @@ -101,19 +101,19 @@ namespace sysstr throw std::runtime_error(desc); } - static buffer create_buffer(JNIEnv * env, jstring str) + static any_string create_buffer(JNIEnv * env, jstring str) { if (!str) - return buffer(nullptr); + return any_string(nullptr); jsize length = str ? env->GetStringLength(str) : 0; if (length < 0) raise_exception_on_jni_error(env, "GetStringLength failed"); if (length == 0) - return buffer(); + return any_string(); - buffer ret(length); + any_string ret(length); env->GetStringRegion(str, 0, length, reinterpret_cast(ret.data())); return ret; } @@ -143,8 +143,8 @@ namespace sysstr #define SYS_STRING_STATIC_ANDROID(x) ([] () noexcept -> ::sysstr::sys_string_android { \ constexpr ::size_t size = sizeof(u##x) / sizeof(char16_t); \ - static const ::sysstr::util::static_buffer sbuf{0, true, u##x}; \ - ::sysstr::util::buffer buf((::sysstr::util::dynamic_buffer *)&sbuf, size - 1, 0); \ + static const ::sysstr::util::static_string sbuf{0, true, u##x}; \ + ::sysstr::util::any_string buf((::sysstr::util::dynamic_string *)&sbuf, size - 1, 0); \ return *reinterpret_cast<::sysstr::sys_string_android *>(&buf); \ }()) diff --git a/lib/inc/sys_string/impl/platforms/apple_cfstr.h b/lib/inc/sys_string/impl/platforms/apple_cfstr.h index ed0e800..4998e00 100644 --- a/lib/inc/sys_string/impl/platforms/apple_cfstr.h +++ b/lib/inc/sys_string/impl/platforms/apple_cfstr.h @@ -126,7 +126,7 @@ namespace sysstr::util public: constexpr size_type capacity() const noexcept { return m_capacity; } - constexpr value_type * buffer() const noexcept + constexpr value_type * data() const noexcept { return std::visit([](const auto & val) { return const_cast(val.data()); diff --git a/lib/inc/sys_string/impl/platforms/emscripten_javascript.h b/lib/inc/sys_string/impl/platforms/emscripten_javascript.h index a9d369b..1c5b74f 100644 --- a/lib/inc/sys_string/impl/platforms/emscripten_javascript.h +++ b/lib/inc/sys_string/impl/platforms/emscripten_javascript.h @@ -24,12 +24,12 @@ namespace sysstr::util }; template - using emscripten_static_buffer = generic::static_buffer; - using emscripten_dynamic_buffer = generic::dynamic_buffer; + using emscripten_static_string = generic::static_string; + using emscripten_dynamic_string = generic::dynamic_string; - using emscripten_buffer = generic::buffer; + using emscripten_any_string = generic::any_string; - using emscripten_builder_impl = generic::buffer_builder; + using emscripten_builder_impl = generic::any_string_builder; using emscripten_char_access = generic::char_access; @@ -114,7 +114,7 @@ namespace sysstr { super::swap(other); } private: - static auto create_buffer(emscripten::EM_VAL js_str) -> buffer + static auto create_buffer(emscripten::EM_VAL js_str) -> any_string { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdollar-in-identifier-extension" @@ -125,9 +125,9 @@ namespace sysstr }, js_str); if (length == 0) - return buffer(); + return any_string(); - buffer ret(length); + any_string ret(length); EM_ASM({ let str = Emval.toValue($0); let ptr = $1; @@ -167,8 +167,8 @@ namespace sysstr #define SYS_STRING_STATIC_EMSCRIPTEN(x) ([] () noexcept -> ::sysstr::sys_string_emscripten { \ constexpr ::size_t size = sizeof(u##x) / sizeof(char16_t); \ - static const ::sysstr::util::emscripten_static_buffer sbuf{0, true, u##x}; \ - ::sysstr::util::emscripten_buffer buf((::sysstr::util::emscripten_dynamic_buffer *)&sbuf, size - 1, 0); \ + static const ::sysstr::util::emscripten_static_string sbuf{0, true, u##x}; \ + ::sysstr::util::emscripten_any_string buf((::sysstr::util::emscripten_dynamic_string *)&sbuf, size - 1, 0); \ return *reinterpret_cast<::sysstr::sys_string_emscripten *>(&buf); \ }()) diff --git a/lib/inc/sys_string/impl/platforms/python_any.h b/lib/inc/sys_string/impl/platforms/python_any.h index a4cf647..f69d9c0 100644 --- a/lib/inc/sys_string/impl/platforms/python_any.h +++ b/lib/inc/sys_string/impl/platforms/python_any.h @@ -119,7 +119,7 @@ namespace sysstr::util public: constexpr size_type capacity() const noexcept { return m_capacity; } - constexpr value_type * buffer() const noexcept + constexpr value_type * data() const noexcept { return std::visit([](const auto & val) { return const_cast(val.data()); diff --git a/lib/inc/sys_string/impl/platforms/unix_generic.h b/lib/inc/sys_string/impl/platforms/unix_generic.h index 04e3ea4..1ab88ad 100644 --- a/lib/inc/sys_string/impl/platforms/unix_generic.h +++ b/lib/inc/sys_string/impl/platforms/unix_generic.h @@ -16,7 +16,6 @@ namespace sysstr::util { - struct generic_traits { using storage_type = char; @@ -27,12 +26,12 @@ namespace sysstr::util }; template - using generic_static_buffer = generic::static_buffer; - using generic_dynamic_buffer = generic::dynamic_buffer; + using generic_static_string = generic::static_string; + using generic_dynamic_string = generic::dynamic_string; - using generic_buffer = generic::buffer; + using generic_any_string = generic::any_string; - using generic_builder_impl = generic::buffer_builder; + using generic_builder_impl = generic::any_string_builder; using generic_char_access = generic::char_access; @@ -117,8 +116,8 @@ namespace sysstr #define SYS_STRING_STATIC_GENERIC(x) ([] () noexcept -> ::sysstr::sys_string_generic { \ constexpr ::size_t size = sizeof(x) / sizeof(char); \ - static const ::sysstr::util::generic_static_buffer sbuf{0, true, x}; \ - ::sysstr::util::generic_buffer buf((::sysstr::util::generic_dynamic_buffer *)&sbuf, size - 1, 0); \ + static const ::sysstr::util::generic_static_string sbuf{0, true, x}; \ + ::sysstr::util::generic_any_string buf((::sysstr::util::generic_dynamic_string *)&sbuf, size - 1, 0); \ return *reinterpret_cast<::sysstr::sys_string_generic *>(&buf); \ }()) diff --git a/lib/inc/sys_string/impl/platforms/windows_bstr.h b/lib/inc/sys_string/impl/platforms/windows_bstr.h index bfd4a54..afaa662 100644 --- a/lib/inc/sys_string/impl/platforms/windows_bstr.h +++ b/lib/inc/sys_string/impl/platforms/windows_bstr.h @@ -480,7 +480,7 @@ namespace sysstr::util constexpr size_type capacity() const noexcept { return m_capacity; } - value_type * buffer() const noexcept + value_type * data() const noexcept { return m_buf.chars(); } static constexpr size_type max_size() noexcept { return bstr_traits::max_size; } diff --git a/lib/inc/sys_string/impl/platforms/windows_generic.h b/lib/inc/sys_string/impl/platforms/windows_generic.h index 4294c28..33ed296 100644 --- a/lib/inc/sys_string/impl/platforms/windows_generic.h +++ b/lib/inc/sys_string/impl/platforms/windows_generic.h @@ -25,12 +25,12 @@ namespace sysstr::util }; template - using win_generic_static_buffer = generic::static_buffer; - using win_generic_dynamic_buffer = generic::dynamic_buffer; + using win_generic_static_string = generic::static_string; + using win_generic_dynamic_string = generic::dynamic_string; - using win_generic_buffer = generic::buffer; + using win_generic_any_string = generic::any_string; - using win_generic_builder_impl = generic::buffer_builder; + using win_generic_builder_impl = generic::any_string_builder; using win_generic_char_access = generic::char_access; @@ -112,8 +112,8 @@ namespace sysstr #define SYS_STRING_STATIC_WIN_GENERIC(x) ([] () noexcept -> ::sysstr::sys_string_win_generic { \ constexpr ::size_t size = sizeof(u##x) / sizeof(char16_t); \ - static const ::sysstr::util::win_generic_static_buffer sbuf{0, true, u##x}; \ - ::sysstr::util::win_generic_buffer buf((::sysstr::util::win_generic_dynamic_buffer *)&sbuf, size - 1, 0); \ + static const ::sysstr::util::win_generic_static_string sbuf{0, true, u##x}; \ + ::sysstr::util::win_generic_any_string buf((::sysstr::util::win_generic_dynamic_string *)&sbuf, size - 1, 0); \ return *reinterpret_cast<::sysstr::sys_string_win_generic *>(&buf); \ }()) diff --git a/lib/inc/sys_string/impl/platforms/windows_hstring.h b/lib/inc/sys_string/impl/platforms/windows_hstring.h index 2a1fedc..7d2ff9d 100644 --- a/lib/inc/sys_string/impl/platforms/windows_hstring.h +++ b/lib/inc/sys_string/impl/platforms/windows_hstring.h @@ -93,7 +93,7 @@ namespace sysstr::util constexpr size_type capacity() const noexcept { return m_capacity; } - constexpr value_type * buffer() const noexcept + constexpr value_type * data() const noexcept { return m_buffer; } static constexpr size_type max_size() noexcept { return hstring_traits::max_size; } diff --git a/lib/inc/sys_string/impl/util/char_buffer.h b/lib/inc/sys_string/impl/util/char_buffer.h index f667eed..dc07679 100644 --- a/lib/inc/sys_string/impl/util/char_buffer.h +++ b/lib/inc/sys_string/impl/util/char_buffer.h @@ -124,13 +124,13 @@ namespace sysstr::util { return this->begin()[idx]; } iterator begin() const noexcept - { return this->m_storage.buffer(); } + { return this->m_storage.data(); } iterator end() const noexcept - { return this->m_storage.buffer() + this->m_size; } + { return this->m_storage.data() + this->m_size; } const_iterator cbegin() const noexcept - { return this->m_storage.buffer(); } + { return this->m_storage.data(); } const_iterator cend() const noexcept - { return this->m_storage.buffer() + this->m_size; } + { return this->m_storage.data() + this->m_size; } reverse_iterator rbegin() const noexcept { return reverse_iterator(end()); } reverse_iterator rend() const noexcept diff --git a/lib/inc/sys_string/impl/util/generic_buffer.h b/lib/inc/sys_string/impl/util/generic_buffer.h index c9902d9..24edb9a 100644 --- a/lib/inc/sys_string/impl/util/generic_buffer.h +++ b/lib/inc/sys_string/impl/util/generic_buffer.h @@ -21,22 +21,22 @@ namespace sysstr::util::generic { template - class dynamic_buffer + class dynamic_string { public: using size_type = SizeT; using value_type = CharT; public: - static dynamic_buffer * create(SizeT len) - { return new (len) dynamic_buffer(); } + static dynamic_string * create(SizeT len) + { return new (len) dynamic_string(); } - static dynamic_buffer * reallocate(dynamic_buffer * original, SizeT len) + static dynamic_string * reallocate(dynamic_string * original, SizeT len) { - dynamic_buffer * new_ptr = (dynamic_buffer *)realloc(original, sizeof(dynamic_buffer) + len * sizeof(CharT)); + dynamic_string * new_ptr = (dynamic_string *)realloc(original, sizeof(dynamic_string) + len * sizeof(CharT)); if (!new_ptr) throw std::bad_alloc(); if (!original) - new (new_ptr) dynamic_buffer(); + new (new_ptr) dynamic_string(); return new_ptr; } @@ -64,10 +64,10 @@ namespace sysstr::util::generic { return this->m_chars; } private: - dynamic_buffer() noexcept = default; - dynamic_buffer(const dynamic_buffer &) = delete; - dynamic_buffer & operator=(const dynamic_buffer &) = delete; - ~dynamic_buffer() = default; + dynamic_string() noexcept = default; + dynamic_string(const dynamic_string &) = delete; + dynamic_string & operator=(const dynamic_string &) = delete; + ~dynamic_string() = default; static void * operator new(size_t length, SizeT str_length) { @@ -91,9 +91,9 @@ namespace sysstr::util::generic CharT m_chars[1]; //this accounts for null terminator }; - //this needs to be layout compatible with dynamic_buffer + //this needs to be layout compatible with dynamic_string template - struct static_buffer + struct static_string { int32_t not_a_ref_count; bool is_static; @@ -101,27 +101,27 @@ namespace sysstr::util::generic }; template - class buffer + class any_string { private: static constexpr uintptr_t dynamic_flag = 0b01; - using dynamic_type = dynamic_buffer; + using dynamic_type = dynamic_string; public: static constexpr SizeT max_size = SizeT(std::numeric_limits>::max() - sizeof(dynamic_type)) / sizeof(CharT); public: - buffer() noexcept + any_string() noexcept { this->set_empty(); } - buffer(std::nullptr_t) noexcept + any_string(std::nullptr_t) noexcept { this->set_dynamic(nullptr, 0); } - buffer(dynamic_type * buf, SizeT size, int) noexcept + any_string(dynamic_type * buf, SizeT size, int) noexcept { this->set_dynamic(buf, size); } - buffer(SizeT length) + any_string(SizeT length) { if (length <= max_small_length) { @@ -135,11 +135,11 @@ namespace sysstr::util::generic } template - buffer(const Char * str, size_t length) + any_string(const Char * str, size_t length) { if constexpr (utf_encoding_of == utf_encoding_of) { - SizeT our_size = buffer::ensure_valid_size(length); + SizeT our_size = any_string::ensure_valid_size(length); CharT * data; if (our_size <= max_small_length) { @@ -158,7 +158,7 @@ namespace sysstr::util::generic else { using converter = utf_converter, utf_encoding_of>; - SizeT our_size = buffer::ensure_valid_size(converter::converted_length(str, str + length)); + SizeT our_size = any_string::ensure_valid_size(converter::converted_length(str, str + length)); CharT * data; if (our_size <= max_small_length) { @@ -208,18 +208,18 @@ namespace sysstr::util::generic } - ~buffer() noexcept + ~any_string() noexcept { if (auto buf = (this->is_dynamic() ? this->get_dynamic() : nullptr)) buf->sub_ref(); } - buffer(const buffer & src) noexcept + any_string(const any_string & src) noexcept { memcpy(&m_data, &src.m_data, sizeof(m_data)); if (auto buf = (this->is_dynamic() ? this->get_dynamic() : nullptr)) buf->add_ref(); } - buffer(buffer && src) noexcept + any_string(any_string && src) noexcept { //Good boy GCC 12! src.m_data is indeed not necessarily fully initialized #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ >= 12 @@ -232,19 +232,19 @@ namespace sysstr::util::generic #endif src.set_empty(); } - buffer & operator=(const buffer & rhs) noexcept + any_string & operator=(const any_string & rhs) noexcept { - buffer temp(rhs); + any_string temp(rhs); return *this = std::move(temp); } - buffer & operator=(buffer && rhs) noexcept + any_string & operator=(any_string && rhs) noexcept { - this->~buffer(); - new (this) buffer(std::move(rhs)); + this->~any_string(); + new (this) any_string(std::move(rhs)); return *this; } - void swap(buffer & other) noexcept + void swap(any_string & other) noexcept { decltype(m_data) temp; memcpy(&temp, &other.m_data, sizeof(m_data)); @@ -265,7 +265,7 @@ namespace sysstr::util::generic } CharT * data() noexcept - { return const_cast(const_cast(this)->data()); } + { return const_cast(const_cast(this)->data()); } SizeT size() const noexcept { return this->is_dynamic() ? this->get_dynamic_size() : this->get_static_size(); } @@ -292,15 +292,15 @@ namespace sysstr::util::generic { this->marker_byte() = std::byte(0); } - void set_dynamic(dynamic_type * buffer, SizeT size) noexcept + void set_dynamic(dynamic_type * any_string, SizeT size) noexcept { - this->dynamic_ptr_value() = (uintptr_t(buffer) | buffer::dynamic_flag); + this->dynamic_ptr_value() = (uintptr_t(any_string) | any_string::dynamic_flag); this->dynamic_size_value() = size; } bool is_dynamic() const noexcept - { return this->dynamic_ptr_value() & buffer::dynamic_flag; } + { return this->dynamic_ptr_value() & any_string::dynamic_flag; } dynamic_type * get_dynamic() const noexcept - { return reinterpret_cast(this->dynamic_ptr_value() & ~buffer::dynamic_flag); } + { return reinterpret_cast(this->dynamic_ptr_value() & ~any_string::dynamic_flag); } SizeT get_dynamic_size() const noexcept { return this->dynamic_size_value(); } void set_dynamic_size(SizeT size) noexcept @@ -314,7 +314,7 @@ namespace sysstr::util::generic static SizeT ensure_valid_size(size_t len) { - if (len > buffer::max_size) + if (len > any_string::max_size) throw std::bad_alloc(); return SizeT(len); } @@ -337,7 +337,7 @@ namespace sysstr::util::generic return *(reinterpret_cast(&this->m_data[data_size]) - 1); } uintptr_t & dynamic_ptr_value() noexcept - { return const_cast(const_cast(this)->dynamic_ptr_value()); } + { return const_cast(const_cast(this)->dynamic_ptr_value()); } const uintptr_t & dynamic_size_value() const noexcept { @@ -347,7 +347,7 @@ namespace sysstr::util::generic return *(reinterpret_cast(&this->m_data[data_size]) - 2); } uintptr_t & dynamic_size_value() noexcept - { return const_cast(const_cast(this)->dynamic_size_value()); } + { return const_cast(const_cast(this)->dynamic_size_value()); } const CharT * get_static_data() const noexcept { @@ -357,7 +357,7 @@ namespace sysstr::util::generic return reinterpret_cast(&this->m_data[0]); } CharT * get_static_data() noexcept - { return const_cast(const_cast(this)->get_static_data()); } + { return const_cast(const_cast(this)->get_static_data()); } const std::byte & marker_byte() const noexcept { @@ -367,7 +367,7 @@ namespace sysstr::util::generic return this->m_data[data_size - 1]; } std::byte & marker_byte() noexcept - { return const_cast(const_cast(this)->marker_byte()); } + { return const_cast(const_cast(this)->marker_byte()); } }; @@ -395,9 +395,9 @@ namespace sysstr::util::generic using const_reverse_iterator = reverse_iterator; public: - char_access(const buffer & buffer) noexcept: - m_chars(buffer.data()), - m_size(buffer.size()) + char_access(const any_string & storage) noexcept: + m_chars(storage.data()), + m_size(storage.size()) { } template @@ -461,7 +461,7 @@ namespace sysstr::util::generic class builder_storage { private: - using buffer_t = generic::buffer; + using buffer_t = generic::any_string; public: using value_type = CharT; using size_type = SizeT; @@ -486,7 +486,7 @@ namespace sysstr::util::generic constexpr size_type capacity() const noexcept { return this->m_capacity; } - constexpr value_type * buffer() const noexcept + constexpr value_type * data() const noexcept { return this->m_buf.data(); } static constexpr size_type max_size() noexcept { return buffer_t::max_size; } @@ -509,10 +509,10 @@ namespace sysstr::util::generic }; template - using buffer_builder= char_buffer>; + using any_string_builder= char_buffer>; template - inline buffer convert_to_string(buffer_builder & builder) noexcept + inline any_string convert_to_string(any_string_builder & builder) noexcept { auto size = builder.size(); auto buf = builder.release(); @@ -525,7 +525,7 @@ namespace sysstr::util::generic { friend generic::char_access; protected: - using buffer = generic::buffer; + using buffer = generic::any_string; using char_access = generic::char_access; public: using size_type = SizeT; @@ -571,7 +571,7 @@ namespace sysstr::util::generic { return m_buffer.size(); } auto operator[](SizeT idx) const noexcept -> CharT - { return m_buffer.buffer()[idx]; } + { return m_buffer.data()[idx]; } auto swap(storage & other) noexcept -> void { m_buffer.swap(other.m_buffer); } From f401b58168ace6dc1686bcfcea3cb7706063f692 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Thu, 14 Nov 2024 11:31:54 -0800 Subject: [PATCH 19/63] Getting rid of more buffers --- lib/CMakeLists.txt | 4 +-- .../sys_string/impl/platforms/android_java.h | 2 +- .../sys_string/impl/platforms/apple_cfstr.h | 6 ++--- .../impl/platforms/emscripten_javascript.h | 2 +- .../sys_string/impl/platforms/python_any.h | 4 +-- .../sys_string/impl/platforms/unix_generic.h | 2 +- .../sys_string/impl/platforms/windows_bstr.h | 6 ++--- .../impl/platforms/windows_generic.h | 2 +- .../impl/platforms/windows_hstring.h | 4 +-- .../util/{char_buffer.h => char_vector.h} | 18 ++++++------- .../util/{generic_buffer.h => generic_impl.h} | 8 +++--- lib/inc/sys_string/impl/util/util.h | 25 ------------------- 12 files changed, 29 insertions(+), 54 deletions(-) rename lib/inc/sys_string/impl/util/{char_buffer.h => char_vector.h} (94%) rename lib/inc/sys_string/impl/util/{generic_buffer.h => generic_impl.h} (98%) diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index a55c9eb..0468b85 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -103,8 +103,8 @@ source_group("Unicode" FILES ${UNICODE_FILES} ${SOURCES}) set(UTIL_FILES ${SRCDIR}/inc/sys_string/impl/util/util.h - ${SRCDIR}/inc/sys_string/impl/util/char_buffer.h - ${SRCDIR}/inc/sys_string/impl/util/generic_buffer.h + ${SRCDIR}/inc/sys_string/impl/util/char_vector.h + ${SRCDIR}/inc/sys_string/impl/util/generic_impl.h ${SRCDIR}/inc/sys_string/impl/util/iter_util.h ) diff --git a/lib/inc/sys_string/impl/platforms/android_java.h b/lib/inc/sys_string/impl/platforms/android_java.h index 3b195f9..6a53d4f 100644 --- a/lib/inc/sys_string/impl/platforms/android_java.h +++ b/lib/inc/sys_string/impl/platforms/android_java.h @@ -10,7 +10,7 @@ #endif -#include +#include namespace sysstr::util { diff --git a/lib/inc/sys_string/impl/platforms/apple_cfstr.h b/lib/inc/sys_string/impl/platforms/apple_cfstr.h index 4998e00..dbe7709 100644 --- a/lib/inc/sys_string/impl/platforms/apple_cfstr.h +++ b/lib/inc/sys_string/impl/platforms/apple_cfstr.h @@ -9,8 +9,8 @@ #error This header must not be included directly. Please include sys_string.h #endif -#include -#include +#include +#include #include @@ -176,7 +176,7 @@ namespace sysstr::util size_type m_capacity = minimum_capacity; }; - using cf_builder_impl = char_buffer; + using cf_builder_impl = char_vector; inline CFStringRef convert_to_string(cf_builder_impl & builder) noexcept { diff --git a/lib/inc/sys_string/impl/platforms/emscripten_javascript.h b/lib/inc/sys_string/impl/platforms/emscripten_javascript.h index 1c5b74f..e2a573f 100644 --- a/lib/inc/sys_string/impl/platforms/emscripten_javascript.h +++ b/lib/inc/sys_string/impl/platforms/emscripten_javascript.h @@ -10,7 +10,7 @@ #endif -#include +#include namespace sysstr::util { diff --git a/lib/inc/sys_string/impl/platforms/python_any.h b/lib/inc/sys_string/impl/platforms/python_any.h index f69d9c0..ea110d5 100644 --- a/lib/inc/sys_string/impl/platforms/python_any.h +++ b/lib/inc/sys_string/impl/platforms/python_any.h @@ -9,7 +9,7 @@ #error This header must not be included directly. Please include sys_string.h #endif -#include +#include #include @@ -169,7 +169,7 @@ namespace sysstr::util size_type m_capacity = minimum_capacity; }; - using py_builder_impl = char_buffer; + using py_builder_impl = char_vector; inline PyObject * convert_to_string(py_builder_impl & builder) noexcept { diff --git a/lib/inc/sys_string/impl/platforms/unix_generic.h b/lib/inc/sys_string/impl/platforms/unix_generic.h index 1ab88ad..5eb044a 100644 --- a/lib/inc/sys_string/impl/platforms/unix_generic.h +++ b/lib/inc/sys_string/impl/platforms/unix_generic.h @@ -10,7 +10,7 @@ #endif -#include +#include #include diff --git a/lib/inc/sys_string/impl/platforms/windows_bstr.h b/lib/inc/sys_string/impl/platforms/windows_bstr.h index afaa662..81e46a1 100644 --- a/lib/inc/sys_string/impl/platforms/windows_bstr.h +++ b/lib/inc/sys_string/impl/platforms/windows_bstr.h @@ -9,8 +9,8 @@ #error This header must not be included directly. Please include sys_string.h #endif -#include -#include +#include +#include namespace sysstr { @@ -502,7 +502,7 @@ namespace sysstr::util UINT m_capacity{bstr_buffer::minimum_capacity()}; }; - using bstr_builder_impl = char_buffer; + using bstr_builder_impl = char_vector; } diff --git a/lib/inc/sys_string/impl/platforms/windows_generic.h b/lib/inc/sys_string/impl/platforms/windows_generic.h index 33ed296..37d12bf 100644 --- a/lib/inc/sys_string/impl/platforms/windows_generic.h +++ b/lib/inc/sys_string/impl/platforms/windows_generic.h @@ -10,7 +10,7 @@ #endif -#include +#include namespace sysstr::util { diff --git a/lib/inc/sys_string/impl/platforms/windows_hstring.h b/lib/inc/sys_string/impl/platforms/windows_hstring.h index 7d2ff9d..9bf674f 100644 --- a/lib/inc/sys_string/impl/platforms/windows_hstring.h +++ b/lib/inc/sys_string/impl/platforms/windows_hstring.h @@ -9,7 +9,7 @@ #error This header must not be included directly. Please include sys_string.h #endif -#include +#include namespace sysstr { @@ -132,7 +132,7 @@ namespace sysstr::util size_type m_capacity = 0; }; - using hstring_builder_impl = char_buffer; + using hstring_builder_impl = char_vector; inline HSTRING convert_to_string(hstring_builder_impl & builder) noexcept { diff --git a/lib/inc/sys_string/impl/util/char_buffer.h b/lib/inc/sys_string/impl/util/char_vector.h similarity index 94% rename from lib/inc/sys_string/impl/util/char_buffer.h rename to lib/inc/sys_string/impl/util/char_vector.h index dc07679..f6e3c77 100644 --- a/lib/inc/sys_string/impl/util/char_buffer.h +++ b/lib/inc/sys_string/impl/util/char_vector.h @@ -5,8 +5,8 @@ // license that can be found in the LICENSE file or at // https://github.com/gershnik/sys_string/blob/master/LICENSE // -#ifndef HEADER_SYS_STRING_CHAR_BUFFER_H_INCLUDED -#define HEADER_SYS_STRING_CHAR_BUFFER_H_INCLUDED +#ifndef HEADER_SYS_STRING_CHAR_VECTOR_H_INCLUDED +#define HEADER_SYS_STRING_CHAR_VECTOR_H_INCLUDED #include @@ -17,7 +17,7 @@ namespace sysstr::util { template - class char_buffer + class char_vector { private: static_assert(std::is_trivially_copyable_v, "Storage::value_type must be trivially copyable"); @@ -41,17 +41,17 @@ namespace sysstr::util static constexpr size_type growth_increment = size_type(std::max(size_t(2), std::max(size_t(16), sizeof(value_type)) / sizeof(value_type))); public: - constexpr char_buffer() noexcept = default; - ~char_buffer() noexcept = default; - char_buffer(const char_buffer & src) = delete; - char_buffer & operator=(const char_buffer & src) = delete; - constexpr char_buffer(char_buffer && src) noexcept: + constexpr char_vector() noexcept = default; + ~char_vector() noexcept = default; + char_vector(const char_vector & src) = delete; + char_vector & operator=(const char_vector & src) = delete; + constexpr char_vector(char_vector && src) noexcept: m_storage(std::move(src.m_storage)), m_size(src.m_size) { src.m_size = 0; } - constexpr char_buffer & operator=(char_buffer && src) noexcept + constexpr char_vector & operator=(char_vector && src) noexcept { if (this != &src) { diff --git a/lib/inc/sys_string/impl/util/generic_buffer.h b/lib/inc/sys_string/impl/util/generic_impl.h similarity index 98% rename from lib/inc/sys_string/impl/util/generic_buffer.h rename to lib/inc/sys_string/impl/util/generic_impl.h index 24edb9a..4d13370 100644 --- a/lib/inc/sys_string/impl/util/generic_buffer.h +++ b/lib/inc/sys_string/impl/util/generic_impl.h @@ -6,11 +6,11 @@ // license that can be found in the LICENSE file or at // https://github.com/gershnik/sys_string/blob/master/LICENSE // -#ifndef HEADER_SYS_STRING_GENERIC_BUFFER_H_INCLUDED -#define HEADER_SYS_STRING_GENERIC_BUFFER_H_INCLUDED +#ifndef HEADER_SYS_STRING_GENERIC_IMPL_H_INCLUDED +#define HEADER_SYS_STRING_GENERIC_IMPL_H_INCLUDED #include -#include +#include #include #include @@ -509,7 +509,7 @@ namespace sysstr::util::generic }; template - using any_string_builder= char_buffer>; + using any_string_builder= char_vector>; template inline any_string convert_to_string(any_string_builder & builder) noexcept diff --git a/lib/inc/sys_string/impl/util/util.h b/lib/inc/sys_string/impl/util/util.h index bf2b09c..2734dea 100644 --- a/lib/inc/sys_string/impl/util/util.h +++ b/lib/inc/sys_string/impl/util/util.h @@ -17,31 +17,6 @@ namespace sysstr::util { - class count_output_iterator - { - public: - using value_type = void; - using difference_type = void; - using pointer = void ; - using reference = void; - using iterator_category = std::output_iterator_tag; - public: - constexpr count_output_iterator(size_t & count) noexcept: - m_count(&count) - {} - - template - constexpr count_output_iterator & operator=(Value &&) noexcept - { ++(*this->m_count); return *this;} - - constexpr count_output_iterator & operator*() noexcept {return *this;} - constexpr count_output_iterator & operator++() noexcept {return *this;} - constexpr count_output_iterator & operator++(int) noexcept {return *this;} - - private: - size_t * const m_count; - }; - template static constexpr bool dependent_bool = Val; From a27c9c751e0f1d2de5319f5f6c91be8877bc0f32 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Thu, 14 Nov 2024 11:43:24 -0800 Subject: [PATCH 20/63] Reducing number of utils --- lib/inc/sys_string/impl/compare.h | 5 ++++- lib/inc/sys_string/impl/util/util.h | 13 +------------ 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/lib/inc/sys_string/impl/compare.h b/lib/inc/sys_string/impl/compare.h index 522a382..9c2918d 100644 --- a/lib/inc/sys_string/impl/compare.h +++ b/lib/inc/sys_string/impl/compare.h @@ -57,10 +57,13 @@ namespace sysstr template inline auto sys_string_t::compare(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> std::strong_ordering { + static_assert(std::ranges::contiguous_range); + char_access lhs_access(lhs); char_access rhs_access(rhs); - return util::compare_3way(lhs_access.data(), lhs_access.size(), rhs_access.data(), rhs_access.size()); + using sv = std::basic_string_view; + return sv(lhs_access.data(), lhs_access.size()) <=> sv(rhs_access.data(), rhs_access.size()); } template diff --git a/lib/inc/sys_string/impl/util/util.h b/lib/inc/sys_string/impl/util/util.h index 2734dea..ecd4389 100644 --- a/lib/inc/sys_string/impl/util/util.h +++ b/lib/inc/sys_string/impl/util/util.h @@ -12,24 +12,13 @@ #include #include -#include -#include +#include namespace sysstr::util { template static constexpr bool dependent_bool = Val; - template - inline constexpr auto compare_3way(const Char * lhs, size_t lhs_size, const Char * rhs, size_t rhs_size) noexcept - { - auto shortest_length = std::min(lhs_size, rhs_size); - int res = std::char_traits::compare(lhs, rhs, shortest_length); - if (auto ord = (res <=> 0); ord != 0) - return ord; - return lhs_size <=> rhs_size; - } - template Sentinel, std::output_iterator OutIt, class Pred> auto split(It str_start, Sentinel str_end, OutIt dest, Pred pred) -> OutIt requires(std::is_constructible_v, std::tuple_element_t<1, decltype(pred(str_start, str_end))>>) From 1049cea856997a22496afaeb292ee9ef5428d8fa Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Thu, 14 Nov 2024 11:53:57 -0800 Subject: [PATCH 21/63] Fixing rename fallout --- lib/inc/sys_string/impl/platforms/android_java.h | 8 ++++---- lib/inc/sys_string/impl/platforms/emscripten_javascript.h | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/inc/sys_string/impl/platforms/android_java.h b/lib/inc/sys_string/impl/platforms/android_java.h index 6a53d4f..636c59d 100644 --- a/lib/inc/sys_string/impl/platforms/android_java.h +++ b/lib/inc/sys_string/impl/platforms/android_java.h @@ -101,19 +101,19 @@ namespace sysstr throw std::runtime_error(desc); } - static any_string create_buffer(JNIEnv * env, jstring str) + static buffer create_buffer(JNIEnv * env, jstring str) { if (!str) - return any_string(nullptr); + return buffer(nullptr); jsize length = str ? env->GetStringLength(str) : 0; if (length < 0) raise_exception_on_jni_error(env, "GetStringLength failed"); if (length == 0) - return any_string(); + return buffer(); - any_string ret(length); + buffer ret(length); env->GetStringRegion(str, 0, length, reinterpret_cast(ret.data())); return ret; } diff --git a/lib/inc/sys_string/impl/platforms/emscripten_javascript.h b/lib/inc/sys_string/impl/platforms/emscripten_javascript.h index e2a573f..45b81e9 100644 --- a/lib/inc/sys_string/impl/platforms/emscripten_javascript.h +++ b/lib/inc/sys_string/impl/platforms/emscripten_javascript.h @@ -114,7 +114,7 @@ namespace sysstr { super::swap(other); } private: - static auto create_buffer(emscripten::EM_VAL js_str) -> any_string + static auto create_buffer(emscripten::EM_VAL js_str) -> buffer { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdollar-in-identifier-extension" @@ -125,9 +125,9 @@ namespace sysstr }, js_str); if (length == 0) - return any_string(); + return buffer(); - any_string ret(length); + buffer ret(length); EM_ASM({ let str = Emval.toValue($0); let ptr = $1; From ad393941038d22df8bb0268e04cb33429eb7c2b1 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Thu, 14 Nov 2024 12:00:59 -0800 Subject: [PATCH 22/63] More renames --- .../sys_string/impl/platforms/android_java.h | 24 +++++++++---------- .../impl/platforms/emscripten_javascript.h | 2 +- .../sys_string/impl/platforms/unix_generic.h | 2 +- .../impl/platforms/windows_generic.h | 2 +- lib/inc/sys_string/impl/util/generic_impl.h | 4 ++-- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/lib/inc/sys_string/impl/platforms/android_java.h b/lib/inc/sys_string/impl/platforms/android_java.h index 636c59d..c0f3035 100644 --- a/lib/inc/sys_string/impl/platforms/android_java.h +++ b/lib/inc/sys_string/impl/platforms/android_java.h @@ -25,14 +25,14 @@ namespace sysstr::util }; template - using static_string = generic::static_string; - using dynamic_string = generic::dynamic_string; + using android_static_string = generic::static_string; + using android_dynamic_string = generic::dynamic_string; - using any_string = generic::any_string; + using android_any_string = generic::any_string; - using builder_impl = generic::any_string_builder; + using android_builder_impl = generic::builder_impl; - using char_access = generic::char_access; + using android_char_access = generic::char_access; } @@ -40,7 +40,7 @@ namespace sysstr { class android_storage : private util::generic::storage { - friend util::char_access; + friend util::android_char_access; private: using super = util::generic::storage; public: @@ -49,8 +49,8 @@ namespace sysstr using native_handle_type = util::android_traits::native_handle_type; using hash_type = util::android_traits::hash_type; - using char_access = util::char_access; - using builder_impl = util::builder_impl; + using char_access = util::android_char_access; + using builder_impl = util::android_builder_impl; static constexpr auto max_size = util::android_traits::max_size; @@ -124,12 +124,12 @@ namespace sysstr::util { template<> template<> - inline char_access::char_access(const sys_string_t & src) noexcept: + inline android_char_access::char_access(const sys_string_t & src) noexcept: char_access(src.get_buffer()) {} template<> - inline sys_string_t build(builder_impl & builder) noexcept + inline sys_string_t build(android_builder_impl & builder) noexcept { return sys_string_t(convert_to_string(builder)); } @@ -143,8 +143,8 @@ namespace sysstr #define SYS_STRING_STATIC_ANDROID(x) ([] () noexcept -> ::sysstr::sys_string_android { \ constexpr ::size_t size = sizeof(u##x) / sizeof(char16_t); \ - static const ::sysstr::util::static_string sbuf{0, true, u##x}; \ - ::sysstr::util::any_string buf((::sysstr::util::dynamic_string *)&sbuf, size - 1, 0); \ + static const ::sysstr::util::android_static_string sbuf{0, true, u##x}; \ + ::sysstr::util::android_any_string buf((::sysstr::util::android_dynamic_string *)&sbuf, size - 1, 0); \ return *reinterpret_cast<::sysstr::sys_string_android *>(&buf); \ }()) diff --git a/lib/inc/sys_string/impl/platforms/emscripten_javascript.h b/lib/inc/sys_string/impl/platforms/emscripten_javascript.h index 45b81e9..771e5c3 100644 --- a/lib/inc/sys_string/impl/platforms/emscripten_javascript.h +++ b/lib/inc/sys_string/impl/platforms/emscripten_javascript.h @@ -29,7 +29,7 @@ namespace sysstr::util using emscripten_any_string = generic::any_string; - using emscripten_builder_impl = generic::any_string_builder; + using emscripten_builder_impl = generic::builder_impl; using emscripten_char_access = generic::char_access; diff --git a/lib/inc/sys_string/impl/platforms/unix_generic.h b/lib/inc/sys_string/impl/platforms/unix_generic.h index 5eb044a..0019516 100644 --- a/lib/inc/sys_string/impl/platforms/unix_generic.h +++ b/lib/inc/sys_string/impl/platforms/unix_generic.h @@ -31,7 +31,7 @@ namespace sysstr::util using generic_any_string = generic::any_string; - using generic_builder_impl = generic::any_string_builder; + using generic_builder_impl = generic::builder_impl; using generic_char_access = generic::char_access; diff --git a/lib/inc/sys_string/impl/platforms/windows_generic.h b/lib/inc/sys_string/impl/platforms/windows_generic.h index 37d12bf..34f1f7f 100644 --- a/lib/inc/sys_string/impl/platforms/windows_generic.h +++ b/lib/inc/sys_string/impl/platforms/windows_generic.h @@ -30,7 +30,7 @@ namespace sysstr::util using win_generic_any_string = generic::any_string; - using win_generic_builder_impl = generic::any_string_builder; + using win_generic_builder_impl = generic::builder_impl; using win_generic_char_access = generic::char_access; diff --git a/lib/inc/sys_string/impl/util/generic_impl.h b/lib/inc/sys_string/impl/util/generic_impl.h index 4d13370..a711687 100644 --- a/lib/inc/sys_string/impl/util/generic_impl.h +++ b/lib/inc/sys_string/impl/util/generic_impl.h @@ -509,10 +509,10 @@ namespace sysstr::util::generic }; template - using any_string_builder= char_vector>; + using builder_impl= char_vector>; template - inline any_string convert_to_string(any_string_builder & builder) noexcept + inline any_string convert_to_string(builder_impl & builder) noexcept { auto size = builder.size(); auto buf = builder.release(); From 44caf7e7cbb7674c8f0a9ef9198f013f18b23cee Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Thu, 14 Nov 2024 12:24:39 -0800 Subject: [PATCH 23/63] Updating Unicode data --- lib/res/CaseFolding.txt | 80 +- lib/res/DerivedCoreProperties.txt | 1798 ++++++-- lib/res/PropList.txt | 317 +- lib/res/SpecialCasing.txt | 24 +- lib/res/UnicodeData.txt | 6345 ++++++++++++++++++++++++++++- lib/scripts/common.py | 24 +- lib/scripts/genmappings.py | 14 +- lib/src/unicode_mappings.cpp | 918 +++-- 8 files changed, 8733 insertions(+), 787 deletions(-) diff --git a/lib/res/CaseFolding.txt b/lib/res/CaseFolding.txt index 033788b..1b7a9c1 100644 --- a/lib/res/CaseFolding.txt +++ b/lib/res/CaseFolding.txt @@ -1,11 +1,11 @@ -# CaseFolding-13.0.0.txt -# Date: 2019-09-08, 23:30:59 GMT -# © 2019 Unicode®, Inc. +# CaseFolding-16.0.0.txt +# Date: 2024-04-30, 21:48:11 GMT +# © 2024 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see http://www.unicode.org/terms_of_use.html +# For terms of use and license, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database -# For documentation, see http://www.unicode.org/reports/tr44/ +# For documentation, see https://www.unicode.org/reports/tr44/ # # Case Folding Properties # @@ -603,6 +603,7 @@ 1C86; C; 044A; # CYRILLIC SMALL LETTER TALL HARD SIGN 1C87; C; 0463; # CYRILLIC SMALL LETTER TALL YAT 1C88; C; A64B; # CYRILLIC SMALL LETTER UNBLENDED UK +1C89; C; 1C8A; # CYRILLIC CAPITAL LETTER TJE 1C90; C; 10D0; # GEORGIAN MTAVRULI CAPITAL LETTER AN 1C91; C; 10D1; # GEORGIAN MTAVRULI CAPITAL LETTER BAN 1C92; C; 10D2; # GEORGIAN MTAVRULI CAPITAL LETTER GAN @@ -929,6 +930,7 @@ 1FCC; S; 1FC3; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI 1FD2; F; 03B9 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA 1FD3; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD3; S; 0390; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA 1FD6; F; 03B9 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI 1FD7; F; 03B9 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI 1FD8; C; 1FD0; # GREEK CAPITAL LETTER IOTA WITH VRACHY @@ -937,6 +939,7 @@ 1FDB; C; 1F77; # GREEK CAPITAL LETTER IOTA WITH OXIA 1FE2; F; 03C5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA 1FE3; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA +1FE3; S; 03B0; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA 1FE4; F; 03C1 0313; # GREEK SMALL LETTER RHO WITH PSILI 1FE6; F; 03C5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI 1FE7; F; 03C5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI @@ -1050,6 +1053,7 @@ 2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC 2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A 2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C2F; C; 2C5F; # GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI 2C60; C; 2C61; # LATIN CAPITAL LETTER L WITH DOUBLE BAR 2C62; C; 026B; # LATIN CAPITAL LETTER L WITH MIDDLE TILDE 2C63; C; 1D7D; # LATIN CAPITAL LETTER P WITH STROKE @@ -1230,12 +1234,20 @@ A7B8; C; A7B9; # LATIN CAPITAL LETTER U WITH STROKE A7BA; C; A7BB; # LATIN CAPITAL LETTER GLOTTAL A A7BC; C; A7BD; # LATIN CAPITAL LETTER GLOTTAL I A7BE; C; A7BF; # LATIN CAPITAL LETTER GLOTTAL U +A7C0; C; A7C1; # LATIN CAPITAL LETTER OLD POLISH O A7C2; C; A7C3; # LATIN CAPITAL LETTER ANGLICANA W A7C4; C; A794; # LATIN CAPITAL LETTER C WITH PALATAL HOOK A7C5; C; 0282; # LATIN CAPITAL LETTER S WITH HOOK A7C6; C; 1D8E; # LATIN CAPITAL LETTER Z WITH PALATAL HOOK A7C7; C; A7C8; # LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9; C; A7CA; # LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +A7CB; C; 0264; # LATIN CAPITAL LETTER RAMS HORN +A7CC; C; A7CD; # LATIN CAPITAL LETTER S WITH DIAGONAL STROKE +A7D0; C; A7D1; # LATIN CAPITAL LETTER CLOSED INSULAR G +A7D6; C; A7D7; # LATIN CAPITAL LETTER MIDDLE SCOTS S +A7D8; C; A7D9; # LATIN CAPITAL LETTER SIGMOID S +A7DA; C; A7DB; # LATIN CAPITAL LETTER LAMBDA +A7DC; C; 019B; # LATIN CAPITAL LETTER LAMBDA WITH STROKE A7F5; C; A7F6; # LATIN CAPITAL LETTER REVERSED HALF H AB70; C; 13A0; # CHEROKEE SMALL LETTER A AB71; C; 13A1; # CHEROKEE SMALL LETTER E @@ -1323,6 +1335,7 @@ FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL FB03; F; 0066 0066 0069; # LATIN SMALL LIGATURE FFI FB04; F; 0066 0066 006C; # LATIN SMALL LIGATURE FFL FB05; F; 0073 0074; # LATIN SMALL LIGATURE LONG S T +FB05; S; FB06; # LATIN SMALL LIGATURE LONG S T FB06; F; 0073 0074; # LATIN SMALL LIGATURE ST FB13; F; 0574 0576; # ARMENIAN SMALL LIGATURE MEN NOW FB14; F; 0574 0565; # ARMENIAN SMALL LIGATURE MEN ECH @@ -1431,6 +1444,41 @@ FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z 104D1; C; 104F9; # OSAGE CAPITAL LETTER GHA 104D2; C; 104FA; # OSAGE CAPITAL LETTER ZA 104D3; C; 104FB; # OSAGE CAPITAL LETTER ZHA +10570; C; 10597; # VITHKUQI CAPITAL LETTER A +10571; C; 10598; # VITHKUQI CAPITAL LETTER BBE +10572; C; 10599; # VITHKUQI CAPITAL LETTER BE +10573; C; 1059A; # VITHKUQI CAPITAL LETTER CE +10574; C; 1059B; # VITHKUQI CAPITAL LETTER CHE +10575; C; 1059C; # VITHKUQI CAPITAL LETTER DE +10576; C; 1059D; # VITHKUQI CAPITAL LETTER DHE +10577; C; 1059E; # VITHKUQI CAPITAL LETTER EI +10578; C; 1059F; # VITHKUQI CAPITAL LETTER E +10579; C; 105A0; # VITHKUQI CAPITAL LETTER FE +1057A; C; 105A1; # VITHKUQI CAPITAL LETTER GA +1057C; C; 105A3; # VITHKUQI CAPITAL LETTER HA +1057D; C; 105A4; # VITHKUQI CAPITAL LETTER HHA +1057E; C; 105A5; # VITHKUQI CAPITAL LETTER I +1057F; C; 105A6; # VITHKUQI CAPITAL LETTER IJE +10580; C; 105A7; # VITHKUQI CAPITAL LETTER JE +10581; C; 105A8; # VITHKUQI CAPITAL LETTER KA +10582; C; 105A9; # VITHKUQI CAPITAL LETTER LA +10583; C; 105AA; # VITHKUQI CAPITAL LETTER LLA +10584; C; 105AB; # VITHKUQI CAPITAL LETTER ME +10585; C; 105AC; # VITHKUQI CAPITAL LETTER NE +10586; C; 105AD; # VITHKUQI CAPITAL LETTER NJE +10587; C; 105AE; # VITHKUQI CAPITAL LETTER O +10588; C; 105AF; # VITHKUQI CAPITAL LETTER PE +10589; C; 105B0; # VITHKUQI CAPITAL LETTER QA +1058A; C; 105B1; # VITHKUQI CAPITAL LETTER RE +1058C; C; 105B3; # VITHKUQI CAPITAL LETTER SE +1058D; C; 105B4; # VITHKUQI CAPITAL LETTER SHE +1058E; C; 105B5; # VITHKUQI CAPITAL LETTER TE +1058F; C; 105B6; # VITHKUQI CAPITAL LETTER THE +10590; C; 105B7; # VITHKUQI CAPITAL LETTER U +10591; C; 105B8; # VITHKUQI CAPITAL LETTER VE +10592; C; 105B9; # VITHKUQI CAPITAL LETTER XE +10594; C; 105BB; # VITHKUQI CAPITAL LETTER Y +10595; C; 105BC; # VITHKUQI CAPITAL LETTER ZE 10C80; C; 10CC0; # OLD HUNGARIAN CAPITAL LETTER A 10C81; C; 10CC1; # OLD HUNGARIAN CAPITAL LETTER AA 10C82; C; 10CC2; # OLD HUNGARIAN CAPITAL LETTER EB @@ -1482,6 +1530,28 @@ FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z 10CB0; C; 10CF0; # OLD HUNGARIAN CAPITAL LETTER EZS 10CB1; C; 10CF1; # OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN 10CB2; C; 10CF2; # OLD HUNGARIAN CAPITAL LETTER US +10D50; C; 10D70; # GARAY CAPITAL LETTER A +10D51; C; 10D71; # GARAY CAPITAL LETTER CA +10D52; C; 10D72; # GARAY CAPITAL LETTER MA +10D53; C; 10D73; # GARAY CAPITAL LETTER KA +10D54; C; 10D74; # GARAY CAPITAL LETTER BA +10D55; C; 10D75; # GARAY CAPITAL LETTER JA +10D56; C; 10D76; # GARAY CAPITAL LETTER SA +10D57; C; 10D77; # GARAY CAPITAL LETTER WA +10D58; C; 10D78; # GARAY CAPITAL LETTER LA +10D59; C; 10D79; # GARAY CAPITAL LETTER GA +10D5A; C; 10D7A; # GARAY CAPITAL LETTER DA +10D5B; C; 10D7B; # GARAY CAPITAL LETTER XA +10D5C; C; 10D7C; # GARAY CAPITAL LETTER YA +10D5D; C; 10D7D; # GARAY CAPITAL LETTER TA +10D5E; C; 10D7E; # GARAY CAPITAL LETTER RA +10D5F; C; 10D7F; # GARAY CAPITAL LETTER NYA +10D60; C; 10D80; # GARAY CAPITAL LETTER FA +10D61; C; 10D81; # GARAY CAPITAL LETTER NA +10D62; C; 10D82; # GARAY CAPITAL LETTER PA +10D63; C; 10D83; # GARAY CAPITAL LETTER HA +10D64; C; 10D84; # GARAY CAPITAL LETTER OLD KA +10D65; C; 10D85; # GARAY CAPITAL LETTER OLD NA 118A0; C; 118C0; # WARANG CITI CAPITAL LETTER NGAA 118A1; C; 118C1; # WARANG CITI CAPITAL LETTER A 118A2; C; 118C2; # WARANG CITI CAPITAL LETTER WI diff --git a/lib/res/DerivedCoreProperties.txt b/lib/res/DerivedCoreProperties.txt index bc97e21..1075638 100644 --- a/lib/res/DerivedCoreProperties.txt +++ b/lib/res/DerivedCoreProperties.txt @@ -1,11 +1,11 @@ -# DerivedCoreProperties-13.0.0.txt -# Date: 2020-01-22, 00:07:19 GMT -# © 2020 Unicode®, Inc. +# DerivedCoreProperties-16.0.0.txt +# Date: 2024-05-31, 18:09:32 GMT +# © 2024 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see http://www.unicode.org/terms_of_use.html +# For terms of use and license, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database -# For documentation, see http://www.unicode.org/reports/tr44/ +# For documentation, see https://www.unicode.org/reports/tr44/ # ================================================ @@ -177,6 +177,7 @@ 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 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 @@ -253,7 +254,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 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 -# Total code points: 2310 +# Total code points: 2312 # ================================================ @@ -280,6 +281,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 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 @@ -341,8 +343,11 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 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 -08A0..08B4 ; Alphabetic # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; Alphabetic # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE +0870..0887 ; Alphabetic # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088E ; Alphabetic # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +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 @@ -460,6 +465,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 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 @@ -471,6 +477,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 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 +0C5D ; Alphabetic # Lo 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 @@ -490,10 +497,11 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 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 -0CDE ; Alphabetic # Lo KANNADA LETTER FA +0CDD..0CDE ; Alphabetic # Lo [2] KANNADA LETTER NAKAARA POLLU..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 @@ -549,7 +557,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 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..0F81 ; Alphabetic # Mn [2] TIBETAN VOWEL SIGN REVERSED I..TIBETAN VOWEL SIGN REVERSED II +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 @@ -614,10 +622,9 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 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..170C ; Alphabetic # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; Alphabetic # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA +1700..1711 ; Alphabetic # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA 1712..1713 ; Alphabetic # Mn [2] TAGALOG VOWEL SIGN I..TAGALOG VOWEL SIGN U -1720..1731 ; Alphabetic # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA +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 @@ -670,6 +677,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 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 @@ -680,7 +688,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 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..1B4B ; Alphabetic # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +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 @@ -705,7 +713,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 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..1C88 ; Alphabetic # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +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 @@ -718,7 +726,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 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 -1DE7..1DF4 ; Alphabetic # Mn [14] COMBINING LATIN SMALL LETTER ALPHA..COMBINING LATIN SMALL LETTER U WITH DIAERESIS +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 @@ -760,9 +768,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 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..2C2E ; Alphabetic # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; Alphabetic # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; Alphabetic # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +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 @@ -802,8 +808,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 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..9FFC ; Alphabetic # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -A000..A014 ; Alphabetic # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +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 @@ -828,8 +833,11 @@ A771..A787 ; Alphabetic # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER 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..A7BF ; Alphabetic # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; Alphabetic # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CD ; Alphabetic # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7D0..A7D1 ; Alphabetic # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; Alphabetic # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7DC ; Alphabetic # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F2..A7F4 ; Alphabetic # Lm [3] MODIFIER LETTER CAPITAL C..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 @@ -985,9 +993,21 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 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 @@ -1022,12 +1042,22 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 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 +10EFC ; Alphabetic # Mn 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 @@ -1035,11 +1065,16 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 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 @@ -1070,6 +1105,8 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 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 @@ -1097,6 +1134,19 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 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 @@ -1139,11 +1189,14 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 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..1171F ; Alphabetic # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA +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 @@ -1185,7 +1238,8 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 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 -11AC0..11AF8 ; Alphabetic # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +11AB0..11AF8 ; Alphabetic # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +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 @@ -1223,19 +1277,39 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 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 -13000..1342E ; Alphabetic # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 +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 16F00..16F4A ; Alphabetic # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F4F ; Alphabetic # Mn MIAO SIGN CONSONANT MODIFIER BAR @@ -1248,9 +1322,14 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 16FF0..16FF1 ; Alphabetic # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY 17000..187F7 ; Alphabetic # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; Alphabetic # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18D00..18D08 ; Alphabetic # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1B000..1B11E ; Alphabetic # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2 +18CFF..18D08 ; Alphabetic # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +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 @@ -1288,15 +1367,30 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 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 +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 @@ -1337,15 +1431,17 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 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..2A6DD ; Alphabetic # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; Alphabetic # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; Alphabetic # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B739 ; Alphabetic # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 2B740..2B81D ; Alphabetic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; Alphabetic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 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..323AF ; Alphabetic # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -# Total code points: 132875 +# Total code points: 142759 # ================================================ @@ -1630,9 +1726,11 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 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 @@ -1798,7 +1896,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 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..2C5E ; Lowercase # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE +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 @@ -1970,22 +2068,41 @@ 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 +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 +A7F2..A7F4 ; Lowercase # Lm [3] MODIFIER LETTER CAPITAL C..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 1D41A..1D433 ; Lowercase # L& [26] MATHEMATICAL BOLD SMALL A..MATHEMATICAL BOLD SMALL Z @@ -2016,9 +2133,13 @@ FF41..FF5A ; Lowercase # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L 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: 2344 +# Total code points: 2569 # ================================================ @@ -2301,6 +2422,7 @@ FF41..FF5A ; Lowercase # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L 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 @@ -2458,7 +2580,7 @@ FF41..FF5A ; Lowercase # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L 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..2C2E ; Uppercase # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +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 @@ -2623,14 +2745,26 @@ 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 +A7D0 ; Uppercase # L& LATIN CAPITAL LETTER CLOSED INSULAR G +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 1D400..1D419 ; Uppercase # L& [26] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL BOLD CAPITAL Z @@ -2669,7 +2803,7 @@ FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH 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: 1911 +# Total code points: 1978 # ================================================ @@ -2710,10 +2844,11 @@ FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH 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..1C88 ; Cased # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +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 @@ -2761,9 +2896,7 @@ FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH 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..2C2E ; Cased # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; Cased # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; Cased # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +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 @@ -2778,14 +2911,18 @@ A722..A76F ; Cased # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN 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..A7BF ; Cased # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; Cased # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CD ; Cased # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7D0..A7D1 ; Cased # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; Cased # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7DC ; Cased # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F2..A7F4 ; Cased # Lm [3] MODIFIER LETTER CAPITAL C..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 @@ -2794,8 +2931,22 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 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 1D400..1D454 ; Cased # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G @@ -2828,12 +2979,16 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 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: 4286 +# Total code points: 4578 # ================================================ @@ -2908,7 +3063,11 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 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 -08D3..08E1 ; Case_Ignorable # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +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 @@ -2951,6 +3110,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 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 @@ -2978,7 +3138,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 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..0ECD ; Case_Ignorable # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA +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 @@ -3003,7 +3163,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 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..1734 ; Case_Ignorable # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +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 @@ -3014,6 +3174,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 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 @@ -3033,7 +3194,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 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..1AC0 ; Case_Ignorable # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE ; Case_Ignorable # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 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 @@ -3060,8 +3221,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 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..1DF9 ; Case_Ignorable # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF ; Case_Ignorable # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +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 @@ -3114,6 +3274,7 @@ A720..A721 ; Case_Ignorable # Sk [2] MODIFIER LETTER STRESS AND HIGH 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 +A7F2..A7F4 ; Case_Ignorable # Lm [3] MODIFIER LETTER CAPITAL C..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 @@ -3156,7 +3317,7 @@ 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..FBC1 ; Case_Ignorable # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW +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 @@ -3175,6 +3336,9 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 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 @@ -3182,14 +3346,22 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 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 +10EFC..10EFF ; Case_Ignorable # Mn [4] ARABIC COMBINING ALEF OVERLAY..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 @@ -3203,6 +3375,7 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 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 @@ -3210,6 +3383,11 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 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 @@ -3229,7 +3407,8 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 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..1171F ; Case_Ignorable # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA +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 @@ -3264,18 +3443,34 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 11D95 ; Case_Ignorable # Mn GUNJALA GONDI SIGN ANUSVARA 11D97 ; Case_Ignorable # Mn GUNJALA GONDI VIRAMA 11EF3..11EF4 ; Case_Ignorable # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U -13430..13438 ; Case_Ignorable # Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT +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 +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 @@ -3293,9 +3488,15 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 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 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 @@ -3304,7 +3505,7 @@ 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: 2413 +# Total code points: 2749 # ================================================ @@ -3588,6 +3789,7 @@ E0100..E01EF ; Case_Ignorable # Mn [240] VARIATION SELECTOR-17..VARIATION SELEC 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 @@ -3738,7 +3940,7 @@ E0100..E01EF ; Case_Ignorable # Mn [240] VARIATION SELECTOR-17..VARIATION SELEC 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..2C2E ; Changes_When_Lowercased # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +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 @@ -3903,19 +4105,31 @@ A7B8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH S 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 +A7D0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER CLOSED INSULAR G +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 1E900..1E921 ; Changes_When_Lowercased # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA -# Total code points: 1393 +# Total code points: 1460 # ================================================ @@ -3996,7 +4210,7 @@ FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTE 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..019A ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER L WITH BAR +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 @@ -4072,8 +4286,7 @@ FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTE 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 ; Changes_When_Uppercased # L& LATIN SMALL LETTER GAMMA -0265..0266 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER TURNED H..LATIN SMALL LETTER H WITH HOOK +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 @@ -4213,6 +4426,7 @@ FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTE 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 @@ -4363,7 +4577,7 @@ FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTE 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..2C5E ; Changes_When_Uppercased # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE +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 @@ -4528,9 +4742,15 @@ A7B9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH STR 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 +A7D1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER CLOSED INSULAR G +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 @@ -4539,12 +4759,17 @@ FB13..FB17 ; Changes_When_Uppercased # L& [5] ARMENIAN SMALL LIGATURE MEN N 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 1E922..1E943 ; Changes_When_Uppercased # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 1485 +# Total code points: 1552 # ================================================ @@ -4625,7 +4850,7 @@ FF41..FF5A ; Changes_When_Uppercased # L& [26] FULLWIDTH LATIN SMALL LETTER 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..019A ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER L WITH BAR +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 @@ -4702,8 +4927,7 @@ FF41..FF5A ; Changes_When_Uppercased # L& [26] FULLWIDTH LATIN SMALL LETTER 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 ; Changes_When_Titlecased # L& LATIN SMALL LETTER GAMMA -0265..0266 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER TURNED H..LATIN SMALL LETTER H WITH HOOK +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 @@ -4841,6 +5065,7 @@ FF41..FF5A ; Changes_When_Uppercased # L& [26] FULLWIDTH LATIN SMALL LETTER 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 @@ -4991,7 +5216,7 @@ FF41..FF5A ; Changes_When_Uppercased # L& [26] FULLWIDTH LATIN SMALL LETTER 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..2C5E ; Changes_When_Titlecased # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE +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 @@ -5156,9 +5381,15 @@ A7B9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH STR 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 +A7D1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER CLOSED INSULAR G +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 @@ -5167,12 +5398,17 @@ FB13..FB17 ; Changes_When_Titlecased # L& [5] ARMENIAN SMALL LIGATURE MEN N 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 1E922..1E943 ; Changes_When_Titlecased # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 1412 +# Total code points: 1479 # ================================================ @@ -5463,7 +5699,7 @@ FF41..FF5A ; Changes_When_Titlecased # L& [26] FULLWIDTH LATIN SMALL LETTER 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..1C88 ; Changes_When_Casefolded # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +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 @@ -5616,7 +5852,7 @@ FF41..FF5A ; Changes_When_Titlecased # L& [26] FULLWIDTH LATIN SMALL LETTER 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..2C2E ; Changes_When_Casefolded # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +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 @@ -5781,9 +6017,16 @@ A7B8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH S 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 +A7D0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER CLOSED INSULAR G +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 @@ -5791,12 +6034,17 @@ FB13..FB17 ; Changes_When_Casefolded # L& [5] ARMENIAN SMALL LIGATURE MEN N 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 1E900..1E921 ; Changes_When_Casefolded # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA -# Total code points: 1466 +# Total code points: 1533 # ================================================ @@ -5812,8 +6060,7 @@ FF21..FF3A ; Changes_When_Casefolded # L& [26] FULLWIDTH LATIN CAPITAL LETTE 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..019A ; Changes_When_Casemapped # L& [13] LATIN CAPITAL LETTER REVERSED E..LATIN SMALL LETTER L WITH BAR -019C..01A9 ; Changes_When_Casemapped # L& [14] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER ESH +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 @@ -5824,8 +6071,7 @@ FF21..FF3A ; Changes_When_Casefolded # L& [26] FULLWIDTH LATIN CAPITAL LETTE 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 ; Changes_When_Casemapped # L& LATIN SMALL LETTER GAMMA -0265..0266 ; Changes_When_Casemapped # L& [2] LATIN SMALL LETTER TURNED H..LATIN SMALL LETTER H WITH HOOK +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 @@ -5859,7 +6105,7 @@ FF21..FF3A ; Changes_When_Casefolded # L& [26] FULLWIDTH LATIN CAPITAL LETTE 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..1C88 ; Changes_When_Casemapped # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +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 @@ -5893,9 +6139,7 @@ FF21..FF3A ; Changes_When_Casefolded # L& [26] FULLWIDTH LATIN CAPITAL LETTE 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..2C2E ; Changes_When_Casemapped # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; Changes_When_Casemapped # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C70 ; Changes_When_Casemapped # L& [17] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN CAPITAL LETTER TURNED ALPHA +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 @@ -5912,8 +6156,9 @@ A779..A787 ; Changes_When_Casemapped # L& [15] LATIN CAPITAL LETTER INSULAR 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..A7BF ; Changes_When_Casemapped # L& [16] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; Changes_When_Casemapped # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7B0..A7CD ; Changes_When_Casemapped # L& [30] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7D0..A7D1 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D6..A7DC ; Changes_When_Casemapped # L& [7] LATIN CAPITAL LETTER MIDDLE SCOTS S..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 @@ -5924,13 +6169,23 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 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 1E900..1E943 ; Changes_When_Casemapped # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 2847 +# Total code points: 2981 # ================================================ @@ -6003,8 +6258,10 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 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 -08A0..08B4 ; ID_Start # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; ID_Start # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE +0870..0887 ; ID_Start # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088E ; ID_Start # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +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 @@ -6070,6 +6327,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 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 +0C5D ; ID_Start # Lo 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 @@ -6078,7 +6336,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 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 -0CDE ; ID_Start # Lo KANNADA LETTER FA +0CDD..0CDE ; ID_Start # Lo [2] KANNADA LETTER NAKAARA POLLU..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 @@ -6153,9 +6411,8 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 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..170C ; ID_Start # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; ID_Start # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA -1720..1731 ; ID_Start # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA +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 @@ -6179,7 +6436,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 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..1B4B ; ID_Start # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +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 @@ -6187,7 +6444,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 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..1C88 ; ID_Start # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +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 @@ -6242,9 +6499,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 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..2C2E ; ID_Start # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; ID_Start # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; ID_Start # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +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 @@ -6283,8 +6538,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 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..9FFC ; ID_Start # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -A000..A014 ; ID_Start # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +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 @@ -6307,8 +6561,11 @@ A771..A787 ; ID_Start # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER I 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..A7BF ; ID_Start # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; ID_Start # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CD ; ID_Start # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7D0..A7D1 ; ID_Start # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; ID_Start # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7DC ; ID_Start # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F2..A7F4 ; ID_Start # Lm [3] MODIFIER LETTER CAPITAL C..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 @@ -6418,9 +6675,21 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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 @@ -6451,14 +6720,24 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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 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 @@ -6472,6 +6751,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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 @@ -6487,6 +6767,13 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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 @@ -6500,6 +6787,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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 @@ -6519,7 +6807,8 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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 -11AC0..11AF8 ; ID_Start # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +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 @@ -6533,19 +6822,30 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 11D6A..11D89 ; ID_Start # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA 11D98 ; ID_Start # Lo GUNJALA GONDI OM 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 -13000..1342E ; ID_Start # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 +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 16F00..16F4A ; ID_Start # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F50 ; ID_Start # Lo MIAO LETTER NASALIZATION @@ -6554,9 +6854,14 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 16FE3 ; ID_Start # Lm OLD CHINESE ITERATION MARK 17000..187F7 ; ID_Start # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; ID_Start # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18D00..18D08 ; ID_Start # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1B000..1B11E ; ID_Start # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2 +18CFF..18D08 ; ID_Start # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +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 @@ -6593,10 +6898,24 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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 +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 @@ -6633,15 +6952,17 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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..2A6DD ; ID_Start # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; ID_Start # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; ID_Start # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B739 ; ID_Start # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 2B740..2B81D ; ID_Start # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; ID_Start # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 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..323AF ; ID_Start # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -# Total code points: 131482 +# Total code points: 141269 # ================================================ @@ -6746,9 +7067,12 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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 -08A0..08B4 ; ID_Continue # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; ID_Continue # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE -08D3..08E1 ; ID_Continue # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +0870..0887 ; ID_Continue # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088E ; ID_Continue # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +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 @@ -6886,6 +7210,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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 @@ -6893,6 +7218,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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 +0C5D ; ID_Continue # Lo 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 @@ -6914,11 +7240,12 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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 -0CDE ; ID_Continue # Lo KANNADA LETTER FA +0CDD..0CDE ; ID_Continue # Lo [2] KANNADA LETTER NAKAARA POLLU..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 @@ -6972,7 +7299,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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..0ECD ; ID_Continue # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA +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 @@ -7058,11 +7385,12 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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..170C ; ID_Continue # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; ID_Continue # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA +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 -1720..1731 ; ID_Continue # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA -1732..1734 ; ID_Continue # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +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 @@ -7081,6 +7409,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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 @@ -7128,7 +7457,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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..1AC0 ; ID_Continue # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE ; ID_Continue # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 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 @@ -7140,7 +7469,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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..1B4B ; ID_Continue # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +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 @@ -7173,7 +7502,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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..1C88 ; ID_Continue # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +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 @@ -7194,8 +7523,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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..1DF9 ; ID_Continue # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF ; ID_Continue # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +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 @@ -7215,6 +7543,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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 @@ -7243,9 +7572,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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..2C2E ; ID_Continue # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; ID_Continue # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; ID_Continue # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +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 @@ -7283,6 +7610,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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 @@ -7290,8 +7618,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 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..9FFC ; ID_Continue # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -A000..A014 ; ID_Continue # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +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 @@ -7319,8 +7646,11 @@ A771..A787 ; ID_Continue # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTE 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..A7BF ; ID_Continue # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; ID_Continue # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CD ; ID_Continue # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7D0..A7D1 ; ID_Continue # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; ID_Continue # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7DC ; ID_Continue # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F2..A7F4 ; ID_Continue # Lm [3] MODIFIER LETTER CAPITAL C..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 @@ -7460,6 +7790,7 @@ FF10..FF19 ; ID_Continue # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NIN 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 @@ -7499,9 +7830,21 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 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 @@ -7540,13 +7883,25 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 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 +10EFC..10EFF ; ID_Continue # Mn [4] ARABIC COMBINING ALEF OVERLAY..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 @@ -7555,6 +7910,10 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 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 @@ -7562,6 +7921,7 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 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 @@ -7598,6 +7958,8 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 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 @@ -7629,6 +7991,24 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 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 @@ -7680,13 +8060,17 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 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..1171F ; ID_Continue # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA +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 @@ -7737,7 +8121,9 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 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 -11AC0..11AF8 ; ID_Continue # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +11AB0..11AF8 ; ID_Continue # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +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 @@ -7779,15 +8165,40 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 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 -13000..1342E ; ID_Continue # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 +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 @@ -7796,6 +8207,10 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 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 16F00..16F4A ; ID_Continue # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F4F ; ID_Continue # Mn MIAO SIGN CONSONANT MODIFIER BAR @@ -7809,9 +8224,14 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 16FF0..16FF1 ; ID_Continue # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY 17000..187F7 ; ID_Continue # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; ID_Continue # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18D00..18D08 ; ID_Continue # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1B000..1B11E ; ID_Continue # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2 +18CFF..18D08 ; ID_Continue # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +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 @@ -7819,6 +8239,9 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 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 @@ -7863,19 +8286,39 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 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 +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 @@ -7916,16 +8359,18 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 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..2A6DD ; ID_Continue # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; ID_Continue # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; ID_Continue # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B739 ; ID_Continue # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 2B740..2B81D ; ID_Continue # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; ID_Continue # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 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..323AF ; ID_Continue # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 134434 +# Total code points: 144541 # ================================================ @@ -7995,8 +8440,10 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 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 -08A0..08B4 ; XID_Start # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; XID_Start # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE +0870..0887 ; XID_Start # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088E ; XID_Start # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +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 @@ -8062,6 +8509,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 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 +0C5D ; XID_Start # Lo 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 @@ -8070,7 +8518,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 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 -0CDE ; XID_Start # Lo KANNADA LETTER FA +0CDD..0CDE ; XID_Start # Lo [2] KANNADA LETTER NAKAARA POLLU..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 @@ -8145,9 +8593,8 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 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..170C ; XID_Start # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; XID_Start # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA -1720..1731 ; XID_Start # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA +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 @@ -8171,7 +8618,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 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..1B4B ; XID_Start # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +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 @@ -8179,7 +8626,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 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..1C88 ; XID_Start # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +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 @@ -8234,9 +8681,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 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..2C2E ; XID_Start # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; XID_Start # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; XID_Start # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +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 @@ -8274,8 +8719,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 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..9FFC ; XID_Start # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -A000..A014 ; XID_Start # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +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 @@ -8298,8 +8742,11 @@ A771..A787 ; XID_Start # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER 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..A7BF ; XID_Start # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; XID_Start # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CD ; XID_Start # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7D0..A7D1 ; XID_Start # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; XID_Start # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7DC ; XID_Start # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F2..A7F4 ; XID_Start # Lm [3] MODIFIER LETTER CAPITAL C..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 @@ -8414,9 +8861,21 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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 @@ -8447,14 +8906,24 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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 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 @@ -8468,6 +8937,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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 @@ -8483,6 +8953,13 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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 @@ -8496,6 +8973,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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 @@ -8515,7 +8993,8 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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 -11AC0..11AF8 ; XID_Start # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +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 @@ -8529,19 +9008,30 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 11D6A..11D89 ; XID_Start # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA 11D98 ; XID_Start # Lo GUNJALA GONDI OM 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 -13000..1342E ; XID_Start # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 +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 16F00..16F4A ; XID_Start # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F50 ; XID_Start # Lo MIAO LETTER NASALIZATION @@ -8550,9 +9040,14 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 16FE3 ; XID_Start # Lm OLD CHINESE ITERATION MARK 17000..187F7 ; XID_Start # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; XID_Start # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18D00..18D08 ; XID_Start # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1B000..1B11E ; XID_Start # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2 +18CFF..18D08 ; XID_Start # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +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 @@ -8589,10 +9084,24 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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 +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 @@ -8629,15 +9138,17 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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..2A6DD ; XID_Start # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; XID_Start # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; XID_Start # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B739 ; XID_Start # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 2B740..2B81D ; XID_Start # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; XID_Start # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 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..323AF ; XID_Start # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF -# Total code points: 131459 +# Total code points: 141246 # ================================================ @@ -8738,9 +9249,12 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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 -08A0..08B4 ; XID_Continue # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; XID_Continue # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE -08D3..08E1 ; XID_Continue # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +0870..0887 ; XID_Continue # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088E ; XID_Continue # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +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 @@ -8878,6 +9392,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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 @@ -8885,6 +9400,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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 +0C5D ; XID_Continue # Lo 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 @@ -8906,11 +9422,12 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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 -0CDE ; XID_Continue # Lo KANNADA LETTER FA +0CDD..0CDE ; XID_Continue # Lo [2] KANNADA LETTER NAKAARA POLLU..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 @@ -8964,7 +9481,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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..0ECD ; XID_Continue # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA +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 @@ -9050,11 +9567,12 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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..170C ; XID_Continue # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; XID_Continue # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA +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 -1720..1731 ; XID_Continue # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA -1732..1734 ; XID_Continue # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +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 @@ -9073,6 +9591,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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 @@ -9120,7 +9639,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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..1AC0 ; XID_Continue # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE ; XID_Continue # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 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 @@ -9132,7 +9651,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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..1B4B ; XID_Continue # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +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 @@ -9165,7 +9684,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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..1C88 ; XID_Continue # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK +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 @@ -9186,8 +9705,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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..1DF9 ; XID_Continue # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF ; XID_Continue # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +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 @@ -9207,6 +9725,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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 @@ -9235,9 +9754,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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..2C2E ; XID_Continue # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; XID_Continue # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; XID_Continue # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +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 @@ -9274,6 +9791,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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 @@ -9281,8 +9799,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 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..9FFC ; XID_Continue # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -A000..A014 ; XID_Continue # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +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 @@ -9310,8 +9827,11 @@ A771..A787 ; XID_Continue # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETT 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..A7BF ; XID_Continue # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; XID_Continue # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CD ; XID_Continue # L& [62] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH DIAGONAL STROKE +A7D0..A7D1 ; XID_Continue # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; XID_Continue # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7DC ; XID_Continue # L& [8] LATIN SMALL LETTER DOUBLE WYNN..LATIN CAPITAL LETTER LAMBDA WITH STROKE +A7F2..A7F4 ; XID_Continue # Lm [3] MODIFIER LETTER CAPITAL C..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 @@ -9457,6 +9977,7 @@ FF10..FF19 ; XID_Continue # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NI 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 @@ -9496,9 +10017,21 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 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 @@ -9537,13 +10070,25 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 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 +10EFC..10EFF ; XID_Continue # Mn [4] ARABIC COMBINING ALEF OVERLAY..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 @@ -9552,6 +10097,10 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 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 @@ -9559,6 +10108,7 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 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 @@ -9595,6 +10145,8 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 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 @@ -9626,6 +10178,24 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 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 @@ -9677,13 +10247,17 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 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..1171F ; XID_Continue # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA +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 @@ -9734,7 +10308,9 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 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 -11AC0..11AF8 ; XID_Continue # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +11AB0..11AF8 ; XID_Continue # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL +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 @@ -9776,15 +10352,40 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 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 -13000..1342E ; XID_Continue # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 +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 @@ -9793,6 +10394,10 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 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 16F00..16F4A ; XID_Continue # Lo [75] MIAO LETTER PA..MIAO LETTER RTE 16F4F ; XID_Continue # Mn MIAO SIGN CONSONANT MODIFIER BAR @@ -9806,9 +10411,14 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 16FF0..16FF1 ; XID_Continue # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY 17000..187F7 ; XID_Continue # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; XID_Continue # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 -18D00..18D08 ; XID_Continue # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1B000..1B11E ; XID_Continue # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2 +18CFF..18D08 ; XID_Continue # Lo [10] KHITAN SMALL SCRIPT CHARACTER-18CFF..TANGUT IDEOGRAPH-18D08 +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 @@ -9816,6 +10426,9 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 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 @@ -9860,19 +10473,39 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 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 +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 @@ -9913,16 +10546,18 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 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..2A6DD ; XID_Continue # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; XID_Continue # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; XID_Continue # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B739 ; XID_Continue # Lo [4154] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B739 2B740..2B81D ; XID_Continue # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; XID_Continue # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 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..323AF ; XID_Continue # Lo [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF E0100..E01EF ; XID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 134415 +# Total code points: 144522 # ================================================ @@ -9933,8 +10568,17 @@ E0100..E01EF ; XID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTO # + Variation_Selector # - White_Space # - FFF9..FFFB (Interlinear annotation format characters) -# - 13430..13438 (Egyptian hieroglyph 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 @@ -9943,6 +10587,7 @@ E0100..E01EF ; XID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTO 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 @@ -9963,7 +10608,7 @@ E0080..E00FF ; Default_Ignorable_Code_Point # Cn [128] .... -# Total code points: 4173 +# Total code points: 4174 # ================================================ @@ -9997,7 +10642,8 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point # Cn [3600] .................... +23E2..2429 ; Pattern_Syntax # So [72] WHITE TRAPEZIUM..SYMBOL FOR DELETE MEDIUM SHADE FORM +242A..243F ; Pattern_Syntax # Cn [22] .. 2440..244A ; Pattern_Syntax # So [11] OCR HOOK..OCR DOUBLE BACKSLASH 244B..245F ; Pattern_Syntax # Cn [21] .. 2500..25B6 ; Pattern_Syntax # So [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE @@ -1644,8 +1851,17 @@ E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION S 2E42 ; Pattern_Syntax # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK 2E43..2E4F ; Pattern_Syntax # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER 2E50..2E51 ; Pattern_Syntax # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR -2E52 ; Pattern_Syntax # Po TIRONIAN SIGN CAPITAL ET -2E53..2E7F ; Pattern_Syntax # Cn [45] .. +2E52..2E54 ; Pattern_Syntax # Po [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK +2E55 ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH STROKE +2E56 ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH STROKE +2E57 ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E58 ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E59 ; Pattern_Syntax # Ps TOP HALF LEFT PARENTHESIS +2E5A ; Pattern_Syntax # Pe TOP HALF RIGHT PARENTHESIS +2E5B ; Pattern_Syntax # Ps BOTTOM HALF LEFT PARENTHESIS +2E5C ; Pattern_Syntax # Pe BOTTOM HALF RIGHT PARENTHESIS +2E5D ; Pattern_Syntax # Pd OBLIQUE HYPHEN +2E5E..2E7F ; Pattern_Syntax # Cn [34] .. 3001..3003 ; Pattern_Syntax # Po [3] IDEOGRAPHIC COMMA..DITTO MARK 3008 ; Pattern_Syntax # Ps LEFT ANGLE BRACKET 3009 ; Pattern_Syntax # Pe RIGHT ANGLE BRACKET @@ -1682,11 +1898,12 @@ FE45..FE46 ; Pattern_Syntax # Po [2] SESAME DOT..WHITE SESAME DOT 0600..0605 ; Prepended_Concatenation_Mark # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE 06DD ; Prepended_Concatenation_Mark # Cf ARABIC END OF AYAH 070F ; Prepended_Concatenation_Mark # Cf SYRIAC ABBREVIATION MARK +0890..0891 ; Prepended_Concatenation_Mark # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE 08E2 ; Prepended_Concatenation_Mark # Cf ARABIC DISPUTED END OF AYAH 110BD ; Prepended_Concatenation_Mark # Cf KAITHI NUMBER SIGN 110CD ; Prepended_Concatenation_Mark # Cf KAITHI NUMBER SIGN ABOVE -# Total code points: 11 +# Total code points: 13 # ================================================ @@ -1694,4 +1911,18 @@ FE45..FE46 ; Pattern_Syntax # Po [2] SESAME DOT..WHITE SESAME DOT # Total code points: 26 +# ================================================ + +0654..0655 ; Modifier_Combining_Mark # Mn [2] ARABIC HAMZA ABOVE..ARABIC HAMZA BELOW +0658 ; Modifier_Combining_Mark # Mn ARABIC MARK NOON GHUNNA +06DC ; Modifier_Combining_Mark # Mn ARABIC SMALL HIGH SEEN +06E3 ; Modifier_Combining_Mark # Mn ARABIC SMALL LOW SEEN +06E7..06E8 ; Modifier_Combining_Mark # Mn [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON +08CA..08CB ; Modifier_Combining_Mark # Mn [2] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW +08CD..08CF ; Modifier_Combining_Mark # Mn [3] ARABIC SMALL HIGH ZAH..ARABIC LARGE ROUND DOT BELOW +08D3 ; Modifier_Combining_Mark # Mn ARABIC SMALL LOW WAW +08F3 ; Modifier_Combining_Mark # Mn ARABIC SMALL HIGH WAW + +# Total code points: 14 + # EOF diff --git a/lib/res/SpecialCasing.txt b/lib/res/SpecialCasing.txt index 2a1a5a1..e83aba4 100644 --- a/lib/res/SpecialCasing.txt +++ b/lib/res/SpecialCasing.txt @@ -1,28 +1,28 @@ -# SpecialCasing-13.0.0.txt -# Date: 2019-09-08, 23:31:24 GMT -# © 2019 Unicode®, Inc. +# SpecialCasing-16.0.0.txt +# Date: 2024-05-10, 22:49:00 GMT +# © 2024 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see http://www.unicode.org/terms_of_use.html +# For terms of use and license, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database -# For documentation, see http://www.unicode.org/reports/tr44/ +# For documentation, see https://www.unicode.org/reports/tr44/ # # Special Casing # -# This file is a supplement to the UnicodeData.txt file. It does not define any -# properties, but rather provides additional information about the casing of -# Unicode characters, for situations when casing incurs a change in string length -# or is dependent on context or locale. For compatibility, the UnicodeData.txt -# file only contains simple case mappings for characters where they are one-to-one -# and independent of context and language. The data in this file, combined with +# This file is a supplement to the UnicodeData.txt file. The data in this file, combined with # the simple case mappings in UnicodeData.txt, defines the full case mappings # Lowercase_Mapping (lc), Titlecase_Mapping (tc), and Uppercase_Mapping (uc). +# For compatibility, the UnicodeData.txt file only contains simple case mappings +# for characters where they are one-to-one (and independent of context and language). +# +# For historical reasons, this file also provides additional information about the casing +# of Unicode characters for selected situations when casing is dependent on context or locale. # # Note that the preferred mechanism for defining tailored casing operations is # the Unicode Common Locale Data Repository (CLDR). For more information, see the # discussion of case mappings and case algorithms in the Unicode Standard. # -# All code points not listed in this file that do not have a simple case mappings +# All code points not listed in this file that do not have simple case mappings # in UnicodeData.txt map to themselves. # ================================================================================ # Format diff --git a/lib/res/UnicodeData.txt b/lib/res/UnicodeData.txt index e22f967..64258a3 100644 --- a/lib/res/UnicodeData.txt +++ b/lib/res/UnicodeData.txt @@ -409,7 +409,7 @@ 0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199; 0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198 019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D -019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;; +019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;A7DC;;A7DC 019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F; 019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272; 019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;0220;;0220 @@ -610,7 +610,7 @@ 0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;A7AC;;A7AC 0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;; 0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194 -0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;; +0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;A7CB;;A7CB 0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;A78D;;A78D 0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;A7AA;;A7AA 0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;; @@ -1525,6 +1525,7 @@ 061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;; 061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;; 061C;ARABIC LETTER MARK;Cf;0;AL;;;;;N;;;;; +061D;ARABIC END OF TEXT MARK;Po;0;AL;;;;;N;;;;; 061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;; 061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;; 0620;ARABIC LETTER KASHMIRI YEH;Lo;0;AL;;;;;N;;;;; @@ -2089,6 +2090,48 @@ 0868;SYRIAC LETTER MALAYALAM LLA;Lo;0;AL;;;;;N;;;;; 0869;SYRIAC LETTER MALAYALAM LLLA;Lo;0;AL;;;;;N;;;;; 086A;SYRIAC LETTER MALAYALAM SSA;Lo;0;AL;;;;;N;;;;; +0870;ARABIC LETTER ALEF WITH ATTACHED FATHA;Lo;0;AL;;;;;N;;;;; +0871;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA;Lo;0;AL;;;;;N;;;;; +0872;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;; +0873;ARABIC LETTER ALEF WITH LEFT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;; +0874;ARABIC LETTER ALEF WITH ATTACHED KASRA;Lo;0;AL;;;;;N;;;;; +0875;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA;Lo;0;AL;;;;;N;;;;; +0876;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0877;ARABIC LETTER ALEF WITH ATTACHED RIGHT ROUND DOT;Lo;0;AL;;;;;N;;;;; +0878;ARABIC LETTER ALEF WITH ATTACHED LEFT ROUND DOT;Lo;0;AL;;;;;N;;;;; +0879;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT BELOW;Lo;0;AL;;;;;N;;;;; +087A;ARABIC LETTER ALEF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +087B;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +087C;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +087D;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +087E;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND LEFT RING;Lo;0;AL;;;;;N;;;;; +087F;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND LEFT RING;Lo;0;AL;;;;;N;;;;; +0880;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND LEFT RING;Lo;0;AL;;;;;N;;;;; +0881;ARABIC LETTER ALEF WITH ATTACHED RIGHT HAMZA;Lo;0;AL;;;;;N;;;;; +0882;ARABIC LETTER ALEF WITH ATTACHED LEFT HAMZA;Lo;0;AL;;;;;N;;;;; +0883;ARABIC TATWEEL WITH OVERSTRUCK HAMZA;Lo;0;AL;;;;;N;;;;; +0884;ARABIC TATWEEL WITH OVERSTRUCK WAW;Lo;0;AL;;;;;N;;;;; +0885;ARABIC TATWEEL WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +0886;ARABIC LETTER THIN YEH;Lo;0;AL;;;;;N;;;;; +0887;ARABIC BASELINE ROUND DOT;Lo;0;AL;;;;;N;;;;; +0888;ARABIC RAISED ROUND DOT;Sk;0;AL;;;;;N;;;;; +0889;ARABIC LETTER NOON WITH INVERTED SMALL V;Lo;0;AL;;;;;N;;;;; +088A;ARABIC LETTER HAH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; +088B;ARABIC LETTER TAH WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +088C;ARABIC LETTER TAH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; +088D;ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; +088E;ARABIC VERTICAL TAIL;Lo;0;AL;;;;;N;;;;; +0890;ARABIC POUND MARK ABOVE;Cf;0;AN;;;;;N;;;;; +0891;ARABIC PIASTRE MARK ABOVE;Cf;0;AN;;;;;N;;;;; +0897;ARABIC PEPET;Mn;230;NSM;;;;;N;;;;; +0898;ARABIC SMALL HIGH WORD AL-JUZ;Mn;230;NSM;;;;;N;;;;; +0899;ARABIC SMALL LOW WORD ISHMAAM;Mn;220;NSM;;;;;N;;;;; +089A;ARABIC SMALL LOW WORD IMAALA;Mn;220;NSM;;;;;N;;;;; +089B;ARABIC SMALL LOW WORD TASHEEL;Mn;220;NSM;;;;;N;;;;; +089C;ARABIC MADDA WAAJIB;Mn;230;NSM;;;;;N;;;;; +089D;ARABIC SUPERSCRIPT ALEF MOKHASSAS;Mn;230;NSM;;;;;N;;;;; +089E;ARABIC DOUBLED MADDA;Mn;230;NSM;;;;;N;;;;; +089F;ARABIC HALF MADDA OVER MADDA;Mn;230;NSM;;;;;N;;;;; 08A0;ARABIC LETTER BEH WITH SMALL V BELOW;Lo;0;AL;;;;;N;;;;; 08A1;ARABIC LETTER BEH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; 08A2;ARABIC LETTER JEEM WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; @@ -2110,6 +2153,7 @@ 08B2;ARABIC LETTER ZAIN WITH INVERTED V ABOVE;Lo;0;AL;;;;;N;;;;; 08B3;ARABIC LETTER AIN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08B4;ARABIC LETTER KAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +08B5;ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08B6;ARABIC LETTER BEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;; 08B7;ARABIC LETTER PEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;; 08B8;ARABIC LETTER TEH WITH SMALL TEH ABOVE;Lo;0;AL;;;;;N;;;;; @@ -2128,6 +2172,17 @@ 08C5;ARABIC LETTER JEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08C6;ARABIC LETTER JEEM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08C7;ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;; +08C8;ARABIC LETTER GRAF;Lo;0;AL;;;;;N;;;;; +08C9;ARABIC SMALL FARSI YEH;Lm;0;AL;;;;;N;;;;; +08CA;ARABIC SMALL HIGH FARSI YEH;Mn;230;NSM;;;;;N;;;;; +08CB;ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW;Mn;230;NSM;;;;;N;;;;; +08CC;ARABIC SMALL HIGH WORD SAH;Mn;230;NSM;;;;;N;;;;; +08CD;ARABIC SMALL HIGH ZAH;Mn;230;NSM;;;;;N;;;;; +08CE;ARABIC LARGE ROUND DOT ABOVE;Mn;230;NSM;;;;;N;;;;; +08CF;ARABIC LARGE ROUND DOT BELOW;Mn;220;NSM;;;;;N;;;;; +08D0;ARABIC SUKUN BELOW;Mn;220;NSM;;;;;N;;;;; +08D1;ARABIC LARGE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;; +08D2;ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;; 08D3;ARABIC SMALL LOW WAW;Mn;220;NSM;;;;;N;;;;; 08D4;ARABIC SMALL HIGH WORD AR-RUB;Mn;230;NSM;;;;;N;;;;; 08D5;ARABIC SMALL HIGH SAD;Mn;230;NSM;;;;;N;;;;; @@ -2786,6 +2841,7 @@ 0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;; 0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;; 0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;; +0C3C;TELUGU SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; @@ -2806,6 +2862,7 @@ 0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;; 0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;; 0C5A;TELUGU LETTER RRRA;Lo;0;L;;;;;N;;;;; +0C5D;TELUGU LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;; 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; @@ -2901,6 +2958,7 @@ 0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;; +0CDD;KANNADA LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;; 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; @@ -2918,6 +2976,7 @@ 0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0CF1;KANNADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;; 0CF2;KANNADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;; +0CF3;KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT;Mc;0;L;;;;;N;;;;; 0D00;MALAYALAM SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;; 0D01;MALAYALAM SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; @@ -3282,6 +3341,7 @@ 0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;; 0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;; 0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;; +0ECE;LAO YAMAKKAN;Mn;0;NSM;;;;;N;;;;; 0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -5258,6 +5318,7 @@ 170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;; 170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;; 170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;; +170D;TAGALOG LETTER RA;Lo;0;L;;;;;N;;;;; 170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;; 170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;; 1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;; @@ -5265,6 +5326,8 @@ 1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +1715;TAGALOG SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;; +171F;TAGALOG LETTER ARCHAIC RA;Lo;0;L;;;;;N;;;;; 1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;; 1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;; 1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;; @@ -5285,7 +5348,7 @@ 1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;; 1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; -1734;HANUNOO SIGN PAMUDPOD;Mn;9;NSM;;;;;N;;;;; +1734;HANUNOO SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;; 1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; 1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;; 1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;; @@ -5455,6 +5518,7 @@ 180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;; 180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;; 180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;; +180F;MONGOLIAN FREE VARIATION SELECTOR FOUR;Mn;0;NSM;;;;;N;;;;; 1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -6059,6 +6123,20 @@ 1ABE;COMBINING PARENTHESES OVERLAY;Me;0;NSM;;;;;N;;;;; 1ABF;COMBINING LATIN SMALL LETTER W BELOW;Mn;220;NSM;;;;;N;;;;; 1AC0;COMBINING LATIN SMALL LETTER TURNED W BELOW;Mn;220;NSM;;;;;N;;;;; +1AC1;COMBINING LEFT PARENTHESIS ABOVE LEFT;Mn;230;NSM;;;;;N;;;;; +1AC2;COMBINING RIGHT PARENTHESIS ABOVE RIGHT;Mn;230;NSM;;;;;N;;;;; +1AC3;COMBINING LEFT PARENTHESIS BELOW LEFT;Mn;220;NSM;;;;;N;;;;; +1AC4;COMBINING RIGHT PARENTHESIS BELOW RIGHT;Mn;220;NSM;;;;;N;;;;; +1AC5;COMBINING SQUARE BRACKETS ABOVE;Mn;230;NSM;;;;;N;;;;; +1AC6;COMBINING NUMBER SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; +1AC7;COMBINING INVERTED DOUBLE ARCH ABOVE;Mn;230;NSM;;;;;N;;;;; +1AC8;COMBINING PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; +1AC9;COMBINING DOUBLE PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; +1ACA;COMBINING DOUBLE PLUS SIGN BELOW;Mn;220;NSM;;;;;N;;;;; +1ACB;COMBINING TRIPLE ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; +1ACC;COMBINING LATIN SMALL LETTER INSULAR G;Mn;230;NSM;;;;;N;;;;; +1ACD;COMBINING LATIN SMALL LETTER INSULAR R;Mn;230;NSM;;;;;N;;;;; +1ACE;COMBINING LATIN SMALL LETTER INSULAR T;Mn;230;NSM;;;;;N;;;;; 1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;; 1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;; 1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;; @@ -6135,6 +6213,9 @@ 1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;; 1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;; 1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;; +1B4C;BALINESE LETTER ARCHAIC JNYA;Lo;0;L;;;;;N;;;;; +1B4E;BALINESE INVERTED CARIK SIKI;Po;0;L;;;;;N;;;;; +1B4F;BALINESE INVERTED CARIK PAREREN;Po;0;L;;;;;N;;;;; 1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -6180,6 +6261,9 @@ 1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;; 1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;; 1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;; +1B7D;BALINESE PANTI LANTANG;Po;0;L;;;;;N;;;;; +1B7E;BALINESE PAMADA LANTANG;Po;0;L;;;;;N;;;;; +1B7F;BALINESE PANTI BAWAK;Po;0;L;;;;;N;;;;; 1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;; 1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;; 1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;; @@ -6431,6 +6515,8 @@ 1C86;CYRILLIC SMALL LETTER TALL HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A 1C87;CYRILLIC SMALL LETTER TALL YAT;Ll;0;L;;;;;N;;;0462;;0462 1C88;CYRILLIC SMALL LETTER UNBLENDED UK;Ll;0;L;;;;;N;;;A64A;;A64A +1C89;CYRILLIC CAPITAL LETTER TJE;Lu;0;L;;;;;N;;;;1C8A; +1C8A;CYRILLIC SMALL LETTER TJE;Ll;0;L;;;;;N;;;1C89;;1C89 1C90;GEORGIAN MTAVRULI CAPITAL LETTER AN;Lu;0;L;;;;;N;;;;10D0; 1C91;GEORGIAN MTAVRULI CAPITAL LETTER BAN;Lu;0;L;;;;;N;;;;10D1; 1C92;GEORGIAN MTAVRULI CAPITAL LETTER GAN;Lu;0;L;;;;;N;;;;10D2; @@ -6778,6 +6864,7 @@ 1DF7;COMBINING KAVYKA ABOVE LEFT;Mn;228;NSM;;;;;N;;;;; 1DF8;COMBINING DOT ABOVE LEFT;Mn;228;NSM;;;;;N;;;;; 1DF9;COMBINING WIDE INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;;;;; +1DFA;COMBINING DOT BELOW LEFT;Mn;218;NSM;;;;;N;;;;; 1DFB;COMBINING DELETION MARK;Mn;230;NSM;;;;;N;;;;; 1DFC;COMBINING DOUBLE INVERTED BREVE BELOW;Mn;233;NSM;;;;;N;;;;; 1DFD;COMBINING ALMOST EQUAL TO BELOW;Mn;220;NSM;;;;;N;;;;; @@ -7457,6 +7544,7 @@ 20BD;RUBLE SIGN;Sc;0;ET;;;;;N;;;;; 20BE;LARI SIGN;Sc;0;ET;;;;;N;;;;; 20BF;BITCOIN SIGN;Sc;0;ET;;;;;N;;;;; +20C0;SOM SIGN;Sc;0;ET;;;;;N;;;;; 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; @@ -7851,7 +7939,7 @@ 226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;; 226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;; 226C;BETWEEN;Sm;0;ON;;;;;N;;;;; -226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;; +226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;Y;;;;; 226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;; 226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;; 2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;; @@ -8293,6 +8381,9 @@ 2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;; 2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;; 2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;; +2427;SYMBOL FOR DELETE SQUARE CHECKER BOARD FORM;So;0;ON;;;;;N;;;;; +2428;SYMBOL FOR DELETE RECTANGULAR CHECKER BOARD FORM;So;0;ON;;;;;N;;;;; +2429;SYMBOL FOR DELETE MEDIUM SHADE FORM;So;0;ON;;;;;N;;;;; 2440;OCR HOOK;So;0;ON;;;;;N;;;;; 2441;OCR CHAIR;So;0;ON;;;;;N;;;;; 2442;OCR FORK;So;0;ON;;;;;N;;;;; @@ -10300,6 +10391,7 @@ 2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C; 2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D; 2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E; +2C2F;GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI;Lu;0;L;;;;;N;;;;2C5F; 2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00 2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01 2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02 @@ -10347,6 +10439,7 @@ 2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C 2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D 2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E +2C5F;GLAGOLITIC SMALL LETTER CAUDATE CHRIVI;Ll;0;L;;;;;N;;;2C2F;;2C2F 2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61; 2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60 2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B; @@ -10795,6 +10888,17 @@ 2E50;CROSS PATTY WITH RIGHT CROSSBAR;So;0;ON;;;;;N;;;;; 2E51;CROSS PATTY WITH LEFT CROSSBAR;So;0;ON;;;;;N;;;;; 2E52;TIRONIAN SIGN CAPITAL ET;Po;0;ON;;;;;N;;;;; +2E53;MEDIEVAL EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +2E54;MEDIEVAL QUESTION MARK;Po;0;ON;;;;;N;;;;; +2E55;LEFT SQUARE BRACKET WITH STROKE;Ps;0;ON;;;;;Y;;;;; +2E56;RIGHT SQUARE BRACKET WITH STROKE;Pe;0;ON;;;;;Y;;;;; +2E57;LEFT SQUARE BRACKET WITH DOUBLE STROKE;Ps;0;ON;;;;;Y;;;;; +2E58;RIGHT SQUARE BRACKET WITH DOUBLE STROKE;Pe;0;ON;;;;;Y;;;;; +2E59;TOP HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;; +2E5A;TOP HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;; +2E5B;BOTTOM HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;; +2E5C;BOTTOM HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;; +2E5D;OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;; 2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;; 2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;; 2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;; @@ -11136,6 +11240,10 @@ 2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;; 2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;; 2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;; +2FFC;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM RIGHT;So;0;ON;;;;;N;;;;; +2FFD;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER RIGHT;So;0;ON;;;;;N;;;;; +2FFE;IDEOGRAPHIC DESCRIPTION CHARACTER HORIZONTAL REFLECTION;So;0;ON;;;;;N;;;;; +2FFF;IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION;So;0;ON;;;;;N;;;;; 3000;IDEOGRAPHIC SPACE;Zs;0;WS; 0020;;;;N;;;;; 3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;; 3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;; @@ -11610,6 +11718,9 @@ 31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;; 31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;; 31E3;CJK STROKE Q;So;0;ON;;;;;N;;;;; +31E4;CJK STROKE HXG;So;0;ON;;;;;N;;;;; +31E5;CJK STROKE SZP;So;0;ON;;;;;N;;;;; +31EF;IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION;So;0;ON;;;;;N;;;;; 31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;; 31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;; 31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;; @@ -12204,7 +12315,7 @@ 4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;; 4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;; 4E00;;Lo;0;L;;;;;N;;;;; -9FFC;;Lo;0;L;;;;;N;;;;; +9FFF;;Lo;0;L;;;;;N;;;;; A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;; A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;; A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;; @@ -14149,6 +14260,8 @@ A7BC;LATIN CAPITAL LETTER GLOTTAL I;Lu;0;L;;;;;N;;;;A7BD; A7BD;LATIN SMALL LETTER GLOTTAL I;Ll;0;L;;;;;N;;;A7BC;;A7BC A7BE;LATIN CAPITAL LETTER GLOTTAL U;Lu;0;L;;;;;N;;;;A7BF; A7BF;LATIN SMALL LETTER GLOTTAL U;Ll;0;L;;;;;N;;;A7BE;;A7BE +A7C0;LATIN CAPITAL LETTER OLD POLISH O;Lu;0;L;;;;;N;;;;A7C1; +A7C1;LATIN SMALL LETTER OLD POLISH O;Ll;0;L;;;;;N;;;A7C0;;A7C0 A7C2;LATIN CAPITAL LETTER ANGLICANA W;Lu;0;L;;;;;N;;;;A7C3; A7C3;LATIN SMALL LETTER ANGLICANA W;Ll;0;L;;;;;N;;;A7C2;;A7C2 A7C4;LATIN CAPITAL LETTER C WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;A794; @@ -14158,6 +14271,23 @@ A7C7;LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7C8; A7C8;LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C7;;A7C7 A7C9;LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7CA; A7CA;LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C9;;A7C9 +A7CB;LATIN CAPITAL LETTER RAMS HORN;Lu;0;L;;;;;N;;;;0264; +A7CC;LATIN CAPITAL LETTER S WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A7CD; +A7CD;LATIN SMALL LETTER S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A7CC;;A7CC +A7D0;LATIN CAPITAL LETTER CLOSED INSULAR G;Lu;0;L;;;;;N;;;;A7D1; +A7D1;LATIN SMALL LETTER CLOSED INSULAR G;Ll;0;L;;;;;N;;;A7D0;;A7D0 +A7D3;LATIN SMALL LETTER DOUBLE THORN;Ll;0;L;;;;;N;;;;; +A7D5;LATIN SMALL LETTER DOUBLE WYNN;Ll;0;L;;;;;N;;;;; +A7D6;LATIN CAPITAL LETTER MIDDLE SCOTS S;Lu;0;L;;;;;N;;;;A7D7; +A7D7;LATIN SMALL LETTER MIDDLE SCOTS S;Ll;0;L;;;;;N;;;A7D6;;A7D6 +A7D8;LATIN CAPITAL LETTER SIGMOID S;Lu;0;L;;;;;N;;;;A7D9; +A7D9;LATIN SMALL LETTER SIGMOID S;Ll;0;L;;;;;N;;;A7D8;;A7D8 +A7DA;LATIN CAPITAL LETTER LAMBDA;Lu;0;L;;;;;N;;;;A7DB; +A7DB;LATIN SMALL LETTER LAMBDA;Ll;0;L;;;;;N;;;A7DA;;A7DA +A7DC;LATIN CAPITAL LETTER LAMBDA WITH STROKE;Lu;0;L;;;;;N;;;;019B; +A7F2;MODIFIER LETTER CAPITAL C;Lm;0;L; 0043;;;;N;;;;; +A7F3;MODIFIER LETTER CAPITAL F;Lm;0;L; 0046;;;;N;;;;; +A7F4;MODIFIER LETTER CAPITAL Q;Lm;0;L; 0051;;;;N;;;;; A7F5;LATIN CAPITAL LETTER REVERSED HALF H;Lu;0;L;;;;;N;;;;A7F6; A7F6;LATIN SMALL LETTER REVERSED HALF H;Ll;0;L;;;;;N;;;A7F5;;A7F5 A7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;; @@ -15794,6 +15924,7 @@ FBBE;ARABIC SYMBOL TWO DOTS VERTICALLY BELOW;Sk;0;AL;;;;;N;;;;; FBBF;ARABIC SYMBOL RING;Sk;0;AL;;;;;N;;;;; FBC0;ARABIC SYMBOL SMALL TAH ABOVE;Sk;0;AL;;;;;N;;;;; FBC1;ARABIC SYMBOL SMALL TAH BELOW;Sk;0;AL;;;;;N;;;;; +FBC2;ARABIC SYMBOL WASLA ABOVE;Sk;0;AL;;;;;N;;;;; FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; @@ -16159,6 +16290,22 @@ FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL; 0627 064B;;;; FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL; 0627 064B;;;;N;;;;; FD3E;ORNATE LEFT PARENTHESIS;Pe;0;ON;;;;;N;;;;; FD3F;ORNATE RIGHT PARENTHESIS;Ps;0;ON;;;;;N;;;;; +FD40;ARABIC LIGATURE RAHIMAHU ALLAAH;So;0;ON;;;;;N;;;;; +FD41;ARABIC LIGATURE RADI ALLAAHU ANH;So;0;ON;;;;;N;;;;; +FD42;ARABIC LIGATURE RADI ALLAAHU ANHAA;So;0;ON;;;;;N;;;;; +FD43;ARABIC LIGATURE RADI ALLAAHU ANHUM;So;0;ON;;;;;N;;;;; +FD44;ARABIC LIGATURE RADI ALLAAHU ANHUMAA;So;0;ON;;;;;N;;;;; +FD45;ARABIC LIGATURE RADI ALLAAHU ANHUNNA;So;0;ON;;;;;N;;;;; +FD46;ARABIC LIGATURE SALLALLAAHU ALAYHI WA-AALIH;So;0;ON;;;;;N;;;;; +FD47;ARABIC LIGATURE ALAYHI AS-SALAAM;So;0;ON;;;;;N;;;;; +FD48;ARABIC LIGATURE ALAYHIM AS-SALAAM;So;0;ON;;;;;N;;;;; +FD49;ARABIC LIGATURE ALAYHIMAA AS-SALAAM;So;0;ON;;;;;N;;;;; +FD4A;ARABIC LIGATURE ALAYHI AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;; +FD4B;ARABIC LIGATURE QUDDISA SIRRAH;So;0;ON;;;;;N;;;;; +FD4C;ARABIC LIGATURE SALLALLAHU ALAYHI WAAALIHEE WA-SALLAM;So;0;ON;;;;;N;;;;; +FD4D;ARABIC LIGATURE ALAYHAA AS-SALAAM;So;0;ON;;;;;N;;;;; +FD4E;ARABIC LIGATURE TABAARAKA WA-TAAALAA;So;0;ON;;;;;N;;;;; +FD4F;ARABIC LIGATURE RAHIMAHUM ALLAAH;So;0;ON;;;;;N;;;;; FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062C 0645;;;;N;;;;; FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; @@ -16277,6 +16424,7 @@ FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0633 062E 064A;;;;N;;;;; FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 062C 064A;;;;N;;;;; +FDCF;ARABIC LIGATURE SALAAMUHU ALAYNAA;So;0;ON;;;;;N;;;;; FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0635 0644 06D2;;;;N;;;;; FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0642 0644 06D2;;;;N;;;;; FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL; 0627 0644 0644 0647;;;;N;;;;; @@ -16291,6 +16439,8 @@ FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL; 0635 0644 06 FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL; 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;; FDFC;RIAL SIGN;Sc;0;AL; 0631 06CC 0627 0644;;;;N;;;;; FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;; +FDFE;ARABIC LIGATURE SUBHAANAHU WA TAAALAA;So;0;ON;;;;;N;;;;; +FDFF;ARABIC LIGATURE AZZA WA JALL;So;0;ON;;;;;N;;;;; FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;; FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;; FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;; @@ -17798,6 +17948,128 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10562;CAUCASIAN ALBANIAN LETTER PIWR;Lo;0;L;;;;;N;;;;; 10563;CAUCASIAN ALBANIAN LETTER KIW;Lo;0;L;;;;;N;;;;; 1056F;CAUCASIAN ALBANIAN CITATION MARK;Po;0;L;;;;;N;;;;; +10570;VITHKUQI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;10597; +10571;VITHKUQI CAPITAL LETTER BBE;Lu;0;L;;;;;N;;;;10598; +10572;VITHKUQI CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;10599; +10573;VITHKUQI CAPITAL LETTER CE;Lu;0;L;;;;;N;;;;1059A; +10574;VITHKUQI CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;1059B; +10575;VITHKUQI CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;1059C; +10576;VITHKUQI CAPITAL LETTER DHE;Lu;0;L;;;;;N;;;;1059D; +10577;VITHKUQI CAPITAL LETTER EI;Lu;0;L;;;;;N;;;;1059E; +10578;VITHKUQI CAPITAL LETTER E;Lu;0;L;;;;;N;;;;1059F; +10579;VITHKUQI CAPITAL LETTER FE;Lu;0;L;;;;;N;;;;105A0; +1057A;VITHKUQI CAPITAL LETTER GA;Lu;0;L;;;;;N;;;;105A1; +1057C;VITHKUQI CAPITAL LETTER HA;Lu;0;L;;;;;N;;;;105A3; +1057D;VITHKUQI CAPITAL LETTER HHA;Lu;0;L;;;;;N;;;;105A4; +1057E;VITHKUQI CAPITAL LETTER I;Lu;0;L;;;;;N;;;;105A5; +1057F;VITHKUQI CAPITAL LETTER IJE;Lu;0;L;;;;;N;;;;105A6; +10580;VITHKUQI CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;105A7; +10581;VITHKUQI CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;105A8; +10582;VITHKUQI CAPITAL LETTER LA;Lu;0;L;;;;;N;;;;105A9; +10583;VITHKUQI CAPITAL LETTER LLA;Lu;0;L;;;;;N;;;;105AA; +10584;VITHKUQI CAPITAL LETTER ME;Lu;0;L;;;;;N;;;;105AB; +10585;VITHKUQI CAPITAL LETTER NE;Lu;0;L;;;;;N;;;;105AC; +10586;VITHKUQI CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;105AD; +10587;VITHKUQI CAPITAL LETTER O;Lu;0;L;;;;;N;;;;105AE; +10588;VITHKUQI CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;105AF; +10589;VITHKUQI CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;105B0; +1058A;VITHKUQI CAPITAL LETTER RE;Lu;0;L;;;;;N;;;;105B1; +1058C;VITHKUQI CAPITAL LETTER SE;Lu;0;L;;;;;N;;;;105B3; +1058D;VITHKUQI CAPITAL LETTER SHE;Lu;0;L;;;;;N;;;;105B4; +1058E;VITHKUQI CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;105B5; +1058F;VITHKUQI CAPITAL LETTER THE;Lu;0;L;;;;;N;;;;105B6; +10590;VITHKUQI CAPITAL LETTER U;Lu;0;L;;;;;N;;;;105B7; +10591;VITHKUQI CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;105B8; +10592;VITHKUQI CAPITAL LETTER XE;Lu;0;L;;;;;N;;;;105B9; +10594;VITHKUQI CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;105BB; +10595;VITHKUQI CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;105BC; +10597;VITHKUQI SMALL LETTER A;Ll;0;L;;;;;N;;;10570;;10570 +10598;VITHKUQI SMALL LETTER BBE;Ll;0;L;;;;;N;;;10571;;10571 +10599;VITHKUQI SMALL LETTER BE;Ll;0;L;;;;;N;;;10572;;10572 +1059A;VITHKUQI SMALL LETTER CE;Ll;0;L;;;;;N;;;10573;;10573 +1059B;VITHKUQI SMALL LETTER CHE;Ll;0;L;;;;;N;;;10574;;10574 +1059C;VITHKUQI SMALL LETTER DE;Ll;0;L;;;;;N;;;10575;;10575 +1059D;VITHKUQI SMALL LETTER DHE;Ll;0;L;;;;;N;;;10576;;10576 +1059E;VITHKUQI SMALL LETTER EI;Ll;0;L;;;;;N;;;10577;;10577 +1059F;VITHKUQI SMALL LETTER E;Ll;0;L;;;;;N;;;10578;;10578 +105A0;VITHKUQI SMALL LETTER FE;Ll;0;L;;;;;N;;;10579;;10579 +105A1;VITHKUQI SMALL LETTER GA;Ll;0;L;;;;;N;;;1057A;;1057A +105A3;VITHKUQI SMALL LETTER HA;Ll;0;L;;;;;N;;;1057C;;1057C +105A4;VITHKUQI SMALL LETTER HHA;Ll;0;L;;;;;N;;;1057D;;1057D +105A5;VITHKUQI SMALL LETTER I;Ll;0;L;;;;;N;;;1057E;;1057E +105A6;VITHKUQI SMALL LETTER IJE;Ll;0;L;;;;;N;;;1057F;;1057F +105A7;VITHKUQI SMALL LETTER JE;Ll;0;L;;;;;N;;;10580;;10580 +105A8;VITHKUQI SMALL LETTER KA;Ll;0;L;;;;;N;;;10581;;10581 +105A9;VITHKUQI SMALL LETTER LA;Ll;0;L;;;;;N;;;10582;;10582 +105AA;VITHKUQI SMALL LETTER LLA;Ll;0;L;;;;;N;;;10583;;10583 +105AB;VITHKUQI SMALL LETTER ME;Ll;0;L;;;;;N;;;10584;;10584 +105AC;VITHKUQI SMALL LETTER NE;Ll;0;L;;;;;N;;;10585;;10585 +105AD;VITHKUQI SMALL LETTER NJE;Ll;0;L;;;;;N;;;10586;;10586 +105AE;VITHKUQI SMALL LETTER O;Ll;0;L;;;;;N;;;10587;;10587 +105AF;VITHKUQI SMALL LETTER PE;Ll;0;L;;;;;N;;;10588;;10588 +105B0;VITHKUQI SMALL LETTER QA;Ll;0;L;;;;;N;;;10589;;10589 +105B1;VITHKUQI SMALL LETTER RE;Ll;0;L;;;;;N;;;1058A;;1058A +105B3;VITHKUQI SMALL LETTER SE;Ll;0;L;;;;;N;;;1058C;;1058C +105B4;VITHKUQI SMALL LETTER SHE;Ll;0;L;;;;;N;;;1058D;;1058D +105B5;VITHKUQI SMALL LETTER TE;Ll;0;L;;;;;N;;;1058E;;1058E +105B6;VITHKUQI SMALL LETTER THE;Ll;0;L;;;;;N;;;1058F;;1058F +105B7;VITHKUQI SMALL LETTER U;Ll;0;L;;;;;N;;;10590;;10590 +105B8;VITHKUQI SMALL LETTER VE;Ll;0;L;;;;;N;;;10591;;10591 +105B9;VITHKUQI SMALL LETTER XE;Ll;0;L;;;;;N;;;10592;;10592 +105BB;VITHKUQI SMALL LETTER Y;Ll;0;L;;;;;N;;;10594;;10594 +105BC;VITHKUQI SMALL LETTER ZE;Ll;0;L;;;;;N;;;10595;;10595 +105C0;TODHRI LETTER A;Lo;0;L;;;;;N;;;;; +105C1;TODHRI LETTER AS;Lo;0;L;;;;;N;;;;; +105C2;TODHRI LETTER BA;Lo;0;L;;;;;N;;;;; +105C3;TODHRI LETTER MBA;Lo;0;L;;;;;N;;;;; +105C4;TODHRI LETTER CA;Lo;0;L;;;;;N;;;;; +105C5;TODHRI LETTER CHA;Lo;0;L;;;;;N;;;;; +105C6;TODHRI LETTER DA;Lo;0;L;;;;;N;;;;; +105C7;TODHRI LETTER NDA;Lo;0;L;;;;;N;;;;; +105C8;TODHRI LETTER DHA;Lo;0;L;;;;;N;;;;; +105C9;TODHRI LETTER EI;Lo;0;L;105D2 0307;;;;N;;;;; +105CA;TODHRI LETTER E;Lo;0;L;;;;;N;;;;; +105CB;TODHRI LETTER FA;Lo;0;L;;;;;N;;;;; +105CC;TODHRI LETTER GA;Lo;0;L;;;;;N;;;;; +105CD;TODHRI LETTER NGA;Lo;0;L;;;;;N;;;;; +105CE;TODHRI LETTER GJA;Lo;0;L;;;;;N;;;;; +105CF;TODHRI LETTER NGJA;Lo;0;L;;;;;N;;;;; +105D0;TODHRI LETTER HA;Lo;0;L;;;;;N;;;;; +105D1;TODHRI LETTER HJA;Lo;0;L;;;;;N;;;;; +105D2;TODHRI LETTER I;Lo;0;L;;;;;N;;;;; +105D3;TODHRI LETTER JA;Lo;0;L;;;;;N;;;;; +105D4;TODHRI LETTER KA;Lo;0;L;;;;;N;;;;; +105D5;TODHRI LETTER LA;Lo;0;L;;;;;N;;;;; +105D6;TODHRI LETTER LLA;Lo;0;L;;;;;N;;;;; +105D7;TODHRI LETTER MA;Lo;0;L;;;;;N;;;;; +105D8;TODHRI LETTER NA;Lo;0;L;;;;;N;;;;; +105D9;TODHRI LETTER NJAN;Lo;0;L;;;;;N;;;;; +105DA;TODHRI LETTER O;Lo;0;L;;;;;N;;;;; +105DB;TODHRI LETTER PA;Lo;0;L;;;;;N;;;;; +105DC;TODHRI LETTER QA;Lo;0;L;;;;;N;;;;; +105DD;TODHRI LETTER RA;Lo;0;L;;;;;N;;;;; +105DE;TODHRI LETTER RRA;Lo;0;L;;;;;N;;;;; +105DF;TODHRI LETTER SA;Lo;0;L;;;;;N;;;;; +105E0;TODHRI LETTER SHA;Lo;0;L;;;;;N;;;;; +105E1;TODHRI LETTER SHTA;Lo;0;L;;;;;N;;;;; +105E2;TODHRI LETTER TA;Lo;0;L;;;;;N;;;;; +105E3;TODHRI LETTER THA;Lo;0;L;;;;;N;;;;; +105E4;TODHRI LETTER U;Lo;0;L;105DA 0307;;;;N;;;;; +105E5;TODHRI LETTER VA;Lo;0;L;;;;;N;;;;; +105E6;TODHRI LETTER XA;Lo;0;L;;;;;N;;;;; +105E7;TODHRI LETTER NXA;Lo;0;L;;;;;N;;;;; +105E8;TODHRI LETTER XHA;Lo;0;L;;;;;N;;;;; +105E9;TODHRI LETTER NXHA;Lo;0;L;;;;;N;;;;; +105EA;TODHRI LETTER Y;Lo;0;L;;;;;N;;;;; +105EB;TODHRI LETTER JY;Lo;0;L;;;;;N;;;;; +105EC;TODHRI LETTER ZA;Lo;0;L;;;;;N;;;;; +105ED;TODHRI LETTER ZHA;Lo;0;L;;;;;N;;;;; +105EE;TODHRI LETTER GHA;Lo;0;L;;;;;N;;;;; +105EF;TODHRI LETTER STA;Lo;0;L;;;;;N;;;;; +105F0;TODHRI LETTER SKAN;Lo;0;L;;;;;N;;;;; +105F1;TODHRI LETTER KHA;Lo;0;L;;;;;N;;;;; +105F2;TODHRI LETTER PSA;Lo;0;L;;;;;N;;;;; +105F3;TODHRI LETTER OO;Lo;0;L;;;;;N;;;;; 10600;LINEAR A SIGN AB001;Lo;0;L;;;;;N;;;;; 10601;LINEAR A SIGN AB002;Lo;0;L;;;;;N;;;;; 10602;LINEAR A SIGN AB003;Lo;0;L;;;;;N;;;;; @@ -18139,6 +18411,63 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10765;LINEAR A SIGN A805;Lo;0;L;;;;;N;;;;; 10766;LINEAR A SIGN A806;Lo;0;L;;;;;N;;;;; 10767;LINEAR A SIGN A807;Lo;0;L;;;;;N;;;;; +10780;MODIFIER LETTER SMALL CAPITAL AA;Lm;0;L;;;;;N;;;;; +10781;MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON;Lm;0;L; 02D0;;;;N;;;;; +10782;MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON;Lm;0;L; 02D1;;;;N;;;;; +10783;MODIFIER LETTER SMALL AE;Lm;0;L; 00E6;;;;N;;;;; +10784;MODIFIER LETTER SMALL CAPITAL B;Lm;0;L; 0299;;;;N;;;;; +10785;MODIFIER LETTER SMALL B WITH HOOK;Lm;0;L; 0253;;;;N;;;;; +10787;MODIFIER LETTER SMALL DZ DIGRAPH;Lm;0;L; 02A3;;;;N;;;;; +10788;MODIFIER LETTER SMALL DZ DIGRAPH WITH RETROFLEX HOOK;Lm;0;L; AB66;;;;N;;;;; +10789;MODIFIER LETTER SMALL DZ DIGRAPH WITH CURL;Lm;0;L; 02A5;;;;N;;;;; +1078A;MODIFIER LETTER SMALL DEZH DIGRAPH;Lm;0;L; 02A4;;;;N;;;;; +1078B;MODIFIER LETTER SMALL D WITH TAIL;Lm;0;L; 0256;;;;N;;;;; +1078C;MODIFIER LETTER SMALL D WITH HOOK;Lm;0;L; 0257;;;;N;;;;; +1078D;MODIFIER LETTER SMALL D WITH HOOK AND TAIL;Lm;0;L; 1D91;;;;N;;;;; +1078E;MODIFIER LETTER SMALL REVERSED E;Lm;0;L; 0258;;;;N;;;;; +1078F;MODIFIER LETTER SMALL CLOSED REVERSED OPEN E;Lm;0;L; 025E;;;;N;;;;; +10790;MODIFIER LETTER SMALL FENG DIGRAPH;Lm;0;L; 02A9;;;;N;;;;; +10791;MODIFIER LETTER SMALL RAMS HORN;Lm;0;L; 0264;;;;N;;;;; +10792;MODIFIER LETTER SMALL CAPITAL G;Lm;0;L; 0262;;;;N;;;;; +10793;MODIFIER LETTER SMALL G WITH HOOK;Lm;0;L; 0260;;;;N;;;;; +10794;MODIFIER LETTER SMALL CAPITAL G WITH HOOK;Lm;0;L; 029B;;;;N;;;;; +10795;MODIFIER LETTER SMALL H WITH STROKE;Lm;0;L; 0127;;;;N;;;;; +10796;MODIFIER LETTER SMALL CAPITAL H;Lm;0;L; 029C;;;;N;;;;; +10797;MODIFIER LETTER SMALL HENG WITH HOOK;Lm;0;L; 0267;;;;N;;;;; +10798;MODIFIER LETTER SMALL DOTLESS J WITH STROKE AND HOOK;Lm;0;L; 0284;;;;N;;;;; +10799;MODIFIER LETTER SMALL LS DIGRAPH;Lm;0;L; 02AA;;;;N;;;;; +1079A;MODIFIER LETTER SMALL LZ DIGRAPH;Lm;0;L; 02AB;;;;N;;;;; +1079B;MODIFIER LETTER SMALL L WITH BELT;Lm;0;L; 026C;;;;N;;;;; +1079C;MODIFIER LETTER SMALL CAPITAL L WITH BELT;Lm;0;L; 1DF04;;;;N;;;;; +1079D;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK AND BELT;Lm;0;L; A78E;;;;N;;;;; +1079E;MODIFIER LETTER SMALL LEZH;Lm;0;L; 026E;;;;N;;;;; +1079F;MODIFIER LETTER SMALL LEZH WITH RETROFLEX HOOK;Lm;0;L; 1DF05;;;;N;;;;; +107A0;MODIFIER LETTER SMALL TURNED Y;Lm;0;L; 028E;;;;N;;;;; +107A1;MODIFIER LETTER SMALL TURNED Y WITH BELT;Lm;0;L; 1DF06;;;;N;;;;; +107A2;MODIFIER LETTER SMALL O WITH STROKE;Lm;0;L; 00F8;;;;N;;;;; +107A3;MODIFIER LETTER SMALL CAPITAL OE;Lm;0;L; 0276;;;;N;;;;; +107A4;MODIFIER LETTER SMALL CLOSED OMEGA;Lm;0;L; 0277;;;;N;;;;; +107A5;MODIFIER LETTER SMALL Q;Lm;0;L; 0071;;;;N;;;;; +107A6;MODIFIER LETTER SMALL TURNED R WITH LONG LEG;Lm;0;L; 027A;;;;N;;;;; +107A7;MODIFIER LETTER SMALL TURNED R WITH LONG LEG AND RETROFLEX HOOK;Lm;0;L; 1DF08;;;;N;;;;; +107A8;MODIFIER LETTER SMALL R WITH TAIL;Lm;0;L; 027D;;;;N;;;;; +107A9;MODIFIER LETTER SMALL R WITH FISHHOOK;Lm;0;L; 027E;;;;N;;;;; +107AA;MODIFIER LETTER SMALL CAPITAL R;Lm;0;L; 0280;;;;N;;;;; +107AB;MODIFIER LETTER SMALL TC DIGRAPH WITH CURL;Lm;0;L; 02A8;;;;N;;;;; +107AC;MODIFIER LETTER SMALL TS DIGRAPH;Lm;0;L; 02A6;;;;N;;;;; +107AD;MODIFIER LETTER SMALL TS DIGRAPH WITH RETROFLEX HOOK;Lm;0;L; AB67;;;;N;;;;; +107AE;MODIFIER LETTER SMALL TESH DIGRAPH;Lm;0;L; 02A7;;;;N;;;;; +107AF;MODIFIER LETTER SMALL T WITH RETROFLEX HOOK;Lm;0;L; 0288;;;;N;;;;; +107B0;MODIFIER LETTER SMALL V WITH RIGHT HOOK;Lm;0;L; 2C71;;;;N;;;;; +107B2;MODIFIER LETTER SMALL CAPITAL Y;Lm;0;L; 028F;;;;N;;;;; +107B3;MODIFIER LETTER GLOTTAL STOP WITH STROKE;Lm;0;L; 02A1;;;;N;;;;; +107B4;MODIFIER LETTER REVERSED GLOTTAL STOP WITH STROKE;Lm;0;L; 02A2;;;;N;;;;; +107B5;MODIFIER LETTER BILABIAL CLICK;Lm;0;L; 0298;;;;N;;;;; +107B6;MODIFIER LETTER DENTAL CLICK;Lm;0;L; 01C0;;;;N;;;;; +107B7;MODIFIER LETTER LATERAL CLICK;Lm;0;L; 01C1;;;;N;;;;; +107B8;MODIFIER LETTER ALVEOLAR CLICK;Lm;0;L; 01C2;;;;N;;;;; +107B9;MODIFIER LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lm;0;L; 1DF0A;;;;N;;;;; +107BA;MODIFIER LETTER SMALL S WITH CURL;Lm;0;L; 1DF1E;;;;N;;;;; 10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;; 10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;; 10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;; @@ -19062,6 +19391,75 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10D37;HANIFI ROHINGYA DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;; 10D38;HANIFI ROHINGYA DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;; 10D39;HANIFI ROHINGYA DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;; +10D40;GARAY DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;; +10D41;GARAY DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;; +10D42;GARAY DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;; +10D43;GARAY DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;; +10D44;GARAY DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;; +10D45;GARAY DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;; +10D46;GARAY DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;; +10D47;GARAY DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;; +10D48;GARAY DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;; +10D49;GARAY DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;; +10D4A;GARAY VOWEL SIGN A;Lo;0;R;;;;;N;;;;; +10D4B;GARAY VOWEL SIGN I;Lo;0;R;;;;;N;;;;; +10D4C;GARAY VOWEL SIGN O;Lo;0;R;;;;;N;;;;; +10D4D;GARAY VOWEL SIGN EE;Lo;0;R;;;;;N;;;;; +10D4E;GARAY VOWEL LENGTH MARK;Lm;0;R;;;;;N;;;;; +10D4F;GARAY SUKUN;Lo;0;R;;;;;N;;;;; +10D50;GARAY CAPITAL LETTER A;Lu;0;R;;;;;N;;;;10D70; +10D51;GARAY CAPITAL LETTER CA;Lu;0;R;;;;;N;;;;10D71; +10D52;GARAY CAPITAL LETTER MA;Lu;0;R;;;;;N;;;;10D72; +10D53;GARAY CAPITAL LETTER KA;Lu;0;R;;;;;N;;;;10D73; +10D54;GARAY CAPITAL LETTER BA;Lu;0;R;;;;;N;;;;10D74; +10D55;GARAY CAPITAL LETTER JA;Lu;0;R;;;;;N;;;;10D75; +10D56;GARAY CAPITAL LETTER SA;Lu;0;R;;;;;N;;;;10D76; +10D57;GARAY CAPITAL LETTER WA;Lu;0;R;;;;;N;;;;10D77; +10D58;GARAY CAPITAL LETTER LA;Lu;0;R;;;;;N;;;;10D78; +10D59;GARAY CAPITAL LETTER GA;Lu;0;R;;;;;N;;;;10D79; +10D5A;GARAY CAPITAL LETTER DA;Lu;0;R;;;;;N;;;;10D7A; +10D5B;GARAY CAPITAL LETTER XA;Lu;0;R;;;;;N;;;;10D7B; +10D5C;GARAY CAPITAL LETTER YA;Lu;0;R;;;;;N;;;;10D7C; +10D5D;GARAY CAPITAL LETTER TA;Lu;0;R;;;;;N;;;;10D7D; +10D5E;GARAY CAPITAL LETTER RA;Lu;0;R;;;;;N;;;;10D7E; +10D5F;GARAY CAPITAL LETTER NYA;Lu;0;R;;;;;N;;;;10D7F; +10D60;GARAY CAPITAL LETTER FA;Lu;0;R;;;;;N;;;;10D80; +10D61;GARAY CAPITAL LETTER NA;Lu;0;R;;;;;N;;;;10D81; +10D62;GARAY CAPITAL LETTER PA;Lu;0;R;;;;;N;;;;10D82; +10D63;GARAY CAPITAL LETTER HA;Lu;0;R;;;;;N;;;;10D83; +10D64;GARAY CAPITAL LETTER OLD KA;Lu;0;R;;;;;N;;;;10D84; +10D65;GARAY CAPITAL LETTER OLD NA;Lu;0;R;;;;;N;;;;10D85; +10D69;GARAY VOWEL SIGN E;Mn;230;NSM;;;;;N;;;;; +10D6A;GARAY CONSONANT GEMINATION MARK;Mn;230;NSM;;;;;N;;;;; +10D6B;GARAY COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;; +10D6C;GARAY COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;; +10D6D;GARAY CONSONANT NASALIZATION MARK;Mn;230;NSM;;;;;N;;;;; +10D6E;GARAY HYPHEN;Pd;0;ON;;;;;N;;;;; +10D6F;GARAY REDUPLICATION MARK;Lm;0;R;;;;;N;;;;; +10D70;GARAY SMALL LETTER A;Ll;0;R;;;;;N;;;10D50;;10D50 +10D71;GARAY SMALL LETTER CA;Ll;0;R;;;;;N;;;10D51;;10D51 +10D72;GARAY SMALL LETTER MA;Ll;0;R;;;;;N;;;10D52;;10D52 +10D73;GARAY SMALL LETTER KA;Ll;0;R;;;;;N;;;10D53;;10D53 +10D74;GARAY SMALL LETTER BA;Ll;0;R;;;;;N;;;10D54;;10D54 +10D75;GARAY SMALL LETTER JA;Ll;0;R;;;;;N;;;10D55;;10D55 +10D76;GARAY SMALL LETTER SA;Ll;0;R;;;;;N;;;10D56;;10D56 +10D77;GARAY SMALL LETTER WA;Ll;0;R;;;;;N;;;10D57;;10D57 +10D78;GARAY SMALL LETTER LA;Ll;0;R;;;;;N;;;10D58;;10D58 +10D79;GARAY SMALL LETTER GA;Ll;0;R;;;;;N;;;10D59;;10D59 +10D7A;GARAY SMALL LETTER DA;Ll;0;R;;;;;N;;;10D5A;;10D5A +10D7B;GARAY SMALL LETTER XA;Ll;0;R;;;;;N;;;10D5B;;10D5B +10D7C;GARAY SMALL LETTER YA;Ll;0;R;;;;;N;;;10D5C;;10D5C +10D7D;GARAY SMALL LETTER TA;Ll;0;R;;;;;N;;;10D5D;;10D5D +10D7E;GARAY SMALL LETTER RA;Ll;0;R;;;;;N;;;10D5E;;10D5E +10D7F;GARAY SMALL LETTER NYA;Ll;0;R;;;;;N;;;10D5F;;10D5F +10D80;GARAY SMALL LETTER FA;Ll;0;R;;;;;N;;;10D60;;10D60 +10D81;GARAY SMALL LETTER NA;Ll;0;R;;;;;N;;;10D61;;10D61 +10D82;GARAY SMALL LETTER PA;Ll;0;R;;;;;N;;;10D62;;10D62 +10D83;GARAY SMALL LETTER HA;Ll;0;R;;;;;N;;;10D63;;10D63 +10D84;GARAY SMALL LETTER OLD KA;Ll;0;R;;;;;N;;;10D64;;10D64 +10D85;GARAY SMALL LETTER OLD NA;Ll;0;R;;;;;N;;;10D65;;10D65 +10D8E;GARAY PLUS SIGN;Sm;0;R;;;;;N;;;;; +10D8F;GARAY MINUS SIGN;Sm;0;R;;;;;N;;;;; 10E60;RUMI DIGIT ONE;No;0;AN;;;1;1;N;;;;; 10E61;RUMI DIGIT TWO;No;0;AN;;;2;2;N;;;;; 10E62;RUMI DIGIT THREE;No;0;AN;;;3;3;N;;;;; @@ -19140,6 +19538,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10EAD;YEZIDI HYPHENATION MARK;Pd;0;R;;;;;N;;;;; 10EB0;YEZIDI LETTER LAM WITH DOT ABOVE;Lo;0;R;;;;;N;;;;; 10EB1;YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE;Lo;0;R;;;;;N;;;;; +10EC2;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; +10EC3;ARABIC LETTER TAH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; +10EC4;ARABIC LETTER KAF WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; +10EFC;ARABIC COMBINING ALEF OVERLAY;Mn;0;NSM;;;;;N;;;;; +10EFD;ARABIC SMALL LOW WORD SAKTA;Mn;220;NSM;;;;;N;;;;; +10EFE;ARABIC SMALL LOW WORD QASR;Mn;220;NSM;;;;;N;;;;; +10EFF;ARABIC SMALL LOW WORD MADDA;Mn;220;NSM;;;;;N;;;;; 10F00;OLD SOGDIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10F01;OLD SOGDIAN LETTER FINAL ALEPH;Lo;0;R;;;;;N;;;;; 10F02;OLD SOGDIAN LETTER BETH;Lo;0;R;;;;;N;;;;; @@ -19222,6 +19627,32 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10F57;SOGDIAN PUNCTUATION CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;; 10F58;SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS;Po;0;AL;;;;;N;;;;; 10F59;SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;; +10F70;OLD UYGHUR LETTER ALEPH;Lo;0;R;;;;;N;;;;; +10F71;OLD UYGHUR LETTER BETH;Lo;0;R;;;;;N;;;;; +10F72;OLD UYGHUR LETTER GIMEL-HETH;Lo;0;R;;;;;N;;;;; +10F73;OLD UYGHUR LETTER WAW;Lo;0;R;;;;;N;;;;; +10F74;OLD UYGHUR LETTER ZAYIN;Lo;0;R;;;;;N;;;;; +10F75;OLD UYGHUR LETTER FINAL HETH;Lo;0;R;;;;;N;;;;; +10F76;OLD UYGHUR LETTER YODH;Lo;0;R;;;;;N;;;;; +10F77;OLD UYGHUR LETTER KAPH;Lo;0;R;;;;;N;;;;; +10F78;OLD UYGHUR LETTER LAMEDH;Lo;0;R;;;;;N;;;;; +10F79;OLD UYGHUR LETTER MEM;Lo;0;R;;;;;N;;;;; +10F7A;OLD UYGHUR LETTER NUN;Lo;0;R;;;;;N;;;;; +10F7B;OLD UYGHUR LETTER SAMEKH;Lo;0;R;;;;;N;;;;; +10F7C;OLD UYGHUR LETTER PE;Lo;0;R;;;;;N;;;;; +10F7D;OLD UYGHUR LETTER SADHE;Lo;0;R;;;;;N;;;;; +10F7E;OLD UYGHUR LETTER RESH;Lo;0;R;;;;;N;;;;; +10F7F;OLD UYGHUR LETTER SHIN;Lo;0;R;;;;;N;;;;; +10F80;OLD UYGHUR LETTER TAW;Lo;0;R;;;;;N;;;;; +10F81;OLD UYGHUR LETTER LESH;Lo;0;R;;;;;N;;;;; +10F82;OLD UYGHUR COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;; +10F83;OLD UYGHUR COMBINING DOT BELOW;Mn;220;NSM;;;;;N;;;;; +10F84;OLD UYGHUR COMBINING TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; +10F85;OLD UYGHUR COMBINING TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;; +10F86;OLD UYGHUR PUNCTUATION BAR;Po;0;R;;;;;N;;;;; +10F87;OLD UYGHUR PUNCTUATION TWO BARS;Po;0;R;;;;;N;;;;; +10F88;OLD UYGHUR PUNCTUATION TWO DOTS;Po;0;R;;;;;N;;;;; +10F89;OLD UYGHUR PUNCTUATION FOUR DOTS;Po;0;R;;;;;N;;;;; 10FB0;CHORASMIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10FB1;CHORASMIAN LETTER SMALL ALEPH;Lo;0;R;;;;;N;;;;; 10FB2;CHORASMIAN LETTER BETH;Lo;0;R;;;;;N;;;;; @@ -19381,6 +19812,12 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1106D;BRAHMI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1106E;BRAHMI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1106F;BRAHMI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +11070;BRAHMI SIGN OLD TAMIL VIRAMA;Mn;9;NSM;;;;;N;;;;; +11071;BRAHMI LETTER OLD TAMIL SHORT E;Lo;0;L;;;;;N;;;;; +11072;BRAHMI LETTER OLD TAMIL SHORT O;Lo;0;L;;;;;N;;;;; +11073;BRAHMI VOWEL SIGN OLD TAMIL SHORT E;Mn;0;NSM;;;;;N;;;;; +11074;BRAHMI VOWEL SIGN OLD TAMIL SHORT O;Mn;0;NSM;;;;;N;;;;; +11075;BRAHMI LETTER OLD TAMIL LLA;Lo;0;L;;;;;N;;;;; 1107F;BRAHMI NUMBER JOINER;Mn;9;NSM;;;;;N;;;;; 11080;KAITHI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11081;KAITHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; @@ -19448,6 +19885,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 110BF;KAITHI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;; 110C0;KAITHI DANDA;Po;0;L;;;;;N;;;;; 110C1;KAITHI DOUBLE DANDA;Po;0;L;;;;;N;;;;; +110C2;KAITHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 110CD;KAITHI NUMBER SIGN ABOVE;Cf;0;L;;;;;N;;;;; 110D0;SORA SOMPENG LETTER SAH;Lo;0;L;;;;;N;;;;; 110D1;SORA SOMPENG LETTER TAH;Lo;0;L;;;;;N;;;;; @@ -19772,6 +20210,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1123C;KHOJKI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;; 1123D;KHOJKI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 1123E;KHOJKI SIGN SUKUN;Mn;0;NSM;;;;;N;;;;; +1123F;KHOJKI LETTER QA;Lo;0;L;;;;;N;;;;; +11240;KHOJKI LETTER SHORT I;Lo;0;L;;;;;N;;;;; +11241;KHOJKI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 11280;MULTANI LETTER A;Lo;0;L;;;;;N;;;;; 11281;MULTANI LETTER I;Lo;0;L;;;;;N;;;;; 11282;MULTANI LETTER U;Lo;0;L;;;;;N;;;;; @@ -19965,6 +20406,86 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11372;COMBINING GRANTHA LETTER NA;Mn;230;NSM;;;;;N;;;;; 11373;COMBINING GRANTHA LETTER VI;Mn;230;NSM;;;;;N;;;;; 11374;COMBINING GRANTHA LETTER PA;Mn;230;NSM;;;;;N;;;;; +11380;TULU-TIGALARI LETTER A;Lo;0;L;;;;;N;;;;; +11381;TULU-TIGALARI LETTER AA;Lo;0;L;;;;;N;;;;; +11382;TULU-TIGALARI LETTER I;Lo;0;L;;;;;N;;;;; +11383;TULU-TIGALARI LETTER II;Lo;0;L;11382 113C9;;;;N;;;;; +11384;TULU-TIGALARI LETTER U;Lo;0;L;;;;;N;;;;; +11385;TULU-TIGALARI LETTER UU;Lo;0;L;11384 113BB;;;;N;;;;; +11386;TULU-TIGALARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +11387;TULU-TIGALARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +11388;TULU-TIGALARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +11389;TULU-TIGALARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +1138B;TULU-TIGALARI LETTER EE;Lo;0;L;;;;;N;;;;; +1138E;TULU-TIGALARI LETTER AI;Lo;0;L;1138B 113C2;;;;N;;;;; +11390;TULU-TIGALARI LETTER OO;Lo;0;L;;;;;N;;;;; +11391;TULU-TIGALARI LETTER AU;Lo;0;L;11390 113C9;;;;N;;;;; +11392;TULU-TIGALARI LETTER KA;Lo;0;L;;;;;N;;;;; +11393;TULU-TIGALARI LETTER KHA;Lo;0;L;;;;;N;;;;; +11394;TULU-TIGALARI LETTER GA;Lo;0;L;;;;;N;;;;; +11395;TULU-TIGALARI LETTER GHA;Lo;0;L;;;;;N;;;;; +11396;TULU-TIGALARI LETTER NGA;Lo;0;L;;;;;N;;;;; +11397;TULU-TIGALARI LETTER CA;Lo;0;L;;;;;N;;;;; +11398;TULU-TIGALARI LETTER CHA;Lo;0;L;;;;;N;;;;; +11399;TULU-TIGALARI LETTER JA;Lo;0;L;;;;;N;;;;; +1139A;TULU-TIGALARI LETTER JHA;Lo;0;L;;;;;N;;;;; +1139B;TULU-TIGALARI LETTER NYA;Lo;0;L;;;;;N;;;;; +1139C;TULU-TIGALARI LETTER TTA;Lo;0;L;;;;;N;;;;; +1139D;TULU-TIGALARI LETTER TTHA;Lo;0;L;;;;;N;;;;; +1139E;TULU-TIGALARI LETTER DDA;Lo;0;L;;;;;N;;;;; +1139F;TULU-TIGALARI LETTER DDHA;Lo;0;L;;;;;N;;;;; +113A0;TULU-TIGALARI LETTER NNA;Lo;0;L;;;;;N;;;;; +113A1;TULU-TIGALARI LETTER TA;Lo;0;L;;;;;N;;;;; +113A2;TULU-TIGALARI LETTER THA;Lo;0;L;;;;;N;;;;; +113A3;TULU-TIGALARI LETTER DA;Lo;0;L;;;;;N;;;;; +113A4;TULU-TIGALARI LETTER DHA;Lo;0;L;;;;;N;;;;; +113A5;TULU-TIGALARI LETTER NA;Lo;0;L;;;;;N;;;;; +113A6;TULU-TIGALARI LETTER PA;Lo;0;L;;;;;N;;;;; +113A7;TULU-TIGALARI LETTER PHA;Lo;0;L;;;;;N;;;;; +113A8;TULU-TIGALARI LETTER BA;Lo;0;L;;;;;N;;;;; +113A9;TULU-TIGALARI LETTER BHA;Lo;0;L;;;;;N;;;;; +113AA;TULU-TIGALARI LETTER MA;Lo;0;L;;;;;N;;;;; +113AB;TULU-TIGALARI LETTER YA;Lo;0;L;;;;;N;;;;; +113AC;TULU-TIGALARI LETTER RA;Lo;0;L;;;;;N;;;;; +113AD;TULU-TIGALARI LETTER LA;Lo;0;L;;;;;N;;;;; +113AE;TULU-TIGALARI LETTER VA;Lo;0;L;;;;;N;;;;; +113AF;TULU-TIGALARI LETTER SHA;Lo;0;L;;;;;N;;;;; +113B0;TULU-TIGALARI LETTER SSA;Lo;0;L;;;;;N;;;;; +113B1;TULU-TIGALARI LETTER SA;Lo;0;L;;;;;N;;;;; +113B2;TULU-TIGALARI LETTER HA;Lo;0;L;;;;;N;;;;; +113B3;TULU-TIGALARI LETTER LLA;Lo;0;L;;;;;N;;;;; +113B4;TULU-TIGALARI LETTER RRA;Lo;0;L;;;;;N;;;;; +113B5;TULU-TIGALARI LETTER LLLA;Lo;0;L;;;;;N;;;;; +113B7;TULU-TIGALARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +113B8;TULU-TIGALARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +113B9;TULU-TIGALARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +113BA;TULU-TIGALARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +113BB;TULU-TIGALARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +113BC;TULU-TIGALARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +113BD;TULU-TIGALARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +113BE;TULU-TIGALARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +113BF;TULU-TIGALARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +113C0;TULU-TIGALARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +113C2;TULU-TIGALARI VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; +113C5;TULU-TIGALARI VOWEL SIGN AI;Mc;0;L;113C2 113C2;;;;N;;;;; +113C7;TULU-TIGALARI VOWEL SIGN OO;Mc;0;L;113C2 113B8;;;;N;;;;; +113C8;TULU-TIGALARI VOWEL SIGN AU;Mc;0;L;113C2 113C9;;;;N;;;;; +113C9;TULU-TIGALARI AU LENGTH MARK;Mc;0;L;;;;;N;;;;; +113CA;TULU-TIGALARI SIGN CANDRA ANUNASIKA;Mc;0;L;;;;;N;;;;; +113CC;TULU-TIGALARI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +113CD;TULU-TIGALARI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +113CE;TULU-TIGALARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +113CF;TULU-TIGALARI SIGN LOOPED VIRAMA;Mc;9;L;;;;;N;;;;; +113D0;TULU-TIGALARI CONJOINER;Mn;9;NSM;;;;;N;;;;; +113D1;TULU-TIGALARI REPHA;Lo;0;L;;;;;N;;;;; +113D2;TULU-TIGALARI GEMINATION MARK;Mn;0;NSM;;;;;N;;;;; +113D3;TULU-TIGALARI SIGN PLUTA;Lo;0;L;;;;;N;;;;; +113D4;TULU-TIGALARI DANDA;Po;0;L;;;;;N;;;;; +113D5;TULU-TIGALARI DOUBLE DANDA;Po;0;L;;;;;N;;;;; +113D7;TULU-TIGALARI SIGN OM PUSHPIKA;Po;0;L;;;;;N;;;;; +113D8;TULU-TIGALARI SIGN SHRII PUSHPIKA;Po;0;L;;;;;N;;;;; +113E1;TULU-TIGALARI VEDIC TONE SVARITA;Mn;0;NSM;;;;;N;;;;; +113E2;TULU-TIGALARI VEDIC TONE ANUDATTA;Mn;0;NSM;;;;;N;;;;; 11400;NEWA LETTER A;Lo;0;L;;;;;N;;;;; 11401;NEWA LETTER AA;Lo;0;L;;;;;N;;;;; 11402;NEWA LETTER I;Lo;0;L;;;;;N;;;;; @@ -20385,6 +20906,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 116B6;TAKRI SIGN VIRAMA;Mc;9;L;;;;;N;;;;; 116B7;TAKRI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 116B8;TAKRI LETTER ARCHAIC KHA;Lo;0;L;;;;;N;;;;; +116B9;TAKRI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 116C0;TAKRI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 116C1;TAKRI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 116C2;TAKRI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -20395,6 +20917,26 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 116C7;TAKRI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 116C8;TAKRI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 116C9;TAKRI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +116D0;MYANMAR PAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +116D1;MYANMAR PAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +116D2;MYANMAR PAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +116D3;MYANMAR PAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +116D4;MYANMAR PAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +116D5;MYANMAR PAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +116D6;MYANMAR PAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +116D7;MYANMAR PAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +116D8;MYANMAR PAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +116D9;MYANMAR PAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +116DA;MYANMAR EASTERN PWO KAREN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +116DB;MYANMAR EASTERN PWO KAREN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +116DC;MYANMAR EASTERN PWO KAREN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +116DD;MYANMAR EASTERN PWO KAREN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +116DE;MYANMAR EASTERN PWO KAREN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +116DF;MYANMAR EASTERN PWO KAREN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +116E0;MYANMAR EASTERN PWO KAREN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +116E1;MYANMAR EASTERN PWO KAREN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +116E2;MYANMAR EASTERN PWO KAREN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +116E3;MYANMAR EASTERN PWO KAREN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11700;AHOM LETTER KA;Lo;0;L;;;;;N;;;;; 11701;AHOM LETTER KHA;Lo;0;L;;;;;N;;;;; 11702;AHOM LETTER NGA;Lo;0;L;;;;;N;;;;; @@ -20423,7 +20965,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11719;AHOM LETTER JHA;Lo;0;L;;;;;N;;;;; 1171A;AHOM LETTER ALTERNATE BA;Lo;0;L;;;;;N;;;;; 1171D;AHOM CONSONANT SIGN MEDIAL LA;Mn;0;NSM;;;;;N;;;;; -1171E;AHOM CONSONANT SIGN MEDIAL RA;Mn;0;NSM;;;;;N;;;;; +1171E;AHOM CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;; 1171F;AHOM CONSONANT SIGN MEDIAL LIGATING RA;Mn;0;NSM;;;;;N;;;;; 11720;AHOM VOWEL SIGN A;Mc;0;L;;;;;N;;;;; 11721;AHOM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; @@ -20453,6 +20995,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1173D;AHOM SIGN SECTION;Po;0;L;;;;;N;;;;; 1173E;AHOM SIGN RULAI;Po;0;L;;;;;N;;;;; 1173F;AHOM SYMBOL VI;So;0;L;;;;;N;;;;; +11740;AHOM LETTER CA;Lo;0;L;;;;;N;;;;; +11741;AHOM LETTER TTA;Lo;0;L;;;;;N;;;;; +11742;AHOM LETTER TTHA;Lo;0;L;;;;;N;;;;; +11743;AHOM LETTER DDA;Lo;0;L;;;;;N;;;;; +11744;AHOM LETTER DDHA;Lo;0;L;;;;;N;;;;; +11745;AHOM LETTER NNA;Lo;0;L;;;;;N;;;;; +11746;AHOM LETTER LLA;Lo;0;L;;;;;N;;;;; 11800;DOGRA LETTER A;Lo;0;L;;;;;N;;;;; 11801;DOGRA LETTER AA;Lo;0;L;;;;;N;;;;; 11802;DOGRA LETTER I;Lo;0;L;;;;;N;;;;; @@ -20889,6 +21438,22 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11AA0;SOYOMBO HEAD MARK WITH MOON AND SUN;Po;0;L;;;;;N;;;;; 11AA1;SOYOMBO TERMINAL MARK-1;Po;0;L;;;;;N;;;;; 11AA2;SOYOMBO TERMINAL MARK-2;Po;0;L;;;;;N;;;;; +11AB0;CANADIAN SYLLABICS NATTILIK HI;Lo;0;L;;;;;N;;;;; +11AB1;CANADIAN SYLLABICS NATTILIK HII;Lo;0;L;;;;;N;;;;; +11AB2;CANADIAN SYLLABICS NATTILIK HO;Lo;0;L;;;;;N;;;;; +11AB3;CANADIAN SYLLABICS NATTILIK HOO;Lo;0;L;;;;;N;;;;; +11AB4;CANADIAN SYLLABICS NATTILIK HA;Lo;0;L;;;;;N;;;;; +11AB5;CANADIAN SYLLABICS NATTILIK HAA;Lo;0;L;;;;;N;;;;; +11AB6;CANADIAN SYLLABICS NATTILIK SHRI;Lo;0;L;;;;;N;;;;; +11AB7;CANADIAN SYLLABICS NATTILIK SHRII;Lo;0;L;;;;;N;;;;; +11AB8;CANADIAN SYLLABICS NATTILIK SHRO;Lo;0;L;;;;;N;;;;; +11AB9;CANADIAN SYLLABICS NATTILIK SHROO;Lo;0;L;;;;;N;;;;; +11ABA;CANADIAN SYLLABICS NATTILIK SHRA;Lo;0;L;;;;;N;;;;; +11ABB;CANADIAN SYLLABICS NATTILIK SHRAA;Lo;0;L;;;;;N;;;;; +11ABC;CANADIAN SYLLABICS SPE;Lo;0;L;;;;;N;;;;; +11ABD;CANADIAN SYLLABICS SPI;Lo;0;L;;;;;N;;;;; +11ABE;CANADIAN SYLLABICS SPO;Lo;0;L;;;;;N;;;;; +11ABF;CANADIAN SYLLABICS SPA;Lo;0;L;;;;;N;;;;; 11AC0;PAU CIN HAU LETTER PA;Lo;0;L;;;;;N;;;;; 11AC1;PAU CIN HAU LETTER KA;Lo;0;L;;;;;N;;;;; 11AC2;PAU CIN HAU LETTER LA;Lo;0;L;;;;;N;;;;; @@ -20946,6 +21511,60 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11AF6;PAU CIN HAU LOW-FALLING TONE LONG FINAL;Lo;0;L;;;;;N;;;;; 11AF7;PAU CIN HAU LOW-FALLING TONE FINAL;Lo;0;L;;;;;N;;;;; 11AF8;PAU CIN HAU GLOTTAL STOP FINAL;Lo;0;L;;;;;N;;;;; +11B00;DEVANAGARI HEAD MARK;Po;0;L;;;;;N;;;;; +11B01;DEVANAGARI HEAD MARK WITH HEADSTROKE;Po;0;L;;;;;N;;;;; +11B02;DEVANAGARI SIGN BHALE;Po;0;L;;;;;N;;;;; +11B03;DEVANAGARI SIGN BHALE WITH HOOK;Po;0;L;;;;;N;;;;; +11B04;DEVANAGARI SIGN EXTENDED BHALE;Po;0;L;;;;;N;;;;; +11B05;DEVANAGARI SIGN EXTENDED BHALE WITH HOOK;Po;0;L;;;;;N;;;;; +11B06;DEVANAGARI SIGN WESTERN FIVE-LIKE BHALE;Po;0;L;;;;;N;;;;; +11B07;DEVANAGARI SIGN WESTERN NINE-LIKE BHALE;Po;0;L;;;;;N;;;;; +11B08;DEVANAGARI SIGN REVERSED NINE-LIKE BHALE;Po;0;L;;;;;N;;;;; +11B09;DEVANAGARI SIGN MINDU;Po;0;L;;;;;N;;;;; +11BC0;SUNUWAR LETTER DEVI;Lo;0;L;;;;;N;;;;; +11BC1;SUNUWAR LETTER TASLA;Lo;0;L;;;;;N;;;;; +11BC2;SUNUWAR LETTER EKO;Lo;0;L;;;;;N;;;;; +11BC3;SUNUWAR LETTER IMAR;Lo;0;L;;;;;N;;;;; +11BC4;SUNUWAR LETTER REU;Lo;0;L;;;;;N;;;;; +11BC5;SUNUWAR LETTER UTTHI;Lo;0;L;;;;;N;;;;; +11BC6;SUNUWAR LETTER KIK;Lo;0;L;;;;;N;;;;; +11BC7;SUNUWAR LETTER MA;Lo;0;L;;;;;N;;;;; +11BC8;SUNUWAR LETTER APPHO;Lo;0;L;;;;;N;;;;; +11BC9;SUNUWAR LETTER PIP;Lo;0;L;;;;;N;;;;; +11BCA;SUNUWAR LETTER GIL;Lo;0;L;;;;;N;;;;; +11BCB;SUNUWAR LETTER HAMSO;Lo;0;L;;;;;N;;;;; +11BCC;SUNUWAR LETTER CARMI;Lo;0;L;;;;;N;;;;; +11BCD;SUNUWAR LETTER NAH;Lo;0;L;;;;;N;;;;; +11BCE;SUNUWAR LETTER BUR;Lo;0;L;;;;;N;;;;; +11BCF;SUNUWAR LETTER JYAH;Lo;0;L;;;;;N;;;;; +11BD0;SUNUWAR LETTER LOACHA;Lo;0;L;;;;;N;;;;; +11BD1;SUNUWAR LETTER OTTHI;Lo;0;L;;;;;N;;;;; +11BD2;SUNUWAR LETTER SHYELE;Lo;0;L;;;;;N;;;;; +11BD3;SUNUWAR LETTER VARCA;Lo;0;L;;;;;N;;;;; +11BD4;SUNUWAR LETTER YAT;Lo;0;L;;;;;N;;;;; +11BD5;SUNUWAR LETTER AVA;Lo;0;L;;;;;N;;;;; +11BD6;SUNUWAR LETTER AAL;Lo;0;L;;;;;N;;;;; +11BD7;SUNUWAR LETTER DONGA;Lo;0;L;;;;;N;;;;; +11BD8;SUNUWAR LETTER THARI;Lo;0;L;;;;;N;;;;; +11BD9;SUNUWAR LETTER PHAR;Lo;0;L;;;;;N;;;;; +11BDA;SUNUWAR LETTER NGAR;Lo;0;L;;;;;N;;;;; +11BDB;SUNUWAR LETTER KHA;Lo;0;L;;;;;N;;;;; +11BDC;SUNUWAR LETTER SHYER;Lo;0;L;;;;;N;;;;; +11BDD;SUNUWAR LETTER CHELAP;Lo;0;L;;;;;N;;;;; +11BDE;SUNUWAR LETTER TENTU;Lo;0;L;;;;;N;;;;; +11BDF;SUNUWAR LETTER THELE;Lo;0;L;;;;;N;;;;; +11BE0;SUNUWAR LETTER KLOKO;Lo;0;L;;;;;N;;;;; +11BE1;SUNUWAR SIGN PVO;Po;0;L;;;;;N;;;;; +11BF0;SUNUWAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +11BF1;SUNUWAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +11BF2;SUNUWAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +11BF3;SUNUWAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +11BF4;SUNUWAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +11BF5;SUNUWAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +11BF6;SUNUWAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +11BF7;SUNUWAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +11BF8;SUNUWAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +11BF9;SUNUWAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 11C00;BHAIKSUKI LETTER A;Lo;0;L;;;;;N;;;;; 11C01;BHAIKSUKI LETTER AA;Lo;0;L;;;;;N;;;;; 11C02;BHAIKSUKI LETTER I;Lo;0;L;;;;;N;;;;; @@ -21274,6 +21893,93 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11EF6;MAKASAR VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 11EF7;MAKASAR PASSIMBANG;Po;0;L;;;;;N;;;;; 11EF8;MAKASAR END OF SECTION;Po;0;L;;;;;N;;;;; +11F00;KAWI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; +11F01;KAWI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +11F02;KAWI SIGN REPHA;Lo;0;L;;;;;N;;;;; +11F03;KAWI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +11F04;KAWI LETTER A;Lo;0;L;;;;;N;;;;; +11F05;KAWI LETTER AA;Lo;0;L;;;;;N;;;;; +11F06;KAWI LETTER I;Lo;0;L;;;;;N;;;;; +11F07;KAWI LETTER II;Lo;0;L;;;;;N;;;;; +11F08;KAWI LETTER U;Lo;0;L;;;;;N;;;;; +11F09;KAWI LETTER UU;Lo;0;L;;;;;N;;;;; +11F0A;KAWI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +11F0B;KAWI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +11F0C;KAWI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +11F0D;KAWI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +11F0E;KAWI LETTER E;Lo;0;L;;;;;N;;;;; +11F0F;KAWI LETTER AI;Lo;0;L;;;;;N;;;;; +11F10;KAWI LETTER O;Lo;0;L;;;;;N;;;;; +11F12;KAWI LETTER KA;Lo;0;L;;;;;N;;;;; +11F13;KAWI LETTER KHA;Lo;0;L;;;;;N;;;;; +11F14;KAWI LETTER GA;Lo;0;L;;;;;N;;;;; +11F15;KAWI LETTER GHA;Lo;0;L;;;;;N;;;;; +11F16;KAWI LETTER NGA;Lo;0;L;;;;;N;;;;; +11F17;KAWI LETTER CA;Lo;0;L;;;;;N;;;;; +11F18;KAWI LETTER CHA;Lo;0;L;;;;;N;;;;; +11F19;KAWI LETTER JA;Lo;0;L;;;;;N;;;;; +11F1A;KAWI LETTER JHA;Lo;0;L;;;;;N;;;;; +11F1B;KAWI LETTER NYA;Lo;0;L;;;;;N;;;;; +11F1C;KAWI LETTER TTA;Lo;0;L;;;;;N;;;;; +11F1D;KAWI LETTER TTHA;Lo;0;L;;;;;N;;;;; +11F1E;KAWI LETTER DDA;Lo;0;L;;;;;N;;;;; +11F1F;KAWI LETTER DDHA;Lo;0;L;;;;;N;;;;; +11F20;KAWI LETTER NNA;Lo;0;L;;;;;N;;;;; +11F21;KAWI LETTER TA;Lo;0;L;;;;;N;;;;; +11F22;KAWI LETTER THA;Lo;0;L;;;;;N;;;;; +11F23;KAWI LETTER DA;Lo;0;L;;;;;N;;;;; +11F24;KAWI LETTER DHA;Lo;0;L;;;;;N;;;;; +11F25;KAWI LETTER NA;Lo;0;L;;;;;N;;;;; +11F26;KAWI LETTER PA;Lo;0;L;;;;;N;;;;; +11F27;KAWI LETTER PHA;Lo;0;L;;;;;N;;;;; +11F28;KAWI LETTER BA;Lo;0;L;;;;;N;;;;; +11F29;KAWI LETTER BHA;Lo;0;L;;;;;N;;;;; +11F2A;KAWI LETTER MA;Lo;0;L;;;;;N;;;;; +11F2B;KAWI LETTER YA;Lo;0;L;;;;;N;;;;; +11F2C;KAWI LETTER RA;Lo;0;L;;;;;N;;;;; +11F2D;KAWI LETTER LA;Lo;0;L;;;;;N;;;;; +11F2E;KAWI LETTER WA;Lo;0;L;;;;;N;;;;; +11F2F;KAWI LETTER SHA;Lo;0;L;;;;;N;;;;; +11F30;KAWI LETTER SSA;Lo;0;L;;;;;N;;;;; +11F31;KAWI LETTER SA;Lo;0;L;;;;;N;;;;; +11F32;KAWI LETTER HA;Lo;0;L;;;;;N;;;;; +11F33;KAWI LETTER JNYA;Lo;0;L;;;;;N;;;;; +11F34;KAWI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +11F35;KAWI VOWEL SIGN ALTERNATE AA;Mc;0;L;;;;;N;;;;; +11F36;KAWI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +11F37;KAWI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +11F38;KAWI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +11F39;KAWI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +11F3A;KAWI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +11F3E;KAWI VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +11F3F;KAWI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +11F40;KAWI VOWEL SIGN EU;Mn;0;NSM;;;;;N;;;;; +11F41;KAWI SIGN KILLER;Mc;9;L;;;;;N;;;;; +11F42;KAWI CONJOINER;Mn;9;NSM;;;;;N;;;;; +11F43;KAWI DANDA;Po;0;L;;;;;N;;;;; +11F44;KAWI DOUBLE DANDA;Po;0;L;;;;;N;;;;; +11F45;KAWI PUNCTUATION SECTION MARKER;Po;0;L;;;;;N;;;;; +11F46;KAWI PUNCTUATION ALTERNATE SECTION MARKER;Po;0;L;;;;;N;;;;; +11F47;KAWI PUNCTUATION FLOWER;Po;0;L;;;;;N;;;;; +11F48;KAWI PUNCTUATION SPACE FILLER;Po;0;L;;;;;N;;;;; +11F49;KAWI PUNCTUATION DOT;Po;0;L;;;;;N;;;;; +11F4A;KAWI PUNCTUATION DOUBLE DOT;Po;0;L;;;;;N;;;;; +11F4B;KAWI PUNCTUATION TRIPLE DOT;Po;0;L;;;;;N;;;;; +11F4C;KAWI PUNCTUATION CIRCLE;Po;0;L;;;;;N;;;;; +11F4D;KAWI PUNCTUATION FILLED CIRCLE;Po;0;L;;;;;N;;;;; +11F4E;KAWI PUNCTUATION SPIRAL;Po;0;L;;;;;N;;;;; +11F4F;KAWI PUNCTUATION CLOSING SPIRAL;Po;0;L;;;;;N;;;;; +11F50;KAWI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +11F51;KAWI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +11F52;KAWI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +11F53;KAWI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +11F54;KAWI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +11F55;KAWI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +11F56;KAWI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +11F57;KAWI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +11F58;KAWI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +11F59;KAWI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +11F5A;KAWI SIGN NUKTA;Mn;0;NSM;;;;;N;;;;; 11FB0;LISU LETTER YHA;Lo;0;L;;;;;N;;;;; 11FC0;TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH;No;0;L;;;;1/320;N;;;;; 11FC1;TAMIL FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;; @@ -22560,6 +23266,105 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12541;CUNEIFORM SIGN ZA7;Lo;0;L;;;;;N;;;;; 12542;CUNEIFORM SIGN ZU OVER ZU PLUS SAR;Lo;0;L;;;;;N;;;;; 12543;CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU;Lo;0;L;;;;;N;;;;; +12F90;CYPRO-MINOAN SIGN CM001;Lo;0;L;;;;;N;;;;; +12F91;CYPRO-MINOAN SIGN CM002;Lo;0;L;;;;;N;;;;; +12F92;CYPRO-MINOAN SIGN CM004;Lo;0;L;;;;;N;;;;; +12F93;CYPRO-MINOAN SIGN CM005;Lo;0;L;;;;;N;;;;; +12F94;CYPRO-MINOAN SIGN CM006;Lo;0;L;;;;;N;;;;; +12F95;CYPRO-MINOAN SIGN CM007;Lo;0;L;;;;;N;;;;; +12F96;CYPRO-MINOAN SIGN CM008;Lo;0;L;;;;;N;;;;; +12F97;CYPRO-MINOAN SIGN CM009;Lo;0;L;;;;;N;;;;; +12F98;CYPRO-MINOAN SIGN CM010;Lo;0;L;;;;;N;;;;; +12F99;CYPRO-MINOAN SIGN CM011;Lo;0;L;;;;;N;;;;; +12F9A;CYPRO-MINOAN SIGN CM012;Lo;0;L;;;;;N;;;;; +12F9B;CYPRO-MINOAN SIGN CM012B;Lo;0;L;;;;;N;;;;; +12F9C;CYPRO-MINOAN SIGN CM013;Lo;0;L;;;;;N;;;;; +12F9D;CYPRO-MINOAN SIGN CM015;Lo;0;L;;;;;N;;;;; +12F9E;CYPRO-MINOAN SIGN CM017;Lo;0;L;;;;;N;;;;; +12F9F;CYPRO-MINOAN SIGN CM019;Lo;0;L;;;;;N;;;;; +12FA0;CYPRO-MINOAN SIGN CM021;Lo;0;L;;;;;N;;;;; +12FA1;CYPRO-MINOAN SIGN CM023;Lo;0;L;;;;;N;;;;; +12FA2;CYPRO-MINOAN SIGN CM024;Lo;0;L;;;;;N;;;;; +12FA3;CYPRO-MINOAN SIGN CM025;Lo;0;L;;;;;N;;;;; +12FA4;CYPRO-MINOAN SIGN CM026;Lo;0;L;;;;;N;;;;; +12FA5;CYPRO-MINOAN SIGN CM027;Lo;0;L;;;;;N;;;;; +12FA6;CYPRO-MINOAN SIGN CM028;Lo;0;L;;;;;N;;;;; +12FA7;CYPRO-MINOAN SIGN CM029;Lo;0;L;;;;;N;;;;; +12FA8;CYPRO-MINOAN SIGN CM030;Lo;0;L;;;;;N;;;;; +12FA9;CYPRO-MINOAN SIGN CM033;Lo;0;L;;;;;N;;;;; +12FAA;CYPRO-MINOAN SIGN CM034;Lo;0;L;;;;;N;;;;; +12FAB;CYPRO-MINOAN SIGN CM035;Lo;0;L;;;;;N;;;;; +12FAC;CYPRO-MINOAN SIGN CM036;Lo;0;L;;;;;N;;;;; +12FAD;CYPRO-MINOAN SIGN CM037;Lo;0;L;;;;;N;;;;; +12FAE;CYPRO-MINOAN SIGN CM038;Lo;0;L;;;;;N;;;;; +12FAF;CYPRO-MINOAN SIGN CM039;Lo;0;L;;;;;N;;;;; +12FB0;CYPRO-MINOAN SIGN CM040;Lo;0;L;;;;;N;;;;; +12FB1;CYPRO-MINOAN SIGN CM041;Lo;0;L;;;;;N;;;;; +12FB2;CYPRO-MINOAN SIGN CM044;Lo;0;L;;;;;N;;;;; +12FB3;CYPRO-MINOAN SIGN CM046;Lo;0;L;;;;;N;;;;; +12FB4;CYPRO-MINOAN SIGN CM047;Lo;0;L;;;;;N;;;;; +12FB5;CYPRO-MINOAN SIGN CM049;Lo;0;L;;;;;N;;;;; +12FB6;CYPRO-MINOAN SIGN CM050;Lo;0;L;;;;;N;;;;; +12FB7;CYPRO-MINOAN SIGN CM051;Lo;0;L;;;;;N;;;;; +12FB8;CYPRO-MINOAN SIGN CM052;Lo;0;L;;;;;N;;;;; +12FB9;CYPRO-MINOAN SIGN CM053;Lo;0;L;;;;;N;;;;; +12FBA;CYPRO-MINOAN SIGN CM054;Lo;0;L;;;;;N;;;;; +12FBB;CYPRO-MINOAN SIGN CM055;Lo;0;L;;;;;N;;;;; +12FBC;CYPRO-MINOAN SIGN CM056;Lo;0;L;;;;;N;;;;; +12FBD;CYPRO-MINOAN SIGN CM058;Lo;0;L;;;;;N;;;;; +12FBE;CYPRO-MINOAN SIGN CM059;Lo;0;L;;;;;N;;;;; +12FBF;CYPRO-MINOAN SIGN CM060;Lo;0;L;;;;;N;;;;; +12FC0;CYPRO-MINOAN SIGN CM061;Lo;0;L;;;;;N;;;;; +12FC1;CYPRO-MINOAN SIGN CM062;Lo;0;L;;;;;N;;;;; +12FC2;CYPRO-MINOAN SIGN CM063;Lo;0;L;;;;;N;;;;; +12FC3;CYPRO-MINOAN SIGN CM064;Lo;0;L;;;;;N;;;;; +12FC4;CYPRO-MINOAN SIGN CM066;Lo;0;L;;;;;N;;;;; +12FC5;CYPRO-MINOAN SIGN CM067;Lo;0;L;;;;;N;;;;; +12FC6;CYPRO-MINOAN SIGN CM068;Lo;0;L;;;;;N;;;;; +12FC7;CYPRO-MINOAN SIGN CM069;Lo;0;L;;;;;N;;;;; +12FC8;CYPRO-MINOAN SIGN CM070;Lo;0;L;;;;;N;;;;; +12FC9;CYPRO-MINOAN SIGN CM071;Lo;0;L;;;;;N;;;;; +12FCA;CYPRO-MINOAN SIGN CM072;Lo;0;L;;;;;N;;;;; +12FCB;CYPRO-MINOAN SIGN CM073;Lo;0;L;;;;;N;;;;; +12FCC;CYPRO-MINOAN SIGN CM074;Lo;0;L;;;;;N;;;;; +12FCD;CYPRO-MINOAN SIGN CM075;Lo;0;L;;;;;N;;;;; +12FCE;CYPRO-MINOAN SIGN CM075B;Lo;0;L;;;;;N;;;;; +12FCF;CYPRO-MINOAN SIGN CM076;Lo;0;L;;;;;N;;;;; +12FD0;CYPRO-MINOAN SIGN CM078;Lo;0;L;;;;;N;;;;; +12FD1;CYPRO-MINOAN SIGN CM079;Lo;0;L;;;;;N;;;;; +12FD2;CYPRO-MINOAN SIGN CM080;Lo;0;L;;;;;N;;;;; +12FD3;CYPRO-MINOAN SIGN CM081;Lo;0;L;;;;;N;;;;; +12FD4;CYPRO-MINOAN SIGN CM082;Lo;0;L;;;;;N;;;;; +12FD5;CYPRO-MINOAN SIGN CM083;Lo;0;L;;;;;N;;;;; +12FD6;CYPRO-MINOAN SIGN CM084;Lo;0;L;;;;;N;;;;; +12FD7;CYPRO-MINOAN SIGN CM085;Lo;0;L;;;;;N;;;;; +12FD8;CYPRO-MINOAN SIGN CM086;Lo;0;L;;;;;N;;;;; +12FD9;CYPRO-MINOAN SIGN CM087;Lo;0;L;;;;;N;;;;; +12FDA;CYPRO-MINOAN SIGN CM088;Lo;0;L;;;;;N;;;;; +12FDB;CYPRO-MINOAN SIGN CM089;Lo;0;L;;;;;N;;;;; +12FDC;CYPRO-MINOAN SIGN CM090;Lo;0;L;;;;;N;;;;; +12FDD;CYPRO-MINOAN SIGN CM091;Lo;0;L;;;;;N;;;;; +12FDE;CYPRO-MINOAN SIGN CM092;Lo;0;L;;;;;N;;;;; +12FDF;CYPRO-MINOAN SIGN CM094;Lo;0;L;;;;;N;;;;; +12FE0;CYPRO-MINOAN SIGN CM095;Lo;0;L;;;;;N;;;;; +12FE1;CYPRO-MINOAN SIGN CM096;Lo;0;L;;;;;N;;;;; +12FE2;CYPRO-MINOAN SIGN CM097;Lo;0;L;;;;;N;;;;; +12FE3;CYPRO-MINOAN SIGN CM098;Lo;0;L;;;;;N;;;;; +12FE4;CYPRO-MINOAN SIGN CM099;Lo;0;L;;;;;N;;;;; +12FE5;CYPRO-MINOAN SIGN CM100;Lo;0;L;;;;;N;;;;; +12FE6;CYPRO-MINOAN SIGN CM101;Lo;0;L;;;;;N;;;;; +12FE7;CYPRO-MINOAN SIGN CM102;Lo;0;L;;;;;N;;;;; +12FE8;CYPRO-MINOAN SIGN CM103;Lo;0;L;;;;;N;;;;; +12FE9;CYPRO-MINOAN SIGN CM104;Lo;0;L;;;;;N;;;;; +12FEA;CYPRO-MINOAN SIGN CM105;Lo;0;L;;;;;N;;;;; +12FEB;CYPRO-MINOAN SIGN CM107;Lo;0;L;;;;;N;;;;; +12FEC;CYPRO-MINOAN SIGN CM108;Lo;0;L;;;;;N;;;;; +12FED;CYPRO-MINOAN SIGN CM109;Lo;0;L;;;;;N;;;;; +12FEE;CYPRO-MINOAN SIGN CM110;Lo;0;L;;;;;N;;;;; +12FEF;CYPRO-MINOAN SIGN CM112;Lo;0;L;;;;;N;;;;; +12FF0;CYPRO-MINOAN SIGN CM114;Lo;0;L;;;;;N;;;;; +12FF1;CYPRO-MINOAN SIGN CM301;Po;0;L;;;;;N;;;;; +12FF2;CYPRO-MINOAN SIGN CM302;Po;0;L;;;;;N;;;;; 13000;EGYPTIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;; 13001;EGYPTIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;; 13002;EGYPTIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;; @@ -23631,6 +24436,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1342C;EGYPTIAN HIEROGLYPH AA030;Lo;0;L;;;;;N;;;;; 1342D;EGYPTIAN HIEROGLYPH AA031;Lo;0;L;;;;;N;;;;; 1342E;EGYPTIAN HIEROGLYPH AA032;Lo;0;L;;;;;N;;;;; +1342F;EGYPTIAN HIEROGLYPH V011D;Lo;0;L;;;;;N;;;;; 13430;EGYPTIAN HIEROGLYPH VERTICAL JOINER;Cf;0;L;;;;;N;;;;; 13431;EGYPTIAN HIEROGLYPH HORIZONTAL JOINER;Cf;0;L;;;;;N;;;;; 13432;EGYPTIAN HIEROGLYPH INSERT AT TOP START;Cf;0;L;;;;;N;;;;; @@ -23640,6 +24446,4030 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 13436;EGYPTIAN HIEROGLYPH OVERLAY MIDDLE;Cf;0;L;;;;;N;;;;; 13437;EGYPTIAN HIEROGLYPH BEGIN SEGMENT;Cf;0;L;;;;;N;;;;; 13438;EGYPTIAN HIEROGLYPH END SEGMENT;Cf;0;L;;;;;N;;;;; +13439;EGYPTIAN HIEROGLYPH INSERT AT MIDDLE;Cf;0;L;;;;;N;;;;; +1343A;EGYPTIAN HIEROGLYPH INSERT AT TOP;Cf;0;L;;;;;N;;;;; +1343B;EGYPTIAN HIEROGLYPH INSERT AT BOTTOM;Cf;0;L;;;;;N;;;;; +1343C;EGYPTIAN HIEROGLYPH BEGIN ENCLOSURE;Cf;0;L;;;;;N;;;;; +1343D;EGYPTIAN HIEROGLYPH END ENCLOSURE;Cf;0;L;;;;;N;;;;; +1343E;EGYPTIAN HIEROGLYPH BEGIN WALLED ENCLOSURE;Cf;0;L;;;;;N;;;;; +1343F;EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE;Cf;0;L;;;;;N;;;;; +13440;EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY;Mn;0;NSM;;;;;N;;;;; +13441;EGYPTIAN HIEROGLYPH FULL BLANK;Lo;0;L;;;;;N;;;;; +13442;EGYPTIAN HIEROGLYPH HALF BLANK;Lo;0;L;;;;;N;;;;; +13443;EGYPTIAN HIEROGLYPH LOST SIGN;Lo;0;L;;;;;N;;;;; +13444;EGYPTIAN HIEROGLYPH HALF LOST SIGN;Lo;0;L;;;;;N;;;;; +13445;EGYPTIAN HIEROGLYPH TALL LOST SIGN;Lo;0;L;;;;;N;;;;; +13446;EGYPTIAN HIEROGLYPH WIDE LOST SIGN;Lo;0;L;;;;;N;;;;; +13447;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START;Mn;0;NSM;;;;;N;;;;; +13448;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM START;Mn;0;NSM;;;;;N;;;;; +13449;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START;Mn;0;NSM;;;;;N;;;;; +1344A;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP END;Mn;0;NSM;;;;;N;;;;; +1344B;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP;Mn;0;NSM;;;;;N;;;;; +1344C;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM START AND TOP END;Mn;0;NSM;;;;;N;;;;; +1344D;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START AND TOP;Mn;0;NSM;;;;;N;;;;; +1344E;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM END;Mn;0;NSM;;;;;N;;;;; +1344F;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START AND BOTTOM END;Mn;0;NSM;;;;;N;;;;; +13450;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM;Mn;0;NSM;;;;;N;;;;; +13451;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START AND BOTTOM;Mn;0;NSM;;;;;N;;;;; +13452;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT END;Mn;0;NSM;;;;;N;;;;; +13453;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP AND END;Mn;0;NSM;;;;;N;;;;; +13454;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM AND END;Mn;0;NSM;;;;;N;;;;; +13455;EGYPTIAN HIEROGLYPH MODIFIER DAMAGED;Mn;0;NSM;;;;;N;;;;; +13460;EGYPTIAN HIEROGLYPH-13460;Lo;0;L;;;;;N;;;;; +13461;EGYPTIAN HIEROGLYPH-13461;Lo;0;L;;;;;N;;;;; +13462;EGYPTIAN HIEROGLYPH-13462;Lo;0;L;;;;;N;;;;; +13463;EGYPTIAN HIEROGLYPH-13463;Lo;0;L;;;;;N;;;;; +13464;EGYPTIAN HIEROGLYPH-13464;Lo;0;L;;;;;N;;;;; +13465;EGYPTIAN HIEROGLYPH-13465;Lo;0;L;;;;;N;;;;; +13466;EGYPTIAN HIEROGLYPH-13466;Lo;0;L;;;;;N;;;;; +13467;EGYPTIAN HIEROGLYPH-13467;Lo;0;L;;;;;N;;;;; +13468;EGYPTIAN HIEROGLYPH-13468;Lo;0;L;;;;;N;;;;; +13469;EGYPTIAN HIEROGLYPH-13469;Lo;0;L;;;;;N;;;;; +1346A;EGYPTIAN HIEROGLYPH-1346A;Lo;0;L;;;;;N;;;;; +1346B;EGYPTIAN HIEROGLYPH-1346B;Lo;0;L;;;;;N;;;;; +1346C;EGYPTIAN HIEROGLYPH-1346C;Lo;0;L;;;;;N;;;;; +1346D;EGYPTIAN HIEROGLYPH-1346D;Lo;0;L;;;;;N;;;;; +1346E;EGYPTIAN HIEROGLYPH-1346E;Lo;0;L;;;;;N;;;;; +1346F;EGYPTIAN HIEROGLYPH-1346F;Lo;0;L;;;;;N;;;;; +13470;EGYPTIAN HIEROGLYPH-13470;Lo;0;L;;;;;N;;;;; +13471;EGYPTIAN HIEROGLYPH-13471;Lo;0;L;;;;;N;;;;; +13472;EGYPTIAN HIEROGLYPH-13472;Lo;0;L;;;;;N;;;;; +13473;EGYPTIAN HIEROGLYPH-13473;Lo;0;L;;;;;N;;;;; +13474;EGYPTIAN HIEROGLYPH-13474;Lo;0;L;;;;;N;;;;; +13475;EGYPTIAN HIEROGLYPH-13475;Lo;0;L;;;;;N;;;;; +13476;EGYPTIAN HIEROGLYPH-13476;Lo;0;L;;;;;N;;;;; +13477;EGYPTIAN HIEROGLYPH-13477;Lo;0;L;;;;;N;;;;; +13478;EGYPTIAN HIEROGLYPH-13478;Lo;0;L;;;;;N;;;;; +13479;EGYPTIAN HIEROGLYPH-13479;Lo;0;L;;;;;N;;;;; +1347A;EGYPTIAN HIEROGLYPH-1347A;Lo;0;L;;;;;N;;;;; +1347B;EGYPTIAN HIEROGLYPH-1347B;Lo;0;L;;;;;N;;;;; +1347C;EGYPTIAN HIEROGLYPH-1347C;Lo;0;L;;;;;N;;;;; +1347D;EGYPTIAN HIEROGLYPH-1347D;Lo;0;L;;;;;N;;;;; +1347E;EGYPTIAN HIEROGLYPH-1347E;Lo;0;L;;;;;N;;;;; +1347F;EGYPTIAN HIEROGLYPH-1347F;Lo;0;L;;;;;N;;;;; +13480;EGYPTIAN HIEROGLYPH-13480;Lo;0;L;;;;;N;;;;; +13481;EGYPTIAN HIEROGLYPH-13481;Lo;0;L;;;;;N;;;;; +13482;EGYPTIAN HIEROGLYPH-13482;Lo;0;L;;;;;N;;;;; +13483;EGYPTIAN HIEROGLYPH-13483;Lo;0;L;;;;;N;;;;; +13484;EGYPTIAN HIEROGLYPH-13484;Lo;0;L;;;;;N;;;;; +13485;EGYPTIAN HIEROGLYPH-13485;Lo;0;L;;;;;N;;;;; +13486;EGYPTIAN HIEROGLYPH-13486;Lo;0;L;;;;;N;;;;; +13487;EGYPTIAN HIEROGLYPH-13487;Lo;0;L;;;;;N;;;;; +13488;EGYPTIAN HIEROGLYPH-13488;Lo;0;L;;;;;N;;;;; +13489;EGYPTIAN HIEROGLYPH-13489;Lo;0;L;;;;;N;;;;; +1348A;EGYPTIAN HIEROGLYPH-1348A;Lo;0;L;;;;;N;;;;; +1348B;EGYPTIAN HIEROGLYPH-1348B;Lo;0;L;;;;;N;;;;; +1348C;EGYPTIAN HIEROGLYPH-1348C;Lo;0;L;;;;;N;;;;; +1348D;EGYPTIAN HIEROGLYPH-1348D;Lo;0;L;;;;;N;;;;; +1348E;EGYPTIAN HIEROGLYPH-1348E;Lo;0;L;;;;;N;;;;; +1348F;EGYPTIAN HIEROGLYPH-1348F;Lo;0;L;;;;;N;;;;; +13490;EGYPTIAN HIEROGLYPH-13490;Lo;0;L;;;;;N;;;;; +13491;EGYPTIAN HIEROGLYPH-13491;Lo;0;L;;;;;N;;;;; +13492;EGYPTIAN HIEROGLYPH-13492;Lo;0;L;;;;;N;;;;; +13493;EGYPTIAN HIEROGLYPH-13493;Lo;0;L;;;;;N;;;;; +13494;EGYPTIAN HIEROGLYPH-13494;Lo;0;L;;;;;N;;;;; +13495;EGYPTIAN HIEROGLYPH-13495;Lo;0;L;;;;;N;;;;; +13496;EGYPTIAN HIEROGLYPH-13496;Lo;0;L;;;;;N;;;;; +13497;EGYPTIAN HIEROGLYPH-13497;Lo;0;L;;;;;N;;;;; +13498;EGYPTIAN HIEROGLYPH-13498;Lo;0;L;;;;;N;;;;; +13499;EGYPTIAN HIEROGLYPH-13499;Lo;0;L;;;;;N;;;;; +1349A;EGYPTIAN HIEROGLYPH-1349A;Lo;0;L;;;;;N;;;;; +1349B;EGYPTIAN HIEROGLYPH-1349B;Lo;0;L;;;;;N;;;;; +1349C;EGYPTIAN HIEROGLYPH-1349C;Lo;0;L;;;;;N;;;;; +1349D;EGYPTIAN HIEROGLYPH-1349D;Lo;0;L;;;;;N;;;;; +1349E;EGYPTIAN HIEROGLYPH-1349E;Lo;0;L;;;;;N;;;;; +1349F;EGYPTIAN HIEROGLYPH-1349F;Lo;0;L;;;;;N;;;;; +134A0;EGYPTIAN HIEROGLYPH-134A0;Lo;0;L;;;;;N;;;;; +134A1;EGYPTIAN HIEROGLYPH-134A1;Lo;0;L;;;;;N;;;;; +134A2;EGYPTIAN HIEROGLYPH-134A2;Lo;0;L;;;;;N;;;;; +134A3;EGYPTIAN HIEROGLYPH-134A3;Lo;0;L;;;;;N;;;;; +134A4;EGYPTIAN HIEROGLYPH-134A4;Lo;0;L;;;;;N;;;;; +134A5;EGYPTIAN HIEROGLYPH-134A5;Lo;0;L;;;;;N;;;;; +134A6;EGYPTIAN HIEROGLYPH-134A6;Lo;0;L;;;;;N;;;;; +134A7;EGYPTIAN HIEROGLYPH-134A7;Lo;0;L;;;;;N;;;;; +134A8;EGYPTIAN HIEROGLYPH-134A8;Lo;0;L;;;;;N;;;;; +134A9;EGYPTIAN HIEROGLYPH-134A9;Lo;0;L;;;;;N;;;;; +134AA;EGYPTIAN HIEROGLYPH-134AA;Lo;0;L;;;;;N;;;;; +134AB;EGYPTIAN HIEROGLYPH-134AB;Lo;0;L;;;;;N;;;;; +134AC;EGYPTIAN HIEROGLYPH-134AC;Lo;0;L;;;;;N;;;;; +134AD;EGYPTIAN HIEROGLYPH-134AD;Lo;0;L;;;;;N;;;;; +134AE;EGYPTIAN HIEROGLYPH-134AE;Lo;0;L;;;;;N;;;;; +134AF;EGYPTIAN HIEROGLYPH-134AF;Lo;0;L;;;;;N;;;;; +134B0;EGYPTIAN HIEROGLYPH-134B0;Lo;0;L;;;;;N;;;;; +134B1;EGYPTIAN HIEROGLYPH-134B1;Lo;0;L;;;;;N;;;;; +134B2;EGYPTIAN HIEROGLYPH-134B2;Lo;0;L;;;;;N;;;;; +134B3;EGYPTIAN HIEROGLYPH-134B3;Lo;0;L;;;;;N;;;;; +134B4;EGYPTIAN HIEROGLYPH-134B4;Lo;0;L;;;;;N;;;;; +134B5;EGYPTIAN HIEROGLYPH-134B5;Lo;0;L;;;;;N;;;;; +134B6;EGYPTIAN HIEROGLYPH-134B6;Lo;0;L;;;;;N;;;;; +134B7;EGYPTIAN HIEROGLYPH-134B7;Lo;0;L;;;;;N;;;;; +134B8;EGYPTIAN HIEROGLYPH-134B8;Lo;0;L;;;;;N;;;;; +134B9;EGYPTIAN HIEROGLYPH-134B9;Lo;0;L;;;;;N;;;;; +134BA;EGYPTIAN HIEROGLYPH-134BA;Lo;0;L;;;;;N;;;;; +134BB;EGYPTIAN HIEROGLYPH-134BB;Lo;0;L;;;;;N;;;;; +134BC;EGYPTIAN HIEROGLYPH-134BC;Lo;0;L;;;;;N;;;;; +134BD;EGYPTIAN HIEROGLYPH-134BD;Lo;0;L;;;;;N;;;;; +134BE;EGYPTIAN HIEROGLYPH-134BE;Lo;0;L;;;;;N;;;;; +134BF;EGYPTIAN HIEROGLYPH-134BF;Lo;0;L;;;;;N;;;;; +134C0;EGYPTIAN HIEROGLYPH-134C0;Lo;0;L;;;;;N;;;;; +134C1;EGYPTIAN HIEROGLYPH-134C1;Lo;0;L;;;;;N;;;;; +134C2;EGYPTIAN HIEROGLYPH-134C2;Lo;0;L;;;;;N;;;;; +134C3;EGYPTIAN HIEROGLYPH-134C3;Lo;0;L;;;;;N;;;;; +134C4;EGYPTIAN HIEROGLYPH-134C4;Lo;0;L;;;;;N;;;;; +134C5;EGYPTIAN HIEROGLYPH-134C5;Lo;0;L;;;;;N;;;;; +134C6;EGYPTIAN HIEROGLYPH-134C6;Lo;0;L;;;;;N;;;;; +134C7;EGYPTIAN HIEROGLYPH-134C7;Lo;0;L;;;;;N;;;;; +134C8;EGYPTIAN HIEROGLYPH-134C8;Lo;0;L;;;;;N;;;;; +134C9;EGYPTIAN HIEROGLYPH-134C9;Lo;0;L;;;;;N;;;;; +134CA;EGYPTIAN HIEROGLYPH-134CA;Lo;0;L;;;;;N;;;;; +134CB;EGYPTIAN HIEROGLYPH-134CB;Lo;0;L;;;;;N;;;;; +134CC;EGYPTIAN HIEROGLYPH-134CC;Lo;0;L;;;;;N;;;;; +134CD;EGYPTIAN HIEROGLYPH-134CD;Lo;0;L;;;;;N;;;;; +134CE;EGYPTIAN HIEROGLYPH-134CE;Lo;0;L;;;;;N;;;;; +134CF;EGYPTIAN HIEROGLYPH-134CF;Lo;0;L;;;;;N;;;;; +134D0;EGYPTIAN HIEROGLYPH-134D0;Lo;0;L;;;;;N;;;;; +134D1;EGYPTIAN HIEROGLYPH-134D1;Lo;0;L;;;;;N;;;;; +134D2;EGYPTIAN HIEROGLYPH-134D2;Lo;0;L;;;;;N;;;;; +134D3;EGYPTIAN HIEROGLYPH-134D3;Lo;0;L;;;;;N;;;;; +134D4;EGYPTIAN HIEROGLYPH-134D4;Lo;0;L;;;;;N;;;;; +134D5;EGYPTIAN HIEROGLYPH-134D5;Lo;0;L;;;;;N;;;;; +134D6;EGYPTIAN HIEROGLYPH-134D6;Lo;0;L;;;;;N;;;;; +134D7;EGYPTIAN HIEROGLYPH-134D7;Lo;0;L;;;;;N;;;;; +134D8;EGYPTIAN HIEROGLYPH-134D8;Lo;0;L;;;;;N;;;;; +134D9;EGYPTIAN HIEROGLYPH-134D9;Lo;0;L;;;;;N;;;;; +134DA;EGYPTIAN HIEROGLYPH-134DA;Lo;0;L;;;;;N;;;;; +134DB;EGYPTIAN HIEROGLYPH-134DB;Lo;0;L;;;;;N;;;;; +134DC;EGYPTIAN HIEROGLYPH-134DC;Lo;0;L;;;;;N;;;;; +134DD;EGYPTIAN HIEROGLYPH-134DD;Lo;0;L;;;;;N;;;;; +134DE;EGYPTIAN HIEROGLYPH-134DE;Lo;0;L;;;;;N;;;;; +134DF;EGYPTIAN HIEROGLYPH-134DF;Lo;0;L;;;;;N;;;;; +134E0;EGYPTIAN HIEROGLYPH-134E0;Lo;0;L;;;;;N;;;;; +134E1;EGYPTIAN HIEROGLYPH-134E1;Lo;0;L;;;;;N;;;;; +134E2;EGYPTIAN HIEROGLYPH-134E2;Lo;0;L;;;;;N;;;;; +134E3;EGYPTIAN HIEROGLYPH-134E3;Lo;0;L;;;;;N;;;;; +134E4;EGYPTIAN HIEROGLYPH-134E4;Lo;0;L;;;;;N;;;;; +134E5;EGYPTIAN HIEROGLYPH-134E5;Lo;0;L;;;;;N;;;;; +134E6;EGYPTIAN HIEROGLYPH-134E6;Lo;0;L;;;;;N;;;;; +134E7;EGYPTIAN HIEROGLYPH-134E7;Lo;0;L;;;;;N;;;;; +134E8;EGYPTIAN HIEROGLYPH-134E8;Lo;0;L;;;;;N;;;;; +134E9;EGYPTIAN HIEROGLYPH-134E9;Lo;0;L;;;;;N;;;;; +134EA;EGYPTIAN HIEROGLYPH-134EA;Lo;0;L;;;;;N;;;;; +134EB;EGYPTIAN HIEROGLYPH-134EB;Lo;0;L;;;;;N;;;;; +134EC;EGYPTIAN HIEROGLYPH-134EC;Lo;0;L;;;;;N;;;;; +134ED;EGYPTIAN HIEROGLYPH-134ED;Lo;0;L;;;;;N;;;;; +134EE;EGYPTIAN HIEROGLYPH-134EE;Lo;0;L;;;;;N;;;;; +134EF;EGYPTIAN HIEROGLYPH-134EF;Lo;0;L;;;;;N;;;;; +134F0;EGYPTIAN HIEROGLYPH-134F0;Lo;0;L;;;;;N;;;;; +134F1;EGYPTIAN HIEROGLYPH-134F1;Lo;0;L;;;;;N;;;;; +134F2;EGYPTIAN HIEROGLYPH-134F2;Lo;0;L;;;;;N;;;;; +134F3;EGYPTIAN HIEROGLYPH-134F3;Lo;0;L;;;;;N;;;;; +134F4;EGYPTIAN HIEROGLYPH-134F4;Lo;0;L;;;;;N;;;;; +134F5;EGYPTIAN HIEROGLYPH-134F5;Lo;0;L;;;;;N;;;;; +134F6;EGYPTIAN HIEROGLYPH-134F6;Lo;0;L;;;;;N;;;;; +134F7;EGYPTIAN HIEROGLYPH-134F7;Lo;0;L;;;;;N;;;;; +134F8;EGYPTIAN HIEROGLYPH-134F8;Lo;0;L;;;;;N;;;;; +134F9;EGYPTIAN HIEROGLYPH-134F9;Lo;0;L;;;;;N;;;;; +134FA;EGYPTIAN HIEROGLYPH-134FA;Lo;0;L;;;;;N;;;;; +134FB;EGYPTIAN HIEROGLYPH-134FB;Lo;0;L;;;;;N;;;;; +134FC;EGYPTIAN HIEROGLYPH-134FC;Lo;0;L;;;;;N;;;;; +134FD;EGYPTIAN HIEROGLYPH-134FD;Lo;0;L;;;;;N;;;;; +134FE;EGYPTIAN HIEROGLYPH-134FE;Lo;0;L;;;;;N;;;;; +134FF;EGYPTIAN HIEROGLYPH-134FF;Lo;0;L;;;;;N;;;;; +13500;EGYPTIAN HIEROGLYPH-13500;Lo;0;L;;;;;N;;;;; +13501;EGYPTIAN HIEROGLYPH-13501;Lo;0;L;;;;;N;;;;; +13502;EGYPTIAN HIEROGLYPH-13502;Lo;0;L;;;;;N;;;;; +13503;EGYPTIAN HIEROGLYPH-13503;Lo;0;L;;;;;N;;;;; +13504;EGYPTIAN HIEROGLYPH-13504;Lo;0;L;;;;;N;;;;; +13505;EGYPTIAN HIEROGLYPH-13505;Lo;0;L;;;;;N;;;;; +13506;EGYPTIAN HIEROGLYPH-13506;Lo;0;L;;;;;N;;;;; +13507;EGYPTIAN HIEROGLYPH-13507;Lo;0;L;;;;;N;;;;; +13508;EGYPTIAN HIEROGLYPH-13508;Lo;0;L;;;;;N;;;;; +13509;EGYPTIAN HIEROGLYPH-13509;Lo;0;L;;;;;N;;;;; +1350A;EGYPTIAN HIEROGLYPH-1350A;Lo;0;L;;;;;N;;;;; +1350B;EGYPTIAN HIEROGLYPH-1350B;Lo;0;L;;;;;N;;;;; +1350C;EGYPTIAN HIEROGLYPH-1350C;Lo;0;L;;;;;N;;;;; +1350D;EGYPTIAN HIEROGLYPH-1350D;Lo;0;L;;;;;N;;;;; +1350E;EGYPTIAN HIEROGLYPH-1350E;Lo;0;L;;;;;N;;;;; +1350F;EGYPTIAN HIEROGLYPH-1350F;Lo;0;L;;;;;N;;;;; +13510;EGYPTIAN HIEROGLYPH-13510;Lo;0;L;;;;;N;;;;; +13511;EGYPTIAN HIEROGLYPH-13511;Lo;0;L;;;;;N;;;;; +13512;EGYPTIAN HIEROGLYPH-13512;Lo;0;L;;;;;N;;;;; +13513;EGYPTIAN HIEROGLYPH-13513;Lo;0;L;;;;;N;;;;; +13514;EGYPTIAN HIEROGLYPH-13514;Lo;0;L;;;;;N;;;;; +13515;EGYPTIAN HIEROGLYPH-13515;Lo;0;L;;;;;N;;;;; +13516;EGYPTIAN HIEROGLYPH-13516;Lo;0;L;;;;;N;;;;; +13517;EGYPTIAN HIEROGLYPH-13517;Lo;0;L;;;;;N;;;;; +13518;EGYPTIAN HIEROGLYPH-13518;Lo;0;L;;;;;N;;;;; +13519;EGYPTIAN HIEROGLYPH-13519;Lo;0;L;;;;;N;;;;; +1351A;EGYPTIAN HIEROGLYPH-1351A;Lo;0;L;;;;;N;;;;; +1351B;EGYPTIAN HIEROGLYPH-1351B;Lo;0;L;;;;;N;;;;; +1351C;EGYPTIAN HIEROGLYPH-1351C;Lo;0;L;;;;;N;;;;; +1351D;EGYPTIAN HIEROGLYPH-1351D;Lo;0;L;;;;;N;;;;; +1351E;EGYPTIAN HIEROGLYPH-1351E;Lo;0;L;;;;;N;;;;; +1351F;EGYPTIAN HIEROGLYPH-1351F;Lo;0;L;;;;;N;;;;; +13520;EGYPTIAN HIEROGLYPH-13520;Lo;0;L;;;;;N;;;;; +13521;EGYPTIAN HIEROGLYPH-13521;Lo;0;L;;;;;N;;;;; +13522;EGYPTIAN HIEROGLYPH-13522;Lo;0;L;;;;;N;;;;; +13523;EGYPTIAN HIEROGLYPH-13523;Lo;0;L;;;;;N;;;;; +13524;EGYPTIAN HIEROGLYPH-13524;Lo;0;L;;;;;N;;;;; +13525;EGYPTIAN HIEROGLYPH-13525;Lo;0;L;;;;;N;;;;; +13526;EGYPTIAN HIEROGLYPH-13526;Lo;0;L;;;;;N;;;;; +13527;EGYPTIAN HIEROGLYPH-13527;Lo;0;L;;;;;N;;;;; +13528;EGYPTIAN HIEROGLYPH-13528;Lo;0;L;;;;;N;;;;; +13529;EGYPTIAN HIEROGLYPH-13529;Lo;0;L;;;;;N;;;;; +1352A;EGYPTIAN HIEROGLYPH-1352A;Lo;0;L;;;;;N;;;;; +1352B;EGYPTIAN HIEROGLYPH-1352B;Lo;0;L;;;;;N;;;;; +1352C;EGYPTIAN HIEROGLYPH-1352C;Lo;0;L;;;;;N;;;;; +1352D;EGYPTIAN HIEROGLYPH-1352D;Lo;0;L;;;;;N;;;;; +1352E;EGYPTIAN HIEROGLYPH-1352E;Lo;0;L;;;;;N;;;;; +1352F;EGYPTIAN HIEROGLYPH-1352F;Lo;0;L;;;;;N;;;;; +13530;EGYPTIAN HIEROGLYPH-13530;Lo;0;L;;;;;N;;;;; +13531;EGYPTIAN HIEROGLYPH-13531;Lo;0;L;;;;;N;;;;; +13532;EGYPTIAN HIEROGLYPH-13532;Lo;0;L;;;;;N;;;;; +13533;EGYPTIAN HIEROGLYPH-13533;Lo;0;L;;;;;N;;;;; +13534;EGYPTIAN HIEROGLYPH-13534;Lo;0;L;;;;;N;;;;; +13535;EGYPTIAN HIEROGLYPH-13535;Lo;0;L;;;;;N;;;;; +13536;EGYPTIAN HIEROGLYPH-13536;Lo;0;L;;;;;N;;;;; +13537;EGYPTIAN HIEROGLYPH-13537;Lo;0;L;;;;;N;;;;; +13538;EGYPTIAN HIEROGLYPH-13538;Lo;0;L;;;;;N;;;;; +13539;EGYPTIAN HIEROGLYPH-13539;Lo;0;L;;;;;N;;;;; +1353A;EGYPTIAN HIEROGLYPH-1353A;Lo;0;L;;;;;N;;;;; +1353B;EGYPTIAN HIEROGLYPH-1353B;Lo;0;L;;;;;N;;;;; +1353C;EGYPTIAN HIEROGLYPH-1353C;Lo;0;L;;;;;N;;;;; +1353D;EGYPTIAN HIEROGLYPH-1353D;Lo;0;L;;;;;N;;;;; +1353E;EGYPTIAN HIEROGLYPH-1353E;Lo;0;L;;;;;N;;;;; +1353F;EGYPTIAN HIEROGLYPH-1353F;Lo;0;L;;;;;N;;;;; +13540;EGYPTIAN HIEROGLYPH-13540;Lo;0;L;;;;;N;;;;; +13541;EGYPTIAN HIEROGLYPH-13541;Lo;0;L;;;;;N;;;;; +13542;EGYPTIAN HIEROGLYPH-13542;Lo;0;L;;;;;N;;;;; +13543;EGYPTIAN HIEROGLYPH-13543;Lo;0;L;;;;;N;;;;; +13544;EGYPTIAN HIEROGLYPH-13544;Lo;0;L;;;;;N;;;;; +13545;EGYPTIAN HIEROGLYPH-13545;Lo;0;L;;;;;N;;;;; +13546;EGYPTIAN HIEROGLYPH-13546;Lo;0;L;;;;;N;;;;; +13547;EGYPTIAN HIEROGLYPH-13547;Lo;0;L;;;;;N;;;;; +13548;EGYPTIAN HIEROGLYPH-13548;Lo;0;L;;;;;N;;;;; +13549;EGYPTIAN HIEROGLYPH-13549;Lo;0;L;;;;;N;;;;; +1354A;EGYPTIAN HIEROGLYPH-1354A;Lo;0;L;;;;;N;;;;; +1354B;EGYPTIAN HIEROGLYPH-1354B;Lo;0;L;;;;;N;;;;; +1354C;EGYPTIAN HIEROGLYPH-1354C;Lo;0;L;;;;;N;;;;; +1354D;EGYPTIAN HIEROGLYPH-1354D;Lo;0;L;;;;;N;;;;; +1354E;EGYPTIAN HIEROGLYPH-1354E;Lo;0;L;;;;;N;;;;; +1354F;EGYPTIAN HIEROGLYPH-1354F;Lo;0;L;;;;;N;;;;; +13550;EGYPTIAN HIEROGLYPH-13550;Lo;0;L;;;;;N;;;;; +13551;EGYPTIAN HIEROGLYPH-13551;Lo;0;L;;;;;N;;;;; +13552;EGYPTIAN HIEROGLYPH-13552;Lo;0;L;;;;;N;;;;; +13553;EGYPTIAN HIEROGLYPH-13553;Lo;0;L;;;;;N;;;;; +13554;EGYPTIAN HIEROGLYPH-13554;Lo;0;L;;;;;N;;;;; +13555;EGYPTIAN HIEROGLYPH-13555;Lo;0;L;;;;;N;;;;; +13556;EGYPTIAN HIEROGLYPH-13556;Lo;0;L;;;;;N;;;;; +13557;EGYPTIAN HIEROGLYPH-13557;Lo;0;L;;;;;N;;;;; +13558;EGYPTIAN HIEROGLYPH-13558;Lo;0;L;;;;;N;;;;; +13559;EGYPTIAN HIEROGLYPH-13559;Lo;0;L;;;;;N;;;;; +1355A;EGYPTIAN HIEROGLYPH-1355A;Lo;0;L;;;;;N;;;;; +1355B;EGYPTIAN HIEROGLYPH-1355B;Lo;0;L;;;;;N;;;;; +1355C;EGYPTIAN HIEROGLYPH-1355C;Lo;0;L;;;;;N;;;;; +1355D;EGYPTIAN HIEROGLYPH-1355D;Lo;0;L;;;;;N;;;;; +1355E;EGYPTIAN HIEROGLYPH-1355E;Lo;0;L;;;;;N;;;;; +1355F;EGYPTIAN HIEROGLYPH-1355F;Lo;0;L;;;;;N;;;;; +13560;EGYPTIAN HIEROGLYPH-13560;Lo;0;L;;;;;N;;;;; +13561;EGYPTIAN HIEROGLYPH-13561;Lo;0;L;;;;;N;;;;; +13562;EGYPTIAN HIEROGLYPH-13562;Lo;0;L;;;;;N;;;;; +13563;EGYPTIAN HIEROGLYPH-13563;Lo;0;L;;;;;N;;;;; +13564;EGYPTIAN HIEROGLYPH-13564;Lo;0;L;;;;;N;;;;; +13565;EGYPTIAN HIEROGLYPH-13565;Lo;0;L;;;;;N;;;;; +13566;EGYPTIAN HIEROGLYPH-13566;Lo;0;L;;;;;N;;;;; +13567;EGYPTIAN HIEROGLYPH-13567;Lo;0;L;;;;;N;;;;; +13568;EGYPTIAN HIEROGLYPH-13568;Lo;0;L;;;;;N;;;;; +13569;EGYPTIAN HIEROGLYPH-13569;Lo;0;L;;;;;N;;;;; +1356A;EGYPTIAN HIEROGLYPH-1356A;Lo;0;L;;;;;N;;;;; +1356B;EGYPTIAN HIEROGLYPH-1356B;Lo;0;L;;;;;N;;;;; +1356C;EGYPTIAN HIEROGLYPH-1356C;Lo;0;L;;;;;N;;;;; +1356D;EGYPTIAN HIEROGLYPH-1356D;Lo;0;L;;;;;N;;;;; +1356E;EGYPTIAN HIEROGLYPH-1356E;Lo;0;L;;;;;N;;;;; +1356F;EGYPTIAN HIEROGLYPH-1356F;Lo;0;L;;;;;N;;;;; +13570;EGYPTIAN HIEROGLYPH-13570;Lo;0;L;;;;;N;;;;; +13571;EGYPTIAN HIEROGLYPH-13571;Lo;0;L;;;;;N;;;;; +13572;EGYPTIAN HIEROGLYPH-13572;Lo;0;L;;;;;N;;;;; +13573;EGYPTIAN HIEROGLYPH-13573;Lo;0;L;;;;;N;;;;; +13574;EGYPTIAN HIEROGLYPH-13574;Lo;0;L;;;;;N;;;;; +13575;EGYPTIAN HIEROGLYPH-13575;Lo;0;L;;;;;N;;;;; +13576;EGYPTIAN HIEROGLYPH-13576;Lo;0;L;;;;;N;;;;; +13577;EGYPTIAN HIEROGLYPH-13577;Lo;0;L;;;;;N;;;;; +13578;EGYPTIAN HIEROGLYPH-13578;Lo;0;L;;;;;N;;;;; +13579;EGYPTIAN HIEROGLYPH-13579;Lo;0;L;;;;;N;;;;; +1357A;EGYPTIAN HIEROGLYPH-1357A;Lo;0;L;;;;;N;;;;; +1357B;EGYPTIAN HIEROGLYPH-1357B;Lo;0;L;;;;;N;;;;; +1357C;EGYPTIAN HIEROGLYPH-1357C;Lo;0;L;;;;;N;;;;; +1357D;EGYPTIAN HIEROGLYPH-1357D;Lo;0;L;;;;;N;;;;; +1357E;EGYPTIAN HIEROGLYPH-1357E;Lo;0;L;;;;;N;;;;; +1357F;EGYPTIAN HIEROGLYPH-1357F;Lo;0;L;;;;;N;;;;; +13580;EGYPTIAN HIEROGLYPH-13580;Lo;0;L;;;;;N;;;;; +13581;EGYPTIAN HIEROGLYPH-13581;Lo;0;L;;;;;N;;;;; +13582;EGYPTIAN HIEROGLYPH-13582;Lo;0;L;;;;;N;;;;; +13583;EGYPTIAN HIEROGLYPH-13583;Lo;0;L;;;;;N;;;;; +13584;EGYPTIAN HIEROGLYPH-13584;Lo;0;L;;;;;N;;;;; +13585;EGYPTIAN HIEROGLYPH-13585;Lo;0;L;;;;;N;;;;; +13586;EGYPTIAN HIEROGLYPH-13586;Lo;0;L;;;;;N;;;;; +13587;EGYPTIAN HIEROGLYPH-13587;Lo;0;L;;;;;N;;;;; +13588;EGYPTIAN HIEROGLYPH-13588;Lo;0;L;;;;;N;;;;; +13589;EGYPTIAN HIEROGLYPH-13589;Lo;0;L;;;;;N;;;;; +1358A;EGYPTIAN HIEROGLYPH-1358A;Lo;0;L;;;;;N;;;;; +1358B;EGYPTIAN HIEROGLYPH-1358B;Lo;0;L;;;;;N;;;;; +1358C;EGYPTIAN HIEROGLYPH-1358C;Lo;0;L;;;;;N;;;;; +1358D;EGYPTIAN HIEROGLYPH-1358D;Lo;0;L;;;;;N;;;;; +1358E;EGYPTIAN HIEROGLYPH-1358E;Lo;0;L;;;;;N;;;;; +1358F;EGYPTIAN HIEROGLYPH-1358F;Lo;0;L;;;;;N;;;;; +13590;EGYPTIAN HIEROGLYPH-13590;Lo;0;L;;;;;N;;;;; +13591;EGYPTIAN HIEROGLYPH-13591;Lo;0;L;;;;;N;;;;; +13592;EGYPTIAN HIEROGLYPH-13592;Lo;0;L;;;;;N;;;;; +13593;EGYPTIAN HIEROGLYPH-13593;Lo;0;L;;;;;N;;;;; +13594;EGYPTIAN HIEROGLYPH-13594;Lo;0;L;;;;;N;;;;; +13595;EGYPTIAN HIEROGLYPH-13595;Lo;0;L;;;;;N;;;;; +13596;EGYPTIAN HIEROGLYPH-13596;Lo;0;L;;;;;N;;;;; +13597;EGYPTIAN HIEROGLYPH-13597;Lo;0;L;;;;;N;;;;; +13598;EGYPTIAN HIEROGLYPH-13598;Lo;0;L;;;;;N;;;;; +13599;EGYPTIAN HIEROGLYPH-13599;Lo;0;L;;;;;N;;;;; +1359A;EGYPTIAN HIEROGLYPH-1359A;Lo;0;L;;;;;N;;;;; +1359B;EGYPTIAN HIEROGLYPH-1359B;Lo;0;L;;;;;N;;;;; +1359C;EGYPTIAN HIEROGLYPH-1359C;Lo;0;L;;;;;N;;;;; +1359D;EGYPTIAN HIEROGLYPH-1359D;Lo;0;L;;;;;N;;;;; +1359E;EGYPTIAN HIEROGLYPH-1359E;Lo;0;L;;;;;N;;;;; +1359F;EGYPTIAN HIEROGLYPH-1359F;Lo;0;L;;;;;N;;;;; +135A0;EGYPTIAN HIEROGLYPH-135A0;Lo;0;L;;;;;N;;;;; +135A1;EGYPTIAN HIEROGLYPH-135A1;Lo;0;L;;;;;N;;;;; +135A2;EGYPTIAN HIEROGLYPH-135A2;Lo;0;L;;;;;N;;;;; +135A3;EGYPTIAN HIEROGLYPH-135A3;Lo;0;L;;;;;N;;;;; +135A4;EGYPTIAN HIEROGLYPH-135A4;Lo;0;L;;;;;N;;;;; +135A5;EGYPTIAN HIEROGLYPH-135A5;Lo;0;L;;;;;N;;;;; +135A6;EGYPTIAN HIEROGLYPH-135A6;Lo;0;L;;;;;N;;;;; +135A7;EGYPTIAN HIEROGLYPH-135A7;Lo;0;L;;;;;N;;;;; +135A8;EGYPTIAN HIEROGLYPH-135A8;Lo;0;L;;;;;N;;;;; +135A9;EGYPTIAN HIEROGLYPH-135A9;Lo;0;L;;;;;N;;;;; +135AA;EGYPTIAN HIEROGLYPH-135AA;Lo;0;L;;;;;N;;;;; +135AB;EGYPTIAN HIEROGLYPH-135AB;Lo;0;L;;;;;N;;;;; +135AC;EGYPTIAN HIEROGLYPH-135AC;Lo;0;L;;;;;N;;;;; +135AD;EGYPTIAN HIEROGLYPH-135AD;Lo;0;L;;;;;N;;;;; +135AE;EGYPTIAN HIEROGLYPH-135AE;Lo;0;L;;;;;N;;;;; +135AF;EGYPTIAN HIEROGLYPH-135AF;Lo;0;L;;;;;N;;;;; +135B0;EGYPTIAN HIEROGLYPH-135B0;Lo;0;L;;;;;N;;;;; +135B1;EGYPTIAN HIEROGLYPH-135B1;Lo;0;L;;;;;N;;;;; +135B2;EGYPTIAN HIEROGLYPH-135B2;Lo;0;L;;;;;N;;;;; +135B3;EGYPTIAN HIEROGLYPH-135B3;Lo;0;L;;;;;N;;;;; +135B4;EGYPTIAN HIEROGLYPH-135B4;Lo;0;L;;;;;N;;;;; +135B5;EGYPTIAN HIEROGLYPH-135B5;Lo;0;L;;;;;N;;;;; +135B6;EGYPTIAN HIEROGLYPH-135B6;Lo;0;L;;;;;N;;;;; +135B7;EGYPTIAN HIEROGLYPH-135B7;Lo;0;L;;;;;N;;;;; +135B8;EGYPTIAN HIEROGLYPH-135B8;Lo;0;L;;;;;N;;;;; +135B9;EGYPTIAN HIEROGLYPH-135B9;Lo;0;L;;;;;N;;;;; +135BA;EGYPTIAN HIEROGLYPH-135BA;Lo;0;L;;;;;N;;;;; +135BB;EGYPTIAN HIEROGLYPH-135BB;Lo;0;L;;;;;N;;;;; +135BC;EGYPTIAN HIEROGLYPH-135BC;Lo;0;L;;;;;N;;;;; +135BD;EGYPTIAN HIEROGLYPH-135BD;Lo;0;L;;;;;N;;;;; +135BE;EGYPTIAN HIEROGLYPH-135BE;Lo;0;L;;;;;N;;;;; +135BF;EGYPTIAN HIEROGLYPH-135BF;Lo;0;L;;;;;N;;;;; +135C0;EGYPTIAN HIEROGLYPH-135C0;Lo;0;L;;;;;N;;;;; +135C1;EGYPTIAN HIEROGLYPH-135C1;Lo;0;L;;;;;N;;;;; +135C2;EGYPTIAN HIEROGLYPH-135C2;Lo;0;L;;;;;N;;;;; +135C3;EGYPTIAN HIEROGLYPH-135C3;Lo;0;L;;;;;N;;;;; +135C4;EGYPTIAN HIEROGLYPH-135C4;Lo;0;L;;;;;N;;;;; +135C5;EGYPTIAN HIEROGLYPH-135C5;Lo;0;L;;;;;N;;;;; +135C6;EGYPTIAN HIEROGLYPH-135C6;Lo;0;L;;;;;N;;;;; +135C7;EGYPTIAN HIEROGLYPH-135C7;Lo;0;L;;;;;N;;;;; +135C8;EGYPTIAN HIEROGLYPH-135C8;Lo;0;L;;;;;N;;;;; +135C9;EGYPTIAN HIEROGLYPH-135C9;Lo;0;L;;;;;N;;;;; +135CA;EGYPTIAN HIEROGLYPH-135CA;Lo;0;L;;;;;N;;;;; +135CB;EGYPTIAN HIEROGLYPH-135CB;Lo;0;L;;;;;N;;;;; +135CC;EGYPTIAN HIEROGLYPH-135CC;Lo;0;L;;;;;N;;;;; +135CD;EGYPTIAN HIEROGLYPH-135CD;Lo;0;L;;;;;N;;;;; +135CE;EGYPTIAN HIEROGLYPH-135CE;Lo;0;L;;;;;N;;;;; +135CF;EGYPTIAN HIEROGLYPH-135CF;Lo;0;L;;;;;N;;;;; +135D0;EGYPTIAN HIEROGLYPH-135D0;Lo;0;L;;;;;N;;;;; +135D1;EGYPTIAN HIEROGLYPH-135D1;Lo;0;L;;;;;N;;;;; +135D2;EGYPTIAN HIEROGLYPH-135D2;Lo;0;L;;;;;N;;;;; +135D3;EGYPTIAN HIEROGLYPH-135D3;Lo;0;L;;;;;N;;;;; +135D4;EGYPTIAN HIEROGLYPH-135D4;Lo;0;L;;;;;N;;;;; +135D5;EGYPTIAN HIEROGLYPH-135D5;Lo;0;L;;;;;N;;;;; +135D6;EGYPTIAN HIEROGLYPH-135D6;Lo;0;L;;;;;N;;;;; +135D7;EGYPTIAN HIEROGLYPH-135D7;Lo;0;L;;;;;N;;;;; +135D8;EGYPTIAN HIEROGLYPH-135D8;Lo;0;L;;;;;N;;;;; +135D9;EGYPTIAN HIEROGLYPH-135D9;Lo;0;L;;;;;N;;;;; +135DA;EGYPTIAN HIEROGLYPH-135DA;Lo;0;L;;;;;N;;;;; +135DB;EGYPTIAN HIEROGLYPH-135DB;Lo;0;L;;;;;N;;;;; +135DC;EGYPTIAN HIEROGLYPH-135DC;Lo;0;L;;;;;N;;;;; +135DD;EGYPTIAN HIEROGLYPH-135DD;Lo;0;L;;;;;N;;;;; +135DE;EGYPTIAN HIEROGLYPH-135DE;Lo;0;L;;;;;N;;;;; +135DF;EGYPTIAN HIEROGLYPH-135DF;Lo;0;L;;;;;N;;;;; +135E0;EGYPTIAN HIEROGLYPH-135E0;Lo;0;L;;;;;N;;;;; +135E1;EGYPTIAN HIEROGLYPH-135E1;Lo;0;L;;;;;N;;;;; +135E2;EGYPTIAN HIEROGLYPH-135E2;Lo;0;L;;;;;N;;;;; +135E3;EGYPTIAN HIEROGLYPH-135E3;Lo;0;L;;;;;N;;;;; +135E4;EGYPTIAN HIEROGLYPH-135E4;Lo;0;L;;;;;N;;;;; +135E5;EGYPTIAN HIEROGLYPH-135E5;Lo;0;L;;;;;N;;;;; +135E6;EGYPTIAN HIEROGLYPH-135E6;Lo;0;L;;;;;N;;;;; +135E7;EGYPTIAN HIEROGLYPH-135E7;Lo;0;L;;;;;N;;;;; +135E8;EGYPTIAN HIEROGLYPH-135E8;Lo;0;L;;;;;N;;;;; +135E9;EGYPTIAN HIEROGLYPH-135E9;Lo;0;L;;;;;N;;;;; +135EA;EGYPTIAN HIEROGLYPH-135EA;Lo;0;L;;;;;N;;;;; +135EB;EGYPTIAN HIEROGLYPH-135EB;Lo;0;L;;;;;N;;;;; +135EC;EGYPTIAN HIEROGLYPH-135EC;Lo;0;L;;;;;N;;;;; +135ED;EGYPTIAN HIEROGLYPH-135ED;Lo;0;L;;;;;N;;;;; +135EE;EGYPTIAN HIEROGLYPH-135EE;Lo;0;L;;;;;N;;;;; +135EF;EGYPTIAN HIEROGLYPH-135EF;Lo;0;L;;;;;N;;;;; +135F0;EGYPTIAN HIEROGLYPH-135F0;Lo;0;L;;;;;N;;;;; +135F1;EGYPTIAN HIEROGLYPH-135F1;Lo;0;L;;;;;N;;;;; +135F2;EGYPTIAN HIEROGLYPH-135F2;Lo;0;L;;;;;N;;;;; +135F3;EGYPTIAN HIEROGLYPH-135F3;Lo;0;L;;;;;N;;;;; +135F4;EGYPTIAN HIEROGLYPH-135F4;Lo;0;L;;;;;N;;;;; +135F5;EGYPTIAN HIEROGLYPH-135F5;Lo;0;L;;;;;N;;;;; +135F6;EGYPTIAN HIEROGLYPH-135F6;Lo;0;L;;;;;N;;;;; +135F7;EGYPTIAN HIEROGLYPH-135F7;Lo;0;L;;;;;N;;;;; +135F8;EGYPTIAN HIEROGLYPH-135F8;Lo;0;L;;;;;N;;;;; +135F9;EGYPTIAN HIEROGLYPH-135F9;Lo;0;L;;;;;N;;;;; +135FA;EGYPTIAN HIEROGLYPH-135FA;Lo;0;L;;;;;N;;;;; +135FB;EGYPTIAN HIEROGLYPH-135FB;Lo;0;L;;;;;N;;;;; +135FC;EGYPTIAN HIEROGLYPH-135FC;Lo;0;L;;;;;N;;;;; +135FD;EGYPTIAN HIEROGLYPH-135FD;Lo;0;L;;;;;N;;;;; +135FE;EGYPTIAN HIEROGLYPH-135FE;Lo;0;L;;;;;N;;;;; +135FF;EGYPTIAN HIEROGLYPH-135FF;Lo;0;L;;;;;N;;;;; +13600;EGYPTIAN HIEROGLYPH-13600;Lo;0;L;;;;;N;;;;; +13601;EGYPTIAN HIEROGLYPH-13601;Lo;0;L;;;;;N;;;;; +13602;EGYPTIAN HIEROGLYPH-13602;Lo;0;L;;;;;N;;;;; +13603;EGYPTIAN HIEROGLYPH-13603;Lo;0;L;;;;;N;;;;; +13604;EGYPTIAN HIEROGLYPH-13604;Lo;0;L;;;;;N;;;;; +13605;EGYPTIAN HIEROGLYPH-13605;Lo;0;L;;;;;N;;;;; +13606;EGYPTIAN HIEROGLYPH-13606;Lo;0;L;;;;;N;;;;; +13607;EGYPTIAN HIEROGLYPH-13607;Lo;0;L;;;;;N;;;;; +13608;EGYPTIAN HIEROGLYPH-13608;Lo;0;L;;;;;N;;;;; +13609;EGYPTIAN HIEROGLYPH-13609;Lo;0;L;;;;;N;;;;; +1360A;EGYPTIAN HIEROGLYPH-1360A;Lo;0;L;;;;;N;;;;; +1360B;EGYPTIAN HIEROGLYPH-1360B;Lo;0;L;;;;;N;;;;; +1360C;EGYPTIAN HIEROGLYPH-1360C;Lo;0;L;;;;;N;;;;; +1360D;EGYPTIAN HIEROGLYPH-1360D;Lo;0;L;;;;;N;;;;; +1360E;EGYPTIAN HIEROGLYPH-1360E;Lo;0;L;;;;;N;;;;; +1360F;EGYPTIAN HIEROGLYPH-1360F;Lo;0;L;;;;;N;;;;; +13610;EGYPTIAN HIEROGLYPH-13610;Lo;0;L;;;;;N;;;;; +13611;EGYPTIAN HIEROGLYPH-13611;Lo;0;L;;;;;N;;;;; +13612;EGYPTIAN HIEROGLYPH-13612;Lo;0;L;;;;;N;;;;; +13613;EGYPTIAN HIEROGLYPH-13613;Lo;0;L;;;;;N;;;;; +13614;EGYPTIAN HIEROGLYPH-13614;Lo;0;L;;;;;N;;;;; +13615;EGYPTIAN HIEROGLYPH-13615;Lo;0;L;;;;;N;;;;; +13616;EGYPTIAN HIEROGLYPH-13616;Lo;0;L;;;;;N;;;;; +13617;EGYPTIAN HIEROGLYPH-13617;Lo;0;L;;;;;N;;;;; +13618;EGYPTIAN HIEROGLYPH-13618;Lo;0;L;;;;;N;;;;; +13619;EGYPTIAN HIEROGLYPH-13619;Lo;0;L;;;;;N;;;;; +1361A;EGYPTIAN HIEROGLYPH-1361A;Lo;0;L;;;;;N;;;;; +1361B;EGYPTIAN HIEROGLYPH-1361B;Lo;0;L;;;;;N;;;;; +1361C;EGYPTIAN HIEROGLYPH-1361C;Lo;0;L;;;;;N;;;;; +1361D;EGYPTIAN HIEROGLYPH-1361D;Lo;0;L;;;;;N;;;;; +1361E;EGYPTIAN HIEROGLYPH-1361E;Lo;0;L;;;;;N;;;;; +1361F;EGYPTIAN HIEROGLYPH-1361F;Lo;0;L;;;;;N;;;;; +13620;EGYPTIAN HIEROGLYPH-13620;Lo;0;L;;;;;N;;;;; +13621;EGYPTIAN HIEROGLYPH-13621;Lo;0;L;;;;;N;;;;; +13622;EGYPTIAN HIEROGLYPH-13622;Lo;0;L;;;;;N;;;;; +13623;EGYPTIAN HIEROGLYPH-13623;Lo;0;L;;;;;N;;;;; +13624;EGYPTIAN HIEROGLYPH-13624;Lo;0;L;;;;;N;;;;; +13625;EGYPTIAN HIEROGLYPH-13625;Lo;0;L;;;;;N;;;;; +13626;EGYPTIAN HIEROGLYPH-13626;Lo;0;L;;;;;N;;;;; +13627;EGYPTIAN HIEROGLYPH-13627;Lo;0;L;;;;;N;;;;; +13628;EGYPTIAN HIEROGLYPH-13628;Lo;0;L;;;;;N;;;;; +13629;EGYPTIAN HIEROGLYPH-13629;Lo;0;L;;;;;N;;;;; +1362A;EGYPTIAN HIEROGLYPH-1362A;Lo;0;L;;;;;N;;;;; +1362B;EGYPTIAN HIEROGLYPH-1362B;Lo;0;L;;;;;N;;;;; +1362C;EGYPTIAN HIEROGLYPH-1362C;Lo;0;L;;;;;N;;;;; +1362D;EGYPTIAN HIEROGLYPH-1362D;Lo;0;L;;;;;N;;;;; +1362E;EGYPTIAN HIEROGLYPH-1362E;Lo;0;L;;;;;N;;;;; +1362F;EGYPTIAN HIEROGLYPH-1362F;Lo;0;L;;;;;N;;;;; +13630;EGYPTIAN HIEROGLYPH-13630;Lo;0;L;;;;;N;;;;; +13631;EGYPTIAN HIEROGLYPH-13631;Lo;0;L;;;;;N;;;;; +13632;EGYPTIAN HIEROGLYPH-13632;Lo;0;L;;;;;N;;;;; +13633;EGYPTIAN HIEROGLYPH-13633;Lo;0;L;;;;;N;;;;; +13634;EGYPTIAN HIEROGLYPH-13634;Lo;0;L;;;;;N;;;;; +13635;EGYPTIAN HIEROGLYPH-13635;Lo;0;L;;;;;N;;;;; +13636;EGYPTIAN HIEROGLYPH-13636;Lo;0;L;;;;;N;;;;; +13637;EGYPTIAN HIEROGLYPH-13637;Lo;0;L;;;;;N;;;;; +13638;EGYPTIAN HIEROGLYPH-13638;Lo;0;L;;;;;N;;;;; +13639;EGYPTIAN HIEROGLYPH-13639;Lo;0;L;;;;;N;;;;; +1363A;EGYPTIAN HIEROGLYPH-1363A;Lo;0;L;;;;;N;;;;; +1363B;EGYPTIAN HIEROGLYPH-1363B;Lo;0;L;;;;;N;;;;; +1363C;EGYPTIAN HIEROGLYPH-1363C;Lo;0;L;;;;;N;;;;; +1363D;EGYPTIAN HIEROGLYPH-1363D;Lo;0;L;;;;;N;;;;; +1363E;EGYPTIAN HIEROGLYPH-1363E;Lo;0;L;;;;;N;;;;; +1363F;EGYPTIAN HIEROGLYPH-1363F;Lo;0;L;;;;;N;;;;; +13640;EGYPTIAN HIEROGLYPH-13640;Lo;0;L;;;;;N;;;;; +13641;EGYPTIAN HIEROGLYPH-13641;Lo;0;L;;;;;N;;;;; +13642;EGYPTIAN HIEROGLYPH-13642;Lo;0;L;;;;;N;;;;; +13643;EGYPTIAN HIEROGLYPH-13643;Lo;0;L;;;;;N;;;;; +13644;EGYPTIAN HIEROGLYPH-13644;Lo;0;L;;;;;N;;;;; +13645;EGYPTIAN HIEROGLYPH-13645;Lo;0;L;;;;;N;;;;; +13646;EGYPTIAN HIEROGLYPH-13646;Lo;0;L;;;;;N;;;;; +13647;EGYPTIAN HIEROGLYPH-13647;Lo;0;L;;;;;N;;;;; +13648;EGYPTIAN HIEROGLYPH-13648;Lo;0;L;;;;;N;;;;; +13649;EGYPTIAN HIEROGLYPH-13649;Lo;0;L;;;;;N;;;;; +1364A;EGYPTIAN HIEROGLYPH-1364A;Lo;0;L;;;;;N;;;;; +1364B;EGYPTIAN HIEROGLYPH-1364B;Lo;0;L;;;;;N;;;;; +1364C;EGYPTIAN HIEROGLYPH-1364C;Lo;0;L;;;;;N;;;;; +1364D;EGYPTIAN HIEROGLYPH-1364D;Lo;0;L;;;;;N;;;;; +1364E;EGYPTIAN HIEROGLYPH-1364E;Lo;0;L;;;;;N;;;;; +1364F;EGYPTIAN HIEROGLYPH-1364F;Lo;0;L;;;;;N;;;;; +13650;EGYPTIAN HIEROGLYPH-13650;Lo;0;L;;;;;N;;;;; +13651;EGYPTIAN HIEROGLYPH-13651;Lo;0;L;;;;;N;;;;; +13652;EGYPTIAN HIEROGLYPH-13652;Lo;0;L;;;;;N;;;;; +13653;EGYPTIAN HIEROGLYPH-13653;Lo;0;L;;;;;N;;;;; +13654;EGYPTIAN HIEROGLYPH-13654;Lo;0;L;;;;;N;;;;; +13655;EGYPTIAN HIEROGLYPH-13655;Lo;0;L;;;;;N;;;;; +13656;EGYPTIAN HIEROGLYPH-13656;Lo;0;L;;;;;N;;;;; +13657;EGYPTIAN HIEROGLYPH-13657;Lo;0;L;;;;;N;;;;; +13658;EGYPTIAN HIEROGLYPH-13658;Lo;0;L;;;;;N;;;;; +13659;EGYPTIAN HIEROGLYPH-13659;Lo;0;L;;;;;N;;;;; +1365A;EGYPTIAN HIEROGLYPH-1365A;Lo;0;L;;;;;N;;;;; +1365B;EGYPTIAN HIEROGLYPH-1365B;Lo;0;L;;;;;N;;;;; +1365C;EGYPTIAN HIEROGLYPH-1365C;Lo;0;L;;;;;N;;;;; +1365D;EGYPTIAN HIEROGLYPH-1365D;Lo;0;L;;;;;N;;;;; +1365E;EGYPTIAN HIEROGLYPH-1365E;Lo;0;L;;;;;N;;;;; +1365F;EGYPTIAN HIEROGLYPH-1365F;Lo;0;L;;;;;N;;;;; +13660;EGYPTIAN HIEROGLYPH-13660;Lo;0;L;;;;;N;;;;; +13661;EGYPTIAN HIEROGLYPH-13661;Lo;0;L;;;;;N;;;;; +13662;EGYPTIAN HIEROGLYPH-13662;Lo;0;L;;;;;N;;;;; +13663;EGYPTIAN HIEROGLYPH-13663;Lo;0;L;;;;;N;;;;; +13664;EGYPTIAN HIEROGLYPH-13664;Lo;0;L;;;;;N;;;;; +13665;EGYPTIAN HIEROGLYPH-13665;Lo;0;L;;;;;N;;;;; +13666;EGYPTIAN HIEROGLYPH-13666;Lo;0;L;;;;;N;;;;; +13667;EGYPTIAN HIEROGLYPH-13667;Lo;0;L;;;;;N;;;;; +13668;EGYPTIAN HIEROGLYPH-13668;Lo;0;L;;;;;N;;;;; +13669;EGYPTIAN HIEROGLYPH-13669;Lo;0;L;;;;;N;;;;; +1366A;EGYPTIAN HIEROGLYPH-1366A;Lo;0;L;;;;;N;;;;; +1366B;EGYPTIAN HIEROGLYPH-1366B;Lo;0;L;;;;;N;;;;; +1366C;EGYPTIAN HIEROGLYPH-1366C;Lo;0;L;;;;;N;;;;; +1366D;EGYPTIAN HIEROGLYPH-1366D;Lo;0;L;;;;;N;;;;; +1366E;EGYPTIAN HIEROGLYPH-1366E;Lo;0;L;;;;;N;;;;; +1366F;EGYPTIAN HIEROGLYPH-1366F;Lo;0;L;;;;;N;;;;; +13670;EGYPTIAN HIEROGLYPH-13670;Lo;0;L;;;;;N;;;;; +13671;EGYPTIAN HIEROGLYPH-13671;Lo;0;L;;;;;N;;;;; +13672;EGYPTIAN HIEROGLYPH-13672;Lo;0;L;;;;;N;;;;; +13673;EGYPTIAN HIEROGLYPH-13673;Lo;0;L;;;;;N;;;;; +13674;EGYPTIAN HIEROGLYPH-13674;Lo;0;L;;;;;N;;;;; +13675;EGYPTIAN HIEROGLYPH-13675;Lo;0;L;;;;;N;;;;; +13676;EGYPTIAN HIEROGLYPH-13676;Lo;0;L;;;;;N;;;;; +13677;EGYPTIAN HIEROGLYPH-13677;Lo;0;L;;;;;N;;;;; +13678;EGYPTIAN HIEROGLYPH-13678;Lo;0;L;;;;;N;;;;; +13679;EGYPTIAN HIEROGLYPH-13679;Lo;0;L;;;;;N;;;;; +1367A;EGYPTIAN HIEROGLYPH-1367A;Lo;0;L;;;;;N;;;;; +1367B;EGYPTIAN HIEROGLYPH-1367B;Lo;0;L;;;;;N;;;;; +1367C;EGYPTIAN HIEROGLYPH-1367C;Lo;0;L;;;;;N;;;;; +1367D;EGYPTIAN HIEROGLYPH-1367D;Lo;0;L;;;;;N;;;;; +1367E;EGYPTIAN HIEROGLYPH-1367E;Lo;0;L;;;;;N;;;;; +1367F;EGYPTIAN HIEROGLYPH-1367F;Lo;0;L;;;;;N;;;;; +13680;EGYPTIAN HIEROGLYPH-13680;Lo;0;L;;;;;N;;;;; +13681;EGYPTIAN HIEROGLYPH-13681;Lo;0;L;;;;;N;;;;; +13682;EGYPTIAN HIEROGLYPH-13682;Lo;0;L;;;;;N;;;;; +13683;EGYPTIAN HIEROGLYPH-13683;Lo;0;L;;;;;N;;;;; +13684;EGYPTIAN HIEROGLYPH-13684;Lo;0;L;;;;;N;;;;; +13685;EGYPTIAN HIEROGLYPH-13685;Lo;0;L;;;;;N;;;;; +13686;EGYPTIAN HIEROGLYPH-13686;Lo;0;L;;;;;N;;;;; +13687;EGYPTIAN HIEROGLYPH-13687;Lo;0;L;;;;;N;;;;; +13688;EGYPTIAN HIEROGLYPH-13688;Lo;0;L;;;;;N;;;;; +13689;EGYPTIAN HIEROGLYPH-13689;Lo;0;L;;;;;N;;;;; +1368A;EGYPTIAN HIEROGLYPH-1368A;Lo;0;L;;;;;N;;;;; +1368B;EGYPTIAN HIEROGLYPH-1368B;Lo;0;L;;;;;N;;;;; +1368C;EGYPTIAN HIEROGLYPH-1368C;Lo;0;L;;;;;N;;;;; +1368D;EGYPTIAN HIEROGLYPH-1368D;Lo;0;L;;;;;N;;;;; +1368E;EGYPTIAN HIEROGLYPH-1368E;Lo;0;L;;;;;N;;;;; +1368F;EGYPTIAN HIEROGLYPH-1368F;Lo;0;L;;;;;N;;;;; +13690;EGYPTIAN HIEROGLYPH-13690;Lo;0;L;;;;;N;;;;; +13691;EGYPTIAN HIEROGLYPH-13691;Lo;0;L;;;;;N;;;;; +13692;EGYPTIAN HIEROGLYPH-13692;Lo;0;L;;;;;N;;;;; +13693;EGYPTIAN HIEROGLYPH-13693;Lo;0;L;;;;;N;;;;; +13694;EGYPTIAN HIEROGLYPH-13694;Lo;0;L;;;;;N;;;;; +13695;EGYPTIAN HIEROGLYPH-13695;Lo;0;L;;;;;N;;;;; +13696;EGYPTIAN HIEROGLYPH-13696;Lo;0;L;;;;;N;;;;; +13697;EGYPTIAN HIEROGLYPH-13697;Lo;0;L;;;;;N;;;;; +13698;EGYPTIAN HIEROGLYPH-13698;Lo;0;L;;;;;N;;;;; +13699;EGYPTIAN HIEROGLYPH-13699;Lo;0;L;;;;;N;;;;; +1369A;EGYPTIAN HIEROGLYPH-1369A;Lo;0;L;;;;;N;;;;; +1369B;EGYPTIAN HIEROGLYPH-1369B;Lo;0;L;;;;;N;;;;; +1369C;EGYPTIAN HIEROGLYPH-1369C;Lo;0;L;;;;;N;;;;; +1369D;EGYPTIAN HIEROGLYPH-1369D;Lo;0;L;;;;;N;;;;; +1369E;EGYPTIAN HIEROGLYPH-1369E;Lo;0;L;;;;;N;;;;; +1369F;EGYPTIAN HIEROGLYPH-1369F;Lo;0;L;;;;;N;;;;; +136A0;EGYPTIAN HIEROGLYPH-136A0;Lo;0;L;;;;;N;;;;; +136A1;EGYPTIAN HIEROGLYPH-136A1;Lo;0;L;;;;;N;;;;; +136A2;EGYPTIAN HIEROGLYPH-136A2;Lo;0;L;;;;;N;;;;; +136A3;EGYPTIAN HIEROGLYPH-136A3;Lo;0;L;;;;;N;;;;; +136A4;EGYPTIAN HIEROGLYPH-136A4;Lo;0;L;;;;;N;;;;; +136A5;EGYPTIAN HIEROGLYPH-136A5;Lo;0;L;;;;;N;;;;; +136A6;EGYPTIAN HIEROGLYPH-136A6;Lo;0;L;;;;;N;;;;; +136A7;EGYPTIAN HIEROGLYPH-136A7;Lo;0;L;;;;;N;;;;; +136A8;EGYPTIAN HIEROGLYPH-136A8;Lo;0;L;;;;;N;;;;; +136A9;EGYPTIAN HIEROGLYPH-136A9;Lo;0;L;;;;;N;;;;; +136AA;EGYPTIAN HIEROGLYPH-136AA;Lo;0;L;;;;;N;;;;; +136AB;EGYPTIAN HIEROGLYPH-136AB;Lo;0;L;;;;;N;;;;; +136AC;EGYPTIAN HIEROGLYPH-136AC;Lo;0;L;;;;;N;;;;; +136AD;EGYPTIAN HIEROGLYPH-136AD;Lo;0;L;;;;;N;;;;; +136AE;EGYPTIAN HIEROGLYPH-136AE;Lo;0;L;;;;;N;;;;; +136AF;EGYPTIAN HIEROGLYPH-136AF;Lo;0;L;;;;;N;;;;; +136B0;EGYPTIAN HIEROGLYPH-136B0;Lo;0;L;;;;;N;;;;; +136B1;EGYPTIAN HIEROGLYPH-136B1;Lo;0;L;;;;;N;;;;; +136B2;EGYPTIAN HIEROGLYPH-136B2;Lo;0;L;;;;;N;;;;; +136B3;EGYPTIAN HIEROGLYPH-136B3;Lo;0;L;;;;;N;;;;; +136B4;EGYPTIAN HIEROGLYPH-136B4;Lo;0;L;;;;;N;;;;; +136B5;EGYPTIAN HIEROGLYPH-136B5;Lo;0;L;;;;;N;;;;; +136B6;EGYPTIAN HIEROGLYPH-136B6;Lo;0;L;;;;;N;;;;; +136B7;EGYPTIAN HIEROGLYPH-136B7;Lo;0;L;;;;;N;;;;; +136B8;EGYPTIAN HIEROGLYPH-136B8;Lo;0;L;;;;;N;;;;; +136B9;EGYPTIAN HIEROGLYPH-136B9;Lo;0;L;;;;;N;;;;; +136BA;EGYPTIAN HIEROGLYPH-136BA;Lo;0;L;;;;;N;;;;; +136BB;EGYPTIAN HIEROGLYPH-136BB;Lo;0;L;;;;;N;;;;; +136BC;EGYPTIAN HIEROGLYPH-136BC;Lo;0;L;;;;;N;;;;; +136BD;EGYPTIAN HIEROGLYPH-136BD;Lo;0;L;;;;;N;;;;; +136BE;EGYPTIAN HIEROGLYPH-136BE;Lo;0;L;;;;;N;;;;; +136BF;EGYPTIAN HIEROGLYPH-136BF;Lo;0;L;;;;;N;;;;; +136C0;EGYPTIAN HIEROGLYPH-136C0;Lo;0;L;;;;;N;;;;; +136C1;EGYPTIAN HIEROGLYPH-136C1;Lo;0;L;;;;;N;;;;; +136C2;EGYPTIAN HIEROGLYPH-136C2;Lo;0;L;;;;;N;;;;; +136C3;EGYPTIAN HIEROGLYPH-136C3;Lo;0;L;;;;;N;;;;; +136C4;EGYPTIAN HIEROGLYPH-136C4;Lo;0;L;;;;;N;;;;; +136C5;EGYPTIAN HIEROGLYPH-136C5;Lo;0;L;;;;;N;;;;; +136C6;EGYPTIAN HIEROGLYPH-136C6;Lo;0;L;;;;;N;;;;; +136C7;EGYPTIAN HIEROGLYPH-136C7;Lo;0;L;;;;;N;;;;; +136C8;EGYPTIAN HIEROGLYPH-136C8;Lo;0;L;;;;;N;;;;; +136C9;EGYPTIAN HIEROGLYPH-136C9;Lo;0;L;;;;;N;;;;; +136CA;EGYPTIAN HIEROGLYPH-136CA;Lo;0;L;;;;;N;;;;; +136CB;EGYPTIAN HIEROGLYPH-136CB;Lo;0;L;;;;;N;;;;; +136CC;EGYPTIAN HIEROGLYPH-136CC;Lo;0;L;;;;;N;;;;; +136CD;EGYPTIAN HIEROGLYPH-136CD;Lo;0;L;;;;;N;;;;; +136CE;EGYPTIAN HIEROGLYPH-136CE;Lo;0;L;;;;;N;;;;; +136CF;EGYPTIAN HIEROGLYPH-136CF;Lo;0;L;;;;;N;;;;; +136D0;EGYPTIAN HIEROGLYPH-136D0;Lo;0;L;;;;;N;;;;; +136D1;EGYPTIAN HIEROGLYPH-136D1;Lo;0;L;;;;;N;;;;; +136D2;EGYPTIAN HIEROGLYPH-136D2;Lo;0;L;;;;;N;;;;; +136D3;EGYPTIAN HIEROGLYPH-136D3;Lo;0;L;;;;;N;;;;; +136D4;EGYPTIAN HIEROGLYPH-136D4;Lo;0;L;;;;;N;;;;; +136D5;EGYPTIAN HIEROGLYPH-136D5;Lo;0;L;;;;;N;;;;; +136D6;EGYPTIAN HIEROGLYPH-136D6;Lo;0;L;;;;;N;;;;; +136D7;EGYPTIAN HIEROGLYPH-136D7;Lo;0;L;;;;;N;;;;; +136D8;EGYPTIAN HIEROGLYPH-136D8;Lo;0;L;;;;;N;;;;; +136D9;EGYPTIAN HIEROGLYPH-136D9;Lo;0;L;;;;;N;;;;; +136DA;EGYPTIAN HIEROGLYPH-136DA;Lo;0;L;;;;;N;;;;; +136DB;EGYPTIAN HIEROGLYPH-136DB;Lo;0;L;;;;;N;;;;; +136DC;EGYPTIAN HIEROGLYPH-136DC;Lo;0;L;;;;;N;;;;; +136DD;EGYPTIAN HIEROGLYPH-136DD;Lo;0;L;;;;;N;;;;; +136DE;EGYPTIAN HIEROGLYPH-136DE;Lo;0;L;;;;;N;;;;; +136DF;EGYPTIAN HIEROGLYPH-136DF;Lo;0;L;;;;;N;;;;; +136E0;EGYPTIAN HIEROGLYPH-136E0;Lo;0;L;;;;;N;;;;; +136E1;EGYPTIAN HIEROGLYPH-136E1;Lo;0;L;;;;;N;;;;; +136E2;EGYPTIAN HIEROGLYPH-136E2;Lo;0;L;;;;;N;;;;; +136E3;EGYPTIAN HIEROGLYPH-136E3;Lo;0;L;;;;;N;;;;; +136E4;EGYPTIAN HIEROGLYPH-136E4;Lo;0;L;;;;;N;;;;; +136E5;EGYPTIAN HIEROGLYPH-136E5;Lo;0;L;;;;;N;;;;; +136E6;EGYPTIAN HIEROGLYPH-136E6;Lo;0;L;;;;;N;;;;; +136E7;EGYPTIAN HIEROGLYPH-136E7;Lo;0;L;;;;;N;;;;; +136E8;EGYPTIAN HIEROGLYPH-136E8;Lo;0;L;;;;;N;;;;; +136E9;EGYPTIAN HIEROGLYPH-136E9;Lo;0;L;;;;;N;;;;; +136EA;EGYPTIAN HIEROGLYPH-136EA;Lo;0;L;;;;;N;;;;; +136EB;EGYPTIAN HIEROGLYPH-136EB;Lo;0;L;;;;;N;;;;; +136EC;EGYPTIAN HIEROGLYPH-136EC;Lo;0;L;;;;;N;;;;; +136ED;EGYPTIAN HIEROGLYPH-136ED;Lo;0;L;;;;;N;;;;; +136EE;EGYPTIAN HIEROGLYPH-136EE;Lo;0;L;;;;;N;;;;; +136EF;EGYPTIAN HIEROGLYPH-136EF;Lo;0;L;;;;;N;;;;; +136F0;EGYPTIAN HIEROGLYPH-136F0;Lo;0;L;;;;;N;;;;; +136F1;EGYPTIAN HIEROGLYPH-136F1;Lo;0;L;;;;;N;;;;; +136F2;EGYPTIAN HIEROGLYPH-136F2;Lo;0;L;;;;;N;;;;; +136F3;EGYPTIAN HIEROGLYPH-136F3;Lo;0;L;;;;;N;;;;; +136F4;EGYPTIAN HIEROGLYPH-136F4;Lo;0;L;;;;;N;;;;; +136F5;EGYPTIAN HIEROGLYPH-136F5;Lo;0;L;;;;;N;;;;; +136F6;EGYPTIAN HIEROGLYPH-136F6;Lo;0;L;;;;;N;;;;; +136F7;EGYPTIAN HIEROGLYPH-136F7;Lo;0;L;;;;;N;;;;; +136F8;EGYPTIAN HIEROGLYPH-136F8;Lo;0;L;;;;;N;;;;; +136F9;EGYPTIAN HIEROGLYPH-136F9;Lo;0;L;;;;;N;;;;; +136FA;EGYPTIAN HIEROGLYPH-136FA;Lo;0;L;;;;;N;;;;; +136FB;EGYPTIAN HIEROGLYPH-136FB;Lo;0;L;;;;;N;;;;; +136FC;EGYPTIAN HIEROGLYPH-136FC;Lo;0;L;;;;;N;;;;; +136FD;EGYPTIAN HIEROGLYPH-136FD;Lo;0;L;;;;;N;;;;; +136FE;EGYPTIAN HIEROGLYPH-136FE;Lo;0;L;;;;;N;;;;; +136FF;EGYPTIAN HIEROGLYPH-136FF;Lo;0;L;;;;;N;;;;; +13700;EGYPTIAN HIEROGLYPH-13700;Lo;0;L;;;;;N;;;;; +13701;EGYPTIAN HIEROGLYPH-13701;Lo;0;L;;;;;N;;;;; +13702;EGYPTIAN HIEROGLYPH-13702;Lo;0;L;;;;;N;;;;; +13703;EGYPTIAN HIEROGLYPH-13703;Lo;0;L;;;;;N;;;;; +13704;EGYPTIAN HIEROGLYPH-13704;Lo;0;L;;;;;N;;;;; +13705;EGYPTIAN HIEROGLYPH-13705;Lo;0;L;;;;;N;;;;; +13706;EGYPTIAN HIEROGLYPH-13706;Lo;0;L;;;;;N;;;;; +13707;EGYPTIAN HIEROGLYPH-13707;Lo;0;L;;;;;N;;;;; +13708;EGYPTIAN HIEROGLYPH-13708;Lo;0;L;;;;;N;;;;; +13709;EGYPTIAN HIEROGLYPH-13709;Lo;0;L;;;;;N;;;;; +1370A;EGYPTIAN HIEROGLYPH-1370A;Lo;0;L;;;;;N;;;;; +1370B;EGYPTIAN HIEROGLYPH-1370B;Lo;0;L;;;;;N;;;;; +1370C;EGYPTIAN HIEROGLYPH-1370C;Lo;0;L;;;;;N;;;;; +1370D;EGYPTIAN HIEROGLYPH-1370D;Lo;0;L;;;;;N;;;;; +1370E;EGYPTIAN HIEROGLYPH-1370E;Lo;0;L;;;;;N;;;;; +1370F;EGYPTIAN HIEROGLYPH-1370F;Lo;0;L;;;;;N;;;;; +13710;EGYPTIAN HIEROGLYPH-13710;Lo;0;L;;;;;N;;;;; +13711;EGYPTIAN HIEROGLYPH-13711;Lo;0;L;;;;;N;;;;; +13712;EGYPTIAN HIEROGLYPH-13712;Lo;0;L;;;;;N;;;;; +13713;EGYPTIAN HIEROGLYPH-13713;Lo;0;L;;;;;N;;;;; +13714;EGYPTIAN HIEROGLYPH-13714;Lo;0;L;;;;;N;;;;; +13715;EGYPTIAN HIEROGLYPH-13715;Lo;0;L;;;;;N;;;;; +13716;EGYPTIAN HIEROGLYPH-13716;Lo;0;L;;;;;N;;;;; +13717;EGYPTIAN HIEROGLYPH-13717;Lo;0;L;;;;;N;;;;; +13718;EGYPTIAN HIEROGLYPH-13718;Lo;0;L;;;;;N;;;;; +13719;EGYPTIAN HIEROGLYPH-13719;Lo;0;L;;;;;N;;;;; +1371A;EGYPTIAN HIEROGLYPH-1371A;Lo;0;L;;;;;N;;;;; +1371B;EGYPTIAN HIEROGLYPH-1371B;Lo;0;L;;;;;N;;;;; +1371C;EGYPTIAN HIEROGLYPH-1371C;Lo;0;L;;;;;N;;;;; +1371D;EGYPTIAN HIEROGLYPH-1371D;Lo;0;L;;;;;N;;;;; +1371E;EGYPTIAN HIEROGLYPH-1371E;Lo;0;L;;;;;N;;;;; +1371F;EGYPTIAN HIEROGLYPH-1371F;Lo;0;L;;;;;N;;;;; +13720;EGYPTIAN HIEROGLYPH-13720;Lo;0;L;;;;;N;;;;; +13721;EGYPTIAN HIEROGLYPH-13721;Lo;0;L;;;;;N;;;;; +13722;EGYPTIAN HIEROGLYPH-13722;Lo;0;L;;;;;N;;;;; +13723;EGYPTIAN HIEROGLYPH-13723;Lo;0;L;;;;;N;;;;; +13724;EGYPTIAN HIEROGLYPH-13724;Lo;0;L;;;;;N;;;;; +13725;EGYPTIAN HIEROGLYPH-13725;Lo;0;L;;;;;N;;;;; +13726;EGYPTIAN HIEROGLYPH-13726;Lo;0;L;;;;;N;;;;; +13727;EGYPTIAN HIEROGLYPH-13727;Lo;0;L;;;;;N;;;;; +13728;EGYPTIAN HIEROGLYPH-13728;Lo;0;L;;;;;N;;;;; +13729;EGYPTIAN HIEROGLYPH-13729;Lo;0;L;;;;;N;;;;; +1372A;EGYPTIAN HIEROGLYPH-1372A;Lo;0;L;;;;;N;;;;; +1372B;EGYPTIAN HIEROGLYPH-1372B;Lo;0;L;;;;;N;;;;; +1372C;EGYPTIAN HIEROGLYPH-1372C;Lo;0;L;;;;;N;;;;; +1372D;EGYPTIAN HIEROGLYPH-1372D;Lo;0;L;;;;;N;;;;; +1372E;EGYPTIAN HIEROGLYPH-1372E;Lo;0;L;;;;;N;;;;; +1372F;EGYPTIAN HIEROGLYPH-1372F;Lo;0;L;;;;;N;;;;; +13730;EGYPTIAN HIEROGLYPH-13730;Lo;0;L;;;;;N;;;;; +13731;EGYPTIAN HIEROGLYPH-13731;Lo;0;L;;;;;N;;;;; +13732;EGYPTIAN HIEROGLYPH-13732;Lo;0;L;;;;;N;;;;; +13733;EGYPTIAN HIEROGLYPH-13733;Lo;0;L;;;;;N;;;;; +13734;EGYPTIAN HIEROGLYPH-13734;Lo;0;L;;;;;N;;;;; +13735;EGYPTIAN HIEROGLYPH-13735;Lo;0;L;;;;;N;;;;; +13736;EGYPTIAN HIEROGLYPH-13736;Lo;0;L;;;;;N;;;;; +13737;EGYPTIAN HIEROGLYPH-13737;Lo;0;L;;;;;N;;;;; +13738;EGYPTIAN HIEROGLYPH-13738;Lo;0;L;;;;;N;;;;; +13739;EGYPTIAN HIEROGLYPH-13739;Lo;0;L;;;;;N;;;;; +1373A;EGYPTIAN HIEROGLYPH-1373A;Lo;0;L;;;;;N;;;;; +1373B;EGYPTIAN HIEROGLYPH-1373B;Lo;0;L;;;;;N;;;;; +1373C;EGYPTIAN HIEROGLYPH-1373C;Lo;0;L;;;;;N;;;;; +1373D;EGYPTIAN HIEROGLYPH-1373D;Lo;0;L;;;;;N;;;;; +1373E;EGYPTIAN HIEROGLYPH-1373E;Lo;0;L;;;;;N;;;;; +1373F;EGYPTIAN HIEROGLYPH-1373F;Lo;0;L;;;;;N;;;;; +13740;EGYPTIAN HIEROGLYPH-13740;Lo;0;L;;;;;N;;;;; +13741;EGYPTIAN HIEROGLYPH-13741;Lo;0;L;;;;;N;;;;; +13742;EGYPTIAN HIEROGLYPH-13742;Lo;0;L;;;;;N;;;;; +13743;EGYPTIAN HIEROGLYPH-13743;Lo;0;L;;;;;N;;;;; +13744;EGYPTIAN HIEROGLYPH-13744;Lo;0;L;;;;;N;;;;; +13745;EGYPTIAN HIEROGLYPH-13745;Lo;0;L;;;;;N;;;;; +13746;EGYPTIAN HIEROGLYPH-13746;Lo;0;L;;;;;N;;;;; +13747;EGYPTIAN HIEROGLYPH-13747;Lo;0;L;;;;;N;;;;; +13748;EGYPTIAN HIEROGLYPH-13748;Lo;0;L;;;;;N;;;;; +13749;EGYPTIAN HIEROGLYPH-13749;Lo;0;L;;;;;N;;;;; +1374A;EGYPTIAN HIEROGLYPH-1374A;Lo;0;L;;;;;N;;;;; +1374B;EGYPTIAN HIEROGLYPH-1374B;Lo;0;L;;;;;N;;;;; +1374C;EGYPTIAN HIEROGLYPH-1374C;Lo;0;L;;;;;N;;;;; +1374D;EGYPTIAN HIEROGLYPH-1374D;Lo;0;L;;;;;N;;;;; +1374E;EGYPTIAN HIEROGLYPH-1374E;Lo;0;L;;;;;N;;;;; +1374F;EGYPTIAN HIEROGLYPH-1374F;Lo;0;L;;;;;N;;;;; +13750;EGYPTIAN HIEROGLYPH-13750;Lo;0;L;;;;;N;;;;; +13751;EGYPTIAN HIEROGLYPH-13751;Lo;0;L;;;;;N;;;;; +13752;EGYPTIAN HIEROGLYPH-13752;Lo;0;L;;;;;N;;;;; +13753;EGYPTIAN HIEROGLYPH-13753;Lo;0;L;;;;;N;;;;; +13754;EGYPTIAN HIEROGLYPH-13754;Lo;0;L;;;;;N;;;;; +13755;EGYPTIAN HIEROGLYPH-13755;Lo;0;L;;;;;N;;;;; +13756;EGYPTIAN HIEROGLYPH-13756;Lo;0;L;;;;;N;;;;; +13757;EGYPTIAN HIEROGLYPH-13757;Lo;0;L;;;;;N;;;;; +13758;EGYPTIAN HIEROGLYPH-13758;Lo;0;L;;;;;N;;;;; +13759;EGYPTIAN HIEROGLYPH-13759;Lo;0;L;;;;;N;;;;; +1375A;EGYPTIAN HIEROGLYPH-1375A;Lo;0;L;;;;;N;;;;; +1375B;EGYPTIAN HIEROGLYPH-1375B;Lo;0;L;;;;;N;;;;; +1375C;EGYPTIAN HIEROGLYPH-1375C;Lo;0;L;;;;;N;;;;; +1375D;EGYPTIAN HIEROGLYPH-1375D;Lo;0;L;;;;;N;;;;; +1375E;EGYPTIAN HIEROGLYPH-1375E;Lo;0;L;;;;;N;;;;; +1375F;EGYPTIAN HIEROGLYPH-1375F;Lo;0;L;;;;;N;;;;; +13760;EGYPTIAN HIEROGLYPH-13760;Lo;0;L;;;;;N;;;;; +13761;EGYPTIAN HIEROGLYPH-13761;Lo;0;L;;;;;N;;;;; +13762;EGYPTIAN HIEROGLYPH-13762;Lo;0;L;;;;;N;;;;; +13763;EGYPTIAN HIEROGLYPH-13763;Lo;0;L;;;;;N;;;;; +13764;EGYPTIAN HIEROGLYPH-13764;Lo;0;L;;;;;N;;;;; +13765;EGYPTIAN HIEROGLYPH-13765;Lo;0;L;;;;;N;;;;; +13766;EGYPTIAN HIEROGLYPH-13766;Lo;0;L;;;;;N;;;;; +13767;EGYPTIAN HIEROGLYPH-13767;Lo;0;L;;;;;N;;;;; +13768;EGYPTIAN HIEROGLYPH-13768;Lo;0;L;;;;;N;;;;; +13769;EGYPTIAN HIEROGLYPH-13769;Lo;0;L;;;;;N;;;;; +1376A;EGYPTIAN HIEROGLYPH-1376A;Lo;0;L;;;;;N;;;;; +1376B;EGYPTIAN HIEROGLYPH-1376B;Lo;0;L;;;;;N;;;;; +1376C;EGYPTIAN HIEROGLYPH-1376C;Lo;0;L;;;;;N;;;;; +1376D;EGYPTIAN HIEROGLYPH-1376D;Lo;0;L;;;;;N;;;;; +1376E;EGYPTIAN HIEROGLYPH-1376E;Lo;0;L;;;;;N;;;;; +1376F;EGYPTIAN HIEROGLYPH-1376F;Lo;0;L;;;;;N;;;;; +13770;EGYPTIAN HIEROGLYPH-13770;Lo;0;L;;;;;N;;;;; +13771;EGYPTIAN HIEROGLYPH-13771;Lo;0;L;;;;;N;;;;; +13772;EGYPTIAN HIEROGLYPH-13772;Lo;0;L;;;;;N;;;;; +13773;EGYPTIAN HIEROGLYPH-13773;Lo;0;L;;;;;N;;;;; +13774;EGYPTIAN HIEROGLYPH-13774;Lo;0;L;;;;;N;;;;; +13775;EGYPTIAN HIEROGLYPH-13775;Lo;0;L;;;;;N;;;;; +13776;EGYPTIAN HIEROGLYPH-13776;Lo;0;L;;;;;N;;;;; +13777;EGYPTIAN HIEROGLYPH-13777;Lo;0;L;;;;;N;;;;; +13778;EGYPTIAN HIEROGLYPH-13778;Lo;0;L;;;;;N;;;;; +13779;EGYPTIAN HIEROGLYPH-13779;Lo;0;L;;;;;N;;;;; +1377A;EGYPTIAN HIEROGLYPH-1377A;Lo;0;L;;;;;N;;;;; +1377B;EGYPTIAN HIEROGLYPH-1377B;Lo;0;L;;;;;N;;;;; +1377C;EGYPTIAN HIEROGLYPH-1377C;Lo;0;L;;;;;N;;;;; +1377D;EGYPTIAN HIEROGLYPH-1377D;Lo;0;L;;;;;N;;;;; +1377E;EGYPTIAN HIEROGLYPH-1377E;Lo;0;L;;;;;N;;;;; +1377F;EGYPTIAN HIEROGLYPH-1377F;Lo;0;L;;;;;N;;;;; +13780;EGYPTIAN HIEROGLYPH-13780;Lo;0;L;;;;;N;;;;; +13781;EGYPTIAN HIEROGLYPH-13781;Lo;0;L;;;;;N;;;;; +13782;EGYPTIAN HIEROGLYPH-13782;Lo;0;L;;;;;N;;;;; +13783;EGYPTIAN HIEROGLYPH-13783;Lo;0;L;;;;;N;;;;; +13784;EGYPTIAN HIEROGLYPH-13784;Lo;0;L;;;;;N;;;;; +13785;EGYPTIAN HIEROGLYPH-13785;Lo;0;L;;;;;N;;;;; +13786;EGYPTIAN HIEROGLYPH-13786;Lo;0;L;;;;;N;;;;; +13787;EGYPTIAN HIEROGLYPH-13787;Lo;0;L;;;;;N;;;;; +13788;EGYPTIAN HIEROGLYPH-13788;Lo;0;L;;;;;N;;;;; +13789;EGYPTIAN HIEROGLYPH-13789;Lo;0;L;;;;;N;;;;; +1378A;EGYPTIAN HIEROGLYPH-1378A;Lo;0;L;;;;;N;;;;; +1378B;EGYPTIAN HIEROGLYPH-1378B;Lo;0;L;;;;;N;;;;; +1378C;EGYPTIAN HIEROGLYPH-1378C;Lo;0;L;;;;;N;;;;; +1378D;EGYPTIAN HIEROGLYPH-1378D;Lo;0;L;;;;;N;;;;; +1378E;EGYPTIAN HIEROGLYPH-1378E;Lo;0;L;;;;;N;;;;; +1378F;EGYPTIAN HIEROGLYPH-1378F;Lo;0;L;;;;;N;;;;; +13790;EGYPTIAN HIEROGLYPH-13790;Lo;0;L;;;;;N;;;;; +13791;EGYPTIAN HIEROGLYPH-13791;Lo;0;L;;;;;N;;;;; +13792;EGYPTIAN HIEROGLYPH-13792;Lo;0;L;;;;;N;;;;; +13793;EGYPTIAN HIEROGLYPH-13793;Lo;0;L;;;;;N;;;;; +13794;EGYPTIAN HIEROGLYPH-13794;Lo;0;L;;;;;N;;;;; +13795;EGYPTIAN HIEROGLYPH-13795;Lo;0;L;;;;;N;;;;; +13796;EGYPTIAN HIEROGLYPH-13796;Lo;0;L;;;;;N;;;;; +13797;EGYPTIAN HIEROGLYPH-13797;Lo;0;L;;;;;N;;;;; +13798;EGYPTIAN HIEROGLYPH-13798;Lo;0;L;;;;;N;;;;; +13799;EGYPTIAN HIEROGLYPH-13799;Lo;0;L;;;;;N;;;;; +1379A;EGYPTIAN HIEROGLYPH-1379A;Lo;0;L;;;;;N;;;;; +1379B;EGYPTIAN HIEROGLYPH-1379B;Lo;0;L;;;;;N;;;;; +1379C;EGYPTIAN HIEROGLYPH-1379C;Lo;0;L;;;;;N;;;;; +1379D;EGYPTIAN HIEROGLYPH-1379D;Lo;0;L;;;;;N;;;;; +1379E;EGYPTIAN HIEROGLYPH-1379E;Lo;0;L;;;;;N;;;;; +1379F;EGYPTIAN HIEROGLYPH-1379F;Lo;0;L;;;;;N;;;;; +137A0;EGYPTIAN HIEROGLYPH-137A0;Lo;0;L;;;;;N;;;;; +137A1;EGYPTIAN HIEROGLYPH-137A1;Lo;0;L;;;;;N;;;;; +137A2;EGYPTIAN HIEROGLYPH-137A2;Lo;0;L;;;;;N;;;;; +137A3;EGYPTIAN HIEROGLYPH-137A3;Lo;0;L;;;;;N;;;;; +137A4;EGYPTIAN HIEROGLYPH-137A4;Lo;0;L;;;;;N;;;;; +137A5;EGYPTIAN HIEROGLYPH-137A5;Lo;0;L;;;;;N;;;;; +137A6;EGYPTIAN HIEROGLYPH-137A6;Lo;0;L;;;;;N;;;;; +137A7;EGYPTIAN HIEROGLYPH-137A7;Lo;0;L;;;;;N;;;;; +137A8;EGYPTIAN HIEROGLYPH-137A8;Lo;0;L;;;;;N;;;;; +137A9;EGYPTIAN HIEROGLYPH-137A9;Lo;0;L;;;;;N;;;;; +137AA;EGYPTIAN HIEROGLYPH-137AA;Lo;0;L;;;;;N;;;;; +137AB;EGYPTIAN HIEROGLYPH-137AB;Lo;0;L;;;;;N;;;;; +137AC;EGYPTIAN HIEROGLYPH-137AC;Lo;0;L;;;;;N;;;;; +137AD;EGYPTIAN HIEROGLYPH-137AD;Lo;0;L;;;;;N;;;;; +137AE;EGYPTIAN HIEROGLYPH-137AE;Lo;0;L;;;;;N;;;;; +137AF;EGYPTIAN HIEROGLYPH-137AF;Lo;0;L;;;;;N;;;;; +137B0;EGYPTIAN HIEROGLYPH-137B0;Lo;0;L;;;;;N;;;;; +137B1;EGYPTIAN HIEROGLYPH-137B1;Lo;0;L;;;;;N;;;;; +137B2;EGYPTIAN HIEROGLYPH-137B2;Lo;0;L;;;;;N;;;;; +137B3;EGYPTIAN HIEROGLYPH-137B3;Lo;0;L;;;;;N;;;;; +137B4;EGYPTIAN HIEROGLYPH-137B4;Lo;0;L;;;;;N;;;;; +137B5;EGYPTIAN HIEROGLYPH-137B5;Lo;0;L;;;;;N;;;;; +137B6;EGYPTIAN HIEROGLYPH-137B6;Lo;0;L;;;;;N;;;;; +137B7;EGYPTIAN HIEROGLYPH-137B7;Lo;0;L;;;;;N;;;;; +137B8;EGYPTIAN HIEROGLYPH-137B8;Lo;0;L;;;;;N;;;;; +137B9;EGYPTIAN HIEROGLYPH-137B9;Lo;0;L;;;;;N;;;;; +137BA;EGYPTIAN HIEROGLYPH-137BA;Lo;0;L;;;;;N;;;;; +137BB;EGYPTIAN HIEROGLYPH-137BB;Lo;0;L;;;;;N;;;;; +137BC;EGYPTIAN HIEROGLYPH-137BC;Lo;0;L;;;;;N;;;;; +137BD;EGYPTIAN HIEROGLYPH-137BD;Lo;0;L;;;;;N;;;;; +137BE;EGYPTIAN HIEROGLYPH-137BE;Lo;0;L;;;;;N;;;;; +137BF;EGYPTIAN HIEROGLYPH-137BF;Lo;0;L;;;;;N;;;;; +137C0;EGYPTIAN HIEROGLYPH-137C0;Lo;0;L;;;;;N;;;;; +137C1;EGYPTIAN HIEROGLYPH-137C1;Lo;0;L;;;;;N;;;;; +137C2;EGYPTIAN HIEROGLYPH-137C2;Lo;0;L;;;;;N;;;;; +137C3;EGYPTIAN HIEROGLYPH-137C3;Lo;0;L;;;;;N;;;;; +137C4;EGYPTIAN HIEROGLYPH-137C4;Lo;0;L;;;;;N;;;;; +137C5;EGYPTIAN HIEROGLYPH-137C5;Lo;0;L;;;;;N;;;;; +137C6;EGYPTIAN HIEROGLYPH-137C6;Lo;0;L;;;;;N;;;;; +137C7;EGYPTIAN HIEROGLYPH-137C7;Lo;0;L;;;;;N;;;;; +137C8;EGYPTIAN HIEROGLYPH-137C8;Lo;0;L;;;;;N;;;;; +137C9;EGYPTIAN HIEROGLYPH-137C9;Lo;0;L;;;;;N;;;;; +137CA;EGYPTIAN HIEROGLYPH-137CA;Lo;0;L;;;;;N;;;;; +137CB;EGYPTIAN HIEROGLYPH-137CB;Lo;0;L;;;;;N;;;;; +137CC;EGYPTIAN HIEROGLYPH-137CC;Lo;0;L;;;;;N;;;;; +137CD;EGYPTIAN HIEROGLYPH-137CD;Lo;0;L;;;;;N;;;;; +137CE;EGYPTIAN HIEROGLYPH-137CE;Lo;0;L;;;;;N;;;;; +137CF;EGYPTIAN HIEROGLYPH-137CF;Lo;0;L;;;;;N;;;;; +137D0;EGYPTIAN HIEROGLYPH-137D0;Lo;0;L;;;;;N;;;;; +137D1;EGYPTIAN HIEROGLYPH-137D1;Lo;0;L;;;;;N;;;;; +137D2;EGYPTIAN HIEROGLYPH-137D2;Lo;0;L;;;;;N;;;;; +137D3;EGYPTIAN HIEROGLYPH-137D3;Lo;0;L;;;;;N;;;;; +137D4;EGYPTIAN HIEROGLYPH-137D4;Lo;0;L;;;;;N;;;;; +137D5;EGYPTIAN HIEROGLYPH-137D5;Lo;0;L;;;;;N;;;;; +137D6;EGYPTIAN HIEROGLYPH-137D6;Lo;0;L;;;;;N;;;;; +137D7;EGYPTIAN HIEROGLYPH-137D7;Lo;0;L;;;;;N;;;;; +137D8;EGYPTIAN HIEROGLYPH-137D8;Lo;0;L;;;;;N;;;;; +137D9;EGYPTIAN HIEROGLYPH-137D9;Lo;0;L;;;;;N;;;;; +137DA;EGYPTIAN HIEROGLYPH-137DA;Lo;0;L;;;;;N;;;;; +137DB;EGYPTIAN HIEROGLYPH-137DB;Lo;0;L;;;;;N;;;;; +137DC;EGYPTIAN HIEROGLYPH-137DC;Lo;0;L;;;;;N;;;;; +137DD;EGYPTIAN HIEROGLYPH-137DD;Lo;0;L;;;;;N;;;;; +137DE;EGYPTIAN HIEROGLYPH-137DE;Lo;0;L;;;;;N;;;;; +137DF;EGYPTIAN HIEROGLYPH-137DF;Lo;0;L;;;;;N;;;;; +137E0;EGYPTIAN HIEROGLYPH-137E0;Lo;0;L;;;;;N;;;;; +137E1;EGYPTIAN HIEROGLYPH-137E1;Lo;0;L;;;;;N;;;;; +137E2;EGYPTIAN HIEROGLYPH-137E2;Lo;0;L;;;;;N;;;;; +137E3;EGYPTIAN HIEROGLYPH-137E3;Lo;0;L;;;;;N;;;;; +137E4;EGYPTIAN HIEROGLYPH-137E4;Lo;0;L;;;;;N;;;;; +137E5;EGYPTIAN HIEROGLYPH-137E5;Lo;0;L;;;;;N;;;;; +137E6;EGYPTIAN HIEROGLYPH-137E6;Lo;0;L;;;;;N;;;;; +137E7;EGYPTIAN HIEROGLYPH-137E7;Lo;0;L;;;;;N;;;;; +137E8;EGYPTIAN HIEROGLYPH-137E8;Lo;0;L;;;;;N;;;;; +137E9;EGYPTIAN HIEROGLYPH-137E9;Lo;0;L;;;;;N;;;;; +137EA;EGYPTIAN HIEROGLYPH-137EA;Lo;0;L;;;;;N;;;;; +137EB;EGYPTIAN HIEROGLYPH-137EB;Lo;0;L;;;;;N;;;;; +137EC;EGYPTIAN HIEROGLYPH-137EC;Lo;0;L;;;;;N;;;;; +137ED;EGYPTIAN HIEROGLYPH-137ED;Lo;0;L;;;;;N;;;;; +137EE;EGYPTIAN HIEROGLYPH-137EE;Lo;0;L;;;;;N;;;;; +137EF;EGYPTIAN HIEROGLYPH-137EF;Lo;0;L;;;;;N;;;;; +137F0;EGYPTIAN HIEROGLYPH-137F0;Lo;0;L;;;;;N;;;;; +137F1;EGYPTIAN HIEROGLYPH-137F1;Lo;0;L;;;;;N;;;;; +137F2;EGYPTIAN HIEROGLYPH-137F2;Lo;0;L;;;;;N;;;;; +137F3;EGYPTIAN HIEROGLYPH-137F3;Lo;0;L;;;;;N;;;;; +137F4;EGYPTIAN HIEROGLYPH-137F4;Lo;0;L;;;;;N;;;;; +137F5;EGYPTIAN HIEROGLYPH-137F5;Lo;0;L;;;;;N;;;;; +137F6;EGYPTIAN HIEROGLYPH-137F6;Lo;0;L;;;;;N;;;;; +137F7;EGYPTIAN HIEROGLYPH-137F7;Lo;0;L;;;;;N;;;;; +137F8;EGYPTIAN HIEROGLYPH-137F8;Lo;0;L;;;;;N;;;;; +137F9;EGYPTIAN HIEROGLYPH-137F9;Lo;0;L;;;;;N;;;;; +137FA;EGYPTIAN HIEROGLYPH-137FA;Lo;0;L;;;;;N;;;;; +137FB;EGYPTIAN HIEROGLYPH-137FB;Lo;0;L;;;;;N;;;;; +137FC;EGYPTIAN HIEROGLYPH-137FC;Lo;0;L;;;;;N;;;;; +137FD;EGYPTIAN HIEROGLYPH-137FD;Lo;0;L;;;;;N;;;;; +137FE;EGYPTIAN HIEROGLYPH-137FE;Lo;0;L;;;;;N;;;;; +137FF;EGYPTIAN HIEROGLYPH-137FF;Lo;0;L;;;;;N;;;;; +13800;EGYPTIAN HIEROGLYPH-13800;Lo;0;L;;;;;N;;;;; +13801;EGYPTIAN HIEROGLYPH-13801;Lo;0;L;;;;;N;;;;; +13802;EGYPTIAN HIEROGLYPH-13802;Lo;0;L;;;;;N;;;;; +13803;EGYPTIAN HIEROGLYPH-13803;Lo;0;L;;;;;N;;;;; +13804;EGYPTIAN HIEROGLYPH-13804;Lo;0;L;;;;;N;;;;; +13805;EGYPTIAN HIEROGLYPH-13805;Lo;0;L;;;;;N;;;;; +13806;EGYPTIAN HIEROGLYPH-13806;Lo;0;L;;;;;N;;;;; +13807;EGYPTIAN HIEROGLYPH-13807;Lo;0;L;;;;;N;;;;; +13808;EGYPTIAN HIEROGLYPH-13808;Lo;0;L;;;;;N;;;;; +13809;EGYPTIAN HIEROGLYPH-13809;Lo;0;L;;;;;N;;;;; +1380A;EGYPTIAN HIEROGLYPH-1380A;Lo;0;L;;;;;N;;;;; +1380B;EGYPTIAN HIEROGLYPH-1380B;Lo;0;L;;;;;N;;;;; +1380C;EGYPTIAN HIEROGLYPH-1380C;Lo;0;L;;;;;N;;;;; +1380D;EGYPTIAN HIEROGLYPH-1380D;Lo;0;L;;;;;N;;;;; +1380E;EGYPTIAN HIEROGLYPH-1380E;Lo;0;L;;;;;N;;;;; +1380F;EGYPTIAN HIEROGLYPH-1380F;Lo;0;L;;;;;N;;;;; +13810;EGYPTIAN HIEROGLYPH-13810;Lo;0;L;;;;;N;;;;; +13811;EGYPTIAN HIEROGLYPH-13811;Lo;0;L;;;;;N;;;;; +13812;EGYPTIAN HIEROGLYPH-13812;Lo;0;L;;;;;N;;;;; +13813;EGYPTIAN HIEROGLYPH-13813;Lo;0;L;;;;;N;;;;; +13814;EGYPTIAN HIEROGLYPH-13814;Lo;0;L;;;;;N;;;;; +13815;EGYPTIAN HIEROGLYPH-13815;Lo;0;L;;;;;N;;;;; +13816;EGYPTIAN HIEROGLYPH-13816;Lo;0;L;;;;;N;;;;; +13817;EGYPTIAN HIEROGLYPH-13817;Lo;0;L;;;;;N;;;;; +13818;EGYPTIAN HIEROGLYPH-13818;Lo;0;L;;;;;N;;;;; +13819;EGYPTIAN HIEROGLYPH-13819;Lo;0;L;;;;;N;;;;; +1381A;EGYPTIAN HIEROGLYPH-1381A;Lo;0;L;;;;;N;;;;; +1381B;EGYPTIAN HIEROGLYPH-1381B;Lo;0;L;;;;;N;;;;; +1381C;EGYPTIAN HIEROGLYPH-1381C;Lo;0;L;;;;;N;;;;; +1381D;EGYPTIAN HIEROGLYPH-1381D;Lo;0;L;;;;;N;;;;; +1381E;EGYPTIAN HIEROGLYPH-1381E;Lo;0;L;;;;;N;;;;; +1381F;EGYPTIAN HIEROGLYPH-1381F;Lo;0;L;;;;;N;;;;; +13820;EGYPTIAN HIEROGLYPH-13820;Lo;0;L;;;;;N;;;;; +13821;EGYPTIAN HIEROGLYPH-13821;Lo;0;L;;;;;N;;;;; +13822;EGYPTIAN HIEROGLYPH-13822;Lo;0;L;;;;;N;;;;; +13823;EGYPTIAN HIEROGLYPH-13823;Lo;0;L;;;;;N;;;;; +13824;EGYPTIAN HIEROGLYPH-13824;Lo;0;L;;;;;N;;;;; +13825;EGYPTIAN HIEROGLYPH-13825;Lo;0;L;;;;;N;;;;; +13826;EGYPTIAN HIEROGLYPH-13826;Lo;0;L;;;;;N;;;;; +13827;EGYPTIAN HIEROGLYPH-13827;Lo;0;L;;;;;N;;;;; +13828;EGYPTIAN HIEROGLYPH-13828;Lo;0;L;;;;;N;;;;; +13829;EGYPTIAN HIEROGLYPH-13829;Lo;0;L;;;;;N;;;;; +1382A;EGYPTIAN HIEROGLYPH-1382A;Lo;0;L;;;;;N;;;;; +1382B;EGYPTIAN HIEROGLYPH-1382B;Lo;0;L;;;;;N;;;;; +1382C;EGYPTIAN HIEROGLYPH-1382C;Lo;0;L;;;;;N;;;;; +1382D;EGYPTIAN HIEROGLYPH-1382D;Lo;0;L;;;;;N;;;;; +1382E;EGYPTIAN HIEROGLYPH-1382E;Lo;0;L;;;;;N;;;;; +1382F;EGYPTIAN HIEROGLYPH-1382F;Lo;0;L;;;;;N;;;;; +13830;EGYPTIAN HIEROGLYPH-13830;Lo;0;L;;;;;N;;;;; +13831;EGYPTIAN HIEROGLYPH-13831;Lo;0;L;;;;;N;;;;; +13832;EGYPTIAN HIEROGLYPH-13832;Lo;0;L;;;;;N;;;;; +13833;EGYPTIAN HIEROGLYPH-13833;Lo;0;L;;;;;N;;;;; +13834;EGYPTIAN HIEROGLYPH-13834;Lo;0;L;;;;;N;;;;; +13835;EGYPTIAN HIEROGLYPH-13835;Lo;0;L;;;;;N;;;;; +13836;EGYPTIAN HIEROGLYPH-13836;Lo;0;L;;;;;N;;;;; +13837;EGYPTIAN HIEROGLYPH-13837;Lo;0;L;;;;;N;;;;; +13838;EGYPTIAN HIEROGLYPH-13838;Lo;0;L;;;;;N;;;;; +13839;EGYPTIAN HIEROGLYPH-13839;Lo;0;L;;;;;N;;;;; +1383A;EGYPTIAN HIEROGLYPH-1383A;Lo;0;L;;;;;N;;;;; +1383B;EGYPTIAN HIEROGLYPH-1383B;Lo;0;L;;;;;N;;;;; +1383C;EGYPTIAN HIEROGLYPH-1383C;Lo;0;L;;;;;N;;;;; +1383D;EGYPTIAN HIEROGLYPH-1383D;Lo;0;L;;;;;N;;;;; +1383E;EGYPTIAN HIEROGLYPH-1383E;Lo;0;L;;;;;N;;;;; +1383F;EGYPTIAN HIEROGLYPH-1383F;Lo;0;L;;;;;N;;;;; +13840;EGYPTIAN HIEROGLYPH-13840;Lo;0;L;;;;;N;;;;; +13841;EGYPTIAN HIEROGLYPH-13841;Lo;0;L;;;;;N;;;;; +13842;EGYPTIAN HIEROGLYPH-13842;Lo;0;L;;;;;N;;;;; +13843;EGYPTIAN HIEROGLYPH-13843;Lo;0;L;;;;;N;;;;; +13844;EGYPTIAN HIEROGLYPH-13844;Lo;0;L;;;;;N;;;;; +13845;EGYPTIAN HIEROGLYPH-13845;Lo;0;L;;;;;N;;;;; +13846;EGYPTIAN HIEROGLYPH-13846;Lo;0;L;;;;;N;;;;; +13847;EGYPTIAN HIEROGLYPH-13847;Lo;0;L;;;;;N;;;;; +13848;EGYPTIAN HIEROGLYPH-13848;Lo;0;L;;;;;N;;;;; +13849;EGYPTIAN HIEROGLYPH-13849;Lo;0;L;;;;;N;;;;; +1384A;EGYPTIAN HIEROGLYPH-1384A;Lo;0;L;;;;;N;;;;; +1384B;EGYPTIAN HIEROGLYPH-1384B;Lo;0;L;;;;;N;;;;; +1384C;EGYPTIAN HIEROGLYPH-1384C;Lo;0;L;;;;;N;;;;; +1384D;EGYPTIAN HIEROGLYPH-1384D;Lo;0;L;;;;;N;;;;; +1384E;EGYPTIAN HIEROGLYPH-1384E;Lo;0;L;;;;;N;;;;; +1384F;EGYPTIAN HIEROGLYPH-1384F;Lo;0;L;;;;;N;;;;; +13850;EGYPTIAN HIEROGLYPH-13850;Lo;0;L;;;;;N;;;;; +13851;EGYPTIAN HIEROGLYPH-13851;Lo;0;L;;;;;N;;;;; +13852;EGYPTIAN HIEROGLYPH-13852;Lo;0;L;;;;;N;;;;; +13853;EGYPTIAN HIEROGLYPH-13853;Lo;0;L;;;;;N;;;;; +13854;EGYPTIAN HIEROGLYPH-13854;Lo;0;L;;;;;N;;;;; +13855;EGYPTIAN HIEROGLYPH-13855;Lo;0;L;;;;;N;;;;; +13856;EGYPTIAN HIEROGLYPH-13856;Lo;0;L;;;;;N;;;;; +13857;EGYPTIAN HIEROGLYPH-13857;Lo;0;L;;;;;N;;;;; +13858;EGYPTIAN HIEROGLYPH-13858;Lo;0;L;;;;;N;;;;; +13859;EGYPTIAN HIEROGLYPH-13859;Lo;0;L;;;;;N;;;;; +1385A;EGYPTIAN HIEROGLYPH-1385A;Lo;0;L;;;;;N;;;;; +1385B;EGYPTIAN HIEROGLYPH-1385B;Lo;0;L;;;;;N;;;;; +1385C;EGYPTIAN HIEROGLYPH-1385C;Lo;0;L;;;;;N;;;;; +1385D;EGYPTIAN HIEROGLYPH-1385D;Lo;0;L;;;;;N;;;;; +1385E;EGYPTIAN HIEROGLYPH-1385E;Lo;0;L;;;;;N;;;;; +1385F;EGYPTIAN HIEROGLYPH-1385F;Lo;0;L;;;;;N;;;;; +13860;EGYPTIAN HIEROGLYPH-13860;Lo;0;L;;;;;N;;;;; +13861;EGYPTIAN HIEROGLYPH-13861;Lo;0;L;;;;;N;;;;; +13862;EGYPTIAN HIEROGLYPH-13862;Lo;0;L;;;;;N;;;;; +13863;EGYPTIAN HIEROGLYPH-13863;Lo;0;L;;;;;N;;;;; +13864;EGYPTIAN HIEROGLYPH-13864;Lo;0;L;;;;;N;;;;; +13865;EGYPTIAN HIEROGLYPH-13865;Lo;0;L;;;;;N;;;;; +13866;EGYPTIAN HIEROGLYPH-13866;Lo;0;L;;;;;N;;;;; +13867;EGYPTIAN HIEROGLYPH-13867;Lo;0;L;;;;;N;;;;; +13868;EGYPTIAN HIEROGLYPH-13868;Lo;0;L;;;;;N;;;;; +13869;EGYPTIAN HIEROGLYPH-13869;Lo;0;L;;;;;N;;;;; +1386A;EGYPTIAN HIEROGLYPH-1386A;Lo;0;L;;;;;N;;;;; +1386B;EGYPTIAN HIEROGLYPH-1386B;Lo;0;L;;;;;N;;;;; +1386C;EGYPTIAN HIEROGLYPH-1386C;Lo;0;L;;;;;N;;;;; +1386D;EGYPTIAN HIEROGLYPH-1386D;Lo;0;L;;;;;N;;;;; +1386E;EGYPTIAN HIEROGLYPH-1386E;Lo;0;L;;;;;N;;;;; +1386F;EGYPTIAN HIEROGLYPH-1386F;Lo;0;L;;;;;N;;;;; +13870;EGYPTIAN HIEROGLYPH-13870;Lo;0;L;;;;;N;;;;; +13871;EGYPTIAN HIEROGLYPH-13871;Lo;0;L;;;;;N;;;;; +13872;EGYPTIAN HIEROGLYPH-13872;Lo;0;L;;;;;N;;;;; +13873;EGYPTIAN HIEROGLYPH-13873;Lo;0;L;;;;;N;;;;; +13874;EGYPTIAN HIEROGLYPH-13874;Lo;0;L;;;;;N;;;;; +13875;EGYPTIAN HIEROGLYPH-13875;Lo;0;L;;;;;N;;;;; +13876;EGYPTIAN HIEROGLYPH-13876;Lo;0;L;;;;;N;;;;; +13877;EGYPTIAN HIEROGLYPH-13877;Lo;0;L;;;;;N;;;;; +13878;EGYPTIAN HIEROGLYPH-13878;Lo;0;L;;;;;N;;;;; +13879;EGYPTIAN HIEROGLYPH-13879;Lo;0;L;;;;;N;;;;; +1387A;EGYPTIAN HIEROGLYPH-1387A;Lo;0;L;;;;;N;;;;; +1387B;EGYPTIAN HIEROGLYPH-1387B;Lo;0;L;;;;;N;;;;; +1387C;EGYPTIAN HIEROGLYPH-1387C;Lo;0;L;;;;;N;;;;; +1387D;EGYPTIAN HIEROGLYPH-1387D;Lo;0;L;;;;;N;;;;; +1387E;EGYPTIAN HIEROGLYPH-1387E;Lo;0;L;;;;;N;;;;; +1387F;EGYPTIAN HIEROGLYPH-1387F;Lo;0;L;;;;;N;;;;; +13880;EGYPTIAN HIEROGLYPH-13880;Lo;0;L;;;;;N;;;;; +13881;EGYPTIAN HIEROGLYPH-13881;Lo;0;L;;;;;N;;;;; +13882;EGYPTIAN HIEROGLYPH-13882;Lo;0;L;;;;;N;;;;; +13883;EGYPTIAN HIEROGLYPH-13883;Lo;0;L;;;;;N;;;;; +13884;EGYPTIAN HIEROGLYPH-13884;Lo;0;L;;;;;N;;;;; +13885;EGYPTIAN HIEROGLYPH-13885;Lo;0;L;;;;;N;;;;; +13886;EGYPTIAN HIEROGLYPH-13886;Lo;0;L;;;;;N;;;;; +13887;EGYPTIAN HIEROGLYPH-13887;Lo;0;L;;;;;N;;;;; +13888;EGYPTIAN HIEROGLYPH-13888;Lo;0;L;;;;;N;;;;; +13889;EGYPTIAN HIEROGLYPH-13889;Lo;0;L;;;;;N;;;;; +1388A;EGYPTIAN HIEROGLYPH-1388A;Lo;0;L;;;;;N;;;;; +1388B;EGYPTIAN HIEROGLYPH-1388B;Lo;0;L;;;;;N;;;;; +1388C;EGYPTIAN HIEROGLYPH-1388C;Lo;0;L;;;;;N;;;;; +1388D;EGYPTIAN HIEROGLYPH-1388D;Lo;0;L;;;;;N;;;;; +1388E;EGYPTIAN HIEROGLYPH-1388E;Lo;0;L;;;;;N;;;;; +1388F;EGYPTIAN HIEROGLYPH-1388F;Lo;0;L;;;;;N;;;;; +13890;EGYPTIAN HIEROGLYPH-13890;Lo;0;L;;;;;N;;;;; +13891;EGYPTIAN HIEROGLYPH-13891;Lo;0;L;;;;;N;;;;; +13892;EGYPTIAN HIEROGLYPH-13892;Lo;0;L;;;;;N;;;;; +13893;EGYPTIAN HIEROGLYPH-13893;Lo;0;L;;;;;N;;;;; +13894;EGYPTIAN HIEROGLYPH-13894;Lo;0;L;;;;;N;;;;; +13895;EGYPTIAN HIEROGLYPH-13895;Lo;0;L;;;;;N;;;;; +13896;EGYPTIAN HIEROGLYPH-13896;Lo;0;L;;;;;N;;;;; +13897;EGYPTIAN HIEROGLYPH-13897;Lo;0;L;;;;;N;;;;; +13898;EGYPTIAN HIEROGLYPH-13898;Lo;0;L;;;;;N;;;;; +13899;EGYPTIAN HIEROGLYPH-13899;Lo;0;L;;;;;N;;;;; +1389A;EGYPTIAN HIEROGLYPH-1389A;Lo;0;L;;;;;N;;;;; +1389B;EGYPTIAN HIEROGLYPH-1389B;Lo;0;L;;;;;N;;;;; +1389C;EGYPTIAN HIEROGLYPH-1389C;Lo;0;L;;;;;N;;;;; +1389D;EGYPTIAN HIEROGLYPH-1389D;Lo;0;L;;;;;N;;;;; +1389E;EGYPTIAN HIEROGLYPH-1389E;Lo;0;L;;;;;N;;;;; +1389F;EGYPTIAN HIEROGLYPH-1389F;Lo;0;L;;;;;N;;;;; +138A0;EGYPTIAN HIEROGLYPH-138A0;Lo;0;L;;;;;N;;;;; +138A1;EGYPTIAN HIEROGLYPH-138A1;Lo;0;L;;;;;N;;;;; +138A2;EGYPTIAN HIEROGLYPH-138A2;Lo;0;L;;;;;N;;;;; +138A3;EGYPTIAN HIEROGLYPH-138A3;Lo;0;L;;;;;N;;;;; +138A4;EGYPTIAN HIEROGLYPH-138A4;Lo;0;L;;;;;N;;;;; +138A5;EGYPTIAN HIEROGLYPH-138A5;Lo;0;L;;;;;N;;;;; +138A6;EGYPTIAN HIEROGLYPH-138A6;Lo;0;L;;;;;N;;;;; +138A7;EGYPTIAN HIEROGLYPH-138A7;Lo;0;L;;;;;N;;;;; +138A8;EGYPTIAN HIEROGLYPH-138A8;Lo;0;L;;;;;N;;;;; +138A9;EGYPTIAN HIEROGLYPH-138A9;Lo;0;L;;;;;N;;;;; +138AA;EGYPTIAN HIEROGLYPH-138AA;Lo;0;L;;;;;N;;;;; +138AB;EGYPTIAN HIEROGLYPH-138AB;Lo;0;L;;;;;N;;;;; +138AC;EGYPTIAN HIEROGLYPH-138AC;Lo;0;L;;;;;N;;;;; +138AD;EGYPTIAN HIEROGLYPH-138AD;Lo;0;L;;;;;N;;;;; +138AE;EGYPTIAN HIEROGLYPH-138AE;Lo;0;L;;;;;N;;;;; +138AF;EGYPTIAN HIEROGLYPH-138AF;Lo;0;L;;;;;N;;;;; +138B0;EGYPTIAN HIEROGLYPH-138B0;Lo;0;L;;;;;N;;;;; +138B1;EGYPTIAN HIEROGLYPH-138B1;Lo;0;L;;;;;N;;;;; +138B2;EGYPTIAN HIEROGLYPH-138B2;Lo;0;L;;;;;N;;;;; +138B3;EGYPTIAN HIEROGLYPH-138B3;Lo;0;L;;;;;N;;;;; +138B4;EGYPTIAN HIEROGLYPH-138B4;Lo;0;L;;;;;N;;;;; +138B5;EGYPTIAN HIEROGLYPH-138B5;Lo;0;L;;;;;N;;;;; +138B6;EGYPTIAN HIEROGLYPH-138B6;Lo;0;L;;;;;N;;;;; +138B7;EGYPTIAN HIEROGLYPH-138B7;Lo;0;L;;;;;N;;;;; +138B8;EGYPTIAN HIEROGLYPH-138B8;Lo;0;L;;;;;N;;;;; +138B9;EGYPTIAN HIEROGLYPH-138B9;Lo;0;L;;;;;N;;;;; +138BA;EGYPTIAN HIEROGLYPH-138BA;Lo;0;L;;;;;N;;;;; +138BB;EGYPTIAN HIEROGLYPH-138BB;Lo;0;L;;;;;N;;;;; +138BC;EGYPTIAN HIEROGLYPH-138BC;Lo;0;L;;;;;N;;;;; +138BD;EGYPTIAN HIEROGLYPH-138BD;Lo;0;L;;;;;N;;;;; +138BE;EGYPTIAN HIEROGLYPH-138BE;Lo;0;L;;;;;N;;;;; +138BF;EGYPTIAN HIEROGLYPH-138BF;Lo;0;L;;;;;N;;;;; +138C0;EGYPTIAN HIEROGLYPH-138C0;Lo;0;L;;;;;N;;;;; +138C1;EGYPTIAN HIEROGLYPH-138C1;Lo;0;L;;;;;N;;;;; +138C2;EGYPTIAN HIEROGLYPH-138C2;Lo;0;L;;;;;N;;;;; +138C3;EGYPTIAN HIEROGLYPH-138C3;Lo;0;L;;;;;N;;;;; +138C4;EGYPTIAN HIEROGLYPH-138C4;Lo;0;L;;;;;N;;;;; +138C5;EGYPTIAN HIEROGLYPH-138C5;Lo;0;L;;;;;N;;;;; +138C6;EGYPTIAN HIEROGLYPH-138C6;Lo;0;L;;;;;N;;;;; +138C7;EGYPTIAN HIEROGLYPH-138C7;Lo;0;L;;;;;N;;;;; +138C8;EGYPTIAN HIEROGLYPH-138C8;Lo;0;L;;;;;N;;;;; +138C9;EGYPTIAN HIEROGLYPH-138C9;Lo;0;L;;;;;N;;;;; +138CA;EGYPTIAN HIEROGLYPH-138CA;Lo;0;L;;;;;N;;;;; +138CB;EGYPTIAN HIEROGLYPH-138CB;Lo;0;L;;;;;N;;;;; +138CC;EGYPTIAN HIEROGLYPH-138CC;Lo;0;L;;;;;N;;;;; +138CD;EGYPTIAN HIEROGLYPH-138CD;Lo;0;L;;;;;N;;;;; +138CE;EGYPTIAN HIEROGLYPH-138CE;Lo;0;L;;;;;N;;;;; +138CF;EGYPTIAN HIEROGLYPH-138CF;Lo;0;L;;;;;N;;;;; +138D0;EGYPTIAN HIEROGLYPH-138D0;Lo;0;L;;;;;N;;;;; +138D1;EGYPTIAN HIEROGLYPH-138D1;Lo;0;L;;;;;N;;;;; +138D2;EGYPTIAN HIEROGLYPH-138D2;Lo;0;L;;;;;N;;;;; +138D3;EGYPTIAN HIEROGLYPH-138D3;Lo;0;L;;;;;N;;;;; +138D4;EGYPTIAN HIEROGLYPH-138D4;Lo;0;L;;;;;N;;;;; +138D5;EGYPTIAN HIEROGLYPH-138D5;Lo;0;L;;;;;N;;;;; +138D6;EGYPTIAN HIEROGLYPH-138D6;Lo;0;L;;;;;N;;;;; +138D7;EGYPTIAN HIEROGLYPH-138D7;Lo;0;L;;;;;N;;;;; +138D8;EGYPTIAN HIEROGLYPH-138D8;Lo;0;L;;;;;N;;;;; +138D9;EGYPTIAN HIEROGLYPH-138D9;Lo;0;L;;;;;N;;;;; +138DA;EGYPTIAN HIEROGLYPH-138DA;Lo;0;L;;;;;N;;;;; +138DB;EGYPTIAN HIEROGLYPH-138DB;Lo;0;L;;;;;N;;;;; +138DC;EGYPTIAN HIEROGLYPH-138DC;Lo;0;L;;;;;N;;;;; +138DD;EGYPTIAN HIEROGLYPH-138DD;Lo;0;L;;;;;N;;;;; +138DE;EGYPTIAN HIEROGLYPH-138DE;Lo;0;L;;;;;N;;;;; +138DF;EGYPTIAN HIEROGLYPH-138DF;Lo;0;L;;;;;N;;;;; +138E0;EGYPTIAN HIEROGLYPH-138E0;Lo;0;L;;;;;N;;;;; +138E1;EGYPTIAN HIEROGLYPH-138E1;Lo;0;L;;;;;N;;;;; +138E2;EGYPTIAN HIEROGLYPH-138E2;Lo;0;L;;;;;N;;;;; +138E3;EGYPTIAN HIEROGLYPH-138E3;Lo;0;L;;;;;N;;;;; +138E4;EGYPTIAN HIEROGLYPH-138E4;Lo;0;L;;;;;N;;;;; +138E5;EGYPTIAN HIEROGLYPH-138E5;Lo;0;L;;;;;N;;;;; +138E6;EGYPTIAN HIEROGLYPH-138E6;Lo;0;L;;;;;N;;;;; +138E7;EGYPTIAN HIEROGLYPH-138E7;Lo;0;L;;;;;N;;;;; +138E8;EGYPTIAN HIEROGLYPH-138E8;Lo;0;L;;;;;N;;;;; +138E9;EGYPTIAN HIEROGLYPH-138E9;Lo;0;L;;;;;N;;;;; +138EA;EGYPTIAN HIEROGLYPH-138EA;Lo;0;L;;;;;N;;;;; +138EB;EGYPTIAN HIEROGLYPH-138EB;Lo;0;L;;;;;N;;;;; +138EC;EGYPTIAN HIEROGLYPH-138EC;Lo;0;L;;;;;N;;;;; +138ED;EGYPTIAN HIEROGLYPH-138ED;Lo;0;L;;;;;N;;;;; +138EE;EGYPTIAN HIEROGLYPH-138EE;Lo;0;L;;;;;N;;;;; +138EF;EGYPTIAN HIEROGLYPH-138EF;Lo;0;L;;;;;N;;;;; +138F0;EGYPTIAN HIEROGLYPH-138F0;Lo;0;L;;;;;N;;;;; +138F1;EGYPTIAN HIEROGLYPH-138F1;Lo;0;L;;;;;N;;;;; +138F2;EGYPTIAN HIEROGLYPH-138F2;Lo;0;L;;;;;N;;;;; +138F3;EGYPTIAN HIEROGLYPH-138F3;Lo;0;L;;;;;N;;;;; +138F4;EGYPTIAN HIEROGLYPH-138F4;Lo;0;L;;;;;N;;;;; +138F5;EGYPTIAN HIEROGLYPH-138F5;Lo;0;L;;;;;N;;;;; +138F6;EGYPTIAN HIEROGLYPH-138F6;Lo;0;L;;;;;N;;;;; +138F7;EGYPTIAN HIEROGLYPH-138F7;Lo;0;L;;;;;N;;;;; +138F8;EGYPTIAN HIEROGLYPH-138F8;Lo;0;L;;;;;N;;;;; +138F9;EGYPTIAN HIEROGLYPH-138F9;Lo;0;L;;;;;N;;;;; +138FA;EGYPTIAN HIEROGLYPH-138FA;Lo;0;L;;;;;N;;;;; +138FB;EGYPTIAN HIEROGLYPH-138FB;Lo;0;L;;;;;N;;;;; +138FC;EGYPTIAN HIEROGLYPH-138FC;Lo;0;L;;;;;N;;;;; +138FD;EGYPTIAN HIEROGLYPH-138FD;Lo;0;L;;;;;N;;;;; +138FE;EGYPTIAN HIEROGLYPH-138FE;Lo;0;L;;;;;N;;;;; +138FF;EGYPTIAN HIEROGLYPH-138FF;Lo;0;L;;;;;N;;;;; +13900;EGYPTIAN HIEROGLYPH-13900;Lo;0;L;;;;;N;;;;; +13901;EGYPTIAN HIEROGLYPH-13901;Lo;0;L;;;;;N;;;;; +13902;EGYPTIAN HIEROGLYPH-13902;Lo;0;L;;;;;N;;;;; +13903;EGYPTIAN HIEROGLYPH-13903;Lo;0;L;;;;;N;;;;; +13904;EGYPTIAN HIEROGLYPH-13904;Lo;0;L;;;;;N;;;;; +13905;EGYPTIAN HIEROGLYPH-13905;Lo;0;L;;;;;N;;;;; +13906;EGYPTIAN HIEROGLYPH-13906;Lo;0;L;;;;;N;;;;; +13907;EGYPTIAN HIEROGLYPH-13907;Lo;0;L;;;;;N;;;;; +13908;EGYPTIAN HIEROGLYPH-13908;Lo;0;L;;;;;N;;;;; +13909;EGYPTIAN HIEROGLYPH-13909;Lo;0;L;;;;;N;;;;; +1390A;EGYPTIAN HIEROGLYPH-1390A;Lo;0;L;;;;;N;;;;; +1390B;EGYPTIAN HIEROGLYPH-1390B;Lo;0;L;;;;;N;;;;; +1390C;EGYPTIAN HIEROGLYPH-1390C;Lo;0;L;;;;;N;;;;; +1390D;EGYPTIAN HIEROGLYPH-1390D;Lo;0;L;;;;;N;;;;; +1390E;EGYPTIAN HIEROGLYPH-1390E;Lo;0;L;;;;;N;;;;; +1390F;EGYPTIAN HIEROGLYPH-1390F;Lo;0;L;;;;;N;;;;; +13910;EGYPTIAN HIEROGLYPH-13910;Lo;0;L;;;;;N;;;;; +13911;EGYPTIAN HIEROGLYPH-13911;Lo;0;L;;;;;N;;;;; +13912;EGYPTIAN HIEROGLYPH-13912;Lo;0;L;;;;;N;;;;; +13913;EGYPTIAN HIEROGLYPH-13913;Lo;0;L;;;;;N;;;;; +13914;EGYPTIAN HIEROGLYPH-13914;Lo;0;L;;;;;N;;;;; +13915;EGYPTIAN HIEROGLYPH-13915;Lo;0;L;;;;;N;;;;; +13916;EGYPTIAN HIEROGLYPH-13916;Lo;0;L;;;;;N;;;;; +13917;EGYPTIAN HIEROGLYPH-13917;Lo;0;L;;;;;N;;;;; +13918;EGYPTIAN HIEROGLYPH-13918;Lo;0;L;;;;;N;;;;; +13919;EGYPTIAN HIEROGLYPH-13919;Lo;0;L;;;;;N;;;;; +1391A;EGYPTIAN HIEROGLYPH-1391A;Lo;0;L;;;;;N;;;;; +1391B;EGYPTIAN HIEROGLYPH-1391B;Lo;0;L;;;;;N;;;;; +1391C;EGYPTIAN HIEROGLYPH-1391C;Lo;0;L;;;;;N;;;;; +1391D;EGYPTIAN HIEROGLYPH-1391D;Lo;0;L;;;;;N;;;;; +1391E;EGYPTIAN HIEROGLYPH-1391E;Lo;0;L;;;;;N;;;;; +1391F;EGYPTIAN HIEROGLYPH-1391F;Lo;0;L;;;;;N;;;;; +13920;EGYPTIAN HIEROGLYPH-13920;Lo;0;L;;;;;N;;;;; +13921;EGYPTIAN HIEROGLYPH-13921;Lo;0;L;;;;;N;;;;; +13922;EGYPTIAN HIEROGLYPH-13922;Lo;0;L;;;;;N;;;;; +13923;EGYPTIAN HIEROGLYPH-13923;Lo;0;L;;;;;N;;;;; +13924;EGYPTIAN HIEROGLYPH-13924;Lo;0;L;;;;;N;;;;; +13925;EGYPTIAN HIEROGLYPH-13925;Lo;0;L;;;;;N;;;;; +13926;EGYPTIAN HIEROGLYPH-13926;Lo;0;L;;;;;N;;;;; +13927;EGYPTIAN HIEROGLYPH-13927;Lo;0;L;;;;;N;;;;; +13928;EGYPTIAN HIEROGLYPH-13928;Lo;0;L;;;;;N;;;;; +13929;EGYPTIAN HIEROGLYPH-13929;Lo;0;L;;;;;N;;;;; +1392A;EGYPTIAN HIEROGLYPH-1392A;Lo;0;L;;;;;N;;;;; +1392B;EGYPTIAN HIEROGLYPH-1392B;Lo;0;L;;;;;N;;;;; +1392C;EGYPTIAN HIEROGLYPH-1392C;Lo;0;L;;;;;N;;;;; +1392D;EGYPTIAN HIEROGLYPH-1392D;Lo;0;L;;;;;N;;;;; +1392E;EGYPTIAN HIEROGLYPH-1392E;Lo;0;L;;;;;N;;;;; +1392F;EGYPTIAN HIEROGLYPH-1392F;Lo;0;L;;;;;N;;;;; +13930;EGYPTIAN HIEROGLYPH-13930;Lo;0;L;;;;;N;;;;; +13931;EGYPTIAN HIEROGLYPH-13931;Lo;0;L;;;;;N;;;;; +13932;EGYPTIAN HIEROGLYPH-13932;Lo;0;L;;;;;N;;;;; +13933;EGYPTIAN HIEROGLYPH-13933;Lo;0;L;;;;;N;;;;; +13934;EGYPTIAN HIEROGLYPH-13934;Lo;0;L;;;;;N;;;;; +13935;EGYPTIAN HIEROGLYPH-13935;Lo;0;L;;;;;N;;;;; +13936;EGYPTIAN HIEROGLYPH-13936;Lo;0;L;;;;;N;;;;; +13937;EGYPTIAN HIEROGLYPH-13937;Lo;0;L;;;;;N;;;;; +13938;EGYPTIAN HIEROGLYPH-13938;Lo;0;L;;;;;N;;;;; +13939;EGYPTIAN HIEROGLYPH-13939;Lo;0;L;;;;;N;;;;; +1393A;EGYPTIAN HIEROGLYPH-1393A;Lo;0;L;;;;;N;;;;; +1393B;EGYPTIAN HIEROGLYPH-1393B;Lo;0;L;;;;;N;;;;; +1393C;EGYPTIAN HIEROGLYPH-1393C;Lo;0;L;;;;;N;;;;; +1393D;EGYPTIAN HIEROGLYPH-1393D;Lo;0;L;;;;;N;;;;; +1393E;EGYPTIAN HIEROGLYPH-1393E;Lo;0;L;;;;;N;;;;; +1393F;EGYPTIAN HIEROGLYPH-1393F;Lo;0;L;;;;;N;;;;; +13940;EGYPTIAN HIEROGLYPH-13940;Lo;0;L;;;;;N;;;;; +13941;EGYPTIAN HIEROGLYPH-13941;Lo;0;L;;;;;N;;;;; +13942;EGYPTIAN HIEROGLYPH-13942;Lo;0;L;;;;;N;;;;; +13943;EGYPTIAN HIEROGLYPH-13943;Lo;0;L;;;;;N;;;;; +13944;EGYPTIAN HIEROGLYPH-13944;Lo;0;L;;;;;N;;;;; +13945;EGYPTIAN HIEROGLYPH-13945;Lo;0;L;;;;;N;;;;; +13946;EGYPTIAN HIEROGLYPH-13946;Lo;0;L;;;;;N;;;;; +13947;EGYPTIAN HIEROGLYPH-13947;Lo;0;L;;;;;N;;;;; +13948;EGYPTIAN HIEROGLYPH-13948;Lo;0;L;;;;;N;;;;; +13949;EGYPTIAN HIEROGLYPH-13949;Lo;0;L;;;;;N;;;;; +1394A;EGYPTIAN HIEROGLYPH-1394A;Lo;0;L;;;;;N;;;;; +1394B;EGYPTIAN HIEROGLYPH-1394B;Lo;0;L;;;;;N;;;;; +1394C;EGYPTIAN HIEROGLYPH-1394C;Lo;0;L;;;;;N;;;;; +1394D;EGYPTIAN HIEROGLYPH-1394D;Lo;0;L;;;;;N;;;;; +1394E;EGYPTIAN HIEROGLYPH-1394E;Lo;0;L;;;;;N;;;;; +1394F;EGYPTIAN HIEROGLYPH-1394F;Lo;0;L;;;;;N;;;;; +13950;EGYPTIAN HIEROGLYPH-13950;Lo;0;L;;;;;N;;;;; +13951;EGYPTIAN HIEROGLYPH-13951;Lo;0;L;;;;;N;;;;; +13952;EGYPTIAN HIEROGLYPH-13952;Lo;0;L;;;;;N;;;;; +13953;EGYPTIAN HIEROGLYPH-13953;Lo;0;L;;;;;N;;;;; +13954;EGYPTIAN HIEROGLYPH-13954;Lo;0;L;;;;;N;;;;; +13955;EGYPTIAN HIEROGLYPH-13955;Lo;0;L;;;;;N;;;;; +13956;EGYPTIAN HIEROGLYPH-13956;Lo;0;L;;;;;N;;;;; +13957;EGYPTIAN HIEROGLYPH-13957;Lo;0;L;;;;;N;;;;; +13958;EGYPTIAN HIEROGLYPH-13958;Lo;0;L;;;;;N;;;;; +13959;EGYPTIAN HIEROGLYPH-13959;Lo;0;L;;;;;N;;;;; +1395A;EGYPTIAN HIEROGLYPH-1395A;Lo;0;L;;;;;N;;;;; +1395B;EGYPTIAN HIEROGLYPH-1395B;Lo;0;L;;;;;N;;;;; +1395C;EGYPTIAN HIEROGLYPH-1395C;Lo;0;L;;;;;N;;;;; +1395D;EGYPTIAN HIEROGLYPH-1395D;Lo;0;L;;;;;N;;;;; +1395E;EGYPTIAN HIEROGLYPH-1395E;Lo;0;L;;;;;N;;;;; +1395F;EGYPTIAN HIEROGLYPH-1395F;Lo;0;L;;;;;N;;;;; +13960;EGYPTIAN HIEROGLYPH-13960;Lo;0;L;;;;;N;;;;; +13961;EGYPTIAN HIEROGLYPH-13961;Lo;0;L;;;;;N;;;;; +13962;EGYPTIAN HIEROGLYPH-13962;Lo;0;L;;;;;N;;;;; +13963;EGYPTIAN HIEROGLYPH-13963;Lo;0;L;;;;;N;;;;; +13964;EGYPTIAN HIEROGLYPH-13964;Lo;0;L;;;;;N;;;;; +13965;EGYPTIAN HIEROGLYPH-13965;Lo;0;L;;;;;N;;;;; +13966;EGYPTIAN HIEROGLYPH-13966;Lo;0;L;;;;;N;;;;; +13967;EGYPTIAN HIEROGLYPH-13967;Lo;0;L;;;;;N;;;;; +13968;EGYPTIAN HIEROGLYPH-13968;Lo;0;L;;;;;N;;;;; +13969;EGYPTIAN HIEROGLYPH-13969;Lo;0;L;;;;;N;;;;; +1396A;EGYPTIAN HIEROGLYPH-1396A;Lo;0;L;;;;;N;;;;; +1396B;EGYPTIAN HIEROGLYPH-1396B;Lo;0;L;;;;;N;;;;; +1396C;EGYPTIAN HIEROGLYPH-1396C;Lo;0;L;;;;;N;;;;; +1396D;EGYPTIAN HIEROGLYPH-1396D;Lo;0;L;;;;;N;;;;; +1396E;EGYPTIAN HIEROGLYPH-1396E;Lo;0;L;;;;;N;;;;; +1396F;EGYPTIAN HIEROGLYPH-1396F;Lo;0;L;;;;;N;;;;; +13970;EGYPTIAN HIEROGLYPH-13970;Lo;0;L;;;;;N;;;;; +13971;EGYPTIAN HIEROGLYPH-13971;Lo;0;L;;;;;N;;;;; +13972;EGYPTIAN HIEROGLYPH-13972;Lo;0;L;;;;;N;;;;; +13973;EGYPTIAN HIEROGLYPH-13973;Lo;0;L;;;;;N;;;;; +13974;EGYPTIAN HIEROGLYPH-13974;Lo;0;L;;;;;N;;;;; +13975;EGYPTIAN HIEROGLYPH-13975;Lo;0;L;;;;;N;;;;; +13976;EGYPTIAN HIEROGLYPH-13976;Lo;0;L;;;;;N;;;;; +13977;EGYPTIAN HIEROGLYPH-13977;Lo;0;L;;;;;N;;;;; +13978;EGYPTIAN HIEROGLYPH-13978;Lo;0;L;;;;;N;;;;; +13979;EGYPTIAN HIEROGLYPH-13979;Lo;0;L;;;;;N;;;;; +1397A;EGYPTIAN HIEROGLYPH-1397A;Lo;0;L;;;;;N;;;;; +1397B;EGYPTIAN HIEROGLYPH-1397B;Lo;0;L;;;;;N;;;;; +1397C;EGYPTIAN HIEROGLYPH-1397C;Lo;0;L;;;;;N;;;;; +1397D;EGYPTIAN HIEROGLYPH-1397D;Lo;0;L;;;;;N;;;;; +1397E;EGYPTIAN HIEROGLYPH-1397E;Lo;0;L;;;;;N;;;;; +1397F;EGYPTIAN HIEROGLYPH-1397F;Lo;0;L;;;;;N;;;;; +13980;EGYPTIAN HIEROGLYPH-13980;Lo;0;L;;;;;N;;;;; +13981;EGYPTIAN HIEROGLYPH-13981;Lo;0;L;;;;;N;;;;; +13982;EGYPTIAN HIEROGLYPH-13982;Lo;0;L;;;;;N;;;;; +13983;EGYPTIAN HIEROGLYPH-13983;Lo;0;L;;;;;N;;;;; +13984;EGYPTIAN HIEROGLYPH-13984;Lo;0;L;;;;;N;;;;; +13985;EGYPTIAN HIEROGLYPH-13985;Lo;0;L;;;;;N;;;;; +13986;EGYPTIAN HIEROGLYPH-13986;Lo;0;L;;;;;N;;;;; +13987;EGYPTIAN HIEROGLYPH-13987;Lo;0;L;;;;;N;;;;; +13988;EGYPTIAN HIEROGLYPH-13988;Lo;0;L;;;;;N;;;;; +13989;EGYPTIAN HIEROGLYPH-13989;Lo;0;L;;;;;N;;;;; +1398A;EGYPTIAN HIEROGLYPH-1398A;Lo;0;L;;;;;N;;;;; +1398B;EGYPTIAN HIEROGLYPH-1398B;Lo;0;L;;;;;N;;;;; +1398C;EGYPTIAN HIEROGLYPH-1398C;Lo;0;L;;;;;N;;;;; +1398D;EGYPTIAN HIEROGLYPH-1398D;Lo;0;L;;;;;N;;;;; +1398E;EGYPTIAN HIEROGLYPH-1398E;Lo;0;L;;;;;N;;;;; +1398F;EGYPTIAN HIEROGLYPH-1398F;Lo;0;L;;;;;N;;;;; +13990;EGYPTIAN HIEROGLYPH-13990;Lo;0;L;;;;;N;;;;; +13991;EGYPTIAN HIEROGLYPH-13991;Lo;0;L;;;;;N;;;;; +13992;EGYPTIAN HIEROGLYPH-13992;Lo;0;L;;;;;N;;;;; +13993;EGYPTIAN HIEROGLYPH-13993;Lo;0;L;;;;;N;;;;; +13994;EGYPTIAN HIEROGLYPH-13994;Lo;0;L;;;;;N;;;;; +13995;EGYPTIAN HIEROGLYPH-13995;Lo;0;L;;;;;N;;;;; +13996;EGYPTIAN HIEROGLYPH-13996;Lo;0;L;;;;;N;;;;; +13997;EGYPTIAN HIEROGLYPH-13997;Lo;0;L;;;;;N;;;;; +13998;EGYPTIAN HIEROGLYPH-13998;Lo;0;L;;;;;N;;;;; +13999;EGYPTIAN HIEROGLYPH-13999;Lo;0;L;;;;;N;;;;; +1399A;EGYPTIAN HIEROGLYPH-1399A;Lo;0;L;;;;;N;;;;; +1399B;EGYPTIAN HIEROGLYPH-1399B;Lo;0;L;;;;;N;;;;; +1399C;EGYPTIAN HIEROGLYPH-1399C;Lo;0;L;;;;;N;;;;; +1399D;EGYPTIAN HIEROGLYPH-1399D;Lo;0;L;;;;;N;;;;; +1399E;EGYPTIAN HIEROGLYPH-1399E;Lo;0;L;;;;;N;;;;; +1399F;EGYPTIAN HIEROGLYPH-1399F;Lo;0;L;;;;;N;;;;; +139A0;EGYPTIAN HIEROGLYPH-139A0;Lo;0;L;;;;;N;;;;; +139A1;EGYPTIAN HIEROGLYPH-139A1;Lo;0;L;;;;;N;;;;; +139A2;EGYPTIAN HIEROGLYPH-139A2;Lo;0;L;;;;;N;;;;; +139A3;EGYPTIAN HIEROGLYPH-139A3;Lo;0;L;;;;;N;;;;; +139A4;EGYPTIAN HIEROGLYPH-139A4;Lo;0;L;;;;;N;;;;; +139A5;EGYPTIAN HIEROGLYPH-139A5;Lo;0;L;;;;;N;;;;; +139A6;EGYPTIAN HIEROGLYPH-139A6;Lo;0;L;;;;;N;;;;; +139A7;EGYPTIAN HIEROGLYPH-139A7;Lo;0;L;;;;;N;;;;; +139A8;EGYPTIAN HIEROGLYPH-139A8;Lo;0;L;;;;;N;;;;; +139A9;EGYPTIAN HIEROGLYPH-139A9;Lo;0;L;;;;;N;;;;; +139AA;EGYPTIAN HIEROGLYPH-139AA;Lo;0;L;;;;;N;;;;; +139AB;EGYPTIAN HIEROGLYPH-139AB;Lo;0;L;;;;;N;;;;; +139AC;EGYPTIAN HIEROGLYPH-139AC;Lo;0;L;;;;;N;;;;; +139AD;EGYPTIAN HIEROGLYPH-139AD;Lo;0;L;;;;;N;;;;; +139AE;EGYPTIAN HIEROGLYPH-139AE;Lo;0;L;;;;;N;;;;; +139AF;EGYPTIAN HIEROGLYPH-139AF;Lo;0;L;;;;;N;;;;; +139B0;EGYPTIAN HIEROGLYPH-139B0;Lo;0;L;;;;;N;;;;; +139B1;EGYPTIAN HIEROGLYPH-139B1;Lo;0;L;;;;;N;;;;; +139B2;EGYPTIAN HIEROGLYPH-139B2;Lo;0;L;;;;;N;;;;; +139B3;EGYPTIAN HIEROGLYPH-139B3;Lo;0;L;;;;;N;;;;; +139B4;EGYPTIAN HIEROGLYPH-139B4;Lo;0;L;;;;;N;;;;; +139B5;EGYPTIAN HIEROGLYPH-139B5;Lo;0;L;;;;;N;;;;; +139B6;EGYPTIAN HIEROGLYPH-139B6;Lo;0;L;;;;;N;;;;; +139B7;EGYPTIAN HIEROGLYPH-139B7;Lo;0;L;;;;;N;;;;; +139B8;EGYPTIAN HIEROGLYPH-139B8;Lo;0;L;;;;;N;;;;; +139B9;EGYPTIAN HIEROGLYPH-139B9;Lo;0;L;;;;;N;;;;; +139BA;EGYPTIAN HIEROGLYPH-139BA;Lo;0;L;;;;;N;;;;; +139BB;EGYPTIAN HIEROGLYPH-139BB;Lo;0;L;;;;;N;;;;; +139BC;EGYPTIAN HIEROGLYPH-139BC;Lo;0;L;;;;;N;;;;; +139BD;EGYPTIAN HIEROGLYPH-139BD;Lo;0;L;;;;;N;;;;; +139BE;EGYPTIAN HIEROGLYPH-139BE;Lo;0;L;;;;;N;;;;; +139BF;EGYPTIAN HIEROGLYPH-139BF;Lo;0;L;;;;;N;;;;; +139C0;EGYPTIAN HIEROGLYPH-139C0;Lo;0;L;;;;;N;;;;; +139C1;EGYPTIAN HIEROGLYPH-139C1;Lo;0;L;;;;;N;;;;; +139C2;EGYPTIAN HIEROGLYPH-139C2;Lo;0;L;;;;;N;;;;; +139C3;EGYPTIAN HIEROGLYPH-139C3;Lo;0;L;;;;;N;;;;; +139C4;EGYPTIAN HIEROGLYPH-139C4;Lo;0;L;;;;;N;;;;; +139C5;EGYPTIAN HIEROGLYPH-139C5;Lo;0;L;;;;;N;;;;; +139C6;EGYPTIAN HIEROGLYPH-139C6;Lo;0;L;;;;;N;;;;; +139C7;EGYPTIAN HIEROGLYPH-139C7;Lo;0;L;;;;;N;;;;; +139C8;EGYPTIAN HIEROGLYPH-139C8;Lo;0;L;;;;;N;;;;; +139C9;EGYPTIAN HIEROGLYPH-139C9;Lo;0;L;;;;;N;;;;; +139CA;EGYPTIAN HIEROGLYPH-139CA;Lo;0;L;;;;;N;;;;; +139CB;EGYPTIAN HIEROGLYPH-139CB;Lo;0;L;;;;;N;;;;; +139CC;EGYPTIAN HIEROGLYPH-139CC;Lo;0;L;;;;;N;;;;; +139CD;EGYPTIAN HIEROGLYPH-139CD;Lo;0;L;;;;;N;;;;; +139CE;EGYPTIAN HIEROGLYPH-139CE;Lo;0;L;;;;;N;;;;; +139CF;EGYPTIAN HIEROGLYPH-139CF;Lo;0;L;;;;;N;;;;; +139D0;EGYPTIAN HIEROGLYPH-139D0;Lo;0;L;;;;;N;;;;; +139D1;EGYPTIAN HIEROGLYPH-139D1;Lo;0;L;;;;;N;;;;; +139D2;EGYPTIAN HIEROGLYPH-139D2;Lo;0;L;;;;;N;;;;; +139D3;EGYPTIAN HIEROGLYPH-139D3;Lo;0;L;;;;;N;;;;; +139D4;EGYPTIAN HIEROGLYPH-139D4;Lo;0;L;;;;;N;;;;; +139D5;EGYPTIAN HIEROGLYPH-139D5;Lo;0;L;;;;;N;;;;; +139D6;EGYPTIAN HIEROGLYPH-139D6;Lo;0;L;;;;;N;;;;; +139D7;EGYPTIAN HIEROGLYPH-139D7;Lo;0;L;;;;;N;;;;; +139D8;EGYPTIAN HIEROGLYPH-139D8;Lo;0;L;;;;;N;;;;; +139D9;EGYPTIAN HIEROGLYPH-139D9;Lo;0;L;;;;;N;;;;; +139DA;EGYPTIAN HIEROGLYPH-139DA;Lo;0;L;;;;;N;;;;; +139DB;EGYPTIAN HIEROGLYPH-139DB;Lo;0;L;;;;;N;;;;; +139DC;EGYPTIAN HIEROGLYPH-139DC;Lo;0;L;;;;;N;;;;; +139DD;EGYPTIAN HIEROGLYPH-139DD;Lo;0;L;;;;;N;;;;; +139DE;EGYPTIAN HIEROGLYPH-139DE;Lo;0;L;;;;;N;;;;; +139DF;EGYPTIAN HIEROGLYPH-139DF;Lo;0;L;;;;;N;;;;; +139E0;EGYPTIAN HIEROGLYPH-139E0;Lo;0;L;;;;;N;;;;; +139E1;EGYPTIAN HIEROGLYPH-139E1;Lo;0;L;;;;;N;;;;; +139E2;EGYPTIAN HIEROGLYPH-139E2;Lo;0;L;;;;;N;;;;; +139E3;EGYPTIAN HIEROGLYPH-139E3;Lo;0;L;;;;;N;;;;; +139E4;EGYPTIAN HIEROGLYPH-139E4;Lo;0;L;;;;;N;;;;; +139E5;EGYPTIAN HIEROGLYPH-139E5;Lo;0;L;;;;;N;;;;; +139E6;EGYPTIAN HIEROGLYPH-139E6;Lo;0;L;;;;;N;;;;; +139E7;EGYPTIAN HIEROGLYPH-139E7;Lo;0;L;;;;;N;;;;; +139E8;EGYPTIAN HIEROGLYPH-139E8;Lo;0;L;;;;;N;;;;; +139E9;EGYPTIAN HIEROGLYPH-139E9;Lo;0;L;;;;;N;;;;; +139EA;EGYPTIAN HIEROGLYPH-139EA;Lo;0;L;;;;;N;;;;; +139EB;EGYPTIAN HIEROGLYPH-139EB;Lo;0;L;;;;;N;;;;; +139EC;EGYPTIAN HIEROGLYPH-139EC;Lo;0;L;;;;;N;;;;; +139ED;EGYPTIAN HIEROGLYPH-139ED;Lo;0;L;;;;;N;;;;; +139EE;EGYPTIAN HIEROGLYPH-139EE;Lo;0;L;;;;;N;;;;; +139EF;EGYPTIAN HIEROGLYPH-139EF;Lo;0;L;;;;;N;;;;; +139F0;EGYPTIAN HIEROGLYPH-139F0;Lo;0;L;;;;;N;;;;; +139F1;EGYPTIAN HIEROGLYPH-139F1;Lo;0;L;;;;;N;;;;; +139F2;EGYPTIAN HIEROGLYPH-139F2;Lo;0;L;;;;;N;;;;; +139F3;EGYPTIAN HIEROGLYPH-139F3;Lo;0;L;;;;;N;;;;; +139F4;EGYPTIAN HIEROGLYPH-139F4;Lo;0;L;;;;;N;;;;; +139F5;EGYPTIAN HIEROGLYPH-139F5;Lo;0;L;;;;;N;;;;; +139F6;EGYPTIAN HIEROGLYPH-139F6;Lo;0;L;;;;;N;;;;; +139F7;EGYPTIAN HIEROGLYPH-139F7;Lo;0;L;;;;;N;;;;; +139F8;EGYPTIAN HIEROGLYPH-139F8;Lo;0;L;;;;;N;;;;; +139F9;EGYPTIAN HIEROGLYPH-139F9;Lo;0;L;;;;;N;;;;; +139FA;EGYPTIAN HIEROGLYPH-139FA;Lo;0;L;;;;;N;;;;; +139FB;EGYPTIAN HIEROGLYPH-139FB;Lo;0;L;;;;;N;;;;; +139FC;EGYPTIAN HIEROGLYPH-139FC;Lo;0;L;;;;;N;;;;; +139FD;EGYPTIAN HIEROGLYPH-139FD;Lo;0;L;;;;;N;;;;; +139FE;EGYPTIAN HIEROGLYPH-139FE;Lo;0;L;;;;;N;;;;; +139FF;EGYPTIAN HIEROGLYPH-139FF;Lo;0;L;;;;;N;;;;; +13A00;EGYPTIAN HIEROGLYPH-13A00;Lo;0;L;;;;;N;;;;; +13A01;EGYPTIAN HIEROGLYPH-13A01;Lo;0;L;;;;;N;;;;; +13A02;EGYPTIAN HIEROGLYPH-13A02;Lo;0;L;;;;;N;;;;; +13A03;EGYPTIAN HIEROGLYPH-13A03;Lo;0;L;;;;;N;;;;; +13A04;EGYPTIAN HIEROGLYPH-13A04;Lo;0;L;;;;;N;;;;; +13A05;EGYPTIAN HIEROGLYPH-13A05;Lo;0;L;;;;;N;;;;; +13A06;EGYPTIAN HIEROGLYPH-13A06;Lo;0;L;;;;;N;;;;; +13A07;EGYPTIAN HIEROGLYPH-13A07;Lo;0;L;;;;;N;;;;; +13A08;EGYPTIAN HIEROGLYPH-13A08;Lo;0;L;;;;;N;;;;; +13A09;EGYPTIAN HIEROGLYPH-13A09;Lo;0;L;;;;;N;;;;; +13A0A;EGYPTIAN HIEROGLYPH-13A0A;Lo;0;L;;;;;N;;;;; +13A0B;EGYPTIAN HIEROGLYPH-13A0B;Lo;0;L;;;;;N;;;;; +13A0C;EGYPTIAN HIEROGLYPH-13A0C;Lo;0;L;;;;;N;;;;; +13A0D;EGYPTIAN HIEROGLYPH-13A0D;Lo;0;L;;;;;N;;;;; +13A0E;EGYPTIAN HIEROGLYPH-13A0E;Lo;0;L;;;;;N;;;;; +13A0F;EGYPTIAN HIEROGLYPH-13A0F;Lo;0;L;;;;;N;;;;; +13A10;EGYPTIAN HIEROGLYPH-13A10;Lo;0;L;;;;;N;;;;; +13A11;EGYPTIAN HIEROGLYPH-13A11;Lo;0;L;;;;;N;;;;; +13A12;EGYPTIAN HIEROGLYPH-13A12;Lo;0;L;;;;;N;;;;; +13A13;EGYPTIAN HIEROGLYPH-13A13;Lo;0;L;;;;;N;;;;; +13A14;EGYPTIAN HIEROGLYPH-13A14;Lo;0;L;;;;;N;;;;; +13A15;EGYPTIAN HIEROGLYPH-13A15;Lo;0;L;;;;;N;;;;; +13A16;EGYPTIAN HIEROGLYPH-13A16;Lo;0;L;;;;;N;;;;; +13A17;EGYPTIAN HIEROGLYPH-13A17;Lo;0;L;;;;;N;;;;; +13A18;EGYPTIAN HIEROGLYPH-13A18;Lo;0;L;;;;;N;;;;; +13A19;EGYPTIAN HIEROGLYPH-13A19;Lo;0;L;;;;;N;;;;; +13A1A;EGYPTIAN HIEROGLYPH-13A1A;Lo;0;L;;;;;N;;;;; +13A1B;EGYPTIAN HIEROGLYPH-13A1B;Lo;0;L;;;;;N;;;;; +13A1C;EGYPTIAN HIEROGLYPH-13A1C;Lo;0;L;;;;;N;;;;; +13A1D;EGYPTIAN HIEROGLYPH-13A1D;Lo;0;L;;;;;N;;;;; +13A1E;EGYPTIAN HIEROGLYPH-13A1E;Lo;0;L;;;;;N;;;;; +13A1F;EGYPTIAN HIEROGLYPH-13A1F;Lo;0;L;;;;;N;;;;; +13A20;EGYPTIAN HIEROGLYPH-13A20;Lo;0;L;;;;;N;;;;; +13A21;EGYPTIAN HIEROGLYPH-13A21;Lo;0;L;;;;;N;;;;; +13A22;EGYPTIAN HIEROGLYPH-13A22;Lo;0;L;;;;;N;;;;; +13A23;EGYPTIAN HIEROGLYPH-13A23;Lo;0;L;;;;;N;;;;; +13A24;EGYPTIAN HIEROGLYPH-13A24;Lo;0;L;;;;;N;;;;; +13A25;EGYPTIAN HIEROGLYPH-13A25;Lo;0;L;;;;;N;;;;; +13A26;EGYPTIAN HIEROGLYPH-13A26;Lo;0;L;;;;;N;;;;; +13A27;EGYPTIAN HIEROGLYPH-13A27;Lo;0;L;;;;;N;;;;; +13A28;EGYPTIAN HIEROGLYPH-13A28;Lo;0;L;;;;;N;;;;; +13A29;EGYPTIAN HIEROGLYPH-13A29;Lo;0;L;;;;;N;;;;; +13A2A;EGYPTIAN HIEROGLYPH-13A2A;Lo;0;L;;;;;N;;;;; +13A2B;EGYPTIAN HIEROGLYPH-13A2B;Lo;0;L;;;;;N;;;;; +13A2C;EGYPTIAN HIEROGLYPH-13A2C;Lo;0;L;;;;;N;;;;; +13A2D;EGYPTIAN HIEROGLYPH-13A2D;Lo;0;L;;;;;N;;;;; +13A2E;EGYPTIAN HIEROGLYPH-13A2E;Lo;0;L;;;;;N;;;;; +13A2F;EGYPTIAN HIEROGLYPH-13A2F;Lo;0;L;;;;;N;;;;; +13A30;EGYPTIAN HIEROGLYPH-13A30;Lo;0;L;;;;;N;;;;; +13A31;EGYPTIAN HIEROGLYPH-13A31;Lo;0;L;;;;;N;;;;; +13A32;EGYPTIAN HIEROGLYPH-13A32;Lo;0;L;;;;;N;;;;; +13A33;EGYPTIAN HIEROGLYPH-13A33;Lo;0;L;;;;;N;;;;; +13A34;EGYPTIAN HIEROGLYPH-13A34;Lo;0;L;;;;;N;;;;; +13A35;EGYPTIAN HIEROGLYPH-13A35;Lo;0;L;;;;;N;;;;; +13A36;EGYPTIAN HIEROGLYPH-13A36;Lo;0;L;;;;;N;;;;; +13A37;EGYPTIAN HIEROGLYPH-13A37;Lo;0;L;;;;;N;;;;; +13A38;EGYPTIAN HIEROGLYPH-13A38;Lo;0;L;;;;;N;;;;; +13A39;EGYPTIAN HIEROGLYPH-13A39;Lo;0;L;;;;;N;;;;; +13A3A;EGYPTIAN HIEROGLYPH-13A3A;Lo;0;L;;;;;N;;;;; +13A3B;EGYPTIAN HIEROGLYPH-13A3B;Lo;0;L;;;;;N;;;;; +13A3C;EGYPTIAN HIEROGLYPH-13A3C;Lo;0;L;;;;;N;;;;; +13A3D;EGYPTIAN HIEROGLYPH-13A3D;Lo;0;L;;;;;N;;;;; +13A3E;EGYPTIAN HIEROGLYPH-13A3E;Lo;0;L;;;;;N;;;;; +13A3F;EGYPTIAN HIEROGLYPH-13A3F;Lo;0;L;;;;;N;;;;; +13A40;EGYPTIAN HIEROGLYPH-13A40;Lo;0;L;;;;;N;;;;; +13A41;EGYPTIAN HIEROGLYPH-13A41;Lo;0;L;;;;;N;;;;; +13A42;EGYPTIAN HIEROGLYPH-13A42;Lo;0;L;;;;;N;;;;; +13A43;EGYPTIAN HIEROGLYPH-13A43;Lo;0;L;;;;;N;;;;; +13A44;EGYPTIAN HIEROGLYPH-13A44;Lo;0;L;;;;;N;;;;; +13A45;EGYPTIAN HIEROGLYPH-13A45;Lo;0;L;;;;;N;;;;; +13A46;EGYPTIAN HIEROGLYPH-13A46;Lo;0;L;;;;;N;;;;; +13A47;EGYPTIAN HIEROGLYPH-13A47;Lo;0;L;;;;;N;;;;; +13A48;EGYPTIAN HIEROGLYPH-13A48;Lo;0;L;;;;;N;;;;; +13A49;EGYPTIAN HIEROGLYPH-13A49;Lo;0;L;;;;;N;;;;; +13A4A;EGYPTIAN HIEROGLYPH-13A4A;Lo;0;L;;;;;N;;;;; +13A4B;EGYPTIAN HIEROGLYPH-13A4B;Lo;0;L;;;;;N;;;;; +13A4C;EGYPTIAN HIEROGLYPH-13A4C;Lo;0;L;;;;;N;;;;; +13A4D;EGYPTIAN HIEROGLYPH-13A4D;Lo;0;L;;;;;N;;;;; +13A4E;EGYPTIAN HIEROGLYPH-13A4E;Lo;0;L;;;;;N;;;;; +13A4F;EGYPTIAN HIEROGLYPH-13A4F;Lo;0;L;;;;;N;;;;; +13A50;EGYPTIAN HIEROGLYPH-13A50;Lo;0;L;;;;;N;;;;; +13A51;EGYPTIAN HIEROGLYPH-13A51;Lo;0;L;;;;;N;;;;; +13A52;EGYPTIAN HIEROGLYPH-13A52;Lo;0;L;;;;;N;;;;; +13A53;EGYPTIAN HIEROGLYPH-13A53;Lo;0;L;;;;;N;;;;; +13A54;EGYPTIAN HIEROGLYPH-13A54;Lo;0;L;;;;;N;;;;; +13A55;EGYPTIAN HIEROGLYPH-13A55;Lo;0;L;;;;;N;;;;; +13A56;EGYPTIAN HIEROGLYPH-13A56;Lo;0;L;;;;;N;;;;; +13A57;EGYPTIAN HIEROGLYPH-13A57;Lo;0;L;;;;;N;;;;; +13A58;EGYPTIAN HIEROGLYPH-13A58;Lo;0;L;;;;;N;;;;; +13A59;EGYPTIAN HIEROGLYPH-13A59;Lo;0;L;;;;;N;;;;; +13A5A;EGYPTIAN HIEROGLYPH-13A5A;Lo;0;L;;;;;N;;;;; +13A5B;EGYPTIAN HIEROGLYPH-13A5B;Lo;0;L;;;;;N;;;;; +13A5C;EGYPTIAN HIEROGLYPH-13A5C;Lo;0;L;;;;;N;;;;; +13A5D;EGYPTIAN HIEROGLYPH-13A5D;Lo;0;L;;;;;N;;;;; +13A5E;EGYPTIAN HIEROGLYPH-13A5E;Lo;0;L;;;;;N;;;;; +13A5F;EGYPTIAN HIEROGLYPH-13A5F;Lo;0;L;;;;;N;;;;; +13A60;EGYPTIAN HIEROGLYPH-13A60;Lo;0;L;;;;;N;;;;; +13A61;EGYPTIAN HIEROGLYPH-13A61;Lo;0;L;;;;;N;;;;; +13A62;EGYPTIAN HIEROGLYPH-13A62;Lo;0;L;;;;;N;;;;; +13A63;EGYPTIAN HIEROGLYPH-13A63;Lo;0;L;;;;;N;;;;; +13A64;EGYPTIAN HIEROGLYPH-13A64;Lo;0;L;;;;;N;;;;; +13A65;EGYPTIAN HIEROGLYPH-13A65;Lo;0;L;;;;;N;;;;; +13A66;EGYPTIAN HIEROGLYPH-13A66;Lo;0;L;;;;;N;;;;; +13A67;EGYPTIAN HIEROGLYPH-13A67;Lo;0;L;;;;;N;;;;; +13A68;EGYPTIAN HIEROGLYPH-13A68;Lo;0;L;;;;;N;;;;; +13A69;EGYPTIAN HIEROGLYPH-13A69;Lo;0;L;;;;;N;;;;; +13A6A;EGYPTIAN HIEROGLYPH-13A6A;Lo;0;L;;;;;N;;;;; +13A6B;EGYPTIAN HIEROGLYPH-13A6B;Lo;0;L;;;;;N;;;;; +13A6C;EGYPTIAN HIEROGLYPH-13A6C;Lo;0;L;;;;;N;;;;; +13A6D;EGYPTIAN HIEROGLYPH-13A6D;Lo;0;L;;;;;N;;;;; +13A6E;EGYPTIAN HIEROGLYPH-13A6E;Lo;0;L;;;;;N;;;;; +13A6F;EGYPTIAN HIEROGLYPH-13A6F;Lo;0;L;;;;;N;;;;; +13A70;EGYPTIAN HIEROGLYPH-13A70;Lo;0;L;;;;;N;;;;; +13A71;EGYPTIAN HIEROGLYPH-13A71;Lo;0;L;;;;;N;;;;; +13A72;EGYPTIAN HIEROGLYPH-13A72;Lo;0;L;;;;;N;;;;; +13A73;EGYPTIAN HIEROGLYPH-13A73;Lo;0;L;;;;;N;;;;; +13A74;EGYPTIAN HIEROGLYPH-13A74;Lo;0;L;;;;;N;;;;; +13A75;EGYPTIAN HIEROGLYPH-13A75;Lo;0;L;;;;;N;;;;; +13A76;EGYPTIAN HIEROGLYPH-13A76;Lo;0;L;;;;;N;;;;; +13A77;EGYPTIAN HIEROGLYPH-13A77;Lo;0;L;;;;;N;;;;; +13A78;EGYPTIAN HIEROGLYPH-13A78;Lo;0;L;;;;;N;;;;; +13A79;EGYPTIAN HIEROGLYPH-13A79;Lo;0;L;;;;;N;;;;; +13A7A;EGYPTIAN HIEROGLYPH-13A7A;Lo;0;L;;;;;N;;;;; +13A7B;EGYPTIAN HIEROGLYPH-13A7B;Lo;0;L;;;;;N;;;;; +13A7C;EGYPTIAN HIEROGLYPH-13A7C;Lo;0;L;;;;;N;;;;; +13A7D;EGYPTIAN HIEROGLYPH-13A7D;Lo;0;L;;;;;N;;;;; +13A7E;EGYPTIAN HIEROGLYPH-13A7E;Lo;0;L;;;;;N;;;;; +13A7F;EGYPTIAN HIEROGLYPH-13A7F;Lo;0;L;;;;;N;;;;; +13A80;EGYPTIAN HIEROGLYPH-13A80;Lo;0;L;;;;;N;;;;; +13A81;EGYPTIAN HIEROGLYPH-13A81;Lo;0;L;;;;;N;;;;; +13A82;EGYPTIAN HIEROGLYPH-13A82;Lo;0;L;;;;;N;;;;; +13A83;EGYPTIAN HIEROGLYPH-13A83;Lo;0;L;;;;;N;;;;; +13A84;EGYPTIAN HIEROGLYPH-13A84;Lo;0;L;;;;;N;;;;; +13A85;EGYPTIAN HIEROGLYPH-13A85;Lo;0;L;;;;;N;;;;; +13A86;EGYPTIAN HIEROGLYPH-13A86;Lo;0;L;;;;;N;;;;; +13A87;EGYPTIAN HIEROGLYPH-13A87;Lo;0;L;;;;;N;;;;; +13A88;EGYPTIAN HIEROGLYPH-13A88;Lo;0;L;;;;;N;;;;; +13A89;EGYPTIAN HIEROGLYPH-13A89;Lo;0;L;;;;;N;;;;; +13A8A;EGYPTIAN HIEROGLYPH-13A8A;Lo;0;L;;;;;N;;;;; +13A8B;EGYPTIAN HIEROGLYPH-13A8B;Lo;0;L;;;;;N;;;;; +13A8C;EGYPTIAN HIEROGLYPH-13A8C;Lo;0;L;;;;;N;;;;; +13A8D;EGYPTIAN HIEROGLYPH-13A8D;Lo;0;L;;;;;N;;;;; +13A8E;EGYPTIAN HIEROGLYPH-13A8E;Lo;0;L;;;;;N;;;;; +13A8F;EGYPTIAN HIEROGLYPH-13A8F;Lo;0;L;;;;;N;;;;; +13A90;EGYPTIAN HIEROGLYPH-13A90;Lo;0;L;;;;;N;;;;; +13A91;EGYPTIAN HIEROGLYPH-13A91;Lo;0;L;;;;;N;;;;; +13A92;EGYPTIAN HIEROGLYPH-13A92;Lo;0;L;;;;;N;;;;; +13A93;EGYPTIAN HIEROGLYPH-13A93;Lo;0;L;;;;;N;;;;; +13A94;EGYPTIAN HIEROGLYPH-13A94;Lo;0;L;;;;;N;;;;; +13A95;EGYPTIAN HIEROGLYPH-13A95;Lo;0;L;;;;;N;;;;; +13A96;EGYPTIAN HIEROGLYPH-13A96;Lo;0;L;;;;;N;;;;; +13A97;EGYPTIAN HIEROGLYPH-13A97;Lo;0;L;;;;;N;;;;; +13A98;EGYPTIAN HIEROGLYPH-13A98;Lo;0;L;;;;;N;;;;; +13A99;EGYPTIAN HIEROGLYPH-13A99;Lo;0;L;;;;;N;;;;; +13A9A;EGYPTIAN HIEROGLYPH-13A9A;Lo;0;L;;;;;N;;;;; +13A9B;EGYPTIAN HIEROGLYPH-13A9B;Lo;0;L;;;;;N;;;;; +13A9C;EGYPTIAN HIEROGLYPH-13A9C;Lo;0;L;;;;;N;;;;; +13A9D;EGYPTIAN HIEROGLYPH-13A9D;Lo;0;L;;;;;N;;;;; +13A9E;EGYPTIAN HIEROGLYPH-13A9E;Lo;0;L;;;;;N;;;;; +13A9F;EGYPTIAN HIEROGLYPH-13A9F;Lo;0;L;;;;;N;;;;; +13AA0;EGYPTIAN HIEROGLYPH-13AA0;Lo;0;L;;;;;N;;;;; +13AA1;EGYPTIAN HIEROGLYPH-13AA1;Lo;0;L;;;;;N;;;;; +13AA2;EGYPTIAN HIEROGLYPH-13AA2;Lo;0;L;;;;;N;;;;; +13AA3;EGYPTIAN HIEROGLYPH-13AA3;Lo;0;L;;;;;N;;;;; +13AA4;EGYPTIAN HIEROGLYPH-13AA4;Lo;0;L;;;;;N;;;;; +13AA5;EGYPTIAN HIEROGLYPH-13AA5;Lo;0;L;;;;;N;;;;; +13AA6;EGYPTIAN HIEROGLYPH-13AA6;Lo;0;L;;;;;N;;;;; +13AA7;EGYPTIAN HIEROGLYPH-13AA7;Lo;0;L;;;;;N;;;;; +13AA8;EGYPTIAN HIEROGLYPH-13AA8;Lo;0;L;;;;;N;;;;; +13AA9;EGYPTIAN HIEROGLYPH-13AA9;Lo;0;L;;;;;N;;;;; +13AAA;EGYPTIAN HIEROGLYPH-13AAA;Lo;0;L;;;;;N;;;;; +13AAB;EGYPTIAN HIEROGLYPH-13AAB;Lo;0;L;;;;;N;;;;; +13AAC;EGYPTIAN HIEROGLYPH-13AAC;Lo;0;L;;;;;N;;;;; +13AAD;EGYPTIAN HIEROGLYPH-13AAD;Lo;0;L;;;;;N;;;;; +13AAE;EGYPTIAN HIEROGLYPH-13AAE;Lo;0;L;;;;;N;;;;; +13AAF;EGYPTIAN HIEROGLYPH-13AAF;Lo;0;L;;;;;N;;;;; +13AB0;EGYPTIAN HIEROGLYPH-13AB0;Lo;0;L;;;;;N;;;;; +13AB1;EGYPTIAN HIEROGLYPH-13AB1;Lo;0;L;;;;;N;;;;; +13AB2;EGYPTIAN HIEROGLYPH-13AB2;Lo;0;L;;;;;N;;;;; +13AB3;EGYPTIAN HIEROGLYPH-13AB3;Lo;0;L;;;;;N;;;;; +13AB4;EGYPTIAN HIEROGLYPH-13AB4;Lo;0;L;;;;;N;;;;; +13AB5;EGYPTIAN HIEROGLYPH-13AB5;Lo;0;L;;;;;N;;;;; +13AB6;EGYPTIAN HIEROGLYPH-13AB6;Lo;0;L;;;;;N;;;;; +13AB7;EGYPTIAN HIEROGLYPH-13AB7;Lo;0;L;;;;;N;;;;; +13AB8;EGYPTIAN HIEROGLYPH-13AB8;Lo;0;L;;;;;N;;;;; +13AB9;EGYPTIAN HIEROGLYPH-13AB9;Lo;0;L;;;;;N;;;;; +13ABA;EGYPTIAN HIEROGLYPH-13ABA;Lo;0;L;;;;;N;;;;; +13ABB;EGYPTIAN HIEROGLYPH-13ABB;Lo;0;L;;;;;N;;;;; +13ABC;EGYPTIAN HIEROGLYPH-13ABC;Lo;0;L;;;;;N;;;;; +13ABD;EGYPTIAN HIEROGLYPH-13ABD;Lo;0;L;;;;;N;;;;; +13ABE;EGYPTIAN HIEROGLYPH-13ABE;Lo;0;L;;;;;N;;;;; +13ABF;EGYPTIAN HIEROGLYPH-13ABF;Lo;0;L;;;;;N;;;;; +13AC0;EGYPTIAN HIEROGLYPH-13AC0;Lo;0;L;;;;;N;;;;; +13AC1;EGYPTIAN HIEROGLYPH-13AC1;Lo;0;L;;;;;N;;;;; +13AC2;EGYPTIAN HIEROGLYPH-13AC2;Lo;0;L;;;;;N;;;;; +13AC3;EGYPTIAN HIEROGLYPH-13AC3;Lo;0;L;;;;;N;;;;; +13AC4;EGYPTIAN HIEROGLYPH-13AC4;Lo;0;L;;;;;N;;;;; +13AC5;EGYPTIAN HIEROGLYPH-13AC5;Lo;0;L;;;;;N;;;;; +13AC6;EGYPTIAN HIEROGLYPH-13AC6;Lo;0;L;;;;;N;;;;; +13AC7;EGYPTIAN HIEROGLYPH-13AC7;Lo;0;L;;;;;N;;;;; +13AC8;EGYPTIAN HIEROGLYPH-13AC8;Lo;0;L;;;;;N;;;;; +13AC9;EGYPTIAN HIEROGLYPH-13AC9;Lo;0;L;;;;;N;;;;; +13ACA;EGYPTIAN HIEROGLYPH-13ACA;Lo;0;L;;;;;N;;;;; +13ACB;EGYPTIAN HIEROGLYPH-13ACB;Lo;0;L;;;;;N;;;;; +13ACC;EGYPTIAN HIEROGLYPH-13ACC;Lo;0;L;;;;;N;;;;; +13ACD;EGYPTIAN HIEROGLYPH-13ACD;Lo;0;L;;;;;N;;;;; +13ACE;EGYPTIAN HIEROGLYPH-13ACE;Lo;0;L;;;;;N;;;;; +13ACF;EGYPTIAN HIEROGLYPH-13ACF;Lo;0;L;;;;;N;;;;; +13AD0;EGYPTIAN HIEROGLYPH-13AD0;Lo;0;L;;;;;N;;;;; +13AD1;EGYPTIAN HIEROGLYPH-13AD1;Lo;0;L;;;;;N;;;;; +13AD2;EGYPTIAN HIEROGLYPH-13AD2;Lo;0;L;;;;;N;;;;; +13AD3;EGYPTIAN HIEROGLYPH-13AD3;Lo;0;L;;;;;N;;;;; +13AD4;EGYPTIAN HIEROGLYPH-13AD4;Lo;0;L;;;;;N;;;;; +13AD5;EGYPTIAN HIEROGLYPH-13AD5;Lo;0;L;;;;;N;;;;; +13AD6;EGYPTIAN HIEROGLYPH-13AD6;Lo;0;L;;;;;N;;;;; +13AD7;EGYPTIAN HIEROGLYPH-13AD7;Lo;0;L;;;;;N;;;;; +13AD8;EGYPTIAN HIEROGLYPH-13AD8;Lo;0;L;;;;;N;;;;; +13AD9;EGYPTIAN HIEROGLYPH-13AD9;Lo;0;L;;;;;N;;;;; +13ADA;EGYPTIAN HIEROGLYPH-13ADA;Lo;0;L;;;;;N;;;;; +13ADB;EGYPTIAN HIEROGLYPH-13ADB;Lo;0;L;;;;;N;;;;; +13ADC;EGYPTIAN HIEROGLYPH-13ADC;Lo;0;L;;;;;N;;;;; +13ADD;EGYPTIAN HIEROGLYPH-13ADD;Lo;0;L;;;;;N;;;;; +13ADE;EGYPTIAN HIEROGLYPH-13ADE;Lo;0;L;;;;;N;;;;; +13ADF;EGYPTIAN HIEROGLYPH-13ADF;Lo;0;L;;;;;N;;;;; +13AE0;EGYPTIAN HIEROGLYPH-13AE0;Lo;0;L;;;;;N;;;;; +13AE1;EGYPTIAN HIEROGLYPH-13AE1;Lo;0;L;;;;;N;;;;; +13AE2;EGYPTIAN HIEROGLYPH-13AE2;Lo;0;L;;;;;N;;;;; +13AE3;EGYPTIAN HIEROGLYPH-13AE3;Lo;0;L;;;;;N;;;;; +13AE4;EGYPTIAN HIEROGLYPH-13AE4;Lo;0;L;;;;;N;;;;; +13AE5;EGYPTIAN HIEROGLYPH-13AE5;Lo;0;L;;;;;N;;;;; +13AE6;EGYPTIAN HIEROGLYPH-13AE6;Lo;0;L;;;;;N;;;;; +13AE7;EGYPTIAN HIEROGLYPH-13AE7;Lo;0;L;;;;;N;;;;; +13AE8;EGYPTIAN HIEROGLYPH-13AE8;Lo;0;L;;;;;N;;;;; +13AE9;EGYPTIAN HIEROGLYPH-13AE9;Lo;0;L;;;;;N;;;;; +13AEA;EGYPTIAN HIEROGLYPH-13AEA;Lo;0;L;;;;;N;;;;; +13AEB;EGYPTIAN HIEROGLYPH-13AEB;Lo;0;L;;;;;N;;;;; +13AEC;EGYPTIAN HIEROGLYPH-13AEC;Lo;0;L;;;;;N;;;;; +13AED;EGYPTIAN HIEROGLYPH-13AED;Lo;0;L;;;;;N;;;;; +13AEE;EGYPTIAN HIEROGLYPH-13AEE;Lo;0;L;;;;;N;;;;; +13AEF;EGYPTIAN HIEROGLYPH-13AEF;Lo;0;L;;;;;N;;;;; +13AF0;EGYPTIAN HIEROGLYPH-13AF0;Lo;0;L;;;;;N;;;;; +13AF1;EGYPTIAN HIEROGLYPH-13AF1;Lo;0;L;;;;;N;;;;; +13AF2;EGYPTIAN HIEROGLYPH-13AF2;Lo;0;L;;;;;N;;;;; +13AF3;EGYPTIAN HIEROGLYPH-13AF3;Lo;0;L;;;;;N;;;;; +13AF4;EGYPTIAN HIEROGLYPH-13AF4;Lo;0;L;;;;;N;;;;; +13AF5;EGYPTIAN HIEROGLYPH-13AF5;Lo;0;L;;;;;N;;;;; +13AF6;EGYPTIAN HIEROGLYPH-13AF6;Lo;0;L;;;;;N;;;;; +13AF7;EGYPTIAN HIEROGLYPH-13AF7;Lo;0;L;;;;;N;;;;; +13AF8;EGYPTIAN HIEROGLYPH-13AF8;Lo;0;L;;;;;N;;;;; +13AF9;EGYPTIAN HIEROGLYPH-13AF9;Lo;0;L;;;;;N;;;;; +13AFA;EGYPTIAN HIEROGLYPH-13AFA;Lo;0;L;;;;;N;;;;; +13AFB;EGYPTIAN HIEROGLYPH-13AFB;Lo;0;L;;;;;N;;;;; +13AFC;EGYPTIAN HIEROGLYPH-13AFC;Lo;0;L;;;;;N;;;;; +13AFD;EGYPTIAN HIEROGLYPH-13AFD;Lo;0;L;;;;;N;;;;; +13AFE;EGYPTIAN HIEROGLYPH-13AFE;Lo;0;L;;;;;N;;;;; +13AFF;EGYPTIAN HIEROGLYPH-13AFF;Lo;0;L;;;;;N;;;;; +13B00;EGYPTIAN HIEROGLYPH-13B00;Lo;0;L;;;;;N;;;;; +13B01;EGYPTIAN HIEROGLYPH-13B01;Lo;0;L;;;;;N;;;;; +13B02;EGYPTIAN HIEROGLYPH-13B02;Lo;0;L;;;;;N;;;;; +13B03;EGYPTIAN HIEROGLYPH-13B03;Lo;0;L;;;;;N;;;;; +13B04;EGYPTIAN HIEROGLYPH-13B04;Lo;0;L;;;;;N;;;;; +13B05;EGYPTIAN HIEROGLYPH-13B05;Lo;0;L;;;;;N;;;;; +13B06;EGYPTIAN HIEROGLYPH-13B06;Lo;0;L;;;;;N;;;;; +13B07;EGYPTIAN HIEROGLYPH-13B07;Lo;0;L;;;;;N;;;;; +13B08;EGYPTIAN HIEROGLYPH-13B08;Lo;0;L;;;;;N;;;;; +13B09;EGYPTIAN HIEROGLYPH-13B09;Lo;0;L;;;;;N;;;;; +13B0A;EGYPTIAN HIEROGLYPH-13B0A;Lo;0;L;;;;;N;;;;; +13B0B;EGYPTIAN HIEROGLYPH-13B0B;Lo;0;L;;;;;N;;;;; +13B0C;EGYPTIAN HIEROGLYPH-13B0C;Lo;0;L;;;;;N;;;;; +13B0D;EGYPTIAN HIEROGLYPH-13B0D;Lo;0;L;;;;;N;;;;; +13B0E;EGYPTIAN HIEROGLYPH-13B0E;Lo;0;L;;;;;N;;;;; +13B0F;EGYPTIAN HIEROGLYPH-13B0F;Lo;0;L;;;;;N;;;;; +13B10;EGYPTIAN HIEROGLYPH-13B10;Lo;0;L;;;;;N;;;;; +13B11;EGYPTIAN HIEROGLYPH-13B11;Lo;0;L;;;;;N;;;;; +13B12;EGYPTIAN HIEROGLYPH-13B12;Lo;0;L;;;;;N;;;;; +13B13;EGYPTIAN HIEROGLYPH-13B13;Lo;0;L;;;;;N;;;;; +13B14;EGYPTIAN HIEROGLYPH-13B14;Lo;0;L;;;;;N;;;;; +13B15;EGYPTIAN HIEROGLYPH-13B15;Lo;0;L;;;;;N;;;;; +13B16;EGYPTIAN HIEROGLYPH-13B16;Lo;0;L;;;;;N;;;;; +13B17;EGYPTIAN HIEROGLYPH-13B17;Lo;0;L;;;;;N;;;;; +13B18;EGYPTIAN HIEROGLYPH-13B18;Lo;0;L;;;;;N;;;;; +13B19;EGYPTIAN HIEROGLYPH-13B19;Lo;0;L;;;;;N;;;;; +13B1A;EGYPTIAN HIEROGLYPH-13B1A;Lo;0;L;;;;;N;;;;; +13B1B;EGYPTIAN HIEROGLYPH-13B1B;Lo;0;L;;;;;N;;;;; +13B1C;EGYPTIAN HIEROGLYPH-13B1C;Lo;0;L;;;;;N;;;;; +13B1D;EGYPTIAN HIEROGLYPH-13B1D;Lo;0;L;;;;;N;;;;; +13B1E;EGYPTIAN HIEROGLYPH-13B1E;Lo;0;L;;;;;N;;;;; +13B1F;EGYPTIAN HIEROGLYPH-13B1F;Lo;0;L;;;;;N;;;;; +13B20;EGYPTIAN HIEROGLYPH-13B20;Lo;0;L;;;;;N;;;;; +13B21;EGYPTIAN HIEROGLYPH-13B21;Lo;0;L;;;;;N;;;;; +13B22;EGYPTIAN HIEROGLYPH-13B22;Lo;0;L;;;;;N;;;;; +13B23;EGYPTIAN HIEROGLYPH-13B23;Lo;0;L;;;;;N;;;;; +13B24;EGYPTIAN HIEROGLYPH-13B24;Lo;0;L;;;;;N;;;;; +13B25;EGYPTIAN HIEROGLYPH-13B25;Lo;0;L;;;;;N;;;;; +13B26;EGYPTIAN HIEROGLYPH-13B26;Lo;0;L;;;;;N;;;;; +13B27;EGYPTIAN HIEROGLYPH-13B27;Lo;0;L;;;;;N;;;;; +13B28;EGYPTIAN HIEROGLYPH-13B28;Lo;0;L;;;;;N;;;;; +13B29;EGYPTIAN HIEROGLYPH-13B29;Lo;0;L;;;;;N;;;;; +13B2A;EGYPTIAN HIEROGLYPH-13B2A;Lo;0;L;;;;;N;;;;; +13B2B;EGYPTIAN HIEROGLYPH-13B2B;Lo;0;L;;;;;N;;;;; +13B2C;EGYPTIAN HIEROGLYPH-13B2C;Lo;0;L;;;;;N;;;;; +13B2D;EGYPTIAN HIEROGLYPH-13B2D;Lo;0;L;;;;;N;;;;; +13B2E;EGYPTIAN HIEROGLYPH-13B2E;Lo;0;L;;;;;N;;;;; +13B2F;EGYPTIAN HIEROGLYPH-13B2F;Lo;0;L;;;;;N;;;;; +13B30;EGYPTIAN HIEROGLYPH-13B30;Lo;0;L;;;;;N;;;;; +13B31;EGYPTIAN HIEROGLYPH-13B31;Lo;0;L;;;;;N;;;;; +13B32;EGYPTIAN HIEROGLYPH-13B32;Lo;0;L;;;;;N;;;;; +13B33;EGYPTIAN HIEROGLYPH-13B33;Lo;0;L;;;;;N;;;;; +13B34;EGYPTIAN HIEROGLYPH-13B34;Lo;0;L;;;;;N;;;;; +13B35;EGYPTIAN HIEROGLYPH-13B35;Lo;0;L;;;;;N;;;;; +13B36;EGYPTIAN HIEROGLYPH-13B36;Lo;0;L;;;;;N;;;;; +13B37;EGYPTIAN HIEROGLYPH-13B37;Lo;0;L;;;;;N;;;;; +13B38;EGYPTIAN HIEROGLYPH-13B38;Lo;0;L;;;;;N;;;;; +13B39;EGYPTIAN HIEROGLYPH-13B39;Lo;0;L;;;;;N;;;;; +13B3A;EGYPTIAN HIEROGLYPH-13B3A;Lo;0;L;;;;;N;;;;; +13B3B;EGYPTIAN HIEROGLYPH-13B3B;Lo;0;L;;;;;N;;;;; +13B3C;EGYPTIAN HIEROGLYPH-13B3C;Lo;0;L;;;;;N;;;;; +13B3D;EGYPTIAN HIEROGLYPH-13B3D;Lo;0;L;;;;;N;;;;; +13B3E;EGYPTIAN HIEROGLYPH-13B3E;Lo;0;L;;;;;N;;;;; +13B3F;EGYPTIAN HIEROGLYPH-13B3F;Lo;0;L;;;;;N;;;;; +13B40;EGYPTIAN HIEROGLYPH-13B40;Lo;0;L;;;;;N;;;;; +13B41;EGYPTIAN HIEROGLYPH-13B41;Lo;0;L;;;;;N;;;;; +13B42;EGYPTIAN HIEROGLYPH-13B42;Lo;0;L;;;;;N;;;;; +13B43;EGYPTIAN HIEROGLYPH-13B43;Lo;0;L;;;;;N;;;;; +13B44;EGYPTIAN HIEROGLYPH-13B44;Lo;0;L;;;;;N;;;;; +13B45;EGYPTIAN HIEROGLYPH-13B45;Lo;0;L;;;;;N;;;;; +13B46;EGYPTIAN HIEROGLYPH-13B46;Lo;0;L;;;;;N;;;;; +13B47;EGYPTIAN HIEROGLYPH-13B47;Lo;0;L;;;;;N;;;;; +13B48;EGYPTIAN HIEROGLYPH-13B48;Lo;0;L;;;;;N;;;;; +13B49;EGYPTIAN HIEROGLYPH-13B49;Lo;0;L;;;;;N;;;;; +13B4A;EGYPTIAN HIEROGLYPH-13B4A;Lo;0;L;;;;;N;;;;; +13B4B;EGYPTIAN HIEROGLYPH-13B4B;Lo;0;L;;;;;N;;;;; +13B4C;EGYPTIAN HIEROGLYPH-13B4C;Lo;0;L;;;;;N;;;;; +13B4D;EGYPTIAN HIEROGLYPH-13B4D;Lo;0;L;;;;;N;;;;; +13B4E;EGYPTIAN HIEROGLYPH-13B4E;Lo;0;L;;;;;N;;;;; +13B4F;EGYPTIAN HIEROGLYPH-13B4F;Lo;0;L;;;;;N;;;;; +13B50;EGYPTIAN HIEROGLYPH-13B50;Lo;0;L;;;;;N;;;;; +13B51;EGYPTIAN HIEROGLYPH-13B51;Lo;0;L;;;;;N;;;;; +13B52;EGYPTIAN HIEROGLYPH-13B52;Lo;0;L;;;;;N;;;;; +13B53;EGYPTIAN HIEROGLYPH-13B53;Lo;0;L;;;;;N;;;;; +13B54;EGYPTIAN HIEROGLYPH-13B54;Lo;0;L;;;;;N;;;;; +13B55;EGYPTIAN HIEROGLYPH-13B55;Lo;0;L;;;;;N;;;;; +13B56;EGYPTIAN HIEROGLYPH-13B56;Lo;0;L;;;;;N;;;;; +13B57;EGYPTIAN HIEROGLYPH-13B57;Lo;0;L;;;;;N;;;;; +13B58;EGYPTIAN HIEROGLYPH-13B58;Lo;0;L;;;;;N;;;;; +13B59;EGYPTIAN HIEROGLYPH-13B59;Lo;0;L;;;;;N;;;;; +13B5A;EGYPTIAN HIEROGLYPH-13B5A;Lo;0;L;;;;;N;;;;; +13B5B;EGYPTIAN HIEROGLYPH-13B5B;Lo;0;L;;;;;N;;;;; +13B5C;EGYPTIAN HIEROGLYPH-13B5C;Lo;0;L;;;;;N;;;;; +13B5D;EGYPTIAN HIEROGLYPH-13B5D;Lo;0;L;;;;;N;;;;; +13B5E;EGYPTIAN HIEROGLYPH-13B5E;Lo;0;L;;;;;N;;;;; +13B5F;EGYPTIAN HIEROGLYPH-13B5F;Lo;0;L;;;;;N;;;;; +13B60;EGYPTIAN HIEROGLYPH-13B60;Lo;0;L;;;;;N;;;;; +13B61;EGYPTIAN HIEROGLYPH-13B61;Lo;0;L;;;;;N;;;;; +13B62;EGYPTIAN HIEROGLYPH-13B62;Lo;0;L;;;;;N;;;;; +13B63;EGYPTIAN HIEROGLYPH-13B63;Lo;0;L;;;;;N;;;;; +13B64;EGYPTIAN HIEROGLYPH-13B64;Lo;0;L;;;;;N;;;;; +13B65;EGYPTIAN HIEROGLYPH-13B65;Lo;0;L;;;;;N;;;;; +13B66;EGYPTIAN HIEROGLYPH-13B66;Lo;0;L;;;;;N;;;;; +13B67;EGYPTIAN HIEROGLYPH-13B67;Lo;0;L;;;;;N;;;;; +13B68;EGYPTIAN HIEROGLYPH-13B68;Lo;0;L;;;;;N;;;;; +13B69;EGYPTIAN HIEROGLYPH-13B69;Lo;0;L;;;;;N;;;;; +13B6A;EGYPTIAN HIEROGLYPH-13B6A;Lo;0;L;;;;;N;;;;; +13B6B;EGYPTIAN HIEROGLYPH-13B6B;Lo;0;L;;;;;N;;;;; +13B6C;EGYPTIAN HIEROGLYPH-13B6C;Lo;0;L;;;;;N;;;;; +13B6D;EGYPTIAN HIEROGLYPH-13B6D;Lo;0;L;;;;;N;;;;; +13B6E;EGYPTIAN HIEROGLYPH-13B6E;Lo;0;L;;;;;N;;;;; +13B6F;EGYPTIAN HIEROGLYPH-13B6F;Lo;0;L;;;;;N;;;;; +13B70;EGYPTIAN HIEROGLYPH-13B70;Lo;0;L;;;;;N;;;;; +13B71;EGYPTIAN HIEROGLYPH-13B71;Lo;0;L;;;;;N;;;;; +13B72;EGYPTIAN HIEROGLYPH-13B72;Lo;0;L;;;;;N;;;;; +13B73;EGYPTIAN HIEROGLYPH-13B73;Lo;0;L;;;;;N;;;;; +13B74;EGYPTIAN HIEROGLYPH-13B74;Lo;0;L;;;;;N;;;;; +13B75;EGYPTIAN HIEROGLYPH-13B75;Lo;0;L;;;;;N;;;;; +13B76;EGYPTIAN HIEROGLYPH-13B76;Lo;0;L;;;;;N;;;;; +13B77;EGYPTIAN HIEROGLYPH-13B77;Lo;0;L;;;;;N;;;;; +13B78;EGYPTIAN HIEROGLYPH-13B78;Lo;0;L;;;;;N;;;;; +13B79;EGYPTIAN HIEROGLYPH-13B79;Lo;0;L;;;;;N;;;;; +13B7A;EGYPTIAN HIEROGLYPH-13B7A;Lo;0;L;;;;;N;;;;; +13B7B;EGYPTIAN HIEROGLYPH-13B7B;Lo;0;L;;;;;N;;;;; +13B7C;EGYPTIAN HIEROGLYPH-13B7C;Lo;0;L;;;;;N;;;;; +13B7D;EGYPTIAN HIEROGLYPH-13B7D;Lo;0;L;;;;;N;;;;; +13B7E;EGYPTIAN HIEROGLYPH-13B7E;Lo;0;L;;;;;N;;;;; +13B7F;EGYPTIAN HIEROGLYPH-13B7F;Lo;0;L;;;;;N;;;;; +13B80;EGYPTIAN HIEROGLYPH-13B80;Lo;0;L;;;;;N;;;;; +13B81;EGYPTIAN HIEROGLYPH-13B81;Lo;0;L;;;;;N;;;;; +13B82;EGYPTIAN HIEROGLYPH-13B82;Lo;0;L;;;;;N;;;;; +13B83;EGYPTIAN HIEROGLYPH-13B83;Lo;0;L;;;;;N;;;;; +13B84;EGYPTIAN HIEROGLYPH-13B84;Lo;0;L;;;;;N;;;;; +13B85;EGYPTIAN HIEROGLYPH-13B85;Lo;0;L;;;;;N;;;;; +13B86;EGYPTIAN HIEROGLYPH-13B86;Lo;0;L;;;;;N;;;;; +13B87;EGYPTIAN HIEROGLYPH-13B87;Lo;0;L;;;;;N;;;;; +13B88;EGYPTIAN HIEROGLYPH-13B88;Lo;0;L;;;;;N;;;;; +13B89;EGYPTIAN HIEROGLYPH-13B89;Lo;0;L;;;;;N;;;;; +13B8A;EGYPTIAN HIEROGLYPH-13B8A;Lo;0;L;;;;;N;;;;; +13B8B;EGYPTIAN HIEROGLYPH-13B8B;Lo;0;L;;;;;N;;;;; +13B8C;EGYPTIAN HIEROGLYPH-13B8C;Lo;0;L;;;;;N;;;;; +13B8D;EGYPTIAN HIEROGLYPH-13B8D;Lo;0;L;;;;;N;;;;; +13B8E;EGYPTIAN HIEROGLYPH-13B8E;Lo;0;L;;;;;N;;;;; +13B8F;EGYPTIAN HIEROGLYPH-13B8F;Lo;0;L;;;;;N;;;;; +13B90;EGYPTIAN HIEROGLYPH-13B90;Lo;0;L;;;;;N;;;;; +13B91;EGYPTIAN HIEROGLYPH-13B91;Lo;0;L;;;;;N;;;;; +13B92;EGYPTIAN HIEROGLYPH-13B92;Lo;0;L;;;;;N;;;;; +13B93;EGYPTIAN HIEROGLYPH-13B93;Lo;0;L;;;;;N;;;;; +13B94;EGYPTIAN HIEROGLYPH-13B94;Lo;0;L;;;;;N;;;;; +13B95;EGYPTIAN HIEROGLYPH-13B95;Lo;0;L;;;;;N;;;;; +13B96;EGYPTIAN HIEROGLYPH-13B96;Lo;0;L;;;;;N;;;;; +13B97;EGYPTIAN HIEROGLYPH-13B97;Lo;0;L;;;;;N;;;;; +13B98;EGYPTIAN HIEROGLYPH-13B98;Lo;0;L;;;;;N;;;;; +13B99;EGYPTIAN HIEROGLYPH-13B99;Lo;0;L;;;;;N;;;;; +13B9A;EGYPTIAN HIEROGLYPH-13B9A;Lo;0;L;;;;;N;;;;; +13B9B;EGYPTIAN HIEROGLYPH-13B9B;Lo;0;L;;;;;N;;;;; +13B9C;EGYPTIAN HIEROGLYPH-13B9C;Lo;0;L;;;;;N;;;;; +13B9D;EGYPTIAN HIEROGLYPH-13B9D;Lo;0;L;;;;;N;;;;; +13B9E;EGYPTIAN HIEROGLYPH-13B9E;Lo;0;L;;;;;N;;;;; +13B9F;EGYPTIAN HIEROGLYPH-13B9F;Lo;0;L;;;;;N;;;;; +13BA0;EGYPTIAN HIEROGLYPH-13BA0;Lo;0;L;;;;;N;;;;; +13BA1;EGYPTIAN HIEROGLYPH-13BA1;Lo;0;L;;;;;N;;;;; +13BA2;EGYPTIAN HIEROGLYPH-13BA2;Lo;0;L;;;;;N;;;;; +13BA3;EGYPTIAN HIEROGLYPH-13BA3;Lo;0;L;;;;;N;;;;; +13BA4;EGYPTIAN HIEROGLYPH-13BA4;Lo;0;L;;;;;N;;;;; +13BA5;EGYPTIAN HIEROGLYPH-13BA5;Lo;0;L;;;;;N;;;;; +13BA6;EGYPTIAN HIEROGLYPH-13BA6;Lo;0;L;;;;;N;;;;; +13BA7;EGYPTIAN HIEROGLYPH-13BA7;Lo;0;L;;;;;N;;;;; +13BA8;EGYPTIAN HIEROGLYPH-13BA8;Lo;0;L;;;;;N;;;;; +13BA9;EGYPTIAN HIEROGLYPH-13BA9;Lo;0;L;;;;;N;;;;; +13BAA;EGYPTIAN HIEROGLYPH-13BAA;Lo;0;L;;;;;N;;;;; +13BAB;EGYPTIAN HIEROGLYPH-13BAB;Lo;0;L;;;;;N;;;;; +13BAC;EGYPTIAN HIEROGLYPH-13BAC;Lo;0;L;;;;;N;;;;; +13BAD;EGYPTIAN HIEROGLYPH-13BAD;Lo;0;L;;;;;N;;;;; +13BAE;EGYPTIAN HIEROGLYPH-13BAE;Lo;0;L;;;;;N;;;;; +13BAF;EGYPTIAN HIEROGLYPH-13BAF;Lo;0;L;;;;;N;;;;; +13BB0;EGYPTIAN HIEROGLYPH-13BB0;Lo;0;L;;;;;N;;;;; +13BB1;EGYPTIAN HIEROGLYPH-13BB1;Lo;0;L;;;;;N;;;;; +13BB2;EGYPTIAN HIEROGLYPH-13BB2;Lo;0;L;;;;;N;;;;; +13BB3;EGYPTIAN HIEROGLYPH-13BB3;Lo;0;L;;;;;N;;;;; +13BB4;EGYPTIAN HIEROGLYPH-13BB4;Lo;0;L;;;;;N;;;;; +13BB5;EGYPTIAN HIEROGLYPH-13BB5;Lo;0;L;;;;;N;;;;; +13BB6;EGYPTIAN HIEROGLYPH-13BB6;Lo;0;L;;;;;N;;;;; +13BB7;EGYPTIAN HIEROGLYPH-13BB7;Lo;0;L;;;;;N;;;;; +13BB8;EGYPTIAN HIEROGLYPH-13BB8;Lo;0;L;;;;;N;;;;; +13BB9;EGYPTIAN HIEROGLYPH-13BB9;Lo;0;L;;;;;N;;;;; +13BBA;EGYPTIAN HIEROGLYPH-13BBA;Lo;0;L;;;;;N;;;;; +13BBB;EGYPTIAN HIEROGLYPH-13BBB;Lo;0;L;;;;;N;;;;; +13BBC;EGYPTIAN HIEROGLYPH-13BBC;Lo;0;L;;;;;N;;;;; +13BBD;EGYPTIAN HIEROGLYPH-13BBD;Lo;0;L;;;;;N;;;;; +13BBE;EGYPTIAN HIEROGLYPH-13BBE;Lo;0;L;;;;;N;;;;; +13BBF;EGYPTIAN HIEROGLYPH-13BBF;Lo;0;L;;;;;N;;;;; +13BC0;EGYPTIAN HIEROGLYPH-13BC0;Lo;0;L;;;;;N;;;;; +13BC1;EGYPTIAN HIEROGLYPH-13BC1;Lo;0;L;;;;;N;;;;; +13BC2;EGYPTIAN HIEROGLYPH-13BC2;Lo;0;L;;;;;N;;;;; +13BC3;EGYPTIAN HIEROGLYPH-13BC3;Lo;0;L;;;;;N;;;;; +13BC4;EGYPTIAN HIEROGLYPH-13BC4;Lo;0;L;;;;;N;;;;; +13BC5;EGYPTIAN HIEROGLYPH-13BC5;Lo;0;L;;;;;N;;;;; +13BC6;EGYPTIAN HIEROGLYPH-13BC6;Lo;0;L;;;;;N;;;;; +13BC7;EGYPTIAN HIEROGLYPH-13BC7;Lo;0;L;;;;;N;;;;; +13BC8;EGYPTIAN HIEROGLYPH-13BC8;Lo;0;L;;;;;N;;;;; +13BC9;EGYPTIAN HIEROGLYPH-13BC9;Lo;0;L;;;;;N;;;;; +13BCA;EGYPTIAN HIEROGLYPH-13BCA;Lo;0;L;;;;;N;;;;; +13BCB;EGYPTIAN HIEROGLYPH-13BCB;Lo;0;L;;;;;N;;;;; +13BCC;EGYPTIAN HIEROGLYPH-13BCC;Lo;0;L;;;;;N;;;;; +13BCD;EGYPTIAN HIEROGLYPH-13BCD;Lo;0;L;;;;;N;;;;; +13BCE;EGYPTIAN HIEROGLYPH-13BCE;Lo;0;L;;;;;N;;;;; +13BCF;EGYPTIAN HIEROGLYPH-13BCF;Lo;0;L;;;;;N;;;;; +13BD0;EGYPTIAN HIEROGLYPH-13BD0;Lo;0;L;;;;;N;;;;; +13BD1;EGYPTIAN HIEROGLYPH-13BD1;Lo;0;L;;;;;N;;;;; +13BD2;EGYPTIAN HIEROGLYPH-13BD2;Lo;0;L;;;;;N;;;;; +13BD3;EGYPTIAN HIEROGLYPH-13BD3;Lo;0;L;;;;;N;;;;; +13BD4;EGYPTIAN HIEROGLYPH-13BD4;Lo;0;L;;;;;N;;;;; +13BD5;EGYPTIAN HIEROGLYPH-13BD5;Lo;0;L;;;;;N;;;;; +13BD6;EGYPTIAN HIEROGLYPH-13BD6;Lo;0;L;;;;;N;;;;; +13BD7;EGYPTIAN HIEROGLYPH-13BD7;Lo;0;L;;;;;N;;;;; +13BD8;EGYPTIAN HIEROGLYPH-13BD8;Lo;0;L;;;;;N;;;;; +13BD9;EGYPTIAN HIEROGLYPH-13BD9;Lo;0;L;;;;;N;;;;; +13BDA;EGYPTIAN HIEROGLYPH-13BDA;Lo;0;L;;;;;N;;;;; +13BDB;EGYPTIAN HIEROGLYPH-13BDB;Lo;0;L;;;;;N;;;;; +13BDC;EGYPTIAN HIEROGLYPH-13BDC;Lo;0;L;;;;;N;;;;; +13BDD;EGYPTIAN HIEROGLYPH-13BDD;Lo;0;L;;;;;N;;;;; +13BDE;EGYPTIAN HIEROGLYPH-13BDE;Lo;0;L;;;;;N;;;;; +13BDF;EGYPTIAN HIEROGLYPH-13BDF;Lo;0;L;;;;;N;;;;; +13BE0;EGYPTIAN HIEROGLYPH-13BE0;Lo;0;L;;;;;N;;;;; +13BE1;EGYPTIAN HIEROGLYPH-13BE1;Lo;0;L;;;;;N;;;;; +13BE2;EGYPTIAN HIEROGLYPH-13BE2;Lo;0;L;;;;;N;;;;; +13BE3;EGYPTIAN HIEROGLYPH-13BE3;Lo;0;L;;;;;N;;;;; +13BE4;EGYPTIAN HIEROGLYPH-13BE4;Lo;0;L;;;;;N;;;;; +13BE5;EGYPTIAN HIEROGLYPH-13BE5;Lo;0;L;;;;;N;;;;; +13BE6;EGYPTIAN HIEROGLYPH-13BE6;Lo;0;L;;;;;N;;;;; +13BE7;EGYPTIAN HIEROGLYPH-13BE7;Lo;0;L;;;;;N;;;;; +13BE8;EGYPTIAN HIEROGLYPH-13BE8;Lo;0;L;;;;;N;;;;; +13BE9;EGYPTIAN HIEROGLYPH-13BE9;Lo;0;L;;;;;N;;;;; +13BEA;EGYPTIAN HIEROGLYPH-13BEA;Lo;0;L;;;;;N;;;;; +13BEB;EGYPTIAN HIEROGLYPH-13BEB;Lo;0;L;;;;;N;;;;; +13BEC;EGYPTIAN HIEROGLYPH-13BEC;Lo;0;L;;;;;N;;;;; +13BED;EGYPTIAN HIEROGLYPH-13BED;Lo;0;L;;;;;N;;;;; +13BEE;EGYPTIAN HIEROGLYPH-13BEE;Lo;0;L;;;;;N;;;;; +13BEF;EGYPTIAN HIEROGLYPH-13BEF;Lo;0;L;;;;;N;;;;; +13BF0;EGYPTIAN HIEROGLYPH-13BF0;Lo;0;L;;;;;N;;;;; +13BF1;EGYPTIAN HIEROGLYPH-13BF1;Lo;0;L;;;;;N;;;;; +13BF2;EGYPTIAN HIEROGLYPH-13BF2;Lo;0;L;;;;;N;;;;; +13BF3;EGYPTIAN HIEROGLYPH-13BF3;Lo;0;L;;;;;N;;;;; +13BF4;EGYPTIAN HIEROGLYPH-13BF4;Lo;0;L;;;;;N;;;;; +13BF5;EGYPTIAN HIEROGLYPH-13BF5;Lo;0;L;;;;;N;;;;; +13BF6;EGYPTIAN HIEROGLYPH-13BF6;Lo;0;L;;;;;N;;;;; +13BF7;EGYPTIAN HIEROGLYPH-13BF7;Lo;0;L;;;;;N;;;;; +13BF8;EGYPTIAN HIEROGLYPH-13BF8;Lo;0;L;;;;;N;;;;; +13BF9;EGYPTIAN HIEROGLYPH-13BF9;Lo;0;L;;;;;N;;;;; +13BFA;EGYPTIAN HIEROGLYPH-13BFA;Lo;0;L;;;;;N;;;;; +13BFB;EGYPTIAN HIEROGLYPH-13BFB;Lo;0;L;;;;;N;;;;; +13BFC;EGYPTIAN HIEROGLYPH-13BFC;Lo;0;L;;;;;N;;;;; +13BFD;EGYPTIAN HIEROGLYPH-13BFD;Lo;0;L;;;;;N;;;;; +13BFE;EGYPTIAN HIEROGLYPH-13BFE;Lo;0;L;;;;;N;;;;; +13BFF;EGYPTIAN HIEROGLYPH-13BFF;Lo;0;L;;;;;N;;;;; +13C00;EGYPTIAN HIEROGLYPH-13C00;Lo;0;L;;;;;N;;;;; +13C01;EGYPTIAN HIEROGLYPH-13C01;Lo;0;L;;;;;N;;;;; +13C02;EGYPTIAN HIEROGLYPH-13C02;Lo;0;L;;;;;N;;;;; +13C03;EGYPTIAN HIEROGLYPH-13C03;Lo;0;L;;;;;N;;;;; +13C04;EGYPTIAN HIEROGLYPH-13C04;Lo;0;L;;;;;N;;;;; +13C05;EGYPTIAN HIEROGLYPH-13C05;Lo;0;L;;;;;N;;;;; +13C06;EGYPTIAN HIEROGLYPH-13C06;Lo;0;L;;;;;N;;;;; +13C07;EGYPTIAN HIEROGLYPH-13C07;Lo;0;L;;;;;N;;;;; +13C08;EGYPTIAN HIEROGLYPH-13C08;Lo;0;L;;;;;N;;;;; +13C09;EGYPTIAN HIEROGLYPH-13C09;Lo;0;L;;;;;N;;;;; +13C0A;EGYPTIAN HIEROGLYPH-13C0A;Lo;0;L;;;;;N;;;;; +13C0B;EGYPTIAN HIEROGLYPH-13C0B;Lo;0;L;;;;;N;;;;; +13C0C;EGYPTIAN HIEROGLYPH-13C0C;Lo;0;L;;;;;N;;;;; +13C0D;EGYPTIAN HIEROGLYPH-13C0D;Lo;0;L;;;;;N;;;;; +13C0E;EGYPTIAN HIEROGLYPH-13C0E;Lo;0;L;;;;;N;;;;; +13C0F;EGYPTIAN HIEROGLYPH-13C0F;Lo;0;L;;;;;N;;;;; +13C10;EGYPTIAN HIEROGLYPH-13C10;Lo;0;L;;;;;N;;;;; +13C11;EGYPTIAN HIEROGLYPH-13C11;Lo;0;L;;;;;N;;;;; +13C12;EGYPTIAN HIEROGLYPH-13C12;Lo;0;L;;;;;N;;;;; +13C13;EGYPTIAN HIEROGLYPH-13C13;Lo;0;L;;;;;N;;;;; +13C14;EGYPTIAN HIEROGLYPH-13C14;Lo;0;L;;;;;N;;;;; +13C15;EGYPTIAN HIEROGLYPH-13C15;Lo;0;L;;;;;N;;;;; +13C16;EGYPTIAN HIEROGLYPH-13C16;Lo;0;L;;;;;N;;;;; +13C17;EGYPTIAN HIEROGLYPH-13C17;Lo;0;L;;;;;N;;;;; +13C18;EGYPTIAN HIEROGLYPH-13C18;Lo;0;L;;;;;N;;;;; +13C19;EGYPTIAN HIEROGLYPH-13C19;Lo;0;L;;;;;N;;;;; +13C1A;EGYPTIAN HIEROGLYPH-13C1A;Lo;0;L;;;;;N;;;;; +13C1B;EGYPTIAN HIEROGLYPH-13C1B;Lo;0;L;;;;;N;;;;; +13C1C;EGYPTIAN HIEROGLYPH-13C1C;Lo;0;L;;;;;N;;;;; +13C1D;EGYPTIAN HIEROGLYPH-13C1D;Lo;0;L;;;;;N;;;;; +13C1E;EGYPTIAN HIEROGLYPH-13C1E;Lo;0;L;;;;;N;;;;; +13C1F;EGYPTIAN HIEROGLYPH-13C1F;Lo;0;L;;;;;N;;;;; +13C20;EGYPTIAN HIEROGLYPH-13C20;Lo;0;L;;;;;N;;;;; +13C21;EGYPTIAN HIEROGLYPH-13C21;Lo;0;L;;;;;N;;;;; +13C22;EGYPTIAN HIEROGLYPH-13C22;Lo;0;L;;;;;N;;;;; +13C23;EGYPTIAN HIEROGLYPH-13C23;Lo;0;L;;;;;N;;;;; +13C24;EGYPTIAN HIEROGLYPH-13C24;Lo;0;L;;;;;N;;;;; +13C25;EGYPTIAN HIEROGLYPH-13C25;Lo;0;L;;;;;N;;;;; +13C26;EGYPTIAN HIEROGLYPH-13C26;Lo;0;L;;;;;N;;;;; +13C27;EGYPTIAN HIEROGLYPH-13C27;Lo;0;L;;;;;N;;;;; +13C28;EGYPTIAN HIEROGLYPH-13C28;Lo;0;L;;;;;N;;;;; +13C29;EGYPTIAN HIEROGLYPH-13C29;Lo;0;L;;;;;N;;;;; +13C2A;EGYPTIAN HIEROGLYPH-13C2A;Lo;0;L;;;;;N;;;;; +13C2B;EGYPTIAN HIEROGLYPH-13C2B;Lo;0;L;;;;;N;;;;; +13C2C;EGYPTIAN HIEROGLYPH-13C2C;Lo;0;L;;;;;N;;;;; +13C2D;EGYPTIAN HIEROGLYPH-13C2D;Lo;0;L;;;;;N;;;;; +13C2E;EGYPTIAN HIEROGLYPH-13C2E;Lo;0;L;;;;;N;;;;; +13C2F;EGYPTIAN HIEROGLYPH-13C2F;Lo;0;L;;;;;N;;;;; +13C30;EGYPTIAN HIEROGLYPH-13C30;Lo;0;L;;;;;N;;;;; +13C31;EGYPTIAN HIEROGLYPH-13C31;Lo;0;L;;;;;N;;;;; +13C32;EGYPTIAN HIEROGLYPH-13C32;Lo;0;L;;;;;N;;;;; +13C33;EGYPTIAN HIEROGLYPH-13C33;Lo;0;L;;;;;N;;;;; +13C34;EGYPTIAN HIEROGLYPH-13C34;Lo;0;L;;;;;N;;;;; +13C35;EGYPTIAN HIEROGLYPH-13C35;Lo;0;L;;;;;N;;;;; +13C36;EGYPTIAN HIEROGLYPH-13C36;Lo;0;L;;;;;N;;;;; +13C37;EGYPTIAN HIEROGLYPH-13C37;Lo;0;L;;;;;N;;;;; +13C38;EGYPTIAN HIEROGLYPH-13C38;Lo;0;L;;;;;N;;;;; +13C39;EGYPTIAN HIEROGLYPH-13C39;Lo;0;L;;;;;N;;;;; +13C3A;EGYPTIAN HIEROGLYPH-13C3A;Lo;0;L;;;;;N;;;;; +13C3B;EGYPTIAN HIEROGLYPH-13C3B;Lo;0;L;;;;;N;;;;; +13C3C;EGYPTIAN HIEROGLYPH-13C3C;Lo;0;L;;;;;N;;;;; +13C3D;EGYPTIAN HIEROGLYPH-13C3D;Lo;0;L;;;;;N;;;;; +13C3E;EGYPTIAN HIEROGLYPH-13C3E;Lo;0;L;;;;;N;;;;; +13C3F;EGYPTIAN HIEROGLYPH-13C3F;Lo;0;L;;;;;N;;;;; +13C40;EGYPTIAN HIEROGLYPH-13C40;Lo;0;L;;;;;N;;;;; +13C41;EGYPTIAN HIEROGLYPH-13C41;Lo;0;L;;;;;N;;;;; +13C42;EGYPTIAN HIEROGLYPH-13C42;Lo;0;L;;;;;N;;;;; +13C43;EGYPTIAN HIEROGLYPH-13C43;Lo;0;L;;;;;N;;;;; +13C44;EGYPTIAN HIEROGLYPH-13C44;Lo;0;L;;;;;N;;;;; +13C45;EGYPTIAN HIEROGLYPH-13C45;Lo;0;L;;;;;N;;;;; +13C46;EGYPTIAN HIEROGLYPH-13C46;Lo;0;L;;;;;N;;;;; +13C47;EGYPTIAN HIEROGLYPH-13C47;Lo;0;L;;;;;N;;;;; +13C48;EGYPTIAN HIEROGLYPH-13C48;Lo;0;L;;;;;N;;;;; +13C49;EGYPTIAN HIEROGLYPH-13C49;Lo;0;L;;;;;N;;;;; +13C4A;EGYPTIAN HIEROGLYPH-13C4A;Lo;0;L;;;;;N;;;;; +13C4B;EGYPTIAN HIEROGLYPH-13C4B;Lo;0;L;;;;;N;;;;; +13C4C;EGYPTIAN HIEROGLYPH-13C4C;Lo;0;L;;;;;N;;;;; +13C4D;EGYPTIAN HIEROGLYPH-13C4D;Lo;0;L;;;;;N;;;;; +13C4E;EGYPTIAN HIEROGLYPH-13C4E;Lo;0;L;;;;;N;;;;; +13C4F;EGYPTIAN HIEROGLYPH-13C4F;Lo;0;L;;;;;N;;;;; +13C50;EGYPTIAN HIEROGLYPH-13C50;Lo;0;L;;;;;N;;;;; +13C51;EGYPTIAN HIEROGLYPH-13C51;Lo;0;L;;;;;N;;;;; +13C52;EGYPTIAN HIEROGLYPH-13C52;Lo;0;L;;;;;N;;;;; +13C53;EGYPTIAN HIEROGLYPH-13C53;Lo;0;L;;;;;N;;;;; +13C54;EGYPTIAN HIEROGLYPH-13C54;Lo;0;L;;;;;N;;;;; +13C55;EGYPTIAN HIEROGLYPH-13C55;Lo;0;L;;;;;N;;;;; +13C56;EGYPTIAN HIEROGLYPH-13C56;Lo;0;L;;;;;N;;;;; +13C57;EGYPTIAN HIEROGLYPH-13C57;Lo;0;L;;;;;N;;;;; +13C58;EGYPTIAN HIEROGLYPH-13C58;Lo;0;L;;;;;N;;;;; +13C59;EGYPTIAN HIEROGLYPH-13C59;Lo;0;L;;;;;N;;;;; +13C5A;EGYPTIAN HIEROGLYPH-13C5A;Lo;0;L;;;;;N;;;;; +13C5B;EGYPTIAN HIEROGLYPH-13C5B;Lo;0;L;;;;;N;;;;; +13C5C;EGYPTIAN HIEROGLYPH-13C5C;Lo;0;L;;;;;N;;;;; +13C5D;EGYPTIAN HIEROGLYPH-13C5D;Lo;0;L;;;;;N;;;;; +13C5E;EGYPTIAN HIEROGLYPH-13C5E;Lo;0;L;;;;;N;;;;; +13C5F;EGYPTIAN HIEROGLYPH-13C5F;Lo;0;L;;;;;N;;;;; +13C60;EGYPTIAN HIEROGLYPH-13C60;Lo;0;L;;;;;N;;;;; +13C61;EGYPTIAN HIEROGLYPH-13C61;Lo;0;L;;;;;N;;;;; +13C62;EGYPTIAN HIEROGLYPH-13C62;Lo;0;L;;;;;N;;;;; +13C63;EGYPTIAN HIEROGLYPH-13C63;Lo;0;L;;;;;N;;;;; +13C64;EGYPTIAN HIEROGLYPH-13C64;Lo;0;L;;;;;N;;;;; +13C65;EGYPTIAN HIEROGLYPH-13C65;Lo;0;L;;;;;N;;;;; +13C66;EGYPTIAN HIEROGLYPH-13C66;Lo;0;L;;;;;N;;;;; +13C67;EGYPTIAN HIEROGLYPH-13C67;Lo;0;L;;;;;N;;;;; +13C68;EGYPTIAN HIEROGLYPH-13C68;Lo;0;L;;;;;N;;;;; +13C69;EGYPTIAN HIEROGLYPH-13C69;Lo;0;L;;;;;N;;;;; +13C6A;EGYPTIAN HIEROGLYPH-13C6A;Lo;0;L;;;;;N;;;;; +13C6B;EGYPTIAN HIEROGLYPH-13C6B;Lo;0;L;;;;;N;;;;; +13C6C;EGYPTIAN HIEROGLYPH-13C6C;Lo;0;L;;;;;N;;;;; +13C6D;EGYPTIAN HIEROGLYPH-13C6D;Lo;0;L;;;;;N;;;;; +13C6E;EGYPTIAN HIEROGLYPH-13C6E;Lo;0;L;;;;;N;;;;; +13C6F;EGYPTIAN HIEROGLYPH-13C6F;Lo;0;L;;;;;N;;;;; +13C70;EGYPTIAN HIEROGLYPH-13C70;Lo;0;L;;;;;N;;;;; +13C71;EGYPTIAN HIEROGLYPH-13C71;Lo;0;L;;;;;N;;;;; +13C72;EGYPTIAN HIEROGLYPH-13C72;Lo;0;L;;;;;N;;;;; +13C73;EGYPTIAN HIEROGLYPH-13C73;Lo;0;L;;;;;N;;;;; +13C74;EGYPTIAN HIEROGLYPH-13C74;Lo;0;L;;;;;N;;;;; +13C75;EGYPTIAN HIEROGLYPH-13C75;Lo;0;L;;;;;N;;;;; +13C76;EGYPTIAN HIEROGLYPH-13C76;Lo;0;L;;;;;N;;;;; +13C77;EGYPTIAN HIEROGLYPH-13C77;Lo;0;L;;;;;N;;;;; +13C78;EGYPTIAN HIEROGLYPH-13C78;Lo;0;L;;;;;N;;;;; +13C79;EGYPTIAN HIEROGLYPH-13C79;Lo;0;L;;;;;N;;;;; +13C7A;EGYPTIAN HIEROGLYPH-13C7A;Lo;0;L;;;;;N;;;;; +13C7B;EGYPTIAN HIEROGLYPH-13C7B;Lo;0;L;;;;;N;;;;; +13C7C;EGYPTIAN HIEROGLYPH-13C7C;Lo;0;L;;;;;N;;;;; +13C7D;EGYPTIAN HIEROGLYPH-13C7D;Lo;0;L;;;;;N;;;;; +13C7E;EGYPTIAN HIEROGLYPH-13C7E;Lo;0;L;;;;;N;;;;; +13C7F;EGYPTIAN HIEROGLYPH-13C7F;Lo;0;L;;;;;N;;;;; +13C80;EGYPTIAN HIEROGLYPH-13C80;Lo;0;L;;;;;N;;;;; +13C81;EGYPTIAN HIEROGLYPH-13C81;Lo;0;L;;;;;N;;;;; +13C82;EGYPTIAN HIEROGLYPH-13C82;Lo;0;L;;;;;N;;;;; +13C83;EGYPTIAN HIEROGLYPH-13C83;Lo;0;L;;;;;N;;;;; +13C84;EGYPTIAN HIEROGLYPH-13C84;Lo;0;L;;;;;N;;;;; +13C85;EGYPTIAN HIEROGLYPH-13C85;Lo;0;L;;;;;N;;;;; +13C86;EGYPTIAN HIEROGLYPH-13C86;Lo;0;L;;;;;N;;;;; +13C87;EGYPTIAN HIEROGLYPH-13C87;Lo;0;L;;;;;N;;;;; +13C88;EGYPTIAN HIEROGLYPH-13C88;Lo;0;L;;;;;N;;;;; +13C89;EGYPTIAN HIEROGLYPH-13C89;Lo;0;L;;;;;N;;;;; +13C8A;EGYPTIAN HIEROGLYPH-13C8A;Lo;0;L;;;;;N;;;;; +13C8B;EGYPTIAN HIEROGLYPH-13C8B;Lo;0;L;;;;;N;;;;; +13C8C;EGYPTIAN HIEROGLYPH-13C8C;Lo;0;L;;;;;N;;;;; +13C8D;EGYPTIAN HIEROGLYPH-13C8D;Lo;0;L;;;;;N;;;;; +13C8E;EGYPTIAN HIEROGLYPH-13C8E;Lo;0;L;;;;;N;;;;; +13C8F;EGYPTIAN HIEROGLYPH-13C8F;Lo;0;L;;;;;N;;;;; +13C90;EGYPTIAN HIEROGLYPH-13C90;Lo;0;L;;;;;N;;;;; +13C91;EGYPTIAN HIEROGLYPH-13C91;Lo;0;L;;;;;N;;;;; +13C92;EGYPTIAN HIEROGLYPH-13C92;Lo;0;L;;;;;N;;;;; +13C93;EGYPTIAN HIEROGLYPH-13C93;Lo;0;L;;;;;N;;;;; +13C94;EGYPTIAN HIEROGLYPH-13C94;Lo;0;L;;;;;N;;;;; +13C95;EGYPTIAN HIEROGLYPH-13C95;Lo;0;L;;;;;N;;;;; +13C96;EGYPTIAN HIEROGLYPH-13C96;Lo;0;L;;;;;N;;;;; +13C97;EGYPTIAN HIEROGLYPH-13C97;Lo;0;L;;;;;N;;;;; +13C98;EGYPTIAN HIEROGLYPH-13C98;Lo;0;L;;;;;N;;;;; +13C99;EGYPTIAN HIEROGLYPH-13C99;Lo;0;L;;;;;N;;;;; +13C9A;EGYPTIAN HIEROGLYPH-13C9A;Lo;0;L;;;;;N;;;;; +13C9B;EGYPTIAN HIEROGLYPH-13C9B;Lo;0;L;;;;;N;;;;; +13C9C;EGYPTIAN HIEROGLYPH-13C9C;Lo;0;L;;;;;N;;;;; +13C9D;EGYPTIAN HIEROGLYPH-13C9D;Lo;0;L;;;;;N;;;;; +13C9E;EGYPTIAN HIEROGLYPH-13C9E;Lo;0;L;;;;;N;;;;; +13C9F;EGYPTIAN HIEROGLYPH-13C9F;Lo;0;L;;;;;N;;;;; +13CA0;EGYPTIAN HIEROGLYPH-13CA0;Lo;0;L;;;;;N;;;;; +13CA1;EGYPTIAN HIEROGLYPH-13CA1;Lo;0;L;;;;;N;;;;; +13CA2;EGYPTIAN HIEROGLYPH-13CA2;Lo;0;L;;;;;N;;;;; +13CA3;EGYPTIAN HIEROGLYPH-13CA3;Lo;0;L;;;;;N;;;;; +13CA4;EGYPTIAN HIEROGLYPH-13CA4;Lo;0;L;;;;;N;;;;; +13CA5;EGYPTIAN HIEROGLYPH-13CA5;Lo;0;L;;;;;N;;;;; +13CA6;EGYPTIAN HIEROGLYPH-13CA6;Lo;0;L;;;;;N;;;;; +13CA7;EGYPTIAN HIEROGLYPH-13CA7;Lo;0;L;;;;;N;;;;; +13CA8;EGYPTIAN HIEROGLYPH-13CA8;Lo;0;L;;;;;N;;;;; +13CA9;EGYPTIAN HIEROGLYPH-13CA9;Lo;0;L;;;;;N;;;;; +13CAA;EGYPTIAN HIEROGLYPH-13CAA;Lo;0;L;;;;;N;;;;; +13CAB;EGYPTIAN HIEROGLYPH-13CAB;Lo;0;L;;;;;N;;;;; +13CAC;EGYPTIAN HIEROGLYPH-13CAC;Lo;0;L;;;;;N;;;;; +13CAD;EGYPTIAN HIEROGLYPH-13CAD;Lo;0;L;;;;;N;;;;; +13CAE;EGYPTIAN HIEROGLYPH-13CAE;Lo;0;L;;;;;N;;;;; +13CAF;EGYPTIAN HIEROGLYPH-13CAF;Lo;0;L;;;;;N;;;;; +13CB0;EGYPTIAN HIEROGLYPH-13CB0;Lo;0;L;;;;;N;;;;; +13CB1;EGYPTIAN HIEROGLYPH-13CB1;Lo;0;L;;;;;N;;;;; +13CB2;EGYPTIAN HIEROGLYPH-13CB2;Lo;0;L;;;;;N;;;;; +13CB3;EGYPTIAN HIEROGLYPH-13CB3;Lo;0;L;;;;;N;;;;; +13CB4;EGYPTIAN HIEROGLYPH-13CB4;Lo;0;L;;;;;N;;;;; +13CB5;EGYPTIAN HIEROGLYPH-13CB5;Lo;0;L;;;;;N;;;;; +13CB6;EGYPTIAN HIEROGLYPH-13CB6;Lo;0;L;;;;;N;;;;; +13CB7;EGYPTIAN HIEROGLYPH-13CB7;Lo;0;L;;;;;N;;;;; +13CB8;EGYPTIAN HIEROGLYPH-13CB8;Lo;0;L;;;;;N;;;;; +13CB9;EGYPTIAN HIEROGLYPH-13CB9;Lo;0;L;;;;;N;;;;; +13CBA;EGYPTIAN HIEROGLYPH-13CBA;Lo;0;L;;;;;N;;;;; +13CBB;EGYPTIAN HIEROGLYPH-13CBB;Lo;0;L;;;;;N;;;;; +13CBC;EGYPTIAN HIEROGLYPH-13CBC;Lo;0;L;;;;;N;;;;; +13CBD;EGYPTIAN HIEROGLYPH-13CBD;Lo;0;L;;;;;N;;;;; +13CBE;EGYPTIAN HIEROGLYPH-13CBE;Lo;0;L;;;;;N;;;;; +13CBF;EGYPTIAN HIEROGLYPH-13CBF;Lo;0;L;;;;;N;;;;; +13CC0;EGYPTIAN HIEROGLYPH-13CC0;Lo;0;L;;;;;N;;;;; +13CC1;EGYPTIAN HIEROGLYPH-13CC1;Lo;0;L;;;;;N;;;;; +13CC2;EGYPTIAN HIEROGLYPH-13CC2;Lo;0;L;;;;;N;;;;; +13CC3;EGYPTIAN HIEROGLYPH-13CC3;Lo;0;L;;;;;N;;;;; +13CC4;EGYPTIAN HIEROGLYPH-13CC4;Lo;0;L;;;;;N;;;;; +13CC5;EGYPTIAN HIEROGLYPH-13CC5;Lo;0;L;;;;;N;;;;; +13CC6;EGYPTIAN HIEROGLYPH-13CC6;Lo;0;L;;;;;N;;;;; +13CC7;EGYPTIAN HIEROGLYPH-13CC7;Lo;0;L;;;;;N;;;;; +13CC8;EGYPTIAN HIEROGLYPH-13CC8;Lo;0;L;;;;;N;;;;; +13CC9;EGYPTIAN HIEROGLYPH-13CC9;Lo;0;L;;;;;N;;;;; +13CCA;EGYPTIAN HIEROGLYPH-13CCA;Lo;0;L;;;;;N;;;;; +13CCB;EGYPTIAN HIEROGLYPH-13CCB;Lo;0;L;;;;;N;;;;; +13CCC;EGYPTIAN HIEROGLYPH-13CCC;Lo;0;L;;;;;N;;;;; +13CCD;EGYPTIAN HIEROGLYPH-13CCD;Lo;0;L;;;;;N;;;;; +13CCE;EGYPTIAN HIEROGLYPH-13CCE;Lo;0;L;;;;;N;;;;; +13CCF;EGYPTIAN HIEROGLYPH-13CCF;Lo;0;L;;;;;N;;;;; +13CD0;EGYPTIAN HIEROGLYPH-13CD0;Lo;0;L;;;;;N;;;;; +13CD1;EGYPTIAN HIEROGLYPH-13CD1;Lo;0;L;;;;;N;;;;; +13CD2;EGYPTIAN HIEROGLYPH-13CD2;Lo;0;L;;;;;N;;;;; +13CD3;EGYPTIAN HIEROGLYPH-13CD3;Lo;0;L;;;;;N;;;;; +13CD4;EGYPTIAN HIEROGLYPH-13CD4;Lo;0;L;;;;;N;;;;; +13CD5;EGYPTIAN HIEROGLYPH-13CD5;Lo;0;L;;;;;N;;;;; +13CD6;EGYPTIAN HIEROGLYPH-13CD6;Lo;0;L;;;;;N;;;;; +13CD7;EGYPTIAN HIEROGLYPH-13CD7;Lo;0;L;;;;;N;;;;; +13CD8;EGYPTIAN HIEROGLYPH-13CD8;Lo;0;L;;;;;N;;;;; +13CD9;EGYPTIAN HIEROGLYPH-13CD9;Lo;0;L;;;;;N;;;;; +13CDA;EGYPTIAN HIEROGLYPH-13CDA;Lo;0;L;;;;;N;;;;; +13CDB;EGYPTIAN HIEROGLYPH-13CDB;Lo;0;L;;;;;N;;;;; +13CDC;EGYPTIAN HIEROGLYPH-13CDC;Lo;0;L;;;;;N;;;;; +13CDD;EGYPTIAN HIEROGLYPH-13CDD;Lo;0;L;;;;;N;;;;; +13CDE;EGYPTIAN HIEROGLYPH-13CDE;Lo;0;L;;;;;N;;;;; +13CDF;EGYPTIAN HIEROGLYPH-13CDF;Lo;0;L;;;;;N;;;;; +13CE0;EGYPTIAN HIEROGLYPH-13CE0;Lo;0;L;;;;;N;;;;; +13CE1;EGYPTIAN HIEROGLYPH-13CE1;Lo;0;L;;;;;N;;;;; +13CE2;EGYPTIAN HIEROGLYPH-13CE2;Lo;0;L;;;;;N;;;;; +13CE3;EGYPTIAN HIEROGLYPH-13CE3;Lo;0;L;;;;;N;;;;; +13CE4;EGYPTIAN HIEROGLYPH-13CE4;Lo;0;L;;;;;N;;;;; +13CE5;EGYPTIAN HIEROGLYPH-13CE5;Lo;0;L;;;;;N;;;;; +13CE6;EGYPTIAN HIEROGLYPH-13CE6;Lo;0;L;;;;;N;;;;; +13CE7;EGYPTIAN HIEROGLYPH-13CE7;Lo;0;L;;;;;N;;;;; +13CE8;EGYPTIAN HIEROGLYPH-13CE8;Lo;0;L;;;;;N;;;;; +13CE9;EGYPTIAN HIEROGLYPH-13CE9;Lo;0;L;;;;;N;;;;; +13CEA;EGYPTIAN HIEROGLYPH-13CEA;Lo;0;L;;;;;N;;;;; +13CEB;EGYPTIAN HIEROGLYPH-13CEB;Lo;0;L;;;;;N;;;;; +13CEC;EGYPTIAN HIEROGLYPH-13CEC;Lo;0;L;;;;;N;;;;; +13CED;EGYPTIAN HIEROGLYPH-13CED;Lo;0;L;;;;;N;;;;; +13CEE;EGYPTIAN HIEROGLYPH-13CEE;Lo;0;L;;;;;N;;;;; +13CEF;EGYPTIAN HIEROGLYPH-13CEF;Lo;0;L;;;;;N;;;;; +13CF0;EGYPTIAN HIEROGLYPH-13CF0;Lo;0;L;;;;;N;;;;; +13CF1;EGYPTIAN HIEROGLYPH-13CF1;Lo;0;L;;;;;N;;;;; +13CF2;EGYPTIAN HIEROGLYPH-13CF2;Lo;0;L;;;;;N;;;;; +13CF3;EGYPTIAN HIEROGLYPH-13CF3;Lo;0;L;;;;;N;;;;; +13CF4;EGYPTIAN HIEROGLYPH-13CF4;Lo;0;L;;;;;N;;;;; +13CF5;EGYPTIAN HIEROGLYPH-13CF5;Lo;0;L;;;;;N;;;;; +13CF6;EGYPTIAN HIEROGLYPH-13CF6;Lo;0;L;;;;;N;;;;; +13CF7;EGYPTIAN HIEROGLYPH-13CF7;Lo;0;L;;;;;N;;;;; +13CF8;EGYPTIAN HIEROGLYPH-13CF8;Lo;0;L;;;;;N;;;;; +13CF9;EGYPTIAN HIEROGLYPH-13CF9;Lo;0;L;;;;;N;;;;; +13CFA;EGYPTIAN HIEROGLYPH-13CFA;Lo;0;L;;;;;N;;;;; +13CFB;EGYPTIAN HIEROGLYPH-13CFB;Lo;0;L;;;;;N;;;;; +13CFC;EGYPTIAN HIEROGLYPH-13CFC;Lo;0;L;;;;;N;;;;; +13CFD;EGYPTIAN HIEROGLYPH-13CFD;Lo;0;L;;;;;N;;;;; +13CFE;EGYPTIAN HIEROGLYPH-13CFE;Lo;0;L;;;;;N;;;;; +13CFF;EGYPTIAN HIEROGLYPH-13CFF;Lo;0;L;;;;;N;;;;; +13D00;EGYPTIAN HIEROGLYPH-13D00;Lo;0;L;;;;;N;;;;; +13D01;EGYPTIAN HIEROGLYPH-13D01;Lo;0;L;;;;;N;;;;; +13D02;EGYPTIAN HIEROGLYPH-13D02;Lo;0;L;;;;;N;;;;; +13D03;EGYPTIAN HIEROGLYPH-13D03;Lo;0;L;;;;;N;;;;; +13D04;EGYPTIAN HIEROGLYPH-13D04;Lo;0;L;;;;;N;;;;; +13D05;EGYPTIAN HIEROGLYPH-13D05;Lo;0;L;;;;;N;;;;; +13D06;EGYPTIAN HIEROGLYPH-13D06;Lo;0;L;;;;;N;;;;; +13D07;EGYPTIAN HIEROGLYPH-13D07;Lo;0;L;;;;;N;;;;; +13D08;EGYPTIAN HIEROGLYPH-13D08;Lo;0;L;;;;;N;;;;; +13D09;EGYPTIAN HIEROGLYPH-13D09;Lo;0;L;;;;;N;;;;; +13D0A;EGYPTIAN HIEROGLYPH-13D0A;Lo;0;L;;;;;N;;;;; +13D0B;EGYPTIAN HIEROGLYPH-13D0B;Lo;0;L;;;;;N;;;;; +13D0C;EGYPTIAN HIEROGLYPH-13D0C;Lo;0;L;;;;;N;;;;; +13D0D;EGYPTIAN HIEROGLYPH-13D0D;Lo;0;L;;;;;N;;;;; +13D0E;EGYPTIAN HIEROGLYPH-13D0E;Lo;0;L;;;;;N;;;;; +13D0F;EGYPTIAN HIEROGLYPH-13D0F;Lo;0;L;;;;;N;;;;; +13D10;EGYPTIAN HIEROGLYPH-13D10;Lo;0;L;;;;;N;;;;; +13D11;EGYPTIAN HIEROGLYPH-13D11;Lo;0;L;;;;;N;;;;; +13D12;EGYPTIAN HIEROGLYPH-13D12;Lo;0;L;;;;;N;;;;; +13D13;EGYPTIAN HIEROGLYPH-13D13;Lo;0;L;;;;;N;;;;; +13D14;EGYPTIAN HIEROGLYPH-13D14;Lo;0;L;;;;;N;;;;; +13D15;EGYPTIAN HIEROGLYPH-13D15;Lo;0;L;;;;;N;;;;; +13D16;EGYPTIAN HIEROGLYPH-13D16;Lo;0;L;;;;;N;;;;; +13D17;EGYPTIAN HIEROGLYPH-13D17;Lo;0;L;;;;;N;;;;; +13D18;EGYPTIAN HIEROGLYPH-13D18;Lo;0;L;;;;;N;;;;; +13D19;EGYPTIAN HIEROGLYPH-13D19;Lo;0;L;;;;;N;;;;; +13D1A;EGYPTIAN HIEROGLYPH-13D1A;Lo;0;L;;;;;N;;;;; +13D1B;EGYPTIAN HIEROGLYPH-13D1B;Lo;0;L;;;;;N;;;;; +13D1C;EGYPTIAN HIEROGLYPH-13D1C;Lo;0;L;;;;;N;;;;; +13D1D;EGYPTIAN HIEROGLYPH-13D1D;Lo;0;L;;;;;N;;;;; +13D1E;EGYPTIAN HIEROGLYPH-13D1E;Lo;0;L;;;;;N;;;;; +13D1F;EGYPTIAN HIEROGLYPH-13D1F;Lo;0;L;;;;;N;;;;; +13D20;EGYPTIAN HIEROGLYPH-13D20;Lo;0;L;;;;;N;;;;; +13D21;EGYPTIAN HIEROGLYPH-13D21;Lo;0;L;;;;;N;;;;; +13D22;EGYPTIAN HIEROGLYPH-13D22;Lo;0;L;;;;;N;;;;; +13D23;EGYPTIAN HIEROGLYPH-13D23;Lo;0;L;;;;;N;;;;; +13D24;EGYPTIAN HIEROGLYPH-13D24;Lo;0;L;;;;;N;;;;; +13D25;EGYPTIAN HIEROGLYPH-13D25;Lo;0;L;;;;;N;;;;; +13D26;EGYPTIAN HIEROGLYPH-13D26;Lo;0;L;;;;;N;;;;; +13D27;EGYPTIAN HIEROGLYPH-13D27;Lo;0;L;;;;;N;;;;; +13D28;EGYPTIAN HIEROGLYPH-13D28;Lo;0;L;;;;;N;;;;; +13D29;EGYPTIAN HIEROGLYPH-13D29;Lo;0;L;;;;;N;;;;; +13D2A;EGYPTIAN HIEROGLYPH-13D2A;Lo;0;L;;;;;N;;;;; +13D2B;EGYPTIAN HIEROGLYPH-13D2B;Lo;0;L;;;;;N;;;;; +13D2C;EGYPTIAN HIEROGLYPH-13D2C;Lo;0;L;;;;;N;;;;; +13D2D;EGYPTIAN HIEROGLYPH-13D2D;Lo;0;L;;;;;N;;;;; +13D2E;EGYPTIAN HIEROGLYPH-13D2E;Lo;0;L;;;;;N;;;;; +13D2F;EGYPTIAN HIEROGLYPH-13D2F;Lo;0;L;;;;;N;;;;; +13D30;EGYPTIAN HIEROGLYPH-13D30;Lo;0;L;;;;;N;;;;; +13D31;EGYPTIAN HIEROGLYPH-13D31;Lo;0;L;;;;;N;;;;; +13D32;EGYPTIAN HIEROGLYPH-13D32;Lo;0;L;;;;;N;;;;; +13D33;EGYPTIAN HIEROGLYPH-13D33;Lo;0;L;;;;;N;;;;; +13D34;EGYPTIAN HIEROGLYPH-13D34;Lo;0;L;;;;;N;;;;; +13D35;EGYPTIAN HIEROGLYPH-13D35;Lo;0;L;;;;;N;;;;; +13D36;EGYPTIAN HIEROGLYPH-13D36;Lo;0;L;;;;;N;;;;; +13D37;EGYPTIAN HIEROGLYPH-13D37;Lo;0;L;;;;;N;;;;; +13D38;EGYPTIAN HIEROGLYPH-13D38;Lo;0;L;;;;;N;;;;; +13D39;EGYPTIAN HIEROGLYPH-13D39;Lo;0;L;;;;;N;;;;; +13D3A;EGYPTIAN HIEROGLYPH-13D3A;Lo;0;L;;;;;N;;;;; +13D3B;EGYPTIAN HIEROGLYPH-13D3B;Lo;0;L;;;;;N;;;;; +13D3C;EGYPTIAN HIEROGLYPH-13D3C;Lo;0;L;;;;;N;;;;; +13D3D;EGYPTIAN HIEROGLYPH-13D3D;Lo;0;L;;;;;N;;;;; +13D3E;EGYPTIAN HIEROGLYPH-13D3E;Lo;0;L;;;;;N;;;;; +13D3F;EGYPTIAN HIEROGLYPH-13D3F;Lo;0;L;;;;;N;;;;; +13D40;EGYPTIAN HIEROGLYPH-13D40;Lo;0;L;;;;;N;;;;; +13D41;EGYPTIAN HIEROGLYPH-13D41;Lo;0;L;;;;;N;;;;; +13D42;EGYPTIAN HIEROGLYPH-13D42;Lo;0;L;;;;;N;;;;; +13D43;EGYPTIAN HIEROGLYPH-13D43;Lo;0;L;;;;;N;;;;; +13D44;EGYPTIAN HIEROGLYPH-13D44;Lo;0;L;;;;;N;;;;; +13D45;EGYPTIAN HIEROGLYPH-13D45;Lo;0;L;;;;;N;;;;; +13D46;EGYPTIAN HIEROGLYPH-13D46;Lo;0;L;;;;;N;;;;; +13D47;EGYPTIAN HIEROGLYPH-13D47;Lo;0;L;;;;;N;;;;; +13D48;EGYPTIAN HIEROGLYPH-13D48;Lo;0;L;;;;;N;;;;; +13D49;EGYPTIAN HIEROGLYPH-13D49;Lo;0;L;;;;;N;;;;; +13D4A;EGYPTIAN HIEROGLYPH-13D4A;Lo;0;L;;;;;N;;;;; +13D4B;EGYPTIAN HIEROGLYPH-13D4B;Lo;0;L;;;;;N;;;;; +13D4C;EGYPTIAN HIEROGLYPH-13D4C;Lo;0;L;;;;;N;;;;; +13D4D;EGYPTIAN HIEROGLYPH-13D4D;Lo;0;L;;;;;N;;;;; +13D4E;EGYPTIAN HIEROGLYPH-13D4E;Lo;0;L;;;;;N;;;;; +13D4F;EGYPTIAN HIEROGLYPH-13D4F;Lo;0;L;;;;;N;;;;; +13D50;EGYPTIAN HIEROGLYPH-13D50;Lo;0;L;;;;;N;;;;; +13D51;EGYPTIAN HIEROGLYPH-13D51;Lo;0;L;;;;;N;;;;; +13D52;EGYPTIAN HIEROGLYPH-13D52;Lo;0;L;;;;;N;;;;; +13D53;EGYPTIAN HIEROGLYPH-13D53;Lo;0;L;;;;;N;;;;; +13D54;EGYPTIAN HIEROGLYPH-13D54;Lo;0;L;;;;;N;;;;; +13D55;EGYPTIAN HIEROGLYPH-13D55;Lo;0;L;;;;;N;;;;; +13D56;EGYPTIAN HIEROGLYPH-13D56;Lo;0;L;;;;;N;;;;; +13D57;EGYPTIAN HIEROGLYPH-13D57;Lo;0;L;;;;;N;;;;; +13D58;EGYPTIAN HIEROGLYPH-13D58;Lo;0;L;;;;;N;;;;; +13D59;EGYPTIAN HIEROGLYPH-13D59;Lo;0;L;;;;;N;;;;; +13D5A;EGYPTIAN HIEROGLYPH-13D5A;Lo;0;L;;;;;N;;;;; +13D5B;EGYPTIAN HIEROGLYPH-13D5B;Lo;0;L;;;;;N;;;;; +13D5C;EGYPTIAN HIEROGLYPH-13D5C;Lo;0;L;;;;;N;;;;; +13D5D;EGYPTIAN HIEROGLYPH-13D5D;Lo;0;L;;;;;N;;;;; +13D5E;EGYPTIAN HIEROGLYPH-13D5E;Lo;0;L;;;;;N;;;;; +13D5F;EGYPTIAN HIEROGLYPH-13D5F;Lo;0;L;;;;;N;;;;; +13D60;EGYPTIAN HIEROGLYPH-13D60;Lo;0;L;;;;;N;;;;; +13D61;EGYPTIAN HIEROGLYPH-13D61;Lo;0;L;;;;;N;;;;; +13D62;EGYPTIAN HIEROGLYPH-13D62;Lo;0;L;;;;;N;;;;; +13D63;EGYPTIAN HIEROGLYPH-13D63;Lo;0;L;;;;;N;;;;; +13D64;EGYPTIAN HIEROGLYPH-13D64;Lo;0;L;;;;;N;;;;; +13D65;EGYPTIAN HIEROGLYPH-13D65;Lo;0;L;;;;;N;;;;; +13D66;EGYPTIAN HIEROGLYPH-13D66;Lo;0;L;;;;;N;;;;; +13D67;EGYPTIAN HIEROGLYPH-13D67;Lo;0;L;;;;;N;;;;; +13D68;EGYPTIAN HIEROGLYPH-13D68;Lo;0;L;;;;;N;;;;; +13D69;EGYPTIAN HIEROGLYPH-13D69;Lo;0;L;;;;;N;;;;; +13D6A;EGYPTIAN HIEROGLYPH-13D6A;Lo;0;L;;;;;N;;;;; +13D6B;EGYPTIAN HIEROGLYPH-13D6B;Lo;0;L;;;;;N;;;;; +13D6C;EGYPTIAN HIEROGLYPH-13D6C;Lo;0;L;;;;;N;;;;; +13D6D;EGYPTIAN HIEROGLYPH-13D6D;Lo;0;L;;;;;N;;;;; +13D6E;EGYPTIAN HIEROGLYPH-13D6E;Lo;0;L;;;;;N;;;;; +13D6F;EGYPTIAN HIEROGLYPH-13D6F;Lo;0;L;;;;;N;;;;; +13D70;EGYPTIAN HIEROGLYPH-13D70;Lo;0;L;;;;;N;;;;; +13D71;EGYPTIAN HIEROGLYPH-13D71;Lo;0;L;;;;;N;;;;; +13D72;EGYPTIAN HIEROGLYPH-13D72;Lo;0;L;;;;;N;;;;; +13D73;EGYPTIAN HIEROGLYPH-13D73;Lo;0;L;;;;;N;;;;; +13D74;EGYPTIAN HIEROGLYPH-13D74;Lo;0;L;;;;;N;;;;; +13D75;EGYPTIAN HIEROGLYPH-13D75;Lo;0;L;;;;;N;;;;; +13D76;EGYPTIAN HIEROGLYPH-13D76;Lo;0;L;;;;;N;;;;; +13D77;EGYPTIAN HIEROGLYPH-13D77;Lo;0;L;;;;;N;;;;; +13D78;EGYPTIAN HIEROGLYPH-13D78;Lo;0;L;;;;;N;;;;; +13D79;EGYPTIAN HIEROGLYPH-13D79;Lo;0;L;;;;;N;;;;; +13D7A;EGYPTIAN HIEROGLYPH-13D7A;Lo;0;L;;;;;N;;;;; +13D7B;EGYPTIAN HIEROGLYPH-13D7B;Lo;0;L;;;;;N;;;;; +13D7C;EGYPTIAN HIEROGLYPH-13D7C;Lo;0;L;;;;;N;;;;; +13D7D;EGYPTIAN HIEROGLYPH-13D7D;Lo;0;L;;;;;N;;;;; +13D7E;EGYPTIAN HIEROGLYPH-13D7E;Lo;0;L;;;;;N;;;;; +13D7F;EGYPTIAN HIEROGLYPH-13D7F;Lo;0;L;;;;;N;;;;; +13D80;EGYPTIAN HIEROGLYPH-13D80;Lo;0;L;;;;;N;;;;; +13D81;EGYPTIAN HIEROGLYPH-13D81;Lo;0;L;;;;;N;;;;; +13D82;EGYPTIAN HIEROGLYPH-13D82;Lo;0;L;;;;;N;;;;; +13D83;EGYPTIAN HIEROGLYPH-13D83;Lo;0;L;;;;;N;;;;; +13D84;EGYPTIAN HIEROGLYPH-13D84;Lo;0;L;;;;;N;;;;; +13D85;EGYPTIAN HIEROGLYPH-13D85;Lo;0;L;;;;;N;;;;; +13D86;EGYPTIAN HIEROGLYPH-13D86;Lo;0;L;;;;;N;;;;; +13D87;EGYPTIAN HIEROGLYPH-13D87;Lo;0;L;;;;;N;;;;; +13D88;EGYPTIAN HIEROGLYPH-13D88;Lo;0;L;;;;;N;;;;; +13D89;EGYPTIAN HIEROGLYPH-13D89;Lo;0;L;;;;;N;;;;; +13D8A;EGYPTIAN HIEROGLYPH-13D8A;Lo;0;L;;;;;N;;;;; +13D8B;EGYPTIAN HIEROGLYPH-13D8B;Lo;0;L;;;;;N;;;;; +13D8C;EGYPTIAN HIEROGLYPH-13D8C;Lo;0;L;;;;;N;;;;; +13D8D;EGYPTIAN HIEROGLYPH-13D8D;Lo;0;L;;;;;N;;;;; +13D8E;EGYPTIAN HIEROGLYPH-13D8E;Lo;0;L;;;;;N;;;;; +13D8F;EGYPTIAN HIEROGLYPH-13D8F;Lo;0;L;;;;;N;;;;; +13D90;EGYPTIAN HIEROGLYPH-13D90;Lo;0;L;;;;;N;;;;; +13D91;EGYPTIAN HIEROGLYPH-13D91;Lo;0;L;;;;;N;;;;; +13D92;EGYPTIAN HIEROGLYPH-13D92;Lo;0;L;;;;;N;;;;; +13D93;EGYPTIAN HIEROGLYPH-13D93;Lo;0;L;;;;;N;;;;; +13D94;EGYPTIAN HIEROGLYPH-13D94;Lo;0;L;;;;;N;;;;; +13D95;EGYPTIAN HIEROGLYPH-13D95;Lo;0;L;;;;;N;;;;; +13D96;EGYPTIAN HIEROGLYPH-13D96;Lo;0;L;;;;;N;;;;; +13D97;EGYPTIAN HIEROGLYPH-13D97;Lo;0;L;;;;;N;;;;; +13D98;EGYPTIAN HIEROGLYPH-13D98;Lo;0;L;;;;;N;;;;; +13D99;EGYPTIAN HIEROGLYPH-13D99;Lo;0;L;;;;;N;;;;; +13D9A;EGYPTIAN HIEROGLYPH-13D9A;Lo;0;L;;;;;N;;;;; +13D9B;EGYPTIAN HIEROGLYPH-13D9B;Lo;0;L;;;;;N;;;;; +13D9C;EGYPTIAN HIEROGLYPH-13D9C;Lo;0;L;;;;;N;;;;; +13D9D;EGYPTIAN HIEROGLYPH-13D9D;Lo;0;L;;;;;N;;;;; +13D9E;EGYPTIAN HIEROGLYPH-13D9E;Lo;0;L;;;;;N;;;;; +13D9F;EGYPTIAN HIEROGLYPH-13D9F;Lo;0;L;;;;;N;;;;; +13DA0;EGYPTIAN HIEROGLYPH-13DA0;Lo;0;L;;;;;N;;;;; +13DA1;EGYPTIAN HIEROGLYPH-13DA1;Lo;0;L;;;;;N;;;;; +13DA2;EGYPTIAN HIEROGLYPH-13DA2;Lo;0;L;;;;;N;;;;; +13DA3;EGYPTIAN HIEROGLYPH-13DA3;Lo;0;L;;;;;N;;;;; +13DA4;EGYPTIAN HIEROGLYPH-13DA4;Lo;0;L;;;;;N;;;;; +13DA5;EGYPTIAN HIEROGLYPH-13DA5;Lo;0;L;;;;;N;;;;; +13DA6;EGYPTIAN HIEROGLYPH-13DA6;Lo;0;L;;;;;N;;;;; +13DA7;EGYPTIAN HIEROGLYPH-13DA7;Lo;0;L;;;;;N;;;;; +13DA8;EGYPTIAN HIEROGLYPH-13DA8;Lo;0;L;;;;;N;;;;; +13DA9;EGYPTIAN HIEROGLYPH-13DA9;Lo;0;L;;;;;N;;;;; +13DAA;EGYPTIAN HIEROGLYPH-13DAA;Lo;0;L;;;;;N;;;;; +13DAB;EGYPTIAN HIEROGLYPH-13DAB;Lo;0;L;;;;;N;;;;; +13DAC;EGYPTIAN HIEROGLYPH-13DAC;Lo;0;L;;;;;N;;;;; +13DAD;EGYPTIAN HIEROGLYPH-13DAD;Lo;0;L;;;;;N;;;;; +13DAE;EGYPTIAN HIEROGLYPH-13DAE;Lo;0;L;;;;;N;;;;; +13DAF;EGYPTIAN HIEROGLYPH-13DAF;Lo;0;L;;;;;N;;;;; +13DB0;EGYPTIAN HIEROGLYPH-13DB0;Lo;0;L;;;;;N;;;;; +13DB1;EGYPTIAN HIEROGLYPH-13DB1;Lo;0;L;;;;;N;;;;; +13DB2;EGYPTIAN HIEROGLYPH-13DB2;Lo;0;L;;;;;N;;;;; +13DB3;EGYPTIAN HIEROGLYPH-13DB3;Lo;0;L;;;;;N;;;;; +13DB4;EGYPTIAN HIEROGLYPH-13DB4;Lo;0;L;;;;;N;;;;; +13DB5;EGYPTIAN HIEROGLYPH-13DB5;Lo;0;L;;;;;N;;;;; +13DB6;EGYPTIAN HIEROGLYPH-13DB6;Lo;0;L;;;;;N;;;;; +13DB7;EGYPTIAN HIEROGLYPH-13DB7;Lo;0;L;;;;;N;;;;; +13DB8;EGYPTIAN HIEROGLYPH-13DB8;Lo;0;L;;;;;N;;;;; +13DB9;EGYPTIAN HIEROGLYPH-13DB9;Lo;0;L;;;;;N;;;;; +13DBA;EGYPTIAN HIEROGLYPH-13DBA;Lo;0;L;;;;;N;;;;; +13DBB;EGYPTIAN HIEROGLYPH-13DBB;Lo;0;L;;;;;N;;;;; +13DBC;EGYPTIAN HIEROGLYPH-13DBC;Lo;0;L;;;;;N;;;;; +13DBD;EGYPTIAN HIEROGLYPH-13DBD;Lo;0;L;;;;;N;;;;; +13DBE;EGYPTIAN HIEROGLYPH-13DBE;Lo;0;L;;;;;N;;;;; +13DBF;EGYPTIAN HIEROGLYPH-13DBF;Lo;0;L;;;;;N;;;;; +13DC0;EGYPTIAN HIEROGLYPH-13DC0;Lo;0;L;;;;;N;;;;; +13DC1;EGYPTIAN HIEROGLYPH-13DC1;Lo;0;L;;;;;N;;;;; +13DC2;EGYPTIAN HIEROGLYPH-13DC2;Lo;0;L;;;;;N;;;;; +13DC3;EGYPTIAN HIEROGLYPH-13DC3;Lo;0;L;;;;;N;;;;; +13DC4;EGYPTIAN HIEROGLYPH-13DC4;Lo;0;L;;;;;N;;;;; +13DC5;EGYPTIAN HIEROGLYPH-13DC5;Lo;0;L;;;;;N;;;;; +13DC6;EGYPTIAN HIEROGLYPH-13DC6;Lo;0;L;;;;;N;;;;; +13DC7;EGYPTIAN HIEROGLYPH-13DC7;Lo;0;L;;;;;N;;;;; +13DC8;EGYPTIAN HIEROGLYPH-13DC8;Lo;0;L;;;;;N;;;;; +13DC9;EGYPTIAN HIEROGLYPH-13DC9;Lo;0;L;;;;;N;;;;; +13DCA;EGYPTIAN HIEROGLYPH-13DCA;Lo;0;L;;;;;N;;;;; +13DCB;EGYPTIAN HIEROGLYPH-13DCB;Lo;0;L;;;;;N;;;;; +13DCC;EGYPTIAN HIEROGLYPH-13DCC;Lo;0;L;;;;;N;;;;; +13DCD;EGYPTIAN HIEROGLYPH-13DCD;Lo;0;L;;;;;N;;;;; +13DCE;EGYPTIAN HIEROGLYPH-13DCE;Lo;0;L;;;;;N;;;;; +13DCF;EGYPTIAN HIEROGLYPH-13DCF;Lo;0;L;;;;;N;;;;; +13DD0;EGYPTIAN HIEROGLYPH-13DD0;Lo;0;L;;;;;N;;;;; +13DD1;EGYPTIAN HIEROGLYPH-13DD1;Lo;0;L;;;;;N;;;;; +13DD2;EGYPTIAN HIEROGLYPH-13DD2;Lo;0;L;;;;;N;;;;; +13DD3;EGYPTIAN HIEROGLYPH-13DD3;Lo;0;L;;;;;N;;;;; +13DD4;EGYPTIAN HIEROGLYPH-13DD4;Lo;0;L;;;;;N;;;;; +13DD5;EGYPTIAN HIEROGLYPH-13DD5;Lo;0;L;;;;;N;;;;; +13DD6;EGYPTIAN HIEROGLYPH-13DD6;Lo;0;L;;;;;N;;;;; +13DD7;EGYPTIAN HIEROGLYPH-13DD7;Lo;0;L;;;;;N;;;;; +13DD8;EGYPTIAN HIEROGLYPH-13DD8;Lo;0;L;;;;;N;;;;; +13DD9;EGYPTIAN HIEROGLYPH-13DD9;Lo;0;L;;;;;N;;;;; +13DDA;EGYPTIAN HIEROGLYPH-13DDA;Lo;0;L;;;;;N;;;;; +13DDB;EGYPTIAN HIEROGLYPH-13DDB;Lo;0;L;;;;;N;;;;; +13DDC;EGYPTIAN HIEROGLYPH-13DDC;Lo;0;L;;;;;N;;;;; +13DDD;EGYPTIAN HIEROGLYPH-13DDD;Lo;0;L;;;;;N;;;;; +13DDE;EGYPTIAN HIEROGLYPH-13DDE;Lo;0;L;;;;;N;;;;; +13DDF;EGYPTIAN HIEROGLYPH-13DDF;Lo;0;L;;;;;N;;;;; +13DE0;EGYPTIAN HIEROGLYPH-13DE0;Lo;0;L;;;;;N;;;;; +13DE1;EGYPTIAN HIEROGLYPH-13DE1;Lo;0;L;;;;;N;;;;; +13DE2;EGYPTIAN HIEROGLYPH-13DE2;Lo;0;L;;;;;N;;;;; +13DE3;EGYPTIAN HIEROGLYPH-13DE3;Lo;0;L;;;;;N;;;;; +13DE4;EGYPTIAN HIEROGLYPH-13DE4;Lo;0;L;;;;;N;;;;; +13DE5;EGYPTIAN HIEROGLYPH-13DE5;Lo;0;L;;;;;N;;;;; +13DE6;EGYPTIAN HIEROGLYPH-13DE6;Lo;0;L;;;;;N;;;;; +13DE7;EGYPTIAN HIEROGLYPH-13DE7;Lo;0;L;;;;;N;;;;; +13DE8;EGYPTIAN HIEROGLYPH-13DE8;Lo;0;L;;;;;N;;;;; +13DE9;EGYPTIAN HIEROGLYPH-13DE9;Lo;0;L;;;;;N;;;;; +13DEA;EGYPTIAN HIEROGLYPH-13DEA;Lo;0;L;;;;;N;;;;; +13DEB;EGYPTIAN HIEROGLYPH-13DEB;Lo;0;L;;;;;N;;;;; +13DEC;EGYPTIAN HIEROGLYPH-13DEC;Lo;0;L;;;;;N;;;;; +13DED;EGYPTIAN HIEROGLYPH-13DED;Lo;0;L;;;;;N;;;;; +13DEE;EGYPTIAN HIEROGLYPH-13DEE;Lo;0;L;;;;;N;;;;; +13DEF;EGYPTIAN HIEROGLYPH-13DEF;Lo;0;L;;;;;N;;;;; +13DF0;EGYPTIAN HIEROGLYPH-13DF0;Lo;0;L;;;;;N;;;;; +13DF1;EGYPTIAN HIEROGLYPH-13DF1;Lo;0;L;;;;;N;;;;; +13DF2;EGYPTIAN HIEROGLYPH-13DF2;Lo;0;L;;;;;N;;;;; +13DF3;EGYPTIAN HIEROGLYPH-13DF3;Lo;0;L;;;;;N;;;;; +13DF4;EGYPTIAN HIEROGLYPH-13DF4;Lo;0;L;;;;;N;;;;; +13DF5;EGYPTIAN HIEROGLYPH-13DF5;Lo;0;L;;;;;N;;;;; +13DF6;EGYPTIAN HIEROGLYPH-13DF6;Lo;0;L;;;;;N;;;;; +13DF7;EGYPTIAN HIEROGLYPH-13DF7;Lo;0;L;;;;;N;;;;; +13DF8;EGYPTIAN HIEROGLYPH-13DF8;Lo;0;L;;;;;N;;;;; +13DF9;EGYPTIAN HIEROGLYPH-13DF9;Lo;0;L;;;;;N;;;;; +13DFA;EGYPTIAN HIEROGLYPH-13DFA;Lo;0;L;;;;;N;;;;; +13DFB;EGYPTIAN HIEROGLYPH-13DFB;Lo;0;L;;;;;N;;;;; +13DFC;EGYPTIAN HIEROGLYPH-13DFC;Lo;0;L;;;;;N;;;;; +13DFD;EGYPTIAN HIEROGLYPH-13DFD;Lo;0;L;;;;;N;;;;; +13DFE;EGYPTIAN HIEROGLYPH-13DFE;Lo;0;L;;;;;N;;;;; +13DFF;EGYPTIAN HIEROGLYPH-13DFF;Lo;0;L;;;;;N;;;;; +13E00;EGYPTIAN HIEROGLYPH-13E00;Lo;0;L;;;;;N;;;;; +13E01;EGYPTIAN HIEROGLYPH-13E01;Lo;0;L;;;;;N;;;;; +13E02;EGYPTIAN HIEROGLYPH-13E02;Lo;0;L;;;;;N;;;;; +13E03;EGYPTIAN HIEROGLYPH-13E03;Lo;0;L;;;;;N;;;;; +13E04;EGYPTIAN HIEROGLYPH-13E04;Lo;0;L;;;;;N;;;;; +13E05;EGYPTIAN HIEROGLYPH-13E05;Lo;0;L;;;;;N;;;;; +13E06;EGYPTIAN HIEROGLYPH-13E06;Lo;0;L;;;;;N;;;;; +13E07;EGYPTIAN HIEROGLYPH-13E07;Lo;0;L;;;;;N;;;;; +13E08;EGYPTIAN HIEROGLYPH-13E08;Lo;0;L;;;;;N;;;;; +13E09;EGYPTIAN HIEROGLYPH-13E09;Lo;0;L;;;;;N;;;;; +13E0A;EGYPTIAN HIEROGLYPH-13E0A;Lo;0;L;;;;;N;;;;; +13E0B;EGYPTIAN HIEROGLYPH-13E0B;Lo;0;L;;;;;N;;;;; +13E0C;EGYPTIAN HIEROGLYPH-13E0C;Lo;0;L;;;;;N;;;;; +13E0D;EGYPTIAN HIEROGLYPH-13E0D;Lo;0;L;;;;;N;;;;; +13E0E;EGYPTIAN HIEROGLYPH-13E0E;Lo;0;L;;;;;N;;;;; +13E0F;EGYPTIAN HIEROGLYPH-13E0F;Lo;0;L;;;;;N;;;;; +13E10;EGYPTIAN HIEROGLYPH-13E10;Lo;0;L;;;;;N;;;;; +13E11;EGYPTIAN HIEROGLYPH-13E11;Lo;0;L;;;;;N;;;;; +13E12;EGYPTIAN HIEROGLYPH-13E12;Lo;0;L;;;;;N;;;;; +13E13;EGYPTIAN HIEROGLYPH-13E13;Lo;0;L;;;;;N;;;;; +13E14;EGYPTIAN HIEROGLYPH-13E14;Lo;0;L;;;;;N;;;;; +13E15;EGYPTIAN HIEROGLYPH-13E15;Lo;0;L;;;;;N;;;;; +13E16;EGYPTIAN HIEROGLYPH-13E16;Lo;0;L;;;;;N;;;;; +13E17;EGYPTIAN HIEROGLYPH-13E17;Lo;0;L;;;;;N;;;;; +13E18;EGYPTIAN HIEROGLYPH-13E18;Lo;0;L;;;;;N;;;;; +13E19;EGYPTIAN HIEROGLYPH-13E19;Lo;0;L;;;;;N;;;;; +13E1A;EGYPTIAN HIEROGLYPH-13E1A;Lo;0;L;;;;;N;;;;; +13E1B;EGYPTIAN HIEROGLYPH-13E1B;Lo;0;L;;;;;N;;;;; +13E1C;EGYPTIAN HIEROGLYPH-13E1C;Lo;0;L;;;;;N;;;;; +13E1D;EGYPTIAN HIEROGLYPH-13E1D;Lo;0;L;;;;;N;;;;; +13E1E;EGYPTIAN HIEROGLYPH-13E1E;Lo;0;L;;;;;N;;;;; +13E1F;EGYPTIAN HIEROGLYPH-13E1F;Lo;0;L;;;;;N;;;;; +13E20;EGYPTIAN HIEROGLYPH-13E20;Lo;0;L;;;;;N;;;;; +13E21;EGYPTIAN HIEROGLYPH-13E21;Lo;0;L;;;;;N;;;;; +13E22;EGYPTIAN HIEROGLYPH-13E22;Lo;0;L;;;;;N;;;;; +13E23;EGYPTIAN HIEROGLYPH-13E23;Lo;0;L;;;;;N;;;;; +13E24;EGYPTIAN HIEROGLYPH-13E24;Lo;0;L;;;;;N;;;;; +13E25;EGYPTIAN HIEROGLYPH-13E25;Lo;0;L;;;;;N;;;;; +13E26;EGYPTIAN HIEROGLYPH-13E26;Lo;0;L;;;;;N;;;;; +13E27;EGYPTIAN HIEROGLYPH-13E27;Lo;0;L;;;;;N;;;;; +13E28;EGYPTIAN HIEROGLYPH-13E28;Lo;0;L;;;;;N;;;;; +13E29;EGYPTIAN HIEROGLYPH-13E29;Lo;0;L;;;;;N;;;;; +13E2A;EGYPTIAN HIEROGLYPH-13E2A;Lo;0;L;;;;;N;;;;; +13E2B;EGYPTIAN HIEROGLYPH-13E2B;Lo;0;L;;;;;N;;;;; +13E2C;EGYPTIAN HIEROGLYPH-13E2C;Lo;0;L;;;;;N;;;;; +13E2D;EGYPTIAN HIEROGLYPH-13E2D;Lo;0;L;;;;;N;;;;; +13E2E;EGYPTIAN HIEROGLYPH-13E2E;Lo;0;L;;;;;N;;;;; +13E2F;EGYPTIAN HIEROGLYPH-13E2F;Lo;0;L;;;;;N;;;;; +13E30;EGYPTIAN HIEROGLYPH-13E30;Lo;0;L;;;;;N;;;;; +13E31;EGYPTIAN HIEROGLYPH-13E31;Lo;0;L;;;;;N;;;;; +13E32;EGYPTIAN HIEROGLYPH-13E32;Lo;0;L;;;;;N;;;;; +13E33;EGYPTIAN HIEROGLYPH-13E33;Lo;0;L;;;;;N;;;;; +13E34;EGYPTIAN HIEROGLYPH-13E34;Lo;0;L;;;;;N;;;;; +13E35;EGYPTIAN HIEROGLYPH-13E35;Lo;0;L;;;;;N;;;;; +13E36;EGYPTIAN HIEROGLYPH-13E36;Lo;0;L;;;;;N;;;;; +13E37;EGYPTIAN HIEROGLYPH-13E37;Lo;0;L;;;;;N;;;;; +13E38;EGYPTIAN HIEROGLYPH-13E38;Lo;0;L;;;;;N;;;;; +13E39;EGYPTIAN HIEROGLYPH-13E39;Lo;0;L;;;;;N;;;;; +13E3A;EGYPTIAN HIEROGLYPH-13E3A;Lo;0;L;;;;;N;;;;; +13E3B;EGYPTIAN HIEROGLYPH-13E3B;Lo;0;L;;;;;N;;;;; +13E3C;EGYPTIAN HIEROGLYPH-13E3C;Lo;0;L;;;;;N;;;;; +13E3D;EGYPTIAN HIEROGLYPH-13E3D;Lo;0;L;;;;;N;;;;; +13E3E;EGYPTIAN HIEROGLYPH-13E3E;Lo;0;L;;;;;N;;;;; +13E3F;EGYPTIAN HIEROGLYPH-13E3F;Lo;0;L;;;;;N;;;;; +13E40;EGYPTIAN HIEROGLYPH-13E40;Lo;0;L;;;;;N;;;;; +13E41;EGYPTIAN HIEROGLYPH-13E41;Lo;0;L;;;;;N;;;;; +13E42;EGYPTIAN HIEROGLYPH-13E42;Lo;0;L;;;;;N;;;;; +13E43;EGYPTIAN HIEROGLYPH-13E43;Lo;0;L;;;;;N;;;;; +13E44;EGYPTIAN HIEROGLYPH-13E44;Lo;0;L;;;;;N;;;;; +13E45;EGYPTIAN HIEROGLYPH-13E45;Lo;0;L;;;;;N;;;;; +13E46;EGYPTIAN HIEROGLYPH-13E46;Lo;0;L;;;;;N;;;;; +13E47;EGYPTIAN HIEROGLYPH-13E47;Lo;0;L;;;;;N;;;;; +13E48;EGYPTIAN HIEROGLYPH-13E48;Lo;0;L;;;;;N;;;;; +13E49;EGYPTIAN HIEROGLYPH-13E49;Lo;0;L;;;;;N;;;;; +13E4A;EGYPTIAN HIEROGLYPH-13E4A;Lo;0;L;;;;;N;;;;; +13E4B;EGYPTIAN HIEROGLYPH-13E4B;Lo;0;L;;;;;N;;;;; +13E4C;EGYPTIAN HIEROGLYPH-13E4C;Lo;0;L;;;;;N;;;;; +13E4D;EGYPTIAN HIEROGLYPH-13E4D;Lo;0;L;;;;;N;;;;; +13E4E;EGYPTIAN HIEROGLYPH-13E4E;Lo;0;L;;;;;N;;;;; +13E4F;EGYPTIAN HIEROGLYPH-13E4F;Lo;0;L;;;;;N;;;;; +13E50;EGYPTIAN HIEROGLYPH-13E50;Lo;0;L;;;;;N;;;;; +13E51;EGYPTIAN HIEROGLYPH-13E51;Lo;0;L;;;;;N;;;;; +13E52;EGYPTIAN HIEROGLYPH-13E52;Lo;0;L;;;;;N;;;;; +13E53;EGYPTIAN HIEROGLYPH-13E53;Lo;0;L;;;;;N;;;;; +13E54;EGYPTIAN HIEROGLYPH-13E54;Lo;0;L;;;;;N;;;;; +13E55;EGYPTIAN HIEROGLYPH-13E55;Lo;0;L;;;;;N;;;;; +13E56;EGYPTIAN HIEROGLYPH-13E56;Lo;0;L;;;;;N;;;;; +13E57;EGYPTIAN HIEROGLYPH-13E57;Lo;0;L;;;;;N;;;;; +13E58;EGYPTIAN HIEROGLYPH-13E58;Lo;0;L;;;;;N;;;;; +13E59;EGYPTIAN HIEROGLYPH-13E59;Lo;0;L;;;;;N;;;;; +13E5A;EGYPTIAN HIEROGLYPH-13E5A;Lo;0;L;;;;;N;;;;; +13E5B;EGYPTIAN HIEROGLYPH-13E5B;Lo;0;L;;;;;N;;;;; +13E5C;EGYPTIAN HIEROGLYPH-13E5C;Lo;0;L;;;;;N;;;;; +13E5D;EGYPTIAN HIEROGLYPH-13E5D;Lo;0;L;;;;;N;;;;; +13E5E;EGYPTIAN HIEROGLYPH-13E5E;Lo;0;L;;;;;N;;;;; +13E5F;EGYPTIAN HIEROGLYPH-13E5F;Lo;0;L;;;;;N;;;;; +13E60;EGYPTIAN HIEROGLYPH-13E60;Lo;0;L;;;;;N;;;;; +13E61;EGYPTIAN HIEROGLYPH-13E61;Lo;0;L;;;;;N;;;;; +13E62;EGYPTIAN HIEROGLYPH-13E62;Lo;0;L;;;;;N;;;;; +13E63;EGYPTIAN HIEROGLYPH-13E63;Lo;0;L;;;;;N;;;;; +13E64;EGYPTIAN HIEROGLYPH-13E64;Lo;0;L;;;;;N;;;;; +13E65;EGYPTIAN HIEROGLYPH-13E65;Lo;0;L;;;;;N;;;;; +13E66;EGYPTIAN HIEROGLYPH-13E66;Lo;0;L;;;;;N;;;;; +13E67;EGYPTIAN HIEROGLYPH-13E67;Lo;0;L;;;;;N;;;;; +13E68;EGYPTIAN HIEROGLYPH-13E68;Lo;0;L;;;;;N;;;;; +13E69;EGYPTIAN HIEROGLYPH-13E69;Lo;0;L;;;;;N;;;;; +13E6A;EGYPTIAN HIEROGLYPH-13E6A;Lo;0;L;;;;;N;;;;; +13E6B;EGYPTIAN HIEROGLYPH-13E6B;Lo;0;L;;;;;N;;;;; +13E6C;EGYPTIAN HIEROGLYPH-13E6C;Lo;0;L;;;;;N;;;;; +13E6D;EGYPTIAN HIEROGLYPH-13E6D;Lo;0;L;;;;;N;;;;; +13E6E;EGYPTIAN HIEROGLYPH-13E6E;Lo;0;L;;;;;N;;;;; +13E6F;EGYPTIAN HIEROGLYPH-13E6F;Lo;0;L;;;;;N;;;;; +13E70;EGYPTIAN HIEROGLYPH-13E70;Lo;0;L;;;;;N;;;;; +13E71;EGYPTIAN HIEROGLYPH-13E71;Lo;0;L;;;;;N;;;;; +13E72;EGYPTIAN HIEROGLYPH-13E72;Lo;0;L;;;;;N;;;;; +13E73;EGYPTIAN HIEROGLYPH-13E73;Lo;0;L;;;;;N;;;;; +13E74;EGYPTIAN HIEROGLYPH-13E74;Lo;0;L;;;;;N;;;;; +13E75;EGYPTIAN HIEROGLYPH-13E75;Lo;0;L;;;;;N;;;;; +13E76;EGYPTIAN HIEROGLYPH-13E76;Lo;0;L;;;;;N;;;;; +13E77;EGYPTIAN HIEROGLYPH-13E77;Lo;0;L;;;;;N;;;;; +13E78;EGYPTIAN HIEROGLYPH-13E78;Lo;0;L;;;;;N;;;;; +13E79;EGYPTIAN HIEROGLYPH-13E79;Lo;0;L;;;;;N;;;;; +13E7A;EGYPTIAN HIEROGLYPH-13E7A;Lo;0;L;;;;;N;;;;; +13E7B;EGYPTIAN HIEROGLYPH-13E7B;Lo;0;L;;;;;N;;;;; +13E7C;EGYPTIAN HIEROGLYPH-13E7C;Lo;0;L;;;;;N;;;;; +13E7D;EGYPTIAN HIEROGLYPH-13E7D;Lo;0;L;;;;;N;;;;; +13E7E;EGYPTIAN HIEROGLYPH-13E7E;Lo;0;L;;;;;N;;;;; +13E7F;EGYPTIAN HIEROGLYPH-13E7F;Lo;0;L;;;;;N;;;;; +13E80;EGYPTIAN HIEROGLYPH-13E80;Lo;0;L;;;;;N;;;;; +13E81;EGYPTIAN HIEROGLYPH-13E81;Lo;0;L;;;;;N;;;;; +13E82;EGYPTIAN HIEROGLYPH-13E82;Lo;0;L;;;;;N;;;;; +13E83;EGYPTIAN HIEROGLYPH-13E83;Lo;0;L;;;;;N;;;;; +13E84;EGYPTIAN HIEROGLYPH-13E84;Lo;0;L;;;;;N;;;;; +13E85;EGYPTIAN HIEROGLYPH-13E85;Lo;0;L;;;;;N;;;;; +13E86;EGYPTIAN HIEROGLYPH-13E86;Lo;0;L;;;;;N;;;;; +13E87;EGYPTIAN HIEROGLYPH-13E87;Lo;0;L;;;;;N;;;;; +13E88;EGYPTIAN HIEROGLYPH-13E88;Lo;0;L;;;;;N;;;;; +13E89;EGYPTIAN HIEROGLYPH-13E89;Lo;0;L;;;;;N;;;;; +13E8A;EGYPTIAN HIEROGLYPH-13E8A;Lo;0;L;;;;;N;;;;; +13E8B;EGYPTIAN HIEROGLYPH-13E8B;Lo;0;L;;;;;N;;;;; +13E8C;EGYPTIAN HIEROGLYPH-13E8C;Lo;0;L;;;;;N;;;;; +13E8D;EGYPTIAN HIEROGLYPH-13E8D;Lo;0;L;;;;;N;;;;; +13E8E;EGYPTIAN HIEROGLYPH-13E8E;Lo;0;L;;;;;N;;;;; +13E8F;EGYPTIAN HIEROGLYPH-13E8F;Lo;0;L;;;;;N;;;;; +13E90;EGYPTIAN HIEROGLYPH-13E90;Lo;0;L;;;;;N;;;;; +13E91;EGYPTIAN HIEROGLYPH-13E91;Lo;0;L;;;;;N;;;;; +13E92;EGYPTIAN HIEROGLYPH-13E92;Lo;0;L;;;;;N;;;;; +13E93;EGYPTIAN HIEROGLYPH-13E93;Lo;0;L;;;;;N;;;;; +13E94;EGYPTIAN HIEROGLYPH-13E94;Lo;0;L;;;;;N;;;;; +13E95;EGYPTIAN HIEROGLYPH-13E95;Lo;0;L;;;;;N;;;;; +13E96;EGYPTIAN HIEROGLYPH-13E96;Lo;0;L;;;;;N;;;;; +13E97;EGYPTIAN HIEROGLYPH-13E97;Lo;0;L;;;;;N;;;;; +13E98;EGYPTIAN HIEROGLYPH-13E98;Lo;0;L;;;;;N;;;;; +13E99;EGYPTIAN HIEROGLYPH-13E99;Lo;0;L;;;;;N;;;;; +13E9A;EGYPTIAN HIEROGLYPH-13E9A;Lo;0;L;;;;;N;;;;; +13E9B;EGYPTIAN HIEROGLYPH-13E9B;Lo;0;L;;;;;N;;;;; +13E9C;EGYPTIAN HIEROGLYPH-13E9C;Lo;0;L;;;;;N;;;;; +13E9D;EGYPTIAN HIEROGLYPH-13E9D;Lo;0;L;;;;;N;;;;; +13E9E;EGYPTIAN HIEROGLYPH-13E9E;Lo;0;L;;;;;N;;;;; +13E9F;EGYPTIAN HIEROGLYPH-13E9F;Lo;0;L;;;;;N;;;;; +13EA0;EGYPTIAN HIEROGLYPH-13EA0;Lo;0;L;;;;;N;;;;; +13EA1;EGYPTIAN HIEROGLYPH-13EA1;Lo;0;L;;;;;N;;;;; +13EA2;EGYPTIAN HIEROGLYPH-13EA2;Lo;0;L;;;;;N;;;;; +13EA3;EGYPTIAN HIEROGLYPH-13EA3;Lo;0;L;;;;;N;;;;; +13EA4;EGYPTIAN HIEROGLYPH-13EA4;Lo;0;L;;;;;N;;;;; +13EA5;EGYPTIAN HIEROGLYPH-13EA5;Lo;0;L;;;;;N;;;;; +13EA6;EGYPTIAN HIEROGLYPH-13EA6;Lo;0;L;;;;;N;;;;; +13EA7;EGYPTIAN HIEROGLYPH-13EA7;Lo;0;L;;;;;N;;;;; +13EA8;EGYPTIAN HIEROGLYPH-13EA8;Lo;0;L;;;;;N;;;;; +13EA9;EGYPTIAN HIEROGLYPH-13EA9;Lo;0;L;;;;;N;;;;; +13EAA;EGYPTIAN HIEROGLYPH-13EAA;Lo;0;L;;;;;N;;;;; +13EAB;EGYPTIAN HIEROGLYPH-13EAB;Lo;0;L;;;;;N;;;;; +13EAC;EGYPTIAN HIEROGLYPH-13EAC;Lo;0;L;;;;;N;;;;; +13EAD;EGYPTIAN HIEROGLYPH-13EAD;Lo;0;L;;;;;N;;;;; +13EAE;EGYPTIAN HIEROGLYPH-13EAE;Lo;0;L;;;;;N;;;;; +13EAF;EGYPTIAN HIEROGLYPH-13EAF;Lo;0;L;;;;;N;;;;; +13EB0;EGYPTIAN HIEROGLYPH-13EB0;Lo;0;L;;;;;N;;;;; +13EB1;EGYPTIAN HIEROGLYPH-13EB1;Lo;0;L;;;;;N;;;;; +13EB2;EGYPTIAN HIEROGLYPH-13EB2;Lo;0;L;;;;;N;;;;; +13EB3;EGYPTIAN HIEROGLYPH-13EB3;Lo;0;L;;;;;N;;;;; +13EB4;EGYPTIAN HIEROGLYPH-13EB4;Lo;0;L;;;;;N;;;;; +13EB5;EGYPTIAN HIEROGLYPH-13EB5;Lo;0;L;;;;;N;;;;; +13EB6;EGYPTIAN HIEROGLYPH-13EB6;Lo;0;L;;;;;N;;;;; +13EB7;EGYPTIAN HIEROGLYPH-13EB7;Lo;0;L;;;;;N;;;;; +13EB8;EGYPTIAN HIEROGLYPH-13EB8;Lo;0;L;;;;;N;;;;; +13EB9;EGYPTIAN HIEROGLYPH-13EB9;Lo;0;L;;;;;N;;;;; +13EBA;EGYPTIAN HIEROGLYPH-13EBA;Lo;0;L;;;;;N;;;;; +13EBB;EGYPTIAN HIEROGLYPH-13EBB;Lo;0;L;;;;;N;;;;; +13EBC;EGYPTIAN HIEROGLYPH-13EBC;Lo;0;L;;;;;N;;;;; +13EBD;EGYPTIAN HIEROGLYPH-13EBD;Lo;0;L;;;;;N;;;;; +13EBE;EGYPTIAN HIEROGLYPH-13EBE;Lo;0;L;;;;;N;;;;; +13EBF;EGYPTIAN HIEROGLYPH-13EBF;Lo;0;L;;;;;N;;;;; +13EC0;EGYPTIAN HIEROGLYPH-13EC0;Lo;0;L;;;;;N;;;;; +13EC1;EGYPTIAN HIEROGLYPH-13EC1;Lo;0;L;;;;;N;;;;; +13EC2;EGYPTIAN HIEROGLYPH-13EC2;Lo;0;L;;;;;N;;;;; +13EC3;EGYPTIAN HIEROGLYPH-13EC3;Lo;0;L;;;;;N;;;;; +13EC4;EGYPTIAN HIEROGLYPH-13EC4;Lo;0;L;;;;;N;;;;; +13EC5;EGYPTIAN HIEROGLYPH-13EC5;Lo;0;L;;;;;N;;;;; +13EC6;EGYPTIAN HIEROGLYPH-13EC6;Lo;0;L;;;;;N;;;;; +13EC7;EGYPTIAN HIEROGLYPH-13EC7;Lo;0;L;;;;;N;;;;; +13EC8;EGYPTIAN HIEROGLYPH-13EC8;Lo;0;L;;;;;N;;;;; +13EC9;EGYPTIAN HIEROGLYPH-13EC9;Lo;0;L;;;;;N;;;;; +13ECA;EGYPTIAN HIEROGLYPH-13ECA;Lo;0;L;;;;;N;;;;; +13ECB;EGYPTIAN HIEROGLYPH-13ECB;Lo;0;L;;;;;N;;;;; +13ECC;EGYPTIAN HIEROGLYPH-13ECC;Lo;0;L;;;;;N;;;;; +13ECD;EGYPTIAN HIEROGLYPH-13ECD;Lo;0;L;;;;;N;;;;; +13ECE;EGYPTIAN HIEROGLYPH-13ECE;Lo;0;L;;;;;N;;;;; +13ECF;EGYPTIAN HIEROGLYPH-13ECF;Lo;0;L;;;;;N;;;;; +13ED0;EGYPTIAN HIEROGLYPH-13ED0;Lo;0;L;;;;;N;;;;; +13ED1;EGYPTIAN HIEROGLYPH-13ED1;Lo;0;L;;;;;N;;;;; +13ED2;EGYPTIAN HIEROGLYPH-13ED2;Lo;0;L;;;;;N;;;;; +13ED3;EGYPTIAN HIEROGLYPH-13ED3;Lo;0;L;;;;;N;;;;; +13ED4;EGYPTIAN HIEROGLYPH-13ED4;Lo;0;L;;;;;N;;;;; +13ED5;EGYPTIAN HIEROGLYPH-13ED5;Lo;0;L;;;;;N;;;;; +13ED6;EGYPTIAN HIEROGLYPH-13ED6;Lo;0;L;;;;;N;;;;; +13ED7;EGYPTIAN HIEROGLYPH-13ED7;Lo;0;L;;;;;N;;;;; +13ED8;EGYPTIAN HIEROGLYPH-13ED8;Lo;0;L;;;;;N;;;;; +13ED9;EGYPTIAN HIEROGLYPH-13ED9;Lo;0;L;;;;;N;;;;; +13EDA;EGYPTIAN HIEROGLYPH-13EDA;Lo;0;L;;;;;N;;;;; +13EDB;EGYPTIAN HIEROGLYPH-13EDB;Lo;0;L;;;;;N;;;;; +13EDC;EGYPTIAN HIEROGLYPH-13EDC;Lo;0;L;;;;;N;;;;; +13EDD;EGYPTIAN HIEROGLYPH-13EDD;Lo;0;L;;;;;N;;;;; +13EDE;EGYPTIAN HIEROGLYPH-13EDE;Lo;0;L;;;;;N;;;;; +13EDF;EGYPTIAN HIEROGLYPH-13EDF;Lo;0;L;;;;;N;;;;; +13EE0;EGYPTIAN HIEROGLYPH-13EE0;Lo;0;L;;;;;N;;;;; +13EE1;EGYPTIAN HIEROGLYPH-13EE1;Lo;0;L;;;;;N;;;;; +13EE2;EGYPTIAN HIEROGLYPH-13EE2;Lo;0;L;;;;;N;;;;; +13EE3;EGYPTIAN HIEROGLYPH-13EE3;Lo;0;L;;;;;N;;;;; +13EE4;EGYPTIAN HIEROGLYPH-13EE4;Lo;0;L;;;;;N;;;;; +13EE5;EGYPTIAN HIEROGLYPH-13EE5;Lo;0;L;;;;;N;;;;; +13EE6;EGYPTIAN HIEROGLYPH-13EE6;Lo;0;L;;;;;N;;;;; +13EE7;EGYPTIAN HIEROGLYPH-13EE7;Lo;0;L;;;;;N;;;;; +13EE8;EGYPTIAN HIEROGLYPH-13EE8;Lo;0;L;;;;;N;;;;; +13EE9;EGYPTIAN HIEROGLYPH-13EE9;Lo;0;L;;;;;N;;;;; +13EEA;EGYPTIAN HIEROGLYPH-13EEA;Lo;0;L;;;;;N;;;;; +13EEB;EGYPTIAN HIEROGLYPH-13EEB;Lo;0;L;;;;;N;;;;; +13EEC;EGYPTIAN HIEROGLYPH-13EEC;Lo;0;L;;;;;N;;;;; +13EED;EGYPTIAN HIEROGLYPH-13EED;Lo;0;L;;;;;N;;;;; +13EEE;EGYPTIAN HIEROGLYPH-13EEE;Lo;0;L;;;;;N;;;;; +13EEF;EGYPTIAN HIEROGLYPH-13EEF;Lo;0;L;;;;;N;;;;; +13EF0;EGYPTIAN HIEROGLYPH-13EF0;Lo;0;L;;;;;N;;;;; +13EF1;EGYPTIAN HIEROGLYPH-13EF1;Lo;0;L;;;;;N;;;;; +13EF2;EGYPTIAN HIEROGLYPH-13EF2;Lo;0;L;;;;;N;;;;; +13EF3;EGYPTIAN HIEROGLYPH-13EF3;Lo;0;L;;;;;N;;;;; +13EF4;EGYPTIAN HIEROGLYPH-13EF4;Lo;0;L;;;;;N;;;;; +13EF5;EGYPTIAN HIEROGLYPH-13EF5;Lo;0;L;;;;;N;;;;; +13EF6;EGYPTIAN HIEROGLYPH-13EF6;Lo;0;L;;;;;N;;;;; +13EF7;EGYPTIAN HIEROGLYPH-13EF7;Lo;0;L;;;;;N;;;;; +13EF8;EGYPTIAN HIEROGLYPH-13EF8;Lo;0;L;;;;;N;;;;; +13EF9;EGYPTIAN HIEROGLYPH-13EF9;Lo;0;L;;;;;N;;;;; +13EFA;EGYPTIAN HIEROGLYPH-13EFA;Lo;0;L;;;;;N;;;;; +13EFB;EGYPTIAN HIEROGLYPH-13EFB;Lo;0;L;;;;;N;;;;; +13EFC;EGYPTIAN HIEROGLYPH-13EFC;Lo;0;L;;;;;N;;;;; +13EFD;EGYPTIAN HIEROGLYPH-13EFD;Lo;0;L;;;;;N;;;;; +13EFE;EGYPTIAN HIEROGLYPH-13EFE;Lo;0;L;;;;;N;;;;; +13EFF;EGYPTIAN HIEROGLYPH-13EFF;Lo;0;L;;;;;N;;;;; +13F00;EGYPTIAN HIEROGLYPH-13F00;Lo;0;L;;;;;N;;;;; +13F01;EGYPTIAN HIEROGLYPH-13F01;Lo;0;L;;;;;N;;;;; +13F02;EGYPTIAN HIEROGLYPH-13F02;Lo;0;L;;;;;N;;;;; +13F03;EGYPTIAN HIEROGLYPH-13F03;Lo;0;L;;;;;N;;;;; +13F04;EGYPTIAN HIEROGLYPH-13F04;Lo;0;L;;;;;N;;;;; +13F05;EGYPTIAN HIEROGLYPH-13F05;Lo;0;L;;;;;N;;;;; +13F06;EGYPTIAN HIEROGLYPH-13F06;Lo;0;L;;;;;N;;;;; +13F07;EGYPTIAN HIEROGLYPH-13F07;Lo;0;L;;;;;N;;;;; +13F08;EGYPTIAN HIEROGLYPH-13F08;Lo;0;L;;;;;N;;;;; +13F09;EGYPTIAN HIEROGLYPH-13F09;Lo;0;L;;;;;N;;;;; +13F0A;EGYPTIAN HIEROGLYPH-13F0A;Lo;0;L;;;;;N;;;;; +13F0B;EGYPTIAN HIEROGLYPH-13F0B;Lo;0;L;;;;;N;;;;; +13F0C;EGYPTIAN HIEROGLYPH-13F0C;Lo;0;L;;;;;N;;;;; +13F0D;EGYPTIAN HIEROGLYPH-13F0D;Lo;0;L;;;;;N;;;;; +13F0E;EGYPTIAN HIEROGLYPH-13F0E;Lo;0;L;;;;;N;;;;; +13F0F;EGYPTIAN HIEROGLYPH-13F0F;Lo;0;L;;;;;N;;;;; +13F10;EGYPTIAN HIEROGLYPH-13F10;Lo;0;L;;;;;N;;;;; +13F11;EGYPTIAN HIEROGLYPH-13F11;Lo;0;L;;;;;N;;;;; +13F12;EGYPTIAN HIEROGLYPH-13F12;Lo;0;L;;;;;N;;;;; +13F13;EGYPTIAN HIEROGLYPH-13F13;Lo;0;L;;;;;N;;;;; +13F14;EGYPTIAN HIEROGLYPH-13F14;Lo;0;L;;;;;N;;;;; +13F15;EGYPTIAN HIEROGLYPH-13F15;Lo;0;L;;;;;N;;;;; +13F16;EGYPTIAN HIEROGLYPH-13F16;Lo;0;L;;;;;N;;;;; +13F17;EGYPTIAN HIEROGLYPH-13F17;Lo;0;L;;;;;N;;;;; +13F18;EGYPTIAN HIEROGLYPH-13F18;Lo;0;L;;;;;N;;;;; +13F19;EGYPTIAN HIEROGLYPH-13F19;Lo;0;L;;;;;N;;;;; +13F1A;EGYPTIAN HIEROGLYPH-13F1A;Lo;0;L;;;;;N;;;;; +13F1B;EGYPTIAN HIEROGLYPH-13F1B;Lo;0;L;;;;;N;;;;; +13F1C;EGYPTIAN HIEROGLYPH-13F1C;Lo;0;L;;;;;N;;;;; +13F1D;EGYPTIAN HIEROGLYPH-13F1D;Lo;0;L;;;;;N;;;;; +13F1E;EGYPTIAN HIEROGLYPH-13F1E;Lo;0;L;;;;;N;;;;; +13F1F;EGYPTIAN HIEROGLYPH-13F1F;Lo;0;L;;;;;N;;;;; +13F20;EGYPTIAN HIEROGLYPH-13F20;Lo;0;L;;;;;N;;;;; +13F21;EGYPTIAN HIEROGLYPH-13F21;Lo;0;L;;;;;N;;;;; +13F22;EGYPTIAN HIEROGLYPH-13F22;Lo;0;L;;;;;N;;;;; +13F23;EGYPTIAN HIEROGLYPH-13F23;Lo;0;L;;;;;N;;;;; +13F24;EGYPTIAN HIEROGLYPH-13F24;Lo;0;L;;;;;N;;;;; +13F25;EGYPTIAN HIEROGLYPH-13F25;Lo;0;L;;;;;N;;;;; +13F26;EGYPTIAN HIEROGLYPH-13F26;Lo;0;L;;;;;N;;;;; +13F27;EGYPTIAN HIEROGLYPH-13F27;Lo;0;L;;;;;N;;;;; +13F28;EGYPTIAN HIEROGLYPH-13F28;Lo;0;L;;;;;N;;;;; +13F29;EGYPTIAN HIEROGLYPH-13F29;Lo;0;L;;;;;N;;;;; +13F2A;EGYPTIAN HIEROGLYPH-13F2A;Lo;0;L;;;;;N;;;;; +13F2B;EGYPTIAN HIEROGLYPH-13F2B;Lo;0;L;;;;;N;;;;; +13F2C;EGYPTIAN HIEROGLYPH-13F2C;Lo;0;L;;;;;N;;;;; +13F2D;EGYPTIAN HIEROGLYPH-13F2D;Lo;0;L;;;;;N;;;;; +13F2E;EGYPTIAN HIEROGLYPH-13F2E;Lo;0;L;;;;;N;;;;; +13F2F;EGYPTIAN HIEROGLYPH-13F2F;Lo;0;L;;;;;N;;;;; +13F30;EGYPTIAN HIEROGLYPH-13F30;Lo;0;L;;;;;N;;;;; +13F31;EGYPTIAN HIEROGLYPH-13F31;Lo;0;L;;;;;N;;;;; +13F32;EGYPTIAN HIEROGLYPH-13F32;Lo;0;L;;;;;N;;;;; +13F33;EGYPTIAN HIEROGLYPH-13F33;Lo;0;L;;;;;N;;;;; +13F34;EGYPTIAN HIEROGLYPH-13F34;Lo;0;L;;;;;N;;;;; +13F35;EGYPTIAN HIEROGLYPH-13F35;Lo;0;L;;;;;N;;;;; +13F36;EGYPTIAN HIEROGLYPH-13F36;Lo;0;L;;;;;N;;;;; +13F37;EGYPTIAN HIEROGLYPH-13F37;Lo;0;L;;;;;N;;;;; +13F38;EGYPTIAN HIEROGLYPH-13F38;Lo;0;L;;;;;N;;;;; +13F39;EGYPTIAN HIEROGLYPH-13F39;Lo;0;L;;;;;N;;;;; +13F3A;EGYPTIAN HIEROGLYPH-13F3A;Lo;0;L;;;;;N;;;;; +13F3B;EGYPTIAN HIEROGLYPH-13F3B;Lo;0;L;;;;;N;;;;; +13F3C;EGYPTIAN HIEROGLYPH-13F3C;Lo;0;L;;;;;N;;;;; +13F3D;EGYPTIAN HIEROGLYPH-13F3D;Lo;0;L;;;;;N;;;;; +13F3E;EGYPTIAN HIEROGLYPH-13F3E;Lo;0;L;;;;;N;;;;; +13F3F;EGYPTIAN HIEROGLYPH-13F3F;Lo;0;L;;;;;N;;;;; +13F40;EGYPTIAN HIEROGLYPH-13F40;Lo;0;L;;;;;N;;;;; +13F41;EGYPTIAN HIEROGLYPH-13F41;Lo;0;L;;;;;N;;;;; +13F42;EGYPTIAN HIEROGLYPH-13F42;Lo;0;L;;;;;N;;;;; +13F43;EGYPTIAN HIEROGLYPH-13F43;Lo;0;L;;;;;N;;;;; +13F44;EGYPTIAN HIEROGLYPH-13F44;Lo;0;L;;;;;N;;;;; +13F45;EGYPTIAN HIEROGLYPH-13F45;Lo;0;L;;;;;N;;;;; +13F46;EGYPTIAN HIEROGLYPH-13F46;Lo;0;L;;;;;N;;;;; +13F47;EGYPTIAN HIEROGLYPH-13F47;Lo;0;L;;;;;N;;;;; +13F48;EGYPTIAN HIEROGLYPH-13F48;Lo;0;L;;;;;N;;;;; +13F49;EGYPTIAN HIEROGLYPH-13F49;Lo;0;L;;;;;N;;;;; +13F4A;EGYPTIAN HIEROGLYPH-13F4A;Lo;0;L;;;;;N;;;;; +13F4B;EGYPTIAN HIEROGLYPH-13F4B;Lo;0;L;;;;;N;;;;; +13F4C;EGYPTIAN HIEROGLYPH-13F4C;Lo;0;L;;;;;N;;;;; +13F4D;EGYPTIAN HIEROGLYPH-13F4D;Lo;0;L;;;;;N;;;;; +13F4E;EGYPTIAN HIEROGLYPH-13F4E;Lo;0;L;;;;;N;;;;; +13F4F;EGYPTIAN HIEROGLYPH-13F4F;Lo;0;L;;;;;N;;;;; +13F50;EGYPTIAN HIEROGLYPH-13F50;Lo;0;L;;;;;N;;;;; +13F51;EGYPTIAN HIEROGLYPH-13F51;Lo;0;L;;;;;N;;;;; +13F52;EGYPTIAN HIEROGLYPH-13F52;Lo;0;L;;;;;N;;;;; +13F53;EGYPTIAN HIEROGLYPH-13F53;Lo;0;L;;;;;N;;;;; +13F54;EGYPTIAN HIEROGLYPH-13F54;Lo;0;L;;;;;N;;;;; +13F55;EGYPTIAN HIEROGLYPH-13F55;Lo;0;L;;;;;N;;;;; +13F56;EGYPTIAN HIEROGLYPH-13F56;Lo;0;L;;;;;N;;;;; +13F57;EGYPTIAN HIEROGLYPH-13F57;Lo;0;L;;;;;N;;;;; +13F58;EGYPTIAN HIEROGLYPH-13F58;Lo;0;L;;;;;N;;;;; +13F59;EGYPTIAN HIEROGLYPH-13F59;Lo;0;L;;;;;N;;;;; +13F5A;EGYPTIAN HIEROGLYPH-13F5A;Lo;0;L;;;;;N;;;;; +13F5B;EGYPTIAN HIEROGLYPH-13F5B;Lo;0;L;;;;;N;;;;; +13F5C;EGYPTIAN HIEROGLYPH-13F5C;Lo;0;L;;;;;N;;;;; +13F5D;EGYPTIAN HIEROGLYPH-13F5D;Lo;0;L;;;;;N;;;;; +13F5E;EGYPTIAN HIEROGLYPH-13F5E;Lo;0;L;;;;;N;;;;; +13F5F;EGYPTIAN HIEROGLYPH-13F5F;Lo;0;L;;;;;N;;;;; +13F60;EGYPTIAN HIEROGLYPH-13F60;Lo;0;L;;;;;N;;;;; +13F61;EGYPTIAN HIEROGLYPH-13F61;Lo;0;L;;;;;N;;;;; +13F62;EGYPTIAN HIEROGLYPH-13F62;Lo;0;L;;;;;N;;;;; +13F63;EGYPTIAN HIEROGLYPH-13F63;Lo;0;L;;;;;N;;;;; +13F64;EGYPTIAN HIEROGLYPH-13F64;Lo;0;L;;;;;N;;;;; +13F65;EGYPTIAN HIEROGLYPH-13F65;Lo;0;L;;;;;N;;;;; +13F66;EGYPTIAN HIEROGLYPH-13F66;Lo;0;L;;;;;N;;;;; +13F67;EGYPTIAN HIEROGLYPH-13F67;Lo;0;L;;;;;N;;;;; +13F68;EGYPTIAN HIEROGLYPH-13F68;Lo;0;L;;;;;N;;;;; +13F69;EGYPTIAN HIEROGLYPH-13F69;Lo;0;L;;;;;N;;;;; +13F6A;EGYPTIAN HIEROGLYPH-13F6A;Lo;0;L;;;;;N;;;;; +13F6B;EGYPTIAN HIEROGLYPH-13F6B;Lo;0;L;;;;;N;;;;; +13F6C;EGYPTIAN HIEROGLYPH-13F6C;Lo;0;L;;;;;N;;;;; +13F6D;EGYPTIAN HIEROGLYPH-13F6D;Lo;0;L;;;;;N;;;;; +13F6E;EGYPTIAN HIEROGLYPH-13F6E;Lo;0;L;;;;;N;;;;; +13F6F;EGYPTIAN HIEROGLYPH-13F6F;Lo;0;L;;;;;N;;;;; +13F70;EGYPTIAN HIEROGLYPH-13F70;Lo;0;L;;;;;N;;;;; +13F71;EGYPTIAN HIEROGLYPH-13F71;Lo;0;L;;;;;N;;;;; +13F72;EGYPTIAN HIEROGLYPH-13F72;Lo;0;L;;;;;N;;;;; +13F73;EGYPTIAN HIEROGLYPH-13F73;Lo;0;L;;;;;N;;;;; +13F74;EGYPTIAN HIEROGLYPH-13F74;Lo;0;L;;;;;N;;;;; +13F75;EGYPTIAN HIEROGLYPH-13F75;Lo;0;L;;;;;N;;;;; +13F76;EGYPTIAN HIEROGLYPH-13F76;Lo;0;L;;;;;N;;;;; +13F77;EGYPTIAN HIEROGLYPH-13F77;Lo;0;L;;;;;N;;;;; +13F78;EGYPTIAN HIEROGLYPH-13F78;Lo;0;L;;;;;N;;;;; +13F79;EGYPTIAN HIEROGLYPH-13F79;Lo;0;L;;;;;N;;;;; +13F7A;EGYPTIAN HIEROGLYPH-13F7A;Lo;0;L;;;;;N;;;;; +13F7B;EGYPTIAN HIEROGLYPH-13F7B;Lo;0;L;;;;;N;;;;; +13F7C;EGYPTIAN HIEROGLYPH-13F7C;Lo;0;L;;;;;N;;;;; +13F7D;EGYPTIAN HIEROGLYPH-13F7D;Lo;0;L;;;;;N;;;;; +13F7E;EGYPTIAN HIEROGLYPH-13F7E;Lo;0;L;;;;;N;;;;; +13F7F;EGYPTIAN HIEROGLYPH-13F7F;Lo;0;L;;;;;N;;;;; +13F80;EGYPTIAN HIEROGLYPH-13F80;Lo;0;L;;;;;N;;;;; +13F81;EGYPTIAN HIEROGLYPH-13F81;Lo;0;L;;;;;N;;;;; +13F82;EGYPTIAN HIEROGLYPH-13F82;Lo;0;L;;;;;N;;;;; +13F83;EGYPTIAN HIEROGLYPH-13F83;Lo;0;L;;;;;N;;;;; +13F84;EGYPTIAN HIEROGLYPH-13F84;Lo;0;L;;;;;N;;;;; +13F85;EGYPTIAN HIEROGLYPH-13F85;Lo;0;L;;;;;N;;;;; +13F86;EGYPTIAN HIEROGLYPH-13F86;Lo;0;L;;;;;N;;;;; +13F87;EGYPTIAN HIEROGLYPH-13F87;Lo;0;L;;;;;N;;;;; +13F88;EGYPTIAN HIEROGLYPH-13F88;Lo;0;L;;;;;N;;;;; +13F89;EGYPTIAN HIEROGLYPH-13F89;Lo;0;L;;;;;N;;;;; +13F8A;EGYPTIAN HIEROGLYPH-13F8A;Lo;0;L;;;;;N;;;;; +13F8B;EGYPTIAN HIEROGLYPH-13F8B;Lo;0;L;;;;;N;;;;; +13F8C;EGYPTIAN HIEROGLYPH-13F8C;Lo;0;L;;;;;N;;;;; +13F8D;EGYPTIAN HIEROGLYPH-13F8D;Lo;0;L;;;;;N;;;;; +13F8E;EGYPTIAN HIEROGLYPH-13F8E;Lo;0;L;;;;;N;;;;; +13F8F;EGYPTIAN HIEROGLYPH-13F8F;Lo;0;L;;;;;N;;;;; +13F90;EGYPTIAN HIEROGLYPH-13F90;Lo;0;L;;;;;N;;;;; +13F91;EGYPTIAN HIEROGLYPH-13F91;Lo;0;L;;;;;N;;;;; +13F92;EGYPTIAN HIEROGLYPH-13F92;Lo;0;L;;;;;N;;;;; +13F93;EGYPTIAN HIEROGLYPH-13F93;Lo;0;L;;;;;N;;;;; +13F94;EGYPTIAN HIEROGLYPH-13F94;Lo;0;L;;;;;N;;;;; +13F95;EGYPTIAN HIEROGLYPH-13F95;Lo;0;L;;;;;N;;;;; +13F96;EGYPTIAN HIEROGLYPH-13F96;Lo;0;L;;;;;N;;;;; +13F97;EGYPTIAN HIEROGLYPH-13F97;Lo;0;L;;;;;N;;;;; +13F98;EGYPTIAN HIEROGLYPH-13F98;Lo;0;L;;;;;N;;;;; +13F99;EGYPTIAN HIEROGLYPH-13F99;Lo;0;L;;;;;N;;;;; +13F9A;EGYPTIAN HIEROGLYPH-13F9A;Lo;0;L;;;;;N;;;;; +13F9B;EGYPTIAN HIEROGLYPH-13F9B;Lo;0;L;;;;;N;;;;; +13F9C;EGYPTIAN HIEROGLYPH-13F9C;Lo;0;L;;;;;N;;;;; +13F9D;EGYPTIAN HIEROGLYPH-13F9D;Lo;0;L;;;;;N;;;;; +13F9E;EGYPTIAN HIEROGLYPH-13F9E;Lo;0;L;;;;;N;;;;; +13F9F;EGYPTIAN HIEROGLYPH-13F9F;Lo;0;L;;;;;N;;;;; +13FA0;EGYPTIAN HIEROGLYPH-13FA0;Lo;0;L;;;;;N;;;;; +13FA1;EGYPTIAN HIEROGLYPH-13FA1;Lo;0;L;;;;;N;;;;; +13FA2;EGYPTIAN HIEROGLYPH-13FA2;Lo;0;L;;;;;N;;;;; +13FA3;EGYPTIAN HIEROGLYPH-13FA3;Lo;0;L;;;;;N;;;;; +13FA4;EGYPTIAN HIEROGLYPH-13FA4;Lo;0;L;;;;;N;;;;; +13FA5;EGYPTIAN HIEROGLYPH-13FA5;Lo;0;L;;;;;N;;;;; +13FA6;EGYPTIAN HIEROGLYPH-13FA6;Lo;0;L;;;;;N;;;;; +13FA7;EGYPTIAN HIEROGLYPH-13FA7;Lo;0;L;;;;;N;;;;; +13FA8;EGYPTIAN HIEROGLYPH-13FA8;Lo;0;L;;;;;N;;;;; +13FA9;EGYPTIAN HIEROGLYPH-13FA9;Lo;0;L;;;;;N;;;;; +13FAA;EGYPTIAN HIEROGLYPH-13FAA;Lo;0;L;;;;;N;;;;; +13FAB;EGYPTIAN HIEROGLYPH-13FAB;Lo;0;L;;;;;N;;;;; +13FAC;EGYPTIAN HIEROGLYPH-13FAC;Lo;0;L;;;;;N;;;;; +13FAD;EGYPTIAN HIEROGLYPH-13FAD;Lo;0;L;;;;;N;;;;; +13FAE;EGYPTIAN HIEROGLYPH-13FAE;Lo;0;L;;;;;N;;;;; +13FAF;EGYPTIAN HIEROGLYPH-13FAF;Lo;0;L;;;;;N;;;;; +13FB0;EGYPTIAN HIEROGLYPH-13FB0;Lo;0;L;;;;;N;;;;; +13FB1;EGYPTIAN HIEROGLYPH-13FB1;Lo;0;L;;;;;N;;;;; +13FB2;EGYPTIAN HIEROGLYPH-13FB2;Lo;0;L;;;;;N;;;;; +13FB3;EGYPTIAN HIEROGLYPH-13FB3;Lo;0;L;;;;;N;;;;; +13FB4;EGYPTIAN HIEROGLYPH-13FB4;Lo;0;L;;;;;N;;;;; +13FB5;EGYPTIAN HIEROGLYPH-13FB5;Lo;0;L;;;;;N;;;;; +13FB6;EGYPTIAN HIEROGLYPH-13FB6;Lo;0;L;;;;;N;;;;; +13FB7;EGYPTIAN HIEROGLYPH-13FB7;Lo;0;L;;;;;N;;;;; +13FB8;EGYPTIAN HIEROGLYPH-13FB8;Lo;0;L;;;;;N;;;;; +13FB9;EGYPTIAN HIEROGLYPH-13FB9;Lo;0;L;;;;;N;;;;; +13FBA;EGYPTIAN HIEROGLYPH-13FBA;Lo;0;L;;;;;N;;;;; +13FBB;EGYPTIAN HIEROGLYPH-13FBB;Lo;0;L;;;;;N;;;;; +13FBC;EGYPTIAN HIEROGLYPH-13FBC;Lo;0;L;;;;;N;;;;; +13FBD;EGYPTIAN HIEROGLYPH-13FBD;Lo;0;L;;;;;N;;;;; +13FBE;EGYPTIAN HIEROGLYPH-13FBE;Lo;0;L;;;;;N;;;;; +13FBF;EGYPTIAN HIEROGLYPH-13FBF;Lo;0;L;;;;;N;;;;; +13FC0;EGYPTIAN HIEROGLYPH-13FC0;Lo;0;L;;;;;N;;;;; +13FC1;EGYPTIAN HIEROGLYPH-13FC1;Lo;0;L;;;;;N;;;;; +13FC2;EGYPTIAN HIEROGLYPH-13FC2;Lo;0;L;;;;;N;;;;; +13FC3;EGYPTIAN HIEROGLYPH-13FC3;Lo;0;L;;;;;N;;;;; +13FC4;EGYPTIAN HIEROGLYPH-13FC4;Lo;0;L;;;;;N;;;;; +13FC5;EGYPTIAN HIEROGLYPH-13FC5;Lo;0;L;;;;;N;;;;; +13FC6;EGYPTIAN HIEROGLYPH-13FC6;Lo;0;L;;;;;N;;;;; +13FC7;EGYPTIAN HIEROGLYPH-13FC7;Lo;0;L;;;;;N;;;;; +13FC8;EGYPTIAN HIEROGLYPH-13FC8;Lo;0;L;;;;;N;;;;; +13FC9;EGYPTIAN HIEROGLYPH-13FC9;Lo;0;L;;;;;N;;;;; +13FCA;EGYPTIAN HIEROGLYPH-13FCA;Lo;0;L;;;;;N;;;;; +13FCB;EGYPTIAN HIEROGLYPH-13FCB;Lo;0;L;;;;;N;;;;; +13FCC;EGYPTIAN HIEROGLYPH-13FCC;Lo;0;L;;;;;N;;;;; +13FCD;EGYPTIAN HIEROGLYPH-13FCD;Lo;0;L;;;;;N;;;;; +13FCE;EGYPTIAN HIEROGLYPH-13FCE;Lo;0;L;;;;;N;;;;; +13FCF;EGYPTIAN HIEROGLYPH-13FCF;Lo;0;L;;;;;N;;;;; +13FD0;EGYPTIAN HIEROGLYPH-13FD0;Lo;0;L;;;;;N;;;;; +13FD1;EGYPTIAN HIEROGLYPH-13FD1;Lo;0;L;;;;;N;;;;; +13FD2;EGYPTIAN HIEROGLYPH-13FD2;Lo;0;L;;;;;N;;;;; +13FD3;EGYPTIAN HIEROGLYPH-13FD3;Lo;0;L;;;;;N;;;;; +13FD4;EGYPTIAN HIEROGLYPH-13FD4;Lo;0;L;;;;;N;;;;; +13FD5;EGYPTIAN HIEROGLYPH-13FD5;Lo;0;L;;;;;N;;;;; +13FD6;EGYPTIAN HIEROGLYPH-13FD6;Lo;0;L;;;;;N;;;;; +13FD7;EGYPTIAN HIEROGLYPH-13FD7;Lo;0;L;;;;;N;;;;; +13FD8;EGYPTIAN HIEROGLYPH-13FD8;Lo;0;L;;;;;N;;;;; +13FD9;EGYPTIAN HIEROGLYPH-13FD9;Lo;0;L;;;;;N;;;;; +13FDA;EGYPTIAN HIEROGLYPH-13FDA;Lo;0;L;;;;;N;;;;; +13FDB;EGYPTIAN HIEROGLYPH-13FDB;Lo;0;L;;;;;N;;;;; +13FDC;EGYPTIAN HIEROGLYPH-13FDC;Lo;0;L;;;;;N;;;;; +13FDD;EGYPTIAN HIEROGLYPH-13FDD;Lo;0;L;;;;;N;;;;; +13FDE;EGYPTIAN HIEROGLYPH-13FDE;Lo;0;L;;;;;N;;;;; +13FDF;EGYPTIAN HIEROGLYPH-13FDF;Lo;0;L;;;;;N;;;;; +13FE0;EGYPTIAN HIEROGLYPH-13FE0;Lo;0;L;;;;;N;;;;; +13FE1;EGYPTIAN HIEROGLYPH-13FE1;Lo;0;L;;;;;N;;;;; +13FE2;EGYPTIAN HIEROGLYPH-13FE2;Lo;0;L;;;;;N;;;;; +13FE3;EGYPTIAN HIEROGLYPH-13FE3;Lo;0;L;;;;;N;;;;; +13FE4;EGYPTIAN HIEROGLYPH-13FE4;Lo;0;L;;;;;N;;;;; +13FE5;EGYPTIAN HIEROGLYPH-13FE5;Lo;0;L;;;;;N;;;;; +13FE6;EGYPTIAN HIEROGLYPH-13FE6;Lo;0;L;;;;;N;;;;; +13FE7;EGYPTIAN HIEROGLYPH-13FE7;Lo;0;L;;;;;N;;;;; +13FE8;EGYPTIAN HIEROGLYPH-13FE8;Lo;0;L;;;;;N;;;;; +13FE9;EGYPTIAN HIEROGLYPH-13FE9;Lo;0;L;;;;;N;;;;; +13FEA;EGYPTIAN HIEROGLYPH-13FEA;Lo;0;L;;;;;N;;;;; +13FEB;EGYPTIAN HIEROGLYPH-13FEB;Lo;0;L;;;;;N;;;;; +13FEC;EGYPTIAN HIEROGLYPH-13FEC;Lo;0;L;;;;;N;;;;; +13FED;EGYPTIAN HIEROGLYPH-13FED;Lo;0;L;;;;;N;;;;; +13FEE;EGYPTIAN HIEROGLYPH-13FEE;Lo;0;L;;;;;N;;;;; +13FEF;EGYPTIAN HIEROGLYPH-13FEF;Lo;0;L;;;;;N;;;;; +13FF0;EGYPTIAN HIEROGLYPH-13FF0;Lo;0;L;;;;;N;;;;; +13FF1;EGYPTIAN HIEROGLYPH-13FF1;Lo;0;L;;;;;N;;;;; +13FF2;EGYPTIAN HIEROGLYPH-13FF2;Lo;0;L;;;;;N;;;;; +13FF3;EGYPTIAN HIEROGLYPH-13FF3;Lo;0;L;;;;;N;;;;; +13FF4;EGYPTIAN HIEROGLYPH-13FF4;Lo;0;L;;;;;N;;;;; +13FF5;EGYPTIAN HIEROGLYPH-13FF5;Lo;0;L;;;;;N;;;;; +13FF6;EGYPTIAN HIEROGLYPH-13FF6;Lo;0;L;;;;;N;;;;; +13FF7;EGYPTIAN HIEROGLYPH-13FF7;Lo;0;L;;;;;N;;;;; +13FF8;EGYPTIAN HIEROGLYPH-13FF8;Lo;0;L;;;;;N;;;;; +13FF9;EGYPTIAN HIEROGLYPH-13FF9;Lo;0;L;;;;;N;;;;; +13FFA;EGYPTIAN HIEROGLYPH-13FFA;Lo;0;L;;;;;N;;;;; +13FFB;EGYPTIAN HIEROGLYPH-13FFB;Lo;0;L;;;;;N;;;;; +13FFC;EGYPTIAN HIEROGLYPH-13FFC;Lo;0;L;;;;;N;;;;; +13FFD;EGYPTIAN HIEROGLYPH-13FFD;Lo;0;L;;;;;N;;;;; +13FFE;EGYPTIAN HIEROGLYPH-13FFE;Lo;0;L;;;;;N;;;;; +13FFF;EGYPTIAN HIEROGLYPH-13FFF;Lo;0;L;;;;;N;;;;; +14000;EGYPTIAN HIEROGLYPH-14000;Lo;0;L;;;;;N;;;;; +14001;EGYPTIAN HIEROGLYPH-14001;Lo;0;L;;;;;N;;;;; +14002;EGYPTIAN HIEROGLYPH-14002;Lo;0;L;;;;;N;;;;; +14003;EGYPTIAN HIEROGLYPH-14003;Lo;0;L;;;;;N;;;;; +14004;EGYPTIAN HIEROGLYPH-14004;Lo;0;L;;;;;N;;;;; +14005;EGYPTIAN HIEROGLYPH-14005;Lo;0;L;;;;;N;;;;; +14006;EGYPTIAN HIEROGLYPH-14006;Lo;0;L;;;;;N;;;;; +14007;EGYPTIAN HIEROGLYPH-14007;Lo;0;L;;;;;N;;;;; +14008;EGYPTIAN HIEROGLYPH-14008;Lo;0;L;;;;;N;;;;; +14009;EGYPTIAN HIEROGLYPH-14009;Lo;0;L;;;;;N;;;;; +1400A;EGYPTIAN HIEROGLYPH-1400A;Lo;0;L;;;;;N;;;;; +1400B;EGYPTIAN HIEROGLYPH-1400B;Lo;0;L;;;;;N;;;;; +1400C;EGYPTIAN HIEROGLYPH-1400C;Lo;0;L;;;;;N;;;;; +1400D;EGYPTIAN HIEROGLYPH-1400D;Lo;0;L;;;;;N;;;;; +1400E;EGYPTIAN HIEROGLYPH-1400E;Lo;0;L;;;;;N;;;;; +1400F;EGYPTIAN HIEROGLYPH-1400F;Lo;0;L;;;;;N;;;;; +14010;EGYPTIAN HIEROGLYPH-14010;Lo;0;L;;;;;N;;;;; +14011;EGYPTIAN HIEROGLYPH-14011;Lo;0;L;;;;;N;;;;; +14012;EGYPTIAN HIEROGLYPH-14012;Lo;0;L;;;;;N;;;;; +14013;EGYPTIAN HIEROGLYPH-14013;Lo;0;L;;;;;N;;;;; +14014;EGYPTIAN HIEROGLYPH-14014;Lo;0;L;;;;;N;;;;; +14015;EGYPTIAN HIEROGLYPH-14015;Lo;0;L;;;;;N;;;;; +14016;EGYPTIAN HIEROGLYPH-14016;Lo;0;L;;;;;N;;;;; +14017;EGYPTIAN HIEROGLYPH-14017;Lo;0;L;;;;;N;;;;; +14018;EGYPTIAN HIEROGLYPH-14018;Lo;0;L;;;;;N;;;;; +14019;EGYPTIAN HIEROGLYPH-14019;Lo;0;L;;;;;N;;;;; +1401A;EGYPTIAN HIEROGLYPH-1401A;Lo;0;L;;;;;N;;;;; +1401B;EGYPTIAN HIEROGLYPH-1401B;Lo;0;L;;;;;N;;;;; +1401C;EGYPTIAN HIEROGLYPH-1401C;Lo;0;L;;;;;N;;;;; +1401D;EGYPTIAN HIEROGLYPH-1401D;Lo;0;L;;;;;N;;;;; +1401E;EGYPTIAN HIEROGLYPH-1401E;Lo;0;L;;;;;N;;;;; +1401F;EGYPTIAN HIEROGLYPH-1401F;Lo;0;L;;;;;N;;;;; +14020;EGYPTIAN HIEROGLYPH-14020;Lo;0;L;;;;;N;;;;; +14021;EGYPTIAN HIEROGLYPH-14021;Lo;0;L;;;;;N;;;;; +14022;EGYPTIAN HIEROGLYPH-14022;Lo;0;L;;;;;N;;;;; +14023;EGYPTIAN HIEROGLYPH-14023;Lo;0;L;;;;;N;;;;; +14024;EGYPTIAN HIEROGLYPH-14024;Lo;0;L;;;;;N;;;;; +14025;EGYPTIAN HIEROGLYPH-14025;Lo;0;L;;;;;N;;;;; +14026;EGYPTIAN HIEROGLYPH-14026;Lo;0;L;;;;;N;;;;; +14027;EGYPTIAN HIEROGLYPH-14027;Lo;0;L;;;;;N;;;;; +14028;EGYPTIAN HIEROGLYPH-14028;Lo;0;L;;;;;N;;;;; +14029;EGYPTIAN HIEROGLYPH-14029;Lo;0;L;;;;;N;;;;; +1402A;EGYPTIAN HIEROGLYPH-1402A;Lo;0;L;;;;;N;;;;; +1402B;EGYPTIAN HIEROGLYPH-1402B;Lo;0;L;;;;;N;;;;; +1402C;EGYPTIAN HIEROGLYPH-1402C;Lo;0;L;;;;;N;;;;; +1402D;EGYPTIAN HIEROGLYPH-1402D;Lo;0;L;;;;;N;;;;; +1402E;EGYPTIAN HIEROGLYPH-1402E;Lo;0;L;;;;;N;;;;; +1402F;EGYPTIAN HIEROGLYPH-1402F;Lo;0;L;;;;;N;;;;; +14030;EGYPTIAN HIEROGLYPH-14030;Lo;0;L;;;;;N;;;;; +14031;EGYPTIAN HIEROGLYPH-14031;Lo;0;L;;;;;N;;;;; +14032;EGYPTIAN HIEROGLYPH-14032;Lo;0;L;;;;;N;;;;; +14033;EGYPTIAN HIEROGLYPH-14033;Lo;0;L;;;;;N;;;;; +14034;EGYPTIAN HIEROGLYPH-14034;Lo;0;L;;;;;N;;;;; +14035;EGYPTIAN HIEROGLYPH-14035;Lo;0;L;;;;;N;;;;; +14036;EGYPTIAN HIEROGLYPH-14036;Lo;0;L;;;;;N;;;;; +14037;EGYPTIAN HIEROGLYPH-14037;Lo;0;L;;;;;N;;;;; +14038;EGYPTIAN HIEROGLYPH-14038;Lo;0;L;;;;;N;;;;; +14039;EGYPTIAN HIEROGLYPH-14039;Lo;0;L;;;;;N;;;;; +1403A;EGYPTIAN HIEROGLYPH-1403A;Lo;0;L;;;;;N;;;;; +1403B;EGYPTIAN HIEROGLYPH-1403B;Lo;0;L;;;;;N;;;;; +1403C;EGYPTIAN HIEROGLYPH-1403C;Lo;0;L;;;;;N;;;;; +1403D;EGYPTIAN HIEROGLYPH-1403D;Lo;0;L;;;;;N;;;;; +1403E;EGYPTIAN HIEROGLYPH-1403E;Lo;0;L;;;;;N;;;;; +1403F;EGYPTIAN HIEROGLYPH-1403F;Lo;0;L;;;;;N;;;;; +14040;EGYPTIAN HIEROGLYPH-14040;Lo;0;L;;;;;N;;;;; +14041;EGYPTIAN HIEROGLYPH-14041;Lo;0;L;;;;;N;;;;; +14042;EGYPTIAN HIEROGLYPH-14042;Lo;0;L;;;;;N;;;;; +14043;EGYPTIAN HIEROGLYPH-14043;Lo;0;L;;;;;N;;;;; +14044;EGYPTIAN HIEROGLYPH-14044;Lo;0;L;;;;;N;;;;; +14045;EGYPTIAN HIEROGLYPH-14045;Lo;0;L;;;;;N;;;;; +14046;EGYPTIAN HIEROGLYPH-14046;Lo;0;L;;;;;N;;;;; +14047;EGYPTIAN HIEROGLYPH-14047;Lo;0;L;;;;;N;;;;; +14048;EGYPTIAN HIEROGLYPH-14048;Lo;0;L;;;;;N;;;;; +14049;EGYPTIAN HIEROGLYPH-14049;Lo;0;L;;;;;N;;;;; +1404A;EGYPTIAN HIEROGLYPH-1404A;Lo;0;L;;;;;N;;;;; +1404B;EGYPTIAN HIEROGLYPH-1404B;Lo;0;L;;;;;N;;;;; +1404C;EGYPTIAN HIEROGLYPH-1404C;Lo;0;L;;;;;N;;;;; +1404D;EGYPTIAN HIEROGLYPH-1404D;Lo;0;L;;;;;N;;;;; +1404E;EGYPTIAN HIEROGLYPH-1404E;Lo;0;L;;;;;N;;;;; +1404F;EGYPTIAN HIEROGLYPH-1404F;Lo;0;L;;;;;N;;;;; +14050;EGYPTIAN HIEROGLYPH-14050;Lo;0;L;;;;;N;;;;; +14051;EGYPTIAN HIEROGLYPH-14051;Lo;0;L;;;;;N;;;;; +14052;EGYPTIAN HIEROGLYPH-14052;Lo;0;L;;;;;N;;;;; +14053;EGYPTIAN HIEROGLYPH-14053;Lo;0;L;;;;;N;;;;; +14054;EGYPTIAN HIEROGLYPH-14054;Lo;0;L;;;;;N;;;;; +14055;EGYPTIAN HIEROGLYPH-14055;Lo;0;L;;;;;N;;;;; +14056;EGYPTIAN HIEROGLYPH-14056;Lo;0;L;;;;;N;;;;; +14057;EGYPTIAN HIEROGLYPH-14057;Lo;0;L;;;;;N;;;;; +14058;EGYPTIAN HIEROGLYPH-14058;Lo;0;L;;;;;N;;;;; +14059;EGYPTIAN HIEROGLYPH-14059;Lo;0;L;;;;;N;;;;; +1405A;EGYPTIAN HIEROGLYPH-1405A;Lo;0;L;;;;;N;;;;; +1405B;EGYPTIAN HIEROGLYPH-1405B;Lo;0;L;;;;;N;;;;; +1405C;EGYPTIAN HIEROGLYPH-1405C;Lo;0;L;;;;;N;;;;; +1405D;EGYPTIAN HIEROGLYPH-1405D;Lo;0;L;;;;;N;;;;; +1405E;EGYPTIAN HIEROGLYPH-1405E;Lo;0;L;;;;;N;;;;; +1405F;EGYPTIAN HIEROGLYPH-1405F;Lo;0;L;;;;;N;;;;; +14060;EGYPTIAN HIEROGLYPH-14060;Lo;0;L;;;;;N;;;;; +14061;EGYPTIAN HIEROGLYPH-14061;Lo;0;L;;;;;N;;;;; +14062;EGYPTIAN HIEROGLYPH-14062;Lo;0;L;;;;;N;;;;; +14063;EGYPTIAN HIEROGLYPH-14063;Lo;0;L;;;;;N;;;;; +14064;EGYPTIAN HIEROGLYPH-14064;Lo;0;L;;;;;N;;;;; +14065;EGYPTIAN HIEROGLYPH-14065;Lo;0;L;;;;;N;;;;; +14066;EGYPTIAN HIEROGLYPH-14066;Lo;0;L;;;;;N;;;;; +14067;EGYPTIAN HIEROGLYPH-14067;Lo;0;L;;;;;N;;;;; +14068;EGYPTIAN HIEROGLYPH-14068;Lo;0;L;;;;;N;;;;; +14069;EGYPTIAN HIEROGLYPH-14069;Lo;0;L;;;;;N;;;;; +1406A;EGYPTIAN HIEROGLYPH-1406A;Lo;0;L;;;;;N;;;;; +1406B;EGYPTIAN HIEROGLYPH-1406B;Lo;0;L;;;;;N;;;;; +1406C;EGYPTIAN HIEROGLYPH-1406C;Lo;0;L;;;;;N;;;;; +1406D;EGYPTIAN HIEROGLYPH-1406D;Lo;0;L;;;;;N;;;;; +1406E;EGYPTIAN HIEROGLYPH-1406E;Lo;0;L;;;;;N;;;;; +1406F;EGYPTIAN HIEROGLYPH-1406F;Lo;0;L;;;;;N;;;;; +14070;EGYPTIAN HIEROGLYPH-14070;Lo;0;L;;;;;N;;;;; +14071;EGYPTIAN HIEROGLYPH-14071;Lo;0;L;;;;;N;;;;; +14072;EGYPTIAN HIEROGLYPH-14072;Lo;0;L;;;;;N;;;;; +14073;EGYPTIAN HIEROGLYPH-14073;Lo;0;L;;;;;N;;;;; +14074;EGYPTIAN HIEROGLYPH-14074;Lo;0;L;;;;;N;;;;; +14075;EGYPTIAN HIEROGLYPH-14075;Lo;0;L;;;;;N;;;;; +14076;EGYPTIAN HIEROGLYPH-14076;Lo;0;L;;;;;N;;;;; +14077;EGYPTIAN HIEROGLYPH-14077;Lo;0;L;;;;;N;;;;; +14078;EGYPTIAN HIEROGLYPH-14078;Lo;0;L;;;;;N;;;;; +14079;EGYPTIAN HIEROGLYPH-14079;Lo;0;L;;;;;N;;;;; +1407A;EGYPTIAN HIEROGLYPH-1407A;Lo;0;L;;;;;N;;;;; +1407B;EGYPTIAN HIEROGLYPH-1407B;Lo;0;L;;;;;N;;;;; +1407C;EGYPTIAN HIEROGLYPH-1407C;Lo;0;L;;;;;N;;;;; +1407D;EGYPTIAN HIEROGLYPH-1407D;Lo;0;L;;;;;N;;;;; +1407E;EGYPTIAN HIEROGLYPH-1407E;Lo;0;L;;;;;N;;;;; +1407F;EGYPTIAN HIEROGLYPH-1407F;Lo;0;L;;;;;N;;;;; +14080;EGYPTIAN HIEROGLYPH-14080;Lo;0;L;;;;;N;;;;; +14081;EGYPTIAN HIEROGLYPH-14081;Lo;0;L;;;;;N;;;;; +14082;EGYPTIAN HIEROGLYPH-14082;Lo;0;L;;;;;N;;;;; +14083;EGYPTIAN HIEROGLYPH-14083;Lo;0;L;;;;;N;;;;; +14084;EGYPTIAN HIEROGLYPH-14084;Lo;0;L;;;;;N;;;;; +14085;EGYPTIAN HIEROGLYPH-14085;Lo;0;L;;;;;N;;;;; +14086;EGYPTIAN HIEROGLYPH-14086;Lo;0;L;;;;;N;;;;; +14087;EGYPTIAN HIEROGLYPH-14087;Lo;0;L;;;;;N;;;;; +14088;EGYPTIAN HIEROGLYPH-14088;Lo;0;L;;;;;N;;;;; +14089;EGYPTIAN HIEROGLYPH-14089;Lo;0;L;;;;;N;;;;; +1408A;EGYPTIAN HIEROGLYPH-1408A;Lo;0;L;;;;;N;;;;; +1408B;EGYPTIAN HIEROGLYPH-1408B;Lo;0;L;;;;;N;;;;; +1408C;EGYPTIAN HIEROGLYPH-1408C;Lo;0;L;;;;;N;;;;; +1408D;EGYPTIAN HIEROGLYPH-1408D;Lo;0;L;;;;;N;;;;; +1408E;EGYPTIAN HIEROGLYPH-1408E;Lo;0;L;;;;;N;;;;; +1408F;EGYPTIAN HIEROGLYPH-1408F;Lo;0;L;;;;;N;;;;; +14090;EGYPTIAN HIEROGLYPH-14090;Lo;0;L;;;;;N;;;;; +14091;EGYPTIAN HIEROGLYPH-14091;Lo;0;L;;;;;N;;;;; +14092;EGYPTIAN HIEROGLYPH-14092;Lo;0;L;;;;;N;;;;; +14093;EGYPTIAN HIEROGLYPH-14093;Lo;0;L;;;;;N;;;;; +14094;EGYPTIAN HIEROGLYPH-14094;Lo;0;L;;;;;N;;;;; +14095;EGYPTIAN HIEROGLYPH-14095;Lo;0;L;;;;;N;;;;; +14096;EGYPTIAN HIEROGLYPH-14096;Lo;0;L;;;;;N;;;;; +14097;EGYPTIAN HIEROGLYPH-14097;Lo;0;L;;;;;N;;;;; +14098;EGYPTIAN HIEROGLYPH-14098;Lo;0;L;;;;;N;;;;; +14099;EGYPTIAN HIEROGLYPH-14099;Lo;0;L;;;;;N;;;;; +1409A;EGYPTIAN HIEROGLYPH-1409A;Lo;0;L;;;;;N;;;;; +1409B;EGYPTIAN HIEROGLYPH-1409B;Lo;0;L;;;;;N;;;;; +1409C;EGYPTIAN HIEROGLYPH-1409C;Lo;0;L;;;;;N;;;;; +1409D;EGYPTIAN HIEROGLYPH-1409D;Lo;0;L;;;;;N;;;;; +1409E;EGYPTIAN HIEROGLYPH-1409E;Lo;0;L;;;;;N;;;;; +1409F;EGYPTIAN HIEROGLYPH-1409F;Lo;0;L;;;;;N;;;;; +140A0;EGYPTIAN HIEROGLYPH-140A0;Lo;0;L;;;;;N;;;;; +140A1;EGYPTIAN HIEROGLYPH-140A1;Lo;0;L;;;;;N;;;;; +140A2;EGYPTIAN HIEROGLYPH-140A2;Lo;0;L;;;;;N;;;;; +140A3;EGYPTIAN HIEROGLYPH-140A3;Lo;0;L;;;;;N;;;;; +140A4;EGYPTIAN HIEROGLYPH-140A4;Lo;0;L;;;;;N;;;;; +140A5;EGYPTIAN HIEROGLYPH-140A5;Lo;0;L;;;;;N;;;;; +140A6;EGYPTIAN HIEROGLYPH-140A6;Lo;0;L;;;;;N;;;;; +140A7;EGYPTIAN HIEROGLYPH-140A7;Lo;0;L;;;;;N;;;;; +140A8;EGYPTIAN HIEROGLYPH-140A8;Lo;0;L;;;;;N;;;;; +140A9;EGYPTIAN HIEROGLYPH-140A9;Lo;0;L;;;;;N;;;;; +140AA;EGYPTIAN HIEROGLYPH-140AA;Lo;0;L;;;;;N;;;;; +140AB;EGYPTIAN HIEROGLYPH-140AB;Lo;0;L;;;;;N;;;;; +140AC;EGYPTIAN HIEROGLYPH-140AC;Lo;0;L;;;;;N;;;;; +140AD;EGYPTIAN HIEROGLYPH-140AD;Lo;0;L;;;;;N;;;;; +140AE;EGYPTIAN HIEROGLYPH-140AE;Lo;0;L;;;;;N;;;;; +140AF;EGYPTIAN HIEROGLYPH-140AF;Lo;0;L;;;;;N;;;;; +140B0;EGYPTIAN HIEROGLYPH-140B0;Lo;0;L;;;;;N;;;;; +140B1;EGYPTIAN HIEROGLYPH-140B1;Lo;0;L;;;;;N;;;;; +140B2;EGYPTIAN HIEROGLYPH-140B2;Lo;0;L;;;;;N;;;;; +140B3;EGYPTIAN HIEROGLYPH-140B3;Lo;0;L;;;;;N;;;;; +140B4;EGYPTIAN HIEROGLYPH-140B4;Lo;0;L;;;;;N;;;;; +140B5;EGYPTIAN HIEROGLYPH-140B5;Lo;0;L;;;;;N;;;;; +140B6;EGYPTIAN HIEROGLYPH-140B6;Lo;0;L;;;;;N;;;;; +140B7;EGYPTIAN HIEROGLYPH-140B7;Lo;0;L;;;;;N;;;;; +140B8;EGYPTIAN HIEROGLYPH-140B8;Lo;0;L;;;;;N;;;;; +140B9;EGYPTIAN HIEROGLYPH-140B9;Lo;0;L;;;;;N;;;;; +140BA;EGYPTIAN HIEROGLYPH-140BA;Lo;0;L;;;;;N;;;;; +140BB;EGYPTIAN HIEROGLYPH-140BB;Lo;0;L;;;;;N;;;;; +140BC;EGYPTIAN HIEROGLYPH-140BC;Lo;0;L;;;;;N;;;;; +140BD;EGYPTIAN HIEROGLYPH-140BD;Lo;0;L;;;;;N;;;;; +140BE;EGYPTIAN HIEROGLYPH-140BE;Lo;0;L;;;;;N;;;;; +140BF;EGYPTIAN HIEROGLYPH-140BF;Lo;0;L;;;;;N;;;;; +140C0;EGYPTIAN HIEROGLYPH-140C0;Lo;0;L;;;;;N;;;;; +140C1;EGYPTIAN HIEROGLYPH-140C1;Lo;0;L;;;;;N;;;;; +140C2;EGYPTIAN HIEROGLYPH-140C2;Lo;0;L;;;;;N;;;;; +140C3;EGYPTIAN HIEROGLYPH-140C3;Lo;0;L;;;;;N;;;;; +140C4;EGYPTIAN HIEROGLYPH-140C4;Lo;0;L;;;;;N;;;;; +140C5;EGYPTIAN HIEROGLYPH-140C5;Lo;0;L;;;;;N;;;;; +140C6;EGYPTIAN HIEROGLYPH-140C6;Lo;0;L;;;;;N;;;;; +140C7;EGYPTIAN HIEROGLYPH-140C7;Lo;0;L;;;;;N;;;;; +140C8;EGYPTIAN HIEROGLYPH-140C8;Lo;0;L;;;;;N;;;;; +140C9;EGYPTIAN HIEROGLYPH-140C9;Lo;0;L;;;;;N;;;;; +140CA;EGYPTIAN HIEROGLYPH-140CA;Lo;0;L;;;;;N;;;;; +140CB;EGYPTIAN HIEROGLYPH-140CB;Lo;0;L;;;;;N;;;;; +140CC;EGYPTIAN HIEROGLYPH-140CC;Lo;0;L;;;;;N;;;;; +140CD;EGYPTIAN HIEROGLYPH-140CD;Lo;0;L;;;;;N;;;;; +140CE;EGYPTIAN HIEROGLYPH-140CE;Lo;0;L;;;;;N;;;;; +140CF;EGYPTIAN HIEROGLYPH-140CF;Lo;0;L;;;;;N;;;;; +140D0;EGYPTIAN HIEROGLYPH-140D0;Lo;0;L;;;;;N;;;;; +140D1;EGYPTIAN HIEROGLYPH-140D1;Lo;0;L;;;;;N;;;;; +140D2;EGYPTIAN HIEROGLYPH-140D2;Lo;0;L;;;;;N;;;;; +140D3;EGYPTIAN HIEROGLYPH-140D3;Lo;0;L;;;;;N;;;;; +140D4;EGYPTIAN HIEROGLYPH-140D4;Lo;0;L;;;;;N;;;;; +140D5;EGYPTIAN HIEROGLYPH-140D5;Lo;0;L;;;;;N;;;;; +140D6;EGYPTIAN HIEROGLYPH-140D6;Lo;0;L;;;;;N;;;;; +140D7;EGYPTIAN HIEROGLYPH-140D7;Lo;0;L;;;;;N;;;;; +140D8;EGYPTIAN HIEROGLYPH-140D8;Lo;0;L;;;;;N;;;;; +140D9;EGYPTIAN HIEROGLYPH-140D9;Lo;0;L;;;;;N;;;;; +140DA;EGYPTIAN HIEROGLYPH-140DA;Lo;0;L;;;;;N;;;;; +140DB;EGYPTIAN HIEROGLYPH-140DB;Lo;0;L;;;;;N;;;;; +140DC;EGYPTIAN HIEROGLYPH-140DC;Lo;0;L;;;;;N;;;;; +140DD;EGYPTIAN HIEROGLYPH-140DD;Lo;0;L;;;;;N;;;;; +140DE;EGYPTIAN HIEROGLYPH-140DE;Lo;0;L;;;;;N;;;;; +140DF;EGYPTIAN HIEROGLYPH-140DF;Lo;0;L;;;;;N;;;;; +140E0;EGYPTIAN HIEROGLYPH-140E0;Lo;0;L;;;;;N;;;;; +140E1;EGYPTIAN HIEROGLYPH-140E1;Lo;0;L;;;;;N;;;;; +140E2;EGYPTIAN HIEROGLYPH-140E2;Lo;0;L;;;;;N;;;;; +140E3;EGYPTIAN HIEROGLYPH-140E3;Lo;0;L;;;;;N;;;;; +140E4;EGYPTIAN HIEROGLYPH-140E4;Lo;0;L;;;;;N;;;;; +140E5;EGYPTIAN HIEROGLYPH-140E5;Lo;0;L;;;;;N;;;;; +140E6;EGYPTIAN HIEROGLYPH-140E6;Lo;0;L;;;;;N;;;;; +140E7;EGYPTIAN HIEROGLYPH-140E7;Lo;0;L;;;;;N;;;;; +140E8;EGYPTIAN HIEROGLYPH-140E8;Lo;0;L;;;;;N;;;;; +140E9;EGYPTIAN HIEROGLYPH-140E9;Lo;0;L;;;;;N;;;;; +140EA;EGYPTIAN HIEROGLYPH-140EA;Lo;0;L;;;;;N;;;;; +140EB;EGYPTIAN HIEROGLYPH-140EB;Lo;0;L;;;;;N;;;;; +140EC;EGYPTIAN HIEROGLYPH-140EC;Lo;0;L;;;;;N;;;;; +140ED;EGYPTIAN HIEROGLYPH-140ED;Lo;0;L;;;;;N;;;;; +140EE;EGYPTIAN HIEROGLYPH-140EE;Lo;0;L;;;;;N;;;;; +140EF;EGYPTIAN HIEROGLYPH-140EF;Lo;0;L;;;;;N;;;;; +140F0;EGYPTIAN HIEROGLYPH-140F0;Lo;0;L;;;;;N;;;;; +140F1;EGYPTIAN HIEROGLYPH-140F1;Lo;0;L;;;;;N;;;;; +140F2;EGYPTIAN HIEROGLYPH-140F2;Lo;0;L;;;;;N;;;;; +140F3;EGYPTIAN HIEROGLYPH-140F3;Lo;0;L;;;;;N;;;;; +140F4;EGYPTIAN HIEROGLYPH-140F4;Lo;0;L;;;;;N;;;;; +140F5;EGYPTIAN HIEROGLYPH-140F5;Lo;0;L;;;;;N;;;;; +140F6;EGYPTIAN HIEROGLYPH-140F6;Lo;0;L;;;;;N;;;;; +140F7;EGYPTIAN HIEROGLYPH-140F7;Lo;0;L;;;;;N;;;;; +140F8;EGYPTIAN HIEROGLYPH-140F8;Lo;0;L;;;;;N;;;;; +140F9;EGYPTIAN HIEROGLYPH-140F9;Lo;0;L;;;;;N;;;;; +140FA;EGYPTIAN HIEROGLYPH-140FA;Lo;0;L;;;;;N;;;;; +140FB;EGYPTIAN HIEROGLYPH-140FB;Lo;0;L;;;;;N;;;;; +140FC;EGYPTIAN HIEROGLYPH-140FC;Lo;0;L;;;;;N;;;;; +140FD;EGYPTIAN HIEROGLYPH-140FD;Lo;0;L;;;;;N;;;;; +140FE;EGYPTIAN HIEROGLYPH-140FE;Lo;0;L;;;;;N;;;;; +140FF;EGYPTIAN HIEROGLYPH-140FF;Lo;0;L;;;;;N;;;;; +14100;EGYPTIAN HIEROGLYPH-14100;Lo;0;L;;;;;N;;;;; +14101;EGYPTIAN HIEROGLYPH-14101;Lo;0;L;;;;;N;;;;; +14102;EGYPTIAN HIEROGLYPH-14102;Lo;0;L;;;;;N;;;;; +14103;EGYPTIAN HIEROGLYPH-14103;Lo;0;L;;;;;N;;;;; +14104;EGYPTIAN HIEROGLYPH-14104;Lo;0;L;;;;;N;;;;; +14105;EGYPTIAN HIEROGLYPH-14105;Lo;0;L;;;;;N;;;;; +14106;EGYPTIAN HIEROGLYPH-14106;Lo;0;L;;;;;N;;;;; +14107;EGYPTIAN HIEROGLYPH-14107;Lo;0;L;;;;;N;;;;; +14108;EGYPTIAN HIEROGLYPH-14108;Lo;0;L;;;;;N;;;;; +14109;EGYPTIAN HIEROGLYPH-14109;Lo;0;L;;;;;N;;;;; +1410A;EGYPTIAN HIEROGLYPH-1410A;Lo;0;L;;;;;N;;;;; +1410B;EGYPTIAN HIEROGLYPH-1410B;Lo;0;L;;;;;N;;;;; +1410C;EGYPTIAN HIEROGLYPH-1410C;Lo;0;L;;;;;N;;;;; +1410D;EGYPTIAN HIEROGLYPH-1410D;Lo;0;L;;;;;N;;;;; +1410E;EGYPTIAN HIEROGLYPH-1410E;Lo;0;L;;;;;N;;;;; +1410F;EGYPTIAN HIEROGLYPH-1410F;Lo;0;L;;;;;N;;;;; +14110;EGYPTIAN HIEROGLYPH-14110;Lo;0;L;;;;;N;;;;; +14111;EGYPTIAN HIEROGLYPH-14111;Lo;0;L;;;;;N;;;;; +14112;EGYPTIAN HIEROGLYPH-14112;Lo;0;L;;;;;N;;;;; +14113;EGYPTIAN HIEROGLYPH-14113;Lo;0;L;;;;;N;;;;; +14114;EGYPTIAN HIEROGLYPH-14114;Lo;0;L;;;;;N;;;;; +14115;EGYPTIAN HIEROGLYPH-14115;Lo;0;L;;;;;N;;;;; +14116;EGYPTIAN HIEROGLYPH-14116;Lo;0;L;;;;;N;;;;; +14117;EGYPTIAN HIEROGLYPH-14117;Lo;0;L;;;;;N;;;;; +14118;EGYPTIAN HIEROGLYPH-14118;Lo;0;L;;;;;N;;;;; +14119;EGYPTIAN HIEROGLYPH-14119;Lo;0;L;;;;;N;;;;; +1411A;EGYPTIAN HIEROGLYPH-1411A;Lo;0;L;;;;;N;;;;; +1411B;EGYPTIAN HIEROGLYPH-1411B;Lo;0;L;;;;;N;;;;; +1411C;EGYPTIAN HIEROGLYPH-1411C;Lo;0;L;;;;;N;;;;; +1411D;EGYPTIAN HIEROGLYPH-1411D;Lo;0;L;;;;;N;;;;; +1411E;EGYPTIAN HIEROGLYPH-1411E;Lo;0;L;;;;;N;;;;; +1411F;EGYPTIAN HIEROGLYPH-1411F;Lo;0;L;;;;;N;;;;; +14120;EGYPTIAN HIEROGLYPH-14120;Lo;0;L;;;;;N;;;;; +14121;EGYPTIAN HIEROGLYPH-14121;Lo;0;L;;;;;N;;;;; +14122;EGYPTIAN HIEROGLYPH-14122;Lo;0;L;;;;;N;;;;; +14123;EGYPTIAN HIEROGLYPH-14123;Lo;0;L;;;;;N;;;;; +14124;EGYPTIAN HIEROGLYPH-14124;Lo;0;L;;;;;N;;;;; +14125;EGYPTIAN HIEROGLYPH-14125;Lo;0;L;;;;;N;;;;; +14126;EGYPTIAN HIEROGLYPH-14126;Lo;0;L;;;;;N;;;;; +14127;EGYPTIAN HIEROGLYPH-14127;Lo;0;L;;;;;N;;;;; +14128;EGYPTIAN HIEROGLYPH-14128;Lo;0;L;;;;;N;;;;; +14129;EGYPTIAN HIEROGLYPH-14129;Lo;0;L;;;;;N;;;;; +1412A;EGYPTIAN HIEROGLYPH-1412A;Lo;0;L;;;;;N;;;;; +1412B;EGYPTIAN HIEROGLYPH-1412B;Lo;0;L;;;;;N;;;;; +1412C;EGYPTIAN HIEROGLYPH-1412C;Lo;0;L;;;;;N;;;;; +1412D;EGYPTIAN HIEROGLYPH-1412D;Lo;0;L;;;;;N;;;;; +1412E;EGYPTIAN HIEROGLYPH-1412E;Lo;0;L;;;;;N;;;;; +1412F;EGYPTIAN HIEROGLYPH-1412F;Lo;0;L;;;;;N;;;;; +14130;EGYPTIAN HIEROGLYPH-14130;Lo;0;L;;;;;N;;;;; +14131;EGYPTIAN HIEROGLYPH-14131;Lo;0;L;;;;;N;;;;; +14132;EGYPTIAN HIEROGLYPH-14132;Lo;0;L;;;;;N;;;;; +14133;EGYPTIAN HIEROGLYPH-14133;Lo;0;L;;;;;N;;;;; +14134;EGYPTIAN HIEROGLYPH-14134;Lo;0;L;;;;;N;;;;; +14135;EGYPTIAN HIEROGLYPH-14135;Lo;0;L;;;;;N;;;;; +14136;EGYPTIAN HIEROGLYPH-14136;Lo;0;L;;;;;N;;;;; +14137;EGYPTIAN HIEROGLYPH-14137;Lo;0;L;;;;;N;;;;; +14138;EGYPTIAN HIEROGLYPH-14138;Lo;0;L;;;;;N;;;;; +14139;EGYPTIAN HIEROGLYPH-14139;Lo;0;L;;;;;N;;;;; +1413A;EGYPTIAN HIEROGLYPH-1413A;Lo;0;L;;;;;N;;;;; +1413B;EGYPTIAN HIEROGLYPH-1413B;Lo;0;L;;;;;N;;;;; +1413C;EGYPTIAN HIEROGLYPH-1413C;Lo;0;L;;;;;N;;;;; +1413D;EGYPTIAN HIEROGLYPH-1413D;Lo;0;L;;;;;N;;;;; +1413E;EGYPTIAN HIEROGLYPH-1413E;Lo;0;L;;;;;N;;;;; +1413F;EGYPTIAN HIEROGLYPH-1413F;Lo;0;L;;;;;N;;;;; +14140;EGYPTIAN HIEROGLYPH-14140;Lo;0;L;;;;;N;;;;; +14141;EGYPTIAN HIEROGLYPH-14141;Lo;0;L;;;;;N;;;;; +14142;EGYPTIAN HIEROGLYPH-14142;Lo;0;L;;;;;N;;;;; +14143;EGYPTIAN HIEROGLYPH-14143;Lo;0;L;;;;;N;;;;; +14144;EGYPTIAN HIEROGLYPH-14144;Lo;0;L;;;;;N;;;;; +14145;EGYPTIAN HIEROGLYPH-14145;Lo;0;L;;;;;N;;;;; +14146;EGYPTIAN HIEROGLYPH-14146;Lo;0;L;;;;;N;;;;; +14147;EGYPTIAN HIEROGLYPH-14147;Lo;0;L;;;;;N;;;;; +14148;EGYPTIAN HIEROGLYPH-14148;Lo;0;L;;;;;N;;;;; +14149;EGYPTIAN HIEROGLYPH-14149;Lo;0;L;;;;;N;;;;; +1414A;EGYPTIAN HIEROGLYPH-1414A;Lo;0;L;;;;;N;;;;; +1414B;EGYPTIAN HIEROGLYPH-1414B;Lo;0;L;;;;;N;;;;; +1414C;EGYPTIAN HIEROGLYPH-1414C;Lo;0;L;;;;;N;;;;; +1414D;EGYPTIAN HIEROGLYPH-1414D;Lo;0;L;;;;;N;;;;; +1414E;EGYPTIAN HIEROGLYPH-1414E;Lo;0;L;;;;;N;;;;; +1414F;EGYPTIAN HIEROGLYPH-1414F;Lo;0;L;;;;;N;;;;; +14150;EGYPTIAN HIEROGLYPH-14150;Lo;0;L;;;;;N;;;;; +14151;EGYPTIAN HIEROGLYPH-14151;Lo;0;L;;;;;N;;;;; +14152;EGYPTIAN HIEROGLYPH-14152;Lo;0;L;;;;;N;;;;; +14153;EGYPTIAN HIEROGLYPH-14153;Lo;0;L;;;;;N;;;;; +14154;EGYPTIAN HIEROGLYPH-14154;Lo;0;L;;;;;N;;;;; +14155;EGYPTIAN HIEROGLYPH-14155;Lo;0;L;;;;;N;;;;; +14156;EGYPTIAN HIEROGLYPH-14156;Lo;0;L;;;;;N;;;;; +14157;EGYPTIAN HIEROGLYPH-14157;Lo;0;L;;;;;N;;;;; +14158;EGYPTIAN HIEROGLYPH-14158;Lo;0;L;;;;;N;;;;; +14159;EGYPTIAN HIEROGLYPH-14159;Lo;0;L;;;;;N;;;;; +1415A;EGYPTIAN HIEROGLYPH-1415A;Lo;0;L;;;;;N;;;;; +1415B;EGYPTIAN HIEROGLYPH-1415B;Lo;0;L;;;;;N;;;;; +1415C;EGYPTIAN HIEROGLYPH-1415C;Lo;0;L;;;;;N;;;;; +1415D;EGYPTIAN HIEROGLYPH-1415D;Lo;0;L;;;;;N;;;;; +1415E;EGYPTIAN HIEROGLYPH-1415E;Lo;0;L;;;;;N;;;;; +1415F;EGYPTIAN HIEROGLYPH-1415F;Lo;0;L;;;;;N;;;;; +14160;EGYPTIAN HIEROGLYPH-14160;Lo;0;L;;;;;N;;;;; +14161;EGYPTIAN HIEROGLYPH-14161;Lo;0;L;;;;;N;;;;; +14162;EGYPTIAN HIEROGLYPH-14162;Lo;0;L;;;;;N;;;;; +14163;EGYPTIAN HIEROGLYPH-14163;Lo;0;L;;;;;N;;;;; +14164;EGYPTIAN HIEROGLYPH-14164;Lo;0;L;;;;;N;;;;; +14165;EGYPTIAN HIEROGLYPH-14165;Lo;0;L;;;;;N;;;;; +14166;EGYPTIAN HIEROGLYPH-14166;Lo;0;L;;;;;N;;;;; +14167;EGYPTIAN HIEROGLYPH-14167;Lo;0;L;;;;;N;;;;; +14168;EGYPTIAN HIEROGLYPH-14168;Lo;0;L;;;;;N;;;;; +14169;EGYPTIAN HIEROGLYPH-14169;Lo;0;L;;;;;N;;;;; +1416A;EGYPTIAN HIEROGLYPH-1416A;Lo;0;L;;;;;N;;;;; +1416B;EGYPTIAN HIEROGLYPH-1416B;Lo;0;L;;;;;N;;;;; +1416C;EGYPTIAN HIEROGLYPH-1416C;Lo;0;L;;;;;N;;;;; +1416D;EGYPTIAN HIEROGLYPH-1416D;Lo;0;L;;;;;N;;;;; +1416E;EGYPTIAN HIEROGLYPH-1416E;Lo;0;L;;;;;N;;;;; +1416F;EGYPTIAN HIEROGLYPH-1416F;Lo;0;L;;;;;N;;;;; +14170;EGYPTIAN HIEROGLYPH-14170;Lo;0;L;;;;;N;;;;; +14171;EGYPTIAN HIEROGLYPH-14171;Lo;0;L;;;;;N;;;;; +14172;EGYPTIAN HIEROGLYPH-14172;Lo;0;L;;;;;N;;;;; +14173;EGYPTIAN HIEROGLYPH-14173;Lo;0;L;;;;;N;;;;; +14174;EGYPTIAN HIEROGLYPH-14174;Lo;0;L;;;;;N;;;;; +14175;EGYPTIAN HIEROGLYPH-14175;Lo;0;L;;;;;N;;;;; +14176;EGYPTIAN HIEROGLYPH-14176;Lo;0;L;;;;;N;;;;; +14177;EGYPTIAN HIEROGLYPH-14177;Lo;0;L;;;;;N;;;;; +14178;EGYPTIAN HIEROGLYPH-14178;Lo;0;L;;;;;N;;;;; +14179;EGYPTIAN HIEROGLYPH-14179;Lo;0;L;;;;;N;;;;; +1417A;EGYPTIAN HIEROGLYPH-1417A;Lo;0;L;;;;;N;;;;; +1417B;EGYPTIAN HIEROGLYPH-1417B;Lo;0;L;;;;;N;;;;; +1417C;EGYPTIAN HIEROGLYPH-1417C;Lo;0;L;;;;;N;;;;; +1417D;EGYPTIAN HIEROGLYPH-1417D;Lo;0;L;;;;;N;;;;; +1417E;EGYPTIAN HIEROGLYPH-1417E;Lo;0;L;;;;;N;;;;; +1417F;EGYPTIAN HIEROGLYPH-1417F;Lo;0;L;;;;;N;;;;; +14180;EGYPTIAN HIEROGLYPH-14180;Lo;0;L;;;;;N;;;;; +14181;EGYPTIAN HIEROGLYPH-14181;Lo;0;L;;;;;N;;;;; +14182;EGYPTIAN HIEROGLYPH-14182;Lo;0;L;;;;;N;;;;; +14183;EGYPTIAN HIEROGLYPH-14183;Lo;0;L;;;;;N;;;;; +14184;EGYPTIAN HIEROGLYPH-14184;Lo;0;L;;;;;N;;;;; +14185;EGYPTIAN HIEROGLYPH-14185;Lo;0;L;;;;;N;;;;; +14186;EGYPTIAN HIEROGLYPH-14186;Lo;0;L;;;;;N;;;;; +14187;EGYPTIAN HIEROGLYPH-14187;Lo;0;L;;;;;N;;;;; +14188;EGYPTIAN HIEROGLYPH-14188;Lo;0;L;;;;;N;;;;; +14189;EGYPTIAN HIEROGLYPH-14189;Lo;0;L;;;;;N;;;;; +1418A;EGYPTIAN HIEROGLYPH-1418A;Lo;0;L;;;;;N;;;;; +1418B;EGYPTIAN HIEROGLYPH-1418B;Lo;0;L;;;;;N;;;;; +1418C;EGYPTIAN HIEROGLYPH-1418C;Lo;0;L;;;;;N;;;;; +1418D;EGYPTIAN HIEROGLYPH-1418D;Lo;0;L;;;;;N;;;;; +1418E;EGYPTIAN HIEROGLYPH-1418E;Lo;0;L;;;;;N;;;;; +1418F;EGYPTIAN HIEROGLYPH-1418F;Lo;0;L;;;;;N;;;;; +14190;EGYPTIAN HIEROGLYPH-14190;Lo;0;L;;;;;N;;;;; +14191;EGYPTIAN HIEROGLYPH-14191;Lo;0;L;;;;;N;;;;; +14192;EGYPTIAN HIEROGLYPH-14192;Lo;0;L;;;;;N;;;;; +14193;EGYPTIAN HIEROGLYPH-14193;Lo;0;L;;;;;N;;;;; +14194;EGYPTIAN HIEROGLYPH-14194;Lo;0;L;;;;;N;;;;; +14195;EGYPTIAN HIEROGLYPH-14195;Lo;0;L;;;;;N;;;;; +14196;EGYPTIAN HIEROGLYPH-14196;Lo;0;L;;;;;N;;;;; +14197;EGYPTIAN HIEROGLYPH-14197;Lo;0;L;;;;;N;;;;; +14198;EGYPTIAN HIEROGLYPH-14198;Lo;0;L;;;;;N;;;;; +14199;EGYPTIAN HIEROGLYPH-14199;Lo;0;L;;;;;N;;;;; +1419A;EGYPTIAN HIEROGLYPH-1419A;Lo;0;L;;;;;N;;;;; +1419B;EGYPTIAN HIEROGLYPH-1419B;Lo;0;L;;;;;N;;;;; +1419C;EGYPTIAN HIEROGLYPH-1419C;Lo;0;L;;;;;N;;;;; +1419D;EGYPTIAN HIEROGLYPH-1419D;Lo;0;L;;;;;N;;;;; +1419E;EGYPTIAN HIEROGLYPH-1419E;Lo;0;L;;;;;N;;;;; +1419F;EGYPTIAN HIEROGLYPH-1419F;Lo;0;L;;;;;N;;;;; +141A0;EGYPTIAN HIEROGLYPH-141A0;Lo;0;L;;;;;N;;;;; +141A1;EGYPTIAN HIEROGLYPH-141A1;Lo;0;L;;;;;N;;;;; +141A2;EGYPTIAN HIEROGLYPH-141A2;Lo;0;L;;;;;N;;;;; +141A3;EGYPTIAN HIEROGLYPH-141A3;Lo;0;L;;;;;N;;;;; +141A4;EGYPTIAN HIEROGLYPH-141A4;Lo;0;L;;;;;N;;;;; +141A5;EGYPTIAN HIEROGLYPH-141A5;Lo;0;L;;;;;N;;;;; +141A6;EGYPTIAN HIEROGLYPH-141A6;Lo;0;L;;;;;N;;;;; +141A7;EGYPTIAN HIEROGLYPH-141A7;Lo;0;L;;;;;N;;;;; +141A8;EGYPTIAN HIEROGLYPH-141A8;Lo;0;L;;;;;N;;;;; +141A9;EGYPTIAN HIEROGLYPH-141A9;Lo;0;L;;;;;N;;;;; +141AA;EGYPTIAN HIEROGLYPH-141AA;Lo;0;L;;;;;N;;;;; +141AB;EGYPTIAN HIEROGLYPH-141AB;Lo;0;L;;;;;N;;;;; +141AC;EGYPTIAN HIEROGLYPH-141AC;Lo;0;L;;;;;N;;;;; +141AD;EGYPTIAN HIEROGLYPH-141AD;Lo;0;L;;;;;N;;;;; +141AE;EGYPTIAN HIEROGLYPH-141AE;Lo;0;L;;;;;N;;;;; +141AF;EGYPTIAN HIEROGLYPH-141AF;Lo;0;L;;;;;N;;;;; +141B0;EGYPTIAN HIEROGLYPH-141B0;Lo;0;L;;;;;N;;;;; +141B1;EGYPTIAN HIEROGLYPH-141B1;Lo;0;L;;;;;N;;;;; +141B2;EGYPTIAN HIEROGLYPH-141B2;Lo;0;L;;;;;N;;;;; +141B3;EGYPTIAN HIEROGLYPH-141B3;Lo;0;L;;;;;N;;;;; +141B4;EGYPTIAN HIEROGLYPH-141B4;Lo;0;L;;;;;N;;;;; +141B5;EGYPTIAN HIEROGLYPH-141B5;Lo;0;L;;;;;N;;;;; +141B6;EGYPTIAN HIEROGLYPH-141B6;Lo;0;L;;;;;N;;;;; +141B7;EGYPTIAN HIEROGLYPH-141B7;Lo;0;L;;;;;N;;;;; +141B8;EGYPTIAN HIEROGLYPH-141B8;Lo;0;L;;;;;N;;;;; +141B9;EGYPTIAN HIEROGLYPH-141B9;Lo;0;L;;;;;N;;;;; +141BA;EGYPTIAN HIEROGLYPH-141BA;Lo;0;L;;;;;N;;;;; +141BB;EGYPTIAN HIEROGLYPH-141BB;Lo;0;L;;;;;N;;;;; +141BC;EGYPTIAN HIEROGLYPH-141BC;Lo;0;L;;;;;N;;;;; +141BD;EGYPTIAN HIEROGLYPH-141BD;Lo;0;L;;;;;N;;;;; +141BE;EGYPTIAN HIEROGLYPH-141BE;Lo;0;L;;;;;N;;;;; +141BF;EGYPTIAN HIEROGLYPH-141BF;Lo;0;L;;;;;N;;;;; +141C0;EGYPTIAN HIEROGLYPH-141C0;Lo;0;L;;;;;N;;;;; +141C1;EGYPTIAN HIEROGLYPH-141C1;Lo;0;L;;;;;N;;;;; +141C2;EGYPTIAN HIEROGLYPH-141C2;Lo;0;L;;;;;N;;;;; +141C3;EGYPTIAN HIEROGLYPH-141C3;Lo;0;L;;;;;N;;;;; +141C4;EGYPTIAN HIEROGLYPH-141C4;Lo;0;L;;;;;N;;;;; +141C5;EGYPTIAN HIEROGLYPH-141C5;Lo;0;L;;;;;N;;;;; +141C6;EGYPTIAN HIEROGLYPH-141C6;Lo;0;L;;;;;N;;;;; +141C7;EGYPTIAN HIEROGLYPH-141C7;Lo;0;L;;;;;N;;;;; +141C8;EGYPTIAN HIEROGLYPH-141C8;Lo;0;L;;;;;N;;;;; +141C9;EGYPTIAN HIEROGLYPH-141C9;Lo;0;L;;;;;N;;;;; +141CA;EGYPTIAN HIEROGLYPH-141CA;Lo;0;L;;;;;N;;;;; +141CB;EGYPTIAN HIEROGLYPH-141CB;Lo;0;L;;;;;N;;;;; +141CC;EGYPTIAN HIEROGLYPH-141CC;Lo;0;L;;;;;N;;;;; +141CD;EGYPTIAN HIEROGLYPH-141CD;Lo;0;L;;;;;N;;;;; +141CE;EGYPTIAN HIEROGLYPH-141CE;Lo;0;L;;;;;N;;;;; +141CF;EGYPTIAN HIEROGLYPH-141CF;Lo;0;L;;;;;N;;;;; +141D0;EGYPTIAN HIEROGLYPH-141D0;Lo;0;L;;;;;N;;;;; +141D1;EGYPTIAN HIEROGLYPH-141D1;Lo;0;L;;;;;N;;;;; +141D2;EGYPTIAN HIEROGLYPH-141D2;Lo;0;L;;;;;N;;;;; +141D3;EGYPTIAN HIEROGLYPH-141D3;Lo;0;L;;;;;N;;;;; +141D4;EGYPTIAN HIEROGLYPH-141D4;Lo;0;L;;;;;N;;;;; +141D5;EGYPTIAN HIEROGLYPH-141D5;Lo;0;L;;;;;N;;;;; +141D6;EGYPTIAN HIEROGLYPH-141D6;Lo;0;L;;;;;N;;;;; +141D7;EGYPTIAN HIEROGLYPH-141D7;Lo;0;L;;;;;N;;;;; +141D8;EGYPTIAN HIEROGLYPH-141D8;Lo;0;L;;;;;N;;;;; +141D9;EGYPTIAN HIEROGLYPH-141D9;Lo;0;L;;;;;N;;;;; +141DA;EGYPTIAN HIEROGLYPH-141DA;Lo;0;L;;;;;N;;;;; +141DB;EGYPTIAN HIEROGLYPH-141DB;Lo;0;L;;;;;N;;;;; +141DC;EGYPTIAN HIEROGLYPH-141DC;Lo;0;L;;;;;N;;;;; +141DD;EGYPTIAN HIEROGLYPH-141DD;Lo;0;L;;;;;N;;;;; +141DE;EGYPTIAN HIEROGLYPH-141DE;Lo;0;L;;;;;N;;;;; +141DF;EGYPTIAN HIEROGLYPH-141DF;Lo;0;L;;;;;N;;;;; +141E0;EGYPTIAN HIEROGLYPH-141E0;Lo;0;L;;;;;N;;;;; +141E1;EGYPTIAN HIEROGLYPH-141E1;Lo;0;L;;;;;N;;;;; +141E2;EGYPTIAN HIEROGLYPH-141E2;Lo;0;L;;;;;N;;;;; +141E3;EGYPTIAN HIEROGLYPH-141E3;Lo;0;L;;;;;N;;;;; +141E4;EGYPTIAN HIEROGLYPH-141E4;Lo;0;L;;;;;N;;;;; +141E5;EGYPTIAN HIEROGLYPH-141E5;Lo;0;L;;;;;N;;;;; +141E6;EGYPTIAN HIEROGLYPH-141E6;Lo;0;L;;;;;N;;;;; +141E7;EGYPTIAN HIEROGLYPH-141E7;Lo;0;L;;;;;N;;;;; +141E8;EGYPTIAN HIEROGLYPH-141E8;Lo;0;L;;;;;N;;;;; +141E9;EGYPTIAN HIEROGLYPH-141E9;Lo;0;L;;;;;N;;;;; +141EA;EGYPTIAN HIEROGLYPH-141EA;Lo;0;L;;;;;N;;;;; +141EB;EGYPTIAN HIEROGLYPH-141EB;Lo;0;L;;;;;N;;;;; +141EC;EGYPTIAN HIEROGLYPH-141EC;Lo;0;L;;;;;N;;;;; +141ED;EGYPTIAN HIEROGLYPH-141ED;Lo;0;L;;;;;N;;;;; +141EE;EGYPTIAN HIEROGLYPH-141EE;Lo;0;L;;;;;N;;;;; +141EF;EGYPTIAN HIEROGLYPH-141EF;Lo;0;L;;;;;N;;;;; +141F0;EGYPTIAN HIEROGLYPH-141F0;Lo;0;L;;;;;N;;;;; +141F1;EGYPTIAN HIEROGLYPH-141F1;Lo;0;L;;;;;N;;;;; +141F2;EGYPTIAN HIEROGLYPH-141F2;Lo;0;L;;;;;N;;;;; +141F3;EGYPTIAN HIEROGLYPH-141F3;Lo;0;L;;;;;N;;;;; +141F4;EGYPTIAN HIEROGLYPH-141F4;Lo;0;L;;;;;N;;;;; +141F5;EGYPTIAN HIEROGLYPH-141F5;Lo;0;L;;;;;N;;;;; +141F6;EGYPTIAN HIEROGLYPH-141F6;Lo;0;L;;;;;N;;;;; +141F7;EGYPTIAN HIEROGLYPH-141F7;Lo;0;L;;;;;N;;;;; +141F8;EGYPTIAN HIEROGLYPH-141F8;Lo;0;L;;;;;N;;;;; +141F9;EGYPTIAN HIEROGLYPH-141F9;Lo;0;L;;;;;N;;;;; +141FA;EGYPTIAN HIEROGLYPH-141FA;Lo;0;L;;;;;N;;;;; +141FB;EGYPTIAN HIEROGLYPH-141FB;Lo;0;L;;;;;N;;;;; +141FC;EGYPTIAN HIEROGLYPH-141FC;Lo;0;L;;;;;N;;;;; +141FD;EGYPTIAN HIEROGLYPH-141FD;Lo;0;L;;;;;N;;;;; +141FE;EGYPTIAN HIEROGLYPH-141FE;Lo;0;L;;;;;N;;;;; +141FF;EGYPTIAN HIEROGLYPH-141FF;Lo;0;L;;;;;N;;;;; +14200;EGYPTIAN HIEROGLYPH-14200;Lo;0;L;;;;;N;;;;; +14201;EGYPTIAN HIEROGLYPH-14201;Lo;0;L;;;;;N;;;;; +14202;EGYPTIAN HIEROGLYPH-14202;Lo;0;L;;;;;N;;;;; +14203;EGYPTIAN HIEROGLYPH-14203;Lo;0;L;;;;;N;;;;; +14204;EGYPTIAN HIEROGLYPH-14204;Lo;0;L;;;;;N;;;;; +14205;EGYPTIAN HIEROGLYPH-14205;Lo;0;L;;;;;N;;;;; +14206;EGYPTIAN HIEROGLYPH-14206;Lo;0;L;;;;;N;;;;; +14207;EGYPTIAN HIEROGLYPH-14207;Lo;0;L;;;;;N;;;;; +14208;EGYPTIAN HIEROGLYPH-14208;Lo;0;L;;;;;N;;;;; +14209;EGYPTIAN HIEROGLYPH-14209;Lo;0;L;;;;;N;;;;; +1420A;EGYPTIAN HIEROGLYPH-1420A;Lo;0;L;;;;;N;;;;; +1420B;EGYPTIAN HIEROGLYPH-1420B;Lo;0;L;;;;;N;;;;; +1420C;EGYPTIAN HIEROGLYPH-1420C;Lo;0;L;;;;;N;;;;; +1420D;EGYPTIAN HIEROGLYPH-1420D;Lo;0;L;;;;;N;;;;; +1420E;EGYPTIAN HIEROGLYPH-1420E;Lo;0;L;;;;;N;;;;; +1420F;EGYPTIAN HIEROGLYPH-1420F;Lo;0;L;;;;;N;;;;; +14210;EGYPTIAN HIEROGLYPH-14210;Lo;0;L;;;;;N;;;;; +14211;EGYPTIAN HIEROGLYPH-14211;Lo;0;L;;;;;N;;;;; +14212;EGYPTIAN HIEROGLYPH-14212;Lo;0;L;;;;;N;;;;; +14213;EGYPTIAN HIEROGLYPH-14213;Lo;0;L;;;;;N;;;;; +14214;EGYPTIAN HIEROGLYPH-14214;Lo;0;L;;;;;N;;;;; +14215;EGYPTIAN HIEROGLYPH-14215;Lo;0;L;;;;;N;;;;; +14216;EGYPTIAN HIEROGLYPH-14216;Lo;0;L;;;;;N;;;;; +14217;EGYPTIAN HIEROGLYPH-14217;Lo;0;L;;;;;N;;;;; +14218;EGYPTIAN HIEROGLYPH-14218;Lo;0;L;;;;;N;;;;; +14219;EGYPTIAN HIEROGLYPH-14219;Lo;0;L;;;;;N;;;;; +1421A;EGYPTIAN HIEROGLYPH-1421A;Lo;0;L;;;;;N;;;;; +1421B;EGYPTIAN HIEROGLYPH-1421B;Lo;0;L;;;;;N;;;;; +1421C;EGYPTIAN HIEROGLYPH-1421C;Lo;0;L;;;;;N;;;;; +1421D;EGYPTIAN HIEROGLYPH-1421D;Lo;0;L;;;;;N;;;;; +1421E;EGYPTIAN HIEROGLYPH-1421E;Lo;0;L;;;;;N;;;;; +1421F;EGYPTIAN HIEROGLYPH-1421F;Lo;0;L;;;;;N;;;;; +14220;EGYPTIAN HIEROGLYPH-14220;Lo;0;L;;;;;N;;;;; +14221;EGYPTIAN HIEROGLYPH-14221;Lo;0;L;;;;;N;;;;; +14222;EGYPTIAN HIEROGLYPH-14222;Lo;0;L;;;;;N;;;;; +14223;EGYPTIAN HIEROGLYPH-14223;Lo;0;L;;;;;N;;;;; +14224;EGYPTIAN HIEROGLYPH-14224;Lo;0;L;;;;;N;;;;; +14225;EGYPTIAN HIEROGLYPH-14225;Lo;0;L;;;;;N;;;;; +14226;EGYPTIAN HIEROGLYPH-14226;Lo;0;L;;;;;N;;;;; +14227;EGYPTIAN HIEROGLYPH-14227;Lo;0;L;;;;;N;;;;; +14228;EGYPTIAN HIEROGLYPH-14228;Lo;0;L;;;;;N;;;;; +14229;EGYPTIAN HIEROGLYPH-14229;Lo;0;L;;;;;N;;;;; +1422A;EGYPTIAN HIEROGLYPH-1422A;Lo;0;L;;;;;N;;;;; +1422B;EGYPTIAN HIEROGLYPH-1422B;Lo;0;L;;;;;N;;;;; +1422C;EGYPTIAN HIEROGLYPH-1422C;Lo;0;L;;;;;N;;;;; +1422D;EGYPTIAN HIEROGLYPH-1422D;Lo;0;L;;;;;N;;;;; +1422E;EGYPTIAN HIEROGLYPH-1422E;Lo;0;L;;;;;N;;;;; +1422F;EGYPTIAN HIEROGLYPH-1422F;Lo;0;L;;;;;N;;;;; +14230;EGYPTIAN HIEROGLYPH-14230;Lo;0;L;;;;;N;;;;; +14231;EGYPTIAN HIEROGLYPH-14231;Lo;0;L;;;;;N;;;;; +14232;EGYPTIAN HIEROGLYPH-14232;Lo;0;L;;;;;N;;;;; +14233;EGYPTIAN HIEROGLYPH-14233;Lo;0;L;;;;;N;;;;; +14234;EGYPTIAN HIEROGLYPH-14234;Lo;0;L;;;;;N;;;;; +14235;EGYPTIAN HIEROGLYPH-14235;Lo;0;L;;;;;N;;;;; +14236;EGYPTIAN HIEROGLYPH-14236;Lo;0;L;;;;;N;;;;; +14237;EGYPTIAN HIEROGLYPH-14237;Lo;0;L;;;;;N;;;;; +14238;EGYPTIAN HIEROGLYPH-14238;Lo;0;L;;;;;N;;;;; +14239;EGYPTIAN HIEROGLYPH-14239;Lo;0;L;;;;;N;;;;; +1423A;EGYPTIAN HIEROGLYPH-1423A;Lo;0;L;;;;;N;;;;; +1423B;EGYPTIAN HIEROGLYPH-1423B;Lo;0;L;;;;;N;;;;; +1423C;EGYPTIAN HIEROGLYPH-1423C;Lo;0;L;;;;;N;;;;; +1423D;EGYPTIAN HIEROGLYPH-1423D;Lo;0;L;;;;;N;;;;; +1423E;EGYPTIAN HIEROGLYPH-1423E;Lo;0;L;;;;;N;;;;; +1423F;EGYPTIAN HIEROGLYPH-1423F;Lo;0;L;;;;;N;;;;; +14240;EGYPTIAN HIEROGLYPH-14240;Lo;0;L;;;;;N;;;;; +14241;EGYPTIAN HIEROGLYPH-14241;Lo;0;L;;;;;N;;;;; +14242;EGYPTIAN HIEROGLYPH-14242;Lo;0;L;;;;;N;;;;; +14243;EGYPTIAN HIEROGLYPH-14243;Lo;0;L;;;;;N;;;;; +14244;EGYPTIAN HIEROGLYPH-14244;Lo;0;L;;;;;N;;;;; +14245;EGYPTIAN HIEROGLYPH-14245;Lo;0;L;;;;;N;;;;; +14246;EGYPTIAN HIEROGLYPH-14246;Lo;0;L;;;;;N;;;;; +14247;EGYPTIAN HIEROGLYPH-14247;Lo;0;L;;;;;N;;;;; +14248;EGYPTIAN HIEROGLYPH-14248;Lo;0;L;;;;;N;;;;; +14249;EGYPTIAN HIEROGLYPH-14249;Lo;0;L;;;;;N;;;;; +1424A;EGYPTIAN HIEROGLYPH-1424A;Lo;0;L;;;;;N;;;;; +1424B;EGYPTIAN HIEROGLYPH-1424B;Lo;0;L;;;;;N;;;;; +1424C;EGYPTIAN HIEROGLYPH-1424C;Lo;0;L;;;;;N;;;;; +1424D;EGYPTIAN HIEROGLYPH-1424D;Lo;0;L;;;;;N;;;;; +1424E;EGYPTIAN HIEROGLYPH-1424E;Lo;0;L;;;;;N;;;;; +1424F;EGYPTIAN HIEROGLYPH-1424F;Lo;0;L;;;;;N;;;;; +14250;EGYPTIAN HIEROGLYPH-14250;Lo;0;L;;;;;N;;;;; +14251;EGYPTIAN HIEROGLYPH-14251;Lo;0;L;;;;;N;;;;; +14252;EGYPTIAN HIEROGLYPH-14252;Lo;0;L;;;;;N;;;;; +14253;EGYPTIAN HIEROGLYPH-14253;Lo;0;L;;;;;N;;;;; +14254;EGYPTIAN HIEROGLYPH-14254;Lo;0;L;;;;;N;;;;; +14255;EGYPTIAN HIEROGLYPH-14255;Lo;0;L;;;;;N;;;;; +14256;EGYPTIAN HIEROGLYPH-14256;Lo;0;L;;;;;N;;;;; +14257;EGYPTIAN HIEROGLYPH-14257;Lo;0;L;;;;;N;;;;; +14258;EGYPTIAN HIEROGLYPH-14258;Lo;0;L;;;;;N;;;;; +14259;EGYPTIAN HIEROGLYPH-14259;Lo;0;L;;;;;N;;;;; +1425A;EGYPTIAN HIEROGLYPH-1425A;Lo;0;L;;;;;N;;;;; +1425B;EGYPTIAN HIEROGLYPH-1425B;Lo;0;L;;;;;N;;;;; +1425C;EGYPTIAN HIEROGLYPH-1425C;Lo;0;L;;;;;N;;;;; +1425D;EGYPTIAN HIEROGLYPH-1425D;Lo;0;L;;;;;N;;;;; +1425E;EGYPTIAN HIEROGLYPH-1425E;Lo;0;L;;;;;N;;;;; +1425F;EGYPTIAN HIEROGLYPH-1425F;Lo;0;L;;;;;N;;;;; +14260;EGYPTIAN HIEROGLYPH-14260;Lo;0;L;;;;;N;;;;; +14261;EGYPTIAN HIEROGLYPH-14261;Lo;0;L;;;;;N;;;;; +14262;EGYPTIAN HIEROGLYPH-14262;Lo;0;L;;;;;N;;;;; +14263;EGYPTIAN HIEROGLYPH-14263;Lo;0;L;;;;;N;;;;; +14264;EGYPTIAN HIEROGLYPH-14264;Lo;0;L;;;;;N;;;;; +14265;EGYPTIAN HIEROGLYPH-14265;Lo;0;L;;;;;N;;;;; +14266;EGYPTIAN HIEROGLYPH-14266;Lo;0;L;;;;;N;;;;; +14267;EGYPTIAN HIEROGLYPH-14267;Lo;0;L;;;;;N;;;;; +14268;EGYPTIAN HIEROGLYPH-14268;Lo;0;L;;;;;N;;;;; +14269;EGYPTIAN HIEROGLYPH-14269;Lo;0;L;;;;;N;;;;; +1426A;EGYPTIAN HIEROGLYPH-1426A;Lo;0;L;;;;;N;;;;; +1426B;EGYPTIAN HIEROGLYPH-1426B;Lo;0;L;;;;;N;;;;; +1426C;EGYPTIAN HIEROGLYPH-1426C;Lo;0;L;;;;;N;;;;; +1426D;EGYPTIAN HIEROGLYPH-1426D;Lo;0;L;;;;;N;;;;; +1426E;EGYPTIAN HIEROGLYPH-1426E;Lo;0;L;;;;;N;;;;; +1426F;EGYPTIAN HIEROGLYPH-1426F;Lo;0;L;;;;;N;;;;; +14270;EGYPTIAN HIEROGLYPH-14270;Lo;0;L;;;;;N;;;;; +14271;EGYPTIAN HIEROGLYPH-14271;Lo;0;L;;;;;N;;;;; +14272;EGYPTIAN HIEROGLYPH-14272;Lo;0;L;;;;;N;;;;; +14273;EGYPTIAN HIEROGLYPH-14273;Lo;0;L;;;;;N;;;;; +14274;EGYPTIAN HIEROGLYPH-14274;Lo;0;L;;;;;N;;;;; +14275;EGYPTIAN HIEROGLYPH-14275;Lo;0;L;;;;;N;;;;; +14276;EGYPTIAN HIEROGLYPH-14276;Lo;0;L;;;;;N;;;;; +14277;EGYPTIAN HIEROGLYPH-14277;Lo;0;L;;;;;N;;;;; +14278;EGYPTIAN HIEROGLYPH-14278;Lo;0;L;;;;;N;;;;; +14279;EGYPTIAN HIEROGLYPH-14279;Lo;0;L;;;;;N;;;;; +1427A;EGYPTIAN HIEROGLYPH-1427A;Lo;0;L;;;;;N;;;;; +1427B;EGYPTIAN HIEROGLYPH-1427B;Lo;0;L;;;;;N;;;;; +1427C;EGYPTIAN HIEROGLYPH-1427C;Lo;0;L;;;;;N;;;;; +1427D;EGYPTIAN HIEROGLYPH-1427D;Lo;0;L;;;;;N;;;;; +1427E;EGYPTIAN HIEROGLYPH-1427E;Lo;0;L;;;;;N;;;;; +1427F;EGYPTIAN HIEROGLYPH-1427F;Lo;0;L;;;;;N;;;;; +14280;EGYPTIAN HIEROGLYPH-14280;Lo;0;L;;;;;N;;;;; +14281;EGYPTIAN HIEROGLYPH-14281;Lo;0;L;;;;;N;;;;; +14282;EGYPTIAN HIEROGLYPH-14282;Lo;0;L;;;;;N;;;;; +14283;EGYPTIAN HIEROGLYPH-14283;Lo;0;L;;;;;N;;;;; +14284;EGYPTIAN HIEROGLYPH-14284;Lo;0;L;;;;;N;;;;; +14285;EGYPTIAN HIEROGLYPH-14285;Lo;0;L;;;;;N;;;;; +14286;EGYPTIAN HIEROGLYPH-14286;Lo;0;L;;;;;N;;;;; +14287;EGYPTIAN HIEROGLYPH-14287;Lo;0;L;;;;;N;;;;; +14288;EGYPTIAN HIEROGLYPH-14288;Lo;0;L;;;;;N;;;;; +14289;EGYPTIAN HIEROGLYPH-14289;Lo;0;L;;;;;N;;;;; +1428A;EGYPTIAN HIEROGLYPH-1428A;Lo;0;L;;;;;N;;;;; +1428B;EGYPTIAN HIEROGLYPH-1428B;Lo;0;L;;;;;N;;;;; +1428C;EGYPTIAN HIEROGLYPH-1428C;Lo;0;L;;;;;N;;;;; +1428D;EGYPTIAN HIEROGLYPH-1428D;Lo;0;L;;;;;N;;;;; +1428E;EGYPTIAN HIEROGLYPH-1428E;Lo;0;L;;;;;N;;;;; +1428F;EGYPTIAN HIEROGLYPH-1428F;Lo;0;L;;;;;N;;;;; +14290;EGYPTIAN HIEROGLYPH-14290;Lo;0;L;;;;;N;;;;; +14291;EGYPTIAN HIEROGLYPH-14291;Lo;0;L;;;;;N;;;;; +14292;EGYPTIAN HIEROGLYPH-14292;Lo;0;L;;;;;N;;;;; +14293;EGYPTIAN HIEROGLYPH-14293;Lo;0;L;;;;;N;;;;; +14294;EGYPTIAN HIEROGLYPH-14294;Lo;0;L;;;;;N;;;;; +14295;EGYPTIAN HIEROGLYPH-14295;Lo;0;L;;;;;N;;;;; +14296;EGYPTIAN HIEROGLYPH-14296;Lo;0;L;;;;;N;;;;; +14297;EGYPTIAN HIEROGLYPH-14297;Lo;0;L;;;;;N;;;;; +14298;EGYPTIAN HIEROGLYPH-14298;Lo;0;L;;;;;N;;;;; +14299;EGYPTIAN HIEROGLYPH-14299;Lo;0;L;;;;;N;;;;; +1429A;EGYPTIAN HIEROGLYPH-1429A;Lo;0;L;;;;;N;;;;; +1429B;EGYPTIAN HIEROGLYPH-1429B;Lo;0;L;;;;;N;;;;; +1429C;EGYPTIAN HIEROGLYPH-1429C;Lo;0;L;;;;;N;;;;; +1429D;EGYPTIAN HIEROGLYPH-1429D;Lo;0;L;;;;;N;;;;; +1429E;EGYPTIAN HIEROGLYPH-1429E;Lo;0;L;;;;;N;;;;; +1429F;EGYPTIAN HIEROGLYPH-1429F;Lo;0;L;;;;;N;;;;; +142A0;EGYPTIAN HIEROGLYPH-142A0;Lo;0;L;;;;;N;;;;; +142A1;EGYPTIAN HIEROGLYPH-142A1;Lo;0;L;;;;;N;;;;; +142A2;EGYPTIAN HIEROGLYPH-142A2;Lo;0;L;;;;;N;;;;; +142A3;EGYPTIAN HIEROGLYPH-142A3;Lo;0;L;;;;;N;;;;; +142A4;EGYPTIAN HIEROGLYPH-142A4;Lo;0;L;;;;;N;;;;; +142A5;EGYPTIAN HIEROGLYPH-142A5;Lo;0;L;;;;;N;;;;; +142A6;EGYPTIAN HIEROGLYPH-142A6;Lo;0;L;;;;;N;;;;; +142A7;EGYPTIAN HIEROGLYPH-142A7;Lo;0;L;;;;;N;;;;; +142A8;EGYPTIAN HIEROGLYPH-142A8;Lo;0;L;;;;;N;;;;; +142A9;EGYPTIAN HIEROGLYPH-142A9;Lo;0;L;;;;;N;;;;; +142AA;EGYPTIAN HIEROGLYPH-142AA;Lo;0;L;;;;;N;;;;; +142AB;EGYPTIAN HIEROGLYPH-142AB;Lo;0;L;;;;;N;;;;; +142AC;EGYPTIAN HIEROGLYPH-142AC;Lo;0;L;;;;;N;;;;; +142AD;EGYPTIAN HIEROGLYPH-142AD;Lo;0;L;;;;;N;;;;; +142AE;EGYPTIAN HIEROGLYPH-142AE;Lo;0;L;;;;;N;;;;; +142AF;EGYPTIAN HIEROGLYPH-142AF;Lo;0;L;;;;;N;;;;; +142B0;EGYPTIAN HIEROGLYPH-142B0;Lo;0;L;;;;;N;;;;; +142B1;EGYPTIAN HIEROGLYPH-142B1;Lo;0;L;;;;;N;;;;; +142B2;EGYPTIAN HIEROGLYPH-142B2;Lo;0;L;;;;;N;;;;; +142B3;EGYPTIAN HIEROGLYPH-142B3;Lo;0;L;;;;;N;;;;; +142B4;EGYPTIAN HIEROGLYPH-142B4;Lo;0;L;;;;;N;;;;; +142B5;EGYPTIAN HIEROGLYPH-142B5;Lo;0;L;;;;;N;;;;; +142B6;EGYPTIAN HIEROGLYPH-142B6;Lo;0;L;;;;;N;;;;; +142B7;EGYPTIAN HIEROGLYPH-142B7;Lo;0;L;;;;;N;;;;; +142B8;EGYPTIAN HIEROGLYPH-142B8;Lo;0;L;;;;;N;;;;; +142B9;EGYPTIAN HIEROGLYPH-142B9;Lo;0;L;;;;;N;;;;; +142BA;EGYPTIAN HIEROGLYPH-142BA;Lo;0;L;;;;;N;;;;; +142BB;EGYPTIAN HIEROGLYPH-142BB;Lo;0;L;;;;;N;;;;; +142BC;EGYPTIAN HIEROGLYPH-142BC;Lo;0;L;;;;;N;;;;; +142BD;EGYPTIAN HIEROGLYPH-142BD;Lo;0;L;;;;;N;;;;; +142BE;EGYPTIAN HIEROGLYPH-142BE;Lo;0;L;;;;;N;;;;; +142BF;EGYPTIAN HIEROGLYPH-142BF;Lo;0;L;;;;;N;;;;; +142C0;EGYPTIAN HIEROGLYPH-142C0;Lo;0;L;;;;;N;;;;; +142C1;EGYPTIAN HIEROGLYPH-142C1;Lo;0;L;;;;;N;;;;; +142C2;EGYPTIAN HIEROGLYPH-142C2;Lo;0;L;;;;;N;;;;; +142C3;EGYPTIAN HIEROGLYPH-142C3;Lo;0;L;;;;;N;;;;; +142C4;EGYPTIAN HIEROGLYPH-142C4;Lo;0;L;;;;;N;;;;; +142C5;EGYPTIAN HIEROGLYPH-142C5;Lo;0;L;;;;;N;;;;; +142C6;EGYPTIAN HIEROGLYPH-142C6;Lo;0;L;;;;;N;;;;; +142C7;EGYPTIAN HIEROGLYPH-142C7;Lo;0;L;;;;;N;;;;; +142C8;EGYPTIAN HIEROGLYPH-142C8;Lo;0;L;;;;;N;;;;; +142C9;EGYPTIAN HIEROGLYPH-142C9;Lo;0;L;;;;;N;;;;; +142CA;EGYPTIAN HIEROGLYPH-142CA;Lo;0;L;;;;;N;;;;; +142CB;EGYPTIAN HIEROGLYPH-142CB;Lo;0;L;;;;;N;;;;; +142CC;EGYPTIAN HIEROGLYPH-142CC;Lo;0;L;;;;;N;;;;; +142CD;EGYPTIAN HIEROGLYPH-142CD;Lo;0;L;;;;;N;;;;; +142CE;EGYPTIAN HIEROGLYPH-142CE;Lo;0;L;;;;;N;;;;; +142CF;EGYPTIAN HIEROGLYPH-142CF;Lo;0;L;;;;;N;;;;; +142D0;EGYPTIAN HIEROGLYPH-142D0;Lo;0;L;;;;;N;;;;; +142D1;EGYPTIAN HIEROGLYPH-142D1;Lo;0;L;;;;;N;;;;; +142D2;EGYPTIAN HIEROGLYPH-142D2;Lo;0;L;;;;;N;;;;; +142D3;EGYPTIAN HIEROGLYPH-142D3;Lo;0;L;;;;;N;;;;; +142D4;EGYPTIAN HIEROGLYPH-142D4;Lo;0;L;;;;;N;;;;; +142D5;EGYPTIAN HIEROGLYPH-142D5;Lo;0;L;;;;;N;;;;; +142D6;EGYPTIAN HIEROGLYPH-142D6;Lo;0;L;;;;;N;;;;; +142D7;EGYPTIAN HIEROGLYPH-142D7;Lo;0;L;;;;;N;;;;; +142D8;EGYPTIAN HIEROGLYPH-142D8;Lo;0;L;;;;;N;;;;; +142D9;EGYPTIAN HIEROGLYPH-142D9;Lo;0;L;;;;;N;;;;; +142DA;EGYPTIAN HIEROGLYPH-142DA;Lo;0;L;;;;;N;;;;; +142DB;EGYPTIAN HIEROGLYPH-142DB;Lo;0;L;;;;;N;;;;; +142DC;EGYPTIAN HIEROGLYPH-142DC;Lo;0;L;;;;;N;;;;; +142DD;EGYPTIAN HIEROGLYPH-142DD;Lo;0;L;;;;;N;;;;; +142DE;EGYPTIAN HIEROGLYPH-142DE;Lo;0;L;;;;;N;;;;; +142DF;EGYPTIAN HIEROGLYPH-142DF;Lo;0;L;;;;;N;;;;; +142E0;EGYPTIAN HIEROGLYPH-142E0;Lo;0;L;;;;;N;;;;; +142E1;EGYPTIAN HIEROGLYPH-142E1;Lo;0;L;;;;;N;;;;; +142E2;EGYPTIAN HIEROGLYPH-142E2;Lo;0;L;;;;;N;;;;; +142E3;EGYPTIAN HIEROGLYPH-142E3;Lo;0;L;;;;;N;;;;; +142E4;EGYPTIAN HIEROGLYPH-142E4;Lo;0;L;;;;;N;;;;; +142E5;EGYPTIAN HIEROGLYPH-142E5;Lo;0;L;;;;;N;;;;; +142E6;EGYPTIAN HIEROGLYPH-142E6;Lo;0;L;;;;;N;;;;; +142E7;EGYPTIAN HIEROGLYPH-142E7;Lo;0;L;;;;;N;;;;; +142E8;EGYPTIAN HIEROGLYPH-142E8;Lo;0;L;;;;;N;;;;; +142E9;EGYPTIAN HIEROGLYPH-142E9;Lo;0;L;;;;;N;;;;; +142EA;EGYPTIAN HIEROGLYPH-142EA;Lo;0;L;;;;;N;;;;; +142EB;EGYPTIAN HIEROGLYPH-142EB;Lo;0;L;;;;;N;;;;; +142EC;EGYPTIAN HIEROGLYPH-142EC;Lo;0;L;;;;;N;;;;; +142ED;EGYPTIAN HIEROGLYPH-142ED;Lo;0;L;;;;;N;;;;; +142EE;EGYPTIAN HIEROGLYPH-142EE;Lo;0;L;;;;;N;;;;; +142EF;EGYPTIAN HIEROGLYPH-142EF;Lo;0;L;;;;;N;;;;; +142F0;EGYPTIAN HIEROGLYPH-142F0;Lo;0;L;;;;;N;;;;; +142F1;EGYPTIAN HIEROGLYPH-142F1;Lo;0;L;;;;;N;;;;; +142F2;EGYPTIAN HIEROGLYPH-142F2;Lo;0;L;;;;;N;;;;; +142F3;EGYPTIAN HIEROGLYPH-142F3;Lo;0;L;;;;;N;;;;; +142F4;EGYPTIAN HIEROGLYPH-142F4;Lo;0;L;;;;;N;;;;; +142F5;EGYPTIAN HIEROGLYPH-142F5;Lo;0;L;;;;;N;;;;; +142F6;EGYPTIAN HIEROGLYPH-142F6;Lo;0;L;;;;;N;;;;; +142F7;EGYPTIAN HIEROGLYPH-142F7;Lo;0;L;;;;;N;;;;; +142F8;EGYPTIAN HIEROGLYPH-142F8;Lo;0;L;;;;;N;;;;; +142F9;EGYPTIAN HIEROGLYPH-142F9;Lo;0;L;;;;;N;;;;; +142FA;EGYPTIAN HIEROGLYPH-142FA;Lo;0;L;;;;;N;;;;; +142FB;EGYPTIAN HIEROGLYPH-142FB;Lo;0;L;;;;;N;;;;; +142FC;EGYPTIAN HIEROGLYPH-142FC;Lo;0;L;;;;;N;;;;; +142FD;EGYPTIAN HIEROGLYPH-142FD;Lo;0;L;;;;;N;;;;; +142FE;EGYPTIAN HIEROGLYPH-142FE;Lo;0;L;;;;;N;;;;; +142FF;EGYPTIAN HIEROGLYPH-142FF;Lo;0;L;;;;;N;;;;; +14300;EGYPTIAN HIEROGLYPH-14300;Lo;0;L;;;;;N;;;;; +14301;EGYPTIAN HIEROGLYPH-14301;Lo;0;L;;;;;N;;;;; +14302;EGYPTIAN HIEROGLYPH-14302;Lo;0;L;;;;;N;;;;; +14303;EGYPTIAN HIEROGLYPH-14303;Lo;0;L;;;;;N;;;;; +14304;EGYPTIAN HIEROGLYPH-14304;Lo;0;L;;;;;N;;;;; +14305;EGYPTIAN HIEROGLYPH-14305;Lo;0;L;;;;;N;;;;; +14306;EGYPTIAN HIEROGLYPH-14306;Lo;0;L;;;;;N;;;;; +14307;EGYPTIAN HIEROGLYPH-14307;Lo;0;L;;;;;N;;;;; +14308;EGYPTIAN HIEROGLYPH-14308;Lo;0;L;;;;;N;;;;; +14309;EGYPTIAN HIEROGLYPH-14309;Lo;0;L;;;;;N;;;;; +1430A;EGYPTIAN HIEROGLYPH-1430A;Lo;0;L;;;;;N;;;;; +1430B;EGYPTIAN HIEROGLYPH-1430B;Lo;0;L;;;;;N;;;;; +1430C;EGYPTIAN HIEROGLYPH-1430C;Lo;0;L;;;;;N;;;;; +1430D;EGYPTIAN HIEROGLYPH-1430D;Lo;0;L;;;;;N;;;;; +1430E;EGYPTIAN HIEROGLYPH-1430E;Lo;0;L;;;;;N;;;;; +1430F;EGYPTIAN HIEROGLYPH-1430F;Lo;0;L;;;;;N;;;;; +14310;EGYPTIAN HIEROGLYPH-14310;Lo;0;L;;;;;N;;;;; +14311;EGYPTIAN HIEROGLYPH-14311;Lo;0;L;;;;;N;;;;; +14312;EGYPTIAN HIEROGLYPH-14312;Lo;0;L;;;;;N;;;;; +14313;EGYPTIAN HIEROGLYPH-14313;Lo;0;L;;;;;N;;;;; +14314;EGYPTIAN HIEROGLYPH-14314;Lo;0;L;;;;;N;;;;; +14315;EGYPTIAN HIEROGLYPH-14315;Lo;0;L;;;;;N;;;;; +14316;EGYPTIAN HIEROGLYPH-14316;Lo;0;L;;;;;N;;;;; +14317;EGYPTIAN HIEROGLYPH-14317;Lo;0;L;;;;;N;;;;; +14318;EGYPTIAN HIEROGLYPH-14318;Lo;0;L;;;;;N;;;;; +14319;EGYPTIAN HIEROGLYPH-14319;Lo;0;L;;;;;N;;;;; +1431A;EGYPTIAN HIEROGLYPH-1431A;Lo;0;L;;;;;N;;;;; +1431B;EGYPTIAN HIEROGLYPH-1431B;Lo;0;L;;;;;N;;;;; +1431C;EGYPTIAN HIEROGLYPH-1431C;Lo;0;L;;;;;N;;;;; +1431D;EGYPTIAN HIEROGLYPH-1431D;Lo;0;L;;;;;N;;;;; +1431E;EGYPTIAN HIEROGLYPH-1431E;Lo;0;L;;;;;N;;;;; +1431F;EGYPTIAN HIEROGLYPH-1431F;Lo;0;L;;;;;N;;;;; +14320;EGYPTIAN HIEROGLYPH-14320;Lo;0;L;;;;;N;;;;; +14321;EGYPTIAN HIEROGLYPH-14321;Lo;0;L;;;;;N;;;;; +14322;EGYPTIAN HIEROGLYPH-14322;Lo;0;L;;;;;N;;;;; +14323;EGYPTIAN HIEROGLYPH-14323;Lo;0;L;;;;;N;;;;; +14324;EGYPTIAN HIEROGLYPH-14324;Lo;0;L;;;;;N;;;;; +14325;EGYPTIAN HIEROGLYPH-14325;Lo;0;L;;;;;N;;;;; +14326;EGYPTIAN HIEROGLYPH-14326;Lo;0;L;;;;;N;;;;; +14327;EGYPTIAN HIEROGLYPH-14327;Lo;0;L;;;;;N;;;;; +14328;EGYPTIAN HIEROGLYPH-14328;Lo;0;L;;;;;N;;;;; +14329;EGYPTIAN HIEROGLYPH-14329;Lo;0;L;;;;;N;;;;; +1432A;EGYPTIAN HIEROGLYPH-1432A;Lo;0;L;;;;;N;;;;; +1432B;EGYPTIAN HIEROGLYPH-1432B;Lo;0;L;;;;;N;;;;; +1432C;EGYPTIAN HIEROGLYPH-1432C;Lo;0;L;;;;;N;;;;; +1432D;EGYPTIAN HIEROGLYPH-1432D;Lo;0;L;;;;;N;;;;; +1432E;EGYPTIAN HIEROGLYPH-1432E;Lo;0;L;;;;;N;;;;; +1432F;EGYPTIAN HIEROGLYPH-1432F;Lo;0;L;;;;;N;;;;; +14330;EGYPTIAN HIEROGLYPH-14330;Lo;0;L;;;;;N;;;;; +14331;EGYPTIAN HIEROGLYPH-14331;Lo;0;L;;;;;N;;;;; +14332;EGYPTIAN HIEROGLYPH-14332;Lo;0;L;;;;;N;;;;; +14333;EGYPTIAN HIEROGLYPH-14333;Lo;0;L;;;;;N;;;;; +14334;EGYPTIAN HIEROGLYPH-14334;Lo;0;L;;;;;N;;;;; +14335;EGYPTIAN HIEROGLYPH-14335;Lo;0;L;;;;;N;;;;; +14336;EGYPTIAN HIEROGLYPH-14336;Lo;0;L;;;;;N;;;;; +14337;EGYPTIAN HIEROGLYPH-14337;Lo;0;L;;;;;N;;;;; +14338;EGYPTIAN HIEROGLYPH-14338;Lo;0;L;;;;;N;;;;; +14339;EGYPTIAN HIEROGLYPH-14339;Lo;0;L;;;;;N;;;;; +1433A;EGYPTIAN HIEROGLYPH-1433A;Lo;0;L;;;;;N;;;;; +1433B;EGYPTIAN HIEROGLYPH-1433B;Lo;0;L;;;;;N;;;;; +1433C;EGYPTIAN HIEROGLYPH-1433C;Lo;0;L;;;;;N;;;;; +1433D;EGYPTIAN HIEROGLYPH-1433D;Lo;0;L;;;;;N;;;;; +1433E;EGYPTIAN HIEROGLYPH-1433E;Lo;0;L;;;;;N;;;;; +1433F;EGYPTIAN HIEROGLYPH-1433F;Lo;0;L;;;;;N;;;;; +14340;EGYPTIAN HIEROGLYPH-14340;Lo;0;L;;;;;N;;;;; +14341;EGYPTIAN HIEROGLYPH-14341;Lo;0;L;;;;;N;;;;; +14342;EGYPTIAN HIEROGLYPH-14342;Lo;0;L;;;;;N;;;;; +14343;EGYPTIAN HIEROGLYPH-14343;Lo;0;L;;;;;N;;;;; +14344;EGYPTIAN HIEROGLYPH-14344;Lo;0;L;;;;;N;;;;; +14345;EGYPTIAN HIEROGLYPH-14345;Lo;0;L;;;;;N;;;;; +14346;EGYPTIAN HIEROGLYPH-14346;Lo;0;L;;;;;N;;;;; +14347;EGYPTIAN HIEROGLYPH-14347;Lo;0;L;;;;;N;;;;; +14348;EGYPTIAN HIEROGLYPH-14348;Lo;0;L;;;;;N;;;;; +14349;EGYPTIAN HIEROGLYPH-14349;Lo;0;L;;;;;N;;;;; +1434A;EGYPTIAN HIEROGLYPH-1434A;Lo;0;L;;;;;N;;;;; +1434B;EGYPTIAN HIEROGLYPH-1434B;Lo;0;L;;;;;N;;;;; +1434C;EGYPTIAN HIEROGLYPH-1434C;Lo;0;L;;;;;N;;;;; +1434D;EGYPTIAN HIEROGLYPH-1434D;Lo;0;L;;;;;N;;;;; +1434E;EGYPTIAN HIEROGLYPH-1434E;Lo;0;L;;;;;N;;;;; +1434F;EGYPTIAN HIEROGLYPH-1434F;Lo;0;L;;;;;N;;;;; +14350;EGYPTIAN HIEROGLYPH-14350;Lo;0;L;;;;;N;;;;; +14351;EGYPTIAN HIEROGLYPH-14351;Lo;0;L;;;;;N;;;;; +14352;EGYPTIAN HIEROGLYPH-14352;Lo;0;L;;;;;N;;;;; +14353;EGYPTIAN HIEROGLYPH-14353;Lo;0;L;;;;;N;;;;; +14354;EGYPTIAN HIEROGLYPH-14354;Lo;0;L;;;;;N;;;;; +14355;EGYPTIAN HIEROGLYPH-14355;Lo;0;L;;;;;N;;;;; +14356;EGYPTIAN HIEROGLYPH-14356;Lo;0;L;;;;;N;;;;; +14357;EGYPTIAN HIEROGLYPH-14357;Lo;0;L;;;;;N;;;;; +14358;EGYPTIAN HIEROGLYPH-14358;Lo;0;L;;;;;N;;;;; +14359;EGYPTIAN HIEROGLYPH-14359;Lo;0;L;;;;;N;;;;; +1435A;EGYPTIAN HIEROGLYPH-1435A;Lo;0;L;;;;;N;;;;; +1435B;EGYPTIAN HIEROGLYPH-1435B;Lo;0;L;;;;;N;;;;; +1435C;EGYPTIAN HIEROGLYPH-1435C;Lo;0;L;;;;;N;;;;; +1435D;EGYPTIAN HIEROGLYPH-1435D;Lo;0;L;;;;;N;;;;; +1435E;EGYPTIAN HIEROGLYPH-1435E;Lo;0;L;;;;;N;;;;; +1435F;EGYPTIAN HIEROGLYPH-1435F;Lo;0;L;;;;;N;;;;; +14360;EGYPTIAN HIEROGLYPH-14360;Lo;0;L;;;;;N;;;;; +14361;EGYPTIAN HIEROGLYPH-14361;Lo;0;L;;;;;N;;;;; +14362;EGYPTIAN HIEROGLYPH-14362;Lo;0;L;;;;;N;;;;; +14363;EGYPTIAN HIEROGLYPH-14363;Lo;0;L;;;;;N;;;;; +14364;EGYPTIAN HIEROGLYPH-14364;Lo;0;L;;;;;N;;;;; +14365;EGYPTIAN HIEROGLYPH-14365;Lo;0;L;;;;;N;;;;; +14366;EGYPTIAN HIEROGLYPH-14366;Lo;0;L;;;;;N;;;;; +14367;EGYPTIAN HIEROGLYPH-14367;Lo;0;L;;;;;N;;;;; +14368;EGYPTIAN HIEROGLYPH-14368;Lo;0;L;;;;;N;;;;; +14369;EGYPTIAN HIEROGLYPH-14369;Lo;0;L;;;;;N;;;;; +1436A;EGYPTIAN HIEROGLYPH-1436A;Lo;0;L;;;;;N;;;;; +1436B;EGYPTIAN HIEROGLYPH-1436B;Lo;0;L;;;;;N;;;;; +1436C;EGYPTIAN HIEROGLYPH-1436C;Lo;0;L;;;;;N;;;;; +1436D;EGYPTIAN HIEROGLYPH-1436D;Lo;0;L;;;;;N;;;;; +1436E;EGYPTIAN HIEROGLYPH-1436E;Lo;0;L;;;;;N;;;;; +1436F;EGYPTIAN HIEROGLYPH-1436F;Lo;0;L;;;;;N;;;;; +14370;EGYPTIAN HIEROGLYPH-14370;Lo;0;L;;;;;N;;;;; +14371;EGYPTIAN HIEROGLYPH-14371;Lo;0;L;;;;;N;;;;; +14372;EGYPTIAN HIEROGLYPH-14372;Lo;0;L;;;;;N;;;;; +14373;EGYPTIAN HIEROGLYPH-14373;Lo;0;L;;;;;N;;;;; +14374;EGYPTIAN HIEROGLYPH-14374;Lo;0;L;;;;;N;;;;; +14375;EGYPTIAN HIEROGLYPH-14375;Lo;0;L;;;;;N;;;;; +14376;EGYPTIAN HIEROGLYPH-14376;Lo;0;L;;;;;N;;;;; +14377;EGYPTIAN HIEROGLYPH-14377;Lo;0;L;;;;;N;;;;; +14378;EGYPTIAN HIEROGLYPH-14378;Lo;0;L;;;;;N;;;;; +14379;EGYPTIAN HIEROGLYPH-14379;Lo;0;L;;;;;N;;;;; +1437A;EGYPTIAN HIEROGLYPH-1437A;Lo;0;L;;;;;N;;;;; +1437B;EGYPTIAN HIEROGLYPH-1437B;Lo;0;L;;;;;N;;;;; +1437C;EGYPTIAN HIEROGLYPH-1437C;Lo;0;L;;;;;N;;;;; +1437D;EGYPTIAN HIEROGLYPH-1437D;Lo;0;L;;;;;N;;;;; +1437E;EGYPTIAN HIEROGLYPH-1437E;Lo;0;L;;;;;N;;;;; +1437F;EGYPTIAN HIEROGLYPH-1437F;Lo;0;L;;;;;N;;;;; +14380;EGYPTIAN HIEROGLYPH-14380;Lo;0;L;;;;;N;;;;; +14381;EGYPTIAN HIEROGLYPH-14381;Lo;0;L;;;;;N;;;;; +14382;EGYPTIAN HIEROGLYPH-14382;Lo;0;L;;;;;N;;;;; +14383;EGYPTIAN HIEROGLYPH-14383;Lo;0;L;;;;;N;;;;; +14384;EGYPTIAN HIEROGLYPH-14384;Lo;0;L;;;;;N;;;;; +14385;EGYPTIAN HIEROGLYPH-14385;Lo;0;L;;;;;N;;;;; +14386;EGYPTIAN HIEROGLYPH-14386;Lo;0;L;;;;;N;;;;; +14387;EGYPTIAN HIEROGLYPH-14387;Lo;0;L;;;;;N;;;;; +14388;EGYPTIAN HIEROGLYPH-14388;Lo;0;L;;;;;N;;;;; +14389;EGYPTIAN HIEROGLYPH-14389;Lo;0;L;;;;;N;;;;; +1438A;EGYPTIAN HIEROGLYPH-1438A;Lo;0;L;;;;;N;;;;; +1438B;EGYPTIAN HIEROGLYPH-1438B;Lo;0;L;;;;;N;;;;; +1438C;EGYPTIAN HIEROGLYPH-1438C;Lo;0;L;;;;;N;;;;; +1438D;EGYPTIAN HIEROGLYPH-1438D;Lo;0;L;;;;;N;;;;; +1438E;EGYPTIAN HIEROGLYPH-1438E;Lo;0;L;;;;;N;;;;; +1438F;EGYPTIAN HIEROGLYPH-1438F;Lo;0;L;;;;;N;;;;; +14390;EGYPTIAN HIEROGLYPH-14390;Lo;0;L;;;;;N;;;;; +14391;EGYPTIAN HIEROGLYPH-14391;Lo;0;L;;;;;N;;;;; +14392;EGYPTIAN HIEROGLYPH-14392;Lo;0;L;;;;;N;;;;; +14393;EGYPTIAN HIEROGLYPH-14393;Lo;0;L;;;;;N;;;;; +14394;EGYPTIAN HIEROGLYPH-14394;Lo;0;L;;;;;N;;;;; +14395;EGYPTIAN HIEROGLYPH-14395;Lo;0;L;;;;;N;;;;; +14396;EGYPTIAN HIEROGLYPH-14396;Lo;0;L;;;;;N;;;;; +14397;EGYPTIAN HIEROGLYPH-14397;Lo;0;L;;;;;N;;;;; +14398;EGYPTIAN HIEROGLYPH-14398;Lo;0;L;;;;;N;;;;; +14399;EGYPTIAN HIEROGLYPH-14399;Lo;0;L;;;;;N;;;;; +1439A;EGYPTIAN HIEROGLYPH-1439A;Lo;0;L;;;;;N;;;;; +1439B;EGYPTIAN HIEROGLYPH-1439B;Lo;0;L;;;;;N;;;;; +1439C;EGYPTIAN HIEROGLYPH-1439C;Lo;0;L;;;;;N;;;;; +1439D;EGYPTIAN HIEROGLYPH-1439D;Lo;0;L;;;;;N;;;;; +1439E;EGYPTIAN HIEROGLYPH-1439E;Lo;0;L;;;;;N;;;;; +1439F;EGYPTIAN HIEROGLYPH-1439F;Lo;0;L;;;;;N;;;;; +143A0;EGYPTIAN HIEROGLYPH-143A0;Lo;0;L;;;;;N;;;;; +143A1;EGYPTIAN HIEROGLYPH-143A1;Lo;0;L;;;;;N;;;;; +143A2;EGYPTIAN HIEROGLYPH-143A2;Lo;0;L;;;;;N;;;;; +143A3;EGYPTIAN HIEROGLYPH-143A3;Lo;0;L;;;;;N;;;;; +143A4;EGYPTIAN HIEROGLYPH-143A4;Lo;0;L;;;;;N;;;;; +143A5;EGYPTIAN HIEROGLYPH-143A5;Lo;0;L;;;;;N;;;;; +143A6;EGYPTIAN HIEROGLYPH-143A6;Lo;0;L;;;;;N;;;;; +143A7;EGYPTIAN HIEROGLYPH-143A7;Lo;0;L;;;;;N;;;;; +143A8;EGYPTIAN HIEROGLYPH-143A8;Lo;0;L;;;;;N;;;;; +143A9;EGYPTIAN HIEROGLYPH-143A9;Lo;0;L;;;;;N;;;;; +143AA;EGYPTIAN HIEROGLYPH-143AA;Lo;0;L;;;;;N;;;;; +143AB;EGYPTIAN HIEROGLYPH-143AB;Lo;0;L;;;;;N;;;;; +143AC;EGYPTIAN HIEROGLYPH-143AC;Lo;0;L;;;;;N;;;;; +143AD;EGYPTIAN HIEROGLYPH-143AD;Lo;0;L;;;;;N;;;;; +143AE;EGYPTIAN HIEROGLYPH-143AE;Lo;0;L;;;;;N;;;;; +143AF;EGYPTIAN HIEROGLYPH-143AF;Lo;0;L;;;;;N;;;;; +143B0;EGYPTIAN HIEROGLYPH-143B0;Lo;0;L;;;;;N;;;;; +143B1;EGYPTIAN HIEROGLYPH-143B1;Lo;0;L;;;;;N;;;;; +143B2;EGYPTIAN HIEROGLYPH-143B2;Lo;0;L;;;;;N;;;;; +143B3;EGYPTIAN HIEROGLYPH-143B3;Lo;0;L;;;;;N;;;;; +143B4;EGYPTIAN HIEROGLYPH-143B4;Lo;0;L;;;;;N;;;;; +143B5;EGYPTIAN HIEROGLYPH-143B5;Lo;0;L;;;;;N;;;;; +143B6;EGYPTIAN HIEROGLYPH-143B6;Lo;0;L;;;;;N;;;;; +143B7;EGYPTIAN HIEROGLYPH-143B7;Lo;0;L;;;;;N;;;;; +143B8;EGYPTIAN HIEROGLYPH-143B8;Lo;0;L;;;;;N;;;;; +143B9;EGYPTIAN HIEROGLYPH-143B9;Lo;0;L;;;;;N;;;;; +143BA;EGYPTIAN HIEROGLYPH-143BA;Lo;0;L;;;;;N;;;;; +143BB;EGYPTIAN HIEROGLYPH-143BB;Lo;0;L;;;;;N;;;;; +143BC;EGYPTIAN HIEROGLYPH-143BC;Lo;0;L;;;;;N;;;;; +143BD;EGYPTIAN HIEROGLYPH-143BD;Lo;0;L;;;;;N;;;;; +143BE;EGYPTIAN HIEROGLYPH-143BE;Lo;0;L;;;;;N;;;;; +143BF;EGYPTIAN HIEROGLYPH-143BF;Lo;0;L;;;;;N;;;;; +143C0;EGYPTIAN HIEROGLYPH-143C0;Lo;0;L;;;;;N;;;;; +143C1;EGYPTIAN HIEROGLYPH-143C1;Lo;0;L;;;;;N;;;;; +143C2;EGYPTIAN HIEROGLYPH-143C2;Lo;0;L;;;;;N;;;;; +143C3;EGYPTIAN HIEROGLYPH-143C3;Lo;0;L;;;;;N;;;;; +143C4;EGYPTIAN HIEROGLYPH-143C4;Lo;0;L;;;;;N;;;;; +143C5;EGYPTIAN HIEROGLYPH-143C5;Lo;0;L;;;;;N;;;;; +143C6;EGYPTIAN HIEROGLYPH-143C6;Lo;0;L;;;;;N;;;;; +143C7;EGYPTIAN HIEROGLYPH-143C7;Lo;0;L;;;;;N;;;;; +143C8;EGYPTIAN HIEROGLYPH-143C8;Lo;0;L;;;;;N;;;;; +143C9;EGYPTIAN HIEROGLYPH-143C9;Lo;0;L;;;;;N;;;;; +143CA;EGYPTIAN HIEROGLYPH-143CA;Lo;0;L;;;;;N;;;;; +143CB;EGYPTIAN HIEROGLYPH-143CB;Lo;0;L;;;;;N;;;;; +143CC;EGYPTIAN HIEROGLYPH-143CC;Lo;0;L;;;;;N;;;;; +143CD;EGYPTIAN HIEROGLYPH-143CD;Lo;0;L;;;;;N;;;;; +143CE;EGYPTIAN HIEROGLYPH-143CE;Lo;0;L;;;;;N;;;;; +143CF;EGYPTIAN HIEROGLYPH-143CF;Lo;0;L;;;;;N;;;;; +143D0;EGYPTIAN HIEROGLYPH-143D0;Lo;0;L;;;;;N;;;;; +143D1;EGYPTIAN HIEROGLYPH-143D1;Lo;0;L;;;;;N;;;;; +143D2;EGYPTIAN HIEROGLYPH-143D2;Lo;0;L;;;;;N;;;;; +143D3;EGYPTIAN HIEROGLYPH-143D3;Lo;0;L;;;;;N;;;;; +143D4;EGYPTIAN HIEROGLYPH-143D4;Lo;0;L;;;;;N;;;;; +143D5;EGYPTIAN HIEROGLYPH-143D5;Lo;0;L;;;;;N;;;;; +143D6;EGYPTIAN HIEROGLYPH-143D6;Lo;0;L;;;;;N;;;;; +143D7;EGYPTIAN HIEROGLYPH-143D7;Lo;0;L;;;;;N;;;;; +143D8;EGYPTIAN HIEROGLYPH-143D8;Lo;0;L;;;;;N;;;;; +143D9;EGYPTIAN HIEROGLYPH-143D9;Lo;0;L;;;;;N;;;;; +143DA;EGYPTIAN HIEROGLYPH-143DA;Lo;0;L;;;;;N;;;;; +143DB;EGYPTIAN HIEROGLYPH-143DB;Lo;0;L;;;;;N;;;;; +143DC;EGYPTIAN HIEROGLYPH-143DC;Lo;0;L;;;;;N;;;;; +143DD;EGYPTIAN HIEROGLYPH-143DD;Lo;0;L;;;;;N;;;;; +143DE;EGYPTIAN HIEROGLYPH-143DE;Lo;0;L;;;;;N;;;;; +143DF;EGYPTIAN HIEROGLYPH-143DF;Lo;0;L;;;;;N;;;;; +143E0;EGYPTIAN HIEROGLYPH-143E0;Lo;0;L;;;;;N;;;;; +143E1;EGYPTIAN HIEROGLYPH-143E1;Lo;0;L;;;;;N;;;;; +143E2;EGYPTIAN HIEROGLYPH-143E2;Lo;0;L;;;;;N;;;;; +143E3;EGYPTIAN HIEROGLYPH-143E3;Lo;0;L;;;;;N;;;;; +143E4;EGYPTIAN HIEROGLYPH-143E4;Lo;0;L;;;;;N;;;;; +143E5;EGYPTIAN HIEROGLYPH-143E5;Lo;0;L;;;;;N;;;;; +143E6;EGYPTIAN HIEROGLYPH-143E6;Lo;0;L;;;;;N;;;;; +143E7;EGYPTIAN HIEROGLYPH-143E7;Lo;0;L;;;;;N;;;;; +143E8;EGYPTIAN HIEROGLYPH-143E8;Lo;0;L;;;;;N;;;;; +143E9;EGYPTIAN HIEROGLYPH-143E9;Lo;0;L;;;;;N;;;;; +143EA;EGYPTIAN HIEROGLYPH-143EA;Lo;0;L;;;;;N;;;;; +143EB;EGYPTIAN HIEROGLYPH-143EB;Lo;0;L;;;;;N;;;;; +143EC;EGYPTIAN HIEROGLYPH-143EC;Lo;0;L;;;;;N;;;;; +143ED;EGYPTIAN HIEROGLYPH-143ED;Lo;0;L;;;;;N;;;;; +143EE;EGYPTIAN HIEROGLYPH-143EE;Lo;0;L;;;;;N;;;;; +143EF;EGYPTIAN HIEROGLYPH-143EF;Lo;0;L;;;;;N;;;;; +143F0;EGYPTIAN HIEROGLYPH-143F0;Lo;0;L;;;;;N;;;;; +143F1;EGYPTIAN HIEROGLYPH-143F1;Lo;0;L;;;;;N;;;;; +143F2;EGYPTIAN HIEROGLYPH-143F2;Lo;0;L;;;;;N;;;;; +143F3;EGYPTIAN HIEROGLYPH-143F3;Lo;0;L;;;;;N;;;;; +143F4;EGYPTIAN HIEROGLYPH-143F4;Lo;0;L;;;;;N;;;;; +143F5;EGYPTIAN HIEROGLYPH-143F5;Lo;0;L;;;;;N;;;;; +143F6;EGYPTIAN HIEROGLYPH-143F6;Lo;0;L;;;;;N;;;;; +143F7;EGYPTIAN HIEROGLYPH-143F7;Lo;0;L;;;;;N;;;;; +143F8;EGYPTIAN HIEROGLYPH-143F8;Lo;0;L;;;;;N;;;;; +143F9;EGYPTIAN HIEROGLYPH-143F9;Lo;0;L;;;;;N;;;;; +143FA;EGYPTIAN HIEROGLYPH-143FA;Lo;0;L;;;;;N;;;;; 14400;ANATOLIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;; 14401;ANATOLIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;; 14402;ANATOLIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;; @@ -24223,6 +29053,64 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 14644;ANATOLIAN HIEROGLYPH A528;Lo;0;L;;;;;N;;;;; 14645;ANATOLIAN HIEROGLYPH A529;Lo;0;L;;;;;N;;;;; 14646;ANATOLIAN HIEROGLYPH A530;Lo;0;L;;;;;N;;;;; +16100;GURUNG KHEMA LETTER A;Lo;0;L;;;;;N;;;;; +16101;GURUNG KHEMA LETTER KA;Lo;0;L;;;;;N;;;;; +16102;GURUNG KHEMA LETTER KHA;Lo;0;L;;;;;N;;;;; +16103;GURUNG KHEMA LETTER GA;Lo;0;L;;;;;N;;;;; +16104;GURUNG KHEMA LETTER GHA;Lo;0;L;;;;;N;;;;; +16105;GURUNG KHEMA LETTER NGA;Lo;0;L;;;;;N;;;;; +16106;GURUNG KHEMA LETTER CA;Lo;0;L;;;;;N;;;;; +16107;GURUNG KHEMA LETTER CHA;Lo;0;L;;;;;N;;;;; +16108;GURUNG KHEMA LETTER JA;Lo;0;L;;;;;N;;;;; +16109;GURUNG KHEMA LETTER JHA;Lo;0;L;;;;;N;;;;; +1610A;GURUNG KHEMA LETTER HA;Lo;0;L;;;;;N;;;;; +1610B;GURUNG KHEMA LETTER TTA;Lo;0;L;;;;;N;;;;; +1610C;GURUNG KHEMA LETTER TTHA;Lo;0;L;;;;;N;;;;; +1610D;GURUNG KHEMA LETTER DDA;Lo;0;L;;;;;N;;;;; +1610E;GURUNG KHEMA LETTER DDHA;Lo;0;L;;;;;N;;;;; +1610F;GURUNG KHEMA LETTER VA;Lo;0;L;;;;;N;;;;; +16110;GURUNG KHEMA LETTER TA;Lo;0;L;;;;;N;;;;; +16111;GURUNG KHEMA LETTER THA;Lo;0;L;;;;;N;;;;; +16112;GURUNG KHEMA LETTER DA;Lo;0;L;;;;;N;;;;; +16113;GURUNG KHEMA LETTER DHA;Lo;0;L;;;;;N;;;;; +16114;GURUNG KHEMA LETTER NA;Lo;0;L;;;;;N;;;;; +16115;GURUNG KHEMA LETTER PA;Lo;0;L;;;;;N;;;;; +16116;GURUNG KHEMA LETTER PHA;Lo;0;L;;;;;N;;;;; +16117;GURUNG KHEMA LETTER BA;Lo;0;L;;;;;N;;;;; +16118;GURUNG KHEMA LETTER BHA;Lo;0;L;;;;;N;;;;; +16119;GURUNG KHEMA LETTER MA;Lo;0;L;;;;;N;;;;; +1611A;GURUNG KHEMA LETTER YA;Lo;0;L;;;;;N;;;;; +1611B;GURUNG KHEMA LETTER RA;Lo;0;L;;;;;N;;;;; +1611C;GURUNG KHEMA LETTER LA;Lo;0;L;;;;;N;;;;; +1611D;GURUNG KHEMA LETTER SA;Lo;0;L;;;;;N;;;;; +1611E;GURUNG KHEMA VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; +1611F;GURUNG KHEMA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +16120;GURUNG KHEMA VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +16121;GURUNG KHEMA VOWEL SIGN U;Mn;0;NSM;1611E 1611E;;;;N;;;;; +16122;GURUNG KHEMA VOWEL SIGN UU;Mn;0;NSM;1611E 16129;;;;N;;;;; +16123;GURUNG KHEMA VOWEL SIGN E;Mn;0;NSM;1611E 1611F;;;;N;;;;; +16124;GURUNG KHEMA VOWEL SIGN EE;Mn;0;NSM;16129 1611F;;;;N;;;;; +16125;GURUNG KHEMA VOWEL SIGN AI;Mn;0;NSM;1611E 16120;;;;N;;;;; +16126;GURUNG KHEMA VOWEL SIGN O;Mn;0;NSM;16121 1611F;;;;N;;;;; +16127;GURUNG KHEMA VOWEL SIGN OO;Mn;0;NSM;16122 1611F;;;;N;;;;; +16128;GURUNG KHEMA VOWEL SIGN AU;Mn;0;NSM;16121 16120;;;;N;;;;; +16129;GURUNG KHEMA VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;; +1612A;GURUNG KHEMA CONSONANT SIGN MEDIAL YA;Mc;0;L;;;;;N;;;;; +1612B;GURUNG KHEMA CONSONANT SIGN MEDIAL VA;Mc;0;L;;;;;N;;;;; +1612C;GURUNG KHEMA CONSONANT SIGN MEDIAL HA;Mc;0;L;;;;;N;;;;; +1612D;GURUNG KHEMA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +1612E;GURUNG KHEMA CONSONANT SIGN MEDIAL RA;Mn;0;NSM;;;;;N;;;;; +1612F;GURUNG KHEMA SIGN THOLHOMA;Mn;9;NSM;;;;;N;;;;; +16130;GURUNG KHEMA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +16131;GURUNG KHEMA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +16132;GURUNG KHEMA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +16133;GURUNG KHEMA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +16134;GURUNG KHEMA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +16135;GURUNG KHEMA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +16136;GURUNG KHEMA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +16137;GURUNG KHEMA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +16138;GURUNG KHEMA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +16139;GURUNG KHEMA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16800;BAMUM LETTER PHASE-A NGKUE MFON;Lo;0;L;;;;;N;;;;; 16801;BAMUM LETTER PHASE-A GBIEE FON;Lo;0;L;;;;;N;;;;; 16802;BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE;Lo;0;L;;;;;N;;;;; @@ -24835,6 +29723,95 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 16A69;MRO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16A6E;MRO DANDA;Po;0;L;;;;;N;;;;; 16A6F;MRO DOUBLE DANDA;Po;0;L;;;;;N;;;;; +16A70;TANGSA LETTER OZ;Lo;0;L;;;;;N;;;;; +16A71;TANGSA LETTER OC;Lo;0;L;;;;;N;;;;; +16A72;TANGSA LETTER OQ;Lo;0;L;;;;;N;;;;; +16A73;TANGSA LETTER OX;Lo;0;L;;;;;N;;;;; +16A74;TANGSA LETTER AZ;Lo;0;L;;;;;N;;;;; +16A75;TANGSA LETTER AC;Lo;0;L;;;;;N;;;;; +16A76;TANGSA LETTER AQ;Lo;0;L;;;;;N;;;;; +16A77;TANGSA LETTER AX;Lo;0;L;;;;;N;;;;; +16A78;TANGSA LETTER VZ;Lo;0;L;;;;;N;;;;; +16A79;TANGSA LETTER VC;Lo;0;L;;;;;N;;;;; +16A7A;TANGSA LETTER VQ;Lo;0;L;;;;;N;;;;; +16A7B;TANGSA LETTER VX;Lo;0;L;;;;;N;;;;; +16A7C;TANGSA LETTER EZ;Lo;0;L;;;;;N;;;;; +16A7D;TANGSA LETTER EC;Lo;0;L;;;;;N;;;;; +16A7E;TANGSA LETTER EQ;Lo;0;L;;;;;N;;;;; +16A7F;TANGSA LETTER EX;Lo;0;L;;;;;N;;;;; +16A80;TANGSA LETTER IZ;Lo;0;L;;;;;N;;;;; +16A81;TANGSA LETTER IC;Lo;0;L;;;;;N;;;;; +16A82;TANGSA LETTER IQ;Lo;0;L;;;;;N;;;;; +16A83;TANGSA LETTER IX;Lo;0;L;;;;;N;;;;; +16A84;TANGSA LETTER UZ;Lo;0;L;;;;;N;;;;; +16A85;TANGSA LETTER UC;Lo;0;L;;;;;N;;;;; +16A86;TANGSA LETTER UQ;Lo;0;L;;;;;N;;;;; +16A87;TANGSA LETTER UX;Lo;0;L;;;;;N;;;;; +16A88;TANGSA LETTER AWZ;Lo;0;L;;;;;N;;;;; +16A89;TANGSA LETTER AWC;Lo;0;L;;;;;N;;;;; +16A8A;TANGSA LETTER AWQ;Lo;0;L;;;;;N;;;;; +16A8B;TANGSA LETTER AWX;Lo;0;L;;;;;N;;;;; +16A8C;TANGSA LETTER UIZ;Lo;0;L;;;;;N;;;;; +16A8D;TANGSA LETTER UIC;Lo;0;L;;;;;N;;;;; +16A8E;TANGSA LETTER UIQ;Lo;0;L;;;;;N;;;;; +16A8F;TANGSA LETTER UIX;Lo;0;L;;;;;N;;;;; +16A90;TANGSA LETTER FINAL NG;Lo;0;L;;;;;N;;;;; +16A91;TANGSA LETTER LONG UEX;Lo;0;L;;;;;N;;;;; +16A92;TANGSA LETTER SHORT UEZ;Lo;0;L;;;;;N;;;;; +16A93;TANGSA LETTER SHORT AWX;Lo;0;L;;;;;N;;;;; +16A94;TANGSA LETTER UEC;Lo;0;L;;;;;N;;;;; +16A95;TANGSA LETTER UEZ;Lo;0;L;;;;;N;;;;; +16A96;TANGSA LETTER UEQ;Lo;0;L;;;;;N;;;;; +16A97;TANGSA LETTER UEX;Lo;0;L;;;;;N;;;;; +16A98;TANGSA LETTER UIUZ;Lo;0;L;;;;;N;;;;; +16A99;TANGSA LETTER UIUC;Lo;0;L;;;;;N;;;;; +16A9A;TANGSA LETTER UIUQ;Lo;0;L;;;;;N;;;;; +16A9B;TANGSA LETTER UIUX;Lo;0;L;;;;;N;;;;; +16A9C;TANGSA LETTER MZ;Lo;0;L;;;;;N;;;;; +16A9D;TANGSA LETTER MC;Lo;0;L;;;;;N;;;;; +16A9E;TANGSA LETTER MQ;Lo;0;L;;;;;N;;;;; +16A9F;TANGSA LETTER MX;Lo;0;L;;;;;N;;;;; +16AA0;TANGSA LETTER KA;Lo;0;L;;;;;N;;;;; +16AA1;TANGSA LETTER KHA;Lo;0;L;;;;;N;;;;; +16AA2;TANGSA LETTER GA;Lo;0;L;;;;;N;;;;; +16AA3;TANGSA LETTER NGA;Lo;0;L;;;;;N;;;;; +16AA4;TANGSA LETTER SA;Lo;0;L;;;;;N;;;;; +16AA5;TANGSA LETTER YA;Lo;0;L;;;;;N;;;;; +16AA6;TANGSA LETTER WA;Lo;0;L;;;;;N;;;;; +16AA7;TANGSA LETTER PA;Lo;0;L;;;;;N;;;;; +16AA8;TANGSA LETTER NYA;Lo;0;L;;;;;N;;;;; +16AA9;TANGSA LETTER PHA;Lo;0;L;;;;;N;;;;; +16AAA;TANGSA LETTER BA;Lo;0;L;;;;;N;;;;; +16AAB;TANGSA LETTER MA;Lo;0;L;;;;;N;;;;; +16AAC;TANGSA LETTER NA;Lo;0;L;;;;;N;;;;; +16AAD;TANGSA LETTER HA;Lo;0;L;;;;;N;;;;; +16AAE;TANGSA LETTER LA;Lo;0;L;;;;;N;;;;; +16AAF;TANGSA LETTER HTA;Lo;0;L;;;;;N;;;;; +16AB0;TANGSA LETTER TA;Lo;0;L;;;;;N;;;;; +16AB1;TANGSA LETTER DA;Lo;0;L;;;;;N;;;;; +16AB2;TANGSA LETTER RA;Lo;0;L;;;;;N;;;;; +16AB3;TANGSA LETTER NHA;Lo;0;L;;;;;N;;;;; +16AB4;TANGSA LETTER SHA;Lo;0;L;;;;;N;;;;; +16AB5;TANGSA LETTER CA;Lo;0;L;;;;;N;;;;; +16AB6;TANGSA LETTER TSA;Lo;0;L;;;;;N;;;;; +16AB7;TANGSA LETTER GHA;Lo;0;L;;;;;N;;;;; +16AB8;TANGSA LETTER HTTA;Lo;0;L;;;;;N;;;;; +16AB9;TANGSA LETTER THA;Lo;0;L;;;;;N;;;;; +16ABA;TANGSA LETTER XA;Lo;0;L;;;;;N;;;;; +16ABB;TANGSA LETTER FA;Lo;0;L;;;;;N;;;;; +16ABC;TANGSA LETTER DHA;Lo;0;L;;;;;N;;;;; +16ABD;TANGSA LETTER CHA;Lo;0;L;;;;;N;;;;; +16ABE;TANGSA LETTER ZA;Lo;0;L;;;;;N;;;;; +16AC0;TANGSA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +16AC1;TANGSA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +16AC2;TANGSA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +16AC3;TANGSA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +16AC4;TANGSA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +16AC5;TANGSA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +16AC6;TANGSA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +16AC7;TANGSA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +16AC8;TANGSA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +16AC9;TANGSA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16AD0;BASSA VAH LETTER ENNI;Lo;0;L;;;;;N;;;;; 16AD1;BASSA VAH LETTER KA;Lo;0;L;;;;;N;;;;; 16AD2;BASSA VAH LETTER SE;Lo;0;L;;;;;N;;;;; @@ -24998,6 +29975,64 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 16B8D;PAHAWH HMONG CLAN SIGN TSWB;Lo;0;L;;;;;N;;;;; 16B8E;PAHAWH HMONG CLAN SIGN KWM;Lo;0;L;;;;;N;;;;; 16B8F;PAHAWH HMONG CLAN SIGN VWJ;Lo;0;L;;;;;N;;;;; +16D40;KIRAT RAI SIGN ANUSVARA;Lm;0;L;;;;;N;;;;; +16D41;KIRAT RAI SIGN TONPI;Lm;0;L;;;;;N;;;;; +16D42;KIRAT RAI SIGN VISARGA;Lm;0;L;;;;;N;;;;; +16D43;KIRAT RAI LETTER A;Lo;0;L;;;;;N;;;;; +16D44;KIRAT RAI LETTER KA;Lo;0;L;;;;;N;;;;; +16D45;KIRAT RAI LETTER KHA;Lo;0;L;;;;;N;;;;; +16D46;KIRAT RAI LETTER GA;Lo;0;L;;;;;N;;;;; +16D47;KIRAT RAI LETTER GHA;Lo;0;L;;;;;N;;;;; +16D48;KIRAT RAI LETTER NGA;Lo;0;L;;;;;N;;;;; +16D49;KIRAT RAI LETTER CA;Lo;0;L;;;;;N;;;;; +16D4A;KIRAT RAI LETTER CHA;Lo;0;L;;;;;N;;;;; +16D4B;KIRAT RAI LETTER JA;Lo;0;L;;;;;N;;;;; +16D4C;KIRAT RAI LETTER JHA;Lo;0;L;;;;;N;;;;; +16D4D;KIRAT RAI LETTER NYA;Lo;0;L;;;;;N;;;;; +16D4E;KIRAT RAI LETTER TTA;Lo;0;L;;;;;N;;;;; +16D4F;KIRAT RAI LETTER TTHA;Lo;0;L;;;;;N;;;;; +16D50;KIRAT RAI LETTER DDA;Lo;0;L;;;;;N;;;;; +16D51;KIRAT RAI LETTER DDHA;Lo;0;L;;;;;N;;;;; +16D52;KIRAT RAI LETTER TA;Lo;0;L;;;;;N;;;;; +16D53;KIRAT RAI LETTER THA;Lo;0;L;;;;;N;;;;; +16D54;KIRAT RAI LETTER DA;Lo;0;L;;;;;N;;;;; +16D55;KIRAT RAI LETTER DHA;Lo;0;L;;;;;N;;;;; +16D56;KIRAT RAI LETTER NA;Lo;0;L;;;;;N;;;;; +16D57;KIRAT RAI LETTER PA;Lo;0;L;;;;;N;;;;; +16D58;KIRAT RAI LETTER PHA;Lo;0;L;;;;;N;;;;; +16D59;KIRAT RAI LETTER BA;Lo;0;L;;;;;N;;;;; +16D5A;KIRAT RAI LETTER BHA;Lo;0;L;;;;;N;;;;; +16D5B;KIRAT RAI LETTER MA;Lo;0;L;;;;;N;;;;; +16D5C;KIRAT RAI LETTER YA;Lo;0;L;;;;;N;;;;; +16D5D;KIRAT RAI LETTER RA;Lo;0;L;;;;;N;;;;; +16D5E;KIRAT RAI LETTER LA;Lo;0;L;;;;;N;;;;; +16D5F;KIRAT RAI LETTER VA;Lo;0;L;;;;;N;;;;; +16D60;KIRAT RAI LETTER SA;Lo;0;L;;;;;N;;;;; +16D61;KIRAT RAI LETTER SHA;Lo;0;L;;;;;N;;;;; +16D62;KIRAT RAI LETTER HA;Lo;0;L;;;;;N;;;;; +16D63;KIRAT RAI VOWEL SIGN AA;Lo;0;L;;;;;N;;;;; +16D64;KIRAT RAI VOWEL SIGN I;Lo;0;L;;;;;N;;;;; +16D65;KIRAT RAI VOWEL SIGN U;Lo;0;L;;;;;N;;;;; +16D66;KIRAT RAI VOWEL SIGN UE;Lo;0;L;;;;;N;;;;; +16D67;KIRAT RAI VOWEL SIGN E;Lo;0;L;;;;;N;;;;; +16D68;KIRAT RAI VOWEL SIGN AI;Lo;0;L;16D67 16D67;;;;N;;;;; +16D69;KIRAT RAI VOWEL SIGN O;Lo;0;L;16D63 16D67;;;;N;;;;; +16D6A;KIRAT RAI VOWEL SIGN AU;Lo;0;L;16D69 16D67;;;;N;;;;; +16D6B;KIRAT RAI SIGN VIRAMA;Lm;0;L;;;;;N;;;;; +16D6C;KIRAT RAI SIGN SAAT;Lm;0;L;;;;;N;;;;; +16D6D;KIRAT RAI SIGN YUPI;Po;0;L;;;;;N;;;;; +16D6E;KIRAT RAI DANDA;Po;0;L;;;;;N;;;;; +16D6F;KIRAT RAI DOUBLE DANDA;Po;0;L;;;;;N;;;;; +16D70;KIRAT RAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +16D71;KIRAT RAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +16D72;KIRAT RAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +16D73;KIRAT RAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +16D74;KIRAT RAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +16D75;KIRAT RAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +16D76;KIRAT RAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +16D77;KIRAT RAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +16D78;KIRAT RAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +16D79;KIRAT RAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16E40;MEDEFAIDRIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;16E60; 16E41;MEDEFAIDRIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;16E61; 16E42;MEDEFAIDRIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;16E62; @@ -26485,8 +31520,22 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 18CD3;KHITAN SMALL SCRIPT CHARACTER-18CD3;Lo;0;L;;;;;N;;;;; 18CD4;KHITAN SMALL SCRIPT CHARACTER-18CD4;Lo;0;L;;;;;N;;;;; 18CD5;KHITAN SMALL SCRIPT CHARACTER-18CD5;Lo;0;L;;;;;N;;;;; +18CFF;KHITAN SMALL SCRIPT CHARACTER-18CFF;Lo;0;L;;;;;N;;;;; 18D00;;Lo;0;L;;;;;N;;;;; 18D08;;Lo;0;L;;;;;N;;;;; +1AFF0;KATAKANA LETTER MINNAN TONE-2;Lm;0;L;;;;;N;;;;; +1AFF1;KATAKANA LETTER MINNAN TONE-3;Lm;0;L;;;;;N;;;;; +1AFF2;KATAKANA LETTER MINNAN TONE-4;Lm;0;L;;;;;N;;;;; +1AFF3;KATAKANA LETTER MINNAN TONE-5;Lm;0;L;;;;;N;;;;; +1AFF5;KATAKANA LETTER MINNAN TONE-7;Lm;0;L;;;;;N;;;;; +1AFF6;KATAKANA LETTER MINNAN TONE-8;Lm;0;L;;;;;N;;;;; +1AFF7;KATAKANA LETTER MINNAN NASALIZED TONE-1;Lm;0;L;;;;;N;;;;; +1AFF8;KATAKANA LETTER MINNAN NASALIZED TONE-2;Lm;0;L;;;;;N;;;;; +1AFF9;KATAKANA LETTER MINNAN NASALIZED TONE-3;Lm;0;L;;;;;N;;;;; +1AFFA;KATAKANA LETTER MINNAN NASALIZED TONE-4;Lm;0;L;;;;;N;;;;; +1AFFB;KATAKANA LETTER MINNAN NASALIZED TONE-5;Lm;0;L;;;;;N;;;;; +1AFFD;KATAKANA LETTER MINNAN NASALIZED TONE-7;Lm;0;L;;;;;N;;;;; +1AFFE;KATAKANA LETTER MINNAN NASALIZED TONE-8;Lm;0;L;;;;;N;;;;; 1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;; 1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;; 1B002;HENTAIGANA LETTER A-1;Lo;0;L;;;;;N;;;;; @@ -26774,9 +31823,15 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1B11C;HENTAIGANA LETTER WO-7;Lo;0;L;;;;;N;;;;; 1B11D;HENTAIGANA LETTER N-MU-MO-1;Lo;0;L;;;;;N;;;;; 1B11E;HENTAIGANA LETTER N-MU-MO-2;Lo;0;L;;;;;N;;;;; +1B11F;HIRAGANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;; +1B120;KATAKANA LETTER ARCHAIC YI;Lo;0;L;;;;;N;;;;; +1B121;KATAKANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;; +1B122;KATAKANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;; +1B132;HIRAGANA LETTER SMALL KO;Lo;0;L;;;;;N;;;;; 1B150;HIRAGANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;; 1B151;HIRAGANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;; 1B152;HIRAGANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;; +1B155;KATAKANA LETTER SMALL KO;Lo;0;L;;;;;N;;;;; 1B164;KATAKANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;; 1B165;KATAKANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;; 1B166;KATAKANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;; @@ -27324,6 +32379,877 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1BCA1;SHORTHAND FORMAT CONTINUING OVERLAP;Cf;0;BN;;;;;N;;;;; 1BCA2;SHORTHAND FORMAT DOWN STEP;Cf;0;BN;;;;;N;;;;; 1BCA3;SHORTHAND FORMAT UP STEP;Cf;0;BN;;;;;N;;;;; +1CC00;UP-POINTING GO-KART;So;0;ON;;;;;N;;;;; +1CC01;RIGHT-POINTING GO-KART;So;0;ON;;;;;N;;;;; +1CC02;LEFT-POINTING STICK FIGURE;So;0;ON;;;;;N;;;;; +1CC03;RIGHT-POINTING STICK FIGURE;So;0;ON;;;;;N;;;;; +1CC04;DOWN-POINTING STICK FIGURE;So;0;ON;;;;;N;;;;; +1CC05;LOWER HORIZONTAL RULER SEGMENT;So;0;ON;;;;;N;;;;; +1CC06;RIGHT VERTICAL RULER SEGMENT;So;0;ON;;;;;N;;;;; +1CC07;LOWER RIGHT RULER SEGMENT;So;0;ON;;;;;N;;;;; +1CC08;ANTENNA;So;0;ON;;;;;N;;;;; +1CC09;HORIZONTAL RESISTOR SEGMENT;So;0;ON;;;;;N;;;;; +1CC0A;VERTICAL RESISTOR SEGMENT;So;0;ON;;;;;N;;;;; +1CC0B;LEFT THIRD INDUCTOR;So;0;ON;;;;;N;;;;; +1CC0C;MIDDLE THIRD INDUCTOR;So;0;ON;;;;;N;;;;; +1CC0D;RIGHT THIRD INDUCTOR;So;0;ON;;;;;N;;;;; +1CC0E;LEFT-POINTING DIODE;So;0;ON;;;;;N;;;;; +1CC0F;RIGHT-POINTING DIODE;So;0;ON;;;;;N;;;;; +1CC10;NPN TRANSISTOR;So;0;ON;;;;;N;;;;; +1CC11;PNP TRANSISTOR;So;0;ON;;;;;N;;;;; +1CC12;RECEPTACLE;So;0;ON;;;;;N;;;;; +1CC13;HORIZONTAL CAPACITOR;So;0;ON;;;;;N;;;;; +1CC14;VERTICAL CAPACITOR;So;0;ON;;;;;N;;;;; +1CC15;LOGIC GATE OR;So;0;ON;;;;;N;;;;; +1CC16;LOGIC GATE AND;So;0;ON;;;;;N;;;;; +1CC17;LOGIC GATE INVERTED INPUTS;So;0;ON;;;;;N;;;;; +1CC18;LOGIC GATE INVERTED OUTPUT;So;0;ON;;;;;N;;;;; +1CC19;LOGIC GATE BUFFER;So;0;ON;;;;;N;;;;; +1CC1A;LOGIC GATE BUFFER WITH INVERTED INPUT;So;0;ON;;;;;N;;;;; +1CC1B;BOX DRAWINGS LIGHT HORIZONTAL AND UPPER RIGHT;So;0;ON;;;;;N;;;;; +1CC1C;BOX DRAWINGS LIGHT HORIZONTAL AND LOWER RIGHT;So;0;ON;;;;;N;;;;; +1CC1D;BOX DRAWINGS LIGHT TOP AND UPPER LEFT;So;0;ON;;;;;N;;;;; +1CC1E;BOX DRAWINGS LIGHT BOTTOM AND LOWER LEFT;So;0;ON;;;;;N;;;;; +1CC1F;BOX DRAWINGS DOUBLE DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;;;;; +1CC20;BOX DRAWINGS DOUBLE DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;; +1CC21;SEPARATED BLOCK QUADRANT-1;So;0;ON;;;;;N;;;;; +1CC22;SEPARATED BLOCK QUADRANT-2;So;0;ON;;;;;N;;;;; +1CC23;SEPARATED BLOCK QUADRANT-12;So;0;ON;;;;;N;;;;; +1CC24;SEPARATED BLOCK QUADRANT-3;So;0;ON;;;;;N;;;;; +1CC25;SEPARATED BLOCK QUADRANT-13;So;0;ON;;;;;N;;;;; +1CC26;SEPARATED BLOCK QUADRANT-23;So;0;ON;;;;;N;;;;; +1CC27;SEPARATED BLOCK QUADRANT-123;So;0;ON;;;;;N;;;;; +1CC28;SEPARATED BLOCK QUADRANT-4;So;0;ON;;;;;N;;;;; +1CC29;SEPARATED BLOCK QUADRANT-14;So;0;ON;;;;;N;;;;; +1CC2A;SEPARATED BLOCK QUADRANT-24;So;0;ON;;;;;N;;;;; +1CC2B;SEPARATED BLOCK QUADRANT-124;So;0;ON;;;;;N;;;;; +1CC2C;SEPARATED BLOCK QUADRANT-34;So;0;ON;;;;;N;;;;; +1CC2D;SEPARATED BLOCK QUADRANT-134;So;0;ON;;;;;N;;;;; +1CC2E;SEPARATED BLOCK QUADRANT-234;So;0;ON;;;;;N;;;;; +1CC2F;SEPARATED BLOCK QUADRANT-1234;So;0;ON;;;;;N;;;;; +1CC30;UPPER LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC31;UPPER CENTRE LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC32;UPPER CENTRE RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC33;UPPER RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC34;UPPER MIDDLE LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC35;UPPER LEFT QUARTER CIRCLE;So;0;ON;;;;;N;;;;; +1CC36;UPPER RIGHT QUARTER CIRCLE;So;0;ON;;;;;N;;;;; +1CC37;UPPER MIDDLE RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC38;LOWER MIDDLE LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC39;LOWER LEFT QUARTER CIRCLE;So;0;ON;;;;;N;;;;; +1CC3A;LOWER RIGHT QUARTER CIRCLE;So;0;ON;;;;;N;;;;; +1CC3B;LOWER MIDDLE RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC3C;LOWER LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC3D;LOWER CENTRE LEFT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC3E;LOWER CENTRE RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC3F;LOWER RIGHT TWELFTH CIRCLE;So;0;ON;;;;;N;;;;; +1CC40;SPARSE HORIZONTAL FILL;So;0;ON;;;;;N;;;;; +1CC41;SPARSE VERTICAL FILL;So;0;ON;;;;;N;;;;; +1CC42;ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; +1CC43;DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; +1CC44;DENSE VERTICAL FILL;So;0;ON;;;;;N;;;;; +1CC45;DENSE HORIZONTAL FILL;So;0;ON;;;;;N;;;;; +1CC46;SPECKLE FILL FRAME-1;So;0;ON;;;;;N;;;;; +1CC47;SPECKLE FILL FRAME-2;So;0;ON;;;;;N;;;;; +1CC48;LEFT-FACING BASSINET;So;0;ON;;;;;N;;;;; +1CC49;RIGHT-FACING BASSINET;So;0;ON;;;;;N;;;;; +1CC4A;FLYING SAUCER WITH BEAMS;So;0;ON;;;;;N;;;;; +1CC4B;FLYING SAUCER WITHOUT BEAMS;So;0;ON;;;;;N;;;;; +1CC4C;ALIEN MONSTER OPEN JAWS;So;0;ON;;;;;N;;;;; +1CC4D;ALIEN MONSTER CLOSED JAWS;So;0;ON;;;;;N;;;;; +1CC4E;ALIEN SQUID OPEN TENTACLES;So;0;ON;;;;;N;;;;; +1CC4F;ALIEN SQUID CLOSED TENTACLES;So;0;ON;;;;;N;;;;; +1CC50;ALIEN CRAB STEPPING RIGHT;So;0;ON;;;;;N;;;;; +1CC51;ALIEN CRAB STEPPING LEFT;So;0;ON;;;;;N;;;;; +1CC52;ALIEN SPIDER CROUCHING;So;0;ON;;;;;N;;;;; +1CC53;ALIEN SPIDER SPREAD;So;0;ON;;;;;N;;;;; +1CC54;ALIEN MONSTER STEP-1;So;0;ON;;;;;N;;;;; +1CC55;ALIEN MONSTER STEP-2;So;0;ON;;;;;N;;;;; +1CC56;LEFT-POINTING ROCKET SHIP;So;0;ON;;;;;N;;;;; +1CC57;UP-POINTING ROCKET SHIP;So;0;ON;;;;;N;;;;; +1CC58;RIGHT-POINTING ROCKET SHIP;So;0;ON;;;;;N;;;;; +1CC59;DOWN-POINTING ROCKET SHIP;So;0;ON;;;;;N;;;;; +1CC5A;TOP HALF LEFT-FACING ROBOT;So;0;ON;;;;;N;;;;; +1CC5B;TOP HALF FORWARD-FACING ROBOT;So;0;ON;;;;;N;;;;; +1CC5C;TOP HALF RIGHT-FACING ROBOT;So;0;ON;;;;;N;;;;; +1CC5D;BOTTOM HALF LEFT-FACING ROBOT;So;0;ON;;;;;N;;;;; +1CC5E;BOTTOM HALF FORWARD-FACING ROBOT;So;0;ON;;;;;N;;;;; +1CC5F;BOTTOM HALF RIGHT-FACING ROBOT;So;0;ON;;;;;N;;;;; +1CC60;LEFT-POINTING ATOMIC BOMB;So;0;ON;;;;;N;;;;; +1CC61;UP-POINTING ATOMIC BOMB;So;0;ON;;;;;N;;;;; +1CC62;RIGHT-POINTING ATOMIC BOMB;So;0;ON;;;;;N;;;;; +1CC63;DOWN-POINTING ATOMIC BOMB;So;0;ON;;;;;N;;;;; +1CC64;MUSHROOM CLOUD;So;0;ON;;;;;N;;;;; +1CC65;LEFT-POINTING RIFLE;So;0;ON;;;;;N;;;;; +1CC66;UP-POINTING RIFLE;So;0;ON;;;;;N;;;;; +1CC67;RIGHT-POINTING RIFLE;So;0;ON;;;;;N;;;;; +1CC68;DOWN-POINTING RIFLE;So;0;ON;;;;;N;;;;; +1CC69;EIGHT RAYS INWARD;So;0;ON;;;;;N;;;;; +1CC6A;EIGHT RAYS OUTWARD;So;0;ON;;;;;N;;;;; +1CC6B;BLACK LARGE CIRCLE MINUS LEFT QUARTER SECTION;So;0;ON;;;;;N;;;;; +1CC6C;BLACK LARGE CIRCLE MINUS UPPER QUARTER SECTION;So;0;ON;;;;;N;;;;; +1CC6D;BLACK LARGE CIRCLE MINUS RIGHT QUARTER SECTION;So;0;ON;;;;;N;;;;; +1CC6E;BLACK LARGE CIRCLE MINUS LOWER QUARTER SECTION;So;0;ON;;;;;N;;;;; +1CC6F;BLACK NEUTRAL FACE;So;0;ON;;;;;N;;;;; +1CC70;LEFT-FACING SNAKE HEAD WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1CC71;UP-FACING SNAKE HEAD WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1CC72;RIGHT-FACING SNAKE HEAD WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1CC73;DOWN-FACING SNAKE HEAD WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1CC74;LEFT-FACING SNAKE HEAD WITH CLOSED MOUTH;So;0;ON;;;;;N;;;;; +1CC75;UP-FACING SNAKE HEAD WITH CLOSED MOUTH;So;0;ON;;;;;N;;;;; +1CC76;RIGHT-FACING SNAKE HEAD WITH CLOSED MOUTH;So;0;ON;;;;;N;;;;; +1CC77;DOWN-FACING SNAKE HEAD WITH CLOSED MOUTH;So;0;ON;;;;;N;;;;; +1CC78;LEFT-POINTING ENERGY WAVE;So;0;ON;;;;;N;;;;; +1CC79;UP-POINTING ENERGY WAVE;So;0;ON;;;;;N;;;;; +1CC7A;RIGHT-POINTING ENERGY WAVE;So;0;ON;;;;;N;;;;; +1CC7B;DOWN-POINTING ENERGY WAVE;So;0;ON;;;;;N;;;;; +1CC7C;SQUARE SPIRAL FROM TOP LEFT;So;0;ON;;;;;N;;;;; +1CC7D;SQUARE SPIRAL FROM TOP RIGHT;So;0;ON;;;;;N;;;;; +1CC7E;SQUARE SPIRAL FROM BOTTOM RIGHT;So;0;ON;;;;;N;;;;; +1CC7F;SQUARE SPIRAL FROM BOTTOM LEFT;So;0;ON;;;;;N;;;;; +1CC80;STRIPED LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; +1CC81;STRIPED UP-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; +1CC82;STRIPED RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; +1CC83;STRIPED DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;;;;; +1CC84;VERTICAL LADDER;So;0;ON;;;;;N;;;;; +1CC85;HORIZONTAL LADDER;So;0;ON;;;;;N;;;;; +1CC86;WHITE LOWER LEFT POINTER;So;0;ON;;;;;N;;;;; +1CC87;WHITE LOWER RIGHT POINTER;So;0;ON;;;;;N;;;;; +1CC88;TWO RINGS ALIGNED HORIZONTALLY;So;0;ON;;;;;N;;;;; +1CC89;SQUARE FOUR CORNER SALTIRES;So;0;ON;;;;;N;;;;; +1CC8A;SQUARE FOUR CORNER DIAGONALS;So;0;ON;;;;;N;;;;; +1CC8B;SQUARE FOUR CORNER BLACK TRIANGLES;So;0;ON;;;;;N;;;;; +1CC8C;SQUARE APERTURE;So;0;ON;;;;;N;;;;; +1CC8D;INVERSE BLACK DIAMOND;So;0;ON;;;;;N;;;;; +1CC8E;LEFT AND UPPER ONE EIGHTH BLOCK CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; +1CC8F;INVERSE BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; +1CC90;VERTICAL LINE WITH FOUR TICK MARKS;So;0;ON;;;;;N;;;;; +1CC91;HORIZONTAL LINE WITH FOUR TICK MARKS;So;0;ON;;;;;N;;;;; +1CC92;LEFT-FACING FISH;So;0;ON;;;;;N;;;;; +1CC93;RIGHT-FACING FISH;So;0;ON;;;;;N;;;;; +1CC94;LEFT-FACING FISH WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1CC95;RIGHT-FACING FISH WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1CC96;FLAPPING BIRD;So;0;ON;;;;;N;;;;; +1CC97;LEFT-POINTING RACING CAR;So;0;ON;;;;;N;;;;; +1CC98;UP-POINTING RACING CAR;So;0;ON;;;;;N;;;;; +1CC99;RIGHT-POINTING RACING CAR;So;0;ON;;;;;N;;;;; +1CC9A;DOWN-POINTING RACING CAR;So;0;ON;;;;;N;;;;; +1CC9B;HORIZONTAL RACING CAR;So;0;ON;;;;;N;;;;; +1CC9C;VERTICAL RACING CAR;So;0;ON;;;;;N;;;;; +1CC9D;VERTICAL GO-KART;So;0;ON;;;;;N;;;;; +1CC9E;LEFT-POINTING TANK;So;0;ON;;;;;N;;;;; +1CC9F;RIGHT-POINTING TANK;So;0;ON;;;;;N;;;;; +1CCA0;LEFT-POINTING ROCKET BOOSTER;So;0;ON;;;;;N;;;;; +1CCA1;RIGHT-POINTING ROCKET BOOSTER;So;0;ON;;;;;N;;;;; +1CCA2;LEFT-POINTING ROLLER COASTER CAR;So;0;ON;;;;;N;;;;; +1CCA3;RIGHT-POINTING ROLLER COASTER CAR;So;0;ON;;;;;N;;;;; +1CCA4;LEFT HALF FLYING SAUCER;So;0;ON;;;;;N;;;;; +1CCA5;RIGHT HALF FLYING SAUCER;So;0;ON;;;;;N;;;;; +1CCA6;UPPER LEFT QUADRANT FACE WITH OPEN EYES;So;0;ON;;;;;N;;;;; +1CCA7;UPPER RIGHT QUADRANT FACE WITH OPEN EYES;So;0;ON;;;;;N;;;;; +1CCA8;UPPER LEFT QUADRANT FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;; +1CCA9;UPPER RIGHT QUADRANT FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;; +1CCAA;LOWER LEFT QUADRANT SMILING FACE;So;0;ON;;;;;N;;;;; +1CCAB;LOWER RIGHT QUADRANT SMILING FACE;So;0;ON;;;;;N;;;;; +1CCAC;LOWER LEFT QUADRANT NEUTRAL FACE;So;0;ON;;;;;N;;;;; +1CCAD;LOWER RIGHT QUADRANT NEUTRAL FACE;So;0;ON;;;;;N;;;;; +1CCAE;LOWER LEFT QUADRANT FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1CCAF;LOWER RIGHT QUADRANT FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;; +1CCB0;LOWER LEFT QUADRANT FROWNING FACE;So;0;ON;;;;;N;;;;; +1CCB1;LOWER RIGHT QUADRANT FROWNING FACE;So;0;ON;;;;;N;;;;; +1CCB2;UPPER LEFT QUADRANT TELEVISION;So;0;ON;;;;;N;;;;; +1CCB3;UPPER RIGHT QUADRANT TELEVISION;So;0;ON;;;;;N;;;;; +1CCB4;LOWER LEFT QUADRANT TELEVISION;So;0;ON;;;;;N;;;;; +1CCB5;LOWER RIGHT QUADRANT TELEVISION;So;0;ON;;;;;N;;;;; +1CCB6;UPPER LEFT QUADRANT MICROCOMPUTER;So;0;ON;;;;;N;;;;; +1CCB7;UPPER RIGHT QUADRANT MICROCOMPUTER;So;0;ON;;;;;N;;;;; +1CCB8;LOWER LEFT QUADRANT MICROCOMPUTER;So;0;ON;;;;;N;;;;; +1CCB9;LOWER RIGHT QUADRANT MICROCOMPUTER;So;0;ON;;;;;N;;;;; +1CCBA;UPPER LEFT QUADRANT CHESS KING;So;0;ON;;;;;N;;;;; +1CCBB;UPPER RIGHT QUADRANT CHESS KING;So;0;ON;;;;;N;;;;; +1CCBC;LOWER LEFT QUADRANT CHESS KING;So;0;ON;;;;;N;;;;; +1CCBD;LOWER RIGHT QUADRANT CHESS KING;So;0;ON;;;;;N;;;;; +1CCBE;UPPER LEFT QUADRANT CHESS QUEEN;So;0;ON;;;;;N;;;;; +1CCBF;UPPER RIGHT QUADRANT CHESS QUEEN;So;0;ON;;;;;N;;;;; +1CCC0;LOWER LEFT QUADRANT CHESS QUEEN;So;0;ON;;;;;N;;;;; +1CCC1;LOWER RIGHT QUADRANT CHESS QUEEN;So;0;ON;;;;;N;;;;; +1CCC2;UPPER LEFT QUADRANT CHESS ROOK;So;0;ON;;;;;N;;;;; +1CCC3;UPPER RIGHT QUADRANT CHESS ROOK;So;0;ON;;;;;N;;;;; +1CCC4;LOWER LEFT QUADRANT CHESS ROOK;So;0;ON;;;;;N;;;;; +1CCC5;LOWER RIGHT QUADRANT CHESS ROOK;So;0;ON;;;;;N;;;;; +1CCC6;UPPER LEFT QUADRANT CHESS BISHOP;So;0;ON;;;;;N;;;;; +1CCC7;UPPER RIGHT QUADRANT CHESS BISHOP;So;0;ON;;;;;N;;;;; +1CCC8;LOWER LEFT QUADRANT CHESS BISHOP;So;0;ON;;;;;N;;;;; +1CCC9;LOWER RIGHT QUADRANT CHESS BISHOP;So;0;ON;;;;;N;;;;; +1CCCA;UPPER LEFT QUADRANT CHESS KNIGHT;So;0;ON;;;;;N;;;;; +1CCCB;UPPER RIGHT QUADRANT CHESS KNIGHT;So;0;ON;;;;;N;;;;; +1CCCC;LOWER LEFT QUADRANT CHESS KNIGHT;So;0;ON;;;;;N;;;;; +1CCCD;LOWER RIGHT QUADRANT CHESS KNIGHT;So;0;ON;;;;;N;;;;; +1CCCE;UPPER LEFT QUADRANT CHESS PAWN;So;0;ON;;;;;N;;;;; +1CCCF;UPPER RIGHT QUADRANT CHESS PAWN;So;0;ON;;;;;N;;;;; +1CCD0;LOWER LEFT QUADRANT CHESS PAWN;So;0;ON;;;;;N;;;;; +1CCD1;LOWER RIGHT QUADRANT CHESS PAWN;So;0;ON;;;;;N;;;;; +1CCD2;UPPER LEFT QUADRANT STANDING KNIGHT;So;0;ON;;;;;N;;;;; +1CCD3;UPPER RIGHT QUADRANT STANDING KNIGHT;So;0;ON;;;;;N;;;;; +1CCD4;LOWER LEFT QUADRANT STANDING KNIGHT;So;0;ON;;;;;N;;;;; +1CCD5;LOWER RIGHT QUADRANT STANDING KNIGHT;So;0;ON;;;;;N;;;;; +1CCD6;OUTLINED LATIN CAPITAL LETTER A;So;0;L; 0041;;;;N;;;;; +1CCD7;OUTLINED LATIN CAPITAL LETTER B;So;0;L; 0042;;;;N;;;;; +1CCD8;OUTLINED LATIN CAPITAL LETTER C;So;0;L; 0043;;;;N;;;;; +1CCD9;OUTLINED LATIN CAPITAL LETTER D;So;0;L; 0044;;;;N;;;;; +1CCDA;OUTLINED LATIN CAPITAL LETTER E;So;0;L; 0045;;;;N;;;;; +1CCDB;OUTLINED LATIN CAPITAL LETTER F;So;0;L; 0046;;;;N;;;;; +1CCDC;OUTLINED LATIN CAPITAL LETTER G;So;0;L; 0047;;;;N;;;;; +1CCDD;OUTLINED LATIN CAPITAL LETTER H;So;0;L; 0048;;;;N;;;;; +1CCDE;OUTLINED LATIN CAPITAL LETTER I;So;0;L; 0049;;;;N;;;;; +1CCDF;OUTLINED LATIN CAPITAL LETTER J;So;0;L; 004A;;;;N;;;;; +1CCE0;OUTLINED LATIN CAPITAL LETTER K;So;0;L; 004B;;;;N;;;;; +1CCE1;OUTLINED LATIN CAPITAL LETTER L;So;0;L; 004C;;;;N;;;;; +1CCE2;OUTLINED LATIN CAPITAL LETTER M;So;0;L; 004D;;;;N;;;;; +1CCE3;OUTLINED LATIN CAPITAL LETTER N;So;0;L; 004E;;;;N;;;;; +1CCE4;OUTLINED LATIN CAPITAL LETTER O;So;0;L; 004F;;;;N;;;;; +1CCE5;OUTLINED LATIN CAPITAL LETTER P;So;0;L; 0050;;;;N;;;;; +1CCE6;OUTLINED LATIN CAPITAL LETTER Q;So;0;L; 0051;;;;N;;;;; +1CCE7;OUTLINED LATIN CAPITAL LETTER R;So;0;L; 0052;;;;N;;;;; +1CCE8;OUTLINED LATIN CAPITAL LETTER S;So;0;L; 0053;;;;N;;;;; +1CCE9;OUTLINED LATIN CAPITAL LETTER T;So;0;L; 0054;;;;N;;;;; +1CCEA;OUTLINED LATIN CAPITAL LETTER U;So;0;L; 0055;;;;N;;;;; +1CCEB;OUTLINED LATIN CAPITAL LETTER V;So;0;L; 0056;;;;N;;;;; +1CCEC;OUTLINED LATIN CAPITAL LETTER W;So;0;L; 0057;;;;N;;;;; +1CCED;OUTLINED LATIN CAPITAL LETTER X;So;0;L; 0058;;;;N;;;;; +1CCEE;OUTLINED LATIN CAPITAL LETTER Y;So;0;L; 0059;;;;N;;;;; +1CCEF;OUTLINED LATIN CAPITAL LETTER Z;So;0;L; 005A;;;;N;;;;; +1CCF0;OUTLINED DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; +1CCF1;OUTLINED DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; +1CCF2;OUTLINED DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; +1CCF3;OUTLINED DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; +1CCF4;OUTLINED DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; +1CCF5;OUTLINED DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; +1CCF6;OUTLINED DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; +1CCF7;OUTLINED DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; +1CCF8;OUTLINED DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; +1CCF9;OUTLINED DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1CD00;BLOCK OCTANT-3;So;0;ON;;;;;N;;;;; +1CD01;BLOCK OCTANT-23;So;0;ON;;;;;N;;;;; +1CD02;BLOCK OCTANT-123;So;0;ON;;;;;N;;;;; +1CD03;BLOCK OCTANT-4;So;0;ON;;;;;N;;;;; +1CD04;BLOCK OCTANT-14;So;0;ON;;;;;N;;;;; +1CD05;BLOCK OCTANT-124;So;0;ON;;;;;N;;;;; +1CD06;BLOCK OCTANT-34;So;0;ON;;;;;N;;;;; +1CD07;BLOCK OCTANT-134;So;0;ON;;;;;N;;;;; +1CD08;BLOCK OCTANT-234;So;0;ON;;;;;N;;;;; +1CD09;BLOCK OCTANT-5;So;0;ON;;;;;N;;;;; +1CD0A;BLOCK OCTANT-15;So;0;ON;;;;;N;;;;; +1CD0B;BLOCK OCTANT-25;So;0;ON;;;;;N;;;;; +1CD0C;BLOCK OCTANT-125;So;0;ON;;;;;N;;;;; +1CD0D;BLOCK OCTANT-135;So;0;ON;;;;;N;;;;; +1CD0E;BLOCK OCTANT-235;So;0;ON;;;;;N;;;;; +1CD0F;BLOCK OCTANT-1235;So;0;ON;;;;;N;;;;; +1CD10;BLOCK OCTANT-45;So;0;ON;;;;;N;;;;; +1CD11;BLOCK OCTANT-145;So;0;ON;;;;;N;;;;; +1CD12;BLOCK OCTANT-245;So;0;ON;;;;;N;;;;; +1CD13;BLOCK OCTANT-1245;So;0;ON;;;;;N;;;;; +1CD14;BLOCK OCTANT-345;So;0;ON;;;;;N;;;;; +1CD15;BLOCK OCTANT-1345;So;0;ON;;;;;N;;;;; +1CD16;BLOCK OCTANT-2345;So;0;ON;;;;;N;;;;; +1CD17;BLOCK OCTANT-12345;So;0;ON;;;;;N;;;;; +1CD18;BLOCK OCTANT-6;So;0;ON;;;;;N;;;;; +1CD19;BLOCK OCTANT-16;So;0;ON;;;;;N;;;;; +1CD1A;BLOCK OCTANT-26;So;0;ON;;;;;N;;;;; +1CD1B;BLOCK OCTANT-126;So;0;ON;;;;;N;;;;; +1CD1C;BLOCK OCTANT-36;So;0;ON;;;;;N;;;;; +1CD1D;BLOCK OCTANT-136;So;0;ON;;;;;N;;;;; +1CD1E;BLOCK OCTANT-236;So;0;ON;;;;;N;;;;; +1CD1F;BLOCK OCTANT-1236;So;0;ON;;;;;N;;;;; +1CD20;BLOCK OCTANT-146;So;0;ON;;;;;N;;;;; +1CD21;BLOCK OCTANT-246;So;0;ON;;;;;N;;;;; +1CD22;BLOCK OCTANT-1246;So;0;ON;;;;;N;;;;; +1CD23;BLOCK OCTANT-346;So;0;ON;;;;;N;;;;; +1CD24;BLOCK OCTANT-1346;So;0;ON;;;;;N;;;;; +1CD25;BLOCK OCTANT-2346;So;0;ON;;;;;N;;;;; +1CD26;BLOCK OCTANT-12346;So;0;ON;;;;;N;;;;; +1CD27;BLOCK OCTANT-56;So;0;ON;;;;;N;;;;; +1CD28;BLOCK OCTANT-156;So;0;ON;;;;;N;;;;; +1CD29;BLOCK OCTANT-256;So;0;ON;;;;;N;;;;; +1CD2A;BLOCK OCTANT-1256;So;0;ON;;;;;N;;;;; +1CD2B;BLOCK OCTANT-356;So;0;ON;;;;;N;;;;; +1CD2C;BLOCK OCTANT-1356;So;0;ON;;;;;N;;;;; +1CD2D;BLOCK OCTANT-2356;So;0;ON;;;;;N;;;;; +1CD2E;BLOCK OCTANT-12356;So;0;ON;;;;;N;;;;; +1CD2F;BLOCK OCTANT-456;So;0;ON;;;;;N;;;;; +1CD30;BLOCK OCTANT-1456;So;0;ON;;;;;N;;;;; +1CD31;BLOCK OCTANT-2456;So;0;ON;;;;;N;;;;; +1CD32;BLOCK OCTANT-12456;So;0;ON;;;;;N;;;;; +1CD33;BLOCK OCTANT-3456;So;0;ON;;;;;N;;;;; +1CD34;BLOCK OCTANT-13456;So;0;ON;;;;;N;;;;; +1CD35;BLOCK OCTANT-23456;So;0;ON;;;;;N;;;;; +1CD36;BLOCK OCTANT-17;So;0;ON;;;;;N;;;;; +1CD37;BLOCK OCTANT-27;So;0;ON;;;;;N;;;;; +1CD38;BLOCK OCTANT-127;So;0;ON;;;;;N;;;;; +1CD39;BLOCK OCTANT-37;So;0;ON;;;;;N;;;;; +1CD3A;BLOCK OCTANT-137;So;0;ON;;;;;N;;;;; +1CD3B;BLOCK OCTANT-237;So;0;ON;;;;;N;;;;; +1CD3C;BLOCK OCTANT-1237;So;0;ON;;;;;N;;;;; +1CD3D;BLOCK OCTANT-47;So;0;ON;;;;;N;;;;; +1CD3E;BLOCK OCTANT-147;So;0;ON;;;;;N;;;;; +1CD3F;BLOCK OCTANT-247;So;0;ON;;;;;N;;;;; +1CD40;BLOCK OCTANT-1247;So;0;ON;;;;;N;;;;; +1CD41;BLOCK OCTANT-347;So;0;ON;;;;;N;;;;; +1CD42;BLOCK OCTANT-1347;So;0;ON;;;;;N;;;;; +1CD43;BLOCK OCTANT-2347;So;0;ON;;;;;N;;;;; +1CD44;BLOCK OCTANT-12347;So;0;ON;;;;;N;;;;; +1CD45;BLOCK OCTANT-157;So;0;ON;;;;;N;;;;; +1CD46;BLOCK OCTANT-257;So;0;ON;;;;;N;;;;; +1CD47;BLOCK OCTANT-1257;So;0;ON;;;;;N;;;;; +1CD48;BLOCK OCTANT-357;So;0;ON;;;;;N;;;;; +1CD49;BLOCK OCTANT-2357;So;0;ON;;;;;N;;;;; +1CD4A;BLOCK OCTANT-12357;So;0;ON;;;;;N;;;;; +1CD4B;BLOCK OCTANT-457;So;0;ON;;;;;N;;;;; +1CD4C;BLOCK OCTANT-1457;So;0;ON;;;;;N;;;;; +1CD4D;BLOCK OCTANT-12457;So;0;ON;;;;;N;;;;; +1CD4E;BLOCK OCTANT-3457;So;0;ON;;;;;N;;;;; +1CD4F;BLOCK OCTANT-13457;So;0;ON;;;;;N;;;;; +1CD50;BLOCK OCTANT-23457;So;0;ON;;;;;N;;;;; +1CD51;BLOCK OCTANT-67;So;0;ON;;;;;N;;;;; +1CD52;BLOCK OCTANT-167;So;0;ON;;;;;N;;;;; +1CD53;BLOCK OCTANT-267;So;0;ON;;;;;N;;;;; +1CD54;BLOCK OCTANT-1267;So;0;ON;;;;;N;;;;; +1CD55;BLOCK OCTANT-367;So;0;ON;;;;;N;;;;; +1CD56;BLOCK OCTANT-1367;So;0;ON;;;;;N;;;;; +1CD57;BLOCK OCTANT-2367;So;0;ON;;;;;N;;;;; +1CD58;BLOCK OCTANT-12367;So;0;ON;;;;;N;;;;; +1CD59;BLOCK OCTANT-467;So;0;ON;;;;;N;;;;; +1CD5A;BLOCK OCTANT-1467;So;0;ON;;;;;N;;;;; +1CD5B;BLOCK OCTANT-2467;So;0;ON;;;;;N;;;;; +1CD5C;BLOCK OCTANT-12467;So;0;ON;;;;;N;;;;; +1CD5D;BLOCK OCTANT-3467;So;0;ON;;;;;N;;;;; +1CD5E;BLOCK OCTANT-13467;So;0;ON;;;;;N;;;;; +1CD5F;BLOCK OCTANT-23467;So;0;ON;;;;;N;;;;; +1CD60;BLOCK OCTANT-123467;So;0;ON;;;;;N;;;;; +1CD61;BLOCK OCTANT-567;So;0;ON;;;;;N;;;;; +1CD62;BLOCK OCTANT-1567;So;0;ON;;;;;N;;;;; +1CD63;BLOCK OCTANT-2567;So;0;ON;;;;;N;;;;; +1CD64;BLOCK OCTANT-12567;So;0;ON;;;;;N;;;;; +1CD65;BLOCK OCTANT-3567;So;0;ON;;;;;N;;;;; +1CD66;BLOCK OCTANT-13567;So;0;ON;;;;;N;;;;; +1CD67;BLOCK OCTANT-23567;So;0;ON;;;;;N;;;;; +1CD68;BLOCK OCTANT-123567;So;0;ON;;;;;N;;;;; +1CD69;BLOCK OCTANT-4567;So;0;ON;;;;;N;;;;; +1CD6A;BLOCK OCTANT-14567;So;0;ON;;;;;N;;;;; +1CD6B;BLOCK OCTANT-24567;So;0;ON;;;;;N;;;;; +1CD6C;BLOCK OCTANT-124567;So;0;ON;;;;;N;;;;; +1CD6D;BLOCK OCTANT-34567;So;0;ON;;;;;N;;;;; +1CD6E;BLOCK OCTANT-134567;So;0;ON;;;;;N;;;;; +1CD6F;BLOCK OCTANT-234567;So;0;ON;;;;;N;;;;; +1CD70;BLOCK OCTANT-1234567;So;0;ON;;;;;N;;;;; +1CD71;BLOCK OCTANT-18;So;0;ON;;;;;N;;;;; +1CD72;BLOCK OCTANT-28;So;0;ON;;;;;N;;;;; +1CD73;BLOCK OCTANT-128;So;0;ON;;;;;N;;;;; +1CD74;BLOCK OCTANT-38;So;0;ON;;;;;N;;;;; +1CD75;BLOCK OCTANT-138;So;0;ON;;;;;N;;;;; +1CD76;BLOCK OCTANT-238;So;0;ON;;;;;N;;;;; +1CD77;BLOCK OCTANT-1238;So;0;ON;;;;;N;;;;; +1CD78;BLOCK OCTANT-48;So;0;ON;;;;;N;;;;; +1CD79;BLOCK OCTANT-148;So;0;ON;;;;;N;;;;; +1CD7A;BLOCK OCTANT-248;So;0;ON;;;;;N;;;;; +1CD7B;BLOCK OCTANT-1248;So;0;ON;;;;;N;;;;; +1CD7C;BLOCK OCTANT-348;So;0;ON;;;;;N;;;;; +1CD7D;BLOCK OCTANT-1348;So;0;ON;;;;;N;;;;; +1CD7E;BLOCK OCTANT-2348;So;0;ON;;;;;N;;;;; +1CD7F;BLOCK OCTANT-12348;So;0;ON;;;;;N;;;;; +1CD80;BLOCK OCTANT-58;So;0;ON;;;;;N;;;;; +1CD81;BLOCK OCTANT-158;So;0;ON;;;;;N;;;;; +1CD82;BLOCK OCTANT-258;So;0;ON;;;;;N;;;;; +1CD83;BLOCK OCTANT-1258;So;0;ON;;;;;N;;;;; +1CD84;BLOCK OCTANT-358;So;0;ON;;;;;N;;;;; +1CD85;BLOCK OCTANT-1358;So;0;ON;;;;;N;;;;; +1CD86;BLOCK OCTANT-2358;So;0;ON;;;;;N;;;;; +1CD87;BLOCK OCTANT-12358;So;0;ON;;;;;N;;;;; +1CD88;BLOCK OCTANT-458;So;0;ON;;;;;N;;;;; +1CD89;BLOCK OCTANT-1458;So;0;ON;;;;;N;;;;; +1CD8A;BLOCK OCTANT-2458;So;0;ON;;;;;N;;;;; +1CD8B;BLOCK OCTANT-12458;So;0;ON;;;;;N;;;;; +1CD8C;BLOCK OCTANT-3458;So;0;ON;;;;;N;;;;; +1CD8D;BLOCK OCTANT-13458;So;0;ON;;;;;N;;;;; +1CD8E;BLOCK OCTANT-23458;So;0;ON;;;;;N;;;;; +1CD8F;BLOCK OCTANT-123458;So;0;ON;;;;;N;;;;; +1CD90;BLOCK OCTANT-168;So;0;ON;;;;;N;;;;; +1CD91;BLOCK OCTANT-268;So;0;ON;;;;;N;;;;; +1CD92;BLOCK OCTANT-1268;So;0;ON;;;;;N;;;;; +1CD93;BLOCK OCTANT-368;So;0;ON;;;;;N;;;;; +1CD94;BLOCK OCTANT-2368;So;0;ON;;;;;N;;;;; +1CD95;BLOCK OCTANT-12368;So;0;ON;;;;;N;;;;; +1CD96;BLOCK OCTANT-468;So;0;ON;;;;;N;;;;; +1CD97;BLOCK OCTANT-1468;So;0;ON;;;;;N;;;;; +1CD98;BLOCK OCTANT-12468;So;0;ON;;;;;N;;;;; +1CD99;BLOCK OCTANT-3468;So;0;ON;;;;;N;;;;; +1CD9A;BLOCK OCTANT-13468;So;0;ON;;;;;N;;;;; +1CD9B;BLOCK OCTANT-23468;So;0;ON;;;;;N;;;;; +1CD9C;BLOCK OCTANT-568;So;0;ON;;;;;N;;;;; +1CD9D;BLOCK OCTANT-1568;So;0;ON;;;;;N;;;;; +1CD9E;BLOCK OCTANT-2568;So;0;ON;;;;;N;;;;; +1CD9F;BLOCK OCTANT-12568;So;0;ON;;;;;N;;;;; +1CDA0;BLOCK OCTANT-3568;So;0;ON;;;;;N;;;;; +1CDA1;BLOCK OCTANT-13568;So;0;ON;;;;;N;;;;; +1CDA2;BLOCK OCTANT-23568;So;0;ON;;;;;N;;;;; +1CDA3;BLOCK OCTANT-123568;So;0;ON;;;;;N;;;;; +1CDA4;BLOCK OCTANT-4568;So;0;ON;;;;;N;;;;; +1CDA5;BLOCK OCTANT-14568;So;0;ON;;;;;N;;;;; +1CDA6;BLOCK OCTANT-24568;So;0;ON;;;;;N;;;;; +1CDA7;BLOCK OCTANT-124568;So;0;ON;;;;;N;;;;; +1CDA8;BLOCK OCTANT-34568;So;0;ON;;;;;N;;;;; +1CDA9;BLOCK OCTANT-134568;So;0;ON;;;;;N;;;;; +1CDAA;BLOCK OCTANT-234568;So;0;ON;;;;;N;;;;; +1CDAB;BLOCK OCTANT-1234568;So;0;ON;;;;;N;;;;; +1CDAC;BLOCK OCTANT-178;So;0;ON;;;;;N;;;;; +1CDAD;BLOCK OCTANT-278;So;0;ON;;;;;N;;;;; +1CDAE;BLOCK OCTANT-1278;So;0;ON;;;;;N;;;;; +1CDAF;BLOCK OCTANT-378;So;0;ON;;;;;N;;;;; +1CDB0;BLOCK OCTANT-1378;So;0;ON;;;;;N;;;;; +1CDB1;BLOCK OCTANT-2378;So;0;ON;;;;;N;;;;; +1CDB2;BLOCK OCTANT-12378;So;0;ON;;;;;N;;;;; +1CDB3;BLOCK OCTANT-478;So;0;ON;;;;;N;;;;; +1CDB4;BLOCK OCTANT-1478;So;0;ON;;;;;N;;;;; +1CDB5;BLOCK OCTANT-2478;So;0;ON;;;;;N;;;;; +1CDB6;BLOCK OCTANT-12478;So;0;ON;;;;;N;;;;; +1CDB7;BLOCK OCTANT-3478;So;0;ON;;;;;N;;;;; +1CDB8;BLOCK OCTANT-13478;So;0;ON;;;;;N;;;;; +1CDB9;BLOCK OCTANT-23478;So;0;ON;;;;;N;;;;; +1CDBA;BLOCK OCTANT-123478;So;0;ON;;;;;N;;;;; +1CDBB;BLOCK OCTANT-578;So;0;ON;;;;;N;;;;; +1CDBC;BLOCK OCTANT-1578;So;0;ON;;;;;N;;;;; +1CDBD;BLOCK OCTANT-2578;So;0;ON;;;;;N;;;;; +1CDBE;BLOCK OCTANT-12578;So;0;ON;;;;;N;;;;; +1CDBF;BLOCK OCTANT-3578;So;0;ON;;;;;N;;;;; +1CDC0;BLOCK OCTANT-13578;So;0;ON;;;;;N;;;;; +1CDC1;BLOCK OCTANT-23578;So;0;ON;;;;;N;;;;; +1CDC2;BLOCK OCTANT-123578;So;0;ON;;;;;N;;;;; +1CDC3;BLOCK OCTANT-4578;So;0;ON;;;;;N;;;;; +1CDC4;BLOCK OCTANT-14578;So;0;ON;;;;;N;;;;; +1CDC5;BLOCK OCTANT-24578;So;0;ON;;;;;N;;;;; +1CDC6;BLOCK OCTANT-124578;So;0;ON;;;;;N;;;;; +1CDC7;BLOCK OCTANT-34578;So;0;ON;;;;;N;;;;; +1CDC8;BLOCK OCTANT-134578;So;0;ON;;;;;N;;;;; +1CDC9;BLOCK OCTANT-234578;So;0;ON;;;;;N;;;;; +1CDCA;BLOCK OCTANT-1234578;So;0;ON;;;;;N;;;;; +1CDCB;BLOCK OCTANT-678;So;0;ON;;;;;N;;;;; +1CDCC;BLOCK OCTANT-1678;So;0;ON;;;;;N;;;;; +1CDCD;BLOCK OCTANT-2678;So;0;ON;;;;;N;;;;; +1CDCE;BLOCK OCTANT-12678;So;0;ON;;;;;N;;;;; +1CDCF;BLOCK OCTANT-3678;So;0;ON;;;;;N;;;;; +1CDD0;BLOCK OCTANT-13678;So;0;ON;;;;;N;;;;; +1CDD1;BLOCK OCTANT-23678;So;0;ON;;;;;N;;;;; +1CDD2;BLOCK OCTANT-123678;So;0;ON;;;;;N;;;;; +1CDD3;BLOCK OCTANT-4678;So;0;ON;;;;;N;;;;; +1CDD4;BLOCK OCTANT-14678;So;0;ON;;;;;N;;;;; +1CDD5;BLOCK OCTANT-24678;So;0;ON;;;;;N;;;;; +1CDD6;BLOCK OCTANT-124678;So;0;ON;;;;;N;;;;; +1CDD7;BLOCK OCTANT-34678;So;0;ON;;;;;N;;;;; +1CDD8;BLOCK OCTANT-134678;So;0;ON;;;;;N;;;;; +1CDD9;BLOCK OCTANT-234678;So;0;ON;;;;;N;;;;; +1CDDA;BLOCK OCTANT-1234678;So;0;ON;;;;;N;;;;; +1CDDB;BLOCK OCTANT-15678;So;0;ON;;;;;N;;;;; +1CDDC;BLOCK OCTANT-25678;So;0;ON;;;;;N;;;;; +1CDDD;BLOCK OCTANT-125678;So;0;ON;;;;;N;;;;; +1CDDE;BLOCK OCTANT-35678;So;0;ON;;;;;N;;;;; +1CDDF;BLOCK OCTANT-235678;So;0;ON;;;;;N;;;;; +1CDE0;BLOCK OCTANT-1235678;So;0;ON;;;;;N;;;;; +1CDE1;BLOCK OCTANT-45678;So;0;ON;;;;;N;;;;; +1CDE2;BLOCK OCTANT-145678;So;0;ON;;;;;N;;;;; +1CDE3;BLOCK OCTANT-1245678;So;0;ON;;;;;N;;;;; +1CDE4;BLOCK OCTANT-1345678;So;0;ON;;;;;N;;;;; +1CDE5;BLOCK OCTANT-2345678;So;0;ON;;;;;N;;;;; +1CDE6;TOP HALF STANDING PERSON;So;0;ON;;;;;N;;;;; +1CDE7;BOTTOM HALF STANDING PERSON;So;0;ON;;;;;N;;;;; +1CDE8;TOP HALF RIGHT-FACING RUNNER FRAME-1;So;0;ON;;;;;N;;;;; +1CDE9;BOTTOM HALF RIGHT-FACING RUNNER FRAME-1;So;0;ON;;;;;N;;;;; +1CDEA;TOP HALF RIGHT-FACING RUNNER FRAME-2;So;0;ON;;;;;N;;;;; +1CDEB;BOTTOM HALF RIGHT-FACING RUNNER FRAME-2;So;0;ON;;;;;N;;;;; +1CDEC;TOP HALF LEFT-FACING RUNNER FRAME-1;So;0;ON;;;;;N;;;;; +1CDED;BOTTOM HALF LEFT-FACING RUNNER FRAME-1;So;0;ON;;;;;N;;;;; +1CDEE;TOP HALF LEFT-FACING RUNNER FRAME-2;So;0;ON;;;;;N;;;;; +1CDEF;BOTTOM HALF LEFT-FACING RUNNER FRAME-2;So;0;ON;;;;;N;;;;; +1CDF0;TOP HALF FORWARD-FACING RUNNER;So;0;ON;;;;;N;;;;; +1CDF1;BOTTOM HALF FORWARD-FACING RUNNER FRAME-1;So;0;ON;;;;;N;;;;; +1CDF2;BOTTOM HALF FORWARD-FACING RUNNER FRAME-2;So;0;ON;;;;;N;;;;; +1CDF3;BOTTOM HALF FORWARD-FACING RUNNER FRAME-3;So;0;ON;;;;;N;;;;; +1CDF4;BOTTOM HALF FORWARD-FACING RUNNER FRAME-4;So;0;ON;;;;;N;;;;; +1CDF5;MOON LANDER;So;0;ON;;;;;N;;;;; +1CDF6;TOP HALF FLAILING ROBOT FRAME-1;So;0;ON;;;;;N;;;;; +1CDF7;TOP HALF FLAILING ROBOT FRAME-2;So;0;ON;;;;;N;;;;; +1CDF8;DOWN-POINTING AIRPLANE;So;0;ON;;;;;N;;;;; +1CDF9;LEFT-POINTING AIRPLANE;So;0;ON;;;;;N;;;;; +1CDFA;SMALL UP-POINTING AIRPLANE;So;0;ON;;;;;N;;;;; +1CDFB;UP-POINTING FROG;So;0;ON;;;;;N;;;;; +1CDFC;DOWN-POINTING FROG;So;0;ON;;;;;N;;;;; +1CDFD;EXPLOSION FRAME-1;So;0;ON;;;;;N;;;;; +1CDFE;EXPLOSION FRAME-2;So;0;ON;;;;;N;;;;; +1CDFF;EXPLOSION FRAME-3;So;0;ON;;;;;N;;;;; +1CE00;RIGHT HALF AND LEFT HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;; +1CE01;LOWER HALF AND UPPER HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;; +1CE02;EXPLOSION AT HORIZON;So;0;ON;;;;;N;;;;; +1CE03;UPPER HALF HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;; +1CE04;LOWER HALF HEAVY WHITE SQUARE;So;0;ON;;;;;N;;;;; +1CE05;HEAVY WHITE SQUARE CONTAINING BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; +1CE06;WHITE VERTICAL RECTANGLE WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;; +1CE07;TOP LEFT BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;;;;; +1CE08;FUNNEL;So;0;ON;;;;;N;;;;; +1CE09;BOX DRAWINGS DOUBLE DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;; +1CE0A;BOX DRAWINGS DOUBLE DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;; +1CE0B;LEFT HALF WHITE ELLIPSE;So;0;ON;;;;;N;;;;; +1CE0C;RIGHT HALF WHITE ELLIPSE;So;0;ON;;;;;N;;;;; +1CE0D;LEFT HALF TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;;;;; +1CE0E;RIGHT HALF TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;;;;; +1CE0F;HORIZONTAL LINE WITH TICK MARK;So;0;ON;;;;;N;;;;; +1CE10;LEFT HALF HORIZONTAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;; +1CE11;RIGHT HALF HORIZONTAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;; +1CE12;HORIZONTAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;; +1CE13;LOWER HALF VERTICAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;; +1CE14;UPPER HALF VERTICAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;; +1CE15;VERTICAL LINE WITH THREE TICK MARKS;So;0;ON;;;;;N;;;;; +1CE16;BOX DRAWINGS LIGHT VERTICAL AND TOP RIGHT;So;0;ON;;;;;N;;;;; +1CE17;BOX DRAWINGS LIGHT VERTICAL AND BOTTOM RIGHT;So;0;ON;;;;;N;;;;; +1CE18;BOX DRAWINGS LIGHT VERTICAL AND TOP LEFT;So;0;ON;;;;;N;;;;; +1CE19;BOX DRAWINGS LIGHT VERTICAL AND BOTTOM LEFT;So;0;ON;;;;;N;;;;; +1CE1A;LARGE TYPE PIECE UPPER LEFT ARC;So;0;ON;;;;;N;;;;; +1CE1B;LARGE TYPE PIECE UPPER LEFT CORNER;So;0;ON;;;;;N;;;;; +1CE1C;LARGE TYPE PIECE UPPER TERMINAL;So;0;ON;;;;;N;;;;; +1CE1D;LARGE TYPE PIECE UPPER LEFT CROTCH;So;0;ON;;;;;N;;;;; +1CE1E;LARGE TYPE PIECE LEFT ARM;So;0;ON;;;;;N;;;;; +1CE1F;LARGE TYPE PIECE CROSSBAR;So;0;ON;;;;;N;;;;; +1CE20;LARGE TYPE PIECE CROSSBAR WITH LOWER STEM;So;0;ON;;;;;N;;;;; +1CE21;LARGE TYPE PIECE UPPER HALF VERTEX OF M;So;0;ON;;;;;N;;;;; +1CE22;LARGE TYPE PIECE DIAGONAL LOWER LEFT;So;0;ON;;;;;N;;;;; +1CE23;LARGE TYPE PIECE SHORT UPPER TERMINAL;So;0;ON;;;;;N;;;;; +1CE24;LARGE TYPE PIECE UPPER RIGHT ARC;So;0;ON;;;;;N;;;;; +1CE25;LARGE TYPE PIECE RIGHT ARM;So;0;ON;;;;;N;;;;; +1CE26;LARGE TYPE PIECE UPPER RIGHT CROTCH;So;0;ON;;;;;N;;;;; +1CE27;LARGE TYPE PIECE UPPER RIGHT CORNER;So;0;ON;;;;;N;;;;; +1CE28;LARGE TYPE PIECE STEM WITH RIGHT CROSSBAR;So;0;ON;;;;;N;;;;; +1CE29;LARGE TYPE PIECE STEM;So;0;ON;;;;;N;;;;; +1CE2A;LARGE TYPE PIECE DIAGONAL UPPER RIGHT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; +1CE2B;LARGE TYPE PIECE DIAGONAL UPPER RIGHT;So;0;ON;;;;;N;;;;; +1CE2C;LARGE TYPE PIECE DIAGONAL LOWER RIGHT;So;0;ON;;;;;N;;;;; +1CE2D;LARGE TYPE PIECE SHORT LOWER TERMINAL;So;0;ON;;;;;N;;;;; +1CE2E;LARGE TYPE PIECE LOWER LEFT AND UPPER LEFT ARC;So;0;ON;;;;;N;;;;; +1CE2F;LARGE TYPE PIECE CENTRE OF K;So;0;ON;;;;;N;;;;; +1CE30;LARGE TYPE PIECE LOWER HALF VERTEX OF M;So;0;ON;;;;;N;;;;; +1CE31;LARGE TYPE PIECE UPPER HALF VERTEX OF W;So;0;ON;;;;;N;;;;; +1CE32;LARGE TYPE PIECE CENTRE OF X;So;0;ON;;;;;N;;;;; +1CE33;LARGE TYPE PIECE CENTRE OF Y;So;0;ON;;;;;N;;;;; +1CE34;LARGE TYPE PIECE CENTRE OF Z WITH CROSSBAR;So;0;ON;;;;;N;;;;; +1CE35;LARGE TYPE PIECE RAISED UPPER LEFT ARC;So;0;ON;;;;;N;;;;; +1CE36;LARGE TYPE PIECE STEM WITH LEFT CROSSBAR;So;0;ON;;;;;N;;;;; +1CE37;LARGE TYPE PIECE LOWER RIGHT AND UPPER RIGHT ARC;So;0;ON;;;;;N;;;;; +1CE38;LARGE TYPE PIECE DIAGONAL UPPER LEFT AND LOWER LEFT;So;0;ON;;;;;N;;;;; +1CE39;LARGE TYPE PIECE STEM WITH LEFT JOINT;So;0;ON;;;;;N;;;;; +1CE3A;LARGE TYPE PIECE STEM WITH CROSSBAR;So;0;ON;;;;;N;;;;; +1CE3B;LARGE TYPE PIECE DIAGONAL UPPER LEFT;So;0;ON;;;;;N;;;;; +1CE3C;LARGE TYPE PIECE LOWER TERMINAL;So;0;ON;;;;;N;;;;; +1CE3D;LARGE TYPE PIECE LOWER LEFT CORNER;So;0;ON;;;;;N;;;;; +1CE3E;LARGE TYPE PIECE LOWER LEFT ARC;So;0;ON;;;;;N;;;;; +1CE3F;LARGE TYPE PIECE LOWER LEFT CROTCH;So;0;ON;;;;;N;;;;; +1CE40;LARGE TYPE PIECE CROSSBAR WITH UPPER STEM;So;0;ON;;;;;N;;;;; +1CE41;LARGE TYPE PIECE VERTEX OF V;So;0;ON;;;;;N;;;;; +1CE42;LARGE TYPE PIECE LOWER HALF VERTEX OF W;So;0;ON;;;;;N;;;;; +1CE43;LARGE TYPE PIECE LOWER RIGHT ARC;So;0;ON;;;;;N;;;;; +1CE44;LARGE TYPE PIECE LOWER RIGHT CORNER;So;0;ON;;;;;N;;;;; +1CE45;LARGE TYPE PIECE LOWER RIGHT ARC WITH TAIL;So;0;ON;;;;;N;;;;; +1CE46;LARGE TYPE PIECE LOWER RIGHT CROTCH;So;0;ON;;;;;N;;;;; +1CE47;LARGE TYPE PIECE STEM-45;So;0;ON;;;;;N;;;;; +1CE48;LARGE TYPE PIECE STEM-2345;So;0;ON;;;;;N;;;;; +1CE49;LARGE TYPE PIECE STEM-4;So;0;ON;;;;;N;;;;; +1CE4A;LARGE TYPE PIECE STEM-34;So;0;ON;;;;;N;;;;; +1CE4B;LARGE TYPE PIECE STEM-234;So;0;ON;;;;;N;;;;; +1CE4C;LARGE TYPE PIECE STEM-1234;So;0;ON;;;;;N;;;;; +1CE4D;LARGE TYPE PIECE STEM-3;So;0;ON;;;;;N;;;;; +1CE4E;LARGE TYPE PIECE STEM-23;So;0;ON;;;;;N;;;;; +1CE4F;LARGE TYPE PIECE STEM-2;So;0;ON;;;;;N;;;;; +1CE50;LARGE TYPE PIECE STEM-12;So;0;ON;;;;;N;;;;; +1CE51;SEPARATED BLOCK SEXTANT-1;So;0;ON;;;;;N;;;;; +1CE52;SEPARATED BLOCK SEXTANT-2;So;0;ON;;;;;N;;;;; +1CE53;SEPARATED BLOCK SEXTANT-12;So;0;ON;;;;;N;;;;; +1CE54;SEPARATED BLOCK SEXTANT-3;So;0;ON;;;;;N;;;;; +1CE55;SEPARATED BLOCK SEXTANT-13;So;0;ON;;;;;N;;;;; +1CE56;SEPARATED BLOCK SEXTANT-23;So;0;ON;;;;;N;;;;; +1CE57;SEPARATED BLOCK SEXTANT-123;So;0;ON;;;;;N;;;;; +1CE58;SEPARATED BLOCK SEXTANT-4;So;0;ON;;;;;N;;;;; +1CE59;SEPARATED BLOCK SEXTANT-14;So;0;ON;;;;;N;;;;; +1CE5A;SEPARATED BLOCK SEXTANT-24;So;0;ON;;;;;N;;;;; +1CE5B;SEPARATED BLOCK SEXTANT-124;So;0;ON;;;;;N;;;;; +1CE5C;SEPARATED BLOCK SEXTANT-34;So;0;ON;;;;;N;;;;; +1CE5D;SEPARATED BLOCK SEXTANT-134;So;0;ON;;;;;N;;;;; +1CE5E;SEPARATED BLOCK SEXTANT-234;So;0;ON;;;;;N;;;;; +1CE5F;SEPARATED BLOCK SEXTANT-1234;So;0;ON;;;;;N;;;;; +1CE60;SEPARATED BLOCK SEXTANT-5;So;0;ON;;;;;N;;;;; +1CE61;SEPARATED BLOCK SEXTANT-15;So;0;ON;;;;;N;;;;; +1CE62;SEPARATED BLOCK SEXTANT-25;So;0;ON;;;;;N;;;;; +1CE63;SEPARATED BLOCK SEXTANT-125;So;0;ON;;;;;N;;;;; +1CE64;SEPARATED BLOCK SEXTANT-35;So;0;ON;;;;;N;;;;; +1CE65;SEPARATED BLOCK SEXTANT-135;So;0;ON;;;;;N;;;;; +1CE66;SEPARATED BLOCK SEXTANT-235;So;0;ON;;;;;N;;;;; +1CE67;SEPARATED BLOCK SEXTANT-1235;So;0;ON;;;;;N;;;;; +1CE68;SEPARATED BLOCK SEXTANT-45;So;0;ON;;;;;N;;;;; +1CE69;SEPARATED BLOCK SEXTANT-145;So;0;ON;;;;;N;;;;; +1CE6A;SEPARATED BLOCK SEXTANT-245;So;0;ON;;;;;N;;;;; +1CE6B;SEPARATED BLOCK SEXTANT-1245;So;0;ON;;;;;N;;;;; +1CE6C;SEPARATED BLOCK SEXTANT-345;So;0;ON;;;;;N;;;;; +1CE6D;SEPARATED BLOCK SEXTANT-1345;So;0;ON;;;;;N;;;;; +1CE6E;SEPARATED BLOCK SEXTANT-2345;So;0;ON;;;;;N;;;;; +1CE6F;SEPARATED BLOCK SEXTANT-12345;So;0;ON;;;;;N;;;;; +1CE70;SEPARATED BLOCK SEXTANT-6;So;0;ON;;;;;N;;;;; +1CE71;SEPARATED BLOCK SEXTANT-16;So;0;ON;;;;;N;;;;; +1CE72;SEPARATED BLOCK SEXTANT-26;So;0;ON;;;;;N;;;;; +1CE73;SEPARATED BLOCK SEXTANT-126;So;0;ON;;;;;N;;;;; +1CE74;SEPARATED BLOCK SEXTANT-36;So;0;ON;;;;;N;;;;; +1CE75;SEPARATED BLOCK SEXTANT-136;So;0;ON;;;;;N;;;;; +1CE76;SEPARATED BLOCK SEXTANT-236;So;0;ON;;;;;N;;;;; +1CE77;SEPARATED BLOCK SEXTANT-1236;So;0;ON;;;;;N;;;;; +1CE78;SEPARATED BLOCK SEXTANT-46;So;0;ON;;;;;N;;;;; +1CE79;SEPARATED BLOCK SEXTANT-146;So;0;ON;;;;;N;;;;; +1CE7A;SEPARATED BLOCK SEXTANT-246;So;0;ON;;;;;N;;;;; +1CE7B;SEPARATED BLOCK SEXTANT-1246;So;0;ON;;;;;N;;;;; +1CE7C;SEPARATED BLOCK SEXTANT-346;So;0;ON;;;;;N;;;;; +1CE7D;SEPARATED BLOCK SEXTANT-1346;So;0;ON;;;;;N;;;;; +1CE7E;SEPARATED BLOCK SEXTANT-2346;So;0;ON;;;;;N;;;;; +1CE7F;SEPARATED BLOCK SEXTANT-12346;So;0;ON;;;;;N;;;;; +1CE80;SEPARATED BLOCK SEXTANT-56;So;0;ON;;;;;N;;;;; +1CE81;SEPARATED BLOCK SEXTANT-156;So;0;ON;;;;;N;;;;; +1CE82;SEPARATED BLOCK SEXTANT-256;So;0;ON;;;;;N;;;;; +1CE83;SEPARATED BLOCK SEXTANT-1256;So;0;ON;;;;;N;;;;; +1CE84;SEPARATED BLOCK SEXTANT-356;So;0;ON;;;;;N;;;;; +1CE85;SEPARATED BLOCK SEXTANT-1356;So;0;ON;;;;;N;;;;; +1CE86;SEPARATED BLOCK SEXTANT-2356;So;0;ON;;;;;N;;;;; +1CE87;SEPARATED BLOCK SEXTANT-12356;So;0;ON;;;;;N;;;;; +1CE88;SEPARATED BLOCK SEXTANT-456;So;0;ON;;;;;N;;;;; +1CE89;SEPARATED BLOCK SEXTANT-1456;So;0;ON;;;;;N;;;;; +1CE8A;SEPARATED BLOCK SEXTANT-2456;So;0;ON;;;;;N;;;;; +1CE8B;SEPARATED BLOCK SEXTANT-12456;So;0;ON;;;;;N;;;;; +1CE8C;SEPARATED BLOCK SEXTANT-3456;So;0;ON;;;;;N;;;;; +1CE8D;SEPARATED BLOCK SEXTANT-13456;So;0;ON;;;;;N;;;;; +1CE8E;SEPARATED BLOCK SEXTANT-23456;So;0;ON;;;;;N;;;;; +1CE8F;SEPARATED BLOCK SEXTANT-123456;So;0;ON;;;;;N;;;;; +1CE90;UPPER LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE91;UPPER CENTRE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE92;UPPER CENTRE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE93;UPPER RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE94;UPPER MIDDLE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE95;UPPER MIDDLE CENTRE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE96;UPPER MIDDLE CENTRE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE97;UPPER MIDDLE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE98;LOWER MIDDLE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE99;LOWER MIDDLE CENTRE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE9A;LOWER MIDDLE CENTRE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE9B;LOWER MIDDLE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE9C;LOWER LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE9D;LOWER CENTRE LEFT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE9E;LOWER CENTRE RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CE9F;LOWER RIGHT ONE SIXTEENTH BLOCK;So;0;ON;;;;;N;;;;; +1CEA0;RIGHT HALF LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA1;RIGHT THREE QUARTERS LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA2;LEFT THREE QUARTERS LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA3;LEFT HALF LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA4;LOWER HALF LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA5;LOWER THREE QUARTERS LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA6;UPPER THREE QUARTERS LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA7;UPPER HALF LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA8;LEFT HALF UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEA9;LEFT THREE QUARTERS UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEAA;RIGHT THREE QUARTERS UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEAB;RIGHT HALF UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEAC;UPPER HALF RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEAD;UPPER THREE QUARTERS RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEAE;LOWER THREE QUARTERS RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEAF;LOWER HALF RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1CEB0;HORIZONTAL ZIGZAG LINE;So;0;ON;;;;;N;;;;; +1CEB1;KEYHOLE;So;0;ON;;;;;N;;;;; +1CEB2;OLD PERSONAL COMPUTER WITH MONITOR IN PORTRAIT ORIENTATION;So;0;ON;;;;;N;;;;; +1CEB3;BLACK RIGHT TRIANGLE CARET;So;0;ON;;;;;N;;;;; +1CF00;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF01;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF02;ZNAMENNY COMBINING MARK TSATA ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF03;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF04;ZNAMENNY COMBINING MARK NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF05;ZNAMENNY COMBINING MARK SREDNE ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF06;ZNAMENNY COMBINING MARK MALO POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF07;ZNAMENNY COMBINING MARK POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF08;ZNAMENNY COMBINING MARK VYSOKO ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF09;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF0A;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF0B;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF0C;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF0D;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF0E;ZNAMENNY COMBINING MARK TSATA ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF0F;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF10;ZNAMENNY COMBINING MARK NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF11;ZNAMENNY COMBINING MARK SREDNE ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF12;ZNAMENNY COMBINING MARK MALO POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF13;ZNAMENNY COMBINING MARK POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF14;ZNAMENNY COMBINING MARK VYSOKO ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF15;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF16;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF17;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF18;ZNAMENNY COMBINING MARK TSATA S KRYZHEM;Mn;0;NSM;;;;;N;;;;; +1CF19;ZNAMENNY COMBINING MARK MALO POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;; +1CF1A;ZNAMENNY COMBINING MARK STRANNO MALO POVYSHE;Mn;0;NSM;;;;;N;;;;; +1CF1B;ZNAMENNY COMBINING MARK POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;; +1CF1C;ZNAMENNY COMBINING MARK POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;; +1CF1D;ZNAMENNY COMBINING MARK VYSOKO S KRYZHEM;Mn;0;NSM;;;;;N;;;;; +1CF1E;ZNAMENNY COMBINING MARK MALO POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;; +1CF1F;ZNAMENNY COMBINING MARK GORAZDO VYSOKO;Mn;0;NSM;;;;;N;;;;; +1CF20;ZNAMENNY COMBINING MARK ZELO;Mn;0;NSM;;;;;N;;;;; +1CF21;ZNAMENNY COMBINING MARK ON;Mn;0;NSM;;;;;N;;;;; +1CF22;ZNAMENNY COMBINING MARK RAVNO;Mn;0;NSM;;;;;N;;;;; +1CF23;ZNAMENNY COMBINING MARK TIKHAYA;Mn;0;NSM;;;;;N;;;;; +1CF24;ZNAMENNY COMBINING MARK BORZAYA;Mn;0;NSM;;;;;N;;;;; +1CF25;ZNAMENNY COMBINING MARK UDARKA;Mn;0;NSM;;;;;N;;;;; +1CF26;ZNAMENNY COMBINING MARK PODVERTKA;Mn;0;NSM;;;;;N;;;;; +1CF27;ZNAMENNY COMBINING MARK LOMKA;Mn;0;NSM;;;;;N;;;;; +1CF28;ZNAMENNY COMBINING MARK KUPNAYA;Mn;0;NSM;;;;;N;;;;; +1CF29;ZNAMENNY COMBINING MARK KACHKA;Mn;0;NSM;;;;;N;;;;; +1CF2A;ZNAMENNY COMBINING MARK ZEVOK;Mn;0;NSM;;;;;N;;;;; +1CF2B;ZNAMENNY COMBINING MARK SKOBA;Mn;0;NSM;;;;;N;;;;; +1CF2C;ZNAMENNY COMBINING MARK RAZSEKA;Mn;0;NSM;;;;;N;;;;; +1CF2D;ZNAMENNY COMBINING MARK KRYZH ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF30;ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO;Mn;0;NSM;;;;;N;;;;; +1CF31;ZNAMENNY COMBINING TONAL RANGE MARK SVETLO;Mn;0;NSM;;;;;N;;;;; +1CF32;ZNAMENNY COMBINING TONAL RANGE MARK TRESVETLO;Mn;0;NSM;;;;;N;;;;; +1CF33;ZNAMENNY COMBINING MARK ZADERZHKA;Mn;0;NSM;;;;;N;;;;; +1CF34;ZNAMENNY COMBINING MARK DEMESTVENNY ZADERZHKA;Mn;0;NSM;;;;;N;;;;; +1CF35;ZNAMENNY COMBINING MARK OTSECHKA;Mn;0;NSM;;;;;N;;;;; +1CF36;ZNAMENNY COMBINING MARK PODCHASHIE;Mn;0;NSM;;;;;N;;;;; +1CF37;ZNAMENNY COMBINING MARK PODCHASHIE WITH VERTICAL STROKE;Mn;0;NSM;;;;;N;;;;; +1CF38;ZNAMENNY COMBINING MARK CHASHKA;Mn;0;NSM;;;;;N;;;;; +1CF39;ZNAMENNY COMBINING MARK CHASHKA POLNAYA;Mn;0;NSM;;;;;N;;;;; +1CF3A;ZNAMENNY COMBINING MARK OBLACHKO;Mn;0;NSM;;;;;N;;;;; +1CF3B;ZNAMENNY COMBINING MARK SOROCHYA NOZHKA;Mn;0;NSM;;;;;N;;;;; +1CF3C;ZNAMENNY COMBINING MARK TOCHKA;Mn;0;NSM;;;;;N;;;;; +1CF3D;ZNAMENNY COMBINING MARK DVOETOCHIE;Mn;0;NSM;;;;;N;;;;; +1CF3E;ZNAMENNY COMBINING ATTACHING VERTICAL OMET;Mn;0;NSM;;;;;N;;;;; +1CF3F;ZNAMENNY COMBINING MARK CURVED OMET;Mn;0;NSM;;;;;N;;;;; +1CF40;ZNAMENNY COMBINING MARK KRYZH;Mn;0;NSM;;;;;N;;;;; +1CF41;ZNAMENNY COMBINING LOWER TONAL RANGE INDICATOR;Mn;0;NSM;;;;;N;;;;; +1CF42;ZNAMENNY PRIZNAK MODIFIER LEVEL-2;Mn;0;NSM;;;;;N;;;;; +1CF43;ZNAMENNY PRIZNAK MODIFIER LEVEL-3;Mn;0;NSM;;;;;N;;;;; +1CF44;ZNAMENNY PRIZNAK MODIFIER DIRECTION FLIP;Mn;0;NSM;;;;;N;;;;; +1CF45;ZNAMENNY PRIZNAK MODIFIER KRYZH;Mn;0;NSM;;;;;N;;;;; +1CF46;ZNAMENNY PRIZNAK MODIFIER ROG;Mn;0;NSM;;;;;N;;;;; +1CF50;ZNAMENNY NEUME KRYUK;So;0;L;;;;;N;;;;; +1CF51;ZNAMENNY NEUME KRYUK TIKHY;So;0;L;;;;;N;;;;; +1CF52;ZNAMENNY NEUME PARAKLIT;So;0;L;;;;;N;;;;; +1CF53;ZNAMENNY NEUME DVA V CHELNU;So;0;L;;;;;N;;;;; +1CF54;ZNAMENNY NEUME KLYUCH;So;0;L;;;;;N;;;;; +1CF55;ZNAMENNY NEUME ZANOZHEK;So;0;L;;;;;N;;;;; +1CF56;ZNAMENNY NEUME STOPITSA;So;0;L;;;;;N;;;;; +1CF57;ZNAMENNY NEUME STOPITSA S OCHKOM;So;0;L;;;;;N;;;;; +1CF58;ZNAMENNY NEUME PEREVODKA;So;0;L;;;;;N;;;;; +1CF59;ZNAMENNY NEUME PEREVODKA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF5A;ZNAMENNY NEUME STOPITSA WITH SOROCHYA NOZHKA;So;0;L;;;;;N;;;;; +1CF5B;ZNAMENNY NEUME CHELYUSTKA;So;0;L;;;;;N;;;;; +1CF5C;ZNAMENNY NEUME PALKA;So;0;L;;;;;N;;;;; +1CF5D;ZNAMENNY NEUME ZAPYATAYA;So;0;L;;;;;N;;;;; +1CF5E;ZNAMENNY NEUME GOLUBCHIK BORZY;So;0;L;;;;;N;;;;; +1CF5F;ZNAMENNY NEUME GOLUBCHIK TIKHY;So;0;L;;;;;N;;;;; +1CF60;ZNAMENNY NEUME GOLUBCHIK MRACHNY;So;0;L;;;;;N;;;;; +1CF61;ZNAMENNY NEUME GOLUBCHIK SVETLY;So;0;L;;;;;N;;;;; +1CF62;ZNAMENNY NEUME GOLUBCHIK TRESVETLY;So;0;L;;;;;N;;;;; +1CF63;ZNAMENNY NEUME VRAKHIYA PROSTAYA;So;0;L;;;;;N;;;;; +1CF64;ZNAMENNY NEUME VRAKHIYA MRACHNAYA;So;0;L;;;;;N;;;;; +1CF65;ZNAMENNY NEUME VRAKHIYA SVETLAYA;So;0;L;;;;;N;;;;; +1CF66;ZNAMENNY NEUME VRAKHIYA TRESVETLAYA;So;0;L;;;;;N;;;;; +1CF67;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA PROSTAYA;So;0;L;;;;;N;;;;; +1CF68;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA MRACHNAYA;So;0;L;;;;;N;;;;; +1CF69;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;; +1CF6A;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA TRESVETLAYA;So;0;L;;;;;N;;;;; +1CF6B;ZNAMENNY NEUME DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CF6C;ZNAMENNY NEUME REVERSED CHELYUSTKA;So;0;L;;;;;N;;;;; +1CF6D;ZNAMENNY NEUME DERBITSA;So;0;L;;;;;N;;;;; +1CF6E;ZNAMENNY NEUME KHAMILO;So;0;L;;;;;N;;;;; +1CF6F;ZNAMENNY NEUME CHASHKA;So;0;L;;;;;N;;;;; +1CF70;ZNAMENNY NEUME PODCHASHIE;So;0;L;;;;;N;;;;; +1CF71;ZNAMENNY NEUME SKAMEYTSA MRACHNAYA;So;0;L;;;;;N;;;;; +1CF72;ZNAMENNY NEUME SKAMEYTSA SVETLAYA;So;0;L;;;;;N;;;;; +1CF73;ZNAMENNY NEUME SKAMEYTSA TRESVETLAYA;So;0;L;;;;;N;;;;; +1CF74;ZNAMENNY NEUME SKAMEYTSA TIKHAYA;So;0;L;;;;;N;;;;; +1CF75;ZNAMENNY NEUME DEMESTVENNY KLYUCH;So;0;L;;;;;N;;;;; +1CF76;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;; +1CF77;ZNAMENNY NEUME SKAMEYTSA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF78;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA TIKHAYA;So;0;L;;;;;N;;;;; +1CF79;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA PROSTAYA;So;0;L;;;;;N;;;;; +1CF7A;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA SVETLAYA;So;0;L;;;;;N;;;;; +1CF7B;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF7C;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;; +1CF7D;ZNAMENNY NEUME SLOZHITIE;So;0;L;;;;;N;;;;; +1CF7E;ZNAMENNY NEUME SLOZHITIE S ZAPYATOY;So;0;L;;;;;N;;;;; +1CF7F;ZNAMENNY NEUME SLOZHITIE ZAKRYTOE;So;0;L;;;;;N;;;;; +1CF80;ZNAMENNY NEUME SLOZHITIE S KRYZHEM;So;0;L;;;;;N;;;;; +1CF81;ZNAMENNY NEUME KRYZH;So;0;L;;;;;N;;;;; +1CF82;ZNAMENNY NEUME ROG;So;0;L;;;;;N;;;;; +1CF83;ZNAMENNY NEUME FITA;So;0;L;;;;;N;;;;; +1CF84;ZNAMENNY NEUME KOBYLA;So;0;L;;;;;N;;;;; +1CF85;ZNAMENNY NEUME ZMEYTSA;So;0;L;;;;;N;;;;; +1CF86;ZNAMENNY NEUME STATYA;So;0;L;;;;;N;;;;; +1CF87;ZNAMENNY NEUME STATYA S ZAPYATOY;So;0;L;;;;;N;;;;; +1CF88;ZNAMENNY NEUME STATYA S KRYZHEM;So;0;L;;;;;N;;;;; +1CF89;ZNAMENNY NEUME STATYA S ZAPYATOY I KRYZHEM;So;0;L;;;;;N;;;;; +1CF8A;ZNAMENNY NEUME STATYA S KRYZHEM I ZAPYATOY;So;0;L;;;;;N;;;;; +1CF8B;ZNAMENNY NEUME STATYA ZAKRYTAYA;So;0;L;;;;;N;;;;; +1CF8C;ZNAMENNY NEUME STATYA ZAKRYTAYA S ZAPYATOY;So;0;L;;;;;N;;;;; +1CF8D;ZNAMENNY NEUME STATYA S ROGOM;So;0;L;;;;;N;;;;; +1CF8E;ZNAMENNY NEUME STATYA S DVUMYA ZAPYATYMI;So;0;L;;;;;N;;;;; +1CF8F;ZNAMENNY NEUME STATYA S ZAPYATOY I PODCHASHIEM;So;0;L;;;;;N;;;;; +1CF90;ZNAMENNY NEUME POLKULIZMY;So;0;L;;;;;N;;;;; +1CF91;ZNAMENNY NEUME STATYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF92;ZNAMENNY NEUME STRELA PROSTAYA;So;0;L;;;;;N;;;;; +1CF93;ZNAMENNY NEUME STRELA MRACHNOTIKHAYA;So;0;L;;;;;N;;;;; +1CF94;ZNAMENNY NEUME STRELA KRYZHEVAYA;So;0;L;;;;;N;;;;; +1CF95;ZNAMENNY NEUME STRELA POLUPOVODNAYA;So;0;L;;;;;N;;;;; +1CF96;ZNAMENNY NEUME STRELA POVODNAYA;So;0;L;;;;;N;;;;; +1CF97;ZNAMENNY NEUME STRELA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF98;ZNAMENNY NEUME STRELA KLYUCHEPOVODNAYA;So;0;L;;;;;N;;;;; +1CF99;ZNAMENNY NEUME STRELA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF9A;ZNAMENNY NEUME STRELA TIKHAYA PUTNAYA;So;0;L;;;;;N;;;;; +1CF9B;ZNAMENNY NEUME STRELA DVOECHELNAYA;So;0;L;;;;;N;;;;; +1CF9C;ZNAMENNY NEUME STRELA DVOECHELNOKRYZHEVAYA;So;0;L;;;;;N;;;;; +1CF9D;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA;So;0;L;;;;;N;;;;; +1CF9E;ZNAMENNY NEUME STRELA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;; +1CF9F;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;; +1CFA0;ZNAMENNY NEUME STRELA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFA1;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFA2;ZNAMENNY NEUME STRELA GROMNAYA;So;0;L;;;;;N;;;;; +1CFA3;ZNAMENNY NEUME STRELA GROMOPOVODNAYA;So;0;L;;;;;N;;;;; +1CFA4;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFA5;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;; +1CFA6;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;; +1CFA7;ZNAMENNY NEUME MECHIK;So;0;L;;;;;N;;;;; +1CFA8;ZNAMENNY NEUME MECHIK POVODNY;So;0;L;;;;;N;;;;; +1CFA9;ZNAMENNY NEUME MECHIK KLYUCHEVOY;So;0;L;;;;;N;;;;; +1CFAA;ZNAMENNY NEUME MECHIK KLYUCHEPOVODNY;So;0;L;;;;;N;;;;; +1CFAB;ZNAMENNY NEUME MECHIK KLYUCHENEPOSTOYANNY;So;0;L;;;;;N;;;;; +1CFAC;ZNAMENNY NEUME STRELA TRYASOGLASNAYA;So;0;L;;;;;N;;;;; +1CFAD;ZNAMENNY NEUME STRELA TRYASOPOVODNAYA;So;0;L;;;;;N;;;;; +1CFAE;ZNAMENNY NEUME STRELA TRYASOSTRELNAYA;So;0;L;;;;;N;;;;; +1CFAF;ZNAMENNY NEUME OSOKA;So;0;L;;;;;N;;;;; +1CFB0;ZNAMENNY NEUME OSOKA SVETLAYA;So;0;L;;;;;N;;;;; +1CFB1;ZNAMENNY NEUME OSOKA TRESVETLAYA;So;0;L;;;;;N;;;;; +1CFB2;ZNAMENNY NEUME OSOKA KRYUKOVAYA SVETLAYA;So;0;L;;;;;N;;;;; +1CFB3;ZNAMENNY NEUME OSOKA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;; +1CFB4;ZNAMENNY NEUME OSOKA KLYUCHEVAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CFB5;ZNAMENNY NEUME STRELA KRYUKOVAYA;So;0;L;;;;;N;;;;; +1CFB6;ZNAMENNY NEUME STRELA KRYUKOVAYA POVODNAYA;So;0;L;;;;;N;;;;; +1CFB7;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFB8;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFB9;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA;So;0;L;;;;;N;;;;; +1CFBA;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA;So;0;L;;;;;N;;;;; +1CFBB;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFBC;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;; +1CFBD;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;; +1CFBE;ZNAMENNY NEUME STRELA KRYUKOVAYA TRYASKA;So;0;L;;;;;N;;;;; +1CFBF;ZNAMENNY NEUME KUFISMA;So;0;L;;;;;N;;;;; +1CFC0;ZNAMENNY NEUME OBLAKO;So;0;L;;;;;N;;;;; +1CFC1;ZNAMENNY NEUME DUDA;So;0;L;;;;;N;;;;; +1CFC2;ZNAMENNY NEUME NEMKA;So;0;L;;;;;N;;;;; +1CFC3;ZNAMENNY NEUME PAUK;So;0;L;;;;;N;;;;; 1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;; 1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;; 1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;; @@ -27801,6 +33727,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D1E6;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN;So;0;L;;;;;N;;;;; 1D1E7;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP;So;0;L;;;;;N;;;;; 1D1E8;MUSICAL SYMBOL KIEVAN FLAT SIGN;So;0;L;;;;;N;;;;; +1D1E9;MUSICAL SYMBOL SORI;So;0;ON;;;;;N;;;;; +1D1EA;MUSICAL SYMBOL KORON;So;0;ON;;;;;N;;;;; 1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; 1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; 1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;; @@ -27871,6 +33799,26 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;; 1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;; 1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;; +1D2C0;KAKTOVIK NUMERAL ZERO;No;0;L;;;;0;N;;;;; +1D2C1;KAKTOVIK NUMERAL ONE;No;0;L;;;;1;N;;;;; +1D2C2;KAKTOVIK NUMERAL TWO;No;0;L;;;;2;N;;;;; +1D2C3;KAKTOVIK NUMERAL THREE;No;0;L;;;;3;N;;;;; +1D2C4;KAKTOVIK NUMERAL FOUR;No;0;L;;;;4;N;;;;; +1D2C5;KAKTOVIK NUMERAL FIVE;No;0;L;;;;5;N;;;;; +1D2C6;KAKTOVIK NUMERAL SIX;No;0;L;;;;6;N;;;;; +1D2C7;KAKTOVIK NUMERAL SEVEN;No;0;L;;;;7;N;;;;; +1D2C8;KAKTOVIK NUMERAL EIGHT;No;0;L;;;;8;N;;;;; +1D2C9;KAKTOVIK NUMERAL NINE;No;0;L;;;;9;N;;;;; +1D2CA;KAKTOVIK NUMERAL TEN;No;0;L;;;;10;N;;;;; +1D2CB;KAKTOVIK NUMERAL ELEVEN;No;0;L;;;;11;N;;;;; +1D2CC;KAKTOVIK NUMERAL TWELVE;No;0;L;;;;12;N;;;;; +1D2CD;KAKTOVIK NUMERAL THIRTEEN;No;0;L;;;;13;N;;;;; +1D2CE;KAKTOVIK NUMERAL FOURTEEN;No;0;L;;;;14;N;;;;; +1D2CF;KAKTOVIK NUMERAL FIFTEEN;No;0;L;;;;15;N;;;;; +1D2D0;KAKTOVIK NUMERAL SIXTEEN;No;0;L;;;;16;N;;;;; +1D2D1;KAKTOVIK NUMERAL SEVENTEEN;No;0;L;;;;17;N;;;;; +1D2D2;KAKTOVIK NUMERAL EIGHTEEN;No;0;L;;;;18;N;;;;; +1D2D3;KAKTOVIK NUMERAL NINETEEN;No;0;L;;;;19;N;;;;; 1D2E0;MAYAN NUMERAL ZERO;No;0;L;;;;0;N;;;;; 1D2E1;MAYAN NUMERAL ONE;No;0;L;;;;1;N;;;;; 1D2E2;MAYAN NUMERAL TWO;No;0;L;;;;2;N;;;;; @@ -28682,7 +34630,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D6BE;MATHEMATICAL BOLD CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; 1D6BF;MATHEMATICAL BOLD CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; 1D6C0;MATHEMATICAL BOLD CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; -1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;L; 2207;;;;N;;;;; +1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;ON; 2207;;;;N;;;;; 1D6C2;MATHEMATICAL BOLD SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; 1D6C3;MATHEMATICAL BOLD SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; 1D6C4;MATHEMATICAL BOLD SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; @@ -28740,7 +34688,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D6F8;MATHEMATICAL ITALIC CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; 1D6F9;MATHEMATICAL ITALIC CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; 1D6FA;MATHEMATICAL ITALIC CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; -1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;L; 2207;;;;N;;;;; +1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;ON; 2207;;;;N;;;;; 1D6FC;MATHEMATICAL ITALIC SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; 1D6FD;MATHEMATICAL ITALIC SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; 1D6FE;MATHEMATICAL ITALIC SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; @@ -28798,7 +34746,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D732;MATHEMATICAL BOLD ITALIC CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; 1D733;MATHEMATICAL BOLD ITALIC CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; 1D734;MATHEMATICAL BOLD ITALIC CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; -1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;L; 2207;;;;N;;;;; +1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;ON; 2207;;;;N;;;;; 1D736;MATHEMATICAL BOLD ITALIC SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; 1D737;MATHEMATICAL BOLD ITALIC SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; 1D738;MATHEMATICAL BOLD ITALIC SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; @@ -28856,7 +34804,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D76C;MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; 1D76D;MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; 1D76E;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; -1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;L; 2207;;;;N;;;;; +1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;ON; 2207;;;;N;;;;; 1D770;MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; 1D771;MATHEMATICAL SANS-SERIF BOLD SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; 1D772;MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; @@ -28914,7 +34862,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D7A6;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; 1D7A7;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; 1D7A8;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; -1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;L; 2207;;;;N;;;;; +1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;ON; 2207;;;;N;;;;; 1D7AA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; 1D7AB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; 1D7AC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; @@ -29671,6 +35619,43 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1DAAD;SIGNWRITING ROTATION MODIFIER-14;Mn;0;NSM;;;;;N;;;;; 1DAAE;SIGNWRITING ROTATION MODIFIER-15;Mn;0;NSM;;;;;N;;;;; 1DAAF;SIGNWRITING ROTATION MODIFIER-16;Mn;0;NSM;;;;;N;;;;; +1DF00;LATIN SMALL LETTER FENG DIGRAPH WITH TRILL;Ll;0;L;;;;;N;;;;; +1DF01;LATIN SMALL LETTER REVERSED SCRIPT G;Ll;0;L;;;;;N;;;;; +1DF02;LATIN LETTER SMALL CAPITAL TURNED G;Ll;0;L;;;;;N;;;;; +1DF03;LATIN SMALL LETTER REVERSED K;Ll;0;L;;;;;N;;;;; +1DF04;LATIN LETTER SMALL CAPITAL L WITH BELT;Ll;0;L;;;;;N;;;;; +1DF05;LATIN SMALL LETTER LEZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF06;LATIN SMALL LETTER TURNED Y WITH BELT;Ll;0;L;;;;;N;;;;; +1DF07;LATIN SMALL LETTER REVERSED ENG;Ll;0;L;;;;;N;;;;; +1DF08;LATIN SMALL LETTER TURNED R WITH LONG LEG AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF09;LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF0A;LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lo;0;L;;;;;N;;;;; +1DF0B;LATIN SMALL LETTER ESH WITH DOUBLE BAR;Ll;0;L;;;;;N;;;;; +1DF0C;LATIN SMALL LETTER ESH WITH DOUBLE BAR AND CURL;Ll;0;L;;;;;N;;;;; +1DF0D;LATIN SMALL LETTER TURNED T WITH CURL;Ll;0;L;;;;;N;;;;; +1DF0E;LATIN LETTER INVERTED GLOTTAL STOP WITH CURL;Ll;0;L;;;;;N;;;;; +1DF0F;LATIN LETTER STRETCHED C WITH CURL;Ll;0;L;;;;;N;;;;; +1DF10;LATIN LETTER SMALL CAPITAL TURNED K;Ll;0;L;;;;;N;;;;; +1DF11;LATIN SMALL LETTER L WITH FISHHOOK;Ll;0;L;;;;;N;;;;; +1DF12;LATIN SMALL LETTER DEZH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF13;LATIN SMALL LETTER L WITH BELT AND PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF14;LATIN SMALL LETTER ENG WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF15;LATIN SMALL LETTER TURNED R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF16;LATIN SMALL LETTER R WITH FISHHOOK AND PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF17;LATIN SMALL LETTER TESH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF18;LATIN SMALL LETTER EZH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF19;LATIN SMALL LETTER DEZH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF1A;LATIN SMALL LETTER I WITH STROKE AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF1B;LATIN SMALL LETTER O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF1C;LATIN SMALL LETTER TESH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF1D;LATIN SMALL LETTER C WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF1E;LATIN SMALL LETTER S WITH CURL;Ll;0;L;;;;;N;;;;; +1DF25;LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;; +1DF26;LATIN SMALL LETTER L WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;; +1DF27;LATIN SMALL LETTER N WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;; +1DF28;LATIN SMALL LETTER R WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;; +1DF29;LATIN SMALL LETTER S WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;; +1DF2A;LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK;Ll;0;L;;;;;N;;;;; 1E000;COMBINING GLAGOLITIC LETTER AZU;Mn;230;NSM;;;;;N;;;;; 1E001;COMBINING GLAGOLITIC LETTER BUKY;Mn;230;NSM;;;;;N;;;;; 1E002;COMBINING GLAGOLITIC LETTER VEDE;Mn;230;NSM;;;;;N;;;;; @@ -29709,6 +35694,69 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1E028;COMBINING GLAGOLITIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;; 1E029;COMBINING GLAGOLITIC LETTER IOTATED BIG YUS;Mn;230;NSM;;;;;N;;;;; 1E02A;COMBINING GLAGOLITIC LETTER FITA;Mn;230;NSM;;;;;N;;;;; +1E030;MODIFIER LETTER CYRILLIC SMALL A;Lm;0;L; 0430;;;;N;;;;; +1E031;MODIFIER LETTER CYRILLIC SMALL BE;Lm;0;L; 0431;;;;N;;;;; +1E032;MODIFIER LETTER CYRILLIC SMALL VE;Lm;0;L; 0432;;;;N;;;;; +1E033;MODIFIER LETTER CYRILLIC SMALL GHE;Lm;0;L; 0433;;;;N;;;;; +1E034;MODIFIER LETTER CYRILLIC SMALL DE;Lm;0;L; 0434;;;;N;;;;; +1E035;MODIFIER LETTER CYRILLIC SMALL IE;Lm;0;L; 0435;;;;N;;;;; +1E036;MODIFIER LETTER CYRILLIC SMALL ZHE;Lm;0;L; 0436;;;;N;;;;; +1E037;MODIFIER LETTER CYRILLIC SMALL ZE;Lm;0;L; 0437;;;;N;;;;; +1E038;MODIFIER LETTER CYRILLIC SMALL I;Lm;0;L; 0438;;;;N;;;;; +1E039;MODIFIER LETTER CYRILLIC SMALL KA;Lm;0;L; 043A;;;;N;;;;; +1E03A;MODIFIER LETTER CYRILLIC SMALL EL;Lm;0;L; 043B;;;;N;;;;; +1E03B;MODIFIER LETTER CYRILLIC SMALL EM;Lm;0;L; 043C;;;;N;;;;; +1E03C;MODIFIER LETTER CYRILLIC SMALL O;Lm;0;L; 043E;;;;N;;;;; +1E03D;MODIFIER LETTER CYRILLIC SMALL PE;Lm;0;L; 043F;;;;N;;;;; +1E03E;MODIFIER LETTER CYRILLIC SMALL ER;Lm;0;L; 0440;;;;N;;;;; +1E03F;MODIFIER LETTER CYRILLIC SMALL ES;Lm;0;L; 0441;;;;N;;;;; +1E040;MODIFIER LETTER CYRILLIC SMALL TE;Lm;0;L; 0442;;;;N;;;;; +1E041;MODIFIER LETTER CYRILLIC SMALL U;Lm;0;L; 0443;;;;N;;;;; +1E042;MODIFIER LETTER CYRILLIC SMALL EF;Lm;0;L; 0444;;;;N;;;;; +1E043;MODIFIER LETTER CYRILLIC SMALL HA;Lm;0;L; 0445;;;;N;;;;; +1E044;MODIFIER LETTER CYRILLIC SMALL TSE;Lm;0;L; 0446;;;;N;;;;; +1E045;MODIFIER LETTER CYRILLIC SMALL CHE;Lm;0;L; 0447;;;;N;;;;; +1E046;MODIFIER LETTER CYRILLIC SMALL SHA;Lm;0;L; 0448;;;;N;;;;; +1E047;MODIFIER LETTER CYRILLIC SMALL YERU;Lm;0;L; 044B;;;;N;;;;; +1E048;MODIFIER LETTER CYRILLIC SMALL E;Lm;0;L; 044D;;;;N;;;;; +1E049;MODIFIER LETTER CYRILLIC SMALL YU;Lm;0;L; 044E;;;;N;;;;; +1E04A;MODIFIER LETTER CYRILLIC SMALL DZZE;Lm;0;L; A689;;;;N;;;;; +1E04B;MODIFIER LETTER CYRILLIC SMALL SCHWA;Lm;0;L; 04D9;;;;N;;;;; +1E04C;MODIFIER LETTER CYRILLIC SMALL BYELORUSSIAN-UKRAINIAN I;Lm;0;L; 0456;;;;N;;;;; +1E04D;MODIFIER LETTER CYRILLIC SMALL JE;Lm;0;L; 0458;;;;N;;;;; +1E04E;MODIFIER LETTER CYRILLIC SMALL BARRED O;Lm;0;L; 04E9;;;;N;;;;; +1E04F;MODIFIER LETTER CYRILLIC SMALL STRAIGHT U;Lm;0;L; 04AF;;;;N;;;;; +1E050;MODIFIER LETTER CYRILLIC SMALL PALOCHKA;Lm;0;L; 04CF;;;;N;;;;; +1E051;CYRILLIC SUBSCRIPT SMALL LETTER A;Lm;0;L; 0430;;;;N;;;;; +1E052;CYRILLIC SUBSCRIPT SMALL LETTER BE;Lm;0;L; 0431;;;;N;;;;; +1E053;CYRILLIC SUBSCRIPT SMALL LETTER VE;Lm;0;L; 0432;;;;N;;;;; +1E054;CYRILLIC SUBSCRIPT SMALL LETTER GHE;Lm;0;L; 0433;;;;N;;;;; +1E055;CYRILLIC SUBSCRIPT SMALL LETTER DE;Lm;0;L; 0434;;;;N;;;;; +1E056;CYRILLIC SUBSCRIPT SMALL LETTER IE;Lm;0;L; 0435;;;;N;;;;; +1E057;CYRILLIC SUBSCRIPT SMALL LETTER ZHE;Lm;0;L; 0436;;;;N;;;;; +1E058;CYRILLIC SUBSCRIPT SMALL LETTER ZE;Lm;0;L; 0437;;;;N;;;;; +1E059;CYRILLIC SUBSCRIPT SMALL LETTER I;Lm;0;L; 0438;;;;N;;;;; +1E05A;CYRILLIC SUBSCRIPT SMALL LETTER KA;Lm;0;L; 043A;;;;N;;;;; +1E05B;CYRILLIC SUBSCRIPT SMALL LETTER EL;Lm;0;L; 043B;;;;N;;;;; +1E05C;CYRILLIC SUBSCRIPT SMALL LETTER O;Lm;0;L; 043E;;;;N;;;;; +1E05D;CYRILLIC SUBSCRIPT SMALL LETTER PE;Lm;0;L; 043F;;;;N;;;;; +1E05E;CYRILLIC SUBSCRIPT SMALL LETTER ES;Lm;0;L; 0441;;;;N;;;;; +1E05F;CYRILLIC SUBSCRIPT SMALL LETTER U;Lm;0;L; 0443;;;;N;;;;; +1E060;CYRILLIC SUBSCRIPT SMALL LETTER EF;Lm;0;L; 0444;;;;N;;;;; +1E061;CYRILLIC SUBSCRIPT SMALL LETTER HA;Lm;0;L; 0445;;;;N;;;;; +1E062;CYRILLIC SUBSCRIPT SMALL LETTER TSE;Lm;0;L; 0446;;;;N;;;;; +1E063;CYRILLIC SUBSCRIPT SMALL LETTER CHE;Lm;0;L; 0447;;;;N;;;;; +1E064;CYRILLIC SUBSCRIPT SMALL LETTER SHA;Lm;0;L; 0448;;;;N;;;;; +1E065;CYRILLIC SUBSCRIPT SMALL LETTER HARD SIGN;Lm;0;L; 044A;;;;N;;;;; +1E066;CYRILLIC SUBSCRIPT SMALL LETTER YERU;Lm;0;L; 044B;;;;N;;;;; +1E067;CYRILLIC SUBSCRIPT SMALL LETTER GHE WITH UPTURN;Lm;0;L; 0491;;;;N;;;;; +1E068;CYRILLIC SUBSCRIPT SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Lm;0;L; 0456;;;;N;;;;; +1E069;CYRILLIC SUBSCRIPT SMALL LETTER DZE;Lm;0;L; 0455;;;;N;;;;; +1E06A;CYRILLIC SUBSCRIPT SMALL LETTER DZHE;Lm;0;L; 045F;;;;N;;;;; +1E06B;MODIFIER LETTER CYRILLIC SMALL ES WITH DESCENDER;Lm;0;L; 04AB;;;;N;;;;; +1E06C;MODIFIER LETTER CYRILLIC SMALL YERU WITH BACK YER;Lm;0;L; A651;;;;N;;;;; +1E06D;MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE;Lm;0;L; 04B1;;;;N;;;;; +1E08F;COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Mn;230;NSM;;;;;N;;;;; 1E100;NYIAKENG PUACHUE HMONG LETTER MA;Lo;0;L;;;;;N;;;;; 1E101;NYIAKENG PUACHUE HMONG LETTER TSA;Lo;0;L;;;;;N;;;;; 1E102;NYIAKENG PUACHUE HMONG LETTER NTA;Lo;0;L;;;;;N;;;;; @@ -29780,6 +35828,37 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1E149;NYIAKENG PUACHUE HMONG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1E14E;NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ;Lo;0;L;;;;;N;;;;; 1E14F;NYIAKENG PUACHUE HMONG CIRCLED CA;So;0;L;;;;;N;;;;; +1E290;TOTO LETTER PA;Lo;0;L;;;;;N;;;;; +1E291;TOTO LETTER BA;Lo;0;L;;;;;N;;;;; +1E292;TOTO LETTER TA;Lo;0;L;;;;;N;;;;; +1E293;TOTO LETTER DA;Lo;0;L;;;;;N;;;;; +1E294;TOTO LETTER KA;Lo;0;L;;;;;N;;;;; +1E295;TOTO LETTER GA;Lo;0;L;;;;;N;;;;; +1E296;TOTO LETTER MA;Lo;0;L;;;;;N;;;;; +1E297;TOTO LETTER NA;Lo;0;L;;;;;N;;;;; +1E298;TOTO LETTER NGA;Lo;0;L;;;;;N;;;;; +1E299;TOTO LETTER SA;Lo;0;L;;;;;N;;;;; +1E29A;TOTO LETTER CHA;Lo;0;L;;;;;N;;;;; +1E29B;TOTO LETTER YA;Lo;0;L;;;;;N;;;;; +1E29C;TOTO LETTER WA;Lo;0;L;;;;;N;;;;; +1E29D;TOTO LETTER JA;Lo;0;L;;;;;N;;;;; +1E29E;TOTO LETTER HA;Lo;0;L;;;;;N;;;;; +1E29F;TOTO LETTER RA;Lo;0;L;;;;;N;;;;; +1E2A0;TOTO LETTER LA;Lo;0;L;;;;;N;;;;; +1E2A1;TOTO LETTER I;Lo;0;L;;;;;N;;;;; +1E2A2;TOTO LETTER BREATHY I;Lo;0;L;;;;;N;;;;; +1E2A3;TOTO LETTER IU;Lo;0;L;;;;;N;;;;; +1E2A4;TOTO LETTER BREATHY IU;Lo;0;L;;;;;N;;;;; +1E2A5;TOTO LETTER U;Lo;0;L;;;;;N;;;;; +1E2A6;TOTO LETTER E;Lo;0;L;;;;;N;;;;; +1E2A7;TOTO LETTER BREATHY E;Lo;0;L;;;;;N;;;;; +1E2A8;TOTO LETTER EO;Lo;0;L;;;;;N;;;;; +1E2A9;TOTO LETTER BREATHY EO;Lo;0;L;;;;;N;;;;; +1E2AA;TOTO LETTER O;Lo;0;L;;;;;N;;;;; +1E2AB;TOTO LETTER AE;Lo;0;L;;;;;N;;;;; +1E2AC;TOTO LETTER BREATHY AE;Lo;0;L;;;;;N;;;;; +1E2AD;TOTO LETTER A;Lo;0;L;;;;;N;;;;; +1E2AE;TOTO SIGN RISING TONE;Mn;230;NSM;;;;;N;;;;; 1E2C0;WANCHO LETTER AA;Lo;0;L;;;;;N;;;;; 1E2C1;WANCHO LETTER A;Lo;0;L;;;;;N;;;;; 1E2C2;WANCHO LETTER BA;Lo;0;L;;;;;N;;;;; @@ -29839,6 +35918,120 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1E2F8;WANCHO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1E2F9;WANCHO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1E2FF;WANCHO NGUN SIGN;Sc;0;ET;;;;;N;;;;; +1E4D0;NAG MUNDARI LETTER O;Lo;0;L;;;;;N;;;;; +1E4D1;NAG MUNDARI LETTER OP;Lo;0;L;;;;;N;;;;; +1E4D2;NAG MUNDARI LETTER OL;Lo;0;L;;;;;N;;;;; +1E4D3;NAG MUNDARI LETTER OY;Lo;0;L;;;;;N;;;;; +1E4D4;NAG MUNDARI LETTER ONG;Lo;0;L;;;;;N;;;;; +1E4D5;NAG MUNDARI LETTER A;Lo;0;L;;;;;N;;;;; +1E4D6;NAG MUNDARI LETTER AJ;Lo;0;L;;;;;N;;;;; +1E4D7;NAG MUNDARI LETTER AB;Lo;0;L;;;;;N;;;;; +1E4D8;NAG MUNDARI LETTER ANY;Lo;0;L;;;;;N;;;;; +1E4D9;NAG MUNDARI LETTER AH;Lo;0;L;;;;;N;;;;; +1E4DA;NAG MUNDARI LETTER I;Lo;0;L;;;;;N;;;;; +1E4DB;NAG MUNDARI LETTER IS;Lo;0;L;;;;;N;;;;; +1E4DC;NAG MUNDARI LETTER IDD;Lo;0;L;;;;;N;;;;; +1E4DD;NAG MUNDARI LETTER IT;Lo;0;L;;;;;N;;;;; +1E4DE;NAG MUNDARI LETTER IH;Lo;0;L;;;;;N;;;;; +1E4DF;NAG MUNDARI LETTER U;Lo;0;L;;;;;N;;;;; +1E4E0;NAG MUNDARI LETTER UC;Lo;0;L;;;;;N;;;;; +1E4E1;NAG MUNDARI LETTER UD;Lo;0;L;;;;;N;;;;; +1E4E2;NAG MUNDARI LETTER UK;Lo;0;L;;;;;N;;;;; +1E4E3;NAG MUNDARI LETTER UR;Lo;0;L;;;;;N;;;;; +1E4E4;NAG MUNDARI LETTER E;Lo;0;L;;;;;N;;;;; +1E4E5;NAG MUNDARI LETTER ENN;Lo;0;L;;;;;N;;;;; +1E4E6;NAG MUNDARI LETTER EG;Lo;0;L;;;;;N;;;;; +1E4E7;NAG MUNDARI LETTER EM;Lo;0;L;;;;;N;;;;; +1E4E8;NAG MUNDARI LETTER EN;Lo;0;L;;;;;N;;;;; +1E4E9;NAG MUNDARI LETTER ETT;Lo;0;L;;;;;N;;;;; +1E4EA;NAG MUNDARI LETTER ELL;Lo;0;L;;;;;N;;;;; +1E4EB;NAG MUNDARI SIGN OJOD;Lm;0;L;;;;;N;;;;; +1E4EC;NAG MUNDARI SIGN MUHOR;Mn;232;NSM;;;;;N;;;;; +1E4ED;NAG MUNDARI SIGN TOYOR;Mn;232;NSM;;;;;N;;;;; +1E4EE;NAG MUNDARI SIGN IKIR;Mn;220;NSM;;;;;N;;;;; +1E4EF;NAG MUNDARI SIGN SUTUH;Mn;230;NSM;;;;;N;;;;; +1E4F0;NAG MUNDARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1E4F1;NAG MUNDARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1E4F2;NAG MUNDARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1E4F3;NAG MUNDARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1E4F4;NAG MUNDARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1E4F5;NAG MUNDARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1E4F6;NAG MUNDARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1E4F7;NAG MUNDARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1E4F8;NAG MUNDARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1E4F9;NAG MUNDARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1E5D0;OL ONAL LETTER O;Lo;0;L;;;;;N;;;;; +1E5D1;OL ONAL LETTER OM;Lo;0;L;;;;;N;;;;; +1E5D2;OL ONAL LETTER ONG;Lo;0;L;;;;;N;;;;; +1E5D3;OL ONAL LETTER ORR;Lo;0;L;;;;;N;;;;; +1E5D4;OL ONAL LETTER OO;Lo;0;L;;;;;N;;;;; +1E5D5;OL ONAL LETTER OY;Lo;0;L;;;;;N;;;;; +1E5D6;OL ONAL LETTER A;Lo;0;L;;;;;N;;;;; +1E5D7;OL ONAL LETTER AD;Lo;0;L;;;;;N;;;;; +1E5D8;OL ONAL LETTER AB;Lo;0;L;;;;;N;;;;; +1E5D9;OL ONAL LETTER AH;Lo;0;L;;;;;N;;;;; +1E5DA;OL ONAL LETTER AL;Lo;0;L;;;;;N;;;;; +1E5DB;OL ONAL LETTER AW;Lo;0;L;;;;;N;;;;; +1E5DC;OL ONAL LETTER I;Lo;0;L;;;;;N;;;;; +1E5DD;OL ONAL LETTER IT;Lo;0;L;;;;;N;;;;; +1E5DE;OL ONAL LETTER IP;Lo;0;L;;;;;N;;;;; +1E5DF;OL ONAL LETTER ITT;Lo;0;L;;;;;N;;;;; +1E5E0;OL ONAL LETTER ID;Lo;0;L;;;;;N;;;;; +1E5E1;OL ONAL LETTER IN;Lo;0;L;;;;;N;;;;; +1E5E2;OL ONAL LETTER U;Lo;0;L;;;;;N;;;;; +1E5E3;OL ONAL LETTER UK;Lo;0;L;;;;;N;;;;; +1E5E4;OL ONAL LETTER UDD;Lo;0;L;;;;;N;;;;; +1E5E5;OL ONAL LETTER UJ;Lo;0;L;;;;;N;;;;; +1E5E6;OL ONAL LETTER UNY;Lo;0;L;;;;;N;;;;; +1E5E7;OL ONAL LETTER UR;Lo;0;L;;;;;N;;;;; +1E5E8;OL ONAL LETTER E;Lo;0;L;;;;;N;;;;; +1E5E9;OL ONAL LETTER ES;Lo;0;L;;;;;N;;;;; +1E5EA;OL ONAL LETTER EH;Lo;0;L;;;;;N;;;;; +1E5EB;OL ONAL LETTER EC;Lo;0;L;;;;;N;;;;; +1E5EC;OL ONAL LETTER ENN;Lo;0;L;;;;;N;;;;; +1E5ED;OL ONAL LETTER EG;Lo;0;L;;;;;N;;;;; +1E5EE;OL ONAL SIGN MU;Mn;230;NSM;;;;;N;;;;; +1E5EF;OL ONAL SIGN IKIR;Mn;220;NSM;;;;;N;;;;; +1E5F0;OL ONAL SIGN HODDOND;Lo;0;L;;;;;N;;;;; +1E5F1;OL ONAL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1E5F2;OL ONAL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1E5F3;OL ONAL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1E5F4;OL ONAL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1E5F5;OL ONAL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1E5F6;OL ONAL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1E5F7;OL ONAL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1E5F8;OL ONAL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1E5F9;OL ONAL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1E5FA;OL ONAL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1E5FF;OL ONAL ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; +1E7E0;ETHIOPIC SYLLABLE HHYA;Lo;0;L;;;;;N;;;;; +1E7E1;ETHIOPIC SYLLABLE HHYU;Lo;0;L;;;;;N;;;;; +1E7E2;ETHIOPIC SYLLABLE HHYI;Lo;0;L;;;;;N;;;;; +1E7E3;ETHIOPIC SYLLABLE HHYAA;Lo;0;L;;;;;N;;;;; +1E7E4;ETHIOPIC SYLLABLE HHYEE;Lo;0;L;;;;;N;;;;; +1E7E5;ETHIOPIC SYLLABLE HHYE;Lo;0;L;;;;;N;;;;; +1E7E6;ETHIOPIC SYLLABLE HHYO;Lo;0;L;;;;;N;;;;; +1E7E8;ETHIOPIC SYLLABLE GURAGE HHWA;Lo;0;L;;;;;N;;;;; +1E7E9;ETHIOPIC SYLLABLE HHWI;Lo;0;L;;;;;N;;;;; +1E7EA;ETHIOPIC SYLLABLE HHWEE;Lo;0;L;;;;;N;;;;; +1E7EB;ETHIOPIC SYLLABLE HHWE;Lo;0;L;;;;;N;;;;; +1E7ED;ETHIOPIC SYLLABLE GURAGE MWI;Lo;0;L;;;;;N;;;;; +1E7EE;ETHIOPIC SYLLABLE GURAGE MWEE;Lo;0;L;;;;;N;;;;; +1E7F0;ETHIOPIC SYLLABLE GURAGE QWI;Lo;0;L;;;;;N;;;;; +1E7F1;ETHIOPIC SYLLABLE GURAGE QWEE;Lo;0;L;;;;;N;;;;; +1E7F2;ETHIOPIC SYLLABLE GURAGE QWE;Lo;0;L;;;;;N;;;;; +1E7F3;ETHIOPIC SYLLABLE GURAGE BWI;Lo;0;L;;;;;N;;;;; +1E7F4;ETHIOPIC SYLLABLE GURAGE BWEE;Lo;0;L;;;;;N;;;;; +1E7F5;ETHIOPIC SYLLABLE GURAGE KWI;Lo;0;L;;;;;N;;;;; +1E7F6;ETHIOPIC SYLLABLE GURAGE KWEE;Lo;0;L;;;;;N;;;;; +1E7F7;ETHIOPIC SYLLABLE GURAGE KWE;Lo;0;L;;;;;N;;;;; +1E7F8;ETHIOPIC SYLLABLE GURAGE GWI;Lo;0;L;;;;;N;;;;; +1E7F9;ETHIOPIC SYLLABLE GURAGE GWEE;Lo;0;L;;;;;N;;;;; +1E7FA;ETHIOPIC SYLLABLE GURAGE GWE;Lo;0;L;;;;;N;;;;; +1E7FB;ETHIOPIC SYLLABLE GURAGE FWI;Lo;0;L;;;;;N;;;;; +1E7FC;ETHIOPIC SYLLABLE GURAGE FWEE;Lo;0;L;;;;;N;;;;; +1E7FD;ETHIOPIC SYLLABLE GURAGE PWI;Lo;0;L;;;;;N;;;;; +1E7FE;ETHIOPIC SYLLABLE GURAGE PWEE;Lo;0;L;;;;;N;;;;; 1E800;MENDE KIKAKUI SYLLABLE M001 KI;Lo;0;R;;;;;N;;;;; 1E801;MENDE KIKAKUI SYLLABLE M002 KA;Lo;0;R;;;;;N;;;;; 1E802;MENDE KIKAKUI SYLLABLE M003 KU;Lo;0;R;;;;;N;;;;; @@ -31886,6 +38079,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;; 1F6D6;HUT;So;0;ON;;;;;N;;;;; 1F6D7;ELEVATOR;So;0;ON;;;;;N;;;;; +1F6DC;WIRELESS;So;0;ON;;;;;N;;;;; +1F6DD;PLAYGROUND SLIDE;So;0;ON;;;;;N;;;;; +1F6DE;WHEEL;So;0;ON;;;;;N;;;;; +1F6DF;RING BUOY;So;0;ON;;;;;N;;;;; 1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;; 1F6E1;SHIELD;So;0;ON;;;;;N;;;;; 1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;; @@ -32028,6 +38225,14 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F771;ALCHEMICAL SYMBOL FOR MONTH;So;0;ON;;;;;N;;;;; 1F772;ALCHEMICAL SYMBOL FOR HALF DRAM;So;0;ON;;;;;N;;;;; 1F773;ALCHEMICAL SYMBOL FOR HALF OUNCE;So;0;ON;;;;;N;;;;; +1F774;LOT OF FORTUNE;So;0;ON;;;;;N;;;;; +1F775;OCCULTATION;So;0;ON;;;;;N;;;;; +1F776;LUNAR ECLIPSE;So;0;ON;;;;;N;;;;; +1F77B;HAUMEA;So;0;ON;;;;;N;;;;; +1F77C;MAKEMAKE;So;0;ON;;;;;N;;;;; +1F77D;GONGGONG;So;0;ON;;;;;N;;;;; +1F77E;QUAOAR;So;0;ON;;;;;N;;;;; +1F77F;ORCUS;So;0;ON;;;;;N;;;;; 1F780;BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 1F781;BLACK UP-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 1F782;BLACK RIGHT-POINTING ISOSCELES RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; @@ -32117,6 +38322,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F7D6;NEGATIVE CIRCLED TRIANGLE;So;0;ON;;;;;N;;;;; 1F7D7;CIRCLED SQUARE;So;0;ON;;;;;N;;;;; 1F7D8;NEGATIVE CIRCLED SQUARE;So;0;ON;;;;;N;;;;; +1F7D9;NINE POINTED WHITE STAR;So;0;ON;;;;;N;;;;; 1F7E0;LARGE ORANGE CIRCLE;So;0;ON;;;;;N;;;;; 1F7E1;LARGE YELLOW CIRCLE;So;0;ON;;;;;N;;;;; 1F7E2;LARGE GREEN CIRCLE;So;0;ON;;;;;N;;;;; @@ -32129,6 +38335,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F7E9;LARGE GREEN SQUARE;So;0;ON;;;;;N;;;;; 1F7EA;LARGE PURPLE SQUARE;So;0;ON;;;;;N;;;;; 1F7EB;LARGE BROWN SQUARE;So;0;ON;;;;;N;;;;; +1F7F0;HEAVY EQUALS SIGN;So;0;ON;;;;;N;;;;; 1F800;LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F801;UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F802;RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; @@ -32279,6 +38486,18 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F8AD;WHITE ARROW SHAFT WIDTH TWO THIRDS;So;0;ON;;;;;N;;;;; 1F8B0;ARROW POINTING UPWARDS THEN NORTH WEST;So;0;ON;;;;;N;;;;; 1F8B1;ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST;So;0;ON;;;;;N;;;;; +1F8B2;RIGHTWARDS ARROW WITH LOWER HOOK;So;0;ON;;;;;N;;;;; +1F8B3;DOWNWARDS BLACK ARROW TO BAR;So;0;ON;;;;;N;;;;; +1F8B4;NEGATIVE SQUARED LEFTWARDS ARROW;So;0;ON;;;;;N;;;;; +1F8B5;NEGATIVE SQUARED UPWARDS ARROW;So;0;ON;;;;;N;;;;; +1F8B6;NEGATIVE SQUARED RIGHTWARDS ARROW;So;0;ON;;;;;N;;;;; +1F8B7;NEGATIVE SQUARED DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; +1F8B8;NORTH WEST ARROW FROM BAR;So;0;ON;;;;;N;;;;; +1F8B9;NORTH EAST ARROW FROM BAR;So;0;ON;;;;;N;;;;; +1F8BA;SOUTH EAST ARROW FROM BAR;So;0;ON;;;;;N;;;;; +1F8BB;SOUTH WEST ARROW FROM BAR;So;0;ON;;;;;N;;;;; +1F8C0;LEFTWARDS ARROW FROM DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; +1F8C1;RIGHTWARDS ARROW FROM DOWNWARDS ARROW;So;0;ON;;;;;N;;;;; 1F900;CIRCLED CROSS FORMEE WITH FOUR DOTS;So;0;ON;;;;;N;;;;; 1F901;CIRCLED CROSS FORMEE WITH TWO DOTS;So;0;ON;;;;;N;;;;; 1F902;CIRCLED CROSS FORMEE;So;0;ON;;;;;N;;;;; @@ -32400,6 +38619,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F976;FREEZING FACE;So;0;ON;;;;;N;;;;; 1F977;NINJA;So;0;ON;;;;;N;;;;; 1F978;DISGUISED FACE;So;0;ON;;;;;N;;;;; +1F979;FACE HOLDING BACK TEARS;So;0;ON;;;;;N;;;;; 1F97A;FACE WITH PLEADING EYES;So;0;ON;;;;;N;;;;; 1F97B;SARI;So;0;ON;;;;;N;;;;; 1F97C;LAB COAT;So;0;ON;;;;;N;;;;; @@ -32482,6 +38702,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F9C9;MATE DRINK;So;0;ON;;;;;N;;;;; 1F9CA;ICE CUBE;So;0;ON;;;;;N;;;;; 1F9CB;BUBBLE TEA;So;0;ON;;;;;N;;;;; +1F9CC;TROLL;So;0;ON;;;;;N;;;;; 1F9CD;STANDING PERSON;So;0;ON;;;;;N;;;;; 1F9CE;KNEELING PERSON;So;0;ON;;;;;N;;;;; 1F9CF;DEAF PERSON;So;0;ON;;;;;N;;;;; @@ -32636,9 +38857,14 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FA72;BRIEFS;So;0;ON;;;;;N;;;;; 1FA73;SHORTS;So;0;ON;;;;;N;;;;; 1FA74;THONG SANDAL;So;0;ON;;;;;N;;;;; +1FA75;LIGHT BLUE HEART;So;0;ON;;;;;N;;;;; +1FA76;GREY HEART;So;0;ON;;;;;N;;;;; +1FA77;PINK HEART;So;0;ON;;;;;N;;;;; 1FA78;DROP OF BLOOD;So;0;ON;;;;;N;;;;; 1FA79;ADHESIVE BANDAGE;So;0;ON;;;;;N;;;;; 1FA7A;STETHOSCOPE;So;0;ON;;;;;N;;;;; +1FA7B;X-RAY;So;0;ON;;;;;N;;;;; +1FA7C;CRUTCH;So;0;ON;;;;;N;;;;; 1FA80;YO-YO;So;0;ON;;;;;N;;;;; 1FA81;KITE;So;0;ON;;;;;N;;;;; 1FA82;PARACHUTE;So;0;ON;;;;;N;;;;; @@ -32646,6 +38872,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FA84;MAGIC WAND;So;0;ON;;;;;N;;;;; 1FA85;PINATA;So;0;ON;;;;;N;;;;; 1FA86;NESTING DOLLS;So;0;ON;;;;;N;;;;; +1FA87;MARACAS;So;0;ON;;;;;N;;;;; +1FA88;FLUTE;So;0;ON;;;;;N;;;;; +1FA89;HARP;So;0;ON;;;;;N;;;;; +1FA8F;SHOVEL;So;0;ON;;;;;N;;;;; 1FA90;RINGED PLANET;So;0;ON;;;;;N;;;;; 1FA91;CHAIR;So;0;ON;;;;;N;;;;; 1FA92;RAZOR;So;0;ON;;;;;N;;;;; @@ -32671,6 +38901,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAA6;HEADSTONE;So;0;ON;;;;;N;;;;; 1FAA7;PLACARD;So;0;ON;;;;;N;;;;; 1FAA8;ROCK;So;0;ON;;;;;N;;;;; +1FAA9;MIRROR BALL;So;0;ON;;;;;N;;;;; +1FAAA;IDENTIFICATION CARD;So;0;ON;;;;;N;;;;; +1FAAB;LOW BATTERY;So;0;ON;;;;;N;;;;; +1FAAC;HAMSA;So;0;ON;;;;;N;;;;; +1FAAD;FOLDING HAND FAN;So;0;ON;;;;;N;;;;; +1FAAE;HAIR PICK;So;0;ON;;;;;N;;;;; +1FAAF;KHANDA;So;0;ON;;;;;N;;;;; 1FAB0;FLY;So;0;ON;;;;;N;;;;; 1FAB1;WORM;So;0;ON;;;;;N;;;;; 1FAB2;BEETLE;So;0;ON;;;;;N;;;;; @@ -32678,9 +38915,24 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAB4;POTTED PLANT;So;0;ON;;;;;N;;;;; 1FAB5;WOOD;So;0;ON;;;;;N;;;;; 1FAB6;FEATHER;So;0;ON;;;;;N;;;;; +1FAB7;LOTUS;So;0;ON;;;;;N;;;;; +1FAB8;CORAL;So;0;ON;;;;;N;;;;; +1FAB9;EMPTY NEST;So;0;ON;;;;;N;;;;; +1FABA;NEST WITH EGGS;So;0;ON;;;;;N;;;;; +1FABB;HYACINTH;So;0;ON;;;;;N;;;;; +1FABC;JELLYFISH;So;0;ON;;;;;N;;;;; +1FABD;WING;So;0;ON;;;;;N;;;;; +1FABE;LEAFLESS TREE;So;0;ON;;;;;N;;;;; +1FABF;GOOSE;So;0;ON;;;;;N;;;;; 1FAC0;ANATOMICAL HEART;So;0;ON;;;;;N;;;;; 1FAC1;LUNGS;So;0;ON;;;;;N;;;;; 1FAC2;PEOPLE HUGGING;So;0;ON;;;;;N;;;;; +1FAC3;PREGNANT MAN;So;0;ON;;;;;N;;;;; +1FAC4;PREGNANT PERSON;So;0;ON;;;;;N;;;;; +1FAC5;PERSON WITH CROWN;So;0;ON;;;;;N;;;;; +1FAC6;FINGERPRINT;So;0;ON;;;;;N;;;;; +1FACE;MOOSE;So;0;ON;;;;;N;;;;; +1FACF;DONKEY;So;0;ON;;;;;N;;;;; 1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;; 1FAD1;BELL PEPPER;So;0;ON;;;;;N;;;;; 1FAD2;OLIVE;So;0;ON;;;;;N;;;;; @@ -32688,6 +38940,32 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAD4;TAMALE;So;0;ON;;;;;N;;;;; 1FAD5;FONDUE;So;0;ON;;;;;N;;;;; 1FAD6;TEAPOT;So;0;ON;;;;;N;;;;; +1FAD7;POURING LIQUID;So;0;ON;;;;;N;;;;; +1FAD8;BEANS;So;0;ON;;;;;N;;;;; +1FAD9;JAR;So;0;ON;;;;;N;;;;; +1FADA;GINGER ROOT;So;0;ON;;;;;N;;;;; +1FADB;PEA POD;So;0;ON;;;;;N;;;;; +1FADC;ROOT VEGETABLE;So;0;ON;;;;;N;;;;; +1FADF;SPLATTER;So;0;ON;;;;;N;;;;; +1FAE0;MELTING FACE;So;0;ON;;;;;N;;;;; +1FAE1;SALUTING FACE;So;0;ON;;;;;N;;;;; +1FAE2;FACE WITH OPEN EYES AND HAND OVER MOUTH;So;0;ON;;;;;N;;;;; +1FAE3;FACE WITH PEEKING EYE;So;0;ON;;;;;N;;;;; +1FAE4;FACE WITH DIAGONAL MOUTH;So;0;ON;;;;;N;;;;; +1FAE5;DOTTED LINE FACE;So;0;ON;;;;;N;;;;; +1FAE6;BITING LIP;So;0;ON;;;;;N;;;;; +1FAE7;BUBBLES;So;0;ON;;;;;N;;;;; +1FAE8;SHAKING FACE;So;0;ON;;;;;N;;;;; +1FAE9;FACE WITH BAGS UNDER EYES;So;0;ON;;;;;N;;;;; +1FAF0;HAND WITH INDEX FINGER AND THUMB CROSSED;So;0;ON;;;;;N;;;;; +1FAF1;RIGHTWARDS HAND;So;0;ON;;;;;N;;;;; +1FAF2;LEFTWARDS HAND;So;0;ON;;;;;N;;;;; +1FAF3;PALM DOWN HAND;So;0;ON;;;;;N;;;;; +1FAF4;PALM UP HAND;So;0;ON;;;;;N;;;;; +1FAF5;INDEX POINTING AT THE VIEWER;So;0;ON;;;;;N;;;;; +1FAF6;HEART HANDS;So;0;ON;;;;;N;;;;; +1FAF7;LEFTWARDS PUSHING HAND;So;0;ON;;;;;N;;;;; +1FAF8;RIGHTWARDS PUSHING HAND;So;0;ON;;;;;N;;;;; 1FB00;BLOCK SEXTANT-1;So;0;ON;;;;;N;;;;; 1FB01;BLOCK SEXTANT-2;So;0;ON;;;;;N;;;;; 1FB02;BLOCK SEXTANT-12;So;0;ON;;;;;N;;;;; @@ -32890,6 +39168,43 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FBC8;STICK FIGURE LEANING RIGHT;So;0;ON;;;;;N;;;;; 1FBC9;STICK FIGURE WITH DRESS;So;0;ON;;;;;N;;;;; 1FBCA;WHITE UP-POINTING CHEVRON;So;0;ON;;;;;N;;;;; +1FBCB;WHITE CROSS MARK;So;0;ON;;;;;N;;;;; +1FBCC;RAISED SMALL LEFT SQUARE BRACKET;So;0;ON;;;;;N;;;;; +1FBCD;BLACK SMALL UP-POINTING CHEVRON;So;0;ON;;;;;N;;;;; +1FBCE;LEFT TWO THIRDS BLOCK;So;0;ON;;;;;N;;;;; +1FBCF;LEFT ONE THIRD BLOCK;So;0;ON;;;;;N;;;;; +1FBD0;BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER LEFT;So;0;ON;;;;;N;;;;; +1FBD1;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT;So;0;ON;;;;;N;;;;; +1FBD2;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;; +1FBD3;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;; +1FBD4;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; +1FBD5;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;; +1FBD6;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;; +1FBD7;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO LOWER LEFT;So;0;ON;;;;;N;;;;; +1FBD8;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;; +1FBD9;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;; +1FBDA;BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO MIDDLE CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;; +1FBDB;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO LOWER LEFT;So;0;ON;;;;;N;;;;; +1FBDC;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;; +1FBDD;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;; +1FBDE;BOX DRAWINGS LIGHT DIAGONAL LOWER LEFT TO UPPER CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;; +1FBDF;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE RIGHT TO LOWER LEFT;So;0;ON;;;;;N;;;;; +1FBE0;TOP JUSTIFIED LOWER HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;; +1FBE1;RIGHT JUSTIFIED LEFT HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;; +1FBE2;BOTTOM JUSTIFIED UPPER HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;; +1FBE3;LEFT JUSTIFIED RIGHT HALF WHITE CIRCLE;So;0;ON;;;;;N;;;;; +1FBE4;UPPER CENTRE ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1FBE5;LOWER CENTRE ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1FBE6;MIDDLE LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1FBE7;MIDDLE RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +1FBE8;TOP JUSTIFIED LOWER HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; +1FBE9;RIGHT JUSTIFIED LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; +1FBEA;BOTTOM JUSTIFIED UPPER HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; +1FBEB;LEFT JUSTIFIED RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; +1FBEC;TOP RIGHT JUSTIFIED LOWER LEFT QUARTER BLACK CIRCLE;So;0;ON;;;;;N;;;;; +1FBED;BOTTOM LEFT JUSTIFIED UPPER RIGHT QUARTER BLACK CIRCLE;So;0;ON;;;;;N;;;;; +1FBEE;BOTTOM RIGHT JUSTIFIED UPPER LEFT QUARTER BLACK CIRCLE;So;0;ON;;;;;N;;;;; +1FBEF;TOP LEFT JUSTIFIED LOWER RIGHT QUARTER BLACK CIRCLE;So;0;ON;;;;;N;;;;; 1FBF0;SEGMENTED DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; 1FBF1;SEGMENTED DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; 1FBF2;SEGMENTED DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; @@ -32901,15 +39216,17 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FBF8;SEGMENTED DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1FBF9;SEGMENTED DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; 20000;;Lo;0;L;;;;;N;;;;; -2A6DD;;Lo;0;L;;;;;N;;;;; +2A6DF;;Lo;0;L;;;;;N;;;;; 2A700;;Lo;0;L;;;;;N;;;;; -2B734;;Lo;0;L;;;;;N;;;;; +2B739;;Lo;0;L;;;;;N;;;;; 2B740;;Lo;0;L;;;;;N;;;;; 2B81D;;Lo;0;L;;;;;N;;;;; 2B820;;Lo;0;L;;;;;N;;;;; 2CEA1;;Lo;0;L;;;;;N;;;;; 2CEB0;;Lo;0;L;;;;;N;;;;; 2EBE0;;Lo;0;L;;;;;N;;;;; +2EBF0;;Lo;0;L;;;;;N;;;;; +2EE5D;;Lo;0;L;;;;;N;;;;; 2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;; 2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;; 2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;; @@ -33454,6 +39771,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;; 30000;;Lo;0;L;;;;;N;;;;; 3134A;;Lo;0;L;;;;;N;;;;; +31350;;Lo;0;L;;;;;N;;;;; +323AF;;Lo;0;L;;;;;N;;;;; E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;; E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;; E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;; diff --git a/lib/scripts/common.py b/lib/scripts/common.py index d140796..2ef1e9b 100644 --- a/lib/scripts/common.py +++ b/lib/scripts/common.py @@ -18,22 +18,30 @@ def parse_char_range(text): end = char_range[len(char_range) - 1] + 1 return (start, end) -def read_ucd_file(scrpath, handler): - with open(scrpath, 'r') as src: +def read_ucd_file(srcpath, handler): + with open(srcpath, 'r', encoding='utf-8') as src: + line_idx = 0 for line in src: - line = line.strip() - if len(line) == 0 or line.startswith('#'): - continue - handler(line) + line_idx += 1 + try: + line = line.strip() + if len(line) == 0 or line.startswith('#'): + continue + handler(line) + except Exception as ex: + if getattr(ex, 'add_note', None): + ex.add_note(f'in {srcpath} on line {line_idx}') + raise + raise RuntimeError(f'failed to parse {srcpath} on line {line_idx}') from ex def write_file(dstpath, content): if dstpath.exists(): - with open(dstpath, 'r') as dst: + with open(dstpath, 'r', encoding='utf-8') as dst: existing = dst.read() if content == existing: dstpath.touch() return dstpath.parent.mkdir(parents=True, exist_ok=True) - with open(dstpath, 'w') as dst: + with open(dstpath, 'w', encoding='utf-8') as dst: dst.write(content) diff --git a/lib/scripts/genmappings.py b/lib/scripts/genmappings.py index 25b2791..07fce66 100644 --- a/lib/scripts/genmappings.py +++ b/lib/scripts/genmappings.py @@ -140,13 +140,15 @@ def parse_properties(line): whitespaces.append(char) def parse_derived_properties(line): - (char_range, prop) = line[:line.index('# ')].split('; ') + (char_range, props) = line[:line.index('# ')].split('; ', 1) char_range = char_range.strip() - prop = prop.strip() - prop_val = prop_values.get(prop) - if not prop_val is None: - start, end = parse_char_range(char_range) - prop_builder.add_chars(start, end, prop_val) + props = props.split('; ') + for prop in props: + prop = prop.strip() + prop_val = prop_values.get(prop) + if not prop_val is None: + start, end = parse_char_range(char_range) + prop_builder.add_chars(start, end, prop_val) def make_source_chars(char_info): diff --git a/lib/src/unicode_mappings.cpp b/lib/src/unicode_mappings.cpp index 30899dd..8f63d90 100644 --- a/lib/src/unicode_mappings.cpp +++ b/lib/src/unicode_mappings.cpp @@ -51,70 +51,74 @@ namespace sysstr::util::unicode {488 ,U'\u0552'}, {489 ,U'\u0553'}, {490 ,U'\u0554'}, {491 ,U'\u0555'}, {492 ,U'\u0556'}, {493 ,U'\u0587'}, {495 ,U'\u10A0'}, {496 ,U'\u10A1'}, {497 ,U'\u10A2'}, {498 ,U'\u10A3'}, {499 ,U'\u10A4'}, {500 ,U'\u10A5'}, {501 ,U'\u10A6'}, {502 ,U'\u10A7'}, {503 ,U'\u10A8'}, {504 ,U'\u10A9'}, {505 ,U'\u10AA'}, {506 ,U'\u10AB'}, {507 ,U'\u10AC'}, {508 ,U'\u10AD'}, {509 ,U'\u10AE'}, {510 ,U'\u10AF'}, {511 ,U'\u10B0'}, {512 ,U'\u10B1'}, {513 ,U'\u10B2'}, {514 ,U'\u10B3'}, {515 ,U'\u10B4'}, {516 ,U'\u10B5'}, {517 ,U'\u10B6'}, {518 ,U'\u10B7'}, {519 ,U'\u10B8'}, {520 ,U'\u10B9'}, {521 ,U'\u10BA'}, {522 ,U'\u10BB'}, {523 ,U'\u10BC'}, {524 ,U'\u10BD'}, {525 ,U'\u10BE'}, {526 ,U'\u10BF'}, {527 ,U'\u10C0'}, {528 ,U'\u10C1'}, {529 ,U'\u10C2'}, {530 ,U'\u10C3'}, {531 ,U'\u10C4'}, {532 ,U'\u10C5'}, {533 ,U'\u10C7'}, {534 ,U'\u10CD'}, {535 ,U'\u13F8'}, {536 ,U'\u13F9'}, - {537 ,U'\u13FA'}, {538 ,U'\u13FB'}, {539 ,U'\u13FC'}, {540 ,U'\u13FD'}, {541 ,U'\u1C80'}, {542 ,U'\u1C81'}, {543 ,U'\u1C82'}, {544 ,U'\u1C83'}, {545 ,U'\u1C84'}, {546 ,U'\u1C85'}, {547 ,U'\u1C86'}, {548 ,U'\u1C87'}, {549 ,U'\u1C88'}, {550 ,U'\u1C90'}, {551 ,U'\u1C91'}, {552 ,U'\u1C92'}, - {553 ,U'\u1C93'}, {554 ,U'\u1C94'}, {555 ,U'\u1C95'}, {556 ,U'\u1C96'}, {557 ,U'\u1C97'}, {558 ,U'\u1C98'}, {559 ,U'\u1C99'}, {560 ,U'\u1C9A'}, {561 ,U'\u1C9B'}, {562 ,U'\u1C9C'}, {563 ,U'\u1C9D'}, {564 ,U'\u1C9E'}, {565 ,U'\u1C9F'}, {566 ,U'\u1CA0'}, {567 ,U'\u1CA1'}, {568 ,U'\u1CA2'}, - {569 ,U'\u1CA3'}, {570 ,U'\u1CA4'}, {571 ,U'\u1CA5'}, {572 ,U'\u1CA6'}, {573 ,U'\u1CA7'}, {574 ,U'\u1CA8'}, {575 ,U'\u1CA9'}, {576 ,U'\u1CAA'}, {577 ,U'\u1CAB'}, {578 ,U'\u1CAC'}, {579 ,U'\u1CAD'}, {580 ,U'\u1CAE'}, {581 ,U'\u1CAF'}, {582 ,U'\u1CB0'}, {583 ,U'\u1CB1'}, {584 ,U'\u1CB2'}, - {585 ,U'\u1CB3'}, {586 ,U'\u1CB4'}, {587 ,U'\u1CB5'}, {588 ,U'\u1CB6'}, {589 ,U'\u1CB7'}, {590 ,U'\u1CB8'}, {591 ,U'\u1CB9'}, {592 ,U'\u1CBA'}, {593 ,U'\u1CBD'}, {594 ,U'\u1CBE'}, {595 ,U'\u1CBF'}, {596 ,U'\u1E00'}, {597 ,U'\u1E02'}, {598 ,U'\u1E04'}, {599 ,U'\u1E06'}, {600 ,U'\u1E08'}, - {601 ,U'\u1E0A'}, {602 ,U'\u1E0C'}, {603 ,U'\u1E0E'}, {604 ,U'\u1E10'}, {605 ,U'\u1E12'}, {606 ,U'\u1E14'}, {607 ,U'\u1E16'}, {608 ,U'\u1E18'}, {609 ,U'\u1E1A'}, {610 ,U'\u1E1C'}, {611 ,U'\u1E1E'}, {612 ,U'\u1E20'}, {613 ,U'\u1E22'}, {614 ,U'\u1E24'}, {615 ,U'\u1E26'}, {616 ,U'\u1E28'}, - {617 ,U'\u1E2A'}, {618 ,U'\u1E2C'}, {619 ,U'\u1E2E'}, {620 ,U'\u1E30'}, {621 ,U'\u1E32'}, {622 ,U'\u1E34'}, {623 ,U'\u1E36'}, {624 ,U'\u1E38'}, {625 ,U'\u1E3A'}, {626 ,U'\u1E3C'}, {627 ,U'\u1E3E'}, {628 ,U'\u1E40'}, {629 ,U'\u1E42'}, {630 ,U'\u1E44'}, {631 ,U'\u1E46'}, {632 ,U'\u1E48'}, - {633 ,U'\u1E4A'}, {634 ,U'\u1E4C'}, {635 ,U'\u1E4E'}, {636 ,U'\u1E50'}, {637 ,U'\u1E52'}, {638 ,U'\u1E54'}, {639 ,U'\u1E56'}, {640 ,U'\u1E58'}, {641 ,U'\u1E5A'}, {642 ,U'\u1E5C'}, {643 ,U'\u1E5E'}, {644 ,U'\u1E60'}, {645 ,U'\u1E62'}, {646 ,U'\u1E64'}, {647 ,U'\u1E66'}, {648 ,U'\u1E68'}, - {649 ,U'\u1E6A'}, {650 ,U'\u1E6C'}, {651 ,U'\u1E6E'}, {652 ,U'\u1E70'}, {653 ,U'\u1E72'}, {654 ,U'\u1E74'}, {655 ,U'\u1E76'}, {656 ,U'\u1E78'}, {657 ,U'\u1E7A'}, {658 ,U'\u1E7C'}, {659 ,U'\u1E7E'}, {660 ,U'\u1E80'}, {661 ,U'\u1E82'}, {662 ,U'\u1E84'}, {663 ,U'\u1E86'}, {664 ,U'\u1E88'}, - {665 ,U'\u1E8A'}, {666 ,U'\u1E8C'}, {667 ,U'\u1E8E'}, {668 ,U'\u1E90'}, {669 ,U'\u1E92'}, {670 ,U'\u1E94'}, {671 ,U'\u1E96'}, {673 ,U'\u1E97'}, {675 ,U'\u1E98'}, {677 ,U'\u1E99'}, {679 ,U'\u1E9A'}, {681 ,U'\u1E9B'}, {682 ,U'\u1E9E'}, {684 ,U'\u1EA0'}, {685 ,U'\u1EA2'}, {686 ,U'\u1EA4'}, - {687 ,U'\u1EA6'}, {688 ,U'\u1EA8'}, {689 ,U'\u1EAA'}, {690 ,U'\u1EAC'}, {691 ,U'\u1EAE'}, {692 ,U'\u1EB0'}, {693 ,U'\u1EB2'}, {694 ,U'\u1EB4'}, {695 ,U'\u1EB6'}, {696 ,U'\u1EB8'}, {697 ,U'\u1EBA'}, {698 ,U'\u1EBC'}, {699 ,U'\u1EBE'}, {700 ,U'\u1EC0'}, {701 ,U'\u1EC2'}, {702 ,U'\u1EC4'}, - {703 ,U'\u1EC6'}, {704 ,U'\u1EC8'}, {705 ,U'\u1ECA'}, {706 ,U'\u1ECC'}, {707 ,U'\u1ECE'}, {708 ,U'\u1ED0'}, {709 ,U'\u1ED2'}, {710 ,U'\u1ED4'}, {711 ,U'\u1ED6'}, {712 ,U'\u1ED8'}, {713 ,U'\u1EDA'}, {714 ,U'\u1EDC'}, {715 ,U'\u1EDE'}, {716 ,U'\u1EE0'}, {717 ,U'\u1EE2'}, {718 ,U'\u1EE4'}, - {719 ,U'\u1EE6'}, {720 ,U'\u1EE8'}, {721 ,U'\u1EEA'}, {722 ,U'\u1EEC'}, {723 ,U'\u1EEE'}, {724 ,U'\u1EF0'}, {725 ,U'\u1EF2'}, {726 ,U'\u1EF4'}, {727 ,U'\u1EF6'}, {728 ,U'\u1EF8'}, {729 ,U'\u1EFA'}, {730 ,U'\u1EFC'}, {731 ,U'\u1EFE'}, {732 ,U'\u1F08'}, {733 ,U'\u1F09'}, {734 ,U'\u1F0A'}, - {735 ,U'\u1F0B'}, {736 ,U'\u1F0C'}, {737 ,U'\u1F0D'}, {738 ,U'\u1F0E'}, {739 ,U'\u1F0F'}, {740 ,U'\u1F18'}, {741 ,U'\u1F19'}, {742 ,U'\u1F1A'}, {743 ,U'\u1F1B'}, {744 ,U'\u1F1C'}, {745 ,U'\u1F1D'}, {746 ,U'\u1F28'}, {747 ,U'\u1F29'}, {748 ,U'\u1F2A'}, {749 ,U'\u1F2B'}, {750 ,U'\u1F2C'}, - {751 ,U'\u1F2D'}, {752 ,U'\u1F2E'}, {753 ,U'\u1F2F'}, {754 ,U'\u1F38'}, {755 ,U'\u1F39'}, {756 ,U'\u1F3A'}, {757 ,U'\u1F3B'}, {758 ,U'\u1F3C'}, {759 ,U'\u1F3D'}, {760 ,U'\u1F3E'}, {761 ,U'\u1F3F'}, {762 ,U'\u1F48'}, {763 ,U'\u1F49'}, {764 ,U'\u1F4A'}, {765 ,U'\u1F4B'}, {766 ,U'\u1F4C'}, - {767 ,U'\u1F4D'}, {768 ,U'\u1F50'}, {770 ,U'\u1F52'}, {773 ,U'\u1F54'}, {776 ,U'\u1F56'}, {779 ,U'\u1F59'}, {780 ,U'\u1F5B'}, {781 ,U'\u1F5D'}, {782 ,U'\u1F5F'}, {783 ,U'\u1F68'}, {784 ,U'\u1F69'}, {785 ,U'\u1F6A'}, {786 ,U'\u1F6B'}, {787 ,U'\u1F6C'}, {788 ,U'\u1F6D'}, {789 ,U'\u1F6E'}, - {790 ,U'\u1F6F'}, {791 ,U'\u1F80'}, {793 ,U'\u1F81'}, {795 ,U'\u1F82'}, {797 ,U'\u1F83'}, {799 ,U'\u1F84'}, {801 ,U'\u1F85'}, {803 ,U'\u1F86'}, {805 ,U'\u1F87'}, {807 ,U'\u1F88'}, {809 ,U'\u1F89'}, {811 ,U'\u1F8A'}, {813 ,U'\u1F8B'}, {815 ,U'\u1F8C'}, {817 ,U'\u1F8D'}, {819 ,U'\u1F8E'}, - {821 ,U'\u1F8F'}, {823 ,U'\u1F90'}, {825 ,U'\u1F91'}, {827 ,U'\u1F92'}, {829 ,U'\u1F93'}, {831 ,U'\u1F94'}, {833 ,U'\u1F95'}, {835 ,U'\u1F96'}, {837 ,U'\u1F97'}, {839 ,U'\u1F98'}, {841 ,U'\u1F99'}, {843 ,U'\u1F9A'}, {845 ,U'\u1F9B'}, {847 ,U'\u1F9C'}, {849 ,U'\u1F9D'}, {851 ,U'\u1F9E'}, - {853 ,U'\u1F9F'}, {855 ,U'\u1FA0'}, {857 ,U'\u1FA1'}, {859 ,U'\u1FA2'}, {861 ,U'\u1FA3'}, {863 ,U'\u1FA4'}, {865 ,U'\u1FA5'}, {867 ,U'\u1FA6'}, {869 ,U'\u1FA7'}, {871 ,U'\u1FA8'}, {873 ,U'\u1FA9'}, {875 ,U'\u1FAA'}, {877 ,U'\u1FAB'}, {879 ,U'\u1FAC'}, {881 ,U'\u1FAD'}, {883 ,U'\u1FAE'}, - {885 ,U'\u1FAF'}, {887 ,U'\u1FB2'}, {889 ,U'\u1FB3'}, {891 ,U'\u1FB4'}, {893 ,U'\u1FB6'}, {895 ,U'\u1FB7'}, {898 ,U'\u1FB8'}, {899 ,U'\u1FB9'}, {900 ,U'\u1FBA'}, {901 ,U'\u1FBB'}, {902 ,U'\u1FBC'}, {904 ,U'\u1FBE'}, {905 ,U'\u1FC2'}, {907 ,U'\u1FC3'}, {909 ,U'\u1FC4'}, {911 ,U'\u1FC6'}, - {913 ,U'\u1FC7'}, {916 ,U'\u1FC8'}, {917 ,U'\u1FC9'}, {918 ,U'\u1FCA'}, {919 ,U'\u1FCB'}, {920 ,U'\u1FCC'}, {922 ,U'\u1FD2'}, {925 ,U'\u1FD3'}, {928 ,U'\u1FD6'}, {930 ,U'\u1FD7'}, {933 ,U'\u1FD8'}, {934 ,U'\u1FD9'}, {935 ,U'\u1FDA'}, {936 ,U'\u1FDB'}, {937 ,U'\u1FE2'}, {940 ,U'\u1FE3'}, - {943 ,U'\u1FE4'}, {945 ,U'\u1FE6'}, {947 ,U'\u1FE7'}, {950 ,U'\u1FE8'}, {951 ,U'\u1FE9'}, {952 ,U'\u1FEA'}, {953 ,U'\u1FEB'}, {954 ,U'\u1FEC'}, {955 ,U'\u1FF2'}, {957 ,U'\u1FF3'}, {959 ,U'\u1FF4'}, {961 ,U'\u1FF6'}, {963 ,U'\u1FF7'}, {966 ,U'\u1FF8'}, {967 ,U'\u1FF9'}, {968 ,U'\u1FFA'}, - {969 ,U'\u1FFB'}, {970 ,U'\u1FFC'}, {972 ,U'\u2126'}, {973 ,U'\u212A'}, {974 ,U'\u212B'}, {975 ,U'\u2132'}, {976 ,U'\u2160'}, {977 ,U'\u2161'}, {978 ,U'\u2162'}, {979 ,U'\u2163'}, {980 ,U'\u2164'}, {981 ,U'\u2165'}, {982 ,U'\u2166'}, {983 ,U'\u2167'}, {984 ,U'\u2168'}, {985 ,U'\u2169'}, - {986 ,U'\u216A'}, {987 ,U'\u216B'}, {988 ,U'\u216C'}, {989 ,U'\u216D'}, {990 ,U'\u216E'}, {991 ,U'\u216F'}, {992 ,U'\u2183'}, {993 ,U'\u24B6'}, {994 ,U'\u24B7'}, {995 ,U'\u24B8'}, {996 ,U'\u24B9'}, {997 ,U'\u24BA'}, {998 ,U'\u24BB'}, {999 ,U'\u24BC'}, {1000 ,U'\u24BD'}, {1001 ,U'\u24BE'}, - {1002 ,U'\u24BF'}, {1003 ,U'\u24C0'}, {1004 ,U'\u24C1'}, {1005 ,U'\u24C2'}, {1006 ,U'\u24C3'}, {1007 ,U'\u24C4'}, {1008 ,U'\u24C5'}, {1009 ,U'\u24C6'}, {1010 ,U'\u24C7'}, {1011 ,U'\u24C8'}, {1012 ,U'\u24C9'}, {1013 ,U'\u24CA'}, {1014 ,U'\u24CB'}, {1015 ,U'\u24CC'}, {1016 ,U'\u24CD'}, {1017 ,U'\u24CE'}, - {1018 ,U'\u24CF'}, {1019 ,U'\u2C00'}, {1020 ,U'\u2C01'}, {1021 ,U'\u2C02'}, {1022 ,U'\u2C03'}, {1023 ,U'\u2C04'}, {1024 ,U'\u2C05'}, {1025 ,U'\u2C06'}, {1026 ,U'\u2C07'}, {1027 ,U'\u2C08'}, {1028 ,U'\u2C09'}, {1029 ,U'\u2C0A'}, {1030 ,U'\u2C0B'}, {1031 ,U'\u2C0C'}, {1032 ,U'\u2C0D'}, {1033 ,U'\u2C0E'}, - {1034 ,U'\u2C0F'}, {1035 ,U'\u2C10'}, {1036 ,U'\u2C11'}, {1037 ,U'\u2C12'}, {1038 ,U'\u2C13'}, {1039 ,U'\u2C14'}, {1040 ,U'\u2C15'}, {1041 ,U'\u2C16'}, {1042 ,U'\u2C17'}, {1043 ,U'\u2C18'}, {1044 ,U'\u2C19'}, {1045 ,U'\u2C1A'}, {1046 ,U'\u2C1B'}, {1047 ,U'\u2C1C'}, {1048 ,U'\u2C1D'}, {1049 ,U'\u2C1E'}, - {1050 ,U'\u2C1F'}, {1051 ,U'\u2C20'}, {1052 ,U'\u2C21'}, {1053 ,U'\u2C22'}, {1054 ,U'\u2C23'}, {1055 ,U'\u2C24'}, {1056 ,U'\u2C25'}, {1057 ,U'\u2C26'}, {1058 ,U'\u2C27'}, {1059 ,U'\u2C28'}, {1060 ,U'\u2C29'}, {1061 ,U'\u2C2A'}, {1062 ,U'\u2C2B'}, {1063 ,U'\u2C2C'}, {1064 ,U'\u2C2D'}, {1065 ,U'\u2C2E'}, - {1066 ,U'\u2C60'}, {1067 ,U'\u2C62'}, {1068 ,U'\u2C63'}, {1069 ,U'\u2C64'}, {1070 ,U'\u2C67'}, {1071 ,U'\u2C69'}, {1072 ,U'\u2C6B'}, {1073 ,U'\u2C6D'}, {1074 ,U'\u2C6E'}, {1075 ,U'\u2C6F'}, {1076 ,U'\u2C70'}, {1077 ,U'\u2C72'}, {1078 ,U'\u2C75'}, {1079 ,U'\u2C7E'}, {1080 ,U'\u2C7F'}, {1081 ,U'\u2C80'}, - {1082 ,U'\u2C82'}, {1083 ,U'\u2C84'}, {1084 ,U'\u2C86'}, {1085 ,U'\u2C88'}, {1086 ,U'\u2C8A'}, {1087 ,U'\u2C8C'}, {1088 ,U'\u2C8E'}, {1089 ,U'\u2C90'}, {1090 ,U'\u2C92'}, {1091 ,U'\u2C94'}, {1092 ,U'\u2C96'}, {1093 ,U'\u2C98'}, {1094 ,U'\u2C9A'}, {1095 ,U'\u2C9C'}, {1096 ,U'\u2C9E'}, {1097 ,U'\u2CA0'}, - {1098 ,U'\u2CA2'}, {1099 ,U'\u2CA4'}, {1100 ,U'\u2CA6'}, {1101 ,U'\u2CA8'}, {1102 ,U'\u2CAA'}, {1103 ,U'\u2CAC'}, {1104 ,U'\u2CAE'}, {1105 ,U'\u2CB0'}, {1106 ,U'\u2CB2'}, {1107 ,U'\u2CB4'}, {1108 ,U'\u2CB6'}, {1109 ,U'\u2CB8'}, {1110 ,U'\u2CBA'}, {1111 ,U'\u2CBC'}, {1112 ,U'\u2CBE'}, {1113 ,U'\u2CC0'}, - {1114 ,U'\u2CC2'}, {1115 ,U'\u2CC4'}, {1116 ,U'\u2CC6'}, {1117 ,U'\u2CC8'}, {1118 ,U'\u2CCA'}, {1119 ,U'\u2CCC'}, {1120 ,U'\u2CCE'}, {1121 ,U'\u2CD0'}, {1122 ,U'\u2CD2'}, {1123 ,U'\u2CD4'}, {1124 ,U'\u2CD6'}, {1125 ,U'\u2CD8'}, {1126 ,U'\u2CDA'}, {1127 ,U'\u2CDC'}, {1128 ,U'\u2CDE'}, {1129 ,U'\u2CE0'}, - {1130 ,U'\u2CE2'}, {1131 ,U'\u2CEB'}, {1132 ,U'\u2CED'}, {1133 ,U'\u2CF2'}, {1134 ,U'\uA640'}, {1135 ,U'\uA642'}, {1136 ,U'\uA644'}, {1137 ,U'\uA646'}, {1138 ,U'\uA648'}, {1139 ,U'\uA64A'}, {1140 ,U'\uA64C'}, {1141 ,U'\uA64E'}, {1142 ,U'\uA650'}, {1143 ,U'\uA652'}, {1144 ,U'\uA654'}, {1145 ,U'\uA656'}, - {1146 ,U'\uA658'}, {1147 ,U'\uA65A'}, {1148 ,U'\uA65C'}, {1149 ,U'\uA65E'}, {1150 ,U'\uA660'}, {1151 ,U'\uA662'}, {1152 ,U'\uA664'}, {1153 ,U'\uA666'}, {1154 ,U'\uA668'}, {1155 ,U'\uA66A'}, {1156 ,U'\uA66C'}, {1157 ,U'\uA680'}, {1158 ,U'\uA682'}, {1159 ,U'\uA684'}, {1160 ,U'\uA686'}, {1161 ,U'\uA688'}, - {1162 ,U'\uA68A'}, {1163 ,U'\uA68C'}, {1164 ,U'\uA68E'}, {1165 ,U'\uA690'}, {1166 ,U'\uA692'}, {1167 ,U'\uA694'}, {1168 ,U'\uA696'}, {1169 ,U'\uA698'}, {1170 ,U'\uA69A'}, {1171 ,U'\uA722'}, {1172 ,U'\uA724'}, {1173 ,U'\uA726'}, {1174 ,U'\uA728'}, {1175 ,U'\uA72A'}, {1176 ,U'\uA72C'}, {1177 ,U'\uA72E'}, - {1178 ,U'\uA732'}, {1179 ,U'\uA734'}, {1180 ,U'\uA736'}, {1181 ,U'\uA738'}, {1182 ,U'\uA73A'}, {1183 ,U'\uA73C'}, {1184 ,U'\uA73E'}, {1185 ,U'\uA740'}, {1186 ,U'\uA742'}, {1187 ,U'\uA744'}, {1188 ,U'\uA746'}, {1189 ,U'\uA748'}, {1190 ,U'\uA74A'}, {1191 ,U'\uA74C'}, {1192 ,U'\uA74E'}, {1193 ,U'\uA750'}, - {1194 ,U'\uA752'}, {1195 ,U'\uA754'}, {1196 ,U'\uA756'}, {1197 ,U'\uA758'}, {1198 ,U'\uA75A'}, {1199 ,U'\uA75C'}, {1200 ,U'\uA75E'}, {1201 ,U'\uA760'}, {1202 ,U'\uA762'}, {1203 ,U'\uA764'}, {1204 ,U'\uA766'}, {1205 ,U'\uA768'}, {1206 ,U'\uA76A'}, {1207 ,U'\uA76C'}, {1208 ,U'\uA76E'}, {1209 ,U'\uA779'}, - {1210 ,U'\uA77B'}, {1211 ,U'\uA77D'}, {1212 ,U'\uA77E'}, {1213 ,U'\uA780'}, {1214 ,U'\uA782'}, {1215 ,U'\uA784'}, {1216 ,U'\uA786'}, {1217 ,U'\uA78B'}, {1218 ,U'\uA78D'}, {1219 ,U'\uA790'}, {1220 ,U'\uA792'}, {1221 ,U'\uA796'}, {1222 ,U'\uA798'}, {1223 ,U'\uA79A'}, {1224 ,U'\uA79C'}, {1225 ,U'\uA79E'}, - {1226 ,U'\uA7A0'}, {1227 ,U'\uA7A2'}, {1228 ,U'\uA7A4'}, {1229 ,U'\uA7A6'}, {1230 ,U'\uA7A8'}, {1231 ,U'\uA7AA'}, {1232 ,U'\uA7AB'}, {1233 ,U'\uA7AC'}, {1234 ,U'\uA7AD'}, {1235 ,U'\uA7AE'}, {1236 ,U'\uA7B0'}, {1237 ,U'\uA7B1'}, {1238 ,U'\uA7B2'}, {1239 ,U'\uA7B3'}, {1240 ,U'\uA7B4'}, {1241 ,U'\uA7B6'}, - {1242 ,U'\uA7B8'}, {1243 ,U'\uA7BA'}, {1244 ,U'\uA7BC'}, {1245 ,U'\uA7BE'}, {1246 ,U'\uA7C2'}, {1247 ,U'\uA7C4'}, {1248 ,U'\uA7C5'}, {1249 ,U'\uA7C6'}, {1250 ,U'\uA7C7'}, {1251 ,U'\uA7C9'}, {1252 ,U'\uA7F5'}, {1253 ,U'\uAB70'}, {1254 ,U'\uAB71'}, {1255 ,U'\uAB72'}, {1256 ,U'\uAB73'}, {1257 ,U'\uAB74'}, - {1258 ,U'\uAB75'}, {1259 ,U'\uAB76'}, {1260 ,U'\uAB77'}, {1261 ,U'\uAB78'}, {1262 ,U'\uAB79'}, {1263 ,U'\uAB7A'}, {1264 ,U'\uAB7B'}, {1265 ,U'\uAB7C'}, {1266 ,U'\uAB7D'}, {1267 ,U'\uAB7E'}, {1268 ,U'\uAB7F'}, {1269 ,U'\uAB80'}, {1270 ,U'\uAB81'}, {1271 ,U'\uAB82'}, {1272 ,U'\uAB83'}, {1273 ,U'\uAB84'}, - {1274 ,U'\uAB85'}, {1275 ,U'\uAB86'}, {1276 ,U'\uAB87'}, {1277 ,U'\uAB88'}, {1278 ,U'\uAB89'}, {1279 ,U'\uAB8A'}, {1280 ,U'\uAB8B'}, {1281 ,U'\uAB8C'}, {1282 ,U'\uAB8D'}, {1283 ,U'\uAB8E'}, {1284 ,U'\uAB8F'}, {1285 ,U'\uAB90'}, {1286 ,U'\uAB91'}, {1287 ,U'\uAB92'}, {1288 ,U'\uAB93'}, {1289 ,U'\uAB94'}, - {1290 ,U'\uAB95'}, {1291 ,U'\uAB96'}, {1292 ,U'\uAB97'}, {1293 ,U'\uAB98'}, {1294 ,U'\uAB99'}, {1295 ,U'\uAB9A'}, {1296 ,U'\uAB9B'}, {1297 ,U'\uAB9C'}, {1298 ,U'\uAB9D'}, {1299 ,U'\uAB9E'}, {1300 ,U'\uAB9F'}, {1301 ,U'\uABA0'}, {1302 ,U'\uABA1'}, {1303 ,U'\uABA2'}, {1304 ,U'\uABA3'}, {1305 ,U'\uABA4'}, - {1306 ,U'\uABA5'}, {1307 ,U'\uABA6'}, {1308 ,U'\uABA7'}, {1309 ,U'\uABA8'}, {1310 ,U'\uABA9'}, {1311 ,U'\uABAA'}, {1312 ,U'\uABAB'}, {1313 ,U'\uABAC'}, {1314 ,U'\uABAD'}, {1315 ,U'\uABAE'}, {1316 ,U'\uABAF'}, {1317 ,U'\uABB0'}, {1318 ,U'\uABB1'}, {1319 ,U'\uABB2'}, {1320 ,U'\uABB3'}, {1321 ,U'\uABB4'}, - {1322 ,U'\uABB5'}, {1323 ,U'\uABB6'}, {1324 ,U'\uABB7'}, {1325 ,U'\uABB8'}, {1326 ,U'\uABB9'}, {1327 ,U'\uABBA'}, {1328 ,U'\uABBB'}, {1329 ,U'\uABBC'}, {1330 ,U'\uABBD'}, {1331 ,U'\uABBE'}, {1332 ,U'\uABBF'}, {1333 ,U'\uFB00'}, {1335 ,U'\uFB01'}, {1337 ,U'\uFB02'}, {1339 ,U'\uFB03'}, {1342 ,U'\uFB04'}, - {1345 ,U'\uFB05'}, {1347 ,U'\uFB06'}, {1349 ,U'\uFB13'}, {1351 ,U'\uFB14'}, {1353 ,U'\uFB15'}, {1355 ,U'\uFB16'}, {1357 ,U'\uFB17'}, {1359 ,U'\uFF21'}, {1360 ,U'\uFF22'}, {1361 ,U'\uFF23'}, {1362 ,U'\uFF24'}, {1363 ,U'\uFF25'}, {1364 ,U'\uFF26'}, {1365 ,U'\uFF27'}, {1366 ,U'\uFF28'}, {1367 ,U'\uFF29'}, - {1368 ,U'\uFF2A'}, {1369 ,U'\uFF2B'}, {1370 ,U'\uFF2C'}, {1371 ,U'\uFF2D'}, {1372 ,U'\uFF2E'}, {1373 ,U'\uFF2F'}, {1374 ,U'\uFF30'}, {1375 ,U'\uFF31'}, {1376 ,U'\uFF32'}, {1377 ,U'\uFF33'}, {1378 ,U'\uFF34'}, {1379 ,U'\uFF35'}, {1380 ,U'\uFF36'}, {1381 ,U'\uFF37'}, {1382 ,U'\uFF38'}, {1383 ,U'\uFF39'}, - {1384 ,U'\uFF3A'}, {1385 ,U'\U00010400'}, {1387 ,U'\U00010401'}, {1389 ,U'\U00010402'}, {1391 ,U'\U00010403'}, {1393 ,U'\U00010404'}, {1395 ,U'\U00010405'}, {1397 ,U'\U00010406'}, {1399 ,U'\U00010407'}, {1401 ,U'\U00010408'}, {1403 ,U'\U00010409'}, {1405 ,U'\U0001040A'}, {1407 ,U'\U0001040B'}, {1409 ,U'\U0001040C'}, {1411 ,U'\U0001040D'}, {1413 ,U'\U0001040E'}, - {1415 ,U'\U0001040F'}, {1417 ,U'\U00010410'}, {1419 ,U'\U00010411'}, {1421 ,U'\U00010412'}, {1423 ,U'\U00010413'}, {1425 ,U'\U00010414'}, {1427 ,U'\U00010415'}, {1429 ,U'\U00010416'}, {1431 ,U'\U00010417'}, {1433 ,U'\U00010418'}, {1435 ,U'\U00010419'}, {1437 ,U'\U0001041A'}, {1439 ,U'\U0001041B'}, {1441 ,U'\U0001041C'}, {1443 ,U'\U0001041D'}, {1445 ,U'\U0001041E'}, - {1447 ,U'\U0001041F'}, {1449 ,U'\U00010420'}, {1451 ,U'\U00010421'}, {1453 ,U'\U00010422'}, {1455 ,U'\U00010423'}, {1457 ,U'\U00010424'}, {1459 ,U'\U00010425'}, {1461 ,U'\U00010426'}, {1463 ,U'\U00010427'}, {1465 ,U'\U000104B0'}, {1467 ,U'\U000104B1'}, {1469 ,U'\U000104B2'}, {1471 ,U'\U000104B3'}, {1473 ,U'\U000104B4'}, {1475 ,U'\U000104B5'}, {1477 ,U'\U000104B6'}, - {1479 ,U'\U000104B7'}, {1481 ,U'\U000104B8'}, {1483 ,U'\U000104B9'}, {1485 ,U'\U000104BA'}, {1487 ,U'\U000104BB'}, {1489 ,U'\U000104BC'}, {1491 ,U'\U000104BD'}, {1493 ,U'\U000104BE'}, {1495 ,U'\U000104BF'}, {1497 ,U'\U000104C0'}, {1499 ,U'\U000104C1'}, {1501 ,U'\U000104C2'}, {1503 ,U'\U000104C3'}, {1505 ,U'\U000104C4'}, {1507 ,U'\U000104C5'}, {1509 ,U'\U000104C6'}, - {1511 ,U'\U000104C7'}, {1513 ,U'\U000104C8'}, {1515 ,U'\U000104C9'}, {1517 ,U'\U000104CA'}, {1519 ,U'\U000104CB'}, {1521 ,U'\U000104CC'}, {1523 ,U'\U000104CD'}, {1525 ,U'\U000104CE'}, {1527 ,U'\U000104CF'}, {1529 ,U'\U000104D0'}, {1531 ,U'\U000104D1'}, {1533 ,U'\U000104D2'}, {1535 ,U'\U000104D3'}, {1537 ,U'\U00010C80'}, {1539 ,U'\U00010C81'}, {1541 ,U'\U00010C82'}, - {1543 ,U'\U00010C83'}, {1545 ,U'\U00010C84'}, {1547 ,U'\U00010C85'}, {1549 ,U'\U00010C86'}, {1551 ,U'\U00010C87'}, {1553 ,U'\U00010C88'}, {1555 ,U'\U00010C89'}, {1557 ,U'\U00010C8A'}, {1559 ,U'\U00010C8B'}, {1561 ,U'\U00010C8C'}, {1563 ,U'\U00010C8D'}, {1565 ,U'\U00010C8E'}, {1567 ,U'\U00010C8F'}, {1569 ,U'\U00010C90'}, {1571 ,U'\U00010C91'}, {1573 ,U'\U00010C92'}, - {1575 ,U'\U00010C93'}, {1577 ,U'\U00010C94'}, {1579 ,U'\U00010C95'}, {1581 ,U'\U00010C96'}, {1583 ,U'\U00010C97'}, {1585 ,U'\U00010C98'}, {1587 ,U'\U00010C99'}, {1589 ,U'\U00010C9A'}, {1591 ,U'\U00010C9B'}, {1593 ,U'\U00010C9C'}, {1595 ,U'\U00010C9D'}, {1597 ,U'\U00010C9E'}, {1599 ,U'\U00010C9F'}, {1601 ,U'\U00010CA0'}, {1603 ,U'\U00010CA1'}, {1605 ,U'\U00010CA2'}, - {1607 ,U'\U00010CA3'}, {1609 ,U'\U00010CA4'}, {1611 ,U'\U00010CA5'}, {1613 ,U'\U00010CA6'}, {1615 ,U'\U00010CA7'}, {1617 ,U'\U00010CA8'}, {1619 ,U'\U00010CA9'}, {1621 ,U'\U00010CAA'}, {1623 ,U'\U00010CAB'}, {1625 ,U'\U00010CAC'}, {1627 ,U'\U00010CAD'}, {1629 ,U'\U00010CAE'}, {1631 ,U'\U00010CAF'}, {1633 ,U'\U00010CB0'}, {1635 ,U'\U00010CB1'}, {1637 ,U'\U00010CB2'}, - {1639 ,U'\U000118A0'}, {1641 ,U'\U000118A1'}, {1643 ,U'\U000118A2'}, {1645 ,U'\U000118A3'}, {1647 ,U'\U000118A4'}, {1649 ,U'\U000118A5'}, {1651 ,U'\U000118A6'}, {1653 ,U'\U000118A7'}, {1655 ,U'\U000118A8'}, {1657 ,U'\U000118A9'}, {1659 ,U'\U000118AA'}, {1661 ,U'\U000118AB'}, {1663 ,U'\U000118AC'}, {1665 ,U'\U000118AD'}, {1667 ,U'\U000118AE'}, {1669 ,U'\U000118AF'}, - {1671 ,U'\U000118B0'}, {1673 ,U'\U000118B1'}, {1675 ,U'\U000118B2'}, {1677 ,U'\U000118B3'}, {1679 ,U'\U000118B4'}, {1681 ,U'\U000118B5'}, {1683 ,U'\U000118B6'}, {1685 ,U'\U000118B7'}, {1687 ,U'\U000118B8'}, {1689 ,U'\U000118B9'}, {1691 ,U'\U000118BA'}, {1693 ,U'\U000118BB'}, {1695 ,U'\U000118BC'}, {1697 ,U'\U000118BD'}, {1699 ,U'\U000118BE'}, {1701 ,U'\U000118BF'}, - {1703 ,U'\U00016E40'}, {1705 ,U'\U00016E41'}, {1707 ,U'\U00016E42'}, {1709 ,U'\U00016E43'}, {1711 ,U'\U00016E44'}, {1713 ,U'\U00016E45'}, {1715 ,U'\U00016E46'}, {1717 ,U'\U00016E47'}, {1719 ,U'\U00016E48'}, {1721 ,U'\U00016E49'}, {1723 ,U'\U00016E4A'}, {1725 ,U'\U00016E4B'}, {1727 ,U'\U00016E4C'}, {1729 ,U'\U00016E4D'}, {1731 ,U'\U00016E4E'}, {1733 ,U'\U00016E4F'}, - {1735 ,U'\U00016E50'}, {1737 ,U'\U00016E51'}, {1739 ,U'\U00016E52'}, {1741 ,U'\U00016E53'}, {1743 ,U'\U00016E54'}, {1745 ,U'\U00016E55'}, {1747 ,U'\U00016E56'}, {1749 ,U'\U00016E57'}, {1751 ,U'\U00016E58'}, {1753 ,U'\U00016E59'}, {1755 ,U'\U00016E5A'}, {1757 ,U'\U00016E5B'}, {1759 ,U'\U00016E5C'}, {1761 ,U'\U00016E5D'}, {1763 ,U'\U00016E5E'}, {1765 ,U'\U00016E5F'}, - {1767 ,U'\U0001E900'}, {1769 ,U'\U0001E901'}, {1771 ,U'\U0001E902'}, {1773 ,U'\U0001E903'}, {1775 ,U'\U0001E904'}, {1777 ,U'\U0001E905'}, {1779 ,U'\U0001E906'}, {1781 ,U'\U0001E907'}, {1783 ,U'\U0001E908'}, {1785 ,U'\U0001E909'}, {1787 ,U'\U0001E90A'}, {1789 ,U'\U0001E90B'}, {1791 ,U'\U0001E90C'}, {1793 ,U'\U0001E90D'}, {1795 ,U'\U0001E90E'}, {1797 ,U'\U0001E90F'}, - {1799 ,U'\U0001E910'}, {1801 ,U'\U0001E911'}, {1803 ,U'\U0001E912'}, {1805 ,U'\U0001E913'}, {1807 ,U'\U0001E914'}, {1809 ,U'\U0001E915'}, {1811 ,U'\U0001E916'}, {1813 ,U'\U0001E917'}, {1815 ,U'\U0001E918'}, {1817 ,U'\U0001E919'}, {1819 ,U'\U0001E91A'}, {1821 ,U'\U0001E91B'}, {1823 ,U'\U0001E91C'}, {1825 ,U'\U0001E91D'}, {1827 ,U'\U0001E91E'}, {1829 ,U'\U0001E91F'}, - {1831 ,U'\U0001E920'}, {1833 ,U'\U0001E921'}, {1835 , 0} + {537 ,U'\u13FA'}, {538 ,U'\u13FB'}, {539 ,U'\u13FC'}, {540 ,U'\u13FD'}, {541 ,U'\u1C80'}, {542 ,U'\u1C81'}, {543 ,U'\u1C82'}, {544 ,U'\u1C83'}, {545 ,U'\u1C84'}, {546 ,U'\u1C85'}, {547 ,U'\u1C86'}, {548 ,U'\u1C87'}, {549 ,U'\u1C88'}, {550 ,U'\u1C89'}, {551 ,U'\u1C90'}, {552 ,U'\u1C91'}, + {553 ,U'\u1C92'}, {554 ,U'\u1C93'}, {555 ,U'\u1C94'}, {556 ,U'\u1C95'}, {557 ,U'\u1C96'}, {558 ,U'\u1C97'}, {559 ,U'\u1C98'}, {560 ,U'\u1C99'}, {561 ,U'\u1C9A'}, {562 ,U'\u1C9B'}, {563 ,U'\u1C9C'}, {564 ,U'\u1C9D'}, {565 ,U'\u1C9E'}, {566 ,U'\u1C9F'}, {567 ,U'\u1CA0'}, {568 ,U'\u1CA1'}, + {569 ,U'\u1CA2'}, {570 ,U'\u1CA3'}, {571 ,U'\u1CA4'}, {572 ,U'\u1CA5'}, {573 ,U'\u1CA6'}, {574 ,U'\u1CA7'}, {575 ,U'\u1CA8'}, {576 ,U'\u1CA9'}, {577 ,U'\u1CAA'}, {578 ,U'\u1CAB'}, {579 ,U'\u1CAC'}, {580 ,U'\u1CAD'}, {581 ,U'\u1CAE'}, {582 ,U'\u1CAF'}, {583 ,U'\u1CB0'}, {584 ,U'\u1CB1'}, + {585 ,U'\u1CB2'}, {586 ,U'\u1CB3'}, {587 ,U'\u1CB4'}, {588 ,U'\u1CB5'}, {589 ,U'\u1CB6'}, {590 ,U'\u1CB7'}, {591 ,U'\u1CB8'}, {592 ,U'\u1CB9'}, {593 ,U'\u1CBA'}, {594 ,U'\u1CBD'}, {595 ,U'\u1CBE'}, {596 ,U'\u1CBF'}, {597 ,U'\u1E00'}, {598 ,U'\u1E02'}, {599 ,U'\u1E04'}, {600 ,U'\u1E06'}, + {601 ,U'\u1E08'}, {602 ,U'\u1E0A'}, {603 ,U'\u1E0C'}, {604 ,U'\u1E0E'}, {605 ,U'\u1E10'}, {606 ,U'\u1E12'}, {607 ,U'\u1E14'}, {608 ,U'\u1E16'}, {609 ,U'\u1E18'}, {610 ,U'\u1E1A'}, {611 ,U'\u1E1C'}, {612 ,U'\u1E1E'}, {613 ,U'\u1E20'}, {614 ,U'\u1E22'}, {615 ,U'\u1E24'}, {616 ,U'\u1E26'}, + {617 ,U'\u1E28'}, {618 ,U'\u1E2A'}, {619 ,U'\u1E2C'}, {620 ,U'\u1E2E'}, {621 ,U'\u1E30'}, {622 ,U'\u1E32'}, {623 ,U'\u1E34'}, {624 ,U'\u1E36'}, {625 ,U'\u1E38'}, {626 ,U'\u1E3A'}, {627 ,U'\u1E3C'}, {628 ,U'\u1E3E'}, {629 ,U'\u1E40'}, {630 ,U'\u1E42'}, {631 ,U'\u1E44'}, {632 ,U'\u1E46'}, + {633 ,U'\u1E48'}, {634 ,U'\u1E4A'}, {635 ,U'\u1E4C'}, {636 ,U'\u1E4E'}, {637 ,U'\u1E50'}, {638 ,U'\u1E52'}, {639 ,U'\u1E54'}, {640 ,U'\u1E56'}, {641 ,U'\u1E58'}, {642 ,U'\u1E5A'}, {643 ,U'\u1E5C'}, {644 ,U'\u1E5E'}, {645 ,U'\u1E60'}, {646 ,U'\u1E62'}, {647 ,U'\u1E64'}, {648 ,U'\u1E66'}, + {649 ,U'\u1E68'}, {650 ,U'\u1E6A'}, {651 ,U'\u1E6C'}, {652 ,U'\u1E6E'}, {653 ,U'\u1E70'}, {654 ,U'\u1E72'}, {655 ,U'\u1E74'}, {656 ,U'\u1E76'}, {657 ,U'\u1E78'}, {658 ,U'\u1E7A'}, {659 ,U'\u1E7C'}, {660 ,U'\u1E7E'}, {661 ,U'\u1E80'}, {662 ,U'\u1E82'}, {663 ,U'\u1E84'}, {664 ,U'\u1E86'}, + {665 ,U'\u1E88'}, {666 ,U'\u1E8A'}, {667 ,U'\u1E8C'}, {668 ,U'\u1E8E'}, {669 ,U'\u1E90'}, {670 ,U'\u1E92'}, {671 ,U'\u1E94'}, {672 ,U'\u1E96'}, {674 ,U'\u1E97'}, {676 ,U'\u1E98'}, {678 ,U'\u1E99'}, {680 ,U'\u1E9A'}, {682 ,U'\u1E9B'}, {683 ,U'\u1E9E'}, {685 ,U'\u1EA0'}, {686 ,U'\u1EA2'}, + {687 ,U'\u1EA4'}, {688 ,U'\u1EA6'}, {689 ,U'\u1EA8'}, {690 ,U'\u1EAA'}, {691 ,U'\u1EAC'}, {692 ,U'\u1EAE'}, {693 ,U'\u1EB0'}, {694 ,U'\u1EB2'}, {695 ,U'\u1EB4'}, {696 ,U'\u1EB6'}, {697 ,U'\u1EB8'}, {698 ,U'\u1EBA'}, {699 ,U'\u1EBC'}, {700 ,U'\u1EBE'}, {701 ,U'\u1EC0'}, {702 ,U'\u1EC2'}, + {703 ,U'\u1EC4'}, {704 ,U'\u1EC6'}, {705 ,U'\u1EC8'}, {706 ,U'\u1ECA'}, {707 ,U'\u1ECC'}, {708 ,U'\u1ECE'}, {709 ,U'\u1ED0'}, {710 ,U'\u1ED2'}, {711 ,U'\u1ED4'}, {712 ,U'\u1ED6'}, {713 ,U'\u1ED8'}, {714 ,U'\u1EDA'}, {715 ,U'\u1EDC'}, {716 ,U'\u1EDE'}, {717 ,U'\u1EE0'}, {718 ,U'\u1EE2'}, + {719 ,U'\u1EE4'}, {720 ,U'\u1EE6'}, {721 ,U'\u1EE8'}, {722 ,U'\u1EEA'}, {723 ,U'\u1EEC'}, {724 ,U'\u1EEE'}, {725 ,U'\u1EF0'}, {726 ,U'\u1EF2'}, {727 ,U'\u1EF4'}, {728 ,U'\u1EF6'}, {729 ,U'\u1EF8'}, {730 ,U'\u1EFA'}, {731 ,U'\u1EFC'}, {732 ,U'\u1EFE'}, {733 ,U'\u1F08'}, {734 ,U'\u1F09'}, + {735 ,U'\u1F0A'}, {736 ,U'\u1F0B'}, {737 ,U'\u1F0C'}, {738 ,U'\u1F0D'}, {739 ,U'\u1F0E'}, {740 ,U'\u1F0F'}, {741 ,U'\u1F18'}, {742 ,U'\u1F19'}, {743 ,U'\u1F1A'}, {744 ,U'\u1F1B'}, {745 ,U'\u1F1C'}, {746 ,U'\u1F1D'}, {747 ,U'\u1F28'}, {748 ,U'\u1F29'}, {749 ,U'\u1F2A'}, {750 ,U'\u1F2B'}, + {751 ,U'\u1F2C'}, {752 ,U'\u1F2D'}, {753 ,U'\u1F2E'}, {754 ,U'\u1F2F'}, {755 ,U'\u1F38'}, {756 ,U'\u1F39'}, {757 ,U'\u1F3A'}, {758 ,U'\u1F3B'}, {759 ,U'\u1F3C'}, {760 ,U'\u1F3D'}, {761 ,U'\u1F3E'}, {762 ,U'\u1F3F'}, {763 ,U'\u1F48'}, {764 ,U'\u1F49'}, {765 ,U'\u1F4A'}, {766 ,U'\u1F4B'}, + {767 ,U'\u1F4C'}, {768 ,U'\u1F4D'}, {769 ,U'\u1F50'}, {771 ,U'\u1F52'}, {774 ,U'\u1F54'}, {777 ,U'\u1F56'}, {780 ,U'\u1F59'}, {781 ,U'\u1F5B'}, {782 ,U'\u1F5D'}, {783 ,U'\u1F5F'}, {784 ,U'\u1F68'}, {785 ,U'\u1F69'}, {786 ,U'\u1F6A'}, {787 ,U'\u1F6B'}, {788 ,U'\u1F6C'}, {789 ,U'\u1F6D'}, + {790 ,U'\u1F6E'}, {791 ,U'\u1F6F'}, {792 ,U'\u1F80'}, {794 ,U'\u1F81'}, {796 ,U'\u1F82'}, {798 ,U'\u1F83'}, {800 ,U'\u1F84'}, {802 ,U'\u1F85'}, {804 ,U'\u1F86'}, {806 ,U'\u1F87'}, {808 ,U'\u1F88'}, {810 ,U'\u1F89'}, {812 ,U'\u1F8A'}, {814 ,U'\u1F8B'}, {816 ,U'\u1F8C'}, {818 ,U'\u1F8D'}, + {820 ,U'\u1F8E'}, {822 ,U'\u1F8F'}, {824 ,U'\u1F90'}, {826 ,U'\u1F91'}, {828 ,U'\u1F92'}, {830 ,U'\u1F93'}, {832 ,U'\u1F94'}, {834 ,U'\u1F95'}, {836 ,U'\u1F96'}, {838 ,U'\u1F97'}, {840 ,U'\u1F98'}, {842 ,U'\u1F99'}, {844 ,U'\u1F9A'}, {846 ,U'\u1F9B'}, {848 ,U'\u1F9C'}, {850 ,U'\u1F9D'}, + {852 ,U'\u1F9E'}, {854 ,U'\u1F9F'}, {856 ,U'\u1FA0'}, {858 ,U'\u1FA1'}, {860 ,U'\u1FA2'}, {862 ,U'\u1FA3'}, {864 ,U'\u1FA4'}, {866 ,U'\u1FA5'}, {868 ,U'\u1FA6'}, {870 ,U'\u1FA7'}, {872 ,U'\u1FA8'}, {874 ,U'\u1FA9'}, {876 ,U'\u1FAA'}, {878 ,U'\u1FAB'}, {880 ,U'\u1FAC'}, {882 ,U'\u1FAD'}, + {884 ,U'\u1FAE'}, {886 ,U'\u1FAF'}, {888 ,U'\u1FB2'}, {890 ,U'\u1FB3'}, {892 ,U'\u1FB4'}, {894 ,U'\u1FB6'}, {896 ,U'\u1FB7'}, {899 ,U'\u1FB8'}, {900 ,U'\u1FB9'}, {901 ,U'\u1FBA'}, {902 ,U'\u1FBB'}, {903 ,U'\u1FBC'}, {905 ,U'\u1FBE'}, {906 ,U'\u1FC2'}, {908 ,U'\u1FC3'}, {910 ,U'\u1FC4'}, + {912 ,U'\u1FC6'}, {914 ,U'\u1FC7'}, {917 ,U'\u1FC8'}, {918 ,U'\u1FC9'}, {919 ,U'\u1FCA'}, {920 ,U'\u1FCB'}, {921 ,U'\u1FCC'}, {923 ,U'\u1FD2'}, {926 ,U'\u1FD3'}, {929 ,U'\u1FD6'}, {931 ,U'\u1FD7'}, {934 ,U'\u1FD8'}, {935 ,U'\u1FD9'}, {936 ,U'\u1FDA'}, {937 ,U'\u1FDB'}, {938 ,U'\u1FE2'}, + {941 ,U'\u1FE3'}, {944 ,U'\u1FE4'}, {946 ,U'\u1FE6'}, {948 ,U'\u1FE7'}, {951 ,U'\u1FE8'}, {952 ,U'\u1FE9'}, {953 ,U'\u1FEA'}, {954 ,U'\u1FEB'}, {955 ,U'\u1FEC'}, {956 ,U'\u1FF2'}, {958 ,U'\u1FF3'}, {960 ,U'\u1FF4'}, {962 ,U'\u1FF6'}, {964 ,U'\u1FF7'}, {967 ,U'\u1FF8'}, {968 ,U'\u1FF9'}, + {969 ,U'\u1FFA'}, {970 ,U'\u1FFB'}, {971 ,U'\u1FFC'}, {973 ,U'\u2126'}, {974 ,U'\u212A'}, {975 ,U'\u212B'}, {976 ,U'\u2132'}, {977 ,U'\u2160'}, {978 ,U'\u2161'}, {979 ,U'\u2162'}, {980 ,U'\u2163'}, {981 ,U'\u2164'}, {982 ,U'\u2165'}, {983 ,U'\u2166'}, {984 ,U'\u2167'}, {985 ,U'\u2168'}, + {986 ,U'\u2169'}, {987 ,U'\u216A'}, {988 ,U'\u216B'}, {989 ,U'\u216C'}, {990 ,U'\u216D'}, {991 ,U'\u216E'}, {992 ,U'\u216F'}, {993 ,U'\u2183'}, {994 ,U'\u24B6'}, {995 ,U'\u24B7'}, {996 ,U'\u24B8'}, {997 ,U'\u24B9'}, {998 ,U'\u24BA'}, {999 ,U'\u24BB'}, {1000 ,U'\u24BC'}, {1001 ,U'\u24BD'}, + {1002 ,U'\u24BE'}, {1003 ,U'\u24BF'}, {1004 ,U'\u24C0'}, {1005 ,U'\u24C1'}, {1006 ,U'\u24C2'}, {1007 ,U'\u24C3'}, {1008 ,U'\u24C4'}, {1009 ,U'\u24C5'}, {1010 ,U'\u24C6'}, {1011 ,U'\u24C7'}, {1012 ,U'\u24C8'}, {1013 ,U'\u24C9'}, {1014 ,U'\u24CA'}, {1015 ,U'\u24CB'}, {1016 ,U'\u24CC'}, {1017 ,U'\u24CD'}, + {1018 ,U'\u24CE'}, {1019 ,U'\u24CF'}, {1020 ,U'\u2C00'}, {1021 ,U'\u2C01'}, {1022 ,U'\u2C02'}, {1023 ,U'\u2C03'}, {1024 ,U'\u2C04'}, {1025 ,U'\u2C05'}, {1026 ,U'\u2C06'}, {1027 ,U'\u2C07'}, {1028 ,U'\u2C08'}, {1029 ,U'\u2C09'}, {1030 ,U'\u2C0A'}, {1031 ,U'\u2C0B'}, {1032 ,U'\u2C0C'}, {1033 ,U'\u2C0D'}, + {1034 ,U'\u2C0E'}, {1035 ,U'\u2C0F'}, {1036 ,U'\u2C10'}, {1037 ,U'\u2C11'}, {1038 ,U'\u2C12'}, {1039 ,U'\u2C13'}, {1040 ,U'\u2C14'}, {1041 ,U'\u2C15'}, {1042 ,U'\u2C16'}, {1043 ,U'\u2C17'}, {1044 ,U'\u2C18'}, {1045 ,U'\u2C19'}, {1046 ,U'\u2C1A'}, {1047 ,U'\u2C1B'}, {1048 ,U'\u2C1C'}, {1049 ,U'\u2C1D'}, + {1050 ,U'\u2C1E'}, {1051 ,U'\u2C1F'}, {1052 ,U'\u2C20'}, {1053 ,U'\u2C21'}, {1054 ,U'\u2C22'}, {1055 ,U'\u2C23'}, {1056 ,U'\u2C24'}, {1057 ,U'\u2C25'}, {1058 ,U'\u2C26'}, {1059 ,U'\u2C27'}, {1060 ,U'\u2C28'}, {1061 ,U'\u2C29'}, {1062 ,U'\u2C2A'}, {1063 ,U'\u2C2B'}, {1064 ,U'\u2C2C'}, {1065 ,U'\u2C2D'}, + {1066 ,U'\u2C2E'}, {1067 ,U'\u2C2F'}, {1068 ,U'\u2C60'}, {1069 ,U'\u2C62'}, {1070 ,U'\u2C63'}, {1071 ,U'\u2C64'}, {1072 ,U'\u2C67'}, {1073 ,U'\u2C69'}, {1074 ,U'\u2C6B'}, {1075 ,U'\u2C6D'}, {1076 ,U'\u2C6E'}, {1077 ,U'\u2C6F'}, {1078 ,U'\u2C70'}, {1079 ,U'\u2C72'}, {1080 ,U'\u2C75'}, {1081 ,U'\u2C7E'}, + {1082 ,U'\u2C7F'}, {1083 ,U'\u2C80'}, {1084 ,U'\u2C82'}, {1085 ,U'\u2C84'}, {1086 ,U'\u2C86'}, {1087 ,U'\u2C88'}, {1088 ,U'\u2C8A'}, {1089 ,U'\u2C8C'}, {1090 ,U'\u2C8E'}, {1091 ,U'\u2C90'}, {1092 ,U'\u2C92'}, {1093 ,U'\u2C94'}, {1094 ,U'\u2C96'}, {1095 ,U'\u2C98'}, {1096 ,U'\u2C9A'}, {1097 ,U'\u2C9C'}, + {1098 ,U'\u2C9E'}, {1099 ,U'\u2CA0'}, {1100 ,U'\u2CA2'}, {1101 ,U'\u2CA4'}, {1102 ,U'\u2CA6'}, {1103 ,U'\u2CA8'}, {1104 ,U'\u2CAA'}, {1105 ,U'\u2CAC'}, {1106 ,U'\u2CAE'}, {1107 ,U'\u2CB0'}, {1108 ,U'\u2CB2'}, {1109 ,U'\u2CB4'}, {1110 ,U'\u2CB6'}, {1111 ,U'\u2CB8'}, {1112 ,U'\u2CBA'}, {1113 ,U'\u2CBC'}, + {1114 ,U'\u2CBE'}, {1115 ,U'\u2CC0'}, {1116 ,U'\u2CC2'}, {1117 ,U'\u2CC4'}, {1118 ,U'\u2CC6'}, {1119 ,U'\u2CC8'}, {1120 ,U'\u2CCA'}, {1121 ,U'\u2CCC'}, {1122 ,U'\u2CCE'}, {1123 ,U'\u2CD0'}, {1124 ,U'\u2CD2'}, {1125 ,U'\u2CD4'}, {1126 ,U'\u2CD6'}, {1127 ,U'\u2CD8'}, {1128 ,U'\u2CDA'}, {1129 ,U'\u2CDC'}, + {1130 ,U'\u2CDE'}, {1131 ,U'\u2CE0'}, {1132 ,U'\u2CE2'}, {1133 ,U'\u2CEB'}, {1134 ,U'\u2CED'}, {1135 ,U'\u2CF2'}, {1136 ,U'\uA640'}, {1137 ,U'\uA642'}, {1138 ,U'\uA644'}, {1139 ,U'\uA646'}, {1140 ,U'\uA648'}, {1141 ,U'\uA64A'}, {1142 ,U'\uA64C'}, {1143 ,U'\uA64E'}, {1144 ,U'\uA650'}, {1145 ,U'\uA652'}, + {1146 ,U'\uA654'}, {1147 ,U'\uA656'}, {1148 ,U'\uA658'}, {1149 ,U'\uA65A'}, {1150 ,U'\uA65C'}, {1151 ,U'\uA65E'}, {1152 ,U'\uA660'}, {1153 ,U'\uA662'}, {1154 ,U'\uA664'}, {1155 ,U'\uA666'}, {1156 ,U'\uA668'}, {1157 ,U'\uA66A'}, {1158 ,U'\uA66C'}, {1159 ,U'\uA680'}, {1160 ,U'\uA682'}, {1161 ,U'\uA684'}, + {1162 ,U'\uA686'}, {1163 ,U'\uA688'}, {1164 ,U'\uA68A'}, {1165 ,U'\uA68C'}, {1166 ,U'\uA68E'}, {1167 ,U'\uA690'}, {1168 ,U'\uA692'}, {1169 ,U'\uA694'}, {1170 ,U'\uA696'}, {1171 ,U'\uA698'}, {1172 ,U'\uA69A'}, {1173 ,U'\uA722'}, {1174 ,U'\uA724'}, {1175 ,U'\uA726'}, {1176 ,U'\uA728'}, {1177 ,U'\uA72A'}, + {1178 ,U'\uA72C'}, {1179 ,U'\uA72E'}, {1180 ,U'\uA732'}, {1181 ,U'\uA734'}, {1182 ,U'\uA736'}, {1183 ,U'\uA738'}, {1184 ,U'\uA73A'}, {1185 ,U'\uA73C'}, {1186 ,U'\uA73E'}, {1187 ,U'\uA740'}, {1188 ,U'\uA742'}, {1189 ,U'\uA744'}, {1190 ,U'\uA746'}, {1191 ,U'\uA748'}, {1192 ,U'\uA74A'}, {1193 ,U'\uA74C'}, + {1194 ,U'\uA74E'}, {1195 ,U'\uA750'}, {1196 ,U'\uA752'}, {1197 ,U'\uA754'}, {1198 ,U'\uA756'}, {1199 ,U'\uA758'}, {1200 ,U'\uA75A'}, {1201 ,U'\uA75C'}, {1202 ,U'\uA75E'}, {1203 ,U'\uA760'}, {1204 ,U'\uA762'}, {1205 ,U'\uA764'}, {1206 ,U'\uA766'}, {1207 ,U'\uA768'}, {1208 ,U'\uA76A'}, {1209 ,U'\uA76C'}, + {1210 ,U'\uA76E'}, {1211 ,U'\uA779'}, {1212 ,U'\uA77B'}, {1213 ,U'\uA77D'}, {1214 ,U'\uA77E'}, {1215 ,U'\uA780'}, {1216 ,U'\uA782'}, {1217 ,U'\uA784'}, {1218 ,U'\uA786'}, {1219 ,U'\uA78B'}, {1220 ,U'\uA78D'}, {1221 ,U'\uA790'}, {1222 ,U'\uA792'}, {1223 ,U'\uA796'}, {1224 ,U'\uA798'}, {1225 ,U'\uA79A'}, + {1226 ,U'\uA79C'}, {1227 ,U'\uA79E'}, {1228 ,U'\uA7A0'}, {1229 ,U'\uA7A2'}, {1230 ,U'\uA7A4'}, {1231 ,U'\uA7A6'}, {1232 ,U'\uA7A8'}, {1233 ,U'\uA7AA'}, {1234 ,U'\uA7AB'}, {1235 ,U'\uA7AC'}, {1236 ,U'\uA7AD'}, {1237 ,U'\uA7AE'}, {1238 ,U'\uA7B0'}, {1239 ,U'\uA7B1'}, {1240 ,U'\uA7B2'}, {1241 ,U'\uA7B3'}, + {1242 ,U'\uA7B4'}, {1243 ,U'\uA7B6'}, {1244 ,U'\uA7B8'}, {1245 ,U'\uA7BA'}, {1246 ,U'\uA7BC'}, {1247 ,U'\uA7BE'}, {1248 ,U'\uA7C0'}, {1249 ,U'\uA7C2'}, {1250 ,U'\uA7C4'}, {1251 ,U'\uA7C5'}, {1252 ,U'\uA7C6'}, {1253 ,U'\uA7C7'}, {1254 ,U'\uA7C9'}, {1255 ,U'\uA7CB'}, {1256 ,U'\uA7CC'}, {1257 ,U'\uA7D0'}, + {1258 ,U'\uA7D6'}, {1259 ,U'\uA7D8'}, {1260 ,U'\uA7DA'}, {1261 ,U'\uA7DC'}, {1262 ,U'\uA7F5'}, {1263 ,U'\uAB70'}, {1264 ,U'\uAB71'}, {1265 ,U'\uAB72'}, {1266 ,U'\uAB73'}, {1267 ,U'\uAB74'}, {1268 ,U'\uAB75'}, {1269 ,U'\uAB76'}, {1270 ,U'\uAB77'}, {1271 ,U'\uAB78'}, {1272 ,U'\uAB79'}, {1273 ,U'\uAB7A'}, + {1274 ,U'\uAB7B'}, {1275 ,U'\uAB7C'}, {1276 ,U'\uAB7D'}, {1277 ,U'\uAB7E'}, {1278 ,U'\uAB7F'}, {1279 ,U'\uAB80'}, {1280 ,U'\uAB81'}, {1281 ,U'\uAB82'}, {1282 ,U'\uAB83'}, {1283 ,U'\uAB84'}, {1284 ,U'\uAB85'}, {1285 ,U'\uAB86'}, {1286 ,U'\uAB87'}, {1287 ,U'\uAB88'}, {1288 ,U'\uAB89'}, {1289 ,U'\uAB8A'}, + {1290 ,U'\uAB8B'}, {1291 ,U'\uAB8C'}, {1292 ,U'\uAB8D'}, {1293 ,U'\uAB8E'}, {1294 ,U'\uAB8F'}, {1295 ,U'\uAB90'}, {1296 ,U'\uAB91'}, {1297 ,U'\uAB92'}, {1298 ,U'\uAB93'}, {1299 ,U'\uAB94'}, {1300 ,U'\uAB95'}, {1301 ,U'\uAB96'}, {1302 ,U'\uAB97'}, {1303 ,U'\uAB98'}, {1304 ,U'\uAB99'}, {1305 ,U'\uAB9A'}, + {1306 ,U'\uAB9B'}, {1307 ,U'\uAB9C'}, {1308 ,U'\uAB9D'}, {1309 ,U'\uAB9E'}, {1310 ,U'\uAB9F'}, {1311 ,U'\uABA0'}, {1312 ,U'\uABA1'}, {1313 ,U'\uABA2'}, {1314 ,U'\uABA3'}, {1315 ,U'\uABA4'}, {1316 ,U'\uABA5'}, {1317 ,U'\uABA6'}, {1318 ,U'\uABA7'}, {1319 ,U'\uABA8'}, {1320 ,U'\uABA9'}, {1321 ,U'\uABAA'}, + {1322 ,U'\uABAB'}, {1323 ,U'\uABAC'}, {1324 ,U'\uABAD'}, {1325 ,U'\uABAE'}, {1326 ,U'\uABAF'}, {1327 ,U'\uABB0'}, {1328 ,U'\uABB1'}, {1329 ,U'\uABB2'}, {1330 ,U'\uABB3'}, {1331 ,U'\uABB4'}, {1332 ,U'\uABB5'}, {1333 ,U'\uABB6'}, {1334 ,U'\uABB7'}, {1335 ,U'\uABB8'}, {1336 ,U'\uABB9'}, {1337 ,U'\uABBA'}, + {1338 ,U'\uABBB'}, {1339 ,U'\uABBC'}, {1340 ,U'\uABBD'}, {1341 ,U'\uABBE'}, {1342 ,U'\uABBF'}, {1343 ,U'\uFB00'}, {1345 ,U'\uFB01'}, {1347 ,U'\uFB02'}, {1349 ,U'\uFB03'}, {1352 ,U'\uFB04'}, {1355 ,U'\uFB05'}, {1357 ,U'\uFB06'}, {1359 ,U'\uFB13'}, {1361 ,U'\uFB14'}, {1363 ,U'\uFB15'}, {1365 ,U'\uFB16'}, + {1367 ,U'\uFB17'}, {1369 ,U'\uFF21'}, {1370 ,U'\uFF22'}, {1371 ,U'\uFF23'}, {1372 ,U'\uFF24'}, {1373 ,U'\uFF25'}, {1374 ,U'\uFF26'}, {1375 ,U'\uFF27'}, {1376 ,U'\uFF28'}, {1377 ,U'\uFF29'}, {1378 ,U'\uFF2A'}, {1379 ,U'\uFF2B'}, {1380 ,U'\uFF2C'}, {1381 ,U'\uFF2D'}, {1382 ,U'\uFF2E'}, {1383 ,U'\uFF2F'}, + {1384 ,U'\uFF30'}, {1385 ,U'\uFF31'}, {1386 ,U'\uFF32'}, {1387 ,U'\uFF33'}, {1388 ,U'\uFF34'}, {1389 ,U'\uFF35'}, {1390 ,U'\uFF36'}, {1391 ,U'\uFF37'}, {1392 ,U'\uFF38'}, {1393 ,U'\uFF39'}, {1394 ,U'\uFF3A'}, {1395 ,U'\U00010400'}, {1397 ,U'\U00010401'}, {1399 ,U'\U00010402'}, {1401 ,U'\U00010403'}, {1403 ,U'\U00010404'}, + {1405 ,U'\U00010405'}, {1407 ,U'\U00010406'}, {1409 ,U'\U00010407'}, {1411 ,U'\U00010408'}, {1413 ,U'\U00010409'}, {1415 ,U'\U0001040A'}, {1417 ,U'\U0001040B'}, {1419 ,U'\U0001040C'}, {1421 ,U'\U0001040D'}, {1423 ,U'\U0001040E'}, {1425 ,U'\U0001040F'}, {1427 ,U'\U00010410'}, {1429 ,U'\U00010411'}, {1431 ,U'\U00010412'}, {1433 ,U'\U00010413'}, {1435 ,U'\U00010414'}, + {1437 ,U'\U00010415'}, {1439 ,U'\U00010416'}, {1441 ,U'\U00010417'}, {1443 ,U'\U00010418'}, {1445 ,U'\U00010419'}, {1447 ,U'\U0001041A'}, {1449 ,U'\U0001041B'}, {1451 ,U'\U0001041C'}, {1453 ,U'\U0001041D'}, {1455 ,U'\U0001041E'}, {1457 ,U'\U0001041F'}, {1459 ,U'\U00010420'}, {1461 ,U'\U00010421'}, {1463 ,U'\U00010422'}, {1465 ,U'\U00010423'}, {1467 ,U'\U00010424'}, + {1469 ,U'\U00010425'}, {1471 ,U'\U00010426'}, {1473 ,U'\U00010427'}, {1475 ,U'\U000104B0'}, {1477 ,U'\U000104B1'}, {1479 ,U'\U000104B2'}, {1481 ,U'\U000104B3'}, {1483 ,U'\U000104B4'}, {1485 ,U'\U000104B5'}, {1487 ,U'\U000104B6'}, {1489 ,U'\U000104B7'}, {1491 ,U'\U000104B8'}, {1493 ,U'\U000104B9'}, {1495 ,U'\U000104BA'}, {1497 ,U'\U000104BB'}, {1499 ,U'\U000104BC'}, + {1501 ,U'\U000104BD'}, {1503 ,U'\U000104BE'}, {1505 ,U'\U000104BF'}, {1507 ,U'\U000104C0'}, {1509 ,U'\U000104C1'}, {1511 ,U'\U000104C2'}, {1513 ,U'\U000104C3'}, {1515 ,U'\U000104C4'}, {1517 ,U'\U000104C5'}, {1519 ,U'\U000104C6'}, {1521 ,U'\U000104C7'}, {1523 ,U'\U000104C8'}, {1525 ,U'\U000104C9'}, {1527 ,U'\U000104CA'}, {1529 ,U'\U000104CB'}, {1531 ,U'\U000104CC'}, + {1533 ,U'\U000104CD'}, {1535 ,U'\U000104CE'}, {1537 ,U'\U000104CF'}, {1539 ,U'\U000104D0'}, {1541 ,U'\U000104D1'}, {1543 ,U'\U000104D2'}, {1545 ,U'\U000104D3'}, {1547 ,U'\U00010570'}, {1549 ,U'\U00010571'}, {1551 ,U'\U00010572'}, {1553 ,U'\U00010573'}, {1555 ,U'\U00010574'}, {1557 ,U'\U00010575'}, {1559 ,U'\U00010576'}, {1561 ,U'\U00010577'}, {1563 ,U'\U00010578'}, + {1565 ,U'\U00010579'}, {1567 ,U'\U0001057A'}, {1569 ,U'\U0001057C'}, {1571 ,U'\U0001057D'}, {1573 ,U'\U0001057E'}, {1575 ,U'\U0001057F'}, {1577 ,U'\U00010580'}, {1579 ,U'\U00010581'}, {1581 ,U'\U00010582'}, {1583 ,U'\U00010583'}, {1585 ,U'\U00010584'}, {1587 ,U'\U00010585'}, {1589 ,U'\U00010586'}, {1591 ,U'\U00010587'}, {1593 ,U'\U00010588'}, {1595 ,U'\U00010589'}, + {1597 ,U'\U0001058A'}, {1599 ,U'\U0001058C'}, {1601 ,U'\U0001058D'}, {1603 ,U'\U0001058E'}, {1605 ,U'\U0001058F'}, {1607 ,U'\U00010590'}, {1609 ,U'\U00010591'}, {1611 ,U'\U00010592'}, {1613 ,U'\U00010594'}, {1615 ,U'\U00010595'}, {1617 ,U'\U00010C80'}, {1619 ,U'\U00010C81'}, {1621 ,U'\U00010C82'}, {1623 ,U'\U00010C83'}, {1625 ,U'\U00010C84'}, {1627 ,U'\U00010C85'}, + {1629 ,U'\U00010C86'}, {1631 ,U'\U00010C87'}, {1633 ,U'\U00010C88'}, {1635 ,U'\U00010C89'}, {1637 ,U'\U00010C8A'}, {1639 ,U'\U00010C8B'}, {1641 ,U'\U00010C8C'}, {1643 ,U'\U00010C8D'}, {1645 ,U'\U00010C8E'}, {1647 ,U'\U00010C8F'}, {1649 ,U'\U00010C90'}, {1651 ,U'\U00010C91'}, {1653 ,U'\U00010C92'}, {1655 ,U'\U00010C93'}, {1657 ,U'\U00010C94'}, {1659 ,U'\U00010C95'}, + {1661 ,U'\U00010C96'}, {1663 ,U'\U00010C97'}, {1665 ,U'\U00010C98'}, {1667 ,U'\U00010C99'}, {1669 ,U'\U00010C9A'}, {1671 ,U'\U00010C9B'}, {1673 ,U'\U00010C9C'}, {1675 ,U'\U00010C9D'}, {1677 ,U'\U00010C9E'}, {1679 ,U'\U00010C9F'}, {1681 ,U'\U00010CA0'}, {1683 ,U'\U00010CA1'}, {1685 ,U'\U00010CA2'}, {1687 ,U'\U00010CA3'}, {1689 ,U'\U00010CA4'}, {1691 ,U'\U00010CA5'}, + {1693 ,U'\U00010CA6'}, {1695 ,U'\U00010CA7'}, {1697 ,U'\U00010CA8'}, {1699 ,U'\U00010CA9'}, {1701 ,U'\U00010CAA'}, {1703 ,U'\U00010CAB'}, {1705 ,U'\U00010CAC'}, {1707 ,U'\U00010CAD'}, {1709 ,U'\U00010CAE'}, {1711 ,U'\U00010CAF'}, {1713 ,U'\U00010CB0'}, {1715 ,U'\U00010CB1'}, {1717 ,U'\U00010CB2'}, {1719 ,U'\U00010D50'}, {1721 ,U'\U00010D51'}, {1723 ,U'\U00010D52'}, + {1725 ,U'\U00010D53'}, {1727 ,U'\U00010D54'}, {1729 ,U'\U00010D55'}, {1731 ,U'\U00010D56'}, {1733 ,U'\U00010D57'}, {1735 ,U'\U00010D58'}, {1737 ,U'\U00010D59'}, {1739 ,U'\U00010D5A'}, {1741 ,U'\U00010D5B'}, {1743 ,U'\U00010D5C'}, {1745 ,U'\U00010D5D'}, {1747 ,U'\U00010D5E'}, {1749 ,U'\U00010D5F'}, {1751 ,U'\U00010D60'}, {1753 ,U'\U00010D61'}, {1755 ,U'\U00010D62'}, + {1757 ,U'\U00010D63'}, {1759 ,U'\U00010D64'}, {1761 ,U'\U00010D65'}, {1763 ,U'\U000118A0'}, {1765 ,U'\U000118A1'}, {1767 ,U'\U000118A2'}, {1769 ,U'\U000118A3'}, {1771 ,U'\U000118A4'}, {1773 ,U'\U000118A5'}, {1775 ,U'\U000118A6'}, {1777 ,U'\U000118A7'}, {1779 ,U'\U000118A8'}, {1781 ,U'\U000118A9'}, {1783 ,U'\U000118AA'}, {1785 ,U'\U000118AB'}, {1787 ,U'\U000118AC'}, + {1789 ,U'\U000118AD'}, {1791 ,U'\U000118AE'}, {1793 ,U'\U000118AF'}, {1795 ,U'\U000118B0'}, {1797 ,U'\U000118B1'}, {1799 ,U'\U000118B2'}, {1801 ,U'\U000118B3'}, {1803 ,U'\U000118B4'}, {1805 ,U'\U000118B5'}, {1807 ,U'\U000118B6'}, {1809 ,U'\U000118B7'}, {1811 ,U'\U000118B8'}, {1813 ,U'\U000118B9'}, {1815 ,U'\U000118BA'}, {1817 ,U'\U000118BB'}, {1819 ,U'\U000118BC'}, + {1821 ,U'\U000118BD'}, {1823 ,U'\U000118BE'}, {1825 ,U'\U000118BF'}, {1827 ,U'\U00016E40'}, {1829 ,U'\U00016E41'}, {1831 ,U'\U00016E42'}, {1833 ,U'\U00016E43'}, {1835 ,U'\U00016E44'}, {1837 ,U'\U00016E45'}, {1839 ,U'\U00016E46'}, {1841 ,U'\U00016E47'}, {1843 ,U'\U00016E48'}, {1845 ,U'\U00016E49'}, {1847 ,U'\U00016E4A'}, {1849 ,U'\U00016E4B'}, {1851 ,U'\U00016E4C'}, + {1853 ,U'\U00016E4D'}, {1855 ,U'\U00016E4E'}, {1857 ,U'\U00016E4F'}, {1859 ,U'\U00016E50'}, {1861 ,U'\U00016E51'}, {1863 ,U'\U00016E52'}, {1865 ,U'\U00016E53'}, {1867 ,U'\U00016E54'}, {1869 ,U'\U00016E55'}, {1871 ,U'\U00016E56'}, {1873 ,U'\U00016E57'}, {1875 ,U'\U00016E58'}, {1877 ,U'\U00016E59'}, {1879 ,U'\U00016E5A'}, {1881 ,U'\U00016E5B'}, {1883 ,U'\U00016E5C'}, + {1885 ,U'\U00016E5D'}, {1887 ,U'\U00016E5E'}, {1889 ,U'\U00016E5F'}, {1891 ,U'\U0001E900'}, {1893 ,U'\U0001E901'}, {1895 ,U'\U0001E902'}, {1897 ,U'\U0001E903'}, {1899 ,U'\U0001E904'}, {1901 ,U'\U0001E905'}, {1903 ,U'\U0001E906'}, {1905 ,U'\U0001E907'}, {1907 ,U'\U0001E908'}, {1909 ,U'\U0001E909'}, {1911 ,U'\U0001E90A'}, {1913 ,U'\U0001E90B'}, {1915 ,U'\U0001E90C'}, + {1917 ,U'\U0001E90D'}, {1919 ,U'\U0001E90E'}, {1921 ,U'\U0001E90F'}, {1923 ,U'\U0001E910'}, {1925 ,U'\U0001E911'}, {1927 ,U'\U0001E912'}, {1929 ,U'\U0001E913'}, {1931 ,U'\U0001E914'}, {1933 ,U'\U0001E915'}, {1935 ,U'\U0001E916'}, {1937 ,U'\U0001E917'}, {1939 ,U'\U0001E918'}, {1941 ,U'\U0001E919'}, {1943 ,U'\U0001E91A'}, {1945 ,U'\U0001E91B'}, {1947 ,U'\U0001E91C'}, + {1949 ,U'\U0001E91D'}, {1951 ,U'\U0001E91E'}, {1953 ,U'\U0001E91F'}, {1955 ,U'\U0001E920'}, {1957 ,U'\U0001E921'}, {1959 , 0} }; - constexpr size_t folding_source_chars_length = 1490; + constexpr size_t folding_source_chars_length = 1557; const char16_t case_folded_chars[] = u"\u0061\u0062\u0063\u0064\u0065\u0066\u0067\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F\u0070" @@ -151,73 +155,77 @@ namespace sysstr::util::unicode u"\u2D01\u2D02\u2D03\u2D04\u2D05\u2D06\u2D07\u2D08\u2D09\u2D0A\u2D0B\u2D0C\u2D0D\u2D0E\u2D0F\u2D10" u"\u2D11\u2D12\u2D13\u2D14\u2D15\u2D16\u2D17\u2D18\u2D19\u2D1A\u2D1B\u2D1C\u2D1D\u2D1E\u2D1F\u2D20" u"\u2D21\u2D22\u2D23\u2D24\u2D25\u2D27\u2D2D\u13F0\u13F1\u13F2\u13F3\u13F4\u13F5\u0432\u0434\u043E" - u"\u0441\u0442\u0442\u044A\u0463\uA64B\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9" - u"\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9" - u"\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u10F7\u10F8\u10F9" - u"\u10FA\u10FD\u10FE\u10FF\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17" - u"\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37" - u"\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57" - u"\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77" - u"\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95\u0068" - u"\u0331\u0074\u0308\u0077\u030A\u0079\u030A\u0061\u02BE\u1E61\u0073\u0073\u1EA1\u1EA3\u1EA5\u1EA7" - u"\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7" - u"\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7" - u"\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF\u1F00\u1F01\u1F02\u1F03" - u"\u1F04\u1F05\u1F06\u1F07\u1F10\u1F11\u1F12\u1F13\u1F14\u1F15\u1F20\u1F21\u1F22\u1F23\u1F24\u1F25" - u"\u1F26\u1F27\u1F30\u1F31\u1F32\u1F33\u1F34\u1F35\u1F36\u1F37\u1F40\u1F41\u1F42\u1F43\u1F44\u1F45" - u"\u03C5\u0313\u03C5\u0313\u0300\u03C5\u0313\u0301\u03C5\u0313\u0342\u1F51\u1F53\u1F55\u1F57\u1F60" - u"\u1F61\u1F62\u1F63\u1F64\u1F65\u1F66\u1F67\u1F00\u03B9\u1F01\u03B9\u1F02\u03B9\u1F03\u03B9\u1F04" - u"\u03B9\u1F05\u03B9\u1F06\u03B9\u1F07\u03B9\u1F00\u03B9\u1F01\u03B9\u1F02\u03B9\u1F03\u03B9\u1F04" - u"\u03B9\u1F05\u03B9\u1F06\u03B9\u1F07\u03B9\u1F20\u03B9\u1F21\u03B9\u1F22\u03B9\u1F23\u03B9\u1F24" - u"\u03B9\u1F25\u03B9\u1F26\u03B9\u1F27\u03B9\u1F20\u03B9\u1F21\u03B9\u1F22\u03B9\u1F23\u03B9\u1F24" - u"\u03B9\u1F25\u03B9\u1F26\u03B9\u1F27\u03B9\u1F60\u03B9\u1F61\u03B9\u1F62\u03B9\u1F63\u03B9\u1F64" - u"\u03B9\u1F65\u03B9\u1F66\u03B9\u1F67\u03B9\u1F60\u03B9\u1F61\u03B9\u1F62\u03B9\u1F63\u03B9\u1F64" - u"\u03B9\u1F65\u03B9\u1F66\u03B9\u1F67\u03B9\u1F70\u03B9\u03B1\u03B9\u03AC\u03B9\u03B1\u0342\u03B1" - u"\u0342\u03B9\u1FB0\u1FB1\u1F70\u1F71\u03B1\u03B9\u03B9\u1F74\u03B9\u03B7\u03B9\u03AE\u03B9\u03B7" - u"\u0342\u03B7\u0342\u03B9\u1F72\u1F73\u1F74\u1F75\u03B7\u03B9\u03B9\u0308\u0300\u03B9\u0308\u0301" - u"\u03B9\u0342\u03B9\u0308\u0342\u1FD0\u1FD1\u1F76\u1F77\u03C5\u0308\u0300\u03C5\u0308\u0301\u03C1" - u"\u0313\u03C5\u0342\u03C5\u0308\u0342\u1FE0\u1FE1\u1F7A\u1F7B\u1FE5\u1F7C\u03B9\u03C9\u03B9\u03CE" - u"\u03B9\u03C9\u0342\u03C9\u0342\u03B9\u1F78\u1F79\u1F7C\u1F7D\u03C9\u03B9\u03C9\u006B\u00E5\u214E" - u"\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179\u217A\u217B\u217C\u217D\u217E\u217F" - u"\u2184\u24D0\u24D1\u24D2\u24D3\u24D4\u24D5\u24D6\u24D7\u24D8\u24D9\u24DA\u24DB\u24DC\u24DD\u24DE" - u"\u24DF\u24E0\u24E1\u24E2\u24E3\u24E4\u24E5\u24E6\u24E7\u24E8\u24E9\u2C30\u2C31\u2C32\u2C33\u2C34" - u"\u2C35\u2C36\u2C37\u2C38\u2C39\u2C3A\u2C3B\u2C3C\u2C3D\u2C3E\u2C3F\u2C40\u2C41\u2C42\u2C43\u2C44" - u"\u2C45\u2C46\u2C47\u2C48\u2C49\u2C4A\u2C4B\u2C4C\u2C4D\u2C4E\u2C4F\u2C50\u2C51\u2C52\u2C53\u2C54" - u"\u2C55\u2C56\u2C57\u2C58\u2C59\u2C5A\u2C5B\u2C5C\u2C5D\u2C5E\u2C61\u026B\u1D7D\u027D\u2C68\u2C6A" - u"\u2C6C\u0251\u0271\u0250\u0252\u2C73\u2C76\u023F\u0240\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D" - u"\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD" - u"\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD" - u"\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CEC\u2CEE\u2CF3\uA641\uA643" - u"\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663" - u"\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695" - u"\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F\uA733\uA735\uA737\uA739\uA73B\uA73D" - u"\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D" - u"\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA77A\uA77C\u1D79\uA77F\uA781\uA783\uA785" - u"\uA787\uA78C\u0265\uA791\uA793\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\u0266" - u"\u025C\u0261\u026C\u026A\u029E\u0287\u029D\uAB53\uA7B5\uA7B7\uA7B9\uA7BB\uA7BD\uA7BF\uA7C3\uA794" - u"\u0282\u1D8E\uA7C8\uA7CA\uA7F6\u13A0\u13A1\u13A2\u13A3\u13A4\u13A5\u13A6\u13A7\u13A8\u13A9\u13AA" - u"\u13AB\u13AC\u13AD\u13AE\u13AF\u13B0\u13B1\u13B2\u13B3\u13B4\u13B5\u13B6\u13B7\u13B8\u13B9\u13BA" - u"\u13BB\u13BC\u13BD\u13BE\u13BF\u13C0\u13C1\u13C2\u13C3\u13C4\u13C5\u13C6\u13C7\u13C8\u13C9\u13CA" - u"\u13CB\u13CC\u13CD\u13CE\u13CF\u13D0\u13D1\u13D2\u13D3\u13D4\u13D5\u13D6\u13D7\u13D8\u13D9\u13DA" - u"\u13DB\u13DC\u13DD\u13DE\u13DF\u13E0\u13E1\u13E2\u13E3\u13E4\u13E5\u13E6\u13E7\u13E8\u13E9\u13EA" - u"\u13EB\u13EC\u13ED\u13EE\u13EF\u0066\u0066\u0066\u0069\u0066\u006C\u0066\u0066\u0069\u0066\u0066" - u"\u006C\u0073\u0074\u0073\u0074\u0574\u0576\u0574\u0565\u0574\u056B\u057E\u0576\u0574\u056D\uFF41" - u"\uFF42\uFF43\uFF44\uFF45\uFF46\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F\uFF50\uFF51" - u"\uFF52\uFF53\uFF54\uFF55\uFF56\uFF57\uFF58\uFF59\uFF5A\U00010428\U00010429\U0001042A\U0001042B\U0001042C\U0001042D\U0001042E" - u"\U0001042F\U00010430\U00010431\U00010432\U00010433\U00010434\U00010435\U00010436\U00010437\U00010438\U00010439\U0001043A\U0001043B\U0001043C\U0001043D\U0001043E" - u"\U0001043F\U00010440\U00010441\U00010442\U00010443\U00010444\U00010445\U00010446\U00010447\U00010448\U00010449\U0001044A\U0001044B\U0001044C\U0001044D\U0001044E" - u"\U0001044F\U000104D8\U000104D9\U000104DA\U000104DB\U000104DC\U000104DD\U000104DE\U000104DF\U000104E0\U000104E1\U000104E2\U000104E3\U000104E4\U000104E5\U000104E6" - u"\U000104E7\U000104E8\U000104E9\U000104EA\U000104EB\U000104EC\U000104ED\U000104EE\U000104EF\U000104F0\U000104F1\U000104F2\U000104F3\U000104F4\U000104F5\U000104F6" - u"\U000104F7\U000104F8\U000104F9\U000104FA\U000104FB\U00010CC0\U00010CC1\U00010CC2\U00010CC3\U00010CC4\U00010CC5\U00010CC6\U00010CC7\U00010CC8\U00010CC9\U00010CCA" - u"\U00010CCB\U00010CCC\U00010CCD\U00010CCE\U00010CCF\U00010CD0\U00010CD1\U00010CD2\U00010CD3\U00010CD4\U00010CD5\U00010CD6\U00010CD7\U00010CD8\U00010CD9\U00010CDA" - u"\U00010CDB\U00010CDC\U00010CDD\U00010CDE\U00010CDF\U00010CE0\U00010CE1\U00010CE2\U00010CE3\U00010CE4\U00010CE5\U00010CE6\U00010CE7\U00010CE8\U00010CE9\U00010CEA" - u"\U00010CEB\U00010CEC\U00010CED\U00010CEE\U00010CEF\U00010CF0\U00010CF1\U00010CF2\U000118C0\U000118C1\U000118C2\U000118C3\U000118C4\U000118C5\U000118C6\U000118C7" - u"\U000118C8\U000118C9\U000118CA\U000118CB\U000118CC\U000118CD\U000118CE\U000118CF\U000118D0\U000118D1\U000118D2\U000118D3\U000118D4\U000118D5\U000118D6\U000118D7" - u"\U000118D8\U000118D9\U000118DA\U000118DB\U000118DC\U000118DD\U000118DE\U000118DF\U00016E60\U00016E61\U00016E62\U00016E63\U00016E64\U00016E65\U00016E66\U00016E67" - u"\U00016E68\U00016E69\U00016E6A\U00016E6B\U00016E6C\U00016E6D\U00016E6E\U00016E6F\U00016E70\U00016E71\U00016E72\U00016E73\U00016E74\U00016E75\U00016E76\U00016E77" - u"\U00016E78\U00016E79\U00016E7A\U00016E7B\U00016E7C\U00016E7D\U00016E7E\U00016E7F\U0001E922\U0001E923\U0001E924\U0001E925\U0001E926\U0001E927\U0001E928\U0001E929" - u"\U0001E92A\U0001E92B\U0001E92C\U0001E92D\U0001E92E\U0001E92F\U0001E930\U0001E931\U0001E932\U0001E933\U0001E934\U0001E935\U0001E936\U0001E937\U0001E938\U0001E939" - u"\U0001E93A\U0001E93B\U0001E93C\U0001E93D\U0001E93E\U0001E93F\U0001E940\U0001E941\U0001E942\U0001E943"; + u"\u0441\u0442\u0442\u044A\u0463\uA64B\u1C8A\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8" + u"\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8" + u"\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u10F7\u10F8" + u"\u10F9\u10FA\u10FD\u10FE\u10FF\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15" + u"\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35" + u"\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55" + u"\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75" + u"\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95" + u"\u0068\u0331\u0074\u0308\u0077\u030A\u0079\u030A\u0061\u02BE\u1E61\u0073\u0073\u1EA1\u1EA3\u1EA5" + u"\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5" + u"\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5" + u"\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF\u1F00\u1F01\u1F02" + u"\u1F03\u1F04\u1F05\u1F06\u1F07\u1F10\u1F11\u1F12\u1F13\u1F14\u1F15\u1F20\u1F21\u1F22\u1F23\u1F24" + u"\u1F25\u1F26\u1F27\u1F30\u1F31\u1F32\u1F33\u1F34\u1F35\u1F36\u1F37\u1F40\u1F41\u1F42\u1F43\u1F44" + u"\u1F45\u03C5\u0313\u03C5\u0313\u0300\u03C5\u0313\u0301\u03C5\u0313\u0342\u1F51\u1F53\u1F55\u1F57" + u"\u1F60\u1F61\u1F62\u1F63\u1F64\u1F65\u1F66\u1F67\u1F00\u03B9\u1F01\u03B9\u1F02\u03B9\u1F03\u03B9" + u"\u1F04\u03B9\u1F05\u03B9\u1F06\u03B9\u1F07\u03B9\u1F00\u03B9\u1F01\u03B9\u1F02\u03B9\u1F03\u03B9" + u"\u1F04\u03B9\u1F05\u03B9\u1F06\u03B9\u1F07\u03B9\u1F20\u03B9\u1F21\u03B9\u1F22\u03B9\u1F23\u03B9" + u"\u1F24\u03B9\u1F25\u03B9\u1F26\u03B9\u1F27\u03B9\u1F20\u03B9\u1F21\u03B9\u1F22\u03B9\u1F23\u03B9" + u"\u1F24\u03B9\u1F25\u03B9\u1F26\u03B9\u1F27\u03B9\u1F60\u03B9\u1F61\u03B9\u1F62\u03B9\u1F63\u03B9" + u"\u1F64\u03B9\u1F65\u03B9\u1F66\u03B9\u1F67\u03B9\u1F60\u03B9\u1F61\u03B9\u1F62\u03B9\u1F63\u03B9" + u"\u1F64\u03B9\u1F65\u03B9\u1F66\u03B9\u1F67\u03B9\u1F70\u03B9\u03B1\u03B9\u03AC\u03B9\u03B1\u0342" + u"\u03B1\u0342\u03B9\u1FB0\u1FB1\u1F70\u1F71\u03B1\u03B9\u03B9\u1F74\u03B9\u03B7\u03B9\u03AE\u03B9" + u"\u03B7\u0342\u03B7\u0342\u03B9\u1F72\u1F73\u1F74\u1F75\u03B7\u03B9\u03B9\u0308\u0300\u03B9\u0308" + u"\u0301\u03B9\u0342\u03B9\u0308\u0342\u1FD0\u1FD1\u1F76\u1F77\u03C5\u0308\u0300\u03C5\u0308\u0301" + u"\u03C1\u0313\u03C5\u0342\u03C5\u0308\u0342\u1FE0\u1FE1\u1F7A\u1F7B\u1FE5\u1F7C\u03B9\u03C9\u03B9" + u"\u03CE\u03B9\u03C9\u0342\u03C9\u0342\u03B9\u1F78\u1F79\u1F7C\u1F7D\u03C9\u03B9\u03C9\u006B\u00E5" + u"\u214E\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179\u217A\u217B\u217C\u217D\u217E" + u"\u217F\u2184\u24D0\u24D1\u24D2\u24D3\u24D4\u24D5\u24D6\u24D7\u24D8\u24D9\u24DA\u24DB\u24DC\u24DD" + u"\u24DE\u24DF\u24E0\u24E1\u24E2\u24E3\u24E4\u24E5\u24E6\u24E7\u24E8\u24E9\u2C30\u2C31\u2C32\u2C33" + u"\u2C34\u2C35\u2C36\u2C37\u2C38\u2C39\u2C3A\u2C3B\u2C3C\u2C3D\u2C3E\u2C3F\u2C40\u2C41\u2C42\u2C43" + u"\u2C44\u2C45\u2C46\u2C47\u2C48\u2C49\u2C4A\u2C4B\u2C4C\u2C4D\u2C4E\u2C4F\u2C50\u2C51\u2C52\u2C53" + u"\u2C54\u2C55\u2C56\u2C57\u2C58\u2C59\u2C5A\u2C5B\u2C5C\u2C5D\u2C5E\u2C5F\u2C61\u026B\u1D7D\u027D" + u"\u2C68\u2C6A\u2C6C\u0251\u0271\u0250\u0252\u2C73\u2C76\u023F\u0240\u2C81\u2C83\u2C85\u2C87\u2C89" + u"\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9" + u"\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9" + u"\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CEC\u2CEE\u2CF3" + u"\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F" + u"\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691" + u"\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F\uA733\uA735\uA737\uA739" + u"\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759" + u"\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA77A\uA77C\u1D79\uA77F\uA781" + u"\uA783\uA785\uA787\uA78C\u0265\uA791\uA793\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7" + u"\uA7A9\u0266\u025C\u0261\u026C\u026A\u029E\u0287\u029D\uAB53\uA7B5\uA7B7\uA7B9\uA7BB\uA7BD\uA7BF" + u"\uA7C1\uA7C3\uA794\u0282\u1D8E\uA7C8\uA7CA\u0264\uA7CD\uA7D1\uA7D7\uA7D9\uA7DB\u019B\uA7F6\u13A0" + u"\u13A1\u13A2\u13A3\u13A4\u13A5\u13A6\u13A7\u13A8\u13A9\u13AA\u13AB\u13AC\u13AD\u13AE\u13AF\u13B0" + u"\u13B1\u13B2\u13B3\u13B4\u13B5\u13B6\u13B7\u13B8\u13B9\u13BA\u13BB\u13BC\u13BD\u13BE\u13BF\u13C0" + u"\u13C1\u13C2\u13C3\u13C4\u13C5\u13C6\u13C7\u13C8\u13C9\u13CA\u13CB\u13CC\u13CD\u13CE\u13CF\u13D0" + u"\u13D1\u13D2\u13D3\u13D4\u13D5\u13D6\u13D7\u13D8\u13D9\u13DA\u13DB\u13DC\u13DD\u13DE\u13DF\u13E0" + u"\u13E1\u13E2\u13E3\u13E4\u13E5\u13E6\u13E7\u13E8\u13E9\u13EA\u13EB\u13EC\u13ED\u13EE\u13EF\u0066" + u"\u0066\u0066\u0069\u0066\u006C\u0066\u0066\u0069\u0066\u0066\u006C\u0073\u0074\u0073\u0074\u0574" + u"\u0576\u0574\u0565\u0574\u056B\u057E\u0576\u0574\u056D\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46\uFF47" + u"\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56\uFF57" + u"\uFF58\uFF59\uFF5A\U00010428\U00010429\U0001042A\U0001042B\U0001042C\U0001042D\U0001042E\U0001042F\U00010430\U00010431\U00010432\U00010433\U00010434" + u"\U00010435\U00010436\U00010437\U00010438\U00010439\U0001043A\U0001043B\U0001043C\U0001043D\U0001043E\U0001043F\U00010440\U00010441\U00010442\U00010443\U00010444" + u"\U00010445\U00010446\U00010447\U00010448\U00010449\U0001044A\U0001044B\U0001044C\U0001044D\U0001044E\U0001044F\U000104D8\U000104D9\U000104DA\U000104DB\U000104DC" + u"\U000104DD\U000104DE\U000104DF\U000104E0\U000104E1\U000104E2\U000104E3\U000104E4\U000104E5\U000104E6\U000104E7\U000104E8\U000104E9\U000104EA\U000104EB\U000104EC" + u"\U000104ED\U000104EE\U000104EF\U000104F0\U000104F1\U000104F2\U000104F3\U000104F4\U000104F5\U000104F6\U000104F7\U000104F8\U000104F9\U000104FA\U000104FB\U00010597" + u"\U00010598\U00010599\U0001059A\U0001059B\U0001059C\U0001059D\U0001059E\U0001059F\U000105A0\U000105A1\U000105A3\U000105A4\U000105A5\U000105A6\U000105A7\U000105A8" + u"\U000105A9\U000105AA\U000105AB\U000105AC\U000105AD\U000105AE\U000105AF\U000105B0\U000105B1\U000105B3\U000105B4\U000105B5\U000105B6\U000105B7\U000105B8\U000105B9" + u"\U000105BB\U000105BC\U00010CC0\U00010CC1\U00010CC2\U00010CC3\U00010CC4\U00010CC5\U00010CC6\U00010CC7\U00010CC8\U00010CC9\U00010CCA\U00010CCB\U00010CCC\U00010CCD" + u"\U00010CCE\U00010CCF\U00010CD0\U00010CD1\U00010CD2\U00010CD3\U00010CD4\U00010CD5\U00010CD6\U00010CD7\U00010CD8\U00010CD9\U00010CDA\U00010CDB\U00010CDC\U00010CDD" + u"\U00010CDE\U00010CDF\U00010CE0\U00010CE1\U00010CE2\U00010CE3\U00010CE4\U00010CE5\U00010CE6\U00010CE7\U00010CE8\U00010CE9\U00010CEA\U00010CEB\U00010CEC\U00010CED" + u"\U00010CEE\U00010CEF\U00010CF0\U00010CF1\U00010CF2\U00010D70\U00010D71\U00010D72\U00010D73\U00010D74\U00010D75\U00010D76\U00010D77\U00010D78\U00010D79\U00010D7A" + u"\U00010D7B\U00010D7C\U00010D7D\U00010D7E\U00010D7F\U00010D80\U00010D81\U00010D82\U00010D83\U00010D84\U00010D85\U000118C0\U000118C1\U000118C2\U000118C3\U000118C4" + u"\U000118C5\U000118C6\U000118C7\U000118C8\U000118C9\U000118CA\U000118CB\U000118CC\U000118CD\U000118CE\U000118CF\U000118D0\U000118D1\U000118D2\U000118D3\U000118D4" + u"\U000118D5\U000118D6\U000118D7\U000118D8\U000118D9\U000118DA\U000118DB\U000118DC\U000118DD\U000118DE\U000118DF\U00016E60\U00016E61\U00016E62\U00016E63\U00016E64" + u"\U00016E65\U00016E66\U00016E67\U00016E68\U00016E69\U00016E6A\U00016E6B\U00016E6C\U00016E6D\U00016E6E\U00016E6F\U00016E70\U00016E71\U00016E72\U00016E73\U00016E74" + u"\U00016E75\U00016E76\U00016E77\U00016E78\U00016E79\U00016E7A\U00016E7B\U00016E7C\U00016E7D\U00016E7E\U00016E7F\U0001E922\U0001E923\U0001E924\U0001E925\U0001E926" + u"\U0001E927\U0001E928\U0001E929\U0001E92A\U0001E92B\U0001E92C\U0001E92D\U0001E92E\U0001E92F\U0001E930\U0001E931\U0001E932\U0001E933\U0001E934\U0001E935\U0001E936" + u"\U0001E937\U0001E938\U0001E939\U0001E93A\U0001E93B\U0001E93C\U0001E93D\U0001E93E\U0001E93F\U0001E940\U0001E941\U0001E942\U0001E943"; const char_lookup uppercase_source_chars[] = { {0 ,U'\u0041'}, {1 ,U'\u0042'}, {2 ,U'\u0043'}, {3 ,U'\u0044'}, {4 ,U'\u0045'}, {5 ,U'\u0046'}, {6 ,U'\u0047'}, {7 ,U'\u0048'}, {8 ,U'\u0049'}, {9 ,U'\u004A'}, {10 ,U'\u004B'}, {11 ,U'\u004C'}, {12 ,U'\u004D'}, {13 ,U'\u004E'}, {14 ,U'\u004F'}, {15 ,U'\u0050'}, @@ -257,60 +265,64 @@ namespace sysstr::util::unicode {545 ,U'\u13C3'}, {546 ,U'\u13C4'}, {547 ,U'\u13C5'}, {548 ,U'\u13C6'}, {549 ,U'\u13C7'}, {550 ,U'\u13C8'}, {551 ,U'\u13C9'}, {552 ,U'\u13CA'}, {553 ,U'\u13CB'}, {554 ,U'\u13CC'}, {555 ,U'\u13CD'}, {556 ,U'\u13CE'}, {557 ,U'\u13CF'}, {558 ,U'\u13D0'}, {559 ,U'\u13D1'}, {560 ,U'\u13D2'}, {561 ,U'\u13D3'}, {562 ,U'\u13D4'}, {563 ,U'\u13D5'}, {564 ,U'\u13D6'}, {565 ,U'\u13D7'}, {566 ,U'\u13D8'}, {567 ,U'\u13D9'}, {568 ,U'\u13DA'}, {569 ,U'\u13DB'}, {570 ,U'\u13DC'}, {571 ,U'\u13DD'}, {572 ,U'\u13DE'}, {573 ,U'\u13DF'}, {574 ,U'\u13E0'}, {575 ,U'\u13E1'}, {576 ,U'\u13E2'}, {577 ,U'\u13E3'}, {578 ,U'\u13E4'}, {579 ,U'\u13E5'}, {580 ,U'\u13E6'}, {581 ,U'\u13E7'}, {582 ,U'\u13E8'}, {583 ,U'\u13E9'}, {584 ,U'\u13EA'}, {585 ,U'\u13EB'}, {586 ,U'\u13EC'}, {587 ,U'\u13ED'}, {588 ,U'\u13EE'}, {589 ,U'\u13EF'}, {590 ,U'\u13F0'}, {591 ,U'\u13F1'}, {592 ,U'\u13F2'}, - {593 ,U'\u13F3'}, {594 ,U'\u13F4'}, {595 ,U'\u13F5'}, {596 ,U'\u1C90'}, {597 ,U'\u1C91'}, {598 ,U'\u1C92'}, {599 ,U'\u1C93'}, {600 ,U'\u1C94'}, {601 ,U'\u1C95'}, {602 ,U'\u1C96'}, {603 ,U'\u1C97'}, {604 ,U'\u1C98'}, {605 ,U'\u1C99'}, {606 ,U'\u1C9A'}, {607 ,U'\u1C9B'}, {608 ,U'\u1C9C'}, - {609 ,U'\u1C9D'}, {610 ,U'\u1C9E'}, {611 ,U'\u1C9F'}, {612 ,U'\u1CA0'}, {613 ,U'\u1CA1'}, {614 ,U'\u1CA2'}, {615 ,U'\u1CA3'}, {616 ,U'\u1CA4'}, {617 ,U'\u1CA5'}, {618 ,U'\u1CA6'}, {619 ,U'\u1CA7'}, {620 ,U'\u1CA8'}, {621 ,U'\u1CA9'}, {622 ,U'\u1CAA'}, {623 ,U'\u1CAB'}, {624 ,U'\u1CAC'}, - {625 ,U'\u1CAD'}, {626 ,U'\u1CAE'}, {627 ,U'\u1CAF'}, {628 ,U'\u1CB0'}, {629 ,U'\u1CB1'}, {630 ,U'\u1CB2'}, {631 ,U'\u1CB3'}, {632 ,U'\u1CB4'}, {633 ,U'\u1CB5'}, {634 ,U'\u1CB6'}, {635 ,U'\u1CB7'}, {636 ,U'\u1CB8'}, {637 ,U'\u1CB9'}, {638 ,U'\u1CBA'}, {639 ,U'\u1CBD'}, {640 ,U'\u1CBE'}, - {641 ,U'\u1CBF'}, {642 ,U'\u1E00'}, {643 ,U'\u1E02'}, {644 ,U'\u1E04'}, {645 ,U'\u1E06'}, {646 ,U'\u1E08'}, {647 ,U'\u1E0A'}, {648 ,U'\u1E0C'}, {649 ,U'\u1E0E'}, {650 ,U'\u1E10'}, {651 ,U'\u1E12'}, {652 ,U'\u1E14'}, {653 ,U'\u1E16'}, {654 ,U'\u1E18'}, {655 ,U'\u1E1A'}, {656 ,U'\u1E1C'}, - {657 ,U'\u1E1E'}, {658 ,U'\u1E20'}, {659 ,U'\u1E22'}, {660 ,U'\u1E24'}, {661 ,U'\u1E26'}, {662 ,U'\u1E28'}, {663 ,U'\u1E2A'}, {664 ,U'\u1E2C'}, {665 ,U'\u1E2E'}, {666 ,U'\u1E30'}, {667 ,U'\u1E32'}, {668 ,U'\u1E34'}, {669 ,U'\u1E36'}, {670 ,U'\u1E38'}, {671 ,U'\u1E3A'}, {672 ,U'\u1E3C'}, - {673 ,U'\u1E3E'}, {674 ,U'\u1E40'}, {675 ,U'\u1E42'}, {676 ,U'\u1E44'}, {677 ,U'\u1E46'}, {678 ,U'\u1E48'}, {679 ,U'\u1E4A'}, {680 ,U'\u1E4C'}, {681 ,U'\u1E4E'}, {682 ,U'\u1E50'}, {683 ,U'\u1E52'}, {684 ,U'\u1E54'}, {685 ,U'\u1E56'}, {686 ,U'\u1E58'}, {687 ,U'\u1E5A'}, {688 ,U'\u1E5C'}, - {689 ,U'\u1E5E'}, {690 ,U'\u1E60'}, {691 ,U'\u1E62'}, {692 ,U'\u1E64'}, {693 ,U'\u1E66'}, {694 ,U'\u1E68'}, {695 ,U'\u1E6A'}, {696 ,U'\u1E6C'}, {697 ,U'\u1E6E'}, {698 ,U'\u1E70'}, {699 ,U'\u1E72'}, {700 ,U'\u1E74'}, {701 ,U'\u1E76'}, {702 ,U'\u1E78'}, {703 ,U'\u1E7A'}, {704 ,U'\u1E7C'}, - {705 ,U'\u1E7E'}, {706 ,U'\u1E80'}, {707 ,U'\u1E82'}, {708 ,U'\u1E84'}, {709 ,U'\u1E86'}, {710 ,U'\u1E88'}, {711 ,U'\u1E8A'}, {712 ,U'\u1E8C'}, {713 ,U'\u1E8E'}, {714 ,U'\u1E90'}, {715 ,U'\u1E92'}, {716 ,U'\u1E94'}, {717 ,U'\u1E9E'}, {718 ,U'\u1EA0'}, {719 ,U'\u1EA2'}, {720 ,U'\u1EA4'}, - {721 ,U'\u1EA6'}, {722 ,U'\u1EA8'}, {723 ,U'\u1EAA'}, {724 ,U'\u1EAC'}, {725 ,U'\u1EAE'}, {726 ,U'\u1EB0'}, {727 ,U'\u1EB2'}, {728 ,U'\u1EB4'}, {729 ,U'\u1EB6'}, {730 ,U'\u1EB8'}, {731 ,U'\u1EBA'}, {732 ,U'\u1EBC'}, {733 ,U'\u1EBE'}, {734 ,U'\u1EC0'}, {735 ,U'\u1EC2'}, {736 ,U'\u1EC4'}, - {737 ,U'\u1EC6'}, {738 ,U'\u1EC8'}, {739 ,U'\u1ECA'}, {740 ,U'\u1ECC'}, {741 ,U'\u1ECE'}, {742 ,U'\u1ED0'}, {743 ,U'\u1ED2'}, {744 ,U'\u1ED4'}, {745 ,U'\u1ED6'}, {746 ,U'\u1ED8'}, {747 ,U'\u1EDA'}, {748 ,U'\u1EDC'}, {749 ,U'\u1EDE'}, {750 ,U'\u1EE0'}, {751 ,U'\u1EE2'}, {752 ,U'\u1EE4'}, - {753 ,U'\u1EE6'}, {754 ,U'\u1EE8'}, {755 ,U'\u1EEA'}, {756 ,U'\u1EEC'}, {757 ,U'\u1EEE'}, {758 ,U'\u1EF0'}, {759 ,U'\u1EF2'}, {760 ,U'\u1EF4'}, {761 ,U'\u1EF6'}, {762 ,U'\u1EF8'}, {763 ,U'\u1EFA'}, {764 ,U'\u1EFC'}, {765 ,U'\u1EFE'}, {766 ,U'\u1F08'}, {767 ,U'\u1F09'}, {768 ,U'\u1F0A'}, - {769 ,U'\u1F0B'}, {770 ,U'\u1F0C'}, {771 ,U'\u1F0D'}, {772 ,U'\u1F0E'}, {773 ,U'\u1F0F'}, {774 ,U'\u1F18'}, {775 ,U'\u1F19'}, {776 ,U'\u1F1A'}, {777 ,U'\u1F1B'}, {778 ,U'\u1F1C'}, {779 ,U'\u1F1D'}, {780 ,U'\u1F28'}, {781 ,U'\u1F29'}, {782 ,U'\u1F2A'}, {783 ,U'\u1F2B'}, {784 ,U'\u1F2C'}, - {785 ,U'\u1F2D'}, {786 ,U'\u1F2E'}, {787 ,U'\u1F2F'}, {788 ,U'\u1F38'}, {789 ,U'\u1F39'}, {790 ,U'\u1F3A'}, {791 ,U'\u1F3B'}, {792 ,U'\u1F3C'}, {793 ,U'\u1F3D'}, {794 ,U'\u1F3E'}, {795 ,U'\u1F3F'}, {796 ,U'\u1F48'}, {797 ,U'\u1F49'}, {798 ,U'\u1F4A'}, {799 ,U'\u1F4B'}, {800 ,U'\u1F4C'}, - {801 ,U'\u1F4D'}, {802 ,U'\u1F59'}, {803 ,U'\u1F5B'}, {804 ,U'\u1F5D'}, {805 ,U'\u1F5F'}, {806 ,U'\u1F68'}, {807 ,U'\u1F69'}, {808 ,U'\u1F6A'}, {809 ,U'\u1F6B'}, {810 ,U'\u1F6C'}, {811 ,U'\u1F6D'}, {812 ,U'\u1F6E'}, {813 ,U'\u1F6F'}, {814 ,U'\u1F88'}, {815 ,U'\u1F89'}, {816 ,U'\u1F8A'}, - {817 ,U'\u1F8B'}, {818 ,U'\u1F8C'}, {819 ,U'\u1F8D'}, {820 ,U'\u1F8E'}, {821 ,U'\u1F8F'}, {822 ,U'\u1F98'}, {823 ,U'\u1F99'}, {824 ,U'\u1F9A'}, {825 ,U'\u1F9B'}, {826 ,U'\u1F9C'}, {827 ,U'\u1F9D'}, {828 ,U'\u1F9E'}, {829 ,U'\u1F9F'}, {830 ,U'\u1FA8'}, {831 ,U'\u1FA9'}, {832 ,U'\u1FAA'}, - {833 ,U'\u1FAB'}, {834 ,U'\u1FAC'}, {835 ,U'\u1FAD'}, {836 ,U'\u1FAE'}, {837 ,U'\u1FAF'}, {838 ,U'\u1FB8'}, {839 ,U'\u1FB9'}, {840 ,U'\u1FBA'}, {841 ,U'\u1FBB'}, {842 ,U'\u1FBC'}, {843 ,U'\u1FC8'}, {844 ,U'\u1FC9'}, {845 ,U'\u1FCA'}, {846 ,U'\u1FCB'}, {847 ,U'\u1FCC'}, {848 ,U'\u1FD8'}, - {849 ,U'\u1FD9'}, {850 ,U'\u1FDA'}, {851 ,U'\u1FDB'}, {852 ,U'\u1FE8'}, {853 ,U'\u1FE9'}, {854 ,U'\u1FEA'}, {855 ,U'\u1FEB'}, {856 ,U'\u1FEC'}, {857 ,U'\u1FF8'}, {858 ,U'\u1FF9'}, {859 ,U'\u1FFA'}, {860 ,U'\u1FFB'}, {861 ,U'\u1FFC'}, {862 ,U'\u2126'}, {863 ,U'\u212A'}, {864 ,U'\u212B'}, - {865 ,U'\u2132'}, {866 ,U'\u2160'}, {867 ,U'\u2161'}, {868 ,U'\u2162'}, {869 ,U'\u2163'}, {870 ,U'\u2164'}, {871 ,U'\u2165'}, {872 ,U'\u2166'}, {873 ,U'\u2167'}, {874 ,U'\u2168'}, {875 ,U'\u2169'}, {876 ,U'\u216A'}, {877 ,U'\u216B'}, {878 ,U'\u216C'}, {879 ,U'\u216D'}, {880 ,U'\u216E'}, - {881 ,U'\u216F'}, {882 ,U'\u2183'}, {883 ,U'\u24B6'}, {884 ,U'\u24B7'}, {885 ,U'\u24B8'}, {886 ,U'\u24B9'}, {887 ,U'\u24BA'}, {888 ,U'\u24BB'}, {889 ,U'\u24BC'}, {890 ,U'\u24BD'}, {891 ,U'\u24BE'}, {892 ,U'\u24BF'}, {893 ,U'\u24C0'}, {894 ,U'\u24C1'}, {895 ,U'\u24C2'}, {896 ,U'\u24C3'}, - {897 ,U'\u24C4'}, {898 ,U'\u24C5'}, {899 ,U'\u24C6'}, {900 ,U'\u24C7'}, {901 ,U'\u24C8'}, {902 ,U'\u24C9'}, {903 ,U'\u24CA'}, {904 ,U'\u24CB'}, {905 ,U'\u24CC'}, {906 ,U'\u24CD'}, {907 ,U'\u24CE'}, {908 ,U'\u24CF'}, {909 ,U'\u2C00'}, {910 ,U'\u2C01'}, {911 ,U'\u2C02'}, {912 ,U'\u2C03'}, - {913 ,U'\u2C04'}, {914 ,U'\u2C05'}, {915 ,U'\u2C06'}, {916 ,U'\u2C07'}, {917 ,U'\u2C08'}, {918 ,U'\u2C09'}, {919 ,U'\u2C0A'}, {920 ,U'\u2C0B'}, {921 ,U'\u2C0C'}, {922 ,U'\u2C0D'}, {923 ,U'\u2C0E'}, {924 ,U'\u2C0F'}, {925 ,U'\u2C10'}, {926 ,U'\u2C11'}, {927 ,U'\u2C12'}, {928 ,U'\u2C13'}, - {929 ,U'\u2C14'}, {930 ,U'\u2C15'}, {931 ,U'\u2C16'}, {932 ,U'\u2C17'}, {933 ,U'\u2C18'}, {934 ,U'\u2C19'}, {935 ,U'\u2C1A'}, {936 ,U'\u2C1B'}, {937 ,U'\u2C1C'}, {938 ,U'\u2C1D'}, {939 ,U'\u2C1E'}, {940 ,U'\u2C1F'}, {941 ,U'\u2C20'}, {942 ,U'\u2C21'}, {943 ,U'\u2C22'}, {944 ,U'\u2C23'}, - {945 ,U'\u2C24'}, {946 ,U'\u2C25'}, {947 ,U'\u2C26'}, {948 ,U'\u2C27'}, {949 ,U'\u2C28'}, {950 ,U'\u2C29'}, {951 ,U'\u2C2A'}, {952 ,U'\u2C2B'}, {953 ,U'\u2C2C'}, {954 ,U'\u2C2D'}, {955 ,U'\u2C2E'}, {956 ,U'\u2C60'}, {957 ,U'\u2C62'}, {958 ,U'\u2C63'}, {959 ,U'\u2C64'}, {960 ,U'\u2C67'}, - {961 ,U'\u2C69'}, {962 ,U'\u2C6B'}, {963 ,U'\u2C6D'}, {964 ,U'\u2C6E'}, {965 ,U'\u2C6F'}, {966 ,U'\u2C70'}, {967 ,U'\u2C72'}, {968 ,U'\u2C75'}, {969 ,U'\u2C7E'}, {970 ,U'\u2C7F'}, {971 ,U'\u2C80'}, {972 ,U'\u2C82'}, {973 ,U'\u2C84'}, {974 ,U'\u2C86'}, {975 ,U'\u2C88'}, {976 ,U'\u2C8A'}, - {977 ,U'\u2C8C'}, {978 ,U'\u2C8E'}, {979 ,U'\u2C90'}, {980 ,U'\u2C92'}, {981 ,U'\u2C94'}, {982 ,U'\u2C96'}, {983 ,U'\u2C98'}, {984 ,U'\u2C9A'}, {985 ,U'\u2C9C'}, {986 ,U'\u2C9E'}, {987 ,U'\u2CA0'}, {988 ,U'\u2CA2'}, {989 ,U'\u2CA4'}, {990 ,U'\u2CA6'}, {991 ,U'\u2CA8'}, {992 ,U'\u2CAA'}, - {993 ,U'\u2CAC'}, {994 ,U'\u2CAE'}, {995 ,U'\u2CB0'}, {996 ,U'\u2CB2'}, {997 ,U'\u2CB4'}, {998 ,U'\u2CB6'}, {999 ,U'\u2CB8'}, {1000 ,U'\u2CBA'}, {1001 ,U'\u2CBC'}, {1002 ,U'\u2CBE'}, {1003 ,U'\u2CC0'}, {1004 ,U'\u2CC2'}, {1005 ,U'\u2CC4'}, {1006 ,U'\u2CC6'}, {1007 ,U'\u2CC8'}, {1008 ,U'\u2CCA'}, - {1009 ,U'\u2CCC'}, {1010 ,U'\u2CCE'}, {1011 ,U'\u2CD0'}, {1012 ,U'\u2CD2'}, {1013 ,U'\u2CD4'}, {1014 ,U'\u2CD6'}, {1015 ,U'\u2CD8'}, {1016 ,U'\u2CDA'}, {1017 ,U'\u2CDC'}, {1018 ,U'\u2CDE'}, {1019 ,U'\u2CE0'}, {1020 ,U'\u2CE2'}, {1021 ,U'\u2CEB'}, {1022 ,U'\u2CED'}, {1023 ,U'\u2CF2'}, {1024 ,U'\uA640'}, - {1025 ,U'\uA642'}, {1026 ,U'\uA644'}, {1027 ,U'\uA646'}, {1028 ,U'\uA648'}, {1029 ,U'\uA64A'}, {1030 ,U'\uA64C'}, {1031 ,U'\uA64E'}, {1032 ,U'\uA650'}, {1033 ,U'\uA652'}, {1034 ,U'\uA654'}, {1035 ,U'\uA656'}, {1036 ,U'\uA658'}, {1037 ,U'\uA65A'}, {1038 ,U'\uA65C'}, {1039 ,U'\uA65E'}, {1040 ,U'\uA660'}, - {1041 ,U'\uA662'}, {1042 ,U'\uA664'}, {1043 ,U'\uA666'}, {1044 ,U'\uA668'}, {1045 ,U'\uA66A'}, {1046 ,U'\uA66C'}, {1047 ,U'\uA680'}, {1048 ,U'\uA682'}, {1049 ,U'\uA684'}, {1050 ,U'\uA686'}, {1051 ,U'\uA688'}, {1052 ,U'\uA68A'}, {1053 ,U'\uA68C'}, {1054 ,U'\uA68E'}, {1055 ,U'\uA690'}, {1056 ,U'\uA692'}, - {1057 ,U'\uA694'}, {1058 ,U'\uA696'}, {1059 ,U'\uA698'}, {1060 ,U'\uA69A'}, {1061 ,U'\uA722'}, {1062 ,U'\uA724'}, {1063 ,U'\uA726'}, {1064 ,U'\uA728'}, {1065 ,U'\uA72A'}, {1066 ,U'\uA72C'}, {1067 ,U'\uA72E'}, {1068 ,U'\uA732'}, {1069 ,U'\uA734'}, {1070 ,U'\uA736'}, {1071 ,U'\uA738'}, {1072 ,U'\uA73A'}, - {1073 ,U'\uA73C'}, {1074 ,U'\uA73E'}, {1075 ,U'\uA740'}, {1076 ,U'\uA742'}, {1077 ,U'\uA744'}, {1078 ,U'\uA746'}, {1079 ,U'\uA748'}, {1080 ,U'\uA74A'}, {1081 ,U'\uA74C'}, {1082 ,U'\uA74E'}, {1083 ,U'\uA750'}, {1084 ,U'\uA752'}, {1085 ,U'\uA754'}, {1086 ,U'\uA756'}, {1087 ,U'\uA758'}, {1088 ,U'\uA75A'}, - {1089 ,U'\uA75C'}, {1090 ,U'\uA75E'}, {1091 ,U'\uA760'}, {1092 ,U'\uA762'}, {1093 ,U'\uA764'}, {1094 ,U'\uA766'}, {1095 ,U'\uA768'}, {1096 ,U'\uA76A'}, {1097 ,U'\uA76C'}, {1098 ,U'\uA76E'}, {1099 ,U'\uA779'}, {1100 ,U'\uA77B'}, {1101 ,U'\uA77D'}, {1102 ,U'\uA77E'}, {1103 ,U'\uA780'}, {1104 ,U'\uA782'}, - {1105 ,U'\uA784'}, {1106 ,U'\uA786'}, {1107 ,U'\uA78B'}, {1108 ,U'\uA78D'}, {1109 ,U'\uA790'}, {1110 ,U'\uA792'}, {1111 ,U'\uA796'}, {1112 ,U'\uA798'}, {1113 ,U'\uA79A'}, {1114 ,U'\uA79C'}, {1115 ,U'\uA79E'}, {1116 ,U'\uA7A0'}, {1117 ,U'\uA7A2'}, {1118 ,U'\uA7A4'}, {1119 ,U'\uA7A6'}, {1120 ,U'\uA7A8'}, - {1121 ,U'\uA7AA'}, {1122 ,U'\uA7AB'}, {1123 ,U'\uA7AC'}, {1124 ,U'\uA7AD'}, {1125 ,U'\uA7AE'}, {1126 ,U'\uA7B0'}, {1127 ,U'\uA7B1'}, {1128 ,U'\uA7B2'}, {1129 ,U'\uA7B3'}, {1130 ,U'\uA7B4'}, {1131 ,U'\uA7B6'}, {1132 ,U'\uA7B8'}, {1133 ,U'\uA7BA'}, {1134 ,U'\uA7BC'}, {1135 ,U'\uA7BE'}, {1136 ,U'\uA7C2'}, - {1137 ,U'\uA7C4'}, {1138 ,U'\uA7C5'}, {1139 ,U'\uA7C6'}, {1140 ,U'\uA7C7'}, {1141 ,U'\uA7C9'}, {1142 ,U'\uA7F5'}, {1143 ,U'\uFF21'}, {1144 ,U'\uFF22'}, {1145 ,U'\uFF23'}, {1146 ,U'\uFF24'}, {1147 ,U'\uFF25'}, {1148 ,U'\uFF26'}, {1149 ,U'\uFF27'}, {1150 ,U'\uFF28'}, {1151 ,U'\uFF29'}, {1152 ,U'\uFF2A'}, - {1153 ,U'\uFF2B'}, {1154 ,U'\uFF2C'}, {1155 ,U'\uFF2D'}, {1156 ,U'\uFF2E'}, {1157 ,U'\uFF2F'}, {1158 ,U'\uFF30'}, {1159 ,U'\uFF31'}, {1160 ,U'\uFF32'}, {1161 ,U'\uFF33'}, {1162 ,U'\uFF34'}, {1163 ,U'\uFF35'}, {1164 ,U'\uFF36'}, {1165 ,U'\uFF37'}, {1166 ,U'\uFF38'}, {1167 ,U'\uFF39'}, {1168 ,U'\uFF3A'}, - {1169 ,U'\U00010400'}, {1171 ,U'\U00010401'}, {1173 ,U'\U00010402'}, {1175 ,U'\U00010403'}, {1177 ,U'\U00010404'}, {1179 ,U'\U00010405'}, {1181 ,U'\U00010406'}, {1183 ,U'\U00010407'}, {1185 ,U'\U00010408'}, {1187 ,U'\U00010409'}, {1189 ,U'\U0001040A'}, {1191 ,U'\U0001040B'}, {1193 ,U'\U0001040C'}, {1195 ,U'\U0001040D'}, {1197 ,U'\U0001040E'}, {1199 ,U'\U0001040F'}, - {1201 ,U'\U00010410'}, {1203 ,U'\U00010411'}, {1205 ,U'\U00010412'}, {1207 ,U'\U00010413'}, {1209 ,U'\U00010414'}, {1211 ,U'\U00010415'}, {1213 ,U'\U00010416'}, {1215 ,U'\U00010417'}, {1217 ,U'\U00010418'}, {1219 ,U'\U00010419'}, {1221 ,U'\U0001041A'}, {1223 ,U'\U0001041B'}, {1225 ,U'\U0001041C'}, {1227 ,U'\U0001041D'}, {1229 ,U'\U0001041E'}, {1231 ,U'\U0001041F'}, - {1233 ,U'\U00010420'}, {1235 ,U'\U00010421'}, {1237 ,U'\U00010422'}, {1239 ,U'\U00010423'}, {1241 ,U'\U00010424'}, {1243 ,U'\U00010425'}, {1245 ,U'\U00010426'}, {1247 ,U'\U00010427'}, {1249 ,U'\U000104B0'}, {1251 ,U'\U000104B1'}, {1253 ,U'\U000104B2'}, {1255 ,U'\U000104B3'}, {1257 ,U'\U000104B4'}, {1259 ,U'\U000104B5'}, {1261 ,U'\U000104B6'}, {1263 ,U'\U000104B7'}, - {1265 ,U'\U000104B8'}, {1267 ,U'\U000104B9'}, {1269 ,U'\U000104BA'}, {1271 ,U'\U000104BB'}, {1273 ,U'\U000104BC'}, {1275 ,U'\U000104BD'}, {1277 ,U'\U000104BE'}, {1279 ,U'\U000104BF'}, {1281 ,U'\U000104C0'}, {1283 ,U'\U000104C1'}, {1285 ,U'\U000104C2'}, {1287 ,U'\U000104C3'}, {1289 ,U'\U000104C4'}, {1291 ,U'\U000104C5'}, {1293 ,U'\U000104C6'}, {1295 ,U'\U000104C7'}, - {1297 ,U'\U000104C8'}, {1299 ,U'\U000104C9'}, {1301 ,U'\U000104CA'}, {1303 ,U'\U000104CB'}, {1305 ,U'\U000104CC'}, {1307 ,U'\U000104CD'}, {1309 ,U'\U000104CE'}, {1311 ,U'\U000104CF'}, {1313 ,U'\U000104D0'}, {1315 ,U'\U000104D1'}, {1317 ,U'\U000104D2'}, {1319 ,U'\U000104D3'}, {1321 ,U'\U00010C80'}, {1323 ,U'\U00010C81'}, {1325 ,U'\U00010C82'}, {1327 ,U'\U00010C83'}, - {1329 ,U'\U00010C84'}, {1331 ,U'\U00010C85'}, {1333 ,U'\U00010C86'}, {1335 ,U'\U00010C87'}, {1337 ,U'\U00010C88'}, {1339 ,U'\U00010C89'}, {1341 ,U'\U00010C8A'}, {1343 ,U'\U00010C8B'}, {1345 ,U'\U00010C8C'}, {1347 ,U'\U00010C8D'}, {1349 ,U'\U00010C8E'}, {1351 ,U'\U00010C8F'}, {1353 ,U'\U00010C90'}, {1355 ,U'\U00010C91'}, {1357 ,U'\U00010C92'}, {1359 ,U'\U00010C93'}, - {1361 ,U'\U00010C94'}, {1363 ,U'\U00010C95'}, {1365 ,U'\U00010C96'}, {1367 ,U'\U00010C97'}, {1369 ,U'\U00010C98'}, {1371 ,U'\U00010C99'}, {1373 ,U'\U00010C9A'}, {1375 ,U'\U00010C9B'}, {1377 ,U'\U00010C9C'}, {1379 ,U'\U00010C9D'}, {1381 ,U'\U00010C9E'}, {1383 ,U'\U00010C9F'}, {1385 ,U'\U00010CA0'}, {1387 ,U'\U00010CA1'}, {1389 ,U'\U00010CA2'}, {1391 ,U'\U00010CA3'}, - {1393 ,U'\U00010CA4'}, {1395 ,U'\U00010CA5'}, {1397 ,U'\U00010CA6'}, {1399 ,U'\U00010CA7'}, {1401 ,U'\U00010CA8'}, {1403 ,U'\U00010CA9'}, {1405 ,U'\U00010CAA'}, {1407 ,U'\U00010CAB'}, {1409 ,U'\U00010CAC'}, {1411 ,U'\U00010CAD'}, {1413 ,U'\U00010CAE'}, {1415 ,U'\U00010CAF'}, {1417 ,U'\U00010CB0'}, {1419 ,U'\U00010CB1'}, {1421 ,U'\U00010CB2'}, {1423 ,U'\U000118A0'}, - {1425 ,U'\U000118A1'}, {1427 ,U'\U000118A2'}, {1429 ,U'\U000118A3'}, {1431 ,U'\U000118A4'}, {1433 ,U'\U000118A5'}, {1435 ,U'\U000118A6'}, {1437 ,U'\U000118A7'}, {1439 ,U'\U000118A8'}, {1441 ,U'\U000118A9'}, {1443 ,U'\U000118AA'}, {1445 ,U'\U000118AB'}, {1447 ,U'\U000118AC'}, {1449 ,U'\U000118AD'}, {1451 ,U'\U000118AE'}, {1453 ,U'\U000118AF'}, {1455 ,U'\U000118B0'}, - {1457 ,U'\U000118B1'}, {1459 ,U'\U000118B2'}, {1461 ,U'\U000118B3'}, {1463 ,U'\U000118B4'}, {1465 ,U'\U000118B5'}, {1467 ,U'\U000118B6'}, {1469 ,U'\U000118B7'}, {1471 ,U'\U000118B8'}, {1473 ,U'\U000118B9'}, {1475 ,U'\U000118BA'}, {1477 ,U'\U000118BB'}, {1479 ,U'\U000118BC'}, {1481 ,U'\U000118BD'}, {1483 ,U'\U000118BE'}, {1485 ,U'\U000118BF'}, {1487 ,U'\U00016E40'}, - {1489 ,U'\U00016E41'}, {1491 ,U'\U00016E42'}, {1493 ,U'\U00016E43'}, {1495 ,U'\U00016E44'}, {1497 ,U'\U00016E45'}, {1499 ,U'\U00016E46'}, {1501 ,U'\U00016E47'}, {1503 ,U'\U00016E48'}, {1505 ,U'\U00016E49'}, {1507 ,U'\U00016E4A'}, {1509 ,U'\U00016E4B'}, {1511 ,U'\U00016E4C'}, {1513 ,U'\U00016E4D'}, {1515 ,U'\U00016E4E'}, {1517 ,U'\U00016E4F'}, {1519 ,U'\U00016E50'}, - {1521 ,U'\U00016E51'}, {1523 ,U'\U00016E52'}, {1525 ,U'\U00016E53'}, {1527 ,U'\U00016E54'}, {1529 ,U'\U00016E55'}, {1531 ,U'\U00016E56'}, {1533 ,U'\U00016E57'}, {1535 ,U'\U00016E58'}, {1537 ,U'\U00016E59'}, {1539 ,U'\U00016E5A'}, {1541 ,U'\U00016E5B'}, {1543 ,U'\U00016E5C'}, {1545 ,U'\U00016E5D'}, {1547 ,U'\U00016E5E'}, {1549 ,U'\U00016E5F'}, {1551 ,U'\U0001E900'}, - {1553 ,U'\U0001E901'}, {1555 ,U'\U0001E902'}, {1557 ,U'\U0001E903'}, {1559 ,U'\U0001E904'}, {1561 ,U'\U0001E905'}, {1563 ,U'\U0001E906'}, {1565 ,U'\U0001E907'}, {1567 ,U'\U0001E908'}, {1569 ,U'\U0001E909'}, {1571 ,U'\U0001E90A'}, {1573 ,U'\U0001E90B'}, {1575 ,U'\U0001E90C'}, {1577 ,U'\U0001E90D'}, {1579 ,U'\U0001E90E'}, {1581 ,U'\U0001E90F'}, {1583 ,U'\U0001E910'}, - {1585 ,U'\U0001E911'}, {1587 ,U'\U0001E912'}, {1589 ,U'\U0001E913'}, {1591 ,U'\U0001E914'}, {1593 ,U'\U0001E915'}, {1595 ,U'\U0001E916'}, {1597 ,U'\U0001E917'}, {1599 ,U'\U0001E918'}, {1601 ,U'\U0001E919'}, {1603 ,U'\U0001E91A'}, {1605 ,U'\U0001E91B'}, {1607 ,U'\U0001E91C'}, {1609 ,U'\U0001E91D'}, {1611 ,U'\U0001E91E'}, {1613 ,U'\U0001E91F'}, {1615 ,U'\U0001E920'}, - {1617 ,U'\U0001E921'}, {1619 , 0} + {593 ,U'\u13F3'}, {594 ,U'\u13F4'}, {595 ,U'\u13F5'}, {596 ,U'\u1C89'}, {597 ,U'\u1C90'}, {598 ,U'\u1C91'}, {599 ,U'\u1C92'}, {600 ,U'\u1C93'}, {601 ,U'\u1C94'}, {602 ,U'\u1C95'}, {603 ,U'\u1C96'}, {604 ,U'\u1C97'}, {605 ,U'\u1C98'}, {606 ,U'\u1C99'}, {607 ,U'\u1C9A'}, {608 ,U'\u1C9B'}, + {609 ,U'\u1C9C'}, {610 ,U'\u1C9D'}, {611 ,U'\u1C9E'}, {612 ,U'\u1C9F'}, {613 ,U'\u1CA0'}, {614 ,U'\u1CA1'}, {615 ,U'\u1CA2'}, {616 ,U'\u1CA3'}, {617 ,U'\u1CA4'}, {618 ,U'\u1CA5'}, {619 ,U'\u1CA6'}, {620 ,U'\u1CA7'}, {621 ,U'\u1CA8'}, {622 ,U'\u1CA9'}, {623 ,U'\u1CAA'}, {624 ,U'\u1CAB'}, + {625 ,U'\u1CAC'}, {626 ,U'\u1CAD'}, {627 ,U'\u1CAE'}, {628 ,U'\u1CAF'}, {629 ,U'\u1CB0'}, {630 ,U'\u1CB1'}, {631 ,U'\u1CB2'}, {632 ,U'\u1CB3'}, {633 ,U'\u1CB4'}, {634 ,U'\u1CB5'}, {635 ,U'\u1CB6'}, {636 ,U'\u1CB7'}, {637 ,U'\u1CB8'}, {638 ,U'\u1CB9'}, {639 ,U'\u1CBA'}, {640 ,U'\u1CBD'}, + {641 ,U'\u1CBE'}, {642 ,U'\u1CBF'}, {643 ,U'\u1E00'}, {644 ,U'\u1E02'}, {645 ,U'\u1E04'}, {646 ,U'\u1E06'}, {647 ,U'\u1E08'}, {648 ,U'\u1E0A'}, {649 ,U'\u1E0C'}, {650 ,U'\u1E0E'}, {651 ,U'\u1E10'}, {652 ,U'\u1E12'}, {653 ,U'\u1E14'}, {654 ,U'\u1E16'}, {655 ,U'\u1E18'}, {656 ,U'\u1E1A'}, + {657 ,U'\u1E1C'}, {658 ,U'\u1E1E'}, {659 ,U'\u1E20'}, {660 ,U'\u1E22'}, {661 ,U'\u1E24'}, {662 ,U'\u1E26'}, {663 ,U'\u1E28'}, {664 ,U'\u1E2A'}, {665 ,U'\u1E2C'}, {666 ,U'\u1E2E'}, {667 ,U'\u1E30'}, {668 ,U'\u1E32'}, {669 ,U'\u1E34'}, {670 ,U'\u1E36'}, {671 ,U'\u1E38'}, {672 ,U'\u1E3A'}, + {673 ,U'\u1E3C'}, {674 ,U'\u1E3E'}, {675 ,U'\u1E40'}, {676 ,U'\u1E42'}, {677 ,U'\u1E44'}, {678 ,U'\u1E46'}, {679 ,U'\u1E48'}, {680 ,U'\u1E4A'}, {681 ,U'\u1E4C'}, {682 ,U'\u1E4E'}, {683 ,U'\u1E50'}, {684 ,U'\u1E52'}, {685 ,U'\u1E54'}, {686 ,U'\u1E56'}, {687 ,U'\u1E58'}, {688 ,U'\u1E5A'}, + {689 ,U'\u1E5C'}, {690 ,U'\u1E5E'}, {691 ,U'\u1E60'}, {692 ,U'\u1E62'}, {693 ,U'\u1E64'}, {694 ,U'\u1E66'}, {695 ,U'\u1E68'}, {696 ,U'\u1E6A'}, {697 ,U'\u1E6C'}, {698 ,U'\u1E6E'}, {699 ,U'\u1E70'}, {700 ,U'\u1E72'}, {701 ,U'\u1E74'}, {702 ,U'\u1E76'}, {703 ,U'\u1E78'}, {704 ,U'\u1E7A'}, + {705 ,U'\u1E7C'}, {706 ,U'\u1E7E'}, {707 ,U'\u1E80'}, {708 ,U'\u1E82'}, {709 ,U'\u1E84'}, {710 ,U'\u1E86'}, {711 ,U'\u1E88'}, {712 ,U'\u1E8A'}, {713 ,U'\u1E8C'}, {714 ,U'\u1E8E'}, {715 ,U'\u1E90'}, {716 ,U'\u1E92'}, {717 ,U'\u1E94'}, {718 ,U'\u1E9E'}, {719 ,U'\u1EA0'}, {720 ,U'\u1EA2'}, + {721 ,U'\u1EA4'}, {722 ,U'\u1EA6'}, {723 ,U'\u1EA8'}, {724 ,U'\u1EAA'}, {725 ,U'\u1EAC'}, {726 ,U'\u1EAE'}, {727 ,U'\u1EB0'}, {728 ,U'\u1EB2'}, {729 ,U'\u1EB4'}, {730 ,U'\u1EB6'}, {731 ,U'\u1EB8'}, {732 ,U'\u1EBA'}, {733 ,U'\u1EBC'}, {734 ,U'\u1EBE'}, {735 ,U'\u1EC0'}, {736 ,U'\u1EC2'}, + {737 ,U'\u1EC4'}, {738 ,U'\u1EC6'}, {739 ,U'\u1EC8'}, {740 ,U'\u1ECA'}, {741 ,U'\u1ECC'}, {742 ,U'\u1ECE'}, {743 ,U'\u1ED0'}, {744 ,U'\u1ED2'}, {745 ,U'\u1ED4'}, {746 ,U'\u1ED6'}, {747 ,U'\u1ED8'}, {748 ,U'\u1EDA'}, {749 ,U'\u1EDC'}, {750 ,U'\u1EDE'}, {751 ,U'\u1EE0'}, {752 ,U'\u1EE2'}, + {753 ,U'\u1EE4'}, {754 ,U'\u1EE6'}, {755 ,U'\u1EE8'}, {756 ,U'\u1EEA'}, {757 ,U'\u1EEC'}, {758 ,U'\u1EEE'}, {759 ,U'\u1EF0'}, {760 ,U'\u1EF2'}, {761 ,U'\u1EF4'}, {762 ,U'\u1EF6'}, {763 ,U'\u1EF8'}, {764 ,U'\u1EFA'}, {765 ,U'\u1EFC'}, {766 ,U'\u1EFE'}, {767 ,U'\u1F08'}, {768 ,U'\u1F09'}, + {769 ,U'\u1F0A'}, {770 ,U'\u1F0B'}, {771 ,U'\u1F0C'}, {772 ,U'\u1F0D'}, {773 ,U'\u1F0E'}, {774 ,U'\u1F0F'}, {775 ,U'\u1F18'}, {776 ,U'\u1F19'}, {777 ,U'\u1F1A'}, {778 ,U'\u1F1B'}, {779 ,U'\u1F1C'}, {780 ,U'\u1F1D'}, {781 ,U'\u1F28'}, {782 ,U'\u1F29'}, {783 ,U'\u1F2A'}, {784 ,U'\u1F2B'}, + {785 ,U'\u1F2C'}, {786 ,U'\u1F2D'}, {787 ,U'\u1F2E'}, {788 ,U'\u1F2F'}, {789 ,U'\u1F38'}, {790 ,U'\u1F39'}, {791 ,U'\u1F3A'}, {792 ,U'\u1F3B'}, {793 ,U'\u1F3C'}, {794 ,U'\u1F3D'}, {795 ,U'\u1F3E'}, {796 ,U'\u1F3F'}, {797 ,U'\u1F48'}, {798 ,U'\u1F49'}, {799 ,U'\u1F4A'}, {800 ,U'\u1F4B'}, + {801 ,U'\u1F4C'}, {802 ,U'\u1F4D'}, {803 ,U'\u1F59'}, {804 ,U'\u1F5B'}, {805 ,U'\u1F5D'}, {806 ,U'\u1F5F'}, {807 ,U'\u1F68'}, {808 ,U'\u1F69'}, {809 ,U'\u1F6A'}, {810 ,U'\u1F6B'}, {811 ,U'\u1F6C'}, {812 ,U'\u1F6D'}, {813 ,U'\u1F6E'}, {814 ,U'\u1F6F'}, {815 ,U'\u1F88'}, {816 ,U'\u1F89'}, + {817 ,U'\u1F8A'}, {818 ,U'\u1F8B'}, {819 ,U'\u1F8C'}, {820 ,U'\u1F8D'}, {821 ,U'\u1F8E'}, {822 ,U'\u1F8F'}, {823 ,U'\u1F98'}, {824 ,U'\u1F99'}, {825 ,U'\u1F9A'}, {826 ,U'\u1F9B'}, {827 ,U'\u1F9C'}, {828 ,U'\u1F9D'}, {829 ,U'\u1F9E'}, {830 ,U'\u1F9F'}, {831 ,U'\u1FA8'}, {832 ,U'\u1FA9'}, + {833 ,U'\u1FAA'}, {834 ,U'\u1FAB'}, {835 ,U'\u1FAC'}, {836 ,U'\u1FAD'}, {837 ,U'\u1FAE'}, {838 ,U'\u1FAF'}, {839 ,U'\u1FB8'}, {840 ,U'\u1FB9'}, {841 ,U'\u1FBA'}, {842 ,U'\u1FBB'}, {843 ,U'\u1FBC'}, {844 ,U'\u1FC8'}, {845 ,U'\u1FC9'}, {846 ,U'\u1FCA'}, {847 ,U'\u1FCB'}, {848 ,U'\u1FCC'}, + {849 ,U'\u1FD8'}, {850 ,U'\u1FD9'}, {851 ,U'\u1FDA'}, {852 ,U'\u1FDB'}, {853 ,U'\u1FE8'}, {854 ,U'\u1FE9'}, {855 ,U'\u1FEA'}, {856 ,U'\u1FEB'}, {857 ,U'\u1FEC'}, {858 ,U'\u1FF8'}, {859 ,U'\u1FF9'}, {860 ,U'\u1FFA'}, {861 ,U'\u1FFB'}, {862 ,U'\u1FFC'}, {863 ,U'\u2126'}, {864 ,U'\u212A'}, + {865 ,U'\u212B'}, {866 ,U'\u2132'}, {867 ,U'\u2160'}, {868 ,U'\u2161'}, {869 ,U'\u2162'}, {870 ,U'\u2163'}, {871 ,U'\u2164'}, {872 ,U'\u2165'}, {873 ,U'\u2166'}, {874 ,U'\u2167'}, {875 ,U'\u2168'}, {876 ,U'\u2169'}, {877 ,U'\u216A'}, {878 ,U'\u216B'}, {879 ,U'\u216C'}, {880 ,U'\u216D'}, + {881 ,U'\u216E'}, {882 ,U'\u216F'}, {883 ,U'\u2183'}, {884 ,U'\u24B6'}, {885 ,U'\u24B7'}, {886 ,U'\u24B8'}, {887 ,U'\u24B9'}, {888 ,U'\u24BA'}, {889 ,U'\u24BB'}, {890 ,U'\u24BC'}, {891 ,U'\u24BD'}, {892 ,U'\u24BE'}, {893 ,U'\u24BF'}, {894 ,U'\u24C0'}, {895 ,U'\u24C1'}, {896 ,U'\u24C2'}, + {897 ,U'\u24C3'}, {898 ,U'\u24C4'}, {899 ,U'\u24C5'}, {900 ,U'\u24C6'}, {901 ,U'\u24C7'}, {902 ,U'\u24C8'}, {903 ,U'\u24C9'}, {904 ,U'\u24CA'}, {905 ,U'\u24CB'}, {906 ,U'\u24CC'}, {907 ,U'\u24CD'}, {908 ,U'\u24CE'}, {909 ,U'\u24CF'}, {910 ,U'\u2C00'}, {911 ,U'\u2C01'}, {912 ,U'\u2C02'}, + {913 ,U'\u2C03'}, {914 ,U'\u2C04'}, {915 ,U'\u2C05'}, {916 ,U'\u2C06'}, {917 ,U'\u2C07'}, {918 ,U'\u2C08'}, {919 ,U'\u2C09'}, {920 ,U'\u2C0A'}, {921 ,U'\u2C0B'}, {922 ,U'\u2C0C'}, {923 ,U'\u2C0D'}, {924 ,U'\u2C0E'}, {925 ,U'\u2C0F'}, {926 ,U'\u2C10'}, {927 ,U'\u2C11'}, {928 ,U'\u2C12'}, + {929 ,U'\u2C13'}, {930 ,U'\u2C14'}, {931 ,U'\u2C15'}, {932 ,U'\u2C16'}, {933 ,U'\u2C17'}, {934 ,U'\u2C18'}, {935 ,U'\u2C19'}, {936 ,U'\u2C1A'}, {937 ,U'\u2C1B'}, {938 ,U'\u2C1C'}, {939 ,U'\u2C1D'}, {940 ,U'\u2C1E'}, {941 ,U'\u2C1F'}, {942 ,U'\u2C20'}, {943 ,U'\u2C21'}, {944 ,U'\u2C22'}, + {945 ,U'\u2C23'}, {946 ,U'\u2C24'}, {947 ,U'\u2C25'}, {948 ,U'\u2C26'}, {949 ,U'\u2C27'}, {950 ,U'\u2C28'}, {951 ,U'\u2C29'}, {952 ,U'\u2C2A'}, {953 ,U'\u2C2B'}, {954 ,U'\u2C2C'}, {955 ,U'\u2C2D'}, {956 ,U'\u2C2E'}, {957 ,U'\u2C2F'}, {958 ,U'\u2C60'}, {959 ,U'\u2C62'}, {960 ,U'\u2C63'}, + {961 ,U'\u2C64'}, {962 ,U'\u2C67'}, {963 ,U'\u2C69'}, {964 ,U'\u2C6B'}, {965 ,U'\u2C6D'}, {966 ,U'\u2C6E'}, {967 ,U'\u2C6F'}, {968 ,U'\u2C70'}, {969 ,U'\u2C72'}, {970 ,U'\u2C75'}, {971 ,U'\u2C7E'}, {972 ,U'\u2C7F'}, {973 ,U'\u2C80'}, {974 ,U'\u2C82'}, {975 ,U'\u2C84'}, {976 ,U'\u2C86'}, + {977 ,U'\u2C88'}, {978 ,U'\u2C8A'}, {979 ,U'\u2C8C'}, {980 ,U'\u2C8E'}, {981 ,U'\u2C90'}, {982 ,U'\u2C92'}, {983 ,U'\u2C94'}, {984 ,U'\u2C96'}, {985 ,U'\u2C98'}, {986 ,U'\u2C9A'}, {987 ,U'\u2C9C'}, {988 ,U'\u2C9E'}, {989 ,U'\u2CA0'}, {990 ,U'\u2CA2'}, {991 ,U'\u2CA4'}, {992 ,U'\u2CA6'}, + {993 ,U'\u2CA8'}, {994 ,U'\u2CAA'}, {995 ,U'\u2CAC'}, {996 ,U'\u2CAE'}, {997 ,U'\u2CB0'}, {998 ,U'\u2CB2'}, {999 ,U'\u2CB4'}, {1000 ,U'\u2CB6'}, {1001 ,U'\u2CB8'}, {1002 ,U'\u2CBA'}, {1003 ,U'\u2CBC'}, {1004 ,U'\u2CBE'}, {1005 ,U'\u2CC0'}, {1006 ,U'\u2CC2'}, {1007 ,U'\u2CC4'}, {1008 ,U'\u2CC6'}, + {1009 ,U'\u2CC8'}, {1010 ,U'\u2CCA'}, {1011 ,U'\u2CCC'}, {1012 ,U'\u2CCE'}, {1013 ,U'\u2CD0'}, {1014 ,U'\u2CD2'}, {1015 ,U'\u2CD4'}, {1016 ,U'\u2CD6'}, {1017 ,U'\u2CD8'}, {1018 ,U'\u2CDA'}, {1019 ,U'\u2CDC'}, {1020 ,U'\u2CDE'}, {1021 ,U'\u2CE0'}, {1022 ,U'\u2CE2'}, {1023 ,U'\u2CEB'}, {1024 ,U'\u2CED'}, + {1025 ,U'\u2CF2'}, {1026 ,U'\uA640'}, {1027 ,U'\uA642'}, {1028 ,U'\uA644'}, {1029 ,U'\uA646'}, {1030 ,U'\uA648'}, {1031 ,U'\uA64A'}, {1032 ,U'\uA64C'}, {1033 ,U'\uA64E'}, {1034 ,U'\uA650'}, {1035 ,U'\uA652'}, {1036 ,U'\uA654'}, {1037 ,U'\uA656'}, {1038 ,U'\uA658'}, {1039 ,U'\uA65A'}, {1040 ,U'\uA65C'}, + {1041 ,U'\uA65E'}, {1042 ,U'\uA660'}, {1043 ,U'\uA662'}, {1044 ,U'\uA664'}, {1045 ,U'\uA666'}, {1046 ,U'\uA668'}, {1047 ,U'\uA66A'}, {1048 ,U'\uA66C'}, {1049 ,U'\uA680'}, {1050 ,U'\uA682'}, {1051 ,U'\uA684'}, {1052 ,U'\uA686'}, {1053 ,U'\uA688'}, {1054 ,U'\uA68A'}, {1055 ,U'\uA68C'}, {1056 ,U'\uA68E'}, + {1057 ,U'\uA690'}, {1058 ,U'\uA692'}, {1059 ,U'\uA694'}, {1060 ,U'\uA696'}, {1061 ,U'\uA698'}, {1062 ,U'\uA69A'}, {1063 ,U'\uA722'}, {1064 ,U'\uA724'}, {1065 ,U'\uA726'}, {1066 ,U'\uA728'}, {1067 ,U'\uA72A'}, {1068 ,U'\uA72C'}, {1069 ,U'\uA72E'}, {1070 ,U'\uA732'}, {1071 ,U'\uA734'}, {1072 ,U'\uA736'}, + {1073 ,U'\uA738'}, {1074 ,U'\uA73A'}, {1075 ,U'\uA73C'}, {1076 ,U'\uA73E'}, {1077 ,U'\uA740'}, {1078 ,U'\uA742'}, {1079 ,U'\uA744'}, {1080 ,U'\uA746'}, {1081 ,U'\uA748'}, {1082 ,U'\uA74A'}, {1083 ,U'\uA74C'}, {1084 ,U'\uA74E'}, {1085 ,U'\uA750'}, {1086 ,U'\uA752'}, {1087 ,U'\uA754'}, {1088 ,U'\uA756'}, + {1089 ,U'\uA758'}, {1090 ,U'\uA75A'}, {1091 ,U'\uA75C'}, {1092 ,U'\uA75E'}, {1093 ,U'\uA760'}, {1094 ,U'\uA762'}, {1095 ,U'\uA764'}, {1096 ,U'\uA766'}, {1097 ,U'\uA768'}, {1098 ,U'\uA76A'}, {1099 ,U'\uA76C'}, {1100 ,U'\uA76E'}, {1101 ,U'\uA779'}, {1102 ,U'\uA77B'}, {1103 ,U'\uA77D'}, {1104 ,U'\uA77E'}, + {1105 ,U'\uA780'}, {1106 ,U'\uA782'}, {1107 ,U'\uA784'}, {1108 ,U'\uA786'}, {1109 ,U'\uA78B'}, {1110 ,U'\uA78D'}, {1111 ,U'\uA790'}, {1112 ,U'\uA792'}, {1113 ,U'\uA796'}, {1114 ,U'\uA798'}, {1115 ,U'\uA79A'}, {1116 ,U'\uA79C'}, {1117 ,U'\uA79E'}, {1118 ,U'\uA7A0'}, {1119 ,U'\uA7A2'}, {1120 ,U'\uA7A4'}, + {1121 ,U'\uA7A6'}, {1122 ,U'\uA7A8'}, {1123 ,U'\uA7AA'}, {1124 ,U'\uA7AB'}, {1125 ,U'\uA7AC'}, {1126 ,U'\uA7AD'}, {1127 ,U'\uA7AE'}, {1128 ,U'\uA7B0'}, {1129 ,U'\uA7B1'}, {1130 ,U'\uA7B2'}, {1131 ,U'\uA7B3'}, {1132 ,U'\uA7B4'}, {1133 ,U'\uA7B6'}, {1134 ,U'\uA7B8'}, {1135 ,U'\uA7BA'}, {1136 ,U'\uA7BC'}, + {1137 ,U'\uA7BE'}, {1138 ,U'\uA7C0'}, {1139 ,U'\uA7C2'}, {1140 ,U'\uA7C4'}, {1141 ,U'\uA7C5'}, {1142 ,U'\uA7C6'}, {1143 ,U'\uA7C7'}, {1144 ,U'\uA7C9'}, {1145 ,U'\uA7CB'}, {1146 ,U'\uA7CC'}, {1147 ,U'\uA7D0'}, {1148 ,U'\uA7D6'}, {1149 ,U'\uA7D8'}, {1150 ,U'\uA7DA'}, {1151 ,U'\uA7DC'}, {1152 ,U'\uA7F5'}, + {1153 ,U'\uFF21'}, {1154 ,U'\uFF22'}, {1155 ,U'\uFF23'}, {1156 ,U'\uFF24'}, {1157 ,U'\uFF25'}, {1158 ,U'\uFF26'}, {1159 ,U'\uFF27'}, {1160 ,U'\uFF28'}, {1161 ,U'\uFF29'}, {1162 ,U'\uFF2A'}, {1163 ,U'\uFF2B'}, {1164 ,U'\uFF2C'}, {1165 ,U'\uFF2D'}, {1166 ,U'\uFF2E'}, {1167 ,U'\uFF2F'}, {1168 ,U'\uFF30'}, + {1169 ,U'\uFF31'}, {1170 ,U'\uFF32'}, {1171 ,U'\uFF33'}, {1172 ,U'\uFF34'}, {1173 ,U'\uFF35'}, {1174 ,U'\uFF36'}, {1175 ,U'\uFF37'}, {1176 ,U'\uFF38'}, {1177 ,U'\uFF39'}, {1178 ,U'\uFF3A'}, {1179 ,U'\U00010400'}, {1181 ,U'\U00010401'}, {1183 ,U'\U00010402'}, {1185 ,U'\U00010403'}, {1187 ,U'\U00010404'}, {1189 ,U'\U00010405'}, + {1191 ,U'\U00010406'}, {1193 ,U'\U00010407'}, {1195 ,U'\U00010408'}, {1197 ,U'\U00010409'}, {1199 ,U'\U0001040A'}, {1201 ,U'\U0001040B'}, {1203 ,U'\U0001040C'}, {1205 ,U'\U0001040D'}, {1207 ,U'\U0001040E'}, {1209 ,U'\U0001040F'}, {1211 ,U'\U00010410'}, {1213 ,U'\U00010411'}, {1215 ,U'\U00010412'}, {1217 ,U'\U00010413'}, {1219 ,U'\U00010414'}, {1221 ,U'\U00010415'}, + {1223 ,U'\U00010416'}, {1225 ,U'\U00010417'}, {1227 ,U'\U00010418'}, {1229 ,U'\U00010419'}, {1231 ,U'\U0001041A'}, {1233 ,U'\U0001041B'}, {1235 ,U'\U0001041C'}, {1237 ,U'\U0001041D'}, {1239 ,U'\U0001041E'}, {1241 ,U'\U0001041F'}, {1243 ,U'\U00010420'}, {1245 ,U'\U00010421'}, {1247 ,U'\U00010422'}, {1249 ,U'\U00010423'}, {1251 ,U'\U00010424'}, {1253 ,U'\U00010425'}, + {1255 ,U'\U00010426'}, {1257 ,U'\U00010427'}, {1259 ,U'\U000104B0'}, {1261 ,U'\U000104B1'}, {1263 ,U'\U000104B2'}, {1265 ,U'\U000104B3'}, {1267 ,U'\U000104B4'}, {1269 ,U'\U000104B5'}, {1271 ,U'\U000104B6'}, {1273 ,U'\U000104B7'}, {1275 ,U'\U000104B8'}, {1277 ,U'\U000104B9'}, {1279 ,U'\U000104BA'}, {1281 ,U'\U000104BB'}, {1283 ,U'\U000104BC'}, {1285 ,U'\U000104BD'}, + {1287 ,U'\U000104BE'}, {1289 ,U'\U000104BF'}, {1291 ,U'\U000104C0'}, {1293 ,U'\U000104C1'}, {1295 ,U'\U000104C2'}, {1297 ,U'\U000104C3'}, {1299 ,U'\U000104C4'}, {1301 ,U'\U000104C5'}, {1303 ,U'\U000104C6'}, {1305 ,U'\U000104C7'}, {1307 ,U'\U000104C8'}, {1309 ,U'\U000104C9'}, {1311 ,U'\U000104CA'}, {1313 ,U'\U000104CB'}, {1315 ,U'\U000104CC'}, {1317 ,U'\U000104CD'}, + {1319 ,U'\U000104CE'}, {1321 ,U'\U000104CF'}, {1323 ,U'\U000104D0'}, {1325 ,U'\U000104D1'}, {1327 ,U'\U000104D2'}, {1329 ,U'\U000104D3'}, {1331 ,U'\U00010570'}, {1333 ,U'\U00010571'}, {1335 ,U'\U00010572'}, {1337 ,U'\U00010573'}, {1339 ,U'\U00010574'}, {1341 ,U'\U00010575'}, {1343 ,U'\U00010576'}, {1345 ,U'\U00010577'}, {1347 ,U'\U00010578'}, {1349 ,U'\U00010579'}, + {1351 ,U'\U0001057A'}, {1353 ,U'\U0001057C'}, {1355 ,U'\U0001057D'}, {1357 ,U'\U0001057E'}, {1359 ,U'\U0001057F'}, {1361 ,U'\U00010580'}, {1363 ,U'\U00010581'}, {1365 ,U'\U00010582'}, {1367 ,U'\U00010583'}, {1369 ,U'\U00010584'}, {1371 ,U'\U00010585'}, {1373 ,U'\U00010586'}, {1375 ,U'\U00010587'}, {1377 ,U'\U00010588'}, {1379 ,U'\U00010589'}, {1381 ,U'\U0001058A'}, + {1383 ,U'\U0001058C'}, {1385 ,U'\U0001058D'}, {1387 ,U'\U0001058E'}, {1389 ,U'\U0001058F'}, {1391 ,U'\U00010590'}, {1393 ,U'\U00010591'}, {1395 ,U'\U00010592'}, {1397 ,U'\U00010594'}, {1399 ,U'\U00010595'}, {1401 ,U'\U00010C80'}, {1403 ,U'\U00010C81'}, {1405 ,U'\U00010C82'}, {1407 ,U'\U00010C83'}, {1409 ,U'\U00010C84'}, {1411 ,U'\U00010C85'}, {1413 ,U'\U00010C86'}, + {1415 ,U'\U00010C87'}, {1417 ,U'\U00010C88'}, {1419 ,U'\U00010C89'}, {1421 ,U'\U00010C8A'}, {1423 ,U'\U00010C8B'}, {1425 ,U'\U00010C8C'}, {1427 ,U'\U00010C8D'}, {1429 ,U'\U00010C8E'}, {1431 ,U'\U00010C8F'}, {1433 ,U'\U00010C90'}, {1435 ,U'\U00010C91'}, {1437 ,U'\U00010C92'}, {1439 ,U'\U00010C93'}, {1441 ,U'\U00010C94'}, {1443 ,U'\U00010C95'}, {1445 ,U'\U00010C96'}, + {1447 ,U'\U00010C97'}, {1449 ,U'\U00010C98'}, {1451 ,U'\U00010C99'}, {1453 ,U'\U00010C9A'}, {1455 ,U'\U00010C9B'}, {1457 ,U'\U00010C9C'}, {1459 ,U'\U00010C9D'}, {1461 ,U'\U00010C9E'}, {1463 ,U'\U00010C9F'}, {1465 ,U'\U00010CA0'}, {1467 ,U'\U00010CA1'}, {1469 ,U'\U00010CA2'}, {1471 ,U'\U00010CA3'}, {1473 ,U'\U00010CA4'}, {1475 ,U'\U00010CA5'}, {1477 ,U'\U00010CA6'}, + {1479 ,U'\U00010CA7'}, {1481 ,U'\U00010CA8'}, {1483 ,U'\U00010CA9'}, {1485 ,U'\U00010CAA'}, {1487 ,U'\U00010CAB'}, {1489 ,U'\U00010CAC'}, {1491 ,U'\U00010CAD'}, {1493 ,U'\U00010CAE'}, {1495 ,U'\U00010CAF'}, {1497 ,U'\U00010CB0'}, {1499 ,U'\U00010CB1'}, {1501 ,U'\U00010CB2'}, {1503 ,U'\U00010D50'}, {1505 ,U'\U00010D51'}, {1507 ,U'\U00010D52'}, {1509 ,U'\U00010D53'}, + {1511 ,U'\U00010D54'}, {1513 ,U'\U00010D55'}, {1515 ,U'\U00010D56'}, {1517 ,U'\U00010D57'}, {1519 ,U'\U00010D58'}, {1521 ,U'\U00010D59'}, {1523 ,U'\U00010D5A'}, {1525 ,U'\U00010D5B'}, {1527 ,U'\U00010D5C'}, {1529 ,U'\U00010D5D'}, {1531 ,U'\U00010D5E'}, {1533 ,U'\U00010D5F'}, {1535 ,U'\U00010D60'}, {1537 ,U'\U00010D61'}, {1539 ,U'\U00010D62'}, {1541 ,U'\U00010D63'}, + {1543 ,U'\U00010D64'}, {1545 ,U'\U00010D65'}, {1547 ,U'\U000118A0'}, {1549 ,U'\U000118A1'}, {1551 ,U'\U000118A2'}, {1553 ,U'\U000118A3'}, {1555 ,U'\U000118A4'}, {1557 ,U'\U000118A5'}, {1559 ,U'\U000118A6'}, {1561 ,U'\U000118A7'}, {1563 ,U'\U000118A8'}, {1565 ,U'\U000118A9'}, {1567 ,U'\U000118AA'}, {1569 ,U'\U000118AB'}, {1571 ,U'\U000118AC'}, {1573 ,U'\U000118AD'}, + {1575 ,U'\U000118AE'}, {1577 ,U'\U000118AF'}, {1579 ,U'\U000118B0'}, {1581 ,U'\U000118B1'}, {1583 ,U'\U000118B2'}, {1585 ,U'\U000118B3'}, {1587 ,U'\U000118B4'}, {1589 ,U'\U000118B5'}, {1591 ,U'\U000118B6'}, {1593 ,U'\U000118B7'}, {1595 ,U'\U000118B8'}, {1597 ,U'\U000118B9'}, {1599 ,U'\U000118BA'}, {1601 ,U'\U000118BB'}, {1603 ,U'\U000118BC'}, {1605 ,U'\U000118BD'}, + {1607 ,U'\U000118BE'}, {1609 ,U'\U000118BF'}, {1611 ,U'\U00016E40'}, {1613 ,U'\U00016E41'}, {1615 ,U'\U00016E42'}, {1617 ,U'\U00016E43'}, {1619 ,U'\U00016E44'}, {1621 ,U'\U00016E45'}, {1623 ,U'\U00016E46'}, {1625 ,U'\U00016E47'}, {1627 ,U'\U00016E48'}, {1629 ,U'\U00016E49'}, {1631 ,U'\U00016E4A'}, {1633 ,U'\U00016E4B'}, {1635 ,U'\U00016E4C'}, {1637 ,U'\U00016E4D'}, + {1639 ,U'\U00016E4E'}, {1641 ,U'\U00016E4F'}, {1643 ,U'\U00016E50'}, {1645 ,U'\U00016E51'}, {1647 ,U'\U00016E52'}, {1649 ,U'\U00016E53'}, {1651 ,U'\U00016E54'}, {1653 ,U'\U00016E55'}, {1655 ,U'\U00016E56'}, {1657 ,U'\U00016E57'}, {1659 ,U'\U00016E58'}, {1661 ,U'\U00016E59'}, {1663 ,U'\U00016E5A'}, {1665 ,U'\U00016E5B'}, {1667 ,U'\U00016E5C'}, {1669 ,U'\U00016E5D'}, + {1671 ,U'\U00016E5E'}, {1673 ,U'\U00016E5F'}, {1675 ,U'\U0001E900'}, {1677 ,U'\U0001E901'}, {1679 ,U'\U0001E902'}, {1681 ,U'\U0001E903'}, {1683 ,U'\U0001E904'}, {1685 ,U'\U0001E905'}, {1687 ,U'\U0001E906'}, {1689 ,U'\U0001E907'}, {1691 ,U'\U0001E908'}, {1693 ,U'\U0001E909'}, {1695 ,U'\U0001E90A'}, {1697 ,U'\U0001E90B'}, {1699 ,U'\U0001E90C'}, {1701 ,U'\U0001E90D'}, + {1703 ,U'\U0001E90E'}, {1705 ,U'\U0001E90F'}, {1707 ,U'\U0001E910'}, {1709 ,U'\U0001E911'}, {1711 ,U'\U0001E912'}, {1713 ,U'\U0001E913'}, {1715 ,U'\U0001E914'}, {1717 ,U'\U0001E915'}, {1719 ,U'\U0001E916'}, {1721 ,U'\U0001E917'}, {1723 ,U'\U0001E918'}, {1725 ,U'\U0001E919'}, {1727 ,U'\U0001E91A'}, {1729 ,U'\U0001E91B'}, {1731 ,U'\U0001E91C'}, {1733 ,U'\U0001E91D'}, + {1735 ,U'\U0001E91E'}, {1737 ,U'\U0001E91F'}, {1739 ,U'\U0001E920'}, {1741 ,U'\U0001E921'}, {1743 , 0} }; - constexpr size_t uppercase_source_chars_length = 1393; + constexpr size_t uppercase_source_chars_length = 1460; const char16_t lowercase_chars[] = u"\u0061\u0062\u0063\u0064\u0065\u0066\u0067\u0068\u0069\u006A\u006B\u006C\u006D\u006E\u006F\u0070" @@ -350,57 +362,61 @@ namespace sysstr::util::unicode u"\uAB92\uAB93\uAB94\uAB95\uAB96\uAB97\uAB98\uAB99\uAB9A\uAB9B\uAB9C\uAB9D\uAB9E\uAB9F\uABA0\uABA1" u"\uABA2\uABA3\uABA4\uABA5\uABA6\uABA7\uABA8\uABA9\uABAA\uABAB\uABAC\uABAD\uABAE\uABAF\uABB0\uABB1" u"\uABB2\uABB3\uABB4\uABB5\uABB6\uABB7\uABB8\uABB9\uABBA\uABBB\uABBC\uABBD\uABBE\uABBF\u13F8\u13F9" - u"\u13FA\u13FB\u13FC\u13FD\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB" - u"\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB" - u"\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u10F7\u10F8\u10F9\u10FA\u10FD" - u"\u10FE\u10FF\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B" - u"\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B" - u"\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B" - u"\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B" - u"\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95\u00DF\u1EA1\u1EA3" - u"\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3" - u"\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3" - u"\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF\u1F00\u1F01" - u"\u1F02\u1F03\u1F04\u1F05\u1F06\u1F07\u1F10\u1F11\u1F12\u1F13\u1F14\u1F15\u1F20\u1F21\u1F22\u1F23" - u"\u1F24\u1F25\u1F26\u1F27\u1F30\u1F31\u1F32\u1F33\u1F34\u1F35\u1F36\u1F37\u1F40\u1F41\u1F42\u1F43" - u"\u1F44\u1F45\u1F51\u1F53\u1F55\u1F57\u1F60\u1F61\u1F62\u1F63\u1F64\u1F65\u1F66\u1F67\u1F80\u1F81" - u"\u1F82\u1F83\u1F84\u1F85\u1F86\u1F87\u1F90\u1F91\u1F92\u1F93\u1F94\u1F95\u1F96\u1F97\u1FA0\u1FA1" - u"\u1FA2\u1FA3\u1FA4\u1FA5\u1FA6\u1FA7\u1FB0\u1FB1\u1F70\u1F71\u1FB3\u1F72\u1F73\u1F74\u1F75\u1FC3" - u"\u1FD0\u1FD1\u1F76\u1F77\u1FE0\u1FE1\u1F7A\u1F7B\u1FE5\u1F78\u1F79\u1F7C\u1F7D\u1FF3\u03C9\u006B" - u"\u00E5\u214E\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179\u217A\u217B\u217C\u217D" - u"\u217E\u217F\u2184\u24D0\u24D1\u24D2\u24D3\u24D4\u24D5\u24D6\u24D7\u24D8\u24D9\u24DA\u24DB\u24DC" - u"\u24DD\u24DE\u24DF\u24E0\u24E1\u24E2\u24E3\u24E4\u24E5\u24E6\u24E7\u24E8\u24E9\u2C30\u2C31\u2C32" - u"\u2C33\u2C34\u2C35\u2C36\u2C37\u2C38\u2C39\u2C3A\u2C3B\u2C3C\u2C3D\u2C3E\u2C3F\u2C40\u2C41\u2C42" - u"\u2C43\u2C44\u2C45\u2C46\u2C47\u2C48\u2C49\u2C4A\u2C4B\u2C4C\u2C4D\u2C4E\u2C4F\u2C50\u2C51\u2C52" - u"\u2C53\u2C54\u2C55\u2C56\u2C57\u2C58\u2C59\u2C5A\u2C5B\u2C5C\u2C5D\u2C5E\u2C61\u026B\u1D7D\u027D" - u"\u2C68\u2C6A\u2C6C\u0251\u0271\u0250\u0252\u2C73\u2C76\u023F\u0240\u2C81\u2C83\u2C85\u2C87\u2C89" - u"\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9" - u"\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9" - u"\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CEC\u2CEE\u2CF3" - u"\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F" - u"\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691" - u"\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F\uA733\uA735\uA737\uA739" - u"\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759" - u"\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA77A\uA77C\u1D79\uA77F\uA781" - u"\uA783\uA785\uA787\uA78C\u0265\uA791\uA793\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7" - u"\uA7A9\u0266\u025C\u0261\u026C\u026A\u029E\u0287\u029D\uAB53\uA7B5\uA7B7\uA7B9\uA7BB\uA7BD\uA7BF" - u"\uA7C3\uA794\u0282\u1D8E\uA7C8\uA7CA\uA7F6\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46\uFF47\uFF48\uFF49" - u"\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56\uFF57\uFF58\uFF59" - u"\uFF5A\U00010428\U00010429\U0001042A\U0001042B\U0001042C\U0001042D\U0001042E\U0001042F\U00010430\U00010431\U00010432\U00010433\U00010434\U00010435\U00010436" - u"\U00010437\U00010438\U00010439\U0001043A\U0001043B\U0001043C\U0001043D\U0001043E\U0001043F\U00010440\U00010441\U00010442\U00010443\U00010444\U00010445\U00010446" - u"\U00010447\U00010448\U00010449\U0001044A\U0001044B\U0001044C\U0001044D\U0001044E\U0001044F\U000104D8\U000104D9\U000104DA\U000104DB\U000104DC\U000104DD\U000104DE" - u"\U000104DF\U000104E0\U000104E1\U000104E2\U000104E3\U000104E4\U000104E5\U000104E6\U000104E7\U000104E8\U000104E9\U000104EA\U000104EB\U000104EC\U000104ED\U000104EE" - u"\U000104EF\U000104F0\U000104F1\U000104F2\U000104F3\U000104F4\U000104F5\U000104F6\U000104F7\U000104F8\U000104F9\U000104FA\U000104FB\U00010CC0\U00010CC1\U00010CC2" - u"\U00010CC3\U00010CC4\U00010CC5\U00010CC6\U00010CC7\U00010CC8\U00010CC9\U00010CCA\U00010CCB\U00010CCC\U00010CCD\U00010CCE\U00010CCF\U00010CD0\U00010CD1\U00010CD2" - u"\U00010CD3\U00010CD4\U00010CD5\U00010CD6\U00010CD7\U00010CD8\U00010CD9\U00010CDA\U00010CDB\U00010CDC\U00010CDD\U00010CDE\U00010CDF\U00010CE0\U00010CE1\U00010CE2" - u"\U00010CE3\U00010CE4\U00010CE5\U00010CE6\U00010CE7\U00010CE8\U00010CE9\U00010CEA\U00010CEB\U00010CEC\U00010CED\U00010CEE\U00010CEF\U00010CF0\U00010CF1\U00010CF2" - u"\U000118C0\U000118C1\U000118C2\U000118C3\U000118C4\U000118C5\U000118C6\U000118C7\U000118C8\U000118C9\U000118CA\U000118CB\U000118CC\U000118CD\U000118CE\U000118CF" - u"\U000118D0\U000118D1\U000118D2\U000118D3\U000118D4\U000118D5\U000118D6\U000118D7\U000118D8\U000118D9\U000118DA\U000118DB\U000118DC\U000118DD\U000118DE\U000118DF" - u"\U00016E60\U00016E61\U00016E62\U00016E63\U00016E64\U00016E65\U00016E66\U00016E67\U00016E68\U00016E69\U00016E6A\U00016E6B\U00016E6C\U00016E6D\U00016E6E\U00016E6F" - u"\U00016E70\U00016E71\U00016E72\U00016E73\U00016E74\U00016E75\U00016E76\U00016E77\U00016E78\U00016E79\U00016E7A\U00016E7B\U00016E7C\U00016E7D\U00016E7E\U00016E7F" - u"\U0001E922\U0001E923\U0001E924\U0001E925\U0001E926\U0001E927\U0001E928\U0001E929\U0001E92A\U0001E92B\U0001E92C\U0001E92D\U0001E92E\U0001E92F\U0001E930\U0001E931" - u"\U0001E932\U0001E933\U0001E934\U0001E935\U0001E936\U0001E937\U0001E938\U0001E939\U0001E93A\U0001E93B\U0001E93C\U0001E93D\U0001E93E\U0001E93F\U0001E940\U0001E941" - u"\U0001E942\U0001E943"; + u"\u13FA\u13FB\u13FC\u13FD\u1C8A\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA" + u"\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA" + u"\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u10F7\u10F8\u10F9\u10FA" + u"\u10FD\u10FE\u10FF\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19" + u"\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39" + u"\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59" + u"\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79" + u"\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95\u00DF\u1EA1" + u"\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1" + u"\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1" + u"\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF\u1F00" + u"\u1F01\u1F02\u1F03\u1F04\u1F05\u1F06\u1F07\u1F10\u1F11\u1F12\u1F13\u1F14\u1F15\u1F20\u1F21\u1F22" + u"\u1F23\u1F24\u1F25\u1F26\u1F27\u1F30\u1F31\u1F32\u1F33\u1F34\u1F35\u1F36\u1F37\u1F40\u1F41\u1F42" + u"\u1F43\u1F44\u1F45\u1F51\u1F53\u1F55\u1F57\u1F60\u1F61\u1F62\u1F63\u1F64\u1F65\u1F66\u1F67\u1F80" + u"\u1F81\u1F82\u1F83\u1F84\u1F85\u1F86\u1F87\u1F90\u1F91\u1F92\u1F93\u1F94\u1F95\u1F96\u1F97\u1FA0" + u"\u1FA1\u1FA2\u1FA3\u1FA4\u1FA5\u1FA6\u1FA7\u1FB0\u1FB1\u1F70\u1F71\u1FB3\u1F72\u1F73\u1F74\u1F75" + u"\u1FC3\u1FD0\u1FD1\u1F76\u1F77\u1FE0\u1FE1\u1F7A\u1F7B\u1FE5\u1F78\u1F79\u1F7C\u1F7D\u1FF3\u03C9" + u"\u006B\u00E5\u214E\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179\u217A\u217B\u217C" + u"\u217D\u217E\u217F\u2184\u24D0\u24D1\u24D2\u24D3\u24D4\u24D5\u24D6\u24D7\u24D8\u24D9\u24DA\u24DB" + u"\u24DC\u24DD\u24DE\u24DF\u24E0\u24E1\u24E2\u24E3\u24E4\u24E5\u24E6\u24E7\u24E8\u24E9\u2C30\u2C31" + u"\u2C32\u2C33\u2C34\u2C35\u2C36\u2C37\u2C38\u2C39\u2C3A\u2C3B\u2C3C\u2C3D\u2C3E\u2C3F\u2C40\u2C41" + u"\u2C42\u2C43\u2C44\u2C45\u2C46\u2C47\u2C48\u2C49\u2C4A\u2C4B\u2C4C\u2C4D\u2C4E\u2C4F\u2C50\u2C51" + u"\u2C52\u2C53\u2C54\u2C55\u2C56\u2C57\u2C58\u2C59\u2C5A\u2C5B\u2C5C\u2C5D\u2C5E\u2C5F\u2C61\u026B" + u"\u1D7D\u027D\u2C68\u2C6A\u2C6C\u0251\u0271\u0250\u0252\u2C73\u2C76\u023F\u0240\u2C81\u2C83\u2C85" + u"\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5" + u"\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5" + u"\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CEC" + u"\u2CEE\u2CF3\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B" + u"\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D" + u"\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F\uA733\uA735" + u"\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755" + u"\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA77A\uA77C\u1D79" + u"\uA77F\uA781\uA783\uA785\uA787\uA78C\u0265\uA791\uA793\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3" + u"\uA7A5\uA7A7\uA7A9\u0266\u025C\u0261\u026C\u026A\u029E\u0287\u029D\uAB53\uA7B5\uA7B7\uA7B9\uA7BB" + u"\uA7BD\uA7BF\uA7C1\uA7C3\uA794\u0282\u1D8E\uA7C8\uA7CA\u0264\uA7CD\uA7D1\uA7D7\uA7D9\uA7DB\u019B" + u"\uA7F6\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F" + u"\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56\uFF57\uFF58\uFF59\uFF5A\U00010428\U00010429\U0001042A\U0001042B\U0001042C" + u"\U0001042D\U0001042E\U0001042F\U00010430\U00010431\U00010432\U00010433\U00010434\U00010435\U00010436\U00010437\U00010438\U00010439\U0001043A\U0001043B\U0001043C" + u"\U0001043D\U0001043E\U0001043F\U00010440\U00010441\U00010442\U00010443\U00010444\U00010445\U00010446\U00010447\U00010448\U00010449\U0001044A\U0001044B\U0001044C" + u"\U0001044D\U0001044E\U0001044F\U000104D8\U000104D9\U000104DA\U000104DB\U000104DC\U000104DD\U000104DE\U000104DF\U000104E0\U000104E1\U000104E2\U000104E3\U000104E4" + u"\U000104E5\U000104E6\U000104E7\U000104E8\U000104E9\U000104EA\U000104EB\U000104EC\U000104ED\U000104EE\U000104EF\U000104F0\U000104F1\U000104F2\U000104F3\U000104F4" + u"\U000104F5\U000104F6\U000104F7\U000104F8\U000104F9\U000104FA\U000104FB\U00010597\U00010598\U00010599\U0001059A\U0001059B\U0001059C\U0001059D\U0001059E\U0001059F" + u"\U000105A0\U000105A1\U000105A3\U000105A4\U000105A5\U000105A6\U000105A7\U000105A8\U000105A9\U000105AA\U000105AB\U000105AC\U000105AD\U000105AE\U000105AF\U000105B0" + u"\U000105B1\U000105B3\U000105B4\U000105B5\U000105B6\U000105B7\U000105B8\U000105B9\U000105BB\U000105BC\U00010CC0\U00010CC1\U00010CC2\U00010CC3\U00010CC4\U00010CC5" + u"\U00010CC6\U00010CC7\U00010CC8\U00010CC9\U00010CCA\U00010CCB\U00010CCC\U00010CCD\U00010CCE\U00010CCF\U00010CD0\U00010CD1\U00010CD2\U00010CD3\U00010CD4\U00010CD5" + u"\U00010CD6\U00010CD7\U00010CD8\U00010CD9\U00010CDA\U00010CDB\U00010CDC\U00010CDD\U00010CDE\U00010CDF\U00010CE0\U00010CE1\U00010CE2\U00010CE3\U00010CE4\U00010CE5" + u"\U00010CE6\U00010CE7\U00010CE8\U00010CE9\U00010CEA\U00010CEB\U00010CEC\U00010CED\U00010CEE\U00010CEF\U00010CF0\U00010CF1\U00010CF2\U00010D70\U00010D71\U00010D72" + u"\U00010D73\U00010D74\U00010D75\U00010D76\U00010D77\U00010D78\U00010D79\U00010D7A\U00010D7B\U00010D7C\U00010D7D\U00010D7E\U00010D7F\U00010D80\U00010D81\U00010D82" + u"\U00010D83\U00010D84\U00010D85\U000118C0\U000118C1\U000118C2\U000118C3\U000118C4\U000118C5\U000118C6\U000118C7\U000118C8\U000118C9\U000118CA\U000118CB\U000118CC" + u"\U000118CD\U000118CE\U000118CF\U000118D0\U000118D1\U000118D2\U000118D3\U000118D4\U000118D5\U000118D6\U000118D7\U000118D8\U000118D9\U000118DA\U000118DB\U000118DC" + u"\U000118DD\U000118DE\U000118DF\U00016E60\U00016E61\U00016E62\U00016E63\U00016E64\U00016E65\U00016E66\U00016E67\U00016E68\U00016E69\U00016E6A\U00016E6B\U00016E6C" + u"\U00016E6D\U00016E6E\U00016E6F\U00016E70\U00016E71\U00016E72\U00016E73\U00016E74\U00016E75\U00016E76\U00016E77\U00016E78\U00016E79\U00016E7A\U00016E7B\U00016E7C" + u"\U00016E7D\U00016E7E\U00016E7F\U0001E922\U0001E923\U0001E924\U0001E925\U0001E926\U0001E927\U0001E928\U0001E929\U0001E92A\U0001E92B\U0001E92C\U0001E92D\U0001E92E" + u"\U0001E92F\U0001E930\U0001E931\U0001E932\U0001E933\U0001E934\U0001E935\U0001E936\U0001E937\U0001E938\U0001E939\U0001E93A\U0001E93B\U0001E93C\U0001E93D\U0001E93E" + u"\U0001E93F\U0001E940\U0001E941\U0001E942\U0001E943"; const char_lookup lowercase_source_chars[] = { {0 ,U'\u0061'}, {1 ,U'\u0062'}, {2 ,U'\u0063'}, {3 ,U'\u0064'}, {4 ,U'\u0065'}, {5 ,U'\u0066'}, {6 ,U'\u0067'}, {7 ,U'\u0068'}, {8 ,U'\u0069'}, {9 ,U'\u006A'}, {10 ,U'\u006B'}, {11 ,U'\u006C'}, {12 ,U'\u006D'}, {13 ,U'\u006E'}, {14 ,U'\u006F'}, {15 ,U'\u0070'}, @@ -411,94 +427,98 @@ namespace sysstr::util::unicode {81 ,U'\u012B'}, {82 ,U'\u012D'}, {83 ,U'\u012F'}, {84 ,U'\u0131'}, {85 ,U'\u0133'}, {86 ,U'\u0135'}, {87 ,U'\u0137'}, {88 ,U'\u013A'}, {89 ,U'\u013C'}, {90 ,U'\u013E'}, {91 ,U'\u0140'}, {92 ,U'\u0142'}, {93 ,U'\u0144'}, {94 ,U'\u0146'}, {95 ,U'\u0148'}, {96 ,U'\u0149'}, {98 ,U'\u014B'}, {99 ,U'\u014D'}, {100 ,U'\u014F'}, {101 ,U'\u0151'}, {102 ,U'\u0153'}, {103 ,U'\u0155'}, {104 ,U'\u0157'}, {105 ,U'\u0159'}, {106 ,U'\u015B'}, {107 ,U'\u015D'}, {108 ,U'\u015F'}, {109 ,U'\u0161'}, {110 ,U'\u0163'}, {111 ,U'\u0165'}, {112 ,U'\u0167'}, {113 ,U'\u0169'}, {114 ,U'\u016B'}, {115 ,U'\u016D'}, {116 ,U'\u016F'}, {117 ,U'\u0171'}, {118 ,U'\u0173'}, {119 ,U'\u0175'}, {120 ,U'\u0177'}, {121 ,U'\u017A'}, {122 ,U'\u017C'}, {123 ,U'\u017E'}, {124 ,U'\u017F'}, {125 ,U'\u0180'}, {126 ,U'\u0183'}, {127 ,U'\u0185'}, {128 ,U'\u0188'}, {129 ,U'\u018C'}, - {130 ,U'\u0192'}, {131 ,U'\u0195'}, {132 ,U'\u0199'}, {133 ,U'\u019A'}, {134 ,U'\u019E'}, {135 ,U'\u01A1'}, {136 ,U'\u01A3'}, {137 ,U'\u01A5'}, {138 ,U'\u01A8'}, {139 ,U'\u01AD'}, {140 ,U'\u01B0'}, {141 ,U'\u01B4'}, {142 ,U'\u01B6'}, {143 ,U'\u01B9'}, {144 ,U'\u01BD'}, {145 ,U'\u01BF'}, - {146 ,U'\u01C5'}, {147 ,U'\u01C6'}, {148 ,U'\u01C8'}, {149 ,U'\u01C9'}, {150 ,U'\u01CB'}, {151 ,U'\u01CC'}, {152 ,U'\u01CE'}, {153 ,U'\u01D0'}, {154 ,U'\u01D2'}, {155 ,U'\u01D4'}, {156 ,U'\u01D6'}, {157 ,U'\u01D8'}, {158 ,U'\u01DA'}, {159 ,U'\u01DC'}, {160 ,U'\u01DD'}, {161 ,U'\u01DF'}, - {162 ,U'\u01E1'}, {163 ,U'\u01E3'}, {164 ,U'\u01E5'}, {165 ,U'\u01E7'}, {166 ,U'\u01E9'}, {167 ,U'\u01EB'}, {168 ,U'\u01ED'}, {169 ,U'\u01EF'}, {170 ,U'\u01F0'}, {172 ,U'\u01F2'}, {173 ,U'\u01F3'}, {174 ,U'\u01F5'}, {175 ,U'\u01F9'}, {176 ,U'\u01FB'}, {177 ,U'\u01FD'}, {178 ,U'\u01FF'}, - {179 ,U'\u0201'}, {180 ,U'\u0203'}, {181 ,U'\u0205'}, {182 ,U'\u0207'}, {183 ,U'\u0209'}, {184 ,U'\u020B'}, {185 ,U'\u020D'}, {186 ,U'\u020F'}, {187 ,U'\u0211'}, {188 ,U'\u0213'}, {189 ,U'\u0215'}, {190 ,U'\u0217'}, {191 ,U'\u0219'}, {192 ,U'\u021B'}, {193 ,U'\u021D'}, {194 ,U'\u021F'}, - {195 ,U'\u0223'}, {196 ,U'\u0225'}, {197 ,U'\u0227'}, {198 ,U'\u0229'}, {199 ,U'\u022B'}, {200 ,U'\u022D'}, {201 ,U'\u022F'}, {202 ,U'\u0231'}, {203 ,U'\u0233'}, {204 ,U'\u023C'}, {205 ,U'\u023F'}, {206 ,U'\u0240'}, {207 ,U'\u0242'}, {208 ,U'\u0247'}, {209 ,U'\u0249'}, {210 ,U'\u024B'}, - {211 ,U'\u024D'}, {212 ,U'\u024F'}, {213 ,U'\u0250'}, {214 ,U'\u0251'}, {215 ,U'\u0252'}, {216 ,U'\u0253'}, {217 ,U'\u0254'}, {218 ,U'\u0256'}, {219 ,U'\u0257'}, {220 ,U'\u0259'}, {221 ,U'\u025B'}, {222 ,U'\u025C'}, {223 ,U'\u0260'}, {224 ,U'\u0261'}, {225 ,U'\u0263'}, {226 ,U'\u0265'}, - {227 ,U'\u0266'}, {228 ,U'\u0268'}, {229 ,U'\u0269'}, {230 ,U'\u026A'}, {231 ,U'\u026B'}, {232 ,U'\u026C'}, {233 ,U'\u026F'}, {234 ,U'\u0271'}, {235 ,U'\u0272'}, {236 ,U'\u0275'}, {237 ,U'\u027D'}, {238 ,U'\u0280'}, {239 ,U'\u0282'}, {240 ,U'\u0283'}, {241 ,U'\u0287'}, {242 ,U'\u0288'}, - {243 ,U'\u0289'}, {244 ,U'\u028A'}, {245 ,U'\u028B'}, {246 ,U'\u028C'}, {247 ,U'\u0292'}, {248 ,U'\u029D'}, {249 ,U'\u029E'}, {250 ,U'\u0345'}, {251 ,U'\u0371'}, {252 ,U'\u0373'}, {253 ,U'\u0377'}, {254 ,U'\u037B'}, {255 ,U'\u037C'}, {256 ,U'\u037D'}, {257 ,U'\u0390'}, {260 ,U'\u03AC'}, - {261 ,U'\u03AD'}, {262 ,U'\u03AE'}, {263 ,U'\u03AF'}, {264 ,U'\u03B0'}, {267 ,U'\u03B1'}, {268 ,U'\u03B2'}, {269 ,U'\u03B3'}, {270 ,U'\u03B4'}, {271 ,U'\u03B5'}, {272 ,U'\u03B6'}, {273 ,U'\u03B7'}, {274 ,U'\u03B8'}, {275 ,U'\u03B9'}, {276 ,U'\u03BA'}, {277 ,U'\u03BB'}, {278 ,U'\u03BC'}, - {279 ,U'\u03BD'}, {280 ,U'\u03BE'}, {281 ,U'\u03BF'}, {282 ,U'\u03C0'}, {283 ,U'\u03C1'}, {284 ,U'\u03C2'}, {285 ,U'\u03C3'}, {286 ,U'\u03C4'}, {287 ,U'\u03C5'}, {288 ,U'\u03C6'}, {289 ,U'\u03C7'}, {290 ,U'\u03C8'}, {291 ,U'\u03C9'}, {292 ,U'\u03CA'}, {293 ,U'\u03CB'}, {294 ,U'\u03CC'}, - {295 ,U'\u03CD'}, {296 ,U'\u03CE'}, {297 ,U'\u03D0'}, {298 ,U'\u03D1'}, {299 ,U'\u03D5'}, {300 ,U'\u03D6'}, {301 ,U'\u03D7'}, {302 ,U'\u03D9'}, {303 ,U'\u03DB'}, {304 ,U'\u03DD'}, {305 ,U'\u03DF'}, {306 ,U'\u03E1'}, {307 ,U'\u03E3'}, {308 ,U'\u03E5'}, {309 ,U'\u03E7'}, {310 ,U'\u03E9'}, - {311 ,U'\u03EB'}, {312 ,U'\u03ED'}, {313 ,U'\u03EF'}, {314 ,U'\u03F0'}, {315 ,U'\u03F1'}, {316 ,U'\u03F2'}, {317 ,U'\u03F3'}, {318 ,U'\u03F5'}, {319 ,U'\u03F8'}, {320 ,U'\u03FB'}, {321 ,U'\u0430'}, {322 ,U'\u0431'}, {323 ,U'\u0432'}, {324 ,U'\u0433'}, {325 ,U'\u0434'}, {326 ,U'\u0435'}, - {327 ,U'\u0436'}, {328 ,U'\u0437'}, {329 ,U'\u0438'}, {330 ,U'\u0439'}, {331 ,U'\u043A'}, {332 ,U'\u043B'}, {333 ,U'\u043C'}, {334 ,U'\u043D'}, {335 ,U'\u043E'}, {336 ,U'\u043F'}, {337 ,U'\u0440'}, {338 ,U'\u0441'}, {339 ,U'\u0442'}, {340 ,U'\u0443'}, {341 ,U'\u0444'}, {342 ,U'\u0445'}, - {343 ,U'\u0446'}, {344 ,U'\u0447'}, {345 ,U'\u0448'}, {346 ,U'\u0449'}, {347 ,U'\u044A'}, {348 ,U'\u044B'}, {349 ,U'\u044C'}, {350 ,U'\u044D'}, {351 ,U'\u044E'}, {352 ,U'\u044F'}, {353 ,U'\u0450'}, {354 ,U'\u0451'}, {355 ,U'\u0452'}, {356 ,U'\u0453'}, {357 ,U'\u0454'}, {358 ,U'\u0455'}, - {359 ,U'\u0456'}, {360 ,U'\u0457'}, {361 ,U'\u0458'}, {362 ,U'\u0459'}, {363 ,U'\u045A'}, {364 ,U'\u045B'}, {365 ,U'\u045C'}, {366 ,U'\u045D'}, {367 ,U'\u045E'}, {368 ,U'\u045F'}, {369 ,U'\u0461'}, {370 ,U'\u0463'}, {371 ,U'\u0465'}, {372 ,U'\u0467'}, {373 ,U'\u0469'}, {374 ,U'\u046B'}, - {375 ,U'\u046D'}, {376 ,U'\u046F'}, {377 ,U'\u0471'}, {378 ,U'\u0473'}, {379 ,U'\u0475'}, {380 ,U'\u0477'}, {381 ,U'\u0479'}, {382 ,U'\u047B'}, {383 ,U'\u047D'}, {384 ,U'\u047F'}, {385 ,U'\u0481'}, {386 ,U'\u048B'}, {387 ,U'\u048D'}, {388 ,U'\u048F'}, {389 ,U'\u0491'}, {390 ,U'\u0493'}, - {391 ,U'\u0495'}, {392 ,U'\u0497'}, {393 ,U'\u0499'}, {394 ,U'\u049B'}, {395 ,U'\u049D'}, {396 ,U'\u049F'}, {397 ,U'\u04A1'}, {398 ,U'\u04A3'}, {399 ,U'\u04A5'}, {400 ,U'\u04A7'}, {401 ,U'\u04A9'}, {402 ,U'\u04AB'}, {403 ,U'\u04AD'}, {404 ,U'\u04AF'}, {405 ,U'\u04B1'}, {406 ,U'\u04B3'}, - {407 ,U'\u04B5'}, {408 ,U'\u04B7'}, {409 ,U'\u04B9'}, {410 ,U'\u04BB'}, {411 ,U'\u04BD'}, {412 ,U'\u04BF'}, {413 ,U'\u04C2'}, {414 ,U'\u04C4'}, {415 ,U'\u04C6'}, {416 ,U'\u04C8'}, {417 ,U'\u04CA'}, {418 ,U'\u04CC'}, {419 ,U'\u04CE'}, {420 ,U'\u04CF'}, {421 ,U'\u04D1'}, {422 ,U'\u04D3'}, - {423 ,U'\u04D5'}, {424 ,U'\u04D7'}, {425 ,U'\u04D9'}, {426 ,U'\u04DB'}, {427 ,U'\u04DD'}, {428 ,U'\u04DF'}, {429 ,U'\u04E1'}, {430 ,U'\u04E3'}, {431 ,U'\u04E5'}, {432 ,U'\u04E7'}, {433 ,U'\u04E9'}, {434 ,U'\u04EB'}, {435 ,U'\u04ED'}, {436 ,U'\u04EF'}, {437 ,U'\u04F1'}, {438 ,U'\u04F3'}, - {439 ,U'\u04F5'}, {440 ,U'\u04F7'}, {441 ,U'\u04F9'}, {442 ,U'\u04FB'}, {443 ,U'\u04FD'}, {444 ,U'\u04FF'}, {445 ,U'\u0501'}, {446 ,U'\u0503'}, {447 ,U'\u0505'}, {448 ,U'\u0507'}, {449 ,U'\u0509'}, {450 ,U'\u050B'}, {451 ,U'\u050D'}, {452 ,U'\u050F'}, {453 ,U'\u0511'}, {454 ,U'\u0513'}, - {455 ,U'\u0515'}, {456 ,U'\u0517'}, {457 ,U'\u0519'}, {458 ,U'\u051B'}, {459 ,U'\u051D'}, {460 ,U'\u051F'}, {461 ,U'\u0521'}, {462 ,U'\u0523'}, {463 ,U'\u0525'}, {464 ,U'\u0527'}, {465 ,U'\u0529'}, {466 ,U'\u052B'}, {467 ,U'\u052D'}, {468 ,U'\u052F'}, {469 ,U'\u0561'}, {470 ,U'\u0562'}, - {471 ,U'\u0563'}, {472 ,U'\u0564'}, {473 ,U'\u0565'}, {474 ,U'\u0566'}, {475 ,U'\u0567'}, {476 ,U'\u0568'}, {477 ,U'\u0569'}, {478 ,U'\u056A'}, {479 ,U'\u056B'}, {480 ,U'\u056C'}, {481 ,U'\u056D'}, {482 ,U'\u056E'}, {483 ,U'\u056F'}, {484 ,U'\u0570'}, {485 ,U'\u0571'}, {486 ,U'\u0572'}, - {487 ,U'\u0573'}, {488 ,U'\u0574'}, {489 ,U'\u0575'}, {490 ,U'\u0576'}, {491 ,U'\u0577'}, {492 ,U'\u0578'}, {493 ,U'\u0579'}, {494 ,U'\u057A'}, {495 ,U'\u057B'}, {496 ,U'\u057C'}, {497 ,U'\u057D'}, {498 ,U'\u057E'}, {499 ,U'\u057F'}, {500 ,U'\u0580'}, {501 ,U'\u0581'}, {502 ,U'\u0582'}, - {503 ,U'\u0583'}, {504 ,U'\u0584'}, {505 ,U'\u0585'}, {506 ,U'\u0586'}, {507 ,U'\u0587'}, {509 ,U'\u10D0'}, {510 ,U'\u10D1'}, {511 ,U'\u10D2'}, {512 ,U'\u10D3'}, {513 ,U'\u10D4'}, {514 ,U'\u10D5'}, {515 ,U'\u10D6'}, {516 ,U'\u10D7'}, {517 ,U'\u10D8'}, {518 ,U'\u10D9'}, {519 ,U'\u10DA'}, - {520 ,U'\u10DB'}, {521 ,U'\u10DC'}, {522 ,U'\u10DD'}, {523 ,U'\u10DE'}, {524 ,U'\u10DF'}, {525 ,U'\u10E0'}, {526 ,U'\u10E1'}, {527 ,U'\u10E2'}, {528 ,U'\u10E3'}, {529 ,U'\u10E4'}, {530 ,U'\u10E5'}, {531 ,U'\u10E6'}, {532 ,U'\u10E7'}, {533 ,U'\u10E8'}, {534 ,U'\u10E9'}, {535 ,U'\u10EA'}, - {536 ,U'\u10EB'}, {537 ,U'\u10EC'}, {538 ,U'\u10ED'}, {539 ,U'\u10EE'}, {540 ,U'\u10EF'}, {541 ,U'\u10F0'}, {542 ,U'\u10F1'}, {543 ,U'\u10F2'}, {544 ,U'\u10F3'}, {545 ,U'\u10F4'}, {546 ,U'\u10F5'}, {547 ,U'\u10F6'}, {548 ,U'\u10F7'}, {549 ,U'\u10F8'}, {550 ,U'\u10F9'}, {551 ,U'\u10FA'}, - {552 ,U'\u10FD'}, {553 ,U'\u10FE'}, {554 ,U'\u10FF'}, {555 ,U'\u13F8'}, {556 ,U'\u13F9'}, {557 ,U'\u13FA'}, {558 ,U'\u13FB'}, {559 ,U'\u13FC'}, {560 ,U'\u13FD'}, {561 ,U'\u1C80'}, {562 ,U'\u1C81'}, {563 ,U'\u1C82'}, {564 ,U'\u1C83'}, {565 ,U'\u1C84'}, {566 ,U'\u1C85'}, {567 ,U'\u1C86'}, - {568 ,U'\u1C87'}, {569 ,U'\u1C88'}, {570 ,U'\u1D79'}, {571 ,U'\u1D7D'}, {572 ,U'\u1D8E'}, {573 ,U'\u1E01'}, {574 ,U'\u1E03'}, {575 ,U'\u1E05'}, {576 ,U'\u1E07'}, {577 ,U'\u1E09'}, {578 ,U'\u1E0B'}, {579 ,U'\u1E0D'}, {580 ,U'\u1E0F'}, {581 ,U'\u1E11'}, {582 ,U'\u1E13'}, {583 ,U'\u1E15'}, - {584 ,U'\u1E17'}, {585 ,U'\u1E19'}, {586 ,U'\u1E1B'}, {587 ,U'\u1E1D'}, {588 ,U'\u1E1F'}, {589 ,U'\u1E21'}, {590 ,U'\u1E23'}, {591 ,U'\u1E25'}, {592 ,U'\u1E27'}, {593 ,U'\u1E29'}, {594 ,U'\u1E2B'}, {595 ,U'\u1E2D'}, {596 ,U'\u1E2F'}, {597 ,U'\u1E31'}, {598 ,U'\u1E33'}, {599 ,U'\u1E35'}, - {600 ,U'\u1E37'}, {601 ,U'\u1E39'}, {602 ,U'\u1E3B'}, {603 ,U'\u1E3D'}, {604 ,U'\u1E3F'}, {605 ,U'\u1E41'}, {606 ,U'\u1E43'}, {607 ,U'\u1E45'}, {608 ,U'\u1E47'}, {609 ,U'\u1E49'}, {610 ,U'\u1E4B'}, {611 ,U'\u1E4D'}, {612 ,U'\u1E4F'}, {613 ,U'\u1E51'}, {614 ,U'\u1E53'}, {615 ,U'\u1E55'}, - {616 ,U'\u1E57'}, {617 ,U'\u1E59'}, {618 ,U'\u1E5B'}, {619 ,U'\u1E5D'}, {620 ,U'\u1E5F'}, {621 ,U'\u1E61'}, {622 ,U'\u1E63'}, {623 ,U'\u1E65'}, {624 ,U'\u1E67'}, {625 ,U'\u1E69'}, {626 ,U'\u1E6B'}, {627 ,U'\u1E6D'}, {628 ,U'\u1E6F'}, {629 ,U'\u1E71'}, {630 ,U'\u1E73'}, {631 ,U'\u1E75'}, - {632 ,U'\u1E77'}, {633 ,U'\u1E79'}, {634 ,U'\u1E7B'}, {635 ,U'\u1E7D'}, {636 ,U'\u1E7F'}, {637 ,U'\u1E81'}, {638 ,U'\u1E83'}, {639 ,U'\u1E85'}, {640 ,U'\u1E87'}, {641 ,U'\u1E89'}, {642 ,U'\u1E8B'}, {643 ,U'\u1E8D'}, {644 ,U'\u1E8F'}, {645 ,U'\u1E91'}, {646 ,U'\u1E93'}, {647 ,U'\u1E95'}, - {648 ,U'\u1E96'}, {650 ,U'\u1E97'}, {652 ,U'\u1E98'}, {654 ,U'\u1E99'}, {656 ,U'\u1E9A'}, {658 ,U'\u1E9B'}, {659 ,U'\u1EA1'}, {660 ,U'\u1EA3'}, {661 ,U'\u1EA5'}, {662 ,U'\u1EA7'}, {663 ,U'\u1EA9'}, {664 ,U'\u1EAB'}, {665 ,U'\u1EAD'}, {666 ,U'\u1EAF'}, {667 ,U'\u1EB1'}, {668 ,U'\u1EB3'}, - {669 ,U'\u1EB5'}, {670 ,U'\u1EB7'}, {671 ,U'\u1EB9'}, {672 ,U'\u1EBB'}, {673 ,U'\u1EBD'}, {674 ,U'\u1EBF'}, {675 ,U'\u1EC1'}, {676 ,U'\u1EC3'}, {677 ,U'\u1EC5'}, {678 ,U'\u1EC7'}, {679 ,U'\u1EC9'}, {680 ,U'\u1ECB'}, {681 ,U'\u1ECD'}, {682 ,U'\u1ECF'}, {683 ,U'\u1ED1'}, {684 ,U'\u1ED3'}, - {685 ,U'\u1ED5'}, {686 ,U'\u1ED7'}, {687 ,U'\u1ED9'}, {688 ,U'\u1EDB'}, {689 ,U'\u1EDD'}, {690 ,U'\u1EDF'}, {691 ,U'\u1EE1'}, {692 ,U'\u1EE3'}, {693 ,U'\u1EE5'}, {694 ,U'\u1EE7'}, {695 ,U'\u1EE9'}, {696 ,U'\u1EEB'}, {697 ,U'\u1EED'}, {698 ,U'\u1EEF'}, {699 ,U'\u1EF1'}, {700 ,U'\u1EF3'}, - {701 ,U'\u1EF5'}, {702 ,U'\u1EF7'}, {703 ,U'\u1EF9'}, {704 ,U'\u1EFB'}, {705 ,U'\u1EFD'}, {706 ,U'\u1EFF'}, {707 ,U'\u1F00'}, {708 ,U'\u1F01'}, {709 ,U'\u1F02'}, {710 ,U'\u1F03'}, {711 ,U'\u1F04'}, {712 ,U'\u1F05'}, {713 ,U'\u1F06'}, {714 ,U'\u1F07'}, {715 ,U'\u1F10'}, {716 ,U'\u1F11'}, - {717 ,U'\u1F12'}, {718 ,U'\u1F13'}, {719 ,U'\u1F14'}, {720 ,U'\u1F15'}, {721 ,U'\u1F20'}, {722 ,U'\u1F21'}, {723 ,U'\u1F22'}, {724 ,U'\u1F23'}, {725 ,U'\u1F24'}, {726 ,U'\u1F25'}, {727 ,U'\u1F26'}, {728 ,U'\u1F27'}, {729 ,U'\u1F30'}, {730 ,U'\u1F31'}, {731 ,U'\u1F32'}, {732 ,U'\u1F33'}, - {733 ,U'\u1F34'}, {734 ,U'\u1F35'}, {735 ,U'\u1F36'}, {736 ,U'\u1F37'}, {737 ,U'\u1F40'}, {738 ,U'\u1F41'}, {739 ,U'\u1F42'}, {740 ,U'\u1F43'}, {741 ,U'\u1F44'}, {742 ,U'\u1F45'}, {743 ,U'\u1F50'}, {745 ,U'\u1F51'}, {746 ,U'\u1F52'}, {749 ,U'\u1F53'}, {750 ,U'\u1F54'}, {753 ,U'\u1F55'}, - {754 ,U'\u1F56'}, {757 ,U'\u1F57'}, {758 ,U'\u1F60'}, {759 ,U'\u1F61'}, {760 ,U'\u1F62'}, {761 ,U'\u1F63'}, {762 ,U'\u1F64'}, {763 ,U'\u1F65'}, {764 ,U'\u1F66'}, {765 ,U'\u1F67'}, {766 ,U'\u1F70'}, {767 ,U'\u1F71'}, {768 ,U'\u1F72'}, {769 ,U'\u1F73'}, {770 ,U'\u1F74'}, {771 ,U'\u1F75'}, - {772 ,U'\u1F76'}, {773 ,U'\u1F77'}, {774 ,U'\u1F78'}, {775 ,U'\u1F79'}, {776 ,U'\u1F7A'}, {777 ,U'\u1F7B'}, {778 ,U'\u1F7C'}, {779 ,U'\u1F7D'}, {780 ,U'\u1F80'}, {782 ,U'\u1F81'}, {784 ,U'\u1F82'}, {786 ,U'\u1F83'}, {788 ,U'\u1F84'}, {790 ,U'\u1F85'}, {792 ,U'\u1F86'}, {794 ,U'\u1F87'}, - {796 ,U'\u1F88'}, {798 ,U'\u1F89'}, {800 ,U'\u1F8A'}, {802 ,U'\u1F8B'}, {804 ,U'\u1F8C'}, {806 ,U'\u1F8D'}, {808 ,U'\u1F8E'}, {810 ,U'\u1F8F'}, {812 ,U'\u1F90'}, {814 ,U'\u1F91'}, {816 ,U'\u1F92'}, {818 ,U'\u1F93'}, {820 ,U'\u1F94'}, {822 ,U'\u1F95'}, {824 ,U'\u1F96'}, {826 ,U'\u1F97'}, - {828 ,U'\u1F98'}, {830 ,U'\u1F99'}, {832 ,U'\u1F9A'}, {834 ,U'\u1F9B'}, {836 ,U'\u1F9C'}, {838 ,U'\u1F9D'}, {840 ,U'\u1F9E'}, {842 ,U'\u1F9F'}, {844 ,U'\u1FA0'}, {846 ,U'\u1FA1'}, {848 ,U'\u1FA2'}, {850 ,U'\u1FA3'}, {852 ,U'\u1FA4'}, {854 ,U'\u1FA5'}, {856 ,U'\u1FA6'}, {858 ,U'\u1FA7'}, - {860 ,U'\u1FA8'}, {862 ,U'\u1FA9'}, {864 ,U'\u1FAA'}, {866 ,U'\u1FAB'}, {868 ,U'\u1FAC'}, {870 ,U'\u1FAD'}, {872 ,U'\u1FAE'}, {874 ,U'\u1FAF'}, {876 ,U'\u1FB0'}, {877 ,U'\u1FB1'}, {878 ,U'\u1FB2'}, {880 ,U'\u1FB3'}, {882 ,U'\u1FB4'}, {884 ,U'\u1FB6'}, {886 ,U'\u1FB7'}, {889 ,U'\u1FBC'}, - {891 ,U'\u1FBE'}, {892 ,U'\u1FC2'}, {894 ,U'\u1FC3'}, {896 ,U'\u1FC4'}, {898 ,U'\u1FC6'}, {900 ,U'\u1FC7'}, {903 ,U'\u1FCC'}, {905 ,U'\u1FD0'}, {906 ,U'\u1FD1'}, {907 ,U'\u1FD2'}, {910 ,U'\u1FD3'}, {913 ,U'\u1FD6'}, {915 ,U'\u1FD7'}, {918 ,U'\u1FE0'}, {919 ,U'\u1FE1'}, {920 ,U'\u1FE2'}, - {923 ,U'\u1FE3'}, {926 ,U'\u1FE4'}, {928 ,U'\u1FE5'}, {929 ,U'\u1FE6'}, {931 ,U'\u1FE7'}, {934 ,U'\u1FF2'}, {936 ,U'\u1FF3'}, {938 ,U'\u1FF4'}, {940 ,U'\u1FF6'}, {942 ,U'\u1FF7'}, {945 ,U'\u1FFC'}, {947 ,U'\u214E'}, {948 ,U'\u2170'}, {949 ,U'\u2171'}, {950 ,U'\u2172'}, {951 ,U'\u2173'}, - {952 ,U'\u2174'}, {953 ,U'\u2175'}, {954 ,U'\u2176'}, {955 ,U'\u2177'}, {956 ,U'\u2178'}, {957 ,U'\u2179'}, {958 ,U'\u217A'}, {959 ,U'\u217B'}, {960 ,U'\u217C'}, {961 ,U'\u217D'}, {962 ,U'\u217E'}, {963 ,U'\u217F'}, {964 ,U'\u2184'}, {965 ,U'\u24D0'}, {966 ,U'\u24D1'}, {967 ,U'\u24D2'}, - {968 ,U'\u24D3'}, {969 ,U'\u24D4'}, {970 ,U'\u24D5'}, {971 ,U'\u24D6'}, {972 ,U'\u24D7'}, {973 ,U'\u24D8'}, {974 ,U'\u24D9'}, {975 ,U'\u24DA'}, {976 ,U'\u24DB'}, {977 ,U'\u24DC'}, {978 ,U'\u24DD'}, {979 ,U'\u24DE'}, {980 ,U'\u24DF'}, {981 ,U'\u24E0'}, {982 ,U'\u24E1'}, {983 ,U'\u24E2'}, - {984 ,U'\u24E3'}, {985 ,U'\u24E4'}, {986 ,U'\u24E5'}, {987 ,U'\u24E6'}, {988 ,U'\u24E7'}, {989 ,U'\u24E8'}, {990 ,U'\u24E9'}, {991 ,U'\u2C30'}, {992 ,U'\u2C31'}, {993 ,U'\u2C32'}, {994 ,U'\u2C33'}, {995 ,U'\u2C34'}, {996 ,U'\u2C35'}, {997 ,U'\u2C36'}, {998 ,U'\u2C37'}, {999 ,U'\u2C38'}, - {1000 ,U'\u2C39'}, {1001 ,U'\u2C3A'}, {1002 ,U'\u2C3B'}, {1003 ,U'\u2C3C'}, {1004 ,U'\u2C3D'}, {1005 ,U'\u2C3E'}, {1006 ,U'\u2C3F'}, {1007 ,U'\u2C40'}, {1008 ,U'\u2C41'}, {1009 ,U'\u2C42'}, {1010 ,U'\u2C43'}, {1011 ,U'\u2C44'}, {1012 ,U'\u2C45'}, {1013 ,U'\u2C46'}, {1014 ,U'\u2C47'}, {1015 ,U'\u2C48'}, - {1016 ,U'\u2C49'}, {1017 ,U'\u2C4A'}, {1018 ,U'\u2C4B'}, {1019 ,U'\u2C4C'}, {1020 ,U'\u2C4D'}, {1021 ,U'\u2C4E'}, {1022 ,U'\u2C4F'}, {1023 ,U'\u2C50'}, {1024 ,U'\u2C51'}, {1025 ,U'\u2C52'}, {1026 ,U'\u2C53'}, {1027 ,U'\u2C54'}, {1028 ,U'\u2C55'}, {1029 ,U'\u2C56'}, {1030 ,U'\u2C57'}, {1031 ,U'\u2C58'}, - {1032 ,U'\u2C59'}, {1033 ,U'\u2C5A'}, {1034 ,U'\u2C5B'}, {1035 ,U'\u2C5C'}, {1036 ,U'\u2C5D'}, {1037 ,U'\u2C5E'}, {1038 ,U'\u2C61'}, {1039 ,U'\u2C65'}, {1040 ,U'\u2C66'}, {1041 ,U'\u2C68'}, {1042 ,U'\u2C6A'}, {1043 ,U'\u2C6C'}, {1044 ,U'\u2C73'}, {1045 ,U'\u2C76'}, {1046 ,U'\u2C81'}, {1047 ,U'\u2C83'}, - {1048 ,U'\u2C85'}, {1049 ,U'\u2C87'}, {1050 ,U'\u2C89'}, {1051 ,U'\u2C8B'}, {1052 ,U'\u2C8D'}, {1053 ,U'\u2C8F'}, {1054 ,U'\u2C91'}, {1055 ,U'\u2C93'}, {1056 ,U'\u2C95'}, {1057 ,U'\u2C97'}, {1058 ,U'\u2C99'}, {1059 ,U'\u2C9B'}, {1060 ,U'\u2C9D'}, {1061 ,U'\u2C9F'}, {1062 ,U'\u2CA1'}, {1063 ,U'\u2CA3'}, - {1064 ,U'\u2CA5'}, {1065 ,U'\u2CA7'}, {1066 ,U'\u2CA9'}, {1067 ,U'\u2CAB'}, {1068 ,U'\u2CAD'}, {1069 ,U'\u2CAF'}, {1070 ,U'\u2CB1'}, {1071 ,U'\u2CB3'}, {1072 ,U'\u2CB5'}, {1073 ,U'\u2CB7'}, {1074 ,U'\u2CB9'}, {1075 ,U'\u2CBB'}, {1076 ,U'\u2CBD'}, {1077 ,U'\u2CBF'}, {1078 ,U'\u2CC1'}, {1079 ,U'\u2CC3'}, - {1080 ,U'\u2CC5'}, {1081 ,U'\u2CC7'}, {1082 ,U'\u2CC9'}, {1083 ,U'\u2CCB'}, {1084 ,U'\u2CCD'}, {1085 ,U'\u2CCF'}, {1086 ,U'\u2CD1'}, {1087 ,U'\u2CD3'}, {1088 ,U'\u2CD5'}, {1089 ,U'\u2CD7'}, {1090 ,U'\u2CD9'}, {1091 ,U'\u2CDB'}, {1092 ,U'\u2CDD'}, {1093 ,U'\u2CDF'}, {1094 ,U'\u2CE1'}, {1095 ,U'\u2CE3'}, - {1096 ,U'\u2CEC'}, {1097 ,U'\u2CEE'}, {1098 ,U'\u2CF3'}, {1099 ,U'\u2D00'}, {1100 ,U'\u2D01'}, {1101 ,U'\u2D02'}, {1102 ,U'\u2D03'}, {1103 ,U'\u2D04'}, {1104 ,U'\u2D05'}, {1105 ,U'\u2D06'}, {1106 ,U'\u2D07'}, {1107 ,U'\u2D08'}, {1108 ,U'\u2D09'}, {1109 ,U'\u2D0A'}, {1110 ,U'\u2D0B'}, {1111 ,U'\u2D0C'}, - {1112 ,U'\u2D0D'}, {1113 ,U'\u2D0E'}, {1114 ,U'\u2D0F'}, {1115 ,U'\u2D10'}, {1116 ,U'\u2D11'}, {1117 ,U'\u2D12'}, {1118 ,U'\u2D13'}, {1119 ,U'\u2D14'}, {1120 ,U'\u2D15'}, {1121 ,U'\u2D16'}, {1122 ,U'\u2D17'}, {1123 ,U'\u2D18'}, {1124 ,U'\u2D19'}, {1125 ,U'\u2D1A'}, {1126 ,U'\u2D1B'}, {1127 ,U'\u2D1C'}, - {1128 ,U'\u2D1D'}, {1129 ,U'\u2D1E'}, {1130 ,U'\u2D1F'}, {1131 ,U'\u2D20'}, {1132 ,U'\u2D21'}, {1133 ,U'\u2D22'}, {1134 ,U'\u2D23'}, {1135 ,U'\u2D24'}, {1136 ,U'\u2D25'}, {1137 ,U'\u2D27'}, {1138 ,U'\u2D2D'}, {1139 ,U'\uA641'}, {1140 ,U'\uA643'}, {1141 ,U'\uA645'}, {1142 ,U'\uA647'}, {1143 ,U'\uA649'}, - {1144 ,U'\uA64B'}, {1145 ,U'\uA64D'}, {1146 ,U'\uA64F'}, {1147 ,U'\uA651'}, {1148 ,U'\uA653'}, {1149 ,U'\uA655'}, {1150 ,U'\uA657'}, {1151 ,U'\uA659'}, {1152 ,U'\uA65B'}, {1153 ,U'\uA65D'}, {1154 ,U'\uA65F'}, {1155 ,U'\uA661'}, {1156 ,U'\uA663'}, {1157 ,U'\uA665'}, {1158 ,U'\uA667'}, {1159 ,U'\uA669'}, - {1160 ,U'\uA66B'}, {1161 ,U'\uA66D'}, {1162 ,U'\uA681'}, {1163 ,U'\uA683'}, {1164 ,U'\uA685'}, {1165 ,U'\uA687'}, {1166 ,U'\uA689'}, {1167 ,U'\uA68B'}, {1168 ,U'\uA68D'}, {1169 ,U'\uA68F'}, {1170 ,U'\uA691'}, {1171 ,U'\uA693'}, {1172 ,U'\uA695'}, {1173 ,U'\uA697'}, {1174 ,U'\uA699'}, {1175 ,U'\uA69B'}, - {1176 ,U'\uA723'}, {1177 ,U'\uA725'}, {1178 ,U'\uA727'}, {1179 ,U'\uA729'}, {1180 ,U'\uA72B'}, {1181 ,U'\uA72D'}, {1182 ,U'\uA72F'}, {1183 ,U'\uA733'}, {1184 ,U'\uA735'}, {1185 ,U'\uA737'}, {1186 ,U'\uA739'}, {1187 ,U'\uA73B'}, {1188 ,U'\uA73D'}, {1189 ,U'\uA73F'}, {1190 ,U'\uA741'}, {1191 ,U'\uA743'}, - {1192 ,U'\uA745'}, {1193 ,U'\uA747'}, {1194 ,U'\uA749'}, {1195 ,U'\uA74B'}, {1196 ,U'\uA74D'}, {1197 ,U'\uA74F'}, {1198 ,U'\uA751'}, {1199 ,U'\uA753'}, {1200 ,U'\uA755'}, {1201 ,U'\uA757'}, {1202 ,U'\uA759'}, {1203 ,U'\uA75B'}, {1204 ,U'\uA75D'}, {1205 ,U'\uA75F'}, {1206 ,U'\uA761'}, {1207 ,U'\uA763'}, - {1208 ,U'\uA765'}, {1209 ,U'\uA767'}, {1210 ,U'\uA769'}, {1211 ,U'\uA76B'}, {1212 ,U'\uA76D'}, {1213 ,U'\uA76F'}, {1214 ,U'\uA77A'}, {1215 ,U'\uA77C'}, {1216 ,U'\uA77F'}, {1217 ,U'\uA781'}, {1218 ,U'\uA783'}, {1219 ,U'\uA785'}, {1220 ,U'\uA787'}, {1221 ,U'\uA78C'}, {1222 ,U'\uA791'}, {1223 ,U'\uA793'}, - {1224 ,U'\uA794'}, {1225 ,U'\uA797'}, {1226 ,U'\uA799'}, {1227 ,U'\uA79B'}, {1228 ,U'\uA79D'}, {1229 ,U'\uA79F'}, {1230 ,U'\uA7A1'}, {1231 ,U'\uA7A3'}, {1232 ,U'\uA7A5'}, {1233 ,U'\uA7A7'}, {1234 ,U'\uA7A9'}, {1235 ,U'\uA7B5'}, {1236 ,U'\uA7B7'}, {1237 ,U'\uA7B9'}, {1238 ,U'\uA7BB'}, {1239 ,U'\uA7BD'}, - {1240 ,U'\uA7BF'}, {1241 ,U'\uA7C3'}, {1242 ,U'\uA7C8'}, {1243 ,U'\uA7CA'}, {1244 ,U'\uA7F6'}, {1245 ,U'\uAB53'}, {1246 ,U'\uAB70'}, {1247 ,U'\uAB71'}, {1248 ,U'\uAB72'}, {1249 ,U'\uAB73'}, {1250 ,U'\uAB74'}, {1251 ,U'\uAB75'}, {1252 ,U'\uAB76'}, {1253 ,U'\uAB77'}, {1254 ,U'\uAB78'}, {1255 ,U'\uAB79'}, - {1256 ,U'\uAB7A'}, {1257 ,U'\uAB7B'}, {1258 ,U'\uAB7C'}, {1259 ,U'\uAB7D'}, {1260 ,U'\uAB7E'}, {1261 ,U'\uAB7F'}, {1262 ,U'\uAB80'}, {1263 ,U'\uAB81'}, {1264 ,U'\uAB82'}, {1265 ,U'\uAB83'}, {1266 ,U'\uAB84'}, {1267 ,U'\uAB85'}, {1268 ,U'\uAB86'}, {1269 ,U'\uAB87'}, {1270 ,U'\uAB88'}, {1271 ,U'\uAB89'}, - {1272 ,U'\uAB8A'}, {1273 ,U'\uAB8B'}, {1274 ,U'\uAB8C'}, {1275 ,U'\uAB8D'}, {1276 ,U'\uAB8E'}, {1277 ,U'\uAB8F'}, {1278 ,U'\uAB90'}, {1279 ,U'\uAB91'}, {1280 ,U'\uAB92'}, {1281 ,U'\uAB93'}, {1282 ,U'\uAB94'}, {1283 ,U'\uAB95'}, {1284 ,U'\uAB96'}, {1285 ,U'\uAB97'}, {1286 ,U'\uAB98'}, {1287 ,U'\uAB99'}, - {1288 ,U'\uAB9A'}, {1289 ,U'\uAB9B'}, {1290 ,U'\uAB9C'}, {1291 ,U'\uAB9D'}, {1292 ,U'\uAB9E'}, {1293 ,U'\uAB9F'}, {1294 ,U'\uABA0'}, {1295 ,U'\uABA1'}, {1296 ,U'\uABA2'}, {1297 ,U'\uABA3'}, {1298 ,U'\uABA4'}, {1299 ,U'\uABA5'}, {1300 ,U'\uABA6'}, {1301 ,U'\uABA7'}, {1302 ,U'\uABA8'}, {1303 ,U'\uABA9'}, - {1304 ,U'\uABAA'}, {1305 ,U'\uABAB'}, {1306 ,U'\uABAC'}, {1307 ,U'\uABAD'}, {1308 ,U'\uABAE'}, {1309 ,U'\uABAF'}, {1310 ,U'\uABB0'}, {1311 ,U'\uABB1'}, {1312 ,U'\uABB2'}, {1313 ,U'\uABB3'}, {1314 ,U'\uABB4'}, {1315 ,U'\uABB5'}, {1316 ,U'\uABB6'}, {1317 ,U'\uABB7'}, {1318 ,U'\uABB8'}, {1319 ,U'\uABB9'}, - {1320 ,U'\uABBA'}, {1321 ,U'\uABBB'}, {1322 ,U'\uABBC'}, {1323 ,U'\uABBD'}, {1324 ,U'\uABBE'}, {1325 ,U'\uABBF'}, {1326 ,U'\uFB00'}, {1328 ,U'\uFB01'}, {1330 ,U'\uFB02'}, {1332 ,U'\uFB03'}, {1335 ,U'\uFB04'}, {1338 ,U'\uFB05'}, {1340 ,U'\uFB06'}, {1342 ,U'\uFB13'}, {1344 ,U'\uFB14'}, {1346 ,U'\uFB15'}, - {1348 ,U'\uFB16'}, {1350 ,U'\uFB17'}, {1352 ,U'\uFF41'}, {1353 ,U'\uFF42'}, {1354 ,U'\uFF43'}, {1355 ,U'\uFF44'}, {1356 ,U'\uFF45'}, {1357 ,U'\uFF46'}, {1358 ,U'\uFF47'}, {1359 ,U'\uFF48'}, {1360 ,U'\uFF49'}, {1361 ,U'\uFF4A'}, {1362 ,U'\uFF4B'}, {1363 ,U'\uFF4C'}, {1364 ,U'\uFF4D'}, {1365 ,U'\uFF4E'}, - {1366 ,U'\uFF4F'}, {1367 ,U'\uFF50'}, {1368 ,U'\uFF51'}, {1369 ,U'\uFF52'}, {1370 ,U'\uFF53'}, {1371 ,U'\uFF54'}, {1372 ,U'\uFF55'}, {1373 ,U'\uFF56'}, {1374 ,U'\uFF57'}, {1375 ,U'\uFF58'}, {1376 ,U'\uFF59'}, {1377 ,U'\uFF5A'}, {1378 ,U'\U00010428'}, {1380 ,U'\U00010429'}, {1382 ,U'\U0001042A'}, {1384 ,U'\U0001042B'}, - {1386 ,U'\U0001042C'}, {1388 ,U'\U0001042D'}, {1390 ,U'\U0001042E'}, {1392 ,U'\U0001042F'}, {1394 ,U'\U00010430'}, {1396 ,U'\U00010431'}, {1398 ,U'\U00010432'}, {1400 ,U'\U00010433'}, {1402 ,U'\U00010434'}, {1404 ,U'\U00010435'}, {1406 ,U'\U00010436'}, {1408 ,U'\U00010437'}, {1410 ,U'\U00010438'}, {1412 ,U'\U00010439'}, {1414 ,U'\U0001043A'}, {1416 ,U'\U0001043B'}, - {1418 ,U'\U0001043C'}, {1420 ,U'\U0001043D'}, {1422 ,U'\U0001043E'}, {1424 ,U'\U0001043F'}, {1426 ,U'\U00010440'}, {1428 ,U'\U00010441'}, {1430 ,U'\U00010442'}, {1432 ,U'\U00010443'}, {1434 ,U'\U00010444'}, {1436 ,U'\U00010445'}, {1438 ,U'\U00010446'}, {1440 ,U'\U00010447'}, {1442 ,U'\U00010448'}, {1444 ,U'\U00010449'}, {1446 ,U'\U0001044A'}, {1448 ,U'\U0001044B'}, - {1450 ,U'\U0001044C'}, {1452 ,U'\U0001044D'}, {1454 ,U'\U0001044E'}, {1456 ,U'\U0001044F'}, {1458 ,U'\U000104D8'}, {1460 ,U'\U000104D9'}, {1462 ,U'\U000104DA'}, {1464 ,U'\U000104DB'}, {1466 ,U'\U000104DC'}, {1468 ,U'\U000104DD'}, {1470 ,U'\U000104DE'}, {1472 ,U'\U000104DF'}, {1474 ,U'\U000104E0'}, {1476 ,U'\U000104E1'}, {1478 ,U'\U000104E2'}, {1480 ,U'\U000104E3'}, - {1482 ,U'\U000104E4'}, {1484 ,U'\U000104E5'}, {1486 ,U'\U000104E6'}, {1488 ,U'\U000104E7'}, {1490 ,U'\U000104E8'}, {1492 ,U'\U000104E9'}, {1494 ,U'\U000104EA'}, {1496 ,U'\U000104EB'}, {1498 ,U'\U000104EC'}, {1500 ,U'\U000104ED'}, {1502 ,U'\U000104EE'}, {1504 ,U'\U000104EF'}, {1506 ,U'\U000104F0'}, {1508 ,U'\U000104F1'}, {1510 ,U'\U000104F2'}, {1512 ,U'\U000104F3'}, - {1514 ,U'\U000104F4'}, {1516 ,U'\U000104F5'}, {1518 ,U'\U000104F6'}, {1520 ,U'\U000104F7'}, {1522 ,U'\U000104F8'}, {1524 ,U'\U000104F9'}, {1526 ,U'\U000104FA'}, {1528 ,U'\U000104FB'}, {1530 ,U'\U00010CC0'}, {1532 ,U'\U00010CC1'}, {1534 ,U'\U00010CC2'}, {1536 ,U'\U00010CC3'}, {1538 ,U'\U00010CC4'}, {1540 ,U'\U00010CC5'}, {1542 ,U'\U00010CC6'}, {1544 ,U'\U00010CC7'}, - {1546 ,U'\U00010CC8'}, {1548 ,U'\U00010CC9'}, {1550 ,U'\U00010CCA'}, {1552 ,U'\U00010CCB'}, {1554 ,U'\U00010CCC'}, {1556 ,U'\U00010CCD'}, {1558 ,U'\U00010CCE'}, {1560 ,U'\U00010CCF'}, {1562 ,U'\U00010CD0'}, {1564 ,U'\U00010CD1'}, {1566 ,U'\U00010CD2'}, {1568 ,U'\U00010CD3'}, {1570 ,U'\U00010CD4'}, {1572 ,U'\U00010CD5'}, {1574 ,U'\U00010CD6'}, {1576 ,U'\U00010CD7'}, - {1578 ,U'\U00010CD8'}, {1580 ,U'\U00010CD9'}, {1582 ,U'\U00010CDA'}, {1584 ,U'\U00010CDB'}, {1586 ,U'\U00010CDC'}, {1588 ,U'\U00010CDD'}, {1590 ,U'\U00010CDE'}, {1592 ,U'\U00010CDF'}, {1594 ,U'\U00010CE0'}, {1596 ,U'\U00010CE1'}, {1598 ,U'\U00010CE2'}, {1600 ,U'\U00010CE3'}, {1602 ,U'\U00010CE4'}, {1604 ,U'\U00010CE5'}, {1606 ,U'\U00010CE6'}, {1608 ,U'\U00010CE7'}, - {1610 ,U'\U00010CE8'}, {1612 ,U'\U00010CE9'}, {1614 ,U'\U00010CEA'}, {1616 ,U'\U00010CEB'}, {1618 ,U'\U00010CEC'}, {1620 ,U'\U00010CED'}, {1622 ,U'\U00010CEE'}, {1624 ,U'\U00010CEF'}, {1626 ,U'\U00010CF0'}, {1628 ,U'\U00010CF1'}, {1630 ,U'\U00010CF2'}, {1632 ,U'\U000118C0'}, {1634 ,U'\U000118C1'}, {1636 ,U'\U000118C2'}, {1638 ,U'\U000118C3'}, {1640 ,U'\U000118C4'}, - {1642 ,U'\U000118C5'}, {1644 ,U'\U000118C6'}, {1646 ,U'\U000118C7'}, {1648 ,U'\U000118C8'}, {1650 ,U'\U000118C9'}, {1652 ,U'\U000118CA'}, {1654 ,U'\U000118CB'}, {1656 ,U'\U000118CC'}, {1658 ,U'\U000118CD'}, {1660 ,U'\U000118CE'}, {1662 ,U'\U000118CF'}, {1664 ,U'\U000118D0'}, {1666 ,U'\U000118D1'}, {1668 ,U'\U000118D2'}, {1670 ,U'\U000118D3'}, {1672 ,U'\U000118D4'}, - {1674 ,U'\U000118D5'}, {1676 ,U'\U000118D6'}, {1678 ,U'\U000118D7'}, {1680 ,U'\U000118D8'}, {1682 ,U'\U000118D9'}, {1684 ,U'\U000118DA'}, {1686 ,U'\U000118DB'}, {1688 ,U'\U000118DC'}, {1690 ,U'\U000118DD'}, {1692 ,U'\U000118DE'}, {1694 ,U'\U000118DF'}, {1696 ,U'\U00016E60'}, {1698 ,U'\U00016E61'}, {1700 ,U'\U00016E62'}, {1702 ,U'\U00016E63'}, {1704 ,U'\U00016E64'}, - {1706 ,U'\U00016E65'}, {1708 ,U'\U00016E66'}, {1710 ,U'\U00016E67'}, {1712 ,U'\U00016E68'}, {1714 ,U'\U00016E69'}, {1716 ,U'\U00016E6A'}, {1718 ,U'\U00016E6B'}, {1720 ,U'\U00016E6C'}, {1722 ,U'\U00016E6D'}, {1724 ,U'\U00016E6E'}, {1726 ,U'\U00016E6F'}, {1728 ,U'\U00016E70'}, {1730 ,U'\U00016E71'}, {1732 ,U'\U00016E72'}, {1734 ,U'\U00016E73'}, {1736 ,U'\U00016E74'}, - {1738 ,U'\U00016E75'}, {1740 ,U'\U00016E76'}, {1742 ,U'\U00016E77'}, {1744 ,U'\U00016E78'}, {1746 ,U'\U00016E79'}, {1748 ,U'\U00016E7A'}, {1750 ,U'\U00016E7B'}, {1752 ,U'\U00016E7C'}, {1754 ,U'\U00016E7D'}, {1756 ,U'\U00016E7E'}, {1758 ,U'\U00016E7F'}, {1760 ,U'\U0001E922'}, {1762 ,U'\U0001E923'}, {1764 ,U'\U0001E924'}, {1766 ,U'\U0001E925'}, {1768 ,U'\U0001E926'}, - {1770 ,U'\U0001E927'}, {1772 ,U'\U0001E928'}, {1774 ,U'\U0001E929'}, {1776 ,U'\U0001E92A'}, {1778 ,U'\U0001E92B'}, {1780 ,U'\U0001E92C'}, {1782 ,U'\U0001E92D'}, {1784 ,U'\U0001E92E'}, {1786 ,U'\U0001E92F'}, {1788 ,U'\U0001E930'}, {1790 ,U'\U0001E931'}, {1792 ,U'\U0001E932'}, {1794 ,U'\U0001E933'}, {1796 ,U'\U0001E934'}, {1798 ,U'\U0001E935'}, {1800 ,U'\U0001E936'}, - {1802 ,U'\U0001E937'}, {1804 ,U'\U0001E938'}, {1806 ,U'\U0001E939'}, {1808 ,U'\U0001E93A'}, {1810 ,U'\U0001E93B'}, {1812 ,U'\U0001E93C'}, {1814 ,U'\U0001E93D'}, {1816 ,U'\U0001E93E'}, {1818 ,U'\U0001E93F'}, {1820 ,U'\U0001E940'}, {1822 ,U'\U0001E941'}, {1824 ,U'\U0001E942'}, {1826 ,U'\U0001E943'}, {1828 , 0} + {130 ,U'\u0192'}, {131 ,U'\u0195'}, {132 ,U'\u0199'}, {133 ,U'\u019A'}, {134 ,U'\u019B'}, {135 ,U'\u019E'}, {136 ,U'\u01A1'}, {137 ,U'\u01A3'}, {138 ,U'\u01A5'}, {139 ,U'\u01A8'}, {140 ,U'\u01AD'}, {141 ,U'\u01B0'}, {142 ,U'\u01B4'}, {143 ,U'\u01B6'}, {144 ,U'\u01B9'}, {145 ,U'\u01BD'}, + {146 ,U'\u01BF'}, {147 ,U'\u01C5'}, {148 ,U'\u01C6'}, {149 ,U'\u01C8'}, {150 ,U'\u01C9'}, {151 ,U'\u01CB'}, {152 ,U'\u01CC'}, {153 ,U'\u01CE'}, {154 ,U'\u01D0'}, {155 ,U'\u01D2'}, {156 ,U'\u01D4'}, {157 ,U'\u01D6'}, {158 ,U'\u01D8'}, {159 ,U'\u01DA'}, {160 ,U'\u01DC'}, {161 ,U'\u01DD'}, + {162 ,U'\u01DF'}, {163 ,U'\u01E1'}, {164 ,U'\u01E3'}, {165 ,U'\u01E5'}, {166 ,U'\u01E7'}, {167 ,U'\u01E9'}, {168 ,U'\u01EB'}, {169 ,U'\u01ED'}, {170 ,U'\u01EF'}, {171 ,U'\u01F0'}, {173 ,U'\u01F2'}, {174 ,U'\u01F3'}, {175 ,U'\u01F5'}, {176 ,U'\u01F9'}, {177 ,U'\u01FB'}, {178 ,U'\u01FD'}, + {179 ,U'\u01FF'}, {180 ,U'\u0201'}, {181 ,U'\u0203'}, {182 ,U'\u0205'}, {183 ,U'\u0207'}, {184 ,U'\u0209'}, {185 ,U'\u020B'}, {186 ,U'\u020D'}, {187 ,U'\u020F'}, {188 ,U'\u0211'}, {189 ,U'\u0213'}, {190 ,U'\u0215'}, {191 ,U'\u0217'}, {192 ,U'\u0219'}, {193 ,U'\u021B'}, {194 ,U'\u021D'}, + {195 ,U'\u021F'}, {196 ,U'\u0223'}, {197 ,U'\u0225'}, {198 ,U'\u0227'}, {199 ,U'\u0229'}, {200 ,U'\u022B'}, {201 ,U'\u022D'}, {202 ,U'\u022F'}, {203 ,U'\u0231'}, {204 ,U'\u0233'}, {205 ,U'\u023C'}, {206 ,U'\u023F'}, {207 ,U'\u0240'}, {208 ,U'\u0242'}, {209 ,U'\u0247'}, {210 ,U'\u0249'}, + {211 ,U'\u024B'}, {212 ,U'\u024D'}, {213 ,U'\u024F'}, {214 ,U'\u0250'}, {215 ,U'\u0251'}, {216 ,U'\u0252'}, {217 ,U'\u0253'}, {218 ,U'\u0254'}, {219 ,U'\u0256'}, {220 ,U'\u0257'}, {221 ,U'\u0259'}, {222 ,U'\u025B'}, {223 ,U'\u025C'}, {224 ,U'\u0260'}, {225 ,U'\u0261'}, {226 ,U'\u0263'}, + {227 ,U'\u0264'}, {228 ,U'\u0265'}, {229 ,U'\u0266'}, {230 ,U'\u0268'}, {231 ,U'\u0269'}, {232 ,U'\u026A'}, {233 ,U'\u026B'}, {234 ,U'\u026C'}, {235 ,U'\u026F'}, {236 ,U'\u0271'}, {237 ,U'\u0272'}, {238 ,U'\u0275'}, {239 ,U'\u027D'}, {240 ,U'\u0280'}, {241 ,U'\u0282'}, {242 ,U'\u0283'}, + {243 ,U'\u0287'}, {244 ,U'\u0288'}, {245 ,U'\u0289'}, {246 ,U'\u028A'}, {247 ,U'\u028B'}, {248 ,U'\u028C'}, {249 ,U'\u0292'}, {250 ,U'\u029D'}, {251 ,U'\u029E'}, {252 ,U'\u0345'}, {253 ,U'\u0371'}, {254 ,U'\u0373'}, {255 ,U'\u0377'}, {256 ,U'\u037B'}, {257 ,U'\u037C'}, {258 ,U'\u037D'}, + {259 ,U'\u0390'}, {262 ,U'\u03AC'}, {263 ,U'\u03AD'}, {264 ,U'\u03AE'}, {265 ,U'\u03AF'}, {266 ,U'\u03B0'}, {269 ,U'\u03B1'}, {270 ,U'\u03B2'}, {271 ,U'\u03B3'}, {272 ,U'\u03B4'}, {273 ,U'\u03B5'}, {274 ,U'\u03B6'}, {275 ,U'\u03B7'}, {276 ,U'\u03B8'}, {277 ,U'\u03B9'}, {278 ,U'\u03BA'}, + {279 ,U'\u03BB'}, {280 ,U'\u03BC'}, {281 ,U'\u03BD'}, {282 ,U'\u03BE'}, {283 ,U'\u03BF'}, {284 ,U'\u03C0'}, {285 ,U'\u03C1'}, {286 ,U'\u03C2'}, {287 ,U'\u03C3'}, {288 ,U'\u03C4'}, {289 ,U'\u03C5'}, {290 ,U'\u03C6'}, {291 ,U'\u03C7'}, {292 ,U'\u03C8'}, {293 ,U'\u03C9'}, {294 ,U'\u03CA'}, + {295 ,U'\u03CB'}, {296 ,U'\u03CC'}, {297 ,U'\u03CD'}, {298 ,U'\u03CE'}, {299 ,U'\u03D0'}, {300 ,U'\u03D1'}, {301 ,U'\u03D5'}, {302 ,U'\u03D6'}, {303 ,U'\u03D7'}, {304 ,U'\u03D9'}, {305 ,U'\u03DB'}, {306 ,U'\u03DD'}, {307 ,U'\u03DF'}, {308 ,U'\u03E1'}, {309 ,U'\u03E3'}, {310 ,U'\u03E5'}, + {311 ,U'\u03E7'}, {312 ,U'\u03E9'}, {313 ,U'\u03EB'}, {314 ,U'\u03ED'}, {315 ,U'\u03EF'}, {316 ,U'\u03F0'}, {317 ,U'\u03F1'}, {318 ,U'\u03F2'}, {319 ,U'\u03F3'}, {320 ,U'\u03F5'}, {321 ,U'\u03F8'}, {322 ,U'\u03FB'}, {323 ,U'\u0430'}, {324 ,U'\u0431'}, {325 ,U'\u0432'}, {326 ,U'\u0433'}, + {327 ,U'\u0434'}, {328 ,U'\u0435'}, {329 ,U'\u0436'}, {330 ,U'\u0437'}, {331 ,U'\u0438'}, {332 ,U'\u0439'}, {333 ,U'\u043A'}, {334 ,U'\u043B'}, {335 ,U'\u043C'}, {336 ,U'\u043D'}, {337 ,U'\u043E'}, {338 ,U'\u043F'}, {339 ,U'\u0440'}, {340 ,U'\u0441'}, {341 ,U'\u0442'}, {342 ,U'\u0443'}, + {343 ,U'\u0444'}, {344 ,U'\u0445'}, {345 ,U'\u0446'}, {346 ,U'\u0447'}, {347 ,U'\u0448'}, {348 ,U'\u0449'}, {349 ,U'\u044A'}, {350 ,U'\u044B'}, {351 ,U'\u044C'}, {352 ,U'\u044D'}, {353 ,U'\u044E'}, {354 ,U'\u044F'}, {355 ,U'\u0450'}, {356 ,U'\u0451'}, {357 ,U'\u0452'}, {358 ,U'\u0453'}, + {359 ,U'\u0454'}, {360 ,U'\u0455'}, {361 ,U'\u0456'}, {362 ,U'\u0457'}, {363 ,U'\u0458'}, {364 ,U'\u0459'}, {365 ,U'\u045A'}, {366 ,U'\u045B'}, {367 ,U'\u045C'}, {368 ,U'\u045D'}, {369 ,U'\u045E'}, {370 ,U'\u045F'}, {371 ,U'\u0461'}, {372 ,U'\u0463'}, {373 ,U'\u0465'}, {374 ,U'\u0467'}, + {375 ,U'\u0469'}, {376 ,U'\u046B'}, {377 ,U'\u046D'}, {378 ,U'\u046F'}, {379 ,U'\u0471'}, {380 ,U'\u0473'}, {381 ,U'\u0475'}, {382 ,U'\u0477'}, {383 ,U'\u0479'}, {384 ,U'\u047B'}, {385 ,U'\u047D'}, {386 ,U'\u047F'}, {387 ,U'\u0481'}, {388 ,U'\u048B'}, {389 ,U'\u048D'}, {390 ,U'\u048F'}, + {391 ,U'\u0491'}, {392 ,U'\u0493'}, {393 ,U'\u0495'}, {394 ,U'\u0497'}, {395 ,U'\u0499'}, {396 ,U'\u049B'}, {397 ,U'\u049D'}, {398 ,U'\u049F'}, {399 ,U'\u04A1'}, {400 ,U'\u04A3'}, {401 ,U'\u04A5'}, {402 ,U'\u04A7'}, {403 ,U'\u04A9'}, {404 ,U'\u04AB'}, {405 ,U'\u04AD'}, {406 ,U'\u04AF'}, + {407 ,U'\u04B1'}, {408 ,U'\u04B3'}, {409 ,U'\u04B5'}, {410 ,U'\u04B7'}, {411 ,U'\u04B9'}, {412 ,U'\u04BB'}, {413 ,U'\u04BD'}, {414 ,U'\u04BF'}, {415 ,U'\u04C2'}, {416 ,U'\u04C4'}, {417 ,U'\u04C6'}, {418 ,U'\u04C8'}, {419 ,U'\u04CA'}, {420 ,U'\u04CC'}, {421 ,U'\u04CE'}, {422 ,U'\u04CF'}, + {423 ,U'\u04D1'}, {424 ,U'\u04D3'}, {425 ,U'\u04D5'}, {426 ,U'\u04D7'}, {427 ,U'\u04D9'}, {428 ,U'\u04DB'}, {429 ,U'\u04DD'}, {430 ,U'\u04DF'}, {431 ,U'\u04E1'}, {432 ,U'\u04E3'}, {433 ,U'\u04E5'}, {434 ,U'\u04E7'}, {435 ,U'\u04E9'}, {436 ,U'\u04EB'}, {437 ,U'\u04ED'}, {438 ,U'\u04EF'}, + {439 ,U'\u04F1'}, {440 ,U'\u04F3'}, {441 ,U'\u04F5'}, {442 ,U'\u04F7'}, {443 ,U'\u04F9'}, {444 ,U'\u04FB'}, {445 ,U'\u04FD'}, {446 ,U'\u04FF'}, {447 ,U'\u0501'}, {448 ,U'\u0503'}, {449 ,U'\u0505'}, {450 ,U'\u0507'}, {451 ,U'\u0509'}, {452 ,U'\u050B'}, {453 ,U'\u050D'}, {454 ,U'\u050F'}, + {455 ,U'\u0511'}, {456 ,U'\u0513'}, {457 ,U'\u0515'}, {458 ,U'\u0517'}, {459 ,U'\u0519'}, {460 ,U'\u051B'}, {461 ,U'\u051D'}, {462 ,U'\u051F'}, {463 ,U'\u0521'}, {464 ,U'\u0523'}, {465 ,U'\u0525'}, {466 ,U'\u0527'}, {467 ,U'\u0529'}, {468 ,U'\u052B'}, {469 ,U'\u052D'}, {470 ,U'\u052F'}, + {471 ,U'\u0561'}, {472 ,U'\u0562'}, {473 ,U'\u0563'}, {474 ,U'\u0564'}, {475 ,U'\u0565'}, {476 ,U'\u0566'}, {477 ,U'\u0567'}, {478 ,U'\u0568'}, {479 ,U'\u0569'}, {480 ,U'\u056A'}, {481 ,U'\u056B'}, {482 ,U'\u056C'}, {483 ,U'\u056D'}, {484 ,U'\u056E'}, {485 ,U'\u056F'}, {486 ,U'\u0570'}, + {487 ,U'\u0571'}, {488 ,U'\u0572'}, {489 ,U'\u0573'}, {490 ,U'\u0574'}, {491 ,U'\u0575'}, {492 ,U'\u0576'}, {493 ,U'\u0577'}, {494 ,U'\u0578'}, {495 ,U'\u0579'}, {496 ,U'\u057A'}, {497 ,U'\u057B'}, {498 ,U'\u057C'}, {499 ,U'\u057D'}, {500 ,U'\u057E'}, {501 ,U'\u057F'}, {502 ,U'\u0580'}, + {503 ,U'\u0581'}, {504 ,U'\u0582'}, {505 ,U'\u0583'}, {506 ,U'\u0584'}, {507 ,U'\u0585'}, {508 ,U'\u0586'}, {509 ,U'\u0587'}, {511 ,U'\u10D0'}, {512 ,U'\u10D1'}, {513 ,U'\u10D2'}, {514 ,U'\u10D3'}, {515 ,U'\u10D4'}, {516 ,U'\u10D5'}, {517 ,U'\u10D6'}, {518 ,U'\u10D7'}, {519 ,U'\u10D8'}, + {520 ,U'\u10D9'}, {521 ,U'\u10DA'}, {522 ,U'\u10DB'}, {523 ,U'\u10DC'}, {524 ,U'\u10DD'}, {525 ,U'\u10DE'}, {526 ,U'\u10DF'}, {527 ,U'\u10E0'}, {528 ,U'\u10E1'}, {529 ,U'\u10E2'}, {530 ,U'\u10E3'}, {531 ,U'\u10E4'}, {532 ,U'\u10E5'}, {533 ,U'\u10E6'}, {534 ,U'\u10E7'}, {535 ,U'\u10E8'}, + {536 ,U'\u10E9'}, {537 ,U'\u10EA'}, {538 ,U'\u10EB'}, {539 ,U'\u10EC'}, {540 ,U'\u10ED'}, {541 ,U'\u10EE'}, {542 ,U'\u10EF'}, {543 ,U'\u10F0'}, {544 ,U'\u10F1'}, {545 ,U'\u10F2'}, {546 ,U'\u10F3'}, {547 ,U'\u10F4'}, {548 ,U'\u10F5'}, {549 ,U'\u10F6'}, {550 ,U'\u10F7'}, {551 ,U'\u10F8'}, + {552 ,U'\u10F9'}, {553 ,U'\u10FA'}, {554 ,U'\u10FD'}, {555 ,U'\u10FE'}, {556 ,U'\u10FF'}, {557 ,U'\u13F8'}, {558 ,U'\u13F9'}, {559 ,U'\u13FA'}, {560 ,U'\u13FB'}, {561 ,U'\u13FC'}, {562 ,U'\u13FD'}, {563 ,U'\u1C80'}, {564 ,U'\u1C81'}, {565 ,U'\u1C82'}, {566 ,U'\u1C83'}, {567 ,U'\u1C84'}, + {568 ,U'\u1C85'}, {569 ,U'\u1C86'}, {570 ,U'\u1C87'}, {571 ,U'\u1C88'}, {572 ,U'\u1C8A'}, {573 ,U'\u1D79'}, {574 ,U'\u1D7D'}, {575 ,U'\u1D8E'}, {576 ,U'\u1E01'}, {577 ,U'\u1E03'}, {578 ,U'\u1E05'}, {579 ,U'\u1E07'}, {580 ,U'\u1E09'}, {581 ,U'\u1E0B'}, {582 ,U'\u1E0D'}, {583 ,U'\u1E0F'}, + {584 ,U'\u1E11'}, {585 ,U'\u1E13'}, {586 ,U'\u1E15'}, {587 ,U'\u1E17'}, {588 ,U'\u1E19'}, {589 ,U'\u1E1B'}, {590 ,U'\u1E1D'}, {591 ,U'\u1E1F'}, {592 ,U'\u1E21'}, {593 ,U'\u1E23'}, {594 ,U'\u1E25'}, {595 ,U'\u1E27'}, {596 ,U'\u1E29'}, {597 ,U'\u1E2B'}, {598 ,U'\u1E2D'}, {599 ,U'\u1E2F'}, + {600 ,U'\u1E31'}, {601 ,U'\u1E33'}, {602 ,U'\u1E35'}, {603 ,U'\u1E37'}, {604 ,U'\u1E39'}, {605 ,U'\u1E3B'}, {606 ,U'\u1E3D'}, {607 ,U'\u1E3F'}, {608 ,U'\u1E41'}, {609 ,U'\u1E43'}, {610 ,U'\u1E45'}, {611 ,U'\u1E47'}, {612 ,U'\u1E49'}, {613 ,U'\u1E4B'}, {614 ,U'\u1E4D'}, {615 ,U'\u1E4F'}, + {616 ,U'\u1E51'}, {617 ,U'\u1E53'}, {618 ,U'\u1E55'}, {619 ,U'\u1E57'}, {620 ,U'\u1E59'}, {621 ,U'\u1E5B'}, {622 ,U'\u1E5D'}, {623 ,U'\u1E5F'}, {624 ,U'\u1E61'}, {625 ,U'\u1E63'}, {626 ,U'\u1E65'}, {627 ,U'\u1E67'}, {628 ,U'\u1E69'}, {629 ,U'\u1E6B'}, {630 ,U'\u1E6D'}, {631 ,U'\u1E6F'}, + {632 ,U'\u1E71'}, {633 ,U'\u1E73'}, {634 ,U'\u1E75'}, {635 ,U'\u1E77'}, {636 ,U'\u1E79'}, {637 ,U'\u1E7B'}, {638 ,U'\u1E7D'}, {639 ,U'\u1E7F'}, {640 ,U'\u1E81'}, {641 ,U'\u1E83'}, {642 ,U'\u1E85'}, {643 ,U'\u1E87'}, {644 ,U'\u1E89'}, {645 ,U'\u1E8B'}, {646 ,U'\u1E8D'}, {647 ,U'\u1E8F'}, + {648 ,U'\u1E91'}, {649 ,U'\u1E93'}, {650 ,U'\u1E95'}, {651 ,U'\u1E96'}, {653 ,U'\u1E97'}, {655 ,U'\u1E98'}, {657 ,U'\u1E99'}, {659 ,U'\u1E9A'}, {661 ,U'\u1E9B'}, {662 ,U'\u1EA1'}, {663 ,U'\u1EA3'}, {664 ,U'\u1EA5'}, {665 ,U'\u1EA7'}, {666 ,U'\u1EA9'}, {667 ,U'\u1EAB'}, {668 ,U'\u1EAD'}, + {669 ,U'\u1EAF'}, {670 ,U'\u1EB1'}, {671 ,U'\u1EB3'}, {672 ,U'\u1EB5'}, {673 ,U'\u1EB7'}, {674 ,U'\u1EB9'}, {675 ,U'\u1EBB'}, {676 ,U'\u1EBD'}, {677 ,U'\u1EBF'}, {678 ,U'\u1EC1'}, {679 ,U'\u1EC3'}, {680 ,U'\u1EC5'}, {681 ,U'\u1EC7'}, {682 ,U'\u1EC9'}, {683 ,U'\u1ECB'}, {684 ,U'\u1ECD'}, + {685 ,U'\u1ECF'}, {686 ,U'\u1ED1'}, {687 ,U'\u1ED3'}, {688 ,U'\u1ED5'}, {689 ,U'\u1ED7'}, {690 ,U'\u1ED9'}, {691 ,U'\u1EDB'}, {692 ,U'\u1EDD'}, {693 ,U'\u1EDF'}, {694 ,U'\u1EE1'}, {695 ,U'\u1EE3'}, {696 ,U'\u1EE5'}, {697 ,U'\u1EE7'}, {698 ,U'\u1EE9'}, {699 ,U'\u1EEB'}, {700 ,U'\u1EED'}, + {701 ,U'\u1EEF'}, {702 ,U'\u1EF1'}, {703 ,U'\u1EF3'}, {704 ,U'\u1EF5'}, {705 ,U'\u1EF7'}, {706 ,U'\u1EF9'}, {707 ,U'\u1EFB'}, {708 ,U'\u1EFD'}, {709 ,U'\u1EFF'}, {710 ,U'\u1F00'}, {711 ,U'\u1F01'}, {712 ,U'\u1F02'}, {713 ,U'\u1F03'}, {714 ,U'\u1F04'}, {715 ,U'\u1F05'}, {716 ,U'\u1F06'}, + {717 ,U'\u1F07'}, {718 ,U'\u1F10'}, {719 ,U'\u1F11'}, {720 ,U'\u1F12'}, {721 ,U'\u1F13'}, {722 ,U'\u1F14'}, {723 ,U'\u1F15'}, {724 ,U'\u1F20'}, {725 ,U'\u1F21'}, {726 ,U'\u1F22'}, {727 ,U'\u1F23'}, {728 ,U'\u1F24'}, {729 ,U'\u1F25'}, {730 ,U'\u1F26'}, {731 ,U'\u1F27'}, {732 ,U'\u1F30'}, + {733 ,U'\u1F31'}, {734 ,U'\u1F32'}, {735 ,U'\u1F33'}, {736 ,U'\u1F34'}, {737 ,U'\u1F35'}, {738 ,U'\u1F36'}, {739 ,U'\u1F37'}, {740 ,U'\u1F40'}, {741 ,U'\u1F41'}, {742 ,U'\u1F42'}, {743 ,U'\u1F43'}, {744 ,U'\u1F44'}, {745 ,U'\u1F45'}, {746 ,U'\u1F50'}, {748 ,U'\u1F51'}, {749 ,U'\u1F52'}, + {752 ,U'\u1F53'}, {753 ,U'\u1F54'}, {756 ,U'\u1F55'}, {757 ,U'\u1F56'}, {760 ,U'\u1F57'}, {761 ,U'\u1F60'}, {762 ,U'\u1F61'}, {763 ,U'\u1F62'}, {764 ,U'\u1F63'}, {765 ,U'\u1F64'}, {766 ,U'\u1F65'}, {767 ,U'\u1F66'}, {768 ,U'\u1F67'}, {769 ,U'\u1F70'}, {770 ,U'\u1F71'}, {771 ,U'\u1F72'}, + {772 ,U'\u1F73'}, {773 ,U'\u1F74'}, {774 ,U'\u1F75'}, {775 ,U'\u1F76'}, {776 ,U'\u1F77'}, {777 ,U'\u1F78'}, {778 ,U'\u1F79'}, {779 ,U'\u1F7A'}, {780 ,U'\u1F7B'}, {781 ,U'\u1F7C'}, {782 ,U'\u1F7D'}, {783 ,U'\u1F80'}, {785 ,U'\u1F81'}, {787 ,U'\u1F82'}, {789 ,U'\u1F83'}, {791 ,U'\u1F84'}, + {793 ,U'\u1F85'}, {795 ,U'\u1F86'}, {797 ,U'\u1F87'}, {799 ,U'\u1F88'}, {801 ,U'\u1F89'}, {803 ,U'\u1F8A'}, {805 ,U'\u1F8B'}, {807 ,U'\u1F8C'}, {809 ,U'\u1F8D'}, {811 ,U'\u1F8E'}, {813 ,U'\u1F8F'}, {815 ,U'\u1F90'}, {817 ,U'\u1F91'}, {819 ,U'\u1F92'}, {821 ,U'\u1F93'}, {823 ,U'\u1F94'}, + {825 ,U'\u1F95'}, {827 ,U'\u1F96'}, {829 ,U'\u1F97'}, {831 ,U'\u1F98'}, {833 ,U'\u1F99'}, {835 ,U'\u1F9A'}, {837 ,U'\u1F9B'}, {839 ,U'\u1F9C'}, {841 ,U'\u1F9D'}, {843 ,U'\u1F9E'}, {845 ,U'\u1F9F'}, {847 ,U'\u1FA0'}, {849 ,U'\u1FA1'}, {851 ,U'\u1FA2'}, {853 ,U'\u1FA3'}, {855 ,U'\u1FA4'}, + {857 ,U'\u1FA5'}, {859 ,U'\u1FA6'}, {861 ,U'\u1FA7'}, {863 ,U'\u1FA8'}, {865 ,U'\u1FA9'}, {867 ,U'\u1FAA'}, {869 ,U'\u1FAB'}, {871 ,U'\u1FAC'}, {873 ,U'\u1FAD'}, {875 ,U'\u1FAE'}, {877 ,U'\u1FAF'}, {879 ,U'\u1FB0'}, {880 ,U'\u1FB1'}, {881 ,U'\u1FB2'}, {883 ,U'\u1FB3'}, {885 ,U'\u1FB4'}, + {887 ,U'\u1FB6'}, {889 ,U'\u1FB7'}, {892 ,U'\u1FBC'}, {894 ,U'\u1FBE'}, {895 ,U'\u1FC2'}, {897 ,U'\u1FC3'}, {899 ,U'\u1FC4'}, {901 ,U'\u1FC6'}, {903 ,U'\u1FC7'}, {906 ,U'\u1FCC'}, {908 ,U'\u1FD0'}, {909 ,U'\u1FD1'}, {910 ,U'\u1FD2'}, {913 ,U'\u1FD3'}, {916 ,U'\u1FD6'}, {918 ,U'\u1FD7'}, + {921 ,U'\u1FE0'}, {922 ,U'\u1FE1'}, {923 ,U'\u1FE2'}, {926 ,U'\u1FE3'}, {929 ,U'\u1FE4'}, {931 ,U'\u1FE5'}, {932 ,U'\u1FE6'}, {934 ,U'\u1FE7'}, {937 ,U'\u1FF2'}, {939 ,U'\u1FF3'}, {941 ,U'\u1FF4'}, {943 ,U'\u1FF6'}, {945 ,U'\u1FF7'}, {948 ,U'\u1FFC'}, {950 ,U'\u214E'}, {951 ,U'\u2170'}, + {952 ,U'\u2171'}, {953 ,U'\u2172'}, {954 ,U'\u2173'}, {955 ,U'\u2174'}, {956 ,U'\u2175'}, {957 ,U'\u2176'}, {958 ,U'\u2177'}, {959 ,U'\u2178'}, {960 ,U'\u2179'}, {961 ,U'\u217A'}, {962 ,U'\u217B'}, {963 ,U'\u217C'}, {964 ,U'\u217D'}, {965 ,U'\u217E'}, {966 ,U'\u217F'}, {967 ,U'\u2184'}, + {968 ,U'\u24D0'}, {969 ,U'\u24D1'}, {970 ,U'\u24D2'}, {971 ,U'\u24D3'}, {972 ,U'\u24D4'}, {973 ,U'\u24D5'}, {974 ,U'\u24D6'}, {975 ,U'\u24D7'}, {976 ,U'\u24D8'}, {977 ,U'\u24D9'}, {978 ,U'\u24DA'}, {979 ,U'\u24DB'}, {980 ,U'\u24DC'}, {981 ,U'\u24DD'}, {982 ,U'\u24DE'}, {983 ,U'\u24DF'}, + {984 ,U'\u24E0'}, {985 ,U'\u24E1'}, {986 ,U'\u24E2'}, {987 ,U'\u24E3'}, {988 ,U'\u24E4'}, {989 ,U'\u24E5'}, {990 ,U'\u24E6'}, {991 ,U'\u24E7'}, {992 ,U'\u24E8'}, {993 ,U'\u24E9'}, {994 ,U'\u2C30'}, {995 ,U'\u2C31'}, {996 ,U'\u2C32'}, {997 ,U'\u2C33'}, {998 ,U'\u2C34'}, {999 ,U'\u2C35'}, + {1000 ,U'\u2C36'}, {1001 ,U'\u2C37'}, {1002 ,U'\u2C38'}, {1003 ,U'\u2C39'}, {1004 ,U'\u2C3A'}, {1005 ,U'\u2C3B'}, {1006 ,U'\u2C3C'}, {1007 ,U'\u2C3D'}, {1008 ,U'\u2C3E'}, {1009 ,U'\u2C3F'}, {1010 ,U'\u2C40'}, {1011 ,U'\u2C41'}, {1012 ,U'\u2C42'}, {1013 ,U'\u2C43'}, {1014 ,U'\u2C44'}, {1015 ,U'\u2C45'}, + {1016 ,U'\u2C46'}, {1017 ,U'\u2C47'}, {1018 ,U'\u2C48'}, {1019 ,U'\u2C49'}, {1020 ,U'\u2C4A'}, {1021 ,U'\u2C4B'}, {1022 ,U'\u2C4C'}, {1023 ,U'\u2C4D'}, {1024 ,U'\u2C4E'}, {1025 ,U'\u2C4F'}, {1026 ,U'\u2C50'}, {1027 ,U'\u2C51'}, {1028 ,U'\u2C52'}, {1029 ,U'\u2C53'}, {1030 ,U'\u2C54'}, {1031 ,U'\u2C55'}, + {1032 ,U'\u2C56'}, {1033 ,U'\u2C57'}, {1034 ,U'\u2C58'}, {1035 ,U'\u2C59'}, {1036 ,U'\u2C5A'}, {1037 ,U'\u2C5B'}, {1038 ,U'\u2C5C'}, {1039 ,U'\u2C5D'}, {1040 ,U'\u2C5E'}, {1041 ,U'\u2C5F'}, {1042 ,U'\u2C61'}, {1043 ,U'\u2C65'}, {1044 ,U'\u2C66'}, {1045 ,U'\u2C68'}, {1046 ,U'\u2C6A'}, {1047 ,U'\u2C6C'}, + {1048 ,U'\u2C73'}, {1049 ,U'\u2C76'}, {1050 ,U'\u2C81'}, {1051 ,U'\u2C83'}, {1052 ,U'\u2C85'}, {1053 ,U'\u2C87'}, {1054 ,U'\u2C89'}, {1055 ,U'\u2C8B'}, {1056 ,U'\u2C8D'}, {1057 ,U'\u2C8F'}, {1058 ,U'\u2C91'}, {1059 ,U'\u2C93'}, {1060 ,U'\u2C95'}, {1061 ,U'\u2C97'}, {1062 ,U'\u2C99'}, {1063 ,U'\u2C9B'}, + {1064 ,U'\u2C9D'}, {1065 ,U'\u2C9F'}, {1066 ,U'\u2CA1'}, {1067 ,U'\u2CA3'}, {1068 ,U'\u2CA5'}, {1069 ,U'\u2CA7'}, {1070 ,U'\u2CA9'}, {1071 ,U'\u2CAB'}, {1072 ,U'\u2CAD'}, {1073 ,U'\u2CAF'}, {1074 ,U'\u2CB1'}, {1075 ,U'\u2CB3'}, {1076 ,U'\u2CB5'}, {1077 ,U'\u2CB7'}, {1078 ,U'\u2CB9'}, {1079 ,U'\u2CBB'}, + {1080 ,U'\u2CBD'}, {1081 ,U'\u2CBF'}, {1082 ,U'\u2CC1'}, {1083 ,U'\u2CC3'}, {1084 ,U'\u2CC5'}, {1085 ,U'\u2CC7'}, {1086 ,U'\u2CC9'}, {1087 ,U'\u2CCB'}, {1088 ,U'\u2CCD'}, {1089 ,U'\u2CCF'}, {1090 ,U'\u2CD1'}, {1091 ,U'\u2CD3'}, {1092 ,U'\u2CD5'}, {1093 ,U'\u2CD7'}, {1094 ,U'\u2CD9'}, {1095 ,U'\u2CDB'}, + {1096 ,U'\u2CDD'}, {1097 ,U'\u2CDF'}, {1098 ,U'\u2CE1'}, {1099 ,U'\u2CE3'}, {1100 ,U'\u2CEC'}, {1101 ,U'\u2CEE'}, {1102 ,U'\u2CF3'}, {1103 ,U'\u2D00'}, {1104 ,U'\u2D01'}, {1105 ,U'\u2D02'}, {1106 ,U'\u2D03'}, {1107 ,U'\u2D04'}, {1108 ,U'\u2D05'}, {1109 ,U'\u2D06'}, {1110 ,U'\u2D07'}, {1111 ,U'\u2D08'}, + {1112 ,U'\u2D09'}, {1113 ,U'\u2D0A'}, {1114 ,U'\u2D0B'}, {1115 ,U'\u2D0C'}, {1116 ,U'\u2D0D'}, {1117 ,U'\u2D0E'}, {1118 ,U'\u2D0F'}, {1119 ,U'\u2D10'}, {1120 ,U'\u2D11'}, {1121 ,U'\u2D12'}, {1122 ,U'\u2D13'}, {1123 ,U'\u2D14'}, {1124 ,U'\u2D15'}, {1125 ,U'\u2D16'}, {1126 ,U'\u2D17'}, {1127 ,U'\u2D18'}, + {1128 ,U'\u2D19'}, {1129 ,U'\u2D1A'}, {1130 ,U'\u2D1B'}, {1131 ,U'\u2D1C'}, {1132 ,U'\u2D1D'}, {1133 ,U'\u2D1E'}, {1134 ,U'\u2D1F'}, {1135 ,U'\u2D20'}, {1136 ,U'\u2D21'}, {1137 ,U'\u2D22'}, {1138 ,U'\u2D23'}, {1139 ,U'\u2D24'}, {1140 ,U'\u2D25'}, {1141 ,U'\u2D27'}, {1142 ,U'\u2D2D'}, {1143 ,U'\uA641'}, + {1144 ,U'\uA643'}, {1145 ,U'\uA645'}, {1146 ,U'\uA647'}, {1147 ,U'\uA649'}, {1148 ,U'\uA64B'}, {1149 ,U'\uA64D'}, {1150 ,U'\uA64F'}, {1151 ,U'\uA651'}, {1152 ,U'\uA653'}, {1153 ,U'\uA655'}, {1154 ,U'\uA657'}, {1155 ,U'\uA659'}, {1156 ,U'\uA65B'}, {1157 ,U'\uA65D'}, {1158 ,U'\uA65F'}, {1159 ,U'\uA661'}, + {1160 ,U'\uA663'}, {1161 ,U'\uA665'}, {1162 ,U'\uA667'}, {1163 ,U'\uA669'}, {1164 ,U'\uA66B'}, {1165 ,U'\uA66D'}, {1166 ,U'\uA681'}, {1167 ,U'\uA683'}, {1168 ,U'\uA685'}, {1169 ,U'\uA687'}, {1170 ,U'\uA689'}, {1171 ,U'\uA68B'}, {1172 ,U'\uA68D'}, {1173 ,U'\uA68F'}, {1174 ,U'\uA691'}, {1175 ,U'\uA693'}, + {1176 ,U'\uA695'}, {1177 ,U'\uA697'}, {1178 ,U'\uA699'}, {1179 ,U'\uA69B'}, {1180 ,U'\uA723'}, {1181 ,U'\uA725'}, {1182 ,U'\uA727'}, {1183 ,U'\uA729'}, {1184 ,U'\uA72B'}, {1185 ,U'\uA72D'}, {1186 ,U'\uA72F'}, {1187 ,U'\uA733'}, {1188 ,U'\uA735'}, {1189 ,U'\uA737'}, {1190 ,U'\uA739'}, {1191 ,U'\uA73B'}, + {1192 ,U'\uA73D'}, {1193 ,U'\uA73F'}, {1194 ,U'\uA741'}, {1195 ,U'\uA743'}, {1196 ,U'\uA745'}, {1197 ,U'\uA747'}, {1198 ,U'\uA749'}, {1199 ,U'\uA74B'}, {1200 ,U'\uA74D'}, {1201 ,U'\uA74F'}, {1202 ,U'\uA751'}, {1203 ,U'\uA753'}, {1204 ,U'\uA755'}, {1205 ,U'\uA757'}, {1206 ,U'\uA759'}, {1207 ,U'\uA75B'}, + {1208 ,U'\uA75D'}, {1209 ,U'\uA75F'}, {1210 ,U'\uA761'}, {1211 ,U'\uA763'}, {1212 ,U'\uA765'}, {1213 ,U'\uA767'}, {1214 ,U'\uA769'}, {1215 ,U'\uA76B'}, {1216 ,U'\uA76D'}, {1217 ,U'\uA76F'}, {1218 ,U'\uA77A'}, {1219 ,U'\uA77C'}, {1220 ,U'\uA77F'}, {1221 ,U'\uA781'}, {1222 ,U'\uA783'}, {1223 ,U'\uA785'}, + {1224 ,U'\uA787'}, {1225 ,U'\uA78C'}, {1226 ,U'\uA791'}, {1227 ,U'\uA793'}, {1228 ,U'\uA794'}, {1229 ,U'\uA797'}, {1230 ,U'\uA799'}, {1231 ,U'\uA79B'}, {1232 ,U'\uA79D'}, {1233 ,U'\uA79F'}, {1234 ,U'\uA7A1'}, {1235 ,U'\uA7A3'}, {1236 ,U'\uA7A5'}, {1237 ,U'\uA7A7'}, {1238 ,U'\uA7A9'}, {1239 ,U'\uA7B5'}, + {1240 ,U'\uA7B7'}, {1241 ,U'\uA7B9'}, {1242 ,U'\uA7BB'}, {1243 ,U'\uA7BD'}, {1244 ,U'\uA7BF'}, {1245 ,U'\uA7C1'}, {1246 ,U'\uA7C3'}, {1247 ,U'\uA7C8'}, {1248 ,U'\uA7CA'}, {1249 ,U'\uA7CD'}, {1250 ,U'\uA7D1'}, {1251 ,U'\uA7D7'}, {1252 ,U'\uA7D9'}, {1253 ,U'\uA7DB'}, {1254 ,U'\uA7F6'}, {1255 ,U'\uAB53'}, + {1256 ,U'\uAB70'}, {1257 ,U'\uAB71'}, {1258 ,U'\uAB72'}, {1259 ,U'\uAB73'}, {1260 ,U'\uAB74'}, {1261 ,U'\uAB75'}, {1262 ,U'\uAB76'}, {1263 ,U'\uAB77'}, {1264 ,U'\uAB78'}, {1265 ,U'\uAB79'}, {1266 ,U'\uAB7A'}, {1267 ,U'\uAB7B'}, {1268 ,U'\uAB7C'}, {1269 ,U'\uAB7D'}, {1270 ,U'\uAB7E'}, {1271 ,U'\uAB7F'}, + {1272 ,U'\uAB80'}, {1273 ,U'\uAB81'}, {1274 ,U'\uAB82'}, {1275 ,U'\uAB83'}, {1276 ,U'\uAB84'}, {1277 ,U'\uAB85'}, {1278 ,U'\uAB86'}, {1279 ,U'\uAB87'}, {1280 ,U'\uAB88'}, {1281 ,U'\uAB89'}, {1282 ,U'\uAB8A'}, {1283 ,U'\uAB8B'}, {1284 ,U'\uAB8C'}, {1285 ,U'\uAB8D'}, {1286 ,U'\uAB8E'}, {1287 ,U'\uAB8F'}, + {1288 ,U'\uAB90'}, {1289 ,U'\uAB91'}, {1290 ,U'\uAB92'}, {1291 ,U'\uAB93'}, {1292 ,U'\uAB94'}, {1293 ,U'\uAB95'}, {1294 ,U'\uAB96'}, {1295 ,U'\uAB97'}, {1296 ,U'\uAB98'}, {1297 ,U'\uAB99'}, {1298 ,U'\uAB9A'}, {1299 ,U'\uAB9B'}, {1300 ,U'\uAB9C'}, {1301 ,U'\uAB9D'}, {1302 ,U'\uAB9E'}, {1303 ,U'\uAB9F'}, + {1304 ,U'\uABA0'}, {1305 ,U'\uABA1'}, {1306 ,U'\uABA2'}, {1307 ,U'\uABA3'}, {1308 ,U'\uABA4'}, {1309 ,U'\uABA5'}, {1310 ,U'\uABA6'}, {1311 ,U'\uABA7'}, {1312 ,U'\uABA8'}, {1313 ,U'\uABA9'}, {1314 ,U'\uABAA'}, {1315 ,U'\uABAB'}, {1316 ,U'\uABAC'}, {1317 ,U'\uABAD'}, {1318 ,U'\uABAE'}, {1319 ,U'\uABAF'}, + {1320 ,U'\uABB0'}, {1321 ,U'\uABB1'}, {1322 ,U'\uABB2'}, {1323 ,U'\uABB3'}, {1324 ,U'\uABB4'}, {1325 ,U'\uABB5'}, {1326 ,U'\uABB6'}, {1327 ,U'\uABB7'}, {1328 ,U'\uABB8'}, {1329 ,U'\uABB9'}, {1330 ,U'\uABBA'}, {1331 ,U'\uABBB'}, {1332 ,U'\uABBC'}, {1333 ,U'\uABBD'}, {1334 ,U'\uABBE'}, {1335 ,U'\uABBF'}, + {1336 ,U'\uFB00'}, {1338 ,U'\uFB01'}, {1340 ,U'\uFB02'}, {1342 ,U'\uFB03'}, {1345 ,U'\uFB04'}, {1348 ,U'\uFB05'}, {1350 ,U'\uFB06'}, {1352 ,U'\uFB13'}, {1354 ,U'\uFB14'}, {1356 ,U'\uFB15'}, {1358 ,U'\uFB16'}, {1360 ,U'\uFB17'}, {1362 ,U'\uFF41'}, {1363 ,U'\uFF42'}, {1364 ,U'\uFF43'}, {1365 ,U'\uFF44'}, + {1366 ,U'\uFF45'}, {1367 ,U'\uFF46'}, {1368 ,U'\uFF47'}, {1369 ,U'\uFF48'}, {1370 ,U'\uFF49'}, {1371 ,U'\uFF4A'}, {1372 ,U'\uFF4B'}, {1373 ,U'\uFF4C'}, {1374 ,U'\uFF4D'}, {1375 ,U'\uFF4E'}, {1376 ,U'\uFF4F'}, {1377 ,U'\uFF50'}, {1378 ,U'\uFF51'}, {1379 ,U'\uFF52'}, {1380 ,U'\uFF53'}, {1381 ,U'\uFF54'}, + {1382 ,U'\uFF55'}, {1383 ,U'\uFF56'}, {1384 ,U'\uFF57'}, {1385 ,U'\uFF58'}, {1386 ,U'\uFF59'}, {1387 ,U'\uFF5A'}, {1388 ,U'\U00010428'}, {1390 ,U'\U00010429'}, {1392 ,U'\U0001042A'}, {1394 ,U'\U0001042B'}, {1396 ,U'\U0001042C'}, {1398 ,U'\U0001042D'}, {1400 ,U'\U0001042E'}, {1402 ,U'\U0001042F'}, {1404 ,U'\U00010430'}, {1406 ,U'\U00010431'}, + {1408 ,U'\U00010432'}, {1410 ,U'\U00010433'}, {1412 ,U'\U00010434'}, {1414 ,U'\U00010435'}, {1416 ,U'\U00010436'}, {1418 ,U'\U00010437'}, {1420 ,U'\U00010438'}, {1422 ,U'\U00010439'}, {1424 ,U'\U0001043A'}, {1426 ,U'\U0001043B'}, {1428 ,U'\U0001043C'}, {1430 ,U'\U0001043D'}, {1432 ,U'\U0001043E'}, {1434 ,U'\U0001043F'}, {1436 ,U'\U00010440'}, {1438 ,U'\U00010441'}, + {1440 ,U'\U00010442'}, {1442 ,U'\U00010443'}, {1444 ,U'\U00010444'}, {1446 ,U'\U00010445'}, {1448 ,U'\U00010446'}, {1450 ,U'\U00010447'}, {1452 ,U'\U00010448'}, {1454 ,U'\U00010449'}, {1456 ,U'\U0001044A'}, {1458 ,U'\U0001044B'}, {1460 ,U'\U0001044C'}, {1462 ,U'\U0001044D'}, {1464 ,U'\U0001044E'}, {1466 ,U'\U0001044F'}, {1468 ,U'\U000104D8'}, {1470 ,U'\U000104D9'}, + {1472 ,U'\U000104DA'}, {1474 ,U'\U000104DB'}, {1476 ,U'\U000104DC'}, {1478 ,U'\U000104DD'}, {1480 ,U'\U000104DE'}, {1482 ,U'\U000104DF'}, {1484 ,U'\U000104E0'}, {1486 ,U'\U000104E1'}, {1488 ,U'\U000104E2'}, {1490 ,U'\U000104E3'}, {1492 ,U'\U000104E4'}, {1494 ,U'\U000104E5'}, {1496 ,U'\U000104E6'}, {1498 ,U'\U000104E7'}, {1500 ,U'\U000104E8'}, {1502 ,U'\U000104E9'}, + {1504 ,U'\U000104EA'}, {1506 ,U'\U000104EB'}, {1508 ,U'\U000104EC'}, {1510 ,U'\U000104ED'}, {1512 ,U'\U000104EE'}, {1514 ,U'\U000104EF'}, {1516 ,U'\U000104F0'}, {1518 ,U'\U000104F1'}, {1520 ,U'\U000104F2'}, {1522 ,U'\U000104F3'}, {1524 ,U'\U000104F4'}, {1526 ,U'\U000104F5'}, {1528 ,U'\U000104F6'}, {1530 ,U'\U000104F7'}, {1532 ,U'\U000104F8'}, {1534 ,U'\U000104F9'}, + {1536 ,U'\U000104FA'}, {1538 ,U'\U000104FB'}, {1540 ,U'\U00010597'}, {1542 ,U'\U00010598'}, {1544 ,U'\U00010599'}, {1546 ,U'\U0001059A'}, {1548 ,U'\U0001059B'}, {1550 ,U'\U0001059C'}, {1552 ,U'\U0001059D'}, {1554 ,U'\U0001059E'}, {1556 ,U'\U0001059F'}, {1558 ,U'\U000105A0'}, {1560 ,U'\U000105A1'}, {1562 ,U'\U000105A3'}, {1564 ,U'\U000105A4'}, {1566 ,U'\U000105A5'}, + {1568 ,U'\U000105A6'}, {1570 ,U'\U000105A7'}, {1572 ,U'\U000105A8'}, {1574 ,U'\U000105A9'}, {1576 ,U'\U000105AA'}, {1578 ,U'\U000105AB'}, {1580 ,U'\U000105AC'}, {1582 ,U'\U000105AD'}, {1584 ,U'\U000105AE'}, {1586 ,U'\U000105AF'}, {1588 ,U'\U000105B0'}, {1590 ,U'\U000105B1'}, {1592 ,U'\U000105B3'}, {1594 ,U'\U000105B4'}, {1596 ,U'\U000105B5'}, {1598 ,U'\U000105B6'}, + {1600 ,U'\U000105B7'}, {1602 ,U'\U000105B8'}, {1604 ,U'\U000105B9'}, {1606 ,U'\U000105BB'}, {1608 ,U'\U000105BC'}, {1610 ,U'\U00010CC0'}, {1612 ,U'\U00010CC1'}, {1614 ,U'\U00010CC2'}, {1616 ,U'\U00010CC3'}, {1618 ,U'\U00010CC4'}, {1620 ,U'\U00010CC5'}, {1622 ,U'\U00010CC6'}, {1624 ,U'\U00010CC7'}, {1626 ,U'\U00010CC8'}, {1628 ,U'\U00010CC9'}, {1630 ,U'\U00010CCA'}, + {1632 ,U'\U00010CCB'}, {1634 ,U'\U00010CCC'}, {1636 ,U'\U00010CCD'}, {1638 ,U'\U00010CCE'}, {1640 ,U'\U00010CCF'}, {1642 ,U'\U00010CD0'}, {1644 ,U'\U00010CD1'}, {1646 ,U'\U00010CD2'}, {1648 ,U'\U00010CD3'}, {1650 ,U'\U00010CD4'}, {1652 ,U'\U00010CD5'}, {1654 ,U'\U00010CD6'}, {1656 ,U'\U00010CD7'}, {1658 ,U'\U00010CD8'}, {1660 ,U'\U00010CD9'}, {1662 ,U'\U00010CDA'}, + {1664 ,U'\U00010CDB'}, {1666 ,U'\U00010CDC'}, {1668 ,U'\U00010CDD'}, {1670 ,U'\U00010CDE'}, {1672 ,U'\U00010CDF'}, {1674 ,U'\U00010CE0'}, {1676 ,U'\U00010CE1'}, {1678 ,U'\U00010CE2'}, {1680 ,U'\U00010CE3'}, {1682 ,U'\U00010CE4'}, {1684 ,U'\U00010CE5'}, {1686 ,U'\U00010CE6'}, {1688 ,U'\U00010CE7'}, {1690 ,U'\U00010CE8'}, {1692 ,U'\U00010CE9'}, {1694 ,U'\U00010CEA'}, + {1696 ,U'\U00010CEB'}, {1698 ,U'\U00010CEC'}, {1700 ,U'\U00010CED'}, {1702 ,U'\U00010CEE'}, {1704 ,U'\U00010CEF'}, {1706 ,U'\U00010CF0'}, {1708 ,U'\U00010CF1'}, {1710 ,U'\U00010CF2'}, {1712 ,U'\U00010D70'}, {1714 ,U'\U00010D71'}, {1716 ,U'\U00010D72'}, {1718 ,U'\U00010D73'}, {1720 ,U'\U00010D74'}, {1722 ,U'\U00010D75'}, {1724 ,U'\U00010D76'}, {1726 ,U'\U00010D77'}, + {1728 ,U'\U00010D78'}, {1730 ,U'\U00010D79'}, {1732 ,U'\U00010D7A'}, {1734 ,U'\U00010D7B'}, {1736 ,U'\U00010D7C'}, {1738 ,U'\U00010D7D'}, {1740 ,U'\U00010D7E'}, {1742 ,U'\U00010D7F'}, {1744 ,U'\U00010D80'}, {1746 ,U'\U00010D81'}, {1748 ,U'\U00010D82'}, {1750 ,U'\U00010D83'}, {1752 ,U'\U00010D84'}, {1754 ,U'\U00010D85'}, {1756 ,U'\U000118C0'}, {1758 ,U'\U000118C1'}, + {1760 ,U'\U000118C2'}, {1762 ,U'\U000118C3'}, {1764 ,U'\U000118C4'}, {1766 ,U'\U000118C5'}, {1768 ,U'\U000118C6'}, {1770 ,U'\U000118C7'}, {1772 ,U'\U000118C8'}, {1774 ,U'\U000118C9'}, {1776 ,U'\U000118CA'}, {1778 ,U'\U000118CB'}, {1780 ,U'\U000118CC'}, {1782 ,U'\U000118CD'}, {1784 ,U'\U000118CE'}, {1786 ,U'\U000118CF'}, {1788 ,U'\U000118D0'}, {1790 ,U'\U000118D1'}, + {1792 ,U'\U000118D2'}, {1794 ,U'\U000118D3'}, {1796 ,U'\U000118D4'}, {1798 ,U'\U000118D5'}, {1800 ,U'\U000118D6'}, {1802 ,U'\U000118D7'}, {1804 ,U'\U000118D8'}, {1806 ,U'\U000118D9'}, {1808 ,U'\U000118DA'}, {1810 ,U'\U000118DB'}, {1812 ,U'\U000118DC'}, {1814 ,U'\U000118DD'}, {1816 ,U'\U000118DE'}, {1818 ,U'\U000118DF'}, {1820 ,U'\U00016E60'}, {1822 ,U'\U00016E61'}, + {1824 ,U'\U00016E62'}, {1826 ,U'\U00016E63'}, {1828 ,U'\U00016E64'}, {1830 ,U'\U00016E65'}, {1832 ,U'\U00016E66'}, {1834 ,U'\U00016E67'}, {1836 ,U'\U00016E68'}, {1838 ,U'\U00016E69'}, {1840 ,U'\U00016E6A'}, {1842 ,U'\U00016E6B'}, {1844 ,U'\U00016E6C'}, {1846 ,U'\U00016E6D'}, {1848 ,U'\U00016E6E'}, {1850 ,U'\U00016E6F'}, {1852 ,U'\U00016E70'}, {1854 ,U'\U00016E71'}, + {1856 ,U'\U00016E72'}, {1858 ,U'\U00016E73'}, {1860 ,U'\U00016E74'}, {1862 ,U'\U00016E75'}, {1864 ,U'\U00016E76'}, {1866 ,U'\U00016E77'}, {1868 ,U'\U00016E78'}, {1870 ,U'\U00016E79'}, {1872 ,U'\U00016E7A'}, {1874 ,U'\U00016E7B'}, {1876 ,U'\U00016E7C'}, {1878 ,U'\U00016E7D'}, {1880 ,U'\U00016E7E'}, {1882 ,U'\U00016E7F'}, {1884 ,U'\U0001E922'}, {1886 ,U'\U0001E923'}, + {1888 ,U'\U0001E924'}, {1890 ,U'\U0001E925'}, {1892 ,U'\U0001E926'}, {1894 ,U'\U0001E927'}, {1896 ,U'\U0001E928'}, {1898 ,U'\U0001E929'}, {1900 ,U'\U0001E92A'}, {1902 ,U'\U0001E92B'}, {1904 ,U'\U0001E92C'}, {1906 ,U'\U0001E92D'}, {1908 ,U'\U0001E92E'}, {1910 ,U'\U0001E92F'}, {1912 ,U'\U0001E930'}, {1914 ,U'\U0001E931'}, {1916 ,U'\U0001E932'}, {1918 ,U'\U0001E933'}, + {1920 ,U'\U0001E934'}, {1922 ,U'\U0001E935'}, {1924 ,U'\U0001E936'}, {1926 ,U'\U0001E937'}, {1928 ,U'\U0001E938'}, {1930 ,U'\U0001E939'}, {1932 ,U'\U0001E93A'}, {1934 ,U'\U0001E93B'}, {1936 ,U'\U0001E93C'}, {1938 ,U'\U0001E93D'}, {1940 ,U'\U0001E93E'}, {1942 ,U'\U0001E93F'}, {1944 ,U'\U0001E940'}, {1946 ,U'\U0001E941'}, {1948 ,U'\U0001E942'}, {1950 ,U'\U0001E943'}, {1952 , 0} }; - constexpr size_t lowercase_source_chars_length = 1485; + constexpr size_t lowercase_source_chars_length = 1552; const char16_t uppercase_chars[] = u"\u0041\u0042\u0043\u0044\u0045\u0046\u0047\u0048\u0049\u004A\u004B\u004C\u004D\u004E\u004F\u0050" @@ -509,99 +529,103 @@ namespace sysstr::util::unicode u"\u0128\u012A\u012C\u012E\u0049\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147" u"\u02BC\u004E\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164" u"\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0179\u017B\u017D\u0053\u0243\u0182\u0184" - u"\u0187\u018B\u0191\u01F6\u0198\u023D\u0220\u01A0\u01A2\u01A4\u01A7\u01AC\u01AF\u01B3\u01B5\u01B8" - u"\u01BC\u01F7\u01C4\u01C4\u01C7\u01C7\u01CA\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB" - u"\u018E\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u004A\u030C\u01F1\u01F1\u01F4\u01F8" - u"\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218" - u"\u021A\u021C\u021E\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023B\u2C7E\u2C7F\u0241" - u"\u0246\u0248\u024A\u024C\u024E\u2C6F\u2C6D\u2C70\u0181\u0186\u0189\u018A\u018F\u0190\uA7AB\u0193" - u"\uA7AC\u0194\uA78D\uA7AA\u0197\u0196\uA7AE\u2C62\uA7AD\u019C\u2C6E\u019D\u019F\u2C64\u01A6\uA7C5" - u"\u01A9\uA7B1\u01AE\u0244\u01B1\u01B2\u0245\u01B7\uA7B2\uA7B0\u0399\u0370\u0372\u0376\u03FD\u03FE" - u"\u03FF\u0399\u0308\u0301\u0386\u0388\u0389\u038A\u03A5\u0308\u0301\u0391\u0392\u0393\u0394\u0395" - u"\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A3\u03A4\u03A5" - u"\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u038C\u038E\u038F\u0392\u0398\u03A6\u03A0\u03CF\u03D8\u03DA" - u"\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u039A\u03A1\u03F9\u037F\u0395\u03F7" - u"\u03FA\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E" - u"\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E" - u"\u042F\u0400\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u040D\u040E" - u"\u040F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C" - u"\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4" - u"\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C1\u04C3\u04C5" - u"\u04C7\u04C9\u04CB\u04CD\u04C0\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4" - u"\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504" - u"\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524" - u"\u0526\u0528\u052A\u052C\u052E\u0531\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539\u053A\u053B" - u"\u053C\u053D\u053E\u053F\u0540\u0541\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549\u054A\u054B" - u"\u054C\u054D\u054E\u054F\u0550\u0551\u0552\u0553\u0554\u0555\u0556\u0535\u0552\u1C90\u1C91\u1C92" - u"\u1C93\u1C94\u1C95\u1C96\u1C97\u1C98\u1C99\u1C9A\u1C9B\u1C9C\u1C9D\u1C9E\u1C9F\u1CA0\u1CA1\u1CA2" - u"\u1CA3\u1CA4\u1CA5\u1CA6\u1CA7\u1CA8\u1CA9\u1CAA\u1CAB\u1CAC\u1CAD\u1CAE\u1CAF\u1CB0\u1CB1\u1CB2" - u"\u1CB3\u1CB4\u1CB5\u1CB6\u1CB7\u1CB8\u1CB9\u1CBA\u1CBD\u1CBE\u1CBF\u13F0\u13F1\u13F2\u13F3\u13F4" - u"\u13F5\u0412\u0414\u041E\u0421\u0422\u0422\u042A\u0462\uA64A\uA77D\u2C63\uA7C6\u1E00\u1E02\u1E04" - u"\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24" - u"\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44" - u"\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64" - u"\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84" - u"\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u0048\u0331\u0054\u0308\u0057\u030A\u0059\u030A" - u"\u0041\u02BE\u1E60\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8" - u"\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8" - u"\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8" - u"\u1EFA\u1EFC\u1EFE\u1F08\u1F09\u1F0A\u1F0B\u1F0C\u1F0D\u1F0E\u1F0F\u1F18\u1F19\u1F1A\u1F1B\u1F1C" - u"\u1F1D\u1F28\u1F29\u1F2A\u1F2B\u1F2C\u1F2D\u1F2E\u1F2F\u1F38\u1F39\u1F3A\u1F3B\u1F3C\u1F3D\u1F3E" - u"\u1F3F\u1F48\u1F49\u1F4A\u1F4B\u1F4C\u1F4D\u03A5\u0313\u1F59\u03A5\u0313\u0300\u1F5B\u03A5\u0313" - u"\u0301\u1F5D\u03A5\u0313\u0342\u1F5F\u1F68\u1F69\u1F6A\u1F6B\u1F6C\u1F6D\u1F6E\u1F6F\u1FBA\u1FBB" - u"\u1FC8\u1FC9\u1FCA\u1FCB\u1FDA\u1FDB\u1FF8\u1FF9\u1FEA\u1FEB\u1FFA\u1FFB\u1F08\u0399\u1F09\u0399" - u"\u1F0A\u0399\u1F0B\u0399\u1F0C\u0399\u1F0D\u0399\u1F0E\u0399\u1F0F\u0399\u1F08\u0399\u1F09\u0399" - u"\u1F0A\u0399\u1F0B\u0399\u1F0C\u0399\u1F0D\u0399\u1F0E\u0399\u1F0F\u0399\u1F28\u0399\u1F29\u0399" - u"\u1F2A\u0399\u1F2B\u0399\u1F2C\u0399\u1F2D\u0399\u1F2E\u0399\u1F2F\u0399\u1F28\u0399\u1F29\u0399" - u"\u1F2A\u0399\u1F2B\u0399\u1F2C\u0399\u1F2D\u0399\u1F2E\u0399\u1F2F\u0399\u1F68\u0399\u1F69\u0399" - u"\u1F6A\u0399\u1F6B\u0399\u1F6C\u0399\u1F6D\u0399\u1F6E\u0399\u1F6F\u0399\u1F68\u0399\u1F69\u0399" - u"\u1F6A\u0399\u1F6B\u0399\u1F6C\u0399\u1F6D\u0399\u1F6E\u0399\u1F6F\u0399\u1FB8\u1FB9\u1FBA\u0399" - u"\u0391\u0399\u0386\u0399\u0391\u0342\u0391\u0342\u0399\u0391\u0399\u0399\u1FCA\u0399\u0397\u0399" - u"\u0389\u0399\u0397\u0342\u0397\u0342\u0399\u0397\u0399\u1FD8\u1FD9\u0399\u0308\u0300\u0399\u0308" - u"\u0301\u0399\u0342\u0399\u0308\u0342\u1FE8\u1FE9\u03A5\u0308\u0300\u03A5\u0308\u0301\u03A1\u0313" - u"\u1FEC\u03A5\u0342\u03A5\u0308\u0342\u1FFA\u0399\u03A9\u0399\u038F\u0399\u03A9\u0342\u03A9\u0342" - u"\u0399\u03A9\u0399\u2132\u2160\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168\u2169\u216A\u216B" - u"\u216C\u216D\u216E\u216F\u2183\u24B6\u24B7\u24B8\u24B9\u24BA\u24BB\u24BC\u24BD\u24BE\u24BF\u24C0" - u"\u24C1\u24C2\u24C3\u24C4\u24C5\u24C6\u24C7\u24C8\u24C9\u24CA\u24CB\u24CC\u24CD\u24CE\u24CF\u2C00" - u"\u2C01\u2C02\u2C03\u2C04\u2C05\u2C06\u2C07\u2C08\u2C09\u2C0A\u2C0B\u2C0C\u2C0D\u2C0E\u2C0F\u2C10" - u"\u2C11\u2C12\u2C13\u2C14\u2C15\u2C16\u2C17\u2C18\u2C19\u2C1A\u2C1B\u2C1C\u2C1D\u2C1E\u2C1F\u2C20" - u"\u2C21\u2C22\u2C23\u2C24\u2C25\u2C26\u2C27\u2C28\u2C29\u2C2A\u2C2B\u2C2C\u2C2D\u2C2E\u2C60\u023A" - u"\u023E\u2C67\u2C69\u2C6B\u2C72\u2C75\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92" - u"\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2" - u"\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2" - u"\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\u10A0\u10A1\u10A2\u10A3\u10A4" - u"\u10A5\u10A6\u10A7\u10A8\u10A9\u10AA\u10AB\u10AC\u10AD\u10AE\u10AF\u10B0\u10B1\u10B2\u10B3\u10B4" - u"\u10B5\u10B6\u10B7\u10B8\u10B9\u10BA\u10BB\u10BC\u10BD\u10BE\u10BF\u10C0\u10C1\u10C2\u10C3\u10C4" - u"\u10C5\u10C7\u10CD\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658" - u"\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A" - u"\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732" - u"\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752" - u"\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B" - u"\uA77E\uA780\uA782\uA784\uA786\uA78B\uA790\uA792\uA7C4\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2" - u"\uA7A4\uA7A6\uA7A8\uA7B4\uA7B6\uA7B8\uA7BA\uA7BC\uA7BE\uA7C2\uA7C7\uA7C9\uA7F5\uA7B3\u13A0\u13A1" - u"\u13A2\u13A3\u13A4\u13A5\u13A6\u13A7\u13A8\u13A9\u13AA\u13AB\u13AC\u13AD\u13AE\u13AF\u13B0\u13B1" - u"\u13B2\u13B3\u13B4\u13B5\u13B6\u13B7\u13B8\u13B9\u13BA\u13BB\u13BC\u13BD\u13BE\u13BF\u13C0\u13C1" - u"\u13C2\u13C3\u13C4\u13C5\u13C6\u13C7\u13C8\u13C9\u13CA\u13CB\u13CC\u13CD\u13CE\u13CF\u13D0\u13D1" - u"\u13D2\u13D3\u13D4\u13D5\u13D6\u13D7\u13D8\u13D9\u13DA\u13DB\u13DC\u13DD\u13DE\u13DF\u13E0\u13E1" - u"\u13E2\u13E3\u13E4\u13E5\u13E6\u13E7\u13E8\u13E9\u13EA\u13EB\u13EC\u13ED\u13EE\u13EF\u0046\u0046" - u"\u0046\u0049\u0046\u004C\u0046\u0046\u0049\u0046\u0046\u004C\u0053\u0054\u0053\u0054\u0544\u0546" - u"\u0544\u0535\u0544\u053B\u054E\u0546\u0544\u053D\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26\uFF27\uFF28" - u"\uFF29\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34\uFF35\uFF36\uFF37\uFF38" - u"\uFF39\uFF3A\U00010400\U00010401\U00010402\U00010403\U00010404\U00010405\U00010406\U00010407\U00010408\U00010409\U0001040A\U0001040B\U0001040C\U0001040D" - u"\U0001040E\U0001040F\U00010410\U00010411\U00010412\U00010413\U00010414\U00010415\U00010416\U00010417\U00010418\U00010419\U0001041A\U0001041B\U0001041C\U0001041D" - u"\U0001041E\U0001041F\U00010420\U00010421\U00010422\U00010423\U00010424\U00010425\U00010426\U00010427\U000104B0\U000104B1\U000104B2\U000104B3\U000104B4\U000104B5" - u"\U000104B6\U000104B7\U000104B8\U000104B9\U000104BA\U000104BB\U000104BC\U000104BD\U000104BE\U000104BF\U000104C0\U000104C1\U000104C2\U000104C3\U000104C4\U000104C5" - u"\U000104C6\U000104C7\U000104C8\U000104C9\U000104CA\U000104CB\U000104CC\U000104CD\U000104CE\U000104CF\U000104D0\U000104D1\U000104D2\U000104D3\U00010C80\U00010C81" - u"\U00010C82\U00010C83\U00010C84\U00010C85\U00010C86\U00010C87\U00010C88\U00010C89\U00010C8A\U00010C8B\U00010C8C\U00010C8D\U00010C8E\U00010C8F\U00010C90\U00010C91" - u"\U00010C92\U00010C93\U00010C94\U00010C95\U00010C96\U00010C97\U00010C98\U00010C99\U00010C9A\U00010C9B\U00010C9C\U00010C9D\U00010C9E\U00010C9F\U00010CA0\U00010CA1" - u"\U00010CA2\U00010CA3\U00010CA4\U00010CA5\U00010CA6\U00010CA7\U00010CA8\U00010CA9\U00010CAA\U00010CAB\U00010CAC\U00010CAD\U00010CAE\U00010CAF\U00010CB0\U00010CB1" - u"\U00010CB2\U000118A0\U000118A1\U000118A2\U000118A3\U000118A4\U000118A5\U000118A6\U000118A7\U000118A8\U000118A9\U000118AA\U000118AB\U000118AC\U000118AD\U000118AE" - u"\U000118AF\U000118B0\U000118B1\U000118B2\U000118B3\U000118B4\U000118B5\U000118B6\U000118B7\U000118B8\U000118B9\U000118BA\U000118BB\U000118BC\U000118BD\U000118BE" - u"\U000118BF\U00016E40\U00016E41\U00016E42\U00016E43\U00016E44\U00016E45\U00016E46\U00016E47\U00016E48\U00016E49\U00016E4A\U00016E4B\U00016E4C\U00016E4D\U00016E4E" - u"\U00016E4F\U00016E50\U00016E51\U00016E52\U00016E53\U00016E54\U00016E55\U00016E56\U00016E57\U00016E58\U00016E59\U00016E5A\U00016E5B\U00016E5C\U00016E5D\U00016E5E" - u"\U00016E5F\U0001E900\U0001E901\U0001E902\U0001E903\U0001E904\U0001E905\U0001E906\U0001E907\U0001E908\U0001E909\U0001E90A\U0001E90B\U0001E90C\U0001E90D\U0001E90E" - u"\U0001E90F\U0001E910\U0001E911\U0001E912\U0001E913\U0001E914\U0001E915\U0001E916\U0001E917\U0001E918\U0001E919\U0001E91A\U0001E91B\U0001E91C\U0001E91D\U0001E91E" - u"\U0001E91F\U0001E920\U0001E921"; + u"\u0187\u018B\u0191\u01F6\u0198\u023D\uA7DC\u0220\u01A0\u01A2\u01A4\u01A7\u01AC\u01AF\u01B3\u01B5" + u"\u01B8\u01BC\u01F7\u01C4\u01C4\u01C7\u01C7\u01CA\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9" + u"\u01DB\u018E\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u004A\u030C\u01F1\u01F1\u01F4" + u"\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216" + u"\u0218\u021A\u021C\u021E\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023B\u2C7E\u2C7F" + u"\u0241\u0246\u0248\u024A\u024C\u024E\u2C6F\u2C6D\u2C70\u0181\u0186\u0189\u018A\u018F\u0190\uA7AB" + u"\u0193\uA7AC\u0194\uA7CB\uA78D\uA7AA\u0197\u0196\uA7AE\u2C62\uA7AD\u019C\u2C6E\u019D\u019F\u2C64" + u"\u01A6\uA7C5\u01A9\uA7B1\u01AE\u0244\u01B1\u01B2\u0245\u01B7\uA7B2\uA7B0\u0399\u0370\u0372\u0376" + u"\u03FD\u03FE\u03FF\u0399\u0308\u0301\u0386\u0388\u0389\u038A\u03A5\u0308\u0301\u0391\u0392\u0393" + u"\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A3" + u"\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u038C\u038E\u038F\u0392\u0398\u03A6\u03A0\u03CF" + u"\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u039A\u03A1\u03F9\u037F" + u"\u0395\u03F7\u03FA\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C" + u"\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C" + u"\u042D\u042E\u042F\u0400\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C" + u"\u040D\u040E\u040F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478" + u"\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0" + u"\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C1" + u"\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04C0\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0" + u"\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500" + u"\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520" + u"\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539" + u"\u053A\u053B\u053C\u053D\u053E\u053F\u0540\u0541\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549" + u"\u054A\u054B\u054C\u054D\u054E\u054F\u0550\u0551\u0552\u0553\u0554\u0555\u0556\u0535\u0552\u1C90" + u"\u1C91\u1C92\u1C93\u1C94\u1C95\u1C96\u1C97\u1C98\u1C99\u1C9A\u1C9B\u1C9C\u1C9D\u1C9E\u1C9F\u1CA0" + u"\u1CA1\u1CA2\u1CA3\u1CA4\u1CA5\u1CA6\u1CA7\u1CA8\u1CA9\u1CAA\u1CAB\u1CAC\u1CAD\u1CAE\u1CAF\u1CB0" + u"\u1CB1\u1CB2\u1CB3\u1CB4\u1CB5\u1CB6\u1CB7\u1CB8\u1CB9\u1CBA\u1CBD\u1CBE\u1CBF\u13F0\u13F1\u13F2" + u"\u13F3\u13F4\u13F5\u0412\u0414\u041E\u0421\u0422\u0422\u042A\u0462\uA64A\u1C89\uA77D\u2C63\uA7C6" + u"\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E" + u"\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E" + u"\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E" + u"\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E" + u"\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u0048\u0331\u0054\u0308\u0057" + u"\u030A\u0059\u030A\u0041\u02BE\u1E60\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2" + u"\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2" + u"\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2" + u"\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08\u1F09\u1F0A\u1F0B\u1F0C\u1F0D\u1F0E\u1F0F\u1F18\u1F19" + u"\u1F1A\u1F1B\u1F1C\u1F1D\u1F28\u1F29\u1F2A\u1F2B\u1F2C\u1F2D\u1F2E\u1F2F\u1F38\u1F39\u1F3A\u1F3B" + u"\u1F3C\u1F3D\u1F3E\u1F3F\u1F48\u1F49\u1F4A\u1F4B\u1F4C\u1F4D\u03A5\u0313\u1F59\u03A5\u0313\u0300" + u"\u1F5B\u03A5\u0313\u0301\u1F5D\u03A5\u0313\u0342\u1F5F\u1F68\u1F69\u1F6A\u1F6B\u1F6C\u1F6D\u1F6E" + u"\u1F6F\u1FBA\u1FBB\u1FC8\u1FC9\u1FCA\u1FCB\u1FDA\u1FDB\u1FF8\u1FF9\u1FEA\u1FEB\u1FFA\u1FFB\u1F08" + u"\u0399\u1F09\u0399\u1F0A\u0399\u1F0B\u0399\u1F0C\u0399\u1F0D\u0399\u1F0E\u0399\u1F0F\u0399\u1F08" + u"\u0399\u1F09\u0399\u1F0A\u0399\u1F0B\u0399\u1F0C\u0399\u1F0D\u0399\u1F0E\u0399\u1F0F\u0399\u1F28" + u"\u0399\u1F29\u0399\u1F2A\u0399\u1F2B\u0399\u1F2C\u0399\u1F2D\u0399\u1F2E\u0399\u1F2F\u0399\u1F28" + u"\u0399\u1F29\u0399\u1F2A\u0399\u1F2B\u0399\u1F2C\u0399\u1F2D\u0399\u1F2E\u0399\u1F2F\u0399\u1F68" + u"\u0399\u1F69\u0399\u1F6A\u0399\u1F6B\u0399\u1F6C\u0399\u1F6D\u0399\u1F6E\u0399\u1F6F\u0399\u1F68" + u"\u0399\u1F69\u0399\u1F6A\u0399\u1F6B\u0399\u1F6C\u0399\u1F6D\u0399\u1F6E\u0399\u1F6F\u0399\u1FB8" + u"\u1FB9\u1FBA\u0399\u0391\u0399\u0386\u0399\u0391\u0342\u0391\u0342\u0399\u0391\u0399\u0399\u1FCA" + u"\u0399\u0397\u0399\u0389\u0399\u0397\u0342\u0397\u0342\u0399\u0397\u0399\u1FD8\u1FD9\u0399\u0308" + u"\u0300\u0399\u0308\u0301\u0399\u0342\u0399\u0308\u0342\u1FE8\u1FE9\u03A5\u0308\u0300\u03A5\u0308" + u"\u0301\u03A1\u0313\u1FEC\u03A5\u0342\u03A5\u0308\u0342\u1FFA\u0399\u03A9\u0399\u038F\u0399\u03A9" + u"\u0342\u03A9\u0342\u0399\u03A9\u0399\u2132\u2160\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168" + u"\u2169\u216A\u216B\u216C\u216D\u216E\u216F\u2183\u24B6\u24B7\u24B8\u24B9\u24BA\u24BB\u24BC\u24BD" + u"\u24BE\u24BF\u24C0\u24C1\u24C2\u24C3\u24C4\u24C5\u24C6\u24C7\u24C8\u24C9\u24CA\u24CB\u24CC\u24CD" + u"\u24CE\u24CF\u2C00\u2C01\u2C02\u2C03\u2C04\u2C05\u2C06\u2C07\u2C08\u2C09\u2C0A\u2C0B\u2C0C\u2C0D" + u"\u2C0E\u2C0F\u2C10\u2C11\u2C12\u2C13\u2C14\u2C15\u2C16\u2C17\u2C18\u2C19\u2C1A\u2C1B\u2C1C\u2C1D" + u"\u2C1E\u2C1F\u2C20\u2C21\u2C22\u2C23\u2C24\u2C25\u2C26\u2C27\u2C28\u2C29\u2C2A\u2C2B\u2C2C\u2C2D" + u"\u2C2E\u2C2F\u2C60\u023A\u023E\u2C67\u2C69\u2C6B\u2C72\u2C75\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A" + u"\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA" + u"\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA" + u"\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\u10A0" + u"\u10A1\u10A2\u10A3\u10A4\u10A5\u10A6\u10A7\u10A8\u10A9\u10AA\u10AB\u10AC\u10AD\u10AE\u10AF\u10B0" + u"\u10B1\u10B2\u10B3\u10B4\u10B5\u10B6\u10B7\u10B8\u10B9\u10BA\u10BB\u10BC\u10BD\u10BE\u10BF\u10C0" + u"\u10C1\u10C2\u10C3\u10C4\u10C5\u10C7\u10CD\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650" + u"\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682" + u"\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728" + u"\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A" + u"\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A" + u"\uA76C\uA76E\uA779\uA77B\uA77E\uA780\uA782\uA784\uA786\uA78B\uA790\uA792\uA7C4\uA796\uA798\uA79A" + u"\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7B4\uA7B6\uA7B8\uA7BA\uA7BC\uA7BE\uA7C0\uA7C2\uA7C7" + u"\uA7C9\uA7CC\uA7D0\uA7D6\uA7D8\uA7DA\uA7F5\uA7B3\u13A0\u13A1\u13A2\u13A3\u13A4\u13A5\u13A6\u13A7" + u"\u13A8\u13A9\u13AA\u13AB\u13AC\u13AD\u13AE\u13AF\u13B0\u13B1\u13B2\u13B3\u13B4\u13B5\u13B6\u13B7" + u"\u13B8\u13B9\u13BA\u13BB\u13BC\u13BD\u13BE\u13BF\u13C0\u13C1\u13C2\u13C3\u13C4\u13C5\u13C6\u13C7" + u"\u13C8\u13C9\u13CA\u13CB\u13CC\u13CD\u13CE\u13CF\u13D0\u13D1\u13D2\u13D3\u13D4\u13D5\u13D6\u13D7" + u"\u13D8\u13D9\u13DA\u13DB\u13DC\u13DD\u13DE\u13DF\u13E0\u13E1\u13E2\u13E3\u13E4\u13E5\u13E6\u13E7" + u"\u13E8\u13E9\u13EA\u13EB\u13EC\u13ED\u13EE\u13EF\u0046\u0046\u0046\u0049\u0046\u004C\u0046\u0046" + u"\u0049\u0046\u0046\u004C\u0053\u0054\u0053\u0054\u0544\u0546\u0544\u0535\u0544\u053B\u054E\u0546" + u"\u0544\u053D\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26\uFF27\uFF28\uFF29\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E" + u"\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34\uFF35\uFF36\uFF37\uFF38\uFF39\uFF3A\U00010400\U00010401\U00010402\U00010403" + u"\U00010404\U00010405\U00010406\U00010407\U00010408\U00010409\U0001040A\U0001040B\U0001040C\U0001040D\U0001040E\U0001040F\U00010410\U00010411\U00010412\U00010413" + u"\U00010414\U00010415\U00010416\U00010417\U00010418\U00010419\U0001041A\U0001041B\U0001041C\U0001041D\U0001041E\U0001041F\U00010420\U00010421\U00010422\U00010423" + u"\U00010424\U00010425\U00010426\U00010427\U000104B0\U000104B1\U000104B2\U000104B3\U000104B4\U000104B5\U000104B6\U000104B7\U000104B8\U000104B9\U000104BA\U000104BB" + u"\U000104BC\U000104BD\U000104BE\U000104BF\U000104C0\U000104C1\U000104C2\U000104C3\U000104C4\U000104C5\U000104C6\U000104C7\U000104C8\U000104C9\U000104CA\U000104CB" + u"\U000104CC\U000104CD\U000104CE\U000104CF\U000104D0\U000104D1\U000104D2\U000104D3\U00010570\U00010571\U00010572\U00010573\U00010574\U00010575\U00010576\U00010577" + u"\U00010578\U00010579\U0001057A\U0001057C\U0001057D\U0001057E\U0001057F\U00010580\U00010581\U00010582\U00010583\U00010584\U00010585\U00010586\U00010587\U00010588" + u"\U00010589\U0001058A\U0001058C\U0001058D\U0001058E\U0001058F\U00010590\U00010591\U00010592\U00010594\U00010595\U00010C80\U00010C81\U00010C82\U00010C83\U00010C84" + u"\U00010C85\U00010C86\U00010C87\U00010C88\U00010C89\U00010C8A\U00010C8B\U00010C8C\U00010C8D\U00010C8E\U00010C8F\U00010C90\U00010C91\U00010C92\U00010C93\U00010C94" + u"\U00010C95\U00010C96\U00010C97\U00010C98\U00010C99\U00010C9A\U00010C9B\U00010C9C\U00010C9D\U00010C9E\U00010C9F\U00010CA0\U00010CA1\U00010CA2\U00010CA3\U00010CA4" + u"\U00010CA5\U00010CA6\U00010CA7\U00010CA8\U00010CA9\U00010CAA\U00010CAB\U00010CAC\U00010CAD\U00010CAE\U00010CAF\U00010CB0\U00010CB1\U00010CB2\U00010D50\U00010D51" + u"\U00010D52\U00010D53\U00010D54\U00010D55\U00010D56\U00010D57\U00010D58\U00010D59\U00010D5A\U00010D5B\U00010D5C\U00010D5D\U00010D5E\U00010D5F\U00010D60\U00010D61" + u"\U00010D62\U00010D63\U00010D64\U00010D65\U000118A0\U000118A1\U000118A2\U000118A3\U000118A4\U000118A5\U000118A6\U000118A7\U000118A8\U000118A9\U000118AA\U000118AB" + u"\U000118AC\U000118AD\U000118AE\U000118AF\U000118B0\U000118B1\U000118B2\U000118B3\U000118B4\U000118B5\U000118B6\U000118B7\U000118B8\U000118B9\U000118BA\U000118BB" + u"\U000118BC\U000118BD\U000118BE\U000118BF\U00016E40\U00016E41\U00016E42\U00016E43\U00016E44\U00016E45\U00016E46\U00016E47\U00016E48\U00016E49\U00016E4A\U00016E4B" + u"\U00016E4C\U00016E4D\U00016E4E\U00016E4F\U00016E50\U00016E51\U00016E52\U00016E53\U00016E54\U00016E55\U00016E56\U00016E57\U00016E58\U00016E59\U00016E5A\U00016E5B" + u"\U00016E5C\U00016E5D\U00016E5E\U00016E5F\U0001E900\U0001E901\U0001E902\U0001E903\U0001E904\U0001E905\U0001E906\U0001E907\U0001E908\U0001E909\U0001E90A\U0001E90B" + u"\U0001E90C\U0001E90D\U0001E90E\U0001E90F\U0001E910\U0001E911\U0001E912\U0001E913\U0001E914\U0001E915\U0001E916\U0001E917\U0001E918\U0001E919\U0001E91A\U0001E91B" + u"\U0001E91C\U0001E91D\U0001E91E\U0001E91F\U0001E920\U0001E921"; const mapper mapper::case_fold(folding_source_chars, folding_source_chars_length, case_folded_chars); @@ -622,14 +646,14 @@ namespace sysstr::util::unicode 35, 17, 17, 17, 36, 17, 37, 38, 39, 40, 41, 42, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 43, 17, 17, 44, 45, - 17, 46, 47, 48, 49, 17, 17, 17, 17, 17, 50, 17, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 17, 66, 67, 68, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 69, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 46, 47, 48, 49, 50, 17, 51, 17, 17, 52, 17, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 17, 68, 69, 70, 71, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 72, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 70, 71, 17, 17, 72, 73, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 73, 17, 17, 17, 17, 17, 17, 17, 17, 74, 75, 17, 76, 77, 78, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 74, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 75, 76, 17, 77, 78, 79, 80, 17, 17, 81, 17, 17, 17, 17, 17, - 82, 83, 84, 17, 17, 17, 17, 17, 85, 86, 17, 17, 17, 17, 17, 17, 17, 87, 17, 88, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 79, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 80, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 81, 17, 82, 83, 17, 84, 85, 86, 87, 17, 17, 88, 17, 17, 17, 17, 89, + 90, 91, 92, 17, 93, 94, 17, 17, 95, 96, 17, 17, 17, 17, 17, 17, 17, 97, 17, 98, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, @@ -726,7 +750,7 @@ namespace sysstr::util::unicode 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 89, 90}; + 99, 100}; extern const uint8_t props_stage2[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x08, 0x95, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x22, 0x00, 0x92, 0x84, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x55, 0x55, @@ -737,73 +761,80 @@ namespace sysstr::util::unicode 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x20, 0x02, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x00, 0x2A, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA2, 0x28, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xAA, 0xA0, 0x00, 0x00, 0xAA, 0xAA, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xAA, 0xA2, 0xAA, 0xAA, 0x8A, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xAA, 0xAA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xAA, 0xAA, 0xA0, 0x08, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 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, 0x02, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xA0, 0x02, 0xAA, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x2A, 0xAA, 0x80, 0x20, 0x2A, 0xAA, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2A, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x28, 0x02, 0x82, 0xA0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x20, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2A, 0xA2, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xAA, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x2A, 0x80, 0x00, 0x20, 0x00, 0x28, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x0A, 0x8A, 0xA0, 0x00, 0x28, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x08, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x80, 0x0A, 0x8A, 0xA0, 0x00, 0x28, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x08, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x2A, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0A, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xAA, 0xA8, 0x00, 0x00, 0x0A, 0xAA, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xAA, 0xAA, 0x80, 0x00, 0x08, 0xAA, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xAA, 0xA8, 0x00, 0x00, 0x0A, 0xAA, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xAA, 0xAA, 0x80, 0x00, 0x08, 0xAA, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xAA, 0xAA, 0xA8, 0xAA, 0x8A, 0x00, 0x2A, 0xAA, 0xAA, 0x2A, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x80, 0x00, 0x08, 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, 0x2A, 0x8A, 0xAA, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x0A, 0x80, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x00, 0x00, 0x08, 0x28, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x51, 0x00, 0x10, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x95, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x8A, 0xAA, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x0A, 0x80, 0x00, 0x00, 0x00, 0x2A, 0x80, 0x00, 0x00, 0x08, 0x28, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x51, 0x00, 0x10, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0xD5, 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, 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, 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, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x55, 0x50, - 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA2, 0xAA, 0xA0, 0x00, 0x08, 0x2A, 0xAA, 0xAA, 0x02, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 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, 0x0A, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA2, 0xAA, 0xA0, 0x00, 0x08, 0x2A, 0xAA, 0xAA, 0x02, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 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, 0xA8, 0x02, 0x80, 0x00, 0x08, 0x00, 0x2A, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xAA, 0xA8, 0x88, 0x2A, 0xAA, 0x80, 0x02, 0xAA, 0xAA, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xAA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xAA, 0xA8, 0x88, 0x2A, 0xAA, 0x80, 0x02, 0xAA, 0xAA, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xA8, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xAA, 0xAA, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xA0, 0xA2, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xA0, 0x22, 0xA0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xA0, 0x55, 0x55, 0x40, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x15, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xAA, 0xAA, 0xAA, 0x8A, 0xAA, 0x80, 0x20, 0x00, 0x80, 0xA0, 0x00, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x55, 0x55, 0x55, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA2, 0xAA, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xA0, 0x55, 0x55, 0x54, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x15, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xAA, 0xAA, 0xAA, 0x8A, 0xAA, 0x80, 0x20, 0x00, 0x80, 0xA0, 0x00, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x55, 0x55, 0x55, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x55, 0x50, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x55, 0x50, 0x55, 0x55, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x45, 0x55, 0x66, 0xA5, 0x45, 0x55, 0x6A, 0x55, 0x05, 0x55, 0x2A, 0x55, 0x55, 0x55, 0x6A, 0x05, 0x45, 0x55, 0x68, 0x00, 0x00, 0x02, 0xAA, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x82, 0x0A, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0x8A, 0xAA, 0xAA, 0x30, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x80, 0x00, 0x00, 0x00, 0x04, 0x01, 0x05, 0x55, 0x55, 0x10, 0x15, 0x50, 0x00, 0x44, 0x45, 0x51, 0x55, 0x40, 0x10, 0x55, 0x00, 0x15, 0x50, 0x04, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x40, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xF5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x01, 0x56, 0xA5, 0x00, 0x00, 0x00, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xF5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x01, 0x56, 0xA5, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x51, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xA0, 0x2A, 0xA0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 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, 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, 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, 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, 0xAA, 0xA0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x52, 0xA8, 0xAA, 0xAA, 0xA2, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, - 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0xA9, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xF4, 0x00, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA5, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xD5, 0x55, 0x55, 0x55, 0x55, 0x55, 0xA9, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x51, 0x15, 0x55, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xD4, 0xF4, 0x00, 0x08, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x80, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xAA, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xAA, 0xAA, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0A, 0xA0, 0xA0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xA8, 0x28, 0x28, 0x00, 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x82, 0x80, 0x0A, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xA0, 0x02, 0x88, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x56, 0xFF, 0x55, 0x55, 0x6A, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x55, 0x54, 0x00, 0x00, 0x01, 0x55, 0x00, 0x08, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xAA, 0xAA, 0xAA, 0xA0, 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, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x56, 0xFF, 0x55, 0x55, 0x7A, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x54, 0x00, 0x00, 0x01, 0x55, 0x00, 0x08, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xAA, 0xAA, 0xAA, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xAA, 0x02, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x08, 0x95, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 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, 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, 0x00, 0x00, 0x20, 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, 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, 0x80, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xA8, 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, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 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, 0x55, 0x55, 0x54, 0x55, 0x55, 0x55, 0x54, 0x55, 0x54, 0x51, 0x55, 0x55, 0x51, 0x55, 0x55, 0x55, 0x51, 0x55, 0x51, 0x40, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x28, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x02, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 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, 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, 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, 0x00, 0x00, 0x00, 0x02, 0x80, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xAA, 0xAA, 0x80, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xA8, 0x28, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x2A, 0xA2, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xAA, 0xAA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xA0, 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, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x80, 0x00, 0x02, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xA8, 0x28, 0x20, 0x08, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xAA, 0x2A, 0xAA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xAA, 0xA8, 0x00, 0x00, 0x2A, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xA0, 0x8A, 0x00, 0x08, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0xAA, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xAA, 0x80, 0xAA, 0x80, 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, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xA0, 0x8A, 0x00, 0x08, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0xAA, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xAA, 0x80, 0xAA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xAA, 0x80, 0x00, 0x00, 0x08, 0x88, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0x0A, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xAA, 0x88, 0x02, 0x8A, 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, 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, 0x0A, 0xA0, 0x00, 0xA2, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xAA, 0xA8, 0x22, 0x80, 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, 0x02, 0x20, 0xAA, 0xA2, 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, 0x2A, 0x0A, 0xA2, 0xAA, 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, 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, 0x22, 0x0A, 0xA2, 0xAA, 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, 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, 0x00, 0x00, 0x02, 0xAA, 0xAA, 0x28, 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, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x88, 0x02, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0x0A, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xAA, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xAA, 0x82, 0xA8, 0x00, 0x02, 0x00, 0x00, 0x2A, 0xA8, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xAA, 0xAA, 0xA8, 0xA0, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xA8, 0xAA, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x0A, 0xAA, 0x8A, 0x28, 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, 0x2A, 0xA8, 0x08, 0xA2, 0xAA, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x22, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0x80, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xA8, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xAA, 0x80, 0x02, 0xAA, 0xAA, 0xAA, 0xA0, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xAA, 0xAA, 0xA0, 0x2A, 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, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xA8, 0x00, 0x00, 0xAA, 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, 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, 0x00, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA2, 0x80, 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, 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, 0x00, 0x00, 0x00, 0x00, 0xAA, 0x2A, 0xAA, 0x28, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA0, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA8, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xA0, 0x00, 0x02, 0xAA, 0xAA, 0xAA, 0xA8, 0x2A, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xA0, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x80, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x45, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x45, 0x04, 0x14, 0x15, 0x45, 0x55, 0x55, 0x51, 0x15, 0x55, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, @@ -811,9 +842,12 @@ namespace sysstr::util::unicode 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x45, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x45, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x45, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x45, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x45, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA8, 0x02, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0xAA, 0x2A, 0xAA, 0xAA, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xAA, 0xA8, 0xAA, 0xAA, 0xAA, 0xAA, 0x82, 0xAA, 0xA2, 0x8A, 0xA8, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x55, 0x51, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x15, 0x54, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xAA, 0xA8, 0xAA, 0xAA, 0xAA, 0xAA, 0x82, 0xAA, 0xA2, 0x8A, 0xA8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, 0xAA, 0xA0, 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, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 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, 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, 0x02, 0xAA, 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, 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, 0x00, 0x0A, 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, 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, 0xAA, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 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, 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, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x50, 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, @@ -832,6 +866,6 @@ namespace sysstr::util::unicode sizeof(whitespaces) + sizeof(props_stage1) + sizeof(props_stage2); - static_assert(total_data_size == 37516); + static_assert(total_data_size == 39704); } From 6eb7fd3592c7ac5ee221a9ffdbd4f8235fb5d048 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Fri, 15 Nov 2024 00:13:08 -0800 Subject: [PATCH 24/63] Adding support for std::format --- lib/inc/sys_string/config.h | 5 ++ lib/inc/sys_string/impl/format.h | 2 +- lib/inc/sys_string/impl/misc.h | 129 +++++++++++++++++++++++++++---- lib/inc/sys_string/sys_string.h | 4 +- test/test_general.cpp | 12 ++- 5 files changed, 131 insertions(+), 21 deletions(-) diff --git a/lib/inc/sys_string/config.h b/lib/inc/sys_string/config.h index 6c6fa18..6eeabb2 100644 --- a/lib/inc/sys_string/config.h +++ b/lib/inc/sys_string/config.h @@ -71,6 +71,11 @@ #error Please define pointer size for your platform #endif +#if defined(__STDC_ISO_10646__) && !SYS_STRING_WCHAR_T_IS_UTF16 + #define SYS_STRING_WCHAR_T_IS_UTF32 1 +#endif + + #if defined(_MSC_VER) #define SYS_STRING_FORCE_INLINE __forceinline #elif defined(__GNUC__) diff --git a/lib/inc/sys_string/impl/format.h b/lib/inc/sys_string/impl/format.h index 0c9ba4b..1a08123 100644 --- a/lib/inc/sys_string/impl/format.h +++ b/lib/inc/sys_string/impl/format.h @@ -38,4 +38,4 @@ namespace sysstr buf.resize(ret); return sys_string_t(&buf[0], buf.size()); } -} \ No newline at end of file +} diff --git a/lib/inc/sys_string/impl/misc.h b/lib/inc/sys_string/impl/misc.h index ffd7cd1..1019341 100644 --- a/lib/inc/sys_string/impl/misc.h +++ b/lib/inc/sys_string/impl/misc.h @@ -11,6 +11,10 @@ #include +#if __has_include() + #include +#endif + namespace sysstr { namespace util @@ -80,43 +84,138 @@ namespace sysstr return std::ranges::equal(test.begin(), test.end(), access.begin(), access.begin() + test_size); } + + template + inline + decltype(auto) with_output_string(const sys_string_t & val, Func func) + { + if constexpr (std::ranges::contiguous_range::char_access> && + std::is_same_v::storage_type, char>) + { + typename sysstr::sys_string_t::char_access access(val); + return func(std::string_view(access.data(), access.size())); + } + else + { + std::string out; + typename sysstr::sys_string_t::utf8_access(val).each([&out](char c) { + out += c; + }); + return func(std::string_view(out)); + } + } + + #if SYS_STRING_WCHAR_T_IS_UTF16 + template + inline + decltype(auto) with_output_wstring(const sys_string_t & val, Func func) + { + if constexpr (std::ranges::contiguous_range::char_access> && + std::is_same_v::storage_type, char16_t>) + { + typename sysstr::sys_string_t::char_access access(val); + return func(std::wstring_view((const wchar_t *)access.data(), access.size())); + } + else + { + std::wstring out; + typename sysstr::sys_string_t::utf16_access(val).each([&out](char16_t c) { + out += wchar_t(c); + }); + return func(std::wstring_view(out)); + } + } + #elif SYS_STRING_WCHAR_T_IS_UTF32 + template + inline + decltype(auto) with_output_wstring(const sys_string_t & val, Func func) + { + if constexpr (std::ranges::contiguous_range::char_access> && + std::is_same_v::storage_type, char32_t>) + { + typename sysstr::sys_string_t::char_access access(val); + return func(std::wstring_view((const wchar_t *)access.data(), access.size())); + } + else + { + std::wstring out; + typename sysstr::sys_string_t::utf32_access(val).each([&out](char32_t c) { + out += wchar_t(c); + }); + return func(std::wstring_view(out)); + } + } + #endif } template inline auto operator<<(std::ostream & str, const sys_string_t & val) -> std::ostream & - { - for(char c: typename sys_string_t::utf8_view(val)) - str << c; - return str; + { + return util::with_output_string(val, [&](auto view) -> std::ostream & { + return str << view; + }); } -#if defined(_WIN32) +#if SYS_STRING_WCHAR_T_IS_UTF16 || SYS_STRING_WCHAR_T_IS_UTF32 template inline auto operator<<(std::wostream & str, const sys_string_t & val) -> std::wostream & + { + return util::with_output_wstring(val, [&](auto view) -> std::wostream & { + return str << view; + }); + } + +#endif +} + +//See https://github.com/llvm/llvm-project/issues/77773 for the sad story of how feature test +//macros are useless with libc++ +#if __cpp_lib_format >= 201907L || (defined(_LIBCPP_VERSION) && __has_include()) + +template struct std::formatter> : private std::formatter +{ + using super = std::formatter; + + using super::formatter; + using super::parse; + + template + auto format(const sysstr::sys_string_t & str, FormatContext & ctx) const -> decltype(ctx.out()) { - for(char16_t c: typename sys_string_t::utf16_view(val)) - str << wchar_t(c); - return str; + return sysstr::util::with_output_string(str, [&](auto view) { + return super::format(view, ctx); + }); } +}; -#elif defined(__STDC_ISO_10646__) +#if SYS_STRING_WCHAR_T_IS_UTF16 || SYS_STRING_WCHAR_T_IS_UTF32 - template - inline - auto operator<<(std::wostream & str, const sys_string_t & val) -> std::wostream & +template struct std::formatter, wchar_t> : private std::formatter +{ + using super = std::formatter; + + using super::formatter; + using super::parse; + + template + auto format(const sysstr::sys_string_t & str, FormatContext & ctx) const -> decltype(ctx.out()) { - for(char32_t c: typename sys_string_t::utf32_view(val)) - str << wchar_t(c); - return str; + return sysstr::util::with_output_wstring(str, [&](auto view) { + return super::format(view, ctx); + }); } +}; #endif +#endif +namespace sysstr +{ template inline auto sys_string_t::to_lower() const -> sys_string_t diff --git a/lib/inc/sys_string/sys_string.h b/lib/inc/sys_string/sys_string.h index 897ae8e..120fe09 100644 --- a/lib/inc/sys_string/sys_string.h +++ b/lib/inc/sys_string/sys_string.h @@ -20,7 +20,7 @@ #include #include #include -#include +#include #define HEADER_SYS_STRING_H_INSIDE @@ -218,7 +218,7 @@ namespace sysstr template friend auto operator<<(std::ostream & str, const sys_string_t & val) -> std::ostream &; - #if defined(_WIN32) || defined(__STDC_ISO_10646__) + #if SYS_STRING_WCHAR_T_IS_UTF16 || SYS_STRING_WCHAR_T_IS_UTF32 template friend auto operator<<(std::wostream & str, const sys_string_t & val) -> std::wostream &; #endif diff --git a/test/test_general.cpp b/test/test_general.cpp index ff86fda..5c34a25 100644 --- a/test/test_general.cpp +++ b/test/test_general.cpp @@ -628,7 +628,7 @@ TEST_CASE( "ostream", "[general]" ) { CHECK(stream.str() == "a🧡bc"); } -#if defined(_WIN32) || defined(__STDC_ISO_10646__) +#if SYS_STRING_WCHAR_T_IS_UTF16 || SYS_STRING_WCHAR_T_IS_UTF32 { std::wostringstream stream; stream << sys_string(); @@ -649,8 +649,14 @@ TEST_CASE( "ostream", "[general]" ) { #endif } -TEST_CASE( "utf views", "[general]" ) { +#if __cpp_lib_format >= 201907L || (defined(_LIBCPP_VERSION) && __has_include()) +TEST_CASE( "std::format", "[general]" ) { + CHECK(std::format("{0}", S("a🧡bc")) == "a🧡bc"); +#if SYS_STRING_WCHAR_T_IS_UTF16 || SYS_STRING_WCHAR_T_IS_UTF32 + CHECK(std::format(L"{0}", S("a🧡bc")) == L"a🧡bc"); +#endif +} -} \ No newline at end of file +#endif \ No newline at end of file From a5124f865bcf6c886e566748bbec10235f55a986 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Fri, 15 Nov 2024 03:23:23 -0800 Subject: [PATCH 25/63] Replacing complex static string macros with compile time strings --- .../sys_string/impl/platforms/android_java.h | 19 ++++++---- .../sys_string/impl/platforms/apple_cfstr.h | 10 +++++- .../impl/platforms/emscripten_javascript.h | 19 ++++++---- .../sys_string/impl/platforms/python_any.h | 36 +++++++++++-------- .../sys_string/impl/platforms/unix_generic.h | 21 +++++++---- .../sys_string/impl/platforms/windows_bstr.h | 20 +++++++---- .../impl/platforms/windows_generic.h | 18 ++++++---- .../impl/platforms/windows_hstring.h | 23 ++++++------ lib/inc/sys_string/impl/util/generic_impl.h | 2 +- lib/inc/sys_string/impl/util/util.h | 27 ++++++++++++++ 10 files changed, 135 insertions(+), 60 deletions(-) diff --git a/lib/inc/sys_string/impl/platforms/android_java.h b/lib/inc/sys_string/impl/platforms/android_java.h index c0f3035..34aca1d 100644 --- a/lib/inc/sys_string/impl/platforms/android_java.h +++ b/lib/inc/sys_string/impl/platforms/android_java.h @@ -141,12 +141,19 @@ namespace sysstr using sys_string_android_builder = sys_string_builder_t; } -#define SYS_STRING_STATIC_ANDROID(x) ([] () noexcept -> ::sysstr::sys_string_android { \ - constexpr ::size_t size = sizeof(u##x) / sizeof(char16_t); \ - static const ::sysstr::util::android_static_string sbuf{0, true, u##x}; \ - ::sysstr::util::android_any_string buf((::sysstr::util::android_dynamic_string *)&sbuf, size - 1, 0); \ - return *reinterpret_cast<::sysstr::sys_string_android *>(&buf); \ - }()) +namespace sysstr::util +{ + template + inline auto make_static_sys_string_android() noexcept -> sys_string_android + { + constexpr ::size_t size = Str.size(); + static const android_static_string sbuf{0, true, Str}; + android_any_string buf((android_dynamic_string *)&sbuf, size - 1, 0); + return *reinterpret_cast(&buf); + } +} + +#define SYS_STRING_STATIC_ANDROID(x) ::sysstr::util::make_static_sys_string_android() diff --git a/lib/inc/sys_string/impl/platforms/apple_cfstr.h b/lib/inc/sys_string/impl/platforms/apple_cfstr.h index dbe7709..3a17339 100644 --- a/lib/inc/sys_string/impl/platforms/apple_cfstr.h +++ b/lib/inc/sys_string/impl/platforms/apple_cfstr.h @@ -501,7 +501,15 @@ namespace sysstr using sys_string_cfstr_builder = sys_string_builder_t; } -#define SYS_STRING_STATIC_CFSTR(x) ::sysstr::sys_string_cfstr(CFSTR(x), ::sysstr::handle_retain::no) +namespace sysstr::util +{ + inline auto make_static_sys_string_cfstr(CFStringRef str) noexcept -> sys_string_cfstr + { + return sys_string_cfstr(str, handle_retain::no); + } +} + +#define SYS_STRING_STATIC_CFSTR(x) ::sysstr::util::make_static_sys_string_cfstr(CFSTR(x)) diff --git a/lib/inc/sys_string/impl/platforms/emscripten_javascript.h b/lib/inc/sys_string/impl/platforms/emscripten_javascript.h index 771e5c3..c5661e2 100644 --- a/lib/inc/sys_string/impl/platforms/emscripten_javascript.h +++ b/lib/inc/sys_string/impl/platforms/emscripten_javascript.h @@ -165,12 +165,19 @@ namespace sysstr using sys_string_emscripten_builder = sys_string_builder_t; } -#define SYS_STRING_STATIC_EMSCRIPTEN(x) ([] () noexcept -> ::sysstr::sys_string_emscripten { \ - constexpr ::size_t size = sizeof(u##x) / sizeof(char16_t); \ - static const ::sysstr::util::emscripten_static_string sbuf{0, true, u##x}; \ - ::sysstr::util::emscripten_any_string buf((::sysstr::util::emscripten_dynamic_string *)&sbuf, size - 1, 0); \ - return *reinterpret_cast<::sysstr::sys_string_emscripten *>(&buf); \ - }()) +namespace sysstr::util +{ + template + inline auto make_static_sys_string_emscripten() noexcept -> sys_string_emscripten + { + constexpr ::size_t size = Str.size(); + static const emscripten_static_string sbuf{0, true, Str}; + emscripten_any_string buf((emscripten_dynamic_string *)&sbuf, size - 1, 0); + return *reinterpret_cast(&buf); + } +} + +#define SYS_STRING_STATIC_EMSCRIPTEN(x) ::sysstr::util::make_static_sys_string_emscripten() diff --git a/lib/inc/sys_string/impl/platforms/python_any.h b/lib/inc/sys_string/impl/platforms/python_any.h index ea110d5..79962e0 100644 --- a/lib/inc/sys_string/impl/platforms/python_any.h +++ b/lib/inc/sys_string/impl/platforms/python_any.h @@ -500,18 +500,26 @@ namespace sysstr using sys_string_pystr_builder = sys_string_builder_t; } +namespace sysstr::util +{ + template + inline auto make_static_sys_string_pystr() noexcept -> sys_string_pystr + { + constexpr ::size_t size = U32Str.size(); + constexpr auto maxChar = find_max_codepoint(U32Str.chars); + if constexpr (maxChar <= 0x7fu) { + static PyUnicodeObject_wrapper str(size - 1, U8Str.chars); + return str.as_string(); + } else if constexpr (maxChar <= 0xffffu) { + static PyUnicodeObject_wrapper str(size - 1, U16Str.chars); + return str.as_string(); + } else { + static PyUnicodeObject_wrapper str(size - 1, U32Str.chars); + return str.as_string(); + } + } +} + + +#define SYS_STRING_STATIC_PYSTR(x) ::sysstr::util::make_static_sys_string_pystr() -#define SYS_STRING_STATIC_PYSTR(x) ([] () noexcept -> ::sysstr::sys_string_pystr { \ - constexpr auto size = ::std::size(U##x); \ - constexpr auto maxChar = ::sysstr::util::find_max_codepoint(U##x); \ - if constexpr (maxChar <= 0x7fu) { \ - static ::sysstr::util::PyUnicodeObject_wrapper str(size - 1, u8##x); \ - return str.as_string(); \ - } else if constexpr (maxChar <= 0xffffu) { \ - static ::sysstr::util::PyUnicodeObject_wrapper str(size - 1, u##x); \ - return str.as_string(); \ - } else { \ - static ::sysstr::util::PyUnicodeObject_wrapper str(size - 1, U##x); \ - return str.as_string(); \ - } \ - }()) diff --git a/lib/inc/sys_string/impl/platforms/unix_generic.h b/lib/inc/sys_string/impl/platforms/unix_generic.h index 0019516..9ba6149 100644 --- a/lib/inc/sys_string/impl/platforms/unix_generic.h +++ b/lib/inc/sys_string/impl/platforms/unix_generic.h @@ -112,14 +112,23 @@ namespace sysstr { using sys_string_generic = sys_string_t; using sys_string_generic_builder = sys_string_builder_t; + + +} + +namespace sysstr::util +{ + template + inline auto make_static_sys_string_generic() noexcept -> sys_string_generic + { + constexpr ::size_t size = Str.size(); + static const generic_static_string sbuf{0, true, Str}; + generic_any_string buf((generic_dynamic_string *)&sbuf, size - 1, 0); + return *reinterpret_cast(&buf); + } } -#define SYS_STRING_STATIC_GENERIC(x) ([] () noexcept -> ::sysstr::sys_string_generic { \ - constexpr ::size_t size = sizeof(x) / sizeof(char); \ - static const ::sysstr::util::generic_static_string sbuf{0, true, x}; \ - ::sysstr::util::generic_any_string buf((::sysstr::util::generic_dynamic_string *)&sbuf, size - 1, 0); \ - return *reinterpret_cast<::sysstr::sys_string_generic *>(&buf); \ - }()) +#define SYS_STRING_STATIC_GENERIC(x) ::sysstr::util::make_static_sys_string_generic() diff --git a/lib/inc/sys_string/impl/platforms/windows_bstr.h b/lib/inc/sys_string/impl/platforms/windows_bstr.h index 81e46a1..1cb5841 100644 --- a/lib/inc/sys_string/impl/platforms/windows_bstr.h +++ b/lib/inc/sys_string/impl/platforms/windows_bstr.h @@ -102,7 +102,7 @@ namespace sysstr::util struct static_bstr { UINT m_size; - char16_t m_buf[N + 1]; + ct_string m_buf; }; class bstr_buffer @@ -613,10 +613,16 @@ namespace sysstr using sys_string_bstr_builder = sys_string_builder_t; } -#define SYS_STRING_STATIC_BSTR(x) ([] () noexcept -> ::sysstr::sys_string_bstr { \ - constexpr ::UINT size = sizeof(u##x); \ - static const ::sysstr::util::static_bstr sbuf{size - sizeof(char16_t), u##x}; \ - ::sysstr::util::bstr_buffer buf((::sysstr::util::dynamic_bstr *)&sbuf, 0); \ - return *reinterpret_cast<::sysstr::sys_string_bstr *>(&buf); \ - }()) +namespace sysstr::util +{ + template + inline auto make_static_sys_string_bstr() noexcept -> sys_string_bstr + { + constexpr ::UINT size = sizeof(Str.chars); + static const static_bstr sbuf{size - sizeof(char16_t), Str}; + bstr_buffer buf((dynamic_bstr *)&sbuf, 0); + return *reinterpret_cast(&buf); + } +} +#define SYS_STRING_STATIC_BSTR(x) :sysstr::util::make_static_sys_string_bstr() diff --git a/lib/inc/sys_string/impl/platforms/windows_generic.h b/lib/inc/sys_string/impl/platforms/windows_generic.h index 34f1f7f..54a5cda 100644 --- a/lib/inc/sys_string/impl/platforms/windows_generic.h +++ b/lib/inc/sys_string/impl/platforms/windows_generic.h @@ -110,13 +110,19 @@ namespace sysstr using sys_string_win_generic_builder = sys_string_builder_t; } -#define SYS_STRING_STATIC_WIN_GENERIC(x) ([] () noexcept -> ::sysstr::sys_string_win_generic { \ - constexpr ::size_t size = sizeof(u##x) / sizeof(char16_t); \ - static const ::sysstr::util::win_generic_static_string sbuf{0, true, u##x}; \ - ::sysstr::util::win_generic_any_string buf((::sysstr::util::win_generic_dynamic_string *)&sbuf, size - 1, 0); \ - return *reinterpret_cast<::sysstr::sys_string_win_generic *>(&buf); \ - }()) +namespace sysstr::util +{ + template + inline auto make_static_sys_string_win_generic() noexcept -> sys_string_win_generic + { + constexpr ::size_t size = Str.size(); + static const win_generic_static_string sbuf{0, true, Str}; + win_generic_any_string buf((win_generic_dynamic_string *)&sbuf, size - 1, 0); + return *reinterpret_cast(&buf); + } +} +#define SYS_STRING_STATIC_WIN_GENERIC(x) ::sysstr::util::make_static_sys_string_win_generic() diff --git a/lib/inc/sys_string/impl/platforms/windows_hstring.h b/lib/inc/sys_string/impl/platforms/windows_hstring.h index 9bf674f..db756fa 100644 --- a/lib/inc/sys_string/impl/platforms/windows_hstring.h +++ b/lib/inc/sys_string/impl/platforms/windows_hstring.h @@ -434,17 +434,14 @@ namespace sysstr using sys_string_hstring_builder = sys_string_builder_t; } -//#define SYS_STRING_STATIC_HSTRING(x) ([] () noexcept -> ::systr::sys_string_hstring { \ -// constexpr ::size_t size = sizeof(u##x) / sizeof(char16_t); \ -// using header_type = ::sysstr::util::hstring_header; \ -// static const header_type header{1, size - 1, 0, 0, u##x}; \ -// return ::sysstr::sys_string_hstring(HSTRING(uintptr_t(&header) | ::sysstr::util::hstring_static_allocation_bit) , handle_retain::no); \ -// }()) - -#define SYS_STRING_STATIC_HSTRING(x) ([] () noexcept -> ::sysstr::sys_string_hstring { \ - constexpr ::size_t size = sizeof(u##x) / sizeof(char16_t); \ - using header_type = ::sysstr::util::hstring_header; \ - static struct bug_workaround { const header_type header{1, size - 1, 0, 0, u##x}; } b; \ - return ::sysstr::sys_string_hstring(HSTRING(uintptr_t(&b.header) | ::sysstr::util::hstring_static_allocation_bit) , ::sysstr::handle_retain::no); \ - }()) +namespace sysstr::util +{ + template + inline auto make_static_sys_string_hstring() noexcept -> sys_string_hstring + { + static struct bug_workaround { const hstring_header header{1, Str.size() - 1, 0, 0, Str.chars}; } b; + return sys_string_hstring(HSTRING(uintptr_t(&b.header) | hstring_static_allocation_bit) , handle_retain::no); + } +} +#define SYS_STRING_STATIC_HSTRING(x) ::sysstr::util::make_static_sys_string_hstring() diff --git a/lib/inc/sys_string/impl/util/generic_impl.h b/lib/inc/sys_string/impl/util/generic_impl.h index a711687..0b0dff4 100644 --- a/lib/inc/sys_string/impl/util/generic_impl.h +++ b/lib/inc/sys_string/impl/util/generic_impl.h @@ -97,7 +97,7 @@ namespace sysstr::util::generic { int32_t not_a_ref_count; bool is_static; - CharT chars[N + 1]; + ct_string chars; }; template diff --git a/lib/inc/sys_string/impl/util/util.h b/lib/inc/sys_string/impl/util/util.h index ecd4389..3c8c0e2 100644 --- a/lib/inc/sys_string/impl/util/util.h +++ b/lib/inc/sys_string/impl/util/util.h @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -19,6 +20,32 @@ namespace sysstr::util template static constexpr bool dependent_bool = Val; + template + struct ct_string { + using char_type = Char; + + Char chars[N]; + + constexpr ct_string(const Char (&src)[N]) noexcept + { + std::ranges::copy(src, chars); + } + + constexpr auto size() const -> size_t { return N; } + + constexpr auto operator[](size_t i) const -> Char { return chars[i]; } + + friend constexpr bool operator==(const ct_string & lhs, const ct_string & rhs) { + return std::ranges::equal(lhs.chars, rhs.chars); + } + + constexpr auto begin() const { return chars; } + constexpr auto end() const { return chars + N; } + }; + + template + ct_string(const Char (&src)[N]) -> ct_string; + template Sentinel, std::output_iterator OutIt, class Pred> auto split(It str_start, Sentinel str_end, OutIt dest, Pred pred) -> OutIt requires(std::is_constructible_v, std::tuple_element_t<1, decltype(pred(str_start, str_end))>>) From 8e22348e11991df5898297c0e9a52ce9419dd256 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Fri, 15 Nov 2024 03:30:14 -0800 Subject: [PATCH 26/63] Fixing typo --- lib/inc/sys_string/impl/platforms/windows_bstr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/inc/sys_string/impl/platforms/windows_bstr.h b/lib/inc/sys_string/impl/platforms/windows_bstr.h index 1cb5841..bb735f6 100644 --- a/lib/inc/sys_string/impl/platforms/windows_bstr.h +++ b/lib/inc/sys_string/impl/platforms/windows_bstr.h @@ -625,4 +625,4 @@ namespace sysstr::util } } -#define SYS_STRING_STATIC_BSTR(x) :sysstr::util::make_static_sys_string_bstr() +#define SYS_STRING_STATIC_BSTR(x) ::sysstr::util::make_static_sys_string_bstr() From 894a87092f6b0c6531868e220c8f440ab3f9721c Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Fri, 15 Nov 2024 03:35:41 -0800 Subject: [PATCH 27/63] More bstr fixes --- lib/inc/sys_string/impl/platforms/windows_bstr.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/inc/sys_string/impl/platforms/windows_bstr.h b/lib/inc/sys_string/impl/platforms/windows_bstr.h index bb735f6..5e88fd3 100644 --- a/lib/inc/sys_string/impl/platforms/windows_bstr.h +++ b/lib/inc/sys_string/impl/platforms/windows_bstr.h @@ -618,8 +618,8 @@ namespace sysstr::util template inline auto make_static_sys_string_bstr() noexcept -> sys_string_bstr { - constexpr ::UINT size = sizeof(Str.chars); - static const static_bstr sbuf{size - sizeof(char16_t), Str}; + constexpr size_t size = Str.size(); + static const static_bstr sbuf{(size - 1) * sizeof(char16_t), Str}; bstr_buffer buf((dynamic_bstr *)&sbuf, 0); return *reinterpret_cast(&buf); } From 67df4f82142551b297a13338d18a4b6633f7f273 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Fri, 15 Nov 2024 03:42:00 -0800 Subject: [PATCH 28/63] Fixing hstring --- lib/inc/sys_string/impl/platforms/windows_hstring.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/inc/sys_string/impl/platforms/windows_hstring.h b/lib/inc/sys_string/impl/platforms/windows_hstring.h index db756fa..4e294e0 100644 --- a/lib/inc/sys_string/impl/platforms/windows_hstring.h +++ b/lib/inc/sys_string/impl/platforms/windows_hstring.h @@ -439,7 +439,8 @@ namespace sysstr::util template inline auto make_static_sys_string_hstring() noexcept -> sys_string_hstring { - static struct bug_workaround { const hstring_header header{1, Str.size() - 1, 0, 0, Str.chars}; } b; + constexpr size_t size = Str.size(); + static struct bug_workaround { const hstring_header header{1, size - 1, 0, 0, Str.chars}; } b; return sys_string_hstring(HSTRING(uintptr_t(&b.header) | hstring_static_allocation_bit) , handle_retain::no); } } From c2375af91be328a891161229a2990eadd9c55d5e Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Fri, 15 Nov 2024 10:21:21 -0800 Subject: [PATCH 29/63] Adding sys_string::std_format --- lib/inc/sys_string/config.h | 6 +++ lib/inc/sys_string/impl/format.h | 40 ++++++++++++++++++- lib/inc/sys_string/impl/misc.h | 8 +--- .../sys_string/impl/unicode/utf_encoding.h | 2 + lib/inc/sys_string/sys_string.h | 40 +++++++++++++------ test/test_general.cpp | 15 +++++-- 6 files changed, 87 insertions(+), 24 deletions(-) diff --git a/lib/inc/sys_string/config.h b/lib/inc/sys_string/config.h index 6eeabb2..510143b 100644 --- a/lib/inc/sys_string/config.h +++ b/lib/inc/sys_string/config.h @@ -103,6 +103,12 @@ #error Your standard library does not support ranges #endif +//See https://github.com/llvm/llvm-project/issues/77773 for the sad story of how feature test +//macros are useless with libc++ +#if __cpp_lib_format >= 201907L || (defined(_LIBCPP_VERSION) && __has_include()) + #define SYS_STRING_SUPPORTS_STD_FORMAT 1 + +#endif #endif diff --git a/lib/inc/sys_string/impl/format.h b/lib/inc/sys_string/impl/format.h index 1a08123..468bf04 100644 --- a/lib/inc/sys_string/impl/format.h +++ b/lib/inc/sys_string/impl/format.h @@ -31,11 +31,47 @@ namespace sysstr if (size == -1) return sys_string_t(); buf.resize(size + 1); - const int ret = vsnprintf(&buf[0], buf.size(), format, vl); + const int ret = vsnprintf(buf.data(), buf.size(), format, vl); va_end(vl); if (ret <= 0) return sys_string_t(); buf.resize(ret); - return sys_string_t(&buf[0], buf.size()); + return sys_string_t(buf); } + + #if SYS_STRING_SUPPORTS_STD_FORMAT + + template + template + inline + auto sys_string_t::std_format(std::format_string fmt, Args &&... args) -> sys_string_t + { + if constexpr (std::is_same_v::storage_type, char>) + { + sys_string_builder_t builder; + std::format_to(std::back_inserter(builder.chars()), fmt, std::forward(args)...); + return builder.build(); + } + else + { + return sys_string_t(std::format(fmt, std::forward(args)...)); + } + } + + template + inline + auto sys_string_t::std_vformat(std::string_view fmt, std::format_args args) -> sys_string_t + { + if constexpr (std::is_same_v::storage_type, char>) + { + sys_string_builder_t builder; + std::vformat_to(std::back_inserter(builder.chars()), fmt, args); + return builder.build(); + } + else + { + return sys_string_t(std::vformat(fmt, args)); + } + } + #endif } diff --git a/lib/inc/sys_string/impl/misc.h b/lib/inc/sys_string/impl/misc.h index 1019341..62662d5 100644 --- a/lib/inc/sys_string/impl/misc.h +++ b/lib/inc/sys_string/impl/misc.h @@ -11,10 +11,6 @@ #include -#if __has_include() - #include -#endif - namespace sysstr { namespace util @@ -172,9 +168,7 @@ namespace sysstr #endif } -//See https://github.com/llvm/llvm-project/issues/77773 for the sad story of how feature test -//macros are useless with libc++ -#if __cpp_lib_format >= 201907L || (defined(_LIBCPP_VERSION) && __has_include()) +#if SYS_STRING_SUPPORTS_STD_FORMAT template struct std::formatter> : private std::formatter { diff --git a/lib/inc/sys_string/impl/unicode/utf_encoding.h b/lib/inc/sys_string/impl/unicode/utf_encoding.h index 4ccb083..d932c9e 100644 --- a/lib/inc/sys_string/impl/unicode/utf_encoding.h +++ b/lib/inc/sys_string/impl/unicode/utf_encoding.h @@ -62,6 +62,8 @@ namespace sysstr template<> struct utf_encoding_value { static constexpr utf_encoding value = utf32; }; #if SYS_STRING_WCHAR_T_IS_UTF16 template<> struct utf_encoding_value { static constexpr utf_encoding value = utf16; }; + #elif SYS_STRING_WCHAR_T_IS_UTF32 + template<> struct utf_encoding_value { static constexpr utf_encoding value = utf32; }; #endif template concept has_utf_encoding = requires { diff --git a/lib/inc/sys_string/sys_string.h b/lib/inc/sys_string/sys_string.h index 120fe09..92f5348 100644 --- a/lib/inc/sys_string/sys_string.h +++ b/lib/inc/sys_string/sys_string.h @@ -22,6 +22,10 @@ #include #include +#if __has_include() + #include +#endif + #define HEADER_SYS_STRING_H_INSIDE @@ -41,6 +45,10 @@ namespace sysstr copy_content, attach_pointer }; + + template + concept sys_string_or_char = std::is_same_v, sys_string_t> || + std::is_same_v, char32_t>; } namespace sysstr::util @@ -54,11 +62,6 @@ namespace sysstr::util namespace sysstr { - template - concept sys_string_or_char = std::is_same_v, sys_string_t> || - std::is_same_v, char32_t>; - - template class sys_string_t : public Storage { @@ -66,9 +69,6 @@ namespace sysstr friend typename Storage::char_access; private: using storage = Storage; - - static_assert(std::ranges::random_access_range); - public: using size_type = typename storage::size_type; using storage_type = typename storage::storage_type; @@ -77,6 +77,7 @@ namespace sysstr static constexpr size_type max_size = storage::max_size; using char_access = typename storage::char_access; + static_assert(std::ranges::random_access_range); template class utf_access @@ -179,8 +180,8 @@ namespace sysstr template requires(has_utf_encoding>) - sys_string_t(Range && val) : - sys_string_t(std::ranges::data(std::forward(val)), std::ranges::size(std::forward(val))) + sys_string_t(const Range & val) : + sys_string_t(std::ranges::data(val), std::ranges::size(val)) {} sys_string_t(const typename utf32_access::iterator & first, const typename utf32_access::iterator & last): @@ -213,8 +214,23 @@ namespace sysstr auto empty() const noexcept -> bool { return storage::size() == 0; } - static auto format(const char * spec, ...) -> sys_string_t; - static auto formatv(const char * spec, va_list vl) -> sys_string_t; + static + #ifdef __GNUC__ + __attribute__((format(printf, 1, 2))) + #endif + auto format(const char * spec, ...) -> sys_string_t; + + static + #ifdef __GNUC__ + __attribute__((format(printf, 1, 0))) + #endif + auto formatv(const char * spec, va_list vl) -> sys_string_t; + + #if SYS_STRING_SUPPORTS_STD_FORMAT + template + static auto std_format(std::format_string fmt, Args &&... args) -> sys_string_t; + static auto std_vformat(std::string_view fmt, std::format_args args) -> sys_string_t; + #endif template friend auto operator<<(std::ostream & str, const sys_string_t & val) -> std::ostream &; diff --git a/test/test_general.cpp b/test/test_general.cpp index 5c34a25..96c44b3 100644 --- a/test/test_general.cpp +++ b/test/test_general.cpp @@ -649,14 +649,23 @@ TEST_CASE( "ostream", "[general]" ) { #endif } -#if __cpp_lib_format >= 201907L || (defined(_LIBCPP_VERSION) && __has_include()) -TEST_CASE( "std::format", "[general]" ) { + +TEST_CASE( "format", "[general]" ) { + + CHECK(sys_string::format("%d", 5) == S("5")); + +#if SYS_STRING_SUPPORTS_STD_FORMAT + CHECK(sys_string::std_format("{}", 5) == S("5")); + int i = 5; + CHECK(sys_string::std_vformat("{}", std::make_format_args(i)) == S("5")); CHECK(std::format("{0}", S("a🧡bc")) == "a🧡bc"); #if SYS_STRING_WCHAR_T_IS_UTF16 || SYS_STRING_WCHAR_T_IS_UTF32 CHECK(std::format(L"{0}", S("a🧡bc")) == L"a🧡bc"); #endif + +#endif + } -#endif \ No newline at end of file From ee17d657bbff2fd6b6906d2c91ecab36d7d2a5ec Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Fri, 15 Nov 2024 10:48:45 -0800 Subject: [PATCH 30/63] Adding MSVC format string attribute --- lib/inc/sys_string/sys_string.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/inc/sys_string/sys_string.h b/lib/inc/sys_string/sys_string.h index 92f5348..42d88a0 100644 --- a/lib/inc/sys_string/sys_string.h +++ b/lib/inc/sys_string/sys_string.h @@ -218,13 +218,21 @@ namespace sysstr #ifdef __GNUC__ __attribute__((format(printf, 1, 2))) #endif - auto format(const char * spec, ...) -> sys_string_t; + auto format( + #ifdef _MSC_VER + _Printf_format_string_ + #endif + const char * spec, ...) -> sys_string_t; static #ifdef __GNUC__ __attribute__((format(printf, 1, 0))) #endif - auto formatv(const char * spec, va_list vl) -> sys_string_t; + auto formatv( + #ifdef _MSC_VER + _Printf_format_string_ + #endif + const char * spec, va_list vl) -> sys_string_t; #if SYS_STRING_SUPPORTS_STD_FORMAT template From e07dd7fa294eabced96ab7e892827e27f059a26a Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Fri, 15 Nov 2024 16:07:49 -0800 Subject: [PATCH 31/63] Making operator<< not pollute global namespace --- lib/inc/sys_string/impl/misc.h | 127 ++++++++++++++------------------ lib/inc/sys_string/sys_string.h | 33 +++++++-- 2 files changed, 80 insertions(+), 80 deletions(-) diff --git a/lib/inc/sys_string/impl/misc.h b/lib/inc/sys_string/impl/misc.h index 62662d5..7c5a13a 100644 --- a/lib/inc/sys_string/impl/misc.h +++ b/lib/inc/sys_string/impl/misc.h @@ -80,92 +80,73 @@ namespace sysstr return std::ranges::equal(test.begin(), test.end(), access.begin(), access.begin() + test_size); } + } + + template + template Func> + inline + auto sys_string_t::print_with(Func func) const -> decltype(func(std::string_view{})) + { + if constexpr (std::ranges::contiguous_range::char_access> && + std::is_same_v::storage_type, char>) + { + typename sysstr::sys_string_t::char_access access(*this); + return func(std::string_view(access.data(), access.size())); + } + else + { + std::string out; + typename sysstr::sys_string_t::utf8_access(*this).each([&out](char c) { + out += c; + }); + return func(std::string_view(out)); + } + } - template + #if SYS_STRING_WCHAR_T_IS_UTF16 + template + template Func> inline - decltype(auto) with_output_string(const sys_string_t & val, Func func) + auto sys_string_t::wprint_with(Func func) const -> decltype(func(std::wstring_view{})) { if constexpr (std::ranges::contiguous_range::char_access> && - std::is_same_v::storage_type, char>) + std::is_same_v::storage_type, char16_t>) { - typename sysstr::sys_string_t::char_access access(val); - return func(std::string_view(access.data(), access.size())); + typename sysstr::sys_string_t::char_access access(*this); + return func(std::wstring_view((const wchar_t *)access.data(), access.size())); } else { - std::string out; - typename sysstr::sys_string_t::utf8_access(val).each([&out](char c) { - out += c; + std::wstring out; + typename sysstr::sys_string_t::utf16_access(*this).each([&out](char16_t c) { + out += wchar_t(c); }); - return func(std::string_view(out)); + return func(std::wstring_view(out)); } } - - #if SYS_STRING_WCHAR_T_IS_UTF16 - template - inline - decltype(auto) with_output_wstring(const sys_string_t & val, Func func) + #elif SYS_STRING_WCHAR_T_IS_UTF32 + template + template Func> + inline + auto sys_string_t::wprint_with(Func func) const -> decltype(func(std::wstring_view{})) + { + if constexpr (std::ranges::contiguous_range::char_access> && + std::is_same_v::storage_type, char32_t>) { - if constexpr (std::ranges::contiguous_range::char_access> && - std::is_same_v::storage_type, char16_t>) - { - typename sysstr::sys_string_t::char_access access(val); - return func(std::wstring_view((const wchar_t *)access.data(), access.size())); - } - else - { - std::wstring out; - typename sysstr::sys_string_t::utf16_access(val).each([&out](char16_t c) { - out += wchar_t(c); - }); - return func(std::wstring_view(out)); - } - } - #elif SYS_STRING_WCHAR_T_IS_UTF32 - template - inline - decltype(auto) with_output_wstring(const sys_string_t & val, Func func) + typename sysstr::sys_string_t::char_access access(*this); + return func(std::wstring_view((const wchar_t *)access.data(), access.size())); + } + else { - if constexpr (std::ranges::contiguous_range::char_access> && - std::is_same_v::storage_type, char32_t>) - { - typename sysstr::sys_string_t::char_access access(val); - return func(std::wstring_view((const wchar_t *)access.data(), access.size())); - } - else - { - std::wstring out; - typename sysstr::sys_string_t::utf32_access(val).each([&out](char32_t c) { - out += wchar_t(c); - }); - return func(std::wstring_view(out)); - } + std::wstring out; + typename sysstr::sys_string_t::utf32_access(*this).each([&out](char32_t c) { + out += wchar_t(c); + }); + return func(std::wstring_view(out)); } - #endif - } - - - template - inline - auto operator<<(std::ostream & str, const sys_string_t & val) -> std::ostream & - { - return util::with_output_string(val, [&](auto view) -> std::ostream & { - return str << view; - }); - } - -#if SYS_STRING_WCHAR_T_IS_UTF16 || SYS_STRING_WCHAR_T_IS_UTF32 - - template - inline - auto operator<<(std::wostream & str, const sys_string_t & val) -> std::wostream & - { - return util::with_output_wstring(val, [&](auto view) -> std::wostream & { - return str << view; - }); - } + } + #endif -#endif } #if SYS_STRING_SUPPORTS_STD_FORMAT @@ -180,7 +161,7 @@ template struct std::formatter> : p template auto format(const sysstr::sys_string_t & str, FormatContext & ctx) const -> decltype(ctx.out()) { - return sysstr::util::with_output_string(str, [&](auto view) { + return str.print_with([&](auto view) -> decltype(ctx.out()) { return super::format(view, ctx); }); } @@ -198,7 +179,7 @@ template struct std::formatter, wch template auto format(const sysstr::sys_string_t & str, FormatContext & ctx) const -> decltype(ctx.out()) { - return sysstr::util::with_output_wstring(str, [&](auto view) { + return str.wprint_with([&](auto view) -> decltype(ctx.out()) { return super::format(view, ctx); }); } diff --git a/lib/inc/sys_string/sys_string.h b/lib/inc/sys_string/sys_string.h index 42d88a0..32b08ee 100644 --- a/lib/inc/sys_string/sys_string.h +++ b/lib/inc/sys_string/sys_string.h @@ -65,8 +65,12 @@ namespace sysstr template class sys_string_t : public Storage { - friend std::hash; - friend typename Storage::char_access; + friend std::hash; + friend typename Storage::char_access; + friend std::formatter>; + #if SYS_STRING_WCHAR_T_IS_UTF16 || SYS_STRING_WCHAR_T_IS_UTF32 + friend std::formatter, wchar_t>; + #endif private: using storage = Storage; public: @@ -240,11 +244,19 @@ namespace sysstr static auto std_vformat(std::string_view fmt, std::format_args args) -> sys_string_t; #endif - template - friend auto operator<<(std::ostream & str, const sys_string_t & val) -> std::ostream &; + friend auto operator<<(std::ostream & str, const sys_string_t & val) -> std::ostream & + { + return val.print_with([&](auto view) -> std::ostream & { + return str << view; + }); + } #if SYS_STRING_WCHAR_T_IS_UTF16 || SYS_STRING_WCHAR_T_IS_UTF32 - template - friend auto operator<<(std::wostream & str, const sys_string_t & val) -> std::wostream &; + friend auto operator<<(std::wostream & str, const sys_string_t & val) -> std::wostream & + { + return val.wprint_with([&](auto view) -> std::ostream & { + return str << view; + }); + } #endif auto swap(sys_string_t & other) noexcept -> void @@ -339,7 +351,14 @@ namespace sysstr private: static auto compare(const sys_string_t & lhs, const sys_string_t & rhs) noexcept -> std::strong_ordering; static auto compare_no_case(const sys_string_t lhs, const sys_string_t & rhs) noexcept -> std::strong_ordering; - + + template Func> + auto print_with(Func func) const -> decltype(func(std::string_view{})); + + #if SYS_STRING_WCHAR_T_IS_UTF16 || SYS_STRING_WCHAR_T_IS_UTF32 + template Func> + auto wprint_with(Func func) const -> decltype(func(std::wstring_view{})); + #endif }; } From 4cbbbc617056a2aa209bff9e085fc505450c67ea Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Fri, 15 Nov 2024 16:26:41 -0800 Subject: [PATCH 32/63] Fixing incorrect return type --- lib/inc/sys_string/sys_string.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/inc/sys_string/sys_string.h b/lib/inc/sys_string/sys_string.h index 32b08ee..e04a421 100644 --- a/lib/inc/sys_string/sys_string.h +++ b/lib/inc/sys_string/sys_string.h @@ -253,7 +253,7 @@ namespace sysstr #if SYS_STRING_WCHAR_T_IS_UTF16 || SYS_STRING_WCHAR_T_IS_UTF32 friend auto operator<<(std::wostream & str, const sys_string_t & val) -> std::wostream & { - return val.wprint_with([&](auto view) -> std::ostream & { + return val.wprint_with([&](auto view) -> std::wostream & { return str << view; }); } From e3ff141c402499fdd7cd3b254b0cfd1f770a0875 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Fri, 15 Nov 2024 16:40:52 -0800 Subject: [PATCH 33/63] More build break fixes --- lib/inc/sys_string/sys_string.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/inc/sys_string/sys_string.h b/lib/inc/sys_string/sys_string.h index e04a421..63a96b7 100644 --- a/lib/inc/sys_string/sys_string.h +++ b/lib/inc/sys_string/sys_string.h @@ -67,10 +67,12 @@ namespace sysstr { friend std::hash; friend typename Storage::char_access; + #if SYS_STRING_SUPPORTS_STD_FORMAT friend std::formatter>; #if SYS_STRING_WCHAR_T_IS_UTF16 || SYS_STRING_WCHAR_T_IS_UTF32 friend std::formatter, wchar_t>; #endif + #endif private: using storage = Storage; public: From be89bccd63ceb43e982d66fb8ff22b72c5486304 Mon Sep 17 00:00:00 2001 From: Eugene Gershnik Date: Fri, 15 Nov 2024 23:08:17 -0800 Subject: [PATCH 34/63] Goodbye Catch2, hello Doctest --- test/CMakeLists.txt | 24 +- test/catch.hpp | 17970 ---------------------------------- test/test_android.cpp | 36 +- test/test_apple.mm | 8 +- test/test_builder.cpp | 14 +- test/test_general.cpp | 48 +- test/test_generic.cpp | 8 +- test/test_javascript.cpp | 8 +- test/test_linux.cpp | 8 +- test/test_main.cpp | 7 +- test/test_python.cpp | 8 +- test/test_utf_iteration.cpp | 29 +- test/test_utf_util.cpp | 12 +- test/test_windows.cpp | 19 +- 14 files changed, 145 insertions(+), 18054 deletions(-) delete mode 100644 test/catch.hpp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 529758d..7e2d959 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -6,8 +6,18 @@ # https://github.com/gershnik/sys_string/blob/master/LICENSE.txt # +include(FetchContent) + find_package (Python3 COMPONENTS Development) +FetchContent_Declare(doctest + URL https://raw.githubusercontent.com/doctest/doctest/v2.4.11/doctest/doctest.h + DOWNLOAD_NO_EXTRACT TRUE + SOURCE_DIR downloaded/doctest +) + +FetchContent_MakeAvailable(doctest) + if(${Python3_Development_FOUND}) include_directories( SYSTEM @@ -130,6 +140,11 @@ foreach(STORAGE_SUFFIX ${STORAGE_TYPES}) VISIBILITY_INLINES_HIDDEN ON ) + target_include_directories(test-${TEST_SUFFIX} + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}/downloaded + ) + target_compile_options(test-${TEST_SUFFIX} PRIVATE $<$:/utf-8;/W4;/WX> $<$:-Wall;-Wextra;-pedantic;-Wno-self-assign-overloaded;-Wno-self-move> @@ -176,17 +191,16 @@ foreach(STORAGE_SUFFIX ${STORAGE_TYPES}) "$<$:test_windows.cpp>" "$<$:test_linux.cpp>" "$<$:test_javascript.cpp>" - - catch.hpp ) + list(APPEND TEST_COMMAND COMMAND echo "Running test-${TEST_SUFFIX}") if (${CMAKE_SYSTEM_NAME} STREQUAL Android) list(APPEND TEST_COMMAND COMMAND ${ADB} push test-${TEST_SUFFIX} ${ANDROID_TEST_DIR}) - list(APPEND TEST_COMMAND COMMAND ${ADB} shell LD_LIBRARY_PATH=${ANDROID_LD_LIBRARY_PATH} ${ANDROID_TEST_DIR}/test-${TEST_SUFFIX}) + list(APPEND TEST_COMMAND COMMAND ${ADB} shell LD_LIBRARY_PATH=${ANDROID_LD_LIBRARY_PATH} ${ANDROID_TEST_DIR}/test-${TEST_SUFFIX} -ni) elseif (DEFINED EMSCRIPTEN) - list(APPEND TEST_COMMAND COMMAND node test-${TEST_SUFFIX}) + list(APPEND TEST_COMMAND COMMAND node test-${TEST_SUFFIX} -ni) else() - list(APPEND TEST_COMMAND COMMAND test-${TEST_SUFFIX}) + list(APPEND TEST_COMMAND COMMAND test-${TEST_SUFFIX} -ni) endif() list(APPEND TEST_DEPS test-${TEST_SUFFIX}) diff --git a/test/catch.hpp b/test/catch.hpp deleted file mode 100644 index d2a1242..0000000 --- a/test/catch.hpp +++ /dev/null @@ -1,17970 +0,0 @@ -/* - * Catch v2.13.9 - * Generated: 2022-04-12 22:37:23.260201 - * ---------------------------------------------------------- - * This file has been merged from multiple headers. Please don't edit it directly - * Copyright (c) 2022 Two Blue Cubes Ltd. All rights reserved. - * - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ -#ifndef TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED -#define TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED -// start catch.hpp - - -#define CATCH_VERSION_MAJOR 2 -#define CATCH_VERSION_MINOR 13 -#define CATCH_VERSION_PATCH 9 - -#ifdef __clang__ -# pragma clang system_header -#elif defined __GNUC__ -# pragma GCC system_header -#endif - -// start catch_suppress_warnings.h - -#ifdef __clang__ -# ifdef __ICC // icpc defines the __clang__ macro -# pragma warning(push) -# pragma warning(disable: 161 1682) -# else // __ICC -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wpadded" -# pragma clang diagnostic ignored "-Wswitch-enum" -# pragma clang diagnostic ignored "-Wcovered-switch-default" -# endif -#elif defined __GNUC__ - // Because REQUIREs trigger GCC's -Wparentheses, and because still - // supported version of g++ have only buggy support for _Pragmas, - // Wparentheses have to be suppressed globally. -# pragma GCC diagnostic ignored "-Wparentheses" // See #674 for details - -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wunused-variable" -# pragma GCC diagnostic ignored "-Wpadded" -#endif -// end catch_suppress_warnings.h -#if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER) -# define CATCH_IMPL -# define CATCH_CONFIG_ALL_PARTS -#endif - -// In the impl file, we want to have access to all parts of the headers -// Can also be used to sanely support PCHs -#if defined(CATCH_CONFIG_ALL_PARTS) -# define CATCH_CONFIG_EXTERNAL_INTERFACES -# if defined(CATCH_CONFIG_DISABLE_MATCHERS) -# undef CATCH_CONFIG_DISABLE_MATCHERS -# endif -# if !defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER) -# define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER -# endif -#endif - -#if !defined(CATCH_CONFIG_IMPL_ONLY) -// start catch_platform.h - -// See e.g.: -// https://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/TargetConditionals.h.auto.html -#ifdef __APPLE__ -# include -# if (defined(TARGET_OS_OSX) && TARGET_OS_OSX == 1) || \ - (defined(TARGET_OS_MAC) && TARGET_OS_MAC == 1) -# define CATCH_PLATFORM_MAC -# elif (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE == 1) -# define CATCH_PLATFORM_IPHONE -# endif - -#elif defined(linux) || defined(__linux) || defined(__linux__) -# define CATCH_PLATFORM_LINUX - -#elif defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__) -# define CATCH_PLATFORM_WINDOWS -#endif - -// end catch_platform.h - -#ifdef CATCH_IMPL -# ifndef CLARA_CONFIG_MAIN -# define CLARA_CONFIG_MAIN_NOT_DEFINED -# define CLARA_CONFIG_MAIN -# endif -#endif - -// start catch_user_interfaces.h - -namespace Catch { - unsigned int rngSeed(); -} - -// end catch_user_interfaces.h -// start catch_tag_alias_autoregistrar.h - -// start catch_common.h - -// start catch_compiler_capabilities.h - -// Detect a number of compiler features - by compiler -// The following features are defined: -// -// CATCH_CONFIG_COUNTER : is the __COUNTER__ macro supported? -// CATCH_CONFIG_WINDOWS_SEH : is Windows SEH supported? -// CATCH_CONFIG_POSIX_SIGNALS : are POSIX signals supported? -// CATCH_CONFIG_DISABLE_EXCEPTIONS : Are exceptions enabled? -// **************** -// Note to maintainers: if new toggles are added please document them -// in configuration.md, too -// **************** - -// In general each macro has a _NO_ form -// (e.g. CATCH_CONFIG_NO_POSIX_SIGNALS) which disables the feature. -// Many features, at point of detection, define an _INTERNAL_ macro, so they -// can be combined, en-mass, with the _NO_ forms later. - -#ifdef __cplusplus - -# if (__cplusplus >= 201402L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201402L) -# define CATCH_CPP14_OR_GREATER -# endif - -# if (__cplusplus >= 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) -# define CATCH_CPP17_OR_GREATER -# endif - -#endif - -// Only GCC compiler should be used in this block, so other compilers trying to -// mask themselves as GCC should be ignored. -#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && !defined(__CUDACC__) && !defined(__LCC__) -# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic push" ) -# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic pop" ) - -# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) - -#endif - -#if defined(__clang__) - -# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic push" ) -# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic pop" ) - -// As of this writing, IBM XL's implementation of __builtin_constant_p has a bug -// which results in calls to destructors being emitted for each temporary, -// without a matching initialization. In practice, this can result in something -// like `std::string::~string` being called on an uninitialized value. -// -// For example, this code will likely segfault under IBM XL: -// ``` -// REQUIRE(std::string("12") + "34" == "1234") -// ``` -// -// Therefore, `CATCH_INTERNAL_IGNORE_BUT_WARN` is not implemented. -# if !defined(__ibmxl__) && !defined(__CUDACC__) -# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) /* NOLINT(cppcoreguidelines-pro-type-vararg, hicpp-vararg) */ -# endif - -# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - _Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \ - _Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"") - -# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \ - _Pragma( "clang diagnostic ignored \"-Wparentheses\"" ) - -# define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \ - _Pragma( "clang diagnostic ignored \"-Wunused-variable\"" ) - -# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \ - _Pragma( "clang diagnostic ignored \"-Wgnu-zero-variadic-macro-arguments\"" ) - -# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \ - _Pragma( "clang diagnostic ignored \"-Wunused-template\"" ) - -#endif // __clang__ - -//////////////////////////////////////////////////////////////////////////////// -// Assume that non-Windows platforms support posix signals by default -#if !defined(CATCH_PLATFORM_WINDOWS) - #define CATCH_INTERNAL_CONFIG_POSIX_SIGNALS -#endif - -//////////////////////////////////////////////////////////////////////////////// -// We know some environments not to support full POSIX signals -#if defined(__CYGWIN__) || defined(__QNX__) || defined(__EMSCRIPTEN__) || defined(__DJGPP__) - #define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS -#endif - -#ifdef __OS400__ -# define CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS -# define CATCH_CONFIG_COLOUR_NONE -#endif - -//////////////////////////////////////////////////////////////////////////////// -// Android somehow still does not support std::to_string -#if defined(__ANDROID__) -# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING -# define CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE -#endif - -//////////////////////////////////////////////////////////////////////////////// -// Not all Windows environments support SEH properly -#if defined(__MINGW32__) -# define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH -#endif - -//////////////////////////////////////////////////////////////////////////////// -// PS4 -#if defined(__ORBIS__) -# define CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE -#endif - -//////////////////////////////////////////////////////////////////////////////// -// Cygwin -#ifdef __CYGWIN__ - -// Required for some versions of Cygwin to declare gettimeofday -// see: http://stackoverflow.com/questions/36901803/gettimeofday-not-declared-in-this-scope-cygwin -# define _BSD_SOURCE -// some versions of cygwin (most) do not support std::to_string. Use the libstd check. -// https://gcc.gnu.org/onlinedocs/gcc-4.8.2/libstdc++/api/a01053_source.html line 2812-2813 -# if !((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \ - && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)) - -# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING - -# endif -#endif // __CYGWIN__ - -//////////////////////////////////////////////////////////////////////////////// -// Visual C++ -#if defined(_MSC_VER) - -// Universal Windows platform does not support SEH -// Or console colours (or console at all...) -# if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) -# define CATCH_CONFIG_COLOUR_NONE -# else -# define CATCH_INTERNAL_CONFIG_WINDOWS_SEH -# endif - -# if !defined(__clang__) // Handle Clang masquerading for msvc - -// MSVC traditional preprocessor needs some workaround for __VA_ARGS__ -// _MSVC_TRADITIONAL == 0 means new conformant preprocessor -// _MSVC_TRADITIONAL == 1 means old traditional non-conformant preprocessor -# if !defined(_MSVC_TRADITIONAL) || (defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL) -# define CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -# endif // MSVC_TRADITIONAL - -// Only do this if we're not using clang on Windows, which uses `diagnostic push` & `diagnostic pop` -# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION __pragma( warning(push) ) -# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION __pragma( warning(pop) ) -# endif // __clang__ - -#endif // _MSC_VER - -#if defined(_REENTRANT) || defined(_MSC_VER) -// Enable async processing, as -pthread is specified or no additional linking is required -# define CATCH_INTERNAL_CONFIG_USE_ASYNC -#endif // _MSC_VER - -//////////////////////////////////////////////////////////////////////////////// -// Check if we are compiled with -fno-exceptions or equivalent -#if defined(__EXCEPTIONS) || defined(__cpp_exceptions) || defined(_CPPUNWIND) -# define CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED -#endif - -//////////////////////////////////////////////////////////////////////////////// -// DJGPP -#ifdef __DJGPP__ -# define CATCH_INTERNAL_CONFIG_NO_WCHAR -#endif // __DJGPP__ - -//////////////////////////////////////////////////////////////////////////////// -// Embarcadero C++Build -#if defined(__BORLANDC__) - #define CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN -#endif - -//////////////////////////////////////////////////////////////////////////////// - -// Use of __COUNTER__ is suppressed during code analysis in -// CLion/AppCode 2017.2.x and former, because __COUNTER__ is not properly -// handled by it. -// Otherwise all supported compilers support COUNTER macro, -// but user still might want to turn it off -#if ( !defined(__JETBRAINS_IDE__) || __JETBRAINS_IDE__ >= 20170300L ) - #define CATCH_INTERNAL_CONFIG_COUNTER -#endif - -//////////////////////////////////////////////////////////////////////////////// - -// RTX is a special version of Windows that is real time. -// This means that it is detected as Windows, but does not provide -// the same set of capabilities as real Windows does. -#if defined(UNDER_RTSS) || defined(RTX64_BUILD) - #define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH - #define CATCH_INTERNAL_CONFIG_NO_ASYNC - #define CATCH_CONFIG_COLOUR_NONE -#endif - -#if !defined(_GLIBCXX_USE_C99_MATH_TR1) -#define CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER -#endif - -// Various stdlib support checks that require __has_include -#if defined(__has_include) - // Check if string_view is available and usable - #if __has_include() && defined(CATCH_CPP17_OR_GREATER) - # define CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW - #endif - - // Check if optional is available and usable - # if __has_include() && defined(CATCH_CPP17_OR_GREATER) - # define CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL - # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) - - // Check if byte is available and usable - # if __has_include() && defined(CATCH_CPP17_OR_GREATER) - # include - # if defined(__cpp_lib_byte) && (__cpp_lib_byte > 0) - # define CATCH_INTERNAL_CONFIG_CPP17_BYTE - # endif - # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) - - // Check if variant is available and usable - # if __has_include() && defined(CATCH_CPP17_OR_GREATER) - # if defined(__clang__) && (__clang_major__ < 8) - // work around clang bug with libstdc++ https://bugs.llvm.org/show_bug.cgi?id=31852 - // fix should be in clang 8, workaround in libstdc++ 8.2 - # include - # if defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9) - # define CATCH_CONFIG_NO_CPP17_VARIANT - # else - # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT - # endif // defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9) - # else - # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT - # endif // defined(__clang__) && (__clang_major__ < 8) - # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) -#endif // defined(__has_include) - -#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER) -# define CATCH_CONFIG_COUNTER -#endif -#if defined(CATCH_INTERNAL_CONFIG_WINDOWS_SEH) && !defined(CATCH_CONFIG_NO_WINDOWS_SEH) && !defined(CATCH_CONFIG_WINDOWS_SEH) && !defined(CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH) -# define CATCH_CONFIG_WINDOWS_SEH -#endif -// This is set by default, because we assume that unix compilers are posix-signal-compatible by default. -#if defined(CATCH_INTERNAL_CONFIG_POSIX_SIGNALS) && !defined(CATCH_INTERNAL_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_NO_POSIX_SIGNALS) && !defined(CATCH_CONFIG_POSIX_SIGNALS) -# define CATCH_CONFIG_POSIX_SIGNALS -#endif -// This is set by default, because we assume that compilers with no wchar_t support are just rare exceptions. -#if !defined(CATCH_INTERNAL_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_NO_WCHAR) && !defined(CATCH_CONFIG_WCHAR) -# define CATCH_CONFIG_WCHAR -#endif - -#if !defined(CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_CPP11_TO_STRING) -# define CATCH_CONFIG_CPP11_TO_STRING -#endif - -#if defined(CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_NO_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_CPP17_OPTIONAL) -# define CATCH_CONFIG_CPP17_OPTIONAL -#endif - -#if defined(CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_NO_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_CPP17_STRING_VIEW) -# define CATCH_CONFIG_CPP17_STRING_VIEW -#endif - -#if defined(CATCH_INTERNAL_CONFIG_CPP17_VARIANT) && !defined(CATCH_CONFIG_NO_CPP17_VARIANT) && !defined(CATCH_CONFIG_CPP17_VARIANT) -# define CATCH_CONFIG_CPP17_VARIANT -#endif - -#if defined(CATCH_INTERNAL_CONFIG_CPP17_BYTE) && !defined(CATCH_CONFIG_NO_CPP17_BYTE) && !defined(CATCH_CONFIG_CPP17_BYTE) -# define CATCH_CONFIG_CPP17_BYTE -#endif - -#if defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT) -# define CATCH_INTERNAL_CONFIG_NEW_CAPTURE -#endif - -#if defined(CATCH_INTERNAL_CONFIG_NEW_CAPTURE) && !defined(CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NEW_CAPTURE) -# define CATCH_CONFIG_NEW_CAPTURE -#endif - -#if !defined(CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED) && !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) -# define CATCH_CONFIG_DISABLE_EXCEPTIONS -#endif - -#if defined(CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_NO_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_POLYFILL_ISNAN) -# define CATCH_CONFIG_POLYFILL_ISNAN -#endif - -#if defined(CATCH_INTERNAL_CONFIG_USE_ASYNC) && !defined(CATCH_INTERNAL_CONFIG_NO_ASYNC) && !defined(CATCH_CONFIG_NO_USE_ASYNC) && !defined(CATCH_CONFIG_USE_ASYNC) -# define CATCH_CONFIG_USE_ASYNC -#endif - -#if defined(CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_NO_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_ANDROID_LOGWRITE) -# define CATCH_CONFIG_ANDROID_LOGWRITE -#endif - -#if defined(CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_NO_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_GLOBAL_NEXTAFTER) -# define CATCH_CONFIG_GLOBAL_NEXTAFTER -#endif - -// Even if we do not think the compiler has that warning, we still have -// to provide a macro that can be used by the code. -#if !defined(CATCH_INTERNAL_START_WARNINGS_SUPPRESSION) -# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION -#endif -#if !defined(CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION) -# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION -#endif -#if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS -#endif -#if !defined(CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS -#endif -#if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS -#endif -#if !defined(CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS -#endif - -// The goal of this macro is to avoid evaluation of the arguments, but -// still have the compiler warn on problems inside... -#if !defined(CATCH_INTERNAL_IGNORE_BUT_WARN) -# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) -#endif - -#if defined(__APPLE__) && defined(__apple_build_version__) && (__clang_major__ < 10) -# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS -#elif defined(__clang__) && (__clang_major__ < 5) -# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS -#endif - -#if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS) -# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS -#endif - -#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) -#define CATCH_TRY if ((true)) -#define CATCH_CATCH_ALL if ((false)) -#define CATCH_CATCH_ANON(type) if ((false)) -#else -#define CATCH_TRY try -#define CATCH_CATCH_ALL catch (...) -#define CATCH_CATCH_ANON(type) catch (type) -#endif - -#if defined(CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_NO_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) -#define CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -#endif - -// end catch_compiler_capabilities.h -#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line -#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) -#ifdef CATCH_CONFIG_COUNTER -# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ ) -#else -# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ ) -#endif - -#include -#include -#include - -// We need a dummy global operator<< so we can bring it into Catch namespace later -struct Catch_global_namespace_dummy {}; -std::ostream& operator<<(std::ostream&, Catch_global_namespace_dummy); - -namespace Catch { - - struct CaseSensitive { enum Choice { - Yes, - No - }; }; - - class NonCopyable { - NonCopyable( NonCopyable const& ) = delete; - NonCopyable( NonCopyable && ) = delete; - NonCopyable& operator = ( NonCopyable const& ) = delete; - NonCopyable& operator = ( NonCopyable && ) = delete; - - protected: - NonCopyable(); - virtual ~NonCopyable(); - }; - - struct SourceLineInfo { - - SourceLineInfo() = delete; - SourceLineInfo( char const* _file, std::size_t _line ) noexcept - : file( _file ), - line( _line ) - {} - - SourceLineInfo( SourceLineInfo const& other ) = default; - SourceLineInfo& operator = ( SourceLineInfo const& ) = default; - SourceLineInfo( SourceLineInfo&& ) noexcept = default; - SourceLineInfo& operator = ( SourceLineInfo&& ) noexcept = default; - - bool empty() const noexcept { return file[0] == '\0'; } - bool operator == ( SourceLineInfo const& other ) const noexcept; - bool operator < ( SourceLineInfo const& other ) const noexcept; - - char const* file; - std::size_t line; - }; - - std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ); - - // Bring in operator<< from global namespace into Catch namespace - // This is necessary because the overload of operator<< above makes - // lookup stop at namespace Catch - using ::operator<<; - - // Use this in variadic streaming macros to allow - // >> +StreamEndStop - // as well as - // >> stuff +StreamEndStop - struct StreamEndStop { - std::string operator+() const; - }; - template - T const& operator + ( T const& value, StreamEndStop ) { - return value; - } -} - -#define CATCH_INTERNAL_LINEINFO \ - ::Catch::SourceLineInfo( __FILE__, static_cast( __LINE__ ) ) - -// end catch_common.h -namespace Catch { - - struct RegistrarForTagAliases { - RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo ); - }; - -} // end namespace Catch - -#define CATCH_REGISTER_TAG_ALIAS( alias, spec ) \ - CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \ - CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - namespace{ Catch::RegistrarForTagAliases INTERNAL_CATCH_UNIQUE_NAME( AutoRegisterTagAlias )( alias, spec, CATCH_INTERNAL_LINEINFO ); } \ - CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION - -// end catch_tag_alias_autoregistrar.h -// start catch_test_registry.h - -// start catch_interfaces_testcase.h - -#include - -namespace Catch { - - class TestSpec; - - struct ITestInvoker { - virtual void invoke () const = 0; - virtual ~ITestInvoker(); - }; - - class TestCase; - struct IConfig; - - struct ITestCaseRegistry { - virtual ~ITestCaseRegistry(); - virtual std::vector const& getAllTests() const = 0; - virtual std::vector const& getAllTestsSorted( IConfig const& config ) const = 0; - }; - - bool isThrowSafe( TestCase const& testCase, IConfig const& config ); - bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ); - std::vector filterTests( std::vector const& testCases, TestSpec const& testSpec, IConfig const& config ); - std::vector const& getAllTestCasesSorted( IConfig const& config ); - -} - -// end catch_interfaces_testcase.h -// start catch_stringref.h - -#include -#include -#include -#include - -namespace Catch { - - /// A non-owning string class (similar to the forthcoming std::string_view) - /// Note that, because a StringRef may be a substring of another string, - /// it may not be null terminated. - class StringRef { - public: - using size_type = std::size_t; - using const_iterator = const char*; - - private: - static constexpr char const* const s_empty = ""; - - char const* m_start = s_empty; - size_type m_size = 0; - - public: // construction - constexpr StringRef() noexcept = default; - - StringRef( char const* rawChars ) noexcept; - - constexpr StringRef( char const* rawChars, size_type size ) noexcept - : m_start( rawChars ), - m_size( size ) - {} - - StringRef( std::string const& stdString ) noexcept - : m_start( stdString.c_str() ), - m_size( stdString.size() ) - {} - - explicit operator std::string() const { - return std::string(m_start, m_size); - } - - public: // operators - auto operator == ( StringRef const& other ) const noexcept -> bool; - auto operator != (StringRef const& other) const noexcept -> bool { - return !(*this == other); - } - - auto operator[] ( size_type index ) const noexcept -> char { - assert(index < m_size); - return m_start[index]; - } - - public: // named queries - constexpr auto empty() const noexcept -> bool { - return m_size == 0; - } - constexpr auto size() const noexcept -> size_type { - return m_size; - } - - // Returns the current start pointer. If the StringRef is not - // null-terminated, throws std::domain_exception - auto c_str() const -> char const*; - - public: // substrings and searches - // Returns a substring of [start, start + length). - // If start + length > size(), then the substring is [start, size()). - // If start > size(), then the substring is empty. - auto substr( size_type start, size_type length ) const noexcept -> StringRef; - - // Returns the current start pointer. May not be null-terminated. - auto data() const noexcept -> char const*; - - constexpr auto isNullTerminated() const noexcept -> bool { - return m_start[m_size] == '\0'; - } - - public: // iterators - constexpr const_iterator begin() const { return m_start; } - constexpr const_iterator end() const { return m_start + m_size; } - }; - - auto operator += ( std::string& lhs, StringRef const& sr ) -> std::string&; - auto operator << ( std::ostream& os, StringRef const& sr ) -> std::ostream&; - - constexpr auto operator "" _sr( char const* rawChars, std::size_t size ) noexcept -> StringRef { - return StringRef( rawChars, size ); - } -} // namespace Catch - -constexpr auto operator "" _catch_sr( char const* rawChars, std::size_t size ) noexcept -> Catch::StringRef { - return Catch::StringRef( rawChars, size ); -} - -// end catch_stringref.h -// start catch_preprocessor.hpp - - -#define CATCH_RECURSION_LEVEL0(...) __VA_ARGS__ -#define CATCH_RECURSION_LEVEL1(...) CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(__VA_ARGS__))) -#define CATCH_RECURSION_LEVEL2(...) CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(__VA_ARGS__))) -#define CATCH_RECURSION_LEVEL3(...) CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(__VA_ARGS__))) -#define CATCH_RECURSION_LEVEL4(...) CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(__VA_ARGS__))) -#define CATCH_RECURSION_LEVEL5(...) CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(__VA_ARGS__))) - -#ifdef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -#define INTERNAL_CATCH_EXPAND_VARGS(...) __VA_ARGS__ -// MSVC needs more evaluations -#define CATCH_RECURSION_LEVEL6(...) CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(__VA_ARGS__))) -#define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL6(CATCH_RECURSION_LEVEL6(__VA_ARGS__)) -#else -#define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL5(__VA_ARGS__) -#endif - -#define CATCH_REC_END(...) -#define CATCH_REC_OUT - -#define CATCH_EMPTY() -#define CATCH_DEFER(id) id CATCH_EMPTY() - -#define CATCH_REC_GET_END2() 0, CATCH_REC_END -#define CATCH_REC_GET_END1(...) CATCH_REC_GET_END2 -#define CATCH_REC_GET_END(...) CATCH_REC_GET_END1 -#define CATCH_REC_NEXT0(test, next, ...) next CATCH_REC_OUT -#define CATCH_REC_NEXT1(test, next) CATCH_DEFER ( CATCH_REC_NEXT0 ) ( test, next, 0) -#define CATCH_REC_NEXT(test, next) CATCH_REC_NEXT1(CATCH_REC_GET_END test, next) - -#define CATCH_REC_LIST0(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ ) -#define CATCH_REC_LIST1(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0) ) ( f, peek, __VA_ARGS__ ) -#define CATCH_REC_LIST2(f, x, peek, ...) f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ ) - -#define CATCH_REC_LIST0_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ ) -#define CATCH_REC_LIST1_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0_UD) ) ( f, userdata, peek, __VA_ARGS__ ) -#define CATCH_REC_LIST2_UD(f, userdata, x, peek, ...) f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ ) - -// Applies the function macro `f` to each of the remaining parameters, inserts commas between the results, -// and passes userdata as the first parameter to each invocation, -// e.g. CATCH_REC_LIST_UD(f, x, a, b, c) evaluates to f(x, a), f(x, b), f(x, c) -#define CATCH_REC_LIST_UD(f, userdata, ...) CATCH_RECURSE(CATCH_REC_LIST2_UD(f, userdata, __VA_ARGS__, ()()(), ()()(), ()()(), 0)) - -#define CATCH_REC_LIST(f, ...) CATCH_RECURSE(CATCH_REC_LIST2(f, __VA_ARGS__, ()()(), ()()(), ()()(), 0)) - -#define INTERNAL_CATCH_EXPAND1(param) INTERNAL_CATCH_EXPAND2(param) -#define INTERNAL_CATCH_EXPAND2(...) INTERNAL_CATCH_NO## __VA_ARGS__ -#define INTERNAL_CATCH_DEF(...) INTERNAL_CATCH_DEF __VA_ARGS__ -#define INTERNAL_CATCH_NOINTERNAL_CATCH_DEF -#define INTERNAL_CATCH_STRINGIZE(...) INTERNAL_CATCH_STRINGIZE2(__VA_ARGS__) -#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -#define INTERNAL_CATCH_STRINGIZE2(...) #__VA_ARGS__ -#define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) -#else -// MSVC is adding extra space and needs another indirection to expand INTERNAL_CATCH_NOINTERNAL_CATCH_DEF -#define INTERNAL_CATCH_STRINGIZE2(...) INTERNAL_CATCH_STRINGIZE3(__VA_ARGS__) -#define INTERNAL_CATCH_STRINGIZE3(...) #__VA_ARGS__ -#define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) (INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) + 1) -#endif - -#define INTERNAL_CATCH_MAKE_NAMESPACE2(...) ns_##__VA_ARGS__ -#define INTERNAL_CATCH_MAKE_NAMESPACE(name) INTERNAL_CATCH_MAKE_NAMESPACE2(name) - -#define INTERNAL_CATCH_REMOVE_PARENS(...) INTERNAL_CATCH_EXPAND1(INTERNAL_CATCH_DEF __VA_ARGS__) - -#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR -#define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) decltype(get_wrapper()) -#define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__)) -#else -#define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) INTERNAL_CATCH_EXPAND_VARGS(decltype(get_wrapper())) -#define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__))) -#endif - -#define INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(...)\ - CATCH_REC_LIST(INTERNAL_CATCH_MAKE_TYPE_LIST,__VA_ARGS__) - -#define INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_0) INTERNAL_CATCH_REMOVE_PARENS(_0) -#define INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_0, _1) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_1) -#define INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_0, _1, _2) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_1, _2) -#define INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_0, _1, _2, _3) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_1, _2, _3) -#define INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_0, _1, _2, _3, _4) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_1, _2, _3, _4) -#define INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_0, _1, _2, _3, _4, _5) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_1, _2, _3, _4, _5) -#define INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_0, _1, _2, _3, _4, _5, _6) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_1, _2, _3, _4, _5, _6) -#define INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_0, _1, _2, _3, _4, _5, _6, _7) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_1, _2, _3, _4, _5, _6, _7) -#define INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_1, _2, _3, _4, _5, _6, _7, _8) -#define INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9) -#define INTERNAL_CATCH_REMOVE_PARENS_11_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10) - -#define INTERNAL_CATCH_VA_NARGS_IMPL(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N - -#define INTERNAL_CATCH_TYPE_GEN\ - template struct TypeList {};\ - template\ - constexpr auto get_wrapper() noexcept -> TypeList { return {}; }\ - template class...> struct TemplateTypeList{};\ - template class...Cs>\ - constexpr auto get_wrapper() noexcept -> TemplateTypeList { return {}; }\ - template\ - struct append;\ - template\ - struct rewrap;\ - template class, typename...>\ - struct create;\ - template class, typename>\ - struct convert;\ - \ - template \ - struct append { using type = T; };\ - template< template class L1, typename...E1, template class L2, typename...E2, typename...Rest>\ - struct append, L2, Rest...> { using type = typename append, Rest...>::type; };\ - template< template class L1, typename...E1, typename...Rest>\ - struct append, TypeList, Rest...> { using type = L1; };\ - \ - template< template class Container, template class List, typename...elems>\ - struct rewrap, List> { using type = TypeList>; };\ - template< template class Container, template class List, class...Elems, typename...Elements>\ - struct rewrap, List, Elements...> { using type = typename append>, typename rewrap, Elements...>::type>::type; };\ - \ - template