diff mbox series

[AUH] safec: upgrading to 31082020 FAILED

Message ID 0101018b96bf0084-04b60bc0-1a95-4074-bb0a-ccfcb6833ea1-000000@us-west-2.amazonses.com
State New
Headers show
Series [AUH] safec: upgrading to 31082020 FAILED | expand

Commit Message

auh@yoctoproject.org Nov. 3, 2023, 7:53 p.m. UTC
Hello,

this email is a notification from the Auto Upgrade Helper
that the automatic attempt to upgrade the recipe *safec* to *31082020* has Failed(do_compile).

Detailed error information:

do_compile failed



Next steps:
    - apply the patch: git am 0001-safec-upgrade-3.7.1-31082020.patch
    - check the changes to upstream patches and summarize them in the commit message,
    - compile an image that contains the package
    - perform some basic sanity tests
    - amend the patch and sign it off: git commit -s --reset-author --amend
    - send it to the appropriate mailing list

Alternatively, if you believe the recipe should not be upgraded at this time,
you can fill RECIPE_NO_UPDATE_REASON in respective recipe file so that
automatic upgrades would no longer be attempted.

Please review the attached files for further information and build/update failures.
Any problem please file a bug at https://bugzilla.yoctoproject.org/enter_bug.cgi?product=Automated%20Update%20Handler

Regards,
The Upgrade Helper

-- >8 --
From 3d65cdd2681865eac05e205f9a40c233fe0f0bc5 Mon Sep 17 00:00:00 2001
From: Upgrade Helper <auh@yoctoproject.org>
Date: Fri, 3 Nov 2023 18:15:47 +0000
Subject: [PATCH] safec: upgrade 3.7.1 -> 31082020

---
 ...an-improved-skip-_chk-add-public-API.patch |  2396 ++++
 ...002-man-fix-various-doxygen-warnings.patch |   438 +
 .../safec/0003-v02092020-3.6.0-release.patch  |    24 +
 ...004-drone-no-fedora-modular-on-arm32.patch |    34 +
 .../0005-document-new-CI-s-tested-archs.patch |    32 +
 .../0006-man-improved-s-n-printf_s.patch      |    42 +
 ..._set-remove-duplicate-MEMORY_BARRIER.patch |    31 +
 ...d-mem_prim_set-test-without-MEMORY_B.patch |   101 +
 ..._memset_s-proper-timer-linearization.patch |   175 +
 ...t-perf-functions-into-perf_private.h.patch |   581 +
 .../safec/0011-.gitgnore-new-files.patch      |    30 +
 ...-perf-fix-aarch64-and-add-more-archs.patch |    97 +
 .../0013-add-support-banner-and-link.patch    |  2912 +++++
 .../0014-add-rst-and-md-in-parallel.patch     |   335 +
 .../safec/0015-generate-README.rst.patch      |   917 ++
 .../0016-travis-disable-unfree-osx.patch      |    31 +
 ...e-NDEBUG-only-if-not-already-defined.patch |    24 +
 ...ic-versioning-3.7-change-PACKAGE-nam.patch |   254 +
 .../safec/0019-update-freebsd-smoker.patch    |    28 +
 .../0020-fix-mingw-keyring-mess-again.patch   |    44 +
 ...ll-wchar-manpages-with-disable-wchar.patch |   163 +
 .../0022-kernel-fix-for-time64_t-only.patch   |    24 +
 ...23-configure-replace-obsolute-macros.patch |    82 +
 .../safec/safec/0024-add-GH-Actions.patch     |   151 +
 ...25-avoid-macro-redefinition-warnings.patch |    60 +
 .../safec/safec/0026-add-stpcpy_s.patch       |   585 +
 ...LOW-being-an-enum-value-rather-than-.patch |    31 +
 .../safec/safec/0028-stpcpy_s-doc-typo.patch  |    22 +
 ...29-avoid-macro-redefinition-warnings.patch |    21 +
 ...0030-stpcpy_s-rename-err-arg-to-errp.patch |   145 +
 .../safec/safec/0031-add-stpncpy_s.patch      |   665 +
 ...t-probe-for-wchar-with-disable-wchar.patch |   185 +
 .../safec/safec/0033-doxyfile-update.patch    |    64 +
 ...std-c-11-already-defines-_GNU_SOURCE.patch |   154 +
 ...-mingw-fixes-disable-p_memset_s-test.patch |    89 +
 .../safec/0036-fixup-smoker-for-mingw.patch   |   106 +
 .../0037-fix-sprintf_s-with-arg-GH-97.patch   |    62 +
 .../0038-WIP-start-with-our-own-printf.patch  |  1343 ++
 ...printf_s-catch-s-ESNULLP-and-ESNOSPC.patch |   406 +
 .../safec/0040-new-safe-f-printf_s-also.patch |   270 +
 ...1-printf_s-catch-more-ESNOSPC-errors.patch |   142 +
 .../safec/0042-fix-all-printf_s-tests.patch   |   420 +
 ...rename-_vsnprintf_s-to-__vsnprintf_s.patch |    76 +
 ...disable-fixup-some-io-for-the-kernel.patch |    37 +
 ...ntf_s-use-the-new-secure-vsnprintf_s.patch |   151 +
 ...0046-doc-fix-retval-doxygen-warnings.patch |   101 +
 .../0047-add-ESNOSPC-check-to-qsort_s.patch   |    94 +
 ...-bsearch_s-error-messages-to-qsort_s.patch |    96 +
 ...-prefix-for-internal-printf-function.patch |   572 +
 ...-printf-add-name-of-failing-function.patch |   499 +
 ...tly-reject-illegal-format-specifiers.patch |    64 +
 ...rint-to-closed-stream-external-errno.patch |   365 +
 ...053-Add-Changelog-for-upcoming-3.7.0.patch |    31 +
 ..._vfprintf_s-test-more-fprintf-errors.patch |   223 +
 ...0055-fix-compilation-with-c-std-c-11.patch |    22 +
 .../safec/safec/0056-fix-t_vfprintf_s.patch   |   287 +
 .../0057-update-coverages-smoke.sh.patch      |   134 +
 ...configure-more-required-safec-CFLAGS.patch |    36 +
 ...gure.ac-add-disable-hardening-option.patch |    67 +
 .../safec/0060-ChangeLog-for-PR-107.patch     |    23 +
 .../safec/0061-fixup-mingw-GH-action.patch    |    57 +
 ...-clash-protection-on-macOS-clang-yet.patch |    30 +
 .../safec/safec/0063-minor-docs-m4.patch      |    46 +
 ...-getenv_s-allow-dest-NULL-and-dmax-0.patch |   158 +
 .../safec/0065-fixup-header-includes.patch    |   104 +
 .../safec/0066-fixup-test_towfc_s-a-bit.patch |    34 +
 ...7-export-SAFECLIB_UNICODE_VERSION-13.patch |   152 +
 .../safec/0068-update-to-Unicode-14.patch     | 10124 ++++++++++++++++
 ...t-stack-addresses-detected-by-gcc-12.patch |    41 +
 ...don-t-fail-some-tests-if-wget-failed.patch |    97 +
 .../safec/safec/0071-Release-3.7.patch        |   207 +
 .../0072-post-release-fixups-vVERSION.patch   |    30 +
 .../0073-appveyor-disable-failing-mingw.patch |    37 +
 .../safec/0074-drone-upgrade-a-bit.patch      |    32 +
 .../safec/0075-powerpc-compilation-fix.patch  |    23 +
 .../safec/safec/0076-Release-3.7.1.patch      |    52 +
 .../{safec_3.7.1.bb => safec_31082020.bb}     |    78 +-
 77 files changed, 27895 insertions(+), 1 deletion(-)
 create mode 100644 meta-oe/recipes-core/safec/safec/0001-man-improved-skip-_chk-add-public-API.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0002-man-fix-various-doxygen-warnings.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0003-v02092020-3.6.0-release.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0004-drone-no-fedora-modular-on-arm32.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0005-document-new-CI-s-tested-archs.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0006-man-improved-s-n-printf_s.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0007-mem_prim_set-remove-duplicate-MEMORY_BARRIER.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0008-perf_memset_s-add-mem_prim_set-test-without-MEMORY_B.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0009-improve-perf_memset_s-proper-timer-linearization.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0010-extract-perf-functions-into-perf_private.h.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0011-.gitgnore-new-files.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0012-perf-fix-aarch64-and-add-more-archs.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0013-add-support-banner-and-link.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0014-add-rst-and-md-in-parallel.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0015-generate-README.rst.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0016-travis-disable-unfree-osx.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0017-Define-NDEBUG-only-if-not-already-defined.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0018-switch-to-semantic-versioning-3.7-change-PACKAGE-nam.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0019-update-freebsd-smoker.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0020-fix-mingw-keyring-mess-again.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0021-Dont-install-wchar-manpages-with-disable-wchar.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0022-kernel-fix-for-time64_t-only.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0023-configure-replace-obsolute-macros.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0024-add-GH-Actions.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0025-avoid-macro-redefinition-warnings.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0026-add-stpcpy_s.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0027-Cope-with-EOVERFLOW-being-an-enum-value-rather-than-.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0028-stpcpy_s-doc-typo.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0029-avoid-macro-redefinition-warnings.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0030-stpcpy_s-rename-err-arg-to-errp.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0031-add-stpncpy_s.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0032-configure-don-t-probe-for-wchar-with-disable-wchar.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0033-doxyfile-update.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0034-gcc-std-c-11-already-defines-_GNU_SOURCE.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0035-mingw-fixes-disable-p_memset_s-test.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0036-fixup-smoker-for-mingw.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0037-fix-sprintf_s-with-arg-GH-97.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0038-WIP-start-with-our-own-printf.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0039-vsnprintf_s-catch-s-ESNULLP-and-ESNOSPC.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0040-new-safe-f-printf_s-also.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0041-printf_s-catch-more-ESNOSPC-errors.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0042-fix-all-printf_s-tests.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0043-rename-_vsnprintf_s-to-__vsnprintf_s.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0044-disable-fixup-some-io-for-the-kernel.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0045-let-vfprintf_s-use-the-new-secure-vsnprintf_s.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0046-doc-fix-retval-doxygen-warnings.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0047-add-ESNOSPC-check-to-qsort_s.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0048-adjust-bsearch_s-error-messages-to-qsort_s.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0049-add-safec_-prefix-for-internal-printf-function.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0050-printf-add-name-of-failing-function.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0051-printf-correctly-reject-illegal-format-specifiers.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0052-printf-catch-print-to-closed-stream-external-errno.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0053-Add-Changelog-for-upcoming-3.7.0.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0054-WIP-test_vfprintf_s-test-more-fprintf-errors.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0055-fix-compilation-with-c-std-c-11.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0056-fix-t_vfprintf_s.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0057-update-coverages-smoke.sh.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0058-configure-more-required-safec-CFLAGS.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0059-configure.ac-add-disable-hardening-option.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0060-ChangeLog-for-PR-107.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0061-fixup-mingw-GH-action.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0062-no-stack-clash-protection-on-macOS-clang-yet.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0063-minor-docs-m4.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0064-getenv_s-allow-dest-NULL-and-dmax-0.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0065-fixup-header-includes.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0066-fixup-test_towfc_s-a-bit.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0067-export-SAFECLIB_UNICODE_VERSION-13.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0068-update-to-Unicode-14.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0069-fix-qsort-stack-addresses-detected-by-gcc-12.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0070-don-t-fail-some-tests-if-wget-failed.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0071-Release-3.7.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0072-post-release-fixups-vVERSION.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0073-appveyor-disable-failing-mingw.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0074-drone-upgrade-a-bit.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0075-powerpc-compilation-fix.patch
 create mode 100644 meta-oe/recipes-core/safec/safec/0076-Release-3.7.1.patch
 rename meta-oe/recipes-core/safec/{safec_3.7.1.bb => safec_31082020.bb} (10%)
diff mbox series

Patch

diff --git a/meta-oe/recipes-core/safec/safec/0001-man-improved-skip-_chk-add-public-API.patch b/meta-oe/recipes-core/safec/safec/0001-man-improved-skip-_chk-add-public-API.patch
new file mode 100644
index 000000000..e3e3a272f
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0001-man-improved-skip-_chk-add-public-API.patch
@@ -0,0 +1,2396 @@ 
+From d6bb3ff55d704d13e118675a1059c76ead12e636 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Tue, 1 Sep 2020 10:56:05 +0200
+Subject: [PATCH] man improved: skip _chk, add public API
+
+Skip the _chk functions, only document the public macro API.
+See GH #33
+---
+ Doxyfile.in                      |  6 ++---
+ src/extmem/memccpy_s.c           |  8 ++++++-
+ src/extmem/memchr_s.c            |  8 ++++++-
+ src/extmem/memcmp16_s.c          |  8 ++++++-
+ src/extmem/memcmp32_s.c          |  8 ++++++-
+ src/extmem/memcmp_s.c            |  8 ++++++-
+ src/extmem/memcpy16_s.c          |  8 ++++++-
+ src/extmem/memcpy32_s.c          |  8 ++++++-
+ src/extmem/memmove16_s.c         |  7 +++++-
+ src/extmem/memmove32_s.c         |  7 +++++-
+ src/extmem/memrchr_s.c           |  8 ++++++-
+ src/extmem/memset16_s.c          |  7 +++++-
+ src/extmem/memset32_s.c          |  7 +++++-
+ src/extmem/memzero16_s.c         |  7 +++++-
+ src/extmem/memzero32_s.c         |  7 +++++-
+ src/extmem/memzero_s.c           |  7 +++++-
+ src/extmem/timingsafe_bcmp.c     |  7 +++++-
+ src/extmem/timingsafe_memcmp.c   |  7 +++++-
+ src/extstr/strcasecmp_s.c        |  8 ++++++-
+ src/extstr/strcasestr_s.c        |  8 ++++++-
+ src/extstr/strchr_s.c            |  8 ++++++-
+ src/extstr/strcmp_s.c            |  8 ++++++-
+ src/extstr/strcmpfld_s.c         |  8 ++++++-
+ src/extstr/strcoll_s.c           |  8 ++++++-
+ src/extstr/strcpyfld_s.c         |  7 +++++-
+ src/extstr/strcpyfldin_s.c       |  7 +++++-
+ src/extstr/strcpyfldout_s.c      |  7 +++++-
+ src/extstr/strcspn_s.c           |  8 ++++++-
+ src/extstr/strfirstchar_s.c      |  7 +++++-
+ src/extstr/strfirstdiff_s.c      |  8 ++++++-
+ src/extstr/strfirstsame_s.c      |  9 +++++++-
+ src/extstr/strisalphanumeric_s.c | 10 ++++++--
+ src/extstr/strisascii_s.c        |  7 +++++-
+ src/extstr/strisdigit_s.c        |  7 +++++-
+ src/extstr/strishex_s.c          |  7 +++++-
+ src/extstr/strislowercase_s.c    |  7 +++++-
+ src/extstr/strismixedcase_s.c    |  7 +++++-
+ src/extstr/strispassword_s.c     |  7 +++++-
+ src/extstr/strisuppercase_s.c    |  7 +++++-
+ src/extstr/strlastchar_s.c       |  7 +++++-
+ src/extstr/strlastdiff_s.c       |  8 ++++++-
+ src/extstr/strlastsame_s.c       |  8 ++++++-
+ src/extstr/strljustify_s.c       |  7 +++++-
+ src/extstr/strnatcmp_s.c         |  8 ++++++-
+ src/extstr/strnset_s.c           |  9 ++++++--
+ src/extstr/strnterminate_s.c     |  7 +++++-
+ src/extstr/strpbrk_s.c           | 10 +++++---
+ src/extstr/strprefix_s.c         |  7 +++++-
+ src/extstr/strrchr_s.c           |  7 +++++-
+ src/extstr/strremovews_s.c       |  7 +++++-
+ src/extstr/strset_s.c            |  7 +++++-
+ src/extstr/strspn_s.c            |  8 ++++++-
+ src/extstr/strstr_s.c            |  9 +++++++-
+ src/extstr/strtolowercase_s.c    |  7 +++++-
+ src/extstr/strtouppercase_s.c    |  7 +++++-
+ src/extstr/strzero_s.c           |  8 ++++++-
+ src/extwchar/towfc_s.c           |  9 ++++++--
+ src/extwchar/wcscmp_s.c          |  9 +++++++-
+ src/extwchar/wcscoll_s.c         | 10 ++++++--
+ src/extwchar/wcsfc_s.c           |  9 ++++++--
+ src/extwchar/wcsicmp_s.c         |  9 +++++++-
+ src/extwchar/wcslwr_s.c          |  8 +++++--
+ src/extwchar/wcsnatcmp_s.c       |  9 +++++++-
+ src/extwchar/wcsncmp_s.c         | 10 ++++++--
+ src/extwchar/wcsnorm_s.c         | 39 ++++++++++++++++++++++++++++----
+ src/extwchar/wcsnset_s.c         |  9 ++++++--
+ src/extwchar/wcsset_s.c          |  9 ++++++--
+ src/extwchar/wcsstr_s.c          | 10 ++++++--
+ src/extwchar/wcsupr_s.c          |  8 +++++--
+ src/extwchar/wmemcmp_s.c         |  8 ++++++-
+ src/io/gets_s.c                  |  7 +++++-
+ src/io/tmpnam_s.c                |  7 +++++-
+ src/mem/memcpy_s.c               |  8 ++++++-
+ src/mem/memmove_s.c              |  7 +++++-
+ src/mem/memset_s.c               |  7 +++++-
+ src/misc/bsearch_s.c             | 10 +++++++-
+ src/misc/qsort_s.c               | 10 +++++++-
+ src/os/asctime_s.c               |  7 +++++-
+ src/os/ctime_s.c                 |  7 +++++-
+ src/os/getenv_s.c                |  8 ++++++-
+ src/os/gmtime_s.c                |  4 ++--
+ src/str/strcat_s.c               |  9 +++++++-
+ src/str/strcpy_s.c               |  7 +++++-
+ src/str/strerror_s.c             |  8 +++++--
+ src/str/strncat_s.c              |  8 ++++++-
+ src/str/strncpy_s.c              |  8 ++++++-
+ src/str/strnlen_s.c              |  7 +++++-
+ src/str/strtok_s.c               |  9 ++++++--
+ src/str/vsnprintf_s.c            |  9 ++++++--
+ src/str/vsprintf_s.c             |  8 ++++++-
+ src/wchar/mbsrtowcs_s.c          | 11 +++++++--
+ src/wchar/mbstowcs_s.c           |  9 +++++++-
+ src/wchar/snwprintf_s.c          |  6 +++--
+ src/wchar/swprintf_s.c           |  6 +++--
+ src/wchar/vsnwprintf_s.c         |  9 ++++++--
+ src/wchar/vswprintf_s.c          |  9 ++++++--
+ src/wchar/wcrtomb_s.c            |  9 ++++++--
+ src/wchar/wcscat_s.c             |  7 +++++-
+ src/wchar/wcscpy_s.c             | 11 +++++----
+ src/wchar/wcsncat_s.c            |  9 ++++++--
+ src/wchar/wcsncpy_s.c            |  9 ++++++--
+ src/wchar/wcsnlen_s.c            |  8 +++++--
+ src/wchar/wcsrtombs_s.c          | 10 ++++++--
+ src/wchar/wcstok_s.c             |  9 ++++++--
+ src/wchar/wcstombs_s.c           |  9 +++++++-
+ src/wchar/wctomb_s.c             |  8 ++++++-
+ src/wchar/wmemcpy_s.c            |  8 +++++--
+ src/wchar/wmemmove_s.c           |  7 +++++-
+ 108 files changed, 743 insertions(+), 146 deletions(-)
+
+diff --git a/Doxyfile.in b/Doxyfile.in
+index a93fee14..57220b52 100644
+--- a/Doxyfile.in
++++ b/Doxyfile.in
+@@ -38,7 +38,7 @@ INHERIT_DOCS           = YES
+ SEPARATE_MEMBER_PAGES  = NO
+ TAB_SIZE               = 4
+ ALIASES                =
+-TCL_SUBST              =
++#TCL_SUBST              =
+ OPTIMIZE_OUTPUT_FOR_C  = YES
+ OPTIMIZE_OUTPUT_JAVA   = NO
+ OPTIMIZE_FOR_FORTRAN   = NO
+@@ -290,12 +290,12 @@ GENERATE_TAGFILE       =
+ ALLEXTERNALS           = NO
+ EXTERNAL_GROUPS        = YES
+ EXTERNAL_PAGES         = YES
+-PERL_PATH              = /usr/bin/perl
++#PERL_PATH              = /usr/bin/perl
+ #---------------------------------------------------------------------------
+ # Configuration options related to the dot tool
+ #---------------------------------------------------------------------------
+ CLASS_DIAGRAMS         = YES
+-MSCGEN_PATH            =
++#MSCGEN_PATH            =
+ DIA_PATH               =
+ HIDE_UNDOC_RELATIONS   = YES
+ HAVE_DOT               = YES
+diff --git a/src/extmem/memccpy_s.c b/src/extmem/memccpy_s.c
+index 4766c94c..32ef5b7c 100644
+--- a/src/extmem/memccpy_s.c
++++ b/src/extmem/memccpy_s.c
+@@ -80,9 +80,15 @@
+  * @see
+  *    memcpy_s(), strncpy_s()
+  */
++#ifdef FOR_DOXYGEN
++errno_t memccpy_s(void *restrict dest, rsize_t dmax,
++                  const void *restrict src, int c, rsize_t n)
++#else
+ EXPORT errno_t _memccpy_s_chk(void *restrict dest, rsize_t dmax,
+                               const void *restrict src, int c, rsize_t n,
+-                              const size_t destbos, const size_t srcbos) {
++                              const size_t destbos, const size_t srcbos)
++#endif
++{
+     uint8_t *dp;
+     const uint8_t *sp;
+     rsize_t orig_dmax = dmax;
+diff --git a/src/extmem/memchr_s.c b/src/extmem/memchr_s.c
+index e353bc35..91b6265c 100644
+--- a/src/extmem/memchr_s.c
++++ b/src/extmem/memchr_s.c
+@@ -66,9 +66,15 @@
+  *    strchr_s(), strspn_s(), strcspn_s(), strpbrk_s(), strstr_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t memchr_s(const void *restrict dest, rsize_t dmax,
++                 const int ch, void **result)
++#else
+ EXPORT errno_t _memchr_s_chk(const void *restrict dest, rsize_t dmax,
+                              const int ch, void **result,
+-                             const size_t destbos) {
++                             const size_t destbos)
++#endif
++{
+     if (unlikely(result == NULL)) {
+         invoke_safe_mem_constraint_handler("memchr_s: result is null",
+                                            (void *)dest, ESNULLP);
+diff --git a/src/extmem/memcmp16_s.c b/src/extmem/memcmp16_s.c
+index 997a17fd..73385817 100644
+--- a/src/extmem/memcmp16_s.c
++++ b/src/extmem/memcmp16_s.c
+@@ -80,9 +80,15 @@
+  *
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t memcmp16_s(const uint16_t *dest, rsize_t dlen,
++                   const uint16_t *src, rsize_t slen, int *diff)
++#else
+ EXPORT errno_t _memcmp16_s_chk(const uint16_t *dest, rsize_t dlen,
+                                const uint16_t *src, rsize_t slen, int *diff,
+-                               const size_t destbos, const size_t srcbos) {
++                               const size_t destbos, const size_t srcbos)
++#endif
++{
+     size_t dmax; /* in bytes */
+     size_t smax; /* in bytes */
+ 
+diff --git a/src/extmem/memcmp32_s.c b/src/extmem/memcmp32_s.c
+index 2cb3120b..69702625 100644
+--- a/src/extmem/memcmp32_s.c
++++ b/src/extmem/memcmp32_s.c
+@@ -79,9 +79,15 @@
+  *    memcmp_s(), memcmp16_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t memcmp32_s(const uint32_t *dest, rsize_t dlen,
++                   const uint32_t *src, rsize_t slen, int *diff)
++#else
+ EXPORT errno_t _memcmp32_s_chk(const uint32_t *dest, rsize_t dlen,
+                                const uint32_t *src, rsize_t slen, int *diff,
+-                               const size_t destbos, const size_t srcbos) {
++                               const size_t destbos, const size_t srcbos)
++#endif
++{
+     uint32_t smax; /* in bytes */
+     uint32_t dmax; /* in bytes */
+ 
+diff --git a/src/extmem/memcmp_s.c b/src/extmem/memcmp_s.c
+index 18aa75c2..78fef348 100644
+--- a/src/extmem/memcmp_s.c
++++ b/src/extmem/memcmp_s.c
+@@ -80,9 +80,15 @@
+  *
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t memcmp_s(const void *dest, rsize_t dmax, const void *src,
++                 rsize_t slen, int *diff)
++#else
+ EXPORT errno_t _memcmp_s_chk(const void *dest, rsize_t dmax, const void *src,
+                              rsize_t slen, int *diff, const size_t destbos,
+-                             const size_t srcbos) {
++                             const size_t srcbos)
++#endif
++{
+     const uint8_t *dp;
+     const uint8_t *sp;
+ 
+diff --git a/src/extmem/memcpy16_s.c b/src/extmem/memcpy16_s.c
+index 2d383b3c..6aefffbb 100644
+--- a/src/extmem/memcpy16_s.c
++++ b/src/extmem/memcpy16_s.c
+@@ -81,9 +81,15 @@
+  *    wmemcpy_s(), memcpy_s(), memcpy32_s(), wmemmove_s(), memmove16_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t memcpy16_s(uint16_t *dest, rsize_t dmax,
++                   const uint16_t *src, rsize_t slen)
++#else
+ EXPORT errno_t _memcpy16_s_chk(uint16_t *dest, rsize_t dmax,
+                                const uint16_t *src, rsize_t slen,
+-                               const size_t destbos, const size_t srcbos) {
++                               const size_t destbos, const size_t srcbos)
++#endif
++{
+     size_t smax; /* in bytes */
+ 
+     if (unlikely(slen == 0)) { /* Since C11 slen=0 is allowed */
+diff --git a/src/extmem/memcpy32_s.c b/src/extmem/memcpy32_s.c
+index b87230a5..4c6ebcad 100644
+--- a/src/extmem/memcpy32_s.c
++++ b/src/extmem/memcpy32_s.c
+@@ -81,9 +81,15 @@
+  *    memcpy_s(), memcpy16_s(), memmove_s(), memmove16_s(), memmove32_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t memcpy32_s(uint32_t *dest, rsize_t dmax,
++                   const uint32_t *src, rsize_t slen)
++#else
+ EXPORT errno_t _memcpy32_s_chk(uint32_t *dest, rsize_t dmax,
+                                const uint32_t *src, rsize_t slen,
+-                               const size_t destbos, const size_t srcbos) {
++                               const size_t destbos, const size_t srcbos)
++#endif
++{
+     size_t smax; /* in bytes */
+ 
+     if (unlikely(slen == 0)) { /* Since C11 slen=0 is allowed */
+diff --git a/src/extmem/memmove16_s.c b/src/extmem/memmove16_s.c
+index d7bba397..c2a3449e 100644
+--- a/src/extmem/memmove16_s.c
++++ b/src/extmem/memmove16_s.c
+@@ -82,9 +82,14 @@
+  *    memmove_s(), memmove32_s(), memcpy_s(), memcpy16_s() memcpy32_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t memmove16_s(uint16_t *dest, rsize_t dmax, const uint16_t *src, rsize_t slen)
++#else
+ EXPORT errno_t _memmove16_s_chk(uint16_t *dest, rsize_t dmax,
+                                 const uint16_t *src, rsize_t slen,
+-                                const size_t destbos, const size_t srcbos) {
++                                const size_t destbos, const size_t srcbos)
++#endif
++{
+     size_t smax; /* in bytes */
+ 
+     if (unlikely(slen == 0)) { /* Since C11 slen=0 is allowed */
+diff --git a/src/extmem/memmove32_s.c b/src/extmem/memmove32_s.c
+index f7f7981f..2cc60c94 100644
+--- a/src/extmem/memmove32_s.c
++++ b/src/extmem/memmove32_s.c
+@@ -84,9 +84,14 @@
+  *    memmove_s(), memmove16_s(), memcpy_s(), memcpy16_s() memcpy32_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t memmove32_s(uint32_t *dest, rsize_t dmax, const uint32_t *src, rsize_t slen)
++#else
+ EXPORT errno_t _memmove32_s_chk(uint32_t *dest, rsize_t dmax,
+                                 const uint32_t *src, rsize_t slen,
+-                                const size_t destbos, const size_t srcbos) {
++                                const size_t destbos, const size_t srcbos)
++#endif
++{
+     size_t smax; /* in bytes */
+ 
+     if (unlikely(slen == 0)) { /* Since C11 slen=0 is allowed */
+diff --git a/src/extmem/memrchr_s.c b/src/extmem/memrchr_s.c
+index 8d10a7b9..2ffeabaa 100644
+--- a/src/extmem/memrchr_s.c
++++ b/src/extmem/memrchr_s.c
+@@ -76,9 +76,15 @@ extern void *memrchr(const void *, int, size_t);
+  *    memrchr_s(), strchr_s(), memchr_s(), strspn_s(), strstr_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t memrchr_s(const void *restrict dest, rsize_t dmax,
++                  const int ch, void **result)
++#else
+ EXPORT errno_t _memrchr_s_chk(const void *restrict dest, rsize_t dmax,
+                               const int ch, void **result,
+-                              const size_t destbos) {
++                              const size_t destbos)
++#endif
++{
+     if (unlikely(result == NULL)) {
+         invoke_safe_str_constraint_handler("memrchr_s: result is null", NULL,
+                                            ESNULLP);
+diff --git a/src/extmem/memset16_s.c b/src/extmem/memset16_s.c
+index 0437310a..1da0082b 100644
+--- a/src/extmem/memset16_s.c
++++ b/src/extmem/memset16_s.c
+@@ -76,8 +76,13 @@
+  *    memset_s(), memset32_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t memset16_s(uint16_t *dest, rsize_t dmax, uint16_t value, rsize_t n)
++#else
+ EXPORT errno_t _memset16_s_chk(uint16_t *dest, rsize_t dmax, uint16_t value,
+-                               rsize_t n, const size_t destbos) {
++                               rsize_t n, const size_t destbos)
++#endif
++{
+     errno_t err;
+ 
+     CHK_DEST_MEM_NULL("memset16_s")
+diff --git a/src/extmem/memset32_s.c b/src/extmem/memset32_s.c
+index f32e201f..11733cb2 100644
+--- a/src/extmem/memset32_s.c
++++ b/src/extmem/memset32_s.c
+@@ -76,8 +76,13 @@
+  *    memset_s(), memset16_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t memset32_s(uint32_t *dest, rsize_t dmax, uint32_t value, rsize_t n)
++#else
+ EXPORT errno_t _memset32_s_chk(uint32_t *dest, rsize_t dmax, uint32_t value,
+-                               rsize_t n, const size_t destbos) {
++                               rsize_t n, const size_t destbos)
++#endif
++{
+     errno_t err;
+ 
+     CHK_DEST_MEM_NULL("memset32_s")
+diff --git a/src/extmem/memzero16_s.c b/src/extmem/memzero16_s.c
+index a1d1ce42..3cf84097 100644
+--- a/src/extmem/memzero16_s.c
++++ b/src/extmem/memzero16_s.c
+@@ -66,8 +66,13 @@
+  *    memzero_s(), memzero32_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t memzero16_s(uint16_t *dest, rsize_t len)
++#else
+ EXPORT errno_t _memzero16_s_chk(uint16_t *dest, rsize_t len,
+-                                const size_t destbos) {
++                                const size_t destbos)
++#endif
++{
+     rsize_t dmax = len * 2;
+     CHK_DEST_MEM_NULL("memzero16_s")
+     CHK_DMAX_MEM_ZERO("memzero16_s")
+diff --git a/src/extmem/memzero32_s.c b/src/extmem/memzero32_s.c
+index 2a31a33e..7518412d 100644
+--- a/src/extmem/memzero32_s.c
++++ b/src/extmem/memzero32_s.c
+@@ -65,8 +65,13 @@
+  *    memzero_s(), memzero16_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t memzero32_s(uint32_t *dest, rsize_t len)
++#else
+ EXPORT errno_t _memzero32_s_chk(uint32_t *dest, rsize_t len,
+-                                const size_t destbos) {
++                                const size_t destbos)
++#endif
++{
+ 
+     rsize_t dmax = len * 4;
+     CHK_DEST_MEM_NULL("memzero32_s")
+diff --git a/src/extmem/memzero_s.c b/src/extmem/memzero_s.c
+index 20cb2784..b4b03ef8 100644
+--- a/src/extmem/memzero_s.c
++++ b/src/extmem/memzero_s.c
+@@ -73,7 +73,12 @@
+  *    memzero16_s(), memzero32_s()
+  *
+  */
+-EXPORT errno_t _memzero_s_chk(void *dest, rsize_t len, const size_t destbos) {
++#ifdef FOR_DOXYGEN
++errno_t memzero_s(void *dest, rsize_t len)
++#else
++EXPORT errno_t _memzero_s_chk(void *dest, rsize_t len, const size_t destbos)
++#endif
++{
+     rsize_t dmax = len;
+     CHK_DEST_MEM_NULL("memzero_s")
+     CHK_DMAX_MEM_ZERO("memzero_s")
+diff --git a/src/extmem/timingsafe_bcmp.c b/src/extmem/timingsafe_bcmp.c
+index b84cb377..15a8fd59 100644
+--- a/src/extmem/timingsafe_bcmp.c
++++ b/src/extmem/timingsafe_bcmp.c
+@@ -51,8 +51,13 @@
+  *
+  */
+ 
++#ifdef FOR_DOXYGEN
++int timingsafe_bcmp(const void *b1, const void *b2, size_t n)
++#else
+ EXPORT int _timingsafe_bcmp_chk(const void *b1, const void *b2, size_t n,
+-                                const size_t destbos, const size_t srcbos) {
++                                const size_t destbos, const size_t srcbos)
++#endif
++{
+     const unsigned char *p1 = (const unsigned char *)b1,
+                         *p2 = (const unsigned char *)b2;
+     int ret = 0;
+diff --git a/src/extmem/timingsafe_memcmp.c b/src/extmem/timingsafe_memcmp.c
+index 90c88937..dc1b8ee2 100644
+--- a/src/extmem/timingsafe_memcmp.c
++++ b/src/extmem/timingsafe_memcmp.c
+@@ -50,8 +50,13 @@
+  *    memcmp_s(), timingsafe_bcmp()
+  */
+ 
++#ifdef FOR_DOXYGEN
++int timingsafe_memcmp(const void *b1, const void *b2, size_t len)
++#else
+ EXPORT int _timingsafe_memcmp_chk(const void *b1, const void *b2, size_t len,
+-                                  const size_t destbos, const size_t srcbos) {
++                                  const size_t destbos, const size_t srcbos)
++#endif
++{
+     const unsigned char *p1 = (const unsigned char *)b1,
+                         *p2 = (const unsigned char *)b2;
+     size_t i;
+diff --git a/src/extstr/strcasecmp_s.c b/src/extstr/strcasecmp_s.c
+index 24061c6e..02c5a531 100644
+--- a/src/extstr/strcasecmp_s.c
++++ b/src/extstr/strcasecmp_s.c
+@@ -75,9 +75,15 @@
+  *    strcmp_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strcasecmp_s(const char *dest, rsize_t dmax,
++                     const char *src, int *resultp)
++#else
+ EXPORT errno_t _strcasecmp_s_chk(const char *dest, rsize_t dmax,
+                                  const char *src, int *resultp,
+-                                 const size_t destbos) {
++                                 const size_t destbos)
++#endif
++{
+     const unsigned char *udest = (const unsigned char *)dest;
+     const unsigned char *usrc = (const unsigned char *)src;
+     int result = 0;
+diff --git a/src/extstr/strcasestr_s.c b/src/extstr/strcasestr_s.c
+index b26bf6ed..705d85f3 100644
+--- a/src/extstr/strcasestr_s.c
++++ b/src/extstr/strcasestr_s.c
+@@ -72,9 +72,15 @@
+  *    strstr_s(), strprefix_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strcasestr_s(char *dest, rsize_t dmax, const char *src,
++                     rsize_t slen, char **substring)
++#else
+ EXPORT errno_t _strcasestr_s_chk(char *dest, rsize_t dmax, const char *src,
+                                  rsize_t slen, char **substring,
+-                                 const size_t destbos, const size_t srcbos) {
++                                 const size_t destbos, const size_t srcbos)
++#endif
++{
+     rsize_t len;
+     rsize_t dlen;
+     int i;
+diff --git a/src/extstr/strchr_s.c b/src/extstr/strchr_s.c
+index 9548ba02..2229d2a2 100644
+--- a/src/extstr/strchr_s.c
++++ b/src/extstr/strchr_s.c
+@@ -70,9 +70,15 @@
+  *    memchr_s(), strspn_s(), strcspn_s(), strpbrk_s(), strstr_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strchr_s(const char *restrict dest, rsize_t dmax,
++                 const int ch, char **restrict resultp)
++#else
+ EXPORT errno_t _strchr_s_chk(const char *restrict dest, rsize_t dmax,
+                              const int ch, char **restrict resultp,
+-                             const size_t destbos) {
++                             const size_t destbos)
++#endif
++{
+     CHK_SRC_NULL("strchr_s", resultp)
+     *resultp = NULL;
+ 
+diff --git a/src/extstr/strcmp_s.c b/src/extstr/strcmp_s.c
+index b87ca74b..f07659c8 100644
+--- a/src/extstr/strcmp_s.c
++++ b/src/extstr/strcmp_s.c
+@@ -74,9 +74,15 @@
+  *    strcasecmp_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strcmp_s(const char *dest, rsize_t dmax, const char *src,
++                 int *resultp)
++#else
+ EXPORT errno_t _strcmp_s_chk(const char *dest, rsize_t dmax, const char *src,
+                              int *resultp, const size_t destbos,
+-                             size_t srcbos) {
++                             size_t srcbos)
++#endif
++{
+     size_t slen;
+     CHK_SRC_NULL("strcmp_s", resultp)
+     *resultp = 0;
+diff --git a/src/extstr/strcmpfld_s.c b/src/extstr/strcmpfld_s.c
+index 5e81cf36..10bfe911 100644
+--- a/src/extstr/strcmpfld_s.c
++++ b/src/extstr/strcmpfld_s.c
+@@ -75,8 +75,14 @@
+  *    strcpyfld_s(), strcpyfldin_s(), strcpyfldout_s()
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t strcmpfld_s(const char *dest, rsize_t dmax, const char *src,
++                    int *resultp)
++#else
+ EXPORT errno_t _strcmpfld_s_chk(const char *dest, rsize_t dmax, const char *src,
+-                                int *resultp, const size_t destbos) {
++                                int *resultp, const size_t destbos)
++#endif
++{
+     CHK_SRC_NULL("strcmpfld_s", resultp)
+     *resultp = 0;
+ 
+diff --git a/src/extstr/strcoll_s.c b/src/extstr/strcoll_s.c
+index b9382d1a..2d0f713c 100644
+--- a/src/extstr/strcoll_s.c
++++ b/src/extstr/strcoll_s.c
+@@ -85,9 +85,15 @@
+  *    wcscoll_s(), strcmp_s(), strcasecmp_s()
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t strcoll_s(const char *restrict dest, rsize_t dmax,
++                  const char *restrict src, int *resultp)
++#else
+ EXPORT errno_t _strcoll_s_chk(const char *restrict dest, rsize_t dmax,
+                               const char *restrict src, int *resultp,
+-                              const size_t destbos) {
++                              const size_t destbos)
++#endif
++{
+     CHK_SRC_NULL("strcoll_s", resultp)
+     *resultp = 0;
+ 
+diff --git a/src/extstr/strcpyfld_s.c b/src/extstr/strcpyfld_s.c
+index 0500002b..c6983eb7 100644
+--- a/src/extstr/strcpyfld_s.c
++++ b/src/extstr/strcpyfld_s.c
+@@ -75,8 +75,13 @@
+  *    strcpyfldin_s(), strcpyfldout_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strcpyfld_s(char *dest, rsize_t dmax, const char *src, rsize_t slen)
++#else
+ EXPORT errno_t _strcpyfld_s_chk(char *dest, rsize_t dmax, const char *src,
+-                                rsize_t slen, const size_t destbos) {
++                                rsize_t slen, const size_t destbos)
++#endif
++{
+     rsize_t orig_dmax;
+     char *orig_dest;
+     const char *overlap_bumper;
+diff --git a/src/extstr/strcpyfldin_s.c b/src/extstr/strcpyfldin_s.c
+index de133fec..a6ea735c 100644
+--- a/src/extstr/strcpyfldin_s.c
++++ b/src/extstr/strcpyfldin_s.c
+@@ -80,8 +80,13 @@
+  *    strcpyfld_s(), strcpyfldout_s(),
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strcpyfldin_s(char *dest, rsize_t dmax, const char *src, rsize_t slen)
++#else
+ EXPORT errno_t _strcpyfldin_s_chk(char *dest, rsize_t dmax, const char *src,
+-                                  rsize_t slen, const size_t destbos) {
++                                  rsize_t slen, const size_t destbos)
++#endif
++{
+     rsize_t orig_dmax;
+     char *orig_dest;
+     const char *overlap_bumper;
+diff --git a/src/extstr/strcpyfldout_s.c b/src/extstr/strcpyfldout_s.c
+index 3cbf8038..0e6a6c68 100644
+--- a/src/extstr/strcpyfldout_s.c
++++ b/src/extstr/strcpyfldout_s.c
+@@ -80,8 +80,13 @@
+  *    strcpyfld_s(), strcpyfldin_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strcpyfldout_s(char *dest, rsize_t dmax, const char *src, rsize_t slen)
++#else
+ EXPORT errno_t _strcpyfldout_s_chk(char *dest, rsize_t dmax, const char *src,
+-                                   rsize_t slen, const size_t destbos) {
++                                   rsize_t slen, const size_t destbos)
++#endif
++{
+     rsize_t orig_dmax;
+     char *orig_dest;
+     const char *overlap_bumper;
+diff --git a/src/extstr/strcspn_s.c b/src/extstr/strcspn_s.c
+index bdbfceb9..5c139198 100644
+--- a/src/extstr/strcspn_s.c
++++ b/src/extstr/strcspn_s.c
+@@ -74,9 +74,15 @@
+  *    strspn_s(), strpbrk_s(), strstr_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strcspn_s(const char *dest, rsize_t dmax, const char *src,
++                  rsize_t slen, rsize_t *countp)
++#else
+ EXPORT errno_t _strcspn_s_chk(const char *dest, rsize_t dmax, const char *src,
+                               rsize_t slen, rsize_t *countp,
+-                              const size_t destbos, const size_t srcbos) {
++                              const size_t destbos, const size_t srcbos)
++#endif
++{
+     const char *scan2;
+     rsize_t smax;
+ 
+diff --git a/src/extstr/strfirstchar_s.c b/src/extstr/strfirstchar_s.c
+index 78eebc5a..89b47d0c 100644
+--- a/src/extstr/strfirstchar_s.c
++++ b/src/extstr/strfirstchar_s.c
+@@ -70,8 +70,13 @@
+  *    strlastdiff_s(), strlastsame_s(),
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t strfirstchar_s(char *dest, rsize_t dmax, char c, char **firstp)
++#else
+ EXPORT errno_t _strfirstchar_s_chk(char *dest, rsize_t dmax, char c,
+-                                   char **firstp, const size_t destbos) {
++                                   char **firstp, const size_t destbos)
++#endif
++{
+     CHK_SRC_NULL("strfirstchar_s", firstp)
+     *firstp = NULL;
+ 
+diff --git a/src/extstr/strfirstdiff_s.c b/src/extstr/strfirstdiff_s.c
+index 841c72bc..af588a34 100644
+--- a/src/extstr/strfirstdiff_s.c
++++ b/src/extstr/strfirstdiff_s.c
+@@ -73,9 +73,15 @@
+  *    strlastdiff_s(), strlastsame_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strfirstdiff_s(const char *dest, rsize_t dmax,
++                       const char *src, rsize_t *resultp)
++#else
+ EXPORT errno_t _strfirstdiff_s_chk(const char *dest, rsize_t dmax,
+                                    const char *src, rsize_t *resultp,
+-                                   const size_t destbos) {
++                                   const size_t destbos)
++#endif
++{
+     const char *rp;
+ 
+     CHK_SRC_NULL("strfirstdiff_s", resultp)
+diff --git a/src/extstr/strfirstsame_s.c b/src/extstr/strfirstsame_s.c
+index 3648e7fe..bbb760ae 100644
+--- a/src/extstr/strfirstsame_s.c
++++ b/src/extstr/strfirstsame_s.c
+@@ -72,9 +72,16 @@
+  *    strlastdiff_s(), strlastsame_s()
+  *
+  */
++
++#ifdef FOR_DOXYGEN
++errno_t strfirstsame_s(const char *dest, rsize_t dmax,
++                       const char *src, rsize_t *resultp)
++#else
+ EXPORT errno_t _strfirstsame_s_chk(const char *dest, rsize_t dmax,
+                                    const char *src, rsize_t *resultp,
+-                                   const size_t destbos) {
++                                   const size_t destbos)
++#endif
++{
+     const char *rp = 0;
+ 
+     CHK_SRC_NULL("strfirstsame_s", resultp)
+diff --git a/src/extstr/strisalphanumeric_s.c b/src/extstr/strisalphanumeric_s.c
+index dbf6389b..ca129cd0 100644
+--- a/src/extstr/strisalphanumeric_s.c
++++ b/src/extstr/strisalphanumeric_s.c
+@@ -62,8 +62,14 @@
+  *    strismixedcase_s(), strisuppercase_s()
+  *
+  */
+-bool _strisalphanumeric_s_chk(const char *dest, rsize_t dmax,
+-                              const size_t destbos) {
++
++#ifdef FOR_DOXYGEN
++bool strisalphanumeric_s(const char *dest, rsize_t dmax)
++#else
++EXPORT bool _strisalphanumeric_s_chk(const char *dest, rsize_t dmax,
++                                     const size_t destbos)
++#endif
++{
+     CHK_DEST_DMAX_BOOL("strisalphanumeric_s", RSIZE_MAX_STR)
+ 
+     if (unlikely(*dest == '\0')) {
+diff --git a/src/extstr/strisascii_s.c b/src/extstr/strisascii_s.c
+index b83f924b..ec41bcc3 100644
+--- a/src/extstr/strisascii_s.c
++++ b/src/extstr/strisascii_s.c
+@@ -64,8 +64,13 @@
+  *    strislowercase_s(), strismixedcase_s(), strisuppercase_s()
+  */
+ 
++#ifdef FOR_DOXYGEN
++bool strisascii_s(const char *dest, rsize_t dmax)
++#else
+ EXPORT bool _strisascii_s_chk(const char *dest, rsize_t dmax,
+-                              const size_t destbos) {
++                              const size_t destbos)
++#endif
++{
+     CHK_DEST_DMAX_BOOL("strisascii_s", RSIZE_MAX_STR)
+ 
+     while (*dest && dmax) {
+diff --git a/src/extstr/strisdigit_s.c b/src/extstr/strisdigit_s.c
+index 35eaa1d4..762e3d10 100644
+--- a/src/extstr/strisdigit_s.c
++++ b/src/extstr/strisdigit_s.c
+@@ -62,8 +62,13 @@
+  *    strislowercase_s(), strismixedcase_s(), strisuppercase_s()
+  */
+ 
++#ifdef FOR_DOXYGEN
++bool strisdigit_s(const char *dest, rsize_t dmax)
++#else
+ EXPORT bool _strisdigit_s_chk(const char *dest, rsize_t dmax,
+-                              const size_t destbos) {
++                              const size_t destbos)
++#endif
++{
+     CHK_DEST_DMAX_BOOL("strisdigit_s", RSIZE_MAX_STR)
+ 
+     if (unlikely(*dest == '\0')) {
+diff --git a/src/extstr/strishex_s.c b/src/extstr/strishex_s.c
+index ed0d6395..7e654233 100644
+--- a/src/extstr/strishex_s.c
++++ b/src/extstr/strishex_s.c
+@@ -64,8 +64,13 @@
+  *    strisuppercase_s()
+  */
+ 
++#ifdef FOR_DOXYGEN
++bool strishex_s(const char *dest, rsize_t dmax)
++#else
+ EXPORT bool _strishex_s_chk(const char *dest, rsize_t dmax,
+-                            const size_t destbos) {
++                            const size_t destbos)
++#endif
++{
+     CHK_DEST_DMAX_BOOL("strishex_s", RSIZE_MAX_STR)
+ 
+     if (unlikely(*dest == '\0')) {
+diff --git a/src/extstr/strislowercase_s.c b/src/extstr/strislowercase_s.c
+index b2ecc085..15c3936e 100644
+--- a/src/extstr/strislowercase_s.c
++++ b/src/extstr/strislowercase_s.c
+@@ -64,8 +64,13 @@
+  *    strisuppercase_s()
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t strislowercase_s(const char *dest, rsize_t dmax)
++#else
+ EXPORT bool _strislowercase_s_chk(const char *dest, rsize_t dmax,
+-                                  const size_t destbos) {
++                                  const size_t destbos)
++#endif
++{
+     CHK_DEST_DMAX_BOOL("strislowercase_s", RSIZE_MAX_STR)
+ 
+     if (unlikely(*dest == '\0')) {
+diff --git a/src/extstr/strismixedcase_s.c b/src/extstr/strismixedcase_s.c
+index dab40723..8b36d1a7 100644
+--- a/src/extstr/strismixedcase_s.c
++++ b/src/extstr/strismixedcase_s.c
+@@ -63,8 +63,13 @@
+  *    strisuppercase_s()
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t strismixedcase_s(const char *dest, rsize_t dmax)
++#else
+ EXPORT bool _strismixedcase_s_chk(const char *dest, rsize_t dmax,
+-                                  const size_t destbos) {
++                                  const size_t destbos)
++#endif
++{
+     CHK_DEST_DMAX_BOOL("strismixedcase_s", RSIZE_MAX_STR)
+ 
+     if (unlikely(*dest == '\0')) {
+diff --git a/src/extstr/strispassword_s.c b/src/extstr/strispassword_s.c
+index 251e19e9..7b388178 100644
+--- a/src/extstr/strispassword_s.c
++++ b/src/extstr/strispassword_s.c
+@@ -66,8 +66,13 @@
+  * @see
+  *    strzero_s()
+  */
++#ifdef FOR_DOXYGEN
++bool strispassword_s(const char *dest, rsize_t dmax)
++#else
+ EXPORT bool _strispassword_s_chk(const char *dest, rsize_t dmax,
+-                                 const size_t destbos) {
++                                 const size_t destbos)
++#endif
++{
+     uint32_t cnt_all;
+     uint32_t cnt_lowercase;
+     uint32_t cnt_uppercase;
+diff --git a/src/extstr/strisuppercase_s.c b/src/extstr/strisuppercase_s.c
+index 79a69844..563a1da5 100644
+--- a/src/extstr/strisuppercase_s.c
++++ b/src/extstr/strisuppercase_s.c
+@@ -62,8 +62,13 @@
+  *    strishex_s(), strislowercase_s(), strismixedcase_s(),
+  */
+ 
++#ifdef FOR_DOXYGEN
++bool strisuppercase_s(const char *dest, rsize_t dmax)
++#else
+ EXPORT bool _strisuppercase_s_chk(const char *dest, rsize_t dmax,
+-                                  const size_t destbos) {
++                                  const size_t destbos)
++#endif
++{
+     CHK_DEST_DMAX_BOOL("strisuppercase_s", RSIZE_MAX_STR)
+ 
+     if (unlikely(*dest == '\0')) {
+diff --git a/src/extstr/strlastchar_s.c b/src/extstr/strlastchar_s.c
+index a3920f81..199f8e50 100644
+--- a/src/extstr/strlastchar_s.c
++++ b/src/extstr/strlastchar_s.c
+@@ -70,8 +70,13 @@
+  *    strlastdiff_s(), strlastsame_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strlastchar_s(char *dest, rsize_t dmax, char c, char **lastp)
++#else
+ EXPORT errno_t _strlastchar_s_chk(char *dest, rsize_t dmax, char c,
+-                                  char **lastp, const size_t destbos) {
++                                  char **lastp, const size_t destbos)
++#endif
++{
+     CHK_SRC_NULL("strlastchar_s", lastp)
+     *lastp = NULL;
+ 
+diff --git a/src/extstr/strlastdiff_s.c b/src/extstr/strlastdiff_s.c
+index c8d5be80..3d5db10f 100644
+--- a/src/extstr/strlastdiff_s.c
++++ b/src/extstr/strlastdiff_s.c
+@@ -72,9 +72,15 @@
+  *    strlastchar_s(), strlastsame_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strlastdiff_s(const char *dest, rsize_t dmax,
++                      const char *src, rsize_t *resultp)
++#else
+ EXPORT errno_t _strlastdiff_s_chk(const char *dest, rsize_t dmax,
+                                   const char *src, rsize_t *resultp,
+-                                  const size_t destbos) {
++                                  const size_t destbos)
++#endif
++{
+     const char *rp;
+     bool there_is_a_diff = false;
+ 
+diff --git a/src/extstr/strlastsame_s.c b/src/extstr/strlastsame_s.c
+index ef3a57dd..19308409 100644
+--- a/src/extstr/strlastsame_s.c
++++ b/src/extstr/strlastsame_s.c
+@@ -72,9 +72,15 @@
+  *    strlastchar_s(), strlastdiff_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strlastsame_s(const char *dest, rsize_t dmax,
++                      const char *src, rsize_t *resultp)
++#else
+ EXPORT errno_t _strlastsame_s_chk(const char *dest, rsize_t dmax,
+                                   const char *src, rsize_t *resultp,
+-                                  const size_t destbos) {
++                                  const size_t destbos)
++#endif
++{
+     const char *rp;
+     bool found;
+ 
+diff --git a/src/extstr/strljustify_s.c b/src/extstr/strljustify_s.c
+index 719f35f3..d19a19f2 100644
+--- a/src/extstr/strljustify_s.c
++++ b/src/extstr/strljustify_s.c
+@@ -72,8 +72,13 @@
+  *    strremovews_s(),
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strljustify_s(char *dest, rsize_t dmax)
++#else
+ EXPORT errno_t _strljustify_s_chk(char *dest, rsize_t dmax,
+-                                  const size_t destbos) {
++                                  const size_t destbos)
++#endif
++{
+     char *orig_dest;
+     rsize_t orig_dmax;
+ 
+diff --git a/src/extstr/strnatcmp_s.c b/src/extstr/strnatcmp_s.c
+index 6283ff32..0289e3b7 100644
+--- a/src/extstr/strnatcmp_s.c
++++ b/src/extstr/strnatcmp_s.c
+@@ -118,9 +118,15 @@ static int compare_left(char const *a, char const *b) {
+     return 0;
+ }
+ 
++#ifdef FOR_DOXYGEN
++errno_t strnatcmp_s(const char *dest, rsize_t dmax, const char *src,
++                    const int fold_case, int *resultp)
++#else
+ EXPORT errno_t _strnatcmp_s_chk(const char *dest, rsize_t dmax, const char *src,
+                                 const int fold_case, int *resultp,
+-                                const size_t destbos, const size_t srcbos) {
++                                const size_t destbos, const size_t srcbos)
++#endif
++{
+     size_t ai, bi;
+     char ca, cb;
+     int fractional;
+diff --git a/src/extstr/strnset_s.c b/src/extstr/strnset_s.c
+index 8bae92d5..99f36109 100644
+--- a/src/extstr/strnset_s.c
++++ b/src/extstr/strnset_s.c
+@@ -75,8 +75,13 @@
+  *    strzero_s(), strset_s(), wcsnset_s(), strispassword_s()
+  */
+ 
+-EXPORT errno_t _strnset_s_chk(char *restrict dest, rsize_t dmax, int value,
+-                              rsize_t n, const size_t destbos) {
++#ifdef FOR_DOXYGEN
++errno_t strnset_s(char *restrict dest, rsize_t dmax, int value, rsize_t n)
++#else
++EXPORT errno_t _strnset_s_chk(char *restrict dest, rsize_t dmax, int value, rsize_t n,
++                              const size_t destbos)
++#endif
++{
+ #ifdef SAFECLIB_STR_NULL_SLACK
+     char *orig_dest;
+ #endif
+diff --git a/src/extstr/strnterminate_s.c b/src/extstr/strnterminate_s.c
+index a87c465b..afa6fdbc 100644
+--- a/src/extstr/strnterminate_s.c
++++ b/src/extstr/strnterminate_s.c
+@@ -63,8 +63,13 @@
+  *    strnlen_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++rsize_t strnterminate_s(char *dest, rsize_t dmax)
++#else
+ EXPORT rsize_t _strnterminate_s_chk(char *dest, rsize_t dmax,
+-                                    const size_t destbos) {
++                                    const size_t destbos)
++#endif
++{
+     rsize_t count;
+ 
+     if (unlikely(dest == NULL)) {
+diff --git a/src/extstr/strpbrk_s.c b/src/extstr/strpbrk_s.c
+index a19832cd..5bb7a0f8 100644
+--- a/src/extstr/strpbrk_s.c
++++ b/src/extstr/strpbrk_s.c
+@@ -71,9 +71,13 @@
+  *    strfirstsame_s(), strlastdiff_s(), strlastsame_s()
+  *
+  */
+-EXPORT errno_t _strpbrk_s_chk(char *dest, rsize_t dmax, char *src, rsize_t slen,
+-                              char **firstp, const size_t destbos,
+-                              const size_t srcbos) {
++#ifdef FOR_DOXYGEN
++errno_t strpbrk_s(char *dest, rsize_t dmax, char *src, rsize_t slen, char **firstp)
++#else
++EXPORT errno_t _strpbrk_s_chk(char *dest, rsize_t dmax, char *src, rsize_t slen, char **firstp,
++                              const size_t destbos, const size_t srcbos)
++#endif
++{
+     char *ps;
+     rsize_t len;
+ 
+diff --git a/src/extstr/strprefix_s.c b/src/extstr/strprefix_s.c
+index f3dc7061..1717f8c3 100644
+--- a/src/extstr/strprefix_s.c
++++ b/src/extstr/strprefix_s.c
+@@ -70,8 +70,13 @@
+  *    strspn_s(), strcspn_s(), strpbrk_s(), strstr_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strprefix_s(const char *dest, rsize_t dmax, const char *src)
++#else
+ EXPORT errno_t _strprefix_s_chk(const char *dest, rsize_t dmax, const char *src,
+-                                const size_t destbos) {
++                                const size_t destbos)
++#endif
++{
+     CHK_DEST_NULL("strprefix_s")
+     CHK_SRC_NULL("strprefix_s", src)
+     CHK_DMAX_ZERO("strprefix_s")
+diff --git a/src/extstr/strrchr_s.c b/src/extstr/strrchr_s.c
+index c94a7d9f..3e056ca6 100644
+--- a/src/extstr/strrchr_s.c
++++ b/src/extstr/strrchr_s.c
+@@ -71,9 +71,14 @@
+  *    memrchr_s(), strchr_s(), memchr_s(), strspn_s(), strstr_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strrchr_s(const char *restrict dest, rsize_t dmax, const int ch, char **resultp)
++#else
+ EXPORT errno_t _strrchr_s_chk(const char *restrict dest, rsize_t dmax,
+                               const int ch, char **resultp,
+-                              const size_t destbos) {
++                              const size_t destbos)
++#endif
++{
+     rsize_t len;
+ 
+     CHK_SRC_NULL("strrchr_s", resultp)
+diff --git a/src/extstr/strremovews_s.c b/src/extstr/strremovews_s.c
+index 0b87ceca..45cb111e 100644
+--- a/src/extstr/strremovews_s.c
++++ b/src/extstr/strremovews_s.c
+@@ -73,8 +73,13 @@
+  *    strljustify_s(),
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strremovews_s(char *dest, rsize_t dmax)
++#else
+ EXPORT errno_t _strremovews_s_chk(char *dest, rsize_t dmax,
+-                                  const size_t destbos) {
++                                  const size_t destbos)
++#endif
++{
+     char *orig_dest;
+     char *orig_end;
+     rsize_t orig_dmax;
+diff --git a/src/extstr/strset_s.c b/src/extstr/strset_s.c
+index a091da1e..99ec7cdd 100644
+--- a/src/extstr/strset_s.c
++++ b/src/extstr/strset_s.c
+@@ -72,8 +72,13 @@
+  *    strzero_s(), strnset_s(), strispassword_s()
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t strset_s(char *restrict dest, rsize_t dmax, int value)
++#else
+ EXPORT errno_t _strset_s_chk(char *restrict dest, rsize_t dmax, int value,
+-                             const size_t destbos) {
++                             const size_t destbos)
++#endif
++{
+     CHK_DEST_NULL("strset_s")
+     CHK_DMAX_ZERO("strset_s")
+     if (destbos == BOS_UNKNOWN) {
+diff --git a/src/extstr/strspn_s.c b/src/extstr/strspn_s.c
+index 386e6b1e..3bf96695 100644
+--- a/src/extstr/strspn_s.c
++++ b/src/extstr/strspn_s.c
+@@ -71,9 +71,15 @@
+  *    strcspn_s(), strpbrk_s(), strstr_s(), strprefix_s()
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t strspn_s(const char *dest, rsize_t dmax, const char *src,
++                 rsize_t slen, rsize_t *countp)
++#else
+ EXPORT errno_t _strspn_s_chk(const char *dest, rsize_t dmax, const char *src,
+                              rsize_t slen, rsize_t *countp,
+-                             const size_t destbos, const size_t srcbos) {
++                             const size_t destbos, const size_t srcbos)
++#endif
++{
+     const char *scan2;
+     rsize_t smax;
+     bool match_found;
+diff --git a/src/extstr/strstr_s.c b/src/extstr/strstr_s.c
+index 6a376f08..f315c580 100644
+--- a/src/extstr/strstr_s.c
++++ b/src/extstr/strstr_s.c
+@@ -72,9 +72,16 @@
+  *     strprefix_s(), strspn_s(), strcspn_s(), strpbrk_s()
+  *
+  */
++
++#ifdef FOR_DOXYGEN
++errno_t strstr_s(char *dest, rsize_t dmax, const char *src,
++                 rsize_t slen, char **substringp)
++#else
+ EXPORT errno_t _strstr_s_chk(char *dest, rsize_t dmax, const char *src,
+                              rsize_t slen, char **substringp,
+-                             const size_t destbos, const size_t srcbos) {
++                             const size_t destbos, const size_t srcbos)
++#endif
++{
+     rsize_t len;
+     rsize_t dlen;
+     int i;
+diff --git a/src/extstr/strtolowercase_s.c b/src/extstr/strtolowercase_s.c
+index ecb14413..f0922a81 100644
+--- a/src/extstr/strtolowercase_s.c
++++ b/src/extstr/strtolowercase_s.c
+@@ -67,8 +67,13 @@
+  *    strtouppercase_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strtolowercase_s(char *restrict dest, rsize_t dmax)
++#else
+ EXPORT errno_t _strtolowercase_s_chk(char *restrict dest, rsize_t dmax,
+-                                     const size_t destbos) {
++                                     const size_t destbos)
++#endif
++{
+     CHK_DEST_NULL("strtolowercase_s")
+     CHK_DMAX_ZERO("strtolowercase_s")
+     if (destbos == BOS_UNKNOWN) {
+diff --git a/src/extstr/strtouppercase_s.c b/src/extstr/strtouppercase_s.c
+index 35865f28..2c2c0444 100644
+--- a/src/extstr/strtouppercase_s.c
++++ b/src/extstr/strtouppercase_s.c
+@@ -67,8 +67,13 @@
+  *    strtolowercase_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strtouppercase_s(char *dest, rsize_t dmax)
++#else
+ EXPORT errno_t _strtouppercase_s_chk(char *dest, rsize_t dmax,
+-                                     const size_t destbos) {
++                                     const size_t destbos)
++#endif
++{
+     CHK_DEST_NULL("strtouppercase_s")
+     CHK_DMAX_ZERO("strtouppercase_s")
+     if (destbos == BOS_UNKNOWN) {
+diff --git a/src/extstr/strzero_s.c b/src/extstr/strzero_s.c
+index bb3e5d5e..4a43cd40 100644
+--- a/src/extstr/strzero_s.c
++++ b/src/extstr/strzero_s.c
+@@ -64,7 +64,13 @@
+  *    strispassword_s()
+  */
+ 
+-EXPORT errno_t _strzero_s_chk(char *dest, rsize_t dmax, const size_t destbos) {
++#ifdef FOR_DOXYGEN
++errno_t strzero_s(char *dest, rsize_t dmax)
++#else
++EXPORT errno_t _strzero_s_chk(char *dest, rsize_t dmax,
++                              const size_t destbos)
++#endif
++{
+     CHK_DEST_NULL("strzero_s")
+     CHK_DMAX_ZERO("strzero_s")
+     if (destbos == BOS_UNKNOWN) {
+diff --git a/src/extwchar/towfc_s.c b/src/extwchar/towfc_s.c
+index d915eca5..baabde42 100644
+--- a/src/extwchar/towfc_s.c
++++ b/src/extwchar/towfc_s.c
+@@ -513,8 +513,13 @@ single:
+    Returns the number of replaced wide characters, or -ESNOTFND if not
+    replaced.
+ */
+-EXPORT int _towfc_s_chk(wchar_t *restrict dest, rsize_t dmax,
+-                        const uint32_t src, const size_t destbos) {
++#ifdef FOR_DOXYGEN
++int towfc_s(wchar_t *restrict dest, rsize_t dmax, const uint32_t src)
++#else
++EXPORT int _towfc_s_chk(wchar_t *restrict dest, rsize_t dmax, const uint32_t src,
++                        const size_t destbos)
++#endif
++{
+     int i;
+     const size_t destsz = dmax * sizeof(wchar_t);
+ 
+diff --git a/src/extwchar/wcscmp_s.c b/src/extwchar/wcscmp_s.c
+index 28bdd5f2..d0c4c3bc 100644
+--- a/src/extwchar/wcscmp_s.c
++++ b/src/extwchar/wcscmp_s.c
+@@ -76,10 +76,17 @@
+  *    strcmp_s(), wcsncmp_s(), wcsicmp_s()
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t wcscmp_s(const wchar_t *restrict dest, rsize_t dmax,
++                 const wchar_t *restrict src, rsize_t smax,
++                 int *resultp)
++#else
+ EXPORT errno_t _wcscmp_s_chk(const wchar_t *restrict dest, rsize_t dmax,
+                              const wchar_t *restrict src, rsize_t smax,
+                              int *resultp, const size_t destbos,
+-                             const size_t srcbos) {
++                             const size_t srcbos)
++#endif
++{
+     const size_t destsz = dmax * sizeof(wchar_t);
+     const size_t srcsz = smax * sizeof(wchar_t);
+ 
+diff --git a/src/extwchar/wcscoll_s.c b/src/extwchar/wcscoll_s.c
+index f9bab099..b6e1ec45 100644
+--- a/src/extwchar/wcscoll_s.c
++++ b/src/extwchar/wcscoll_s.c
+@@ -87,11 +87,17 @@
+  * @see
+  *    wcscmp_s(), strcoll_s(), strcasecmp_s()
+  */
+-
++#ifdef FOR_DOXYGEN
++errno_t wcscoll_s(const wchar_t *restrict dest, rsize_t dmax,
++                  const wchar_t *restrict src, rsize_t smax,
++                  int *resultp)
++#else
+ EXPORT errno_t _wcscoll_s_chk(const wchar_t *restrict dest, rsize_t dmax,
+                               const wchar_t *restrict src, rsize_t smax,
+                               int *resultp, const size_t destbos,
+-                              const size_t srcbos) {
++                              const size_t srcbos)
++#endif
++{
+     const size_t destsz = dmax * sizeof(wchar_t);
+     const size_t srcsz = smax * sizeof(wchar_t);
+ 
+diff --git a/src/extwchar/wcsfc_s.c b/src/extwchar/wcsfc_s.c
+index 9c4f3aea..11a4204b 100644
+--- a/src/extwchar/wcsfc_s.c
++++ b/src/extwchar/wcsfc_s.c
+@@ -110,10 +110,15 @@ static inline int _is_lt_accented(uint32_t wc) {
+  *    iswfc(), towfc_s(), towupper(), wcslwr_s(), wcsupr_s()
+  *
+  */
+-
++#ifdef FOR_DOXYGEN
++errno_t wcsfc_s(wchar_t *restrict dest, rsize_t dmax,
++                const wchar_t *restrict src, rsize_t *restrict lenp)
++#else
+ EXPORT errno_t _wcsfc_s_chk(wchar_t *restrict dest, rsize_t dmax,
+                             const wchar_t *restrict src, rsize_t *restrict lenp,
+-                            const size_t destbos) {
++                            const size_t destbos)
++#endif
++{
+     wchar_t *orig_dest;
+     rsize_t orig_dmax;
+     int is_lithuanian = 0;
+diff --git a/src/extwchar/wcsicmp_s.c b/src/extwchar/wcsicmp_s.c
+index a6869e47..54e6667a 100644
+--- a/src/extwchar/wcsicmp_s.c
++++ b/src/extwchar/wcsicmp_s.c
+@@ -73,10 +73,17 @@
+  *    strcmp_s(), wcscmp_s(), wcsncmp_s(), wcsfc_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t wcsicmp_s(const wchar_t *restrict dest, rsize_t dmax,
++                  const wchar_t *restrict src, rsize_t smax,
++                  int *resultp)
++#else
+ EXPORT errno_t _wcsicmp_s_chk(const wchar_t *restrict dest, rsize_t dmax,
+                               const wchar_t *restrict src, rsize_t smax,
+                               int *resultp, const size_t destbos,
+-                              const size_t srcbos) {
++                              const size_t srcbos)
++#endif
++{
+     errno_t rc;
+     wchar_t *d1, *d2;
+     rsize_t l1, l2;
+diff --git a/src/extwchar/wcslwr_s.c b/src/extwchar/wcslwr_s.c
+index 0c623d69..df49fa6b 100644
+--- a/src/extwchar/wcslwr_s.c
++++ b/src/extwchar/wcslwr_s.c
+@@ -75,9 +75,13 @@ EXTERN wint_t towlower(wint_t wc);
+  * @see
+  *    wcsfc_s(), strtolowercase_s(), strlwr_s(), wcsupr_s()
+  */
+-
++#ifdef FOR_DOXYGEN
++errno_t wcslwr_s(wchar_t *restrict src, rsize_t slen)
++#else
+ EXPORT errno_t _wcslwr_s_chk(wchar_t *restrict src, rsize_t slen,
+-                             const size_t srcbos) {
++                             const size_t srcbos)
++#endif
++{
+     const size_t srcsz = slen * sizeof(wchar_t);
+ 
+     if (unlikely(slen == 0)) { /* Since C11 slen=0 is allowed */
+diff --git a/src/extwchar/wcsnatcmp_s.c b/src/extwchar/wcsnatcmp_s.c
+index b0355d12..f27b8f3d 100644
+--- a/src/extwchar/wcsnatcmp_s.c
++++ b/src/extwchar/wcsnatcmp_s.c
+@@ -131,10 +131,17 @@ static int compare_left(wchar_t const *a, wchar_t const *b) {
+     return 0;
+ }
+ 
++#ifdef FOR_DOXYGEN
++errno_t wcsnatcmp_s(const wchar_t *dest, rsize_t dmax,
++                    const wchar_t *src, rsize_t smax,
++                    const int fold_case, int *resultp)
++#else
+ EXPORT errno_t _wcsnatcmp_s_chk(const wchar_t *dest, rsize_t dmax,
+                                 const wchar_t *src, rsize_t smax,
+                                 const int fold_case, int *resultp,
+-                                const size_t destbos, const size_t srcbos) {
++                                const size_t destbos, const size_t srcbos)
++#endif
++{
+     wchar_t *d1 = NULL, *d2 = NULL;
+     size_t ai, bi;
+     const size_t destsz = dmax * sizeof(wchar_t);
+diff --git a/src/extwchar/wcsncmp_s.c b/src/extwchar/wcsncmp_s.c
+index 3f3cd7e3..9761e68d 100644
+--- a/src/extwchar/wcsncmp_s.c
++++ b/src/extwchar/wcsncmp_s.c
+@@ -77,11 +77,17 @@
+  * @see
+  *    strcmp_s(), wcscmp_s()
+  */
+-
++#ifdef FOR_DOXYGEN
++errno_t wcsncmp_s(const wchar_t *restrict dest, rsize_t dmax,
++                  const wchar_t *restrict src, rsize_t smax,
++                  rsize_t count, int *resultp)
++#else
+ EXPORT errno_t _wcsncmp_s_chk(const wchar_t *restrict dest, rsize_t dmax,
+                               const wchar_t *restrict src, rsize_t smax,
+                               rsize_t count, int *resultp, const size_t destbos,
+-                              const size_t srcbos) {
++                              const size_t srcbos)
++#endif
++{
+     const size_t destsz = dmax * sizeof(wchar_t);
+     const size_t srcsz = smax * sizeof(wchar_t);
+ 
+diff --git a/src/extwchar/wcsnorm_s.c b/src/extwchar/wcsnorm_s.c
+index 726decb5..536680dc 100644
+--- a/src/extwchar/wcsnorm_s.c
++++ b/src/extwchar/wcsnorm_s.c
+@@ -502,11 +502,19 @@ static uint8_t _combin_class(uint32_t cp) {
+  */
+ 
+ /* create an unordered decomposed wide string */
++#ifdef FOR_DOXYGEN
++errno_t wcsnorm_decompose_s(wchar_t *restrict dest, rsize_t dmax,
++                            const wchar_t *restrict src,
++                            rsize_t *restrict lenp,
++                            const bool iscompat)
++#else
+ EXPORT errno_t _wcsnorm_decompose_s_chk(wchar_t *restrict dest, rsize_t dmax,
+                                         const wchar_t *restrict src,
+                                         rsize_t *restrict lenp,
+                                         const bool iscompat,
+-                                        const size_t destbos) {
++                                        const size_t destbos)
++#endif
++{
+     rsize_t orig_dmax;
+     wchar_t *orig_dest;
+     const wchar_t *overlap_bumper;
+@@ -733,9 +741,15 @@ done:
+  */
+ 
+ /* reorder decomposed sequence to NFD */
++#ifdef FOR_DOXYGEN
++errno_t wcsnorm_reorder_s(wchar_t *restrict dest, rsize_t dmax, const wchar_t *restrict src,
++                          const rsize_t len)
++#else
+ EXPORT errno_t _wcsnorm_reorder_s_chk(wchar_t *restrict dest, rsize_t dmax,
+-                                      const wchar_t *restrict src,
+-                                      const rsize_t len, const size_t destbos) {
++                                      const wchar_t *restrict src, const rsize_t len,
++                                      const size_t destbos)
++#endif
++{
+     UNWIF_cc seq_ary[CC_SEQ_SIZE];
+     UNWIF_cc *seq_ptr = (UNWIF_cc *)seq_ary; /* start with stack */
+     UNWIF_cc *seq_ext = NULL;                /* heap when needed */
+@@ -862,11 +876,19 @@ EXPORT errno_t _wcsnorm_reorder_s_chk(wchar_t *restrict dest, rsize_t dmax,
+ 
+ /* combine decomposed sequences to NFC. */
+ /* iscontig = false; composeContiguous? FCC if true */
++#ifdef FOR_DOXYGEN
++errno_t wcsnorm_compose_s(wchar_t *restrict dest, rsize_t dmax,
++                          const wchar_t *restrict src,
++                          rsize_t *restrict lenp,
++                          const bool iscontig)
++#else
+ EXPORT errno_t _wcsnorm_compose_s_chk(wchar_t *restrict dest, rsize_t dmax,
+                                       const wchar_t *restrict src,
+                                       rsize_t *restrict lenp,
+                                       const bool iscontig,
+-                                      const size_t destbos) {
++                                      const size_t destbos)
++#endif
++{
+     wchar_t *p = (wchar_t *)src;
+     const wchar_t *e = p + *lenp;
+     uint32_t cpS = 0;       /* starter code point */
+@@ -1067,10 +1089,17 @@ EXPORT errno_t _wcsnorm_compose_s_chk(wchar_t *restrict dest, rsize_t dmax,
+ 
+ /* Normalize to NFC, NFD, FCC, FCD (fastest, used in wcsfc_s), and optionally
+  * NFKD, NFKC */
++#ifdef FOR_DOXYGEN
++errno_t wcsnorm_s(wchar_t *restrict dest, rsize_t dmax,
++                  const wchar_t *restrict src,
++                  const wcsnorm_mode_t mode, rsize_t *restrict lenp)
++#else
+ EXPORT errno_t _wcsnorm_s_chk(wchar_t *restrict dest, rsize_t dmax,
+                               const wchar_t *restrict src,
+                               const wcsnorm_mode_t mode, rsize_t *restrict lenp,
+-                              const size_t destbos) {
++                              const size_t destbos)
++#endif
++{
+     wchar_t tmp_stack[128];
+     wchar_t *tmp_ptr;
+     wchar_t *tmp = NULL;
+diff --git a/src/extwchar/wcsnset_s.c b/src/extwchar/wcsnset_s.c
+index b56479c8..6d648695 100644
+--- a/src/extwchar/wcsnset_s.c
++++ b/src/extwchar/wcsnset_s.c
+@@ -74,8 +74,13 @@
+  *    wcsset_s(), wmemset_s(), strzero_s(), strnset_s(), strispassword_s()
+  *
+  */
+-EXPORT errno_t _wcsnset_s_chk(wchar_t *restrict dest, rsize_t dmax,
+-                              wchar_t value, rsize_t n, const size_t destbos) {
++#ifdef FOR_DOXYGEN
++errno_t wcsnset_s(wchar_t *restrict dest, rsize_t dmax, wchar_t value, rsize_t n)
++#else
++EXPORT errno_t _wcsnset_s_chk(wchar_t *restrict dest, rsize_t dmax, wchar_t value, rsize_t n,
++                              const size_t destbos)
++#endif
++{
+ #ifdef SAFECLIB_STR_NULL_SLACK
+     wchar_t *orig_dest;
+ #endif
+diff --git a/src/extwchar/wcsset_s.c b/src/extwchar/wcsset_s.c
+index 99652f01..8008dcaa 100644
+--- a/src/extwchar/wcsset_s.c
++++ b/src/extwchar/wcsset_s.c
+@@ -71,8 +71,13 @@
+  *    wcsnset_s(), wmemset_s(), strzero_s(), strnset_s(), strispassword_s()
+  *
+  */
+-EXPORT errno_t _wcsset_s_chk(wchar_t *restrict dest, rsize_t dmax,
+-                             const wchar_t value, const size_t destbos) {
++#ifdef FOR_DOXYGEN
++errno_t wcsset_s(wchar_t *restrict dest, rsize_t dmax, const wchar_t value)
++#else
++EXPORT errno_t _wcsset_s_chk(wchar_t *restrict dest, rsize_t dmax, const wchar_t value,
++                             const size_t destbos)
++#endif
++{
+     const size_t destsz = dmax * sizeof(wchar_t);
+ 
+     CHK_DEST_NULL("wcsset_s")
+diff --git a/src/extwchar/wcsstr_s.c b/src/extwchar/wcsstr_s.c
+index 6d84f0b3..592934e2 100644
+--- a/src/extwchar/wcsstr_s.c
++++ b/src/extwchar/wcsstr_s.c
+@@ -72,11 +72,17 @@
+  * @see
+  *     wcsstr(), strstr_s(), memcmp32_s()
+  */
+-
++#ifdef FOR_DOXYGEN
++errno_t wcsstr_s(wchar_t *restrict dest, rsize_t dmax,
++                 const wchar_t *restrict src, rsize_t slen,
++                 wchar_t **restrict substringp)
++#else
+ EXPORT errno_t _wcsstr_s_chk(wchar_t *restrict dest, rsize_t dmax,
+                              const wchar_t *restrict src, rsize_t slen,
+                              wchar_t **restrict substringp,
+-                             const size_t destbos, const size_t srcbos) {
++                             const size_t destbos, const size_t srcbos)
++#endif
++{
+     rsize_t len;
+     rsize_t dlen;
+     const size_t destsz = dmax * sizeof(wchar_t);
+diff --git a/src/extwchar/wcsupr_s.c b/src/extwchar/wcsupr_s.c
+index ec16199d..3b7675ce 100644
+--- a/src/extwchar/wcsupr_s.c
++++ b/src/extwchar/wcsupr_s.c
+@@ -71,9 +71,13 @@
+  * @see
+  *    strtouppercase_s(), strlwr_s(), wcslwr_s()
+  */
+-
++#ifdef FOR_DOXYGEN
++errno_t wcsupr_s(wchar_t *restrict src, rsize_t slen)
++#else
+ EXPORT errno_t _wcsupr_s_chk(wchar_t *restrict src, rsize_t slen,
+-                             const size_t srcbos) {
++                             const size_t srcbos)
++#endif
++{
+     const size_t srcsz = slen * sizeof(wchar_t);
+ 
+     if (unlikely(slen == 0)) { /* Since C11 slen=0 is allowed */
+diff --git a/src/extwchar/wmemcmp_s.c b/src/extwchar/wmemcmp_s.c
+index abf8b843..1104d430 100644
+--- a/src/extwchar/wmemcmp_s.c
++++ b/src/extwchar/wmemcmp_s.c
+@@ -77,9 +77,15 @@
+  *
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t wmemcmp_s(const wchar_t *dest, rsize_t dlen,
++                  const wchar_t *src, rsize_t slen, int *diff)
++#else
+ EXPORT errno_t _wmemcmp_s_chk(const wchar_t *dest, rsize_t dlen,
+                               const wchar_t *src, rsize_t slen, int *diff,
+-                              const size_t destbos, const size_t srcbos) {
++                              const size_t destbos, const size_t srcbos)
++#endif
++{
+     const rsize_t dmax = dlen * SIZEOF_WCHAR_T;
+     const rsize_t smax = slen * SIZEOF_WCHAR_T;
+     const wchar_t *dp;
+diff --git a/src/io/gets_s.c b/src/io/gets_s.c
+index be875a1c..382945d0 100644
+--- a/src/io/gets_s.c
++++ b/src/io/gets_s.c
+@@ -99,8 +99,13 @@
+  *    scanf_s()
+  */
+ 
++#ifdef FOR_DOXYGEN
++char *gets_s(char *restrict dest, rsize_t dmax)
++#else
+ EXPORT char *_gets_s_chk(char *restrict dest, rsize_t dmax,
+-                         const size_t destbos) {
++                         const size_t destbos)
++#endif
++{
+     char *ret;
+ 
+     if (unlikely(dest == NULL)) {
+diff --git a/src/io/tmpnam_s.c b/src/io/tmpnam_s.c
+index 52819392..96d3dc1f 100644
+--- a/src/io/tmpnam_s.c
++++ b/src/io/tmpnam_s.c
+@@ -91,8 +91,13 @@
+  *   to the optionally defined macro P_tmpdir).
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t tmpnam_s(const char *dest, rsize_t dmax)
++#else
+ EXPORT errno_t _tmpnam_s_chk(const char *dest, rsize_t dmax,
+-                             const size_t destbos) {
++                             const size_t destbos)
++#endif
++{
+     static int count = 0;
+     char *result = NULL;
+     char *dp = (char *)dest;
+diff --git a/src/mem/memcpy_s.c b/src/mem/memcpy_s.c
+index ba879b1e..742070cb 100644
+--- a/src/mem/memcpy_s.c
++++ b/src/mem/memcpy_s.c
+@@ -88,9 +88,15 @@
+  *    memcpy16_s(), memcpy32_s(), memmove_s(), memmove16_s(), memmove32_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t memcpy_s(void *restrict dest, rsize_t dmax,
++                 const void *restrict src, rsize_t slen)
++#else
+ EXPORT errno_t _memcpy_s_chk(void *restrict dest, rsize_t dmax,
+                              const void *restrict src, rsize_t slen,
+-                             const size_t destbos, const size_t srcbos) {
++                             const size_t destbos, const size_t srcbos)
++#endif
++{
+     uint8_t *dp;
+     const uint8_t *sp;
+ 
+diff --git a/src/mem/memmove_s.c b/src/mem/memmove_s.c
+index 69053591..2d844497 100644
+--- a/src/mem/memmove_s.c
++++ b/src/mem/memmove_s.c
+@@ -92,9 +92,14 @@
+  *
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t memmove_s(void *dest, rsize_t dmax, const void *src, rsize_t slen)
++#else
+ EXPORT errno_t _memmove_s_chk(void *dest, rsize_t dmax, const void *src,
+                               rsize_t slen, const size_t destbos,
+-                              const size_t srcbos) {
++                              const size_t srcbos)
++#endif
++{
+     uint8_t *dp;
+     const uint8_t *sp;
+ 
+diff --git a/src/mem/memset_s.c b/src/mem/memset_s.c
+index fb37007c..3f6e0f5d 100644
+--- a/src/mem/memset_s.c
++++ b/src/mem/memset_s.c
+@@ -92,8 +92,13 @@
+  *    memset16_s(), memset32_s()
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t memset_s(void *dest, rsize_t dmax, int value, rsize_t n)
++#else
+ EXPORT errno_t _memset_s_chk(void *dest, rsize_t dmax, int value, rsize_t n,
+-                             const size_t destbos) {
++                             const size_t destbos)
++#endif
++{
+     errno_t err;
+ 
+     CHK_DEST_MEM_NULL("memset_s")
+diff --git a/src/misc/bsearch_s.c b/src/misc/bsearch_s.c
+index 42f8f5a4..e40b908c 100644
+--- a/src/misc/bsearch_s.c
++++ b/src/misc/bsearch_s.c
+@@ -105,10 +105,18 @@
+  *    qsort_s()
+  */
+ 
++#ifdef FOR_DOXYGEN
++void *
++bsearch_s(const void *key, const void *base, rsize_t nmemb, rsize_t size,
++               int (*compar)(const void *k, const void *y, void *context),
++               void *context)
++#else
+ EXPORT void *
+ _bsearch_s_chk(const void *key, const void *base, rsize_t nmemb, rsize_t size,
+                int (*compar)(const void *k, const void *y, void *context),
+-               void *context, const size_t basebos) {
++               void *context, const size_t basebos)
++#endif
++{
+     if (likely(nmemb != 0)) {
+         if (unlikely(key == NULL || base == NULL || compar == NULL)) {
+             invoke_safe_mem_constraint_handler(
+diff --git a/src/misc/qsort_s.c b/src/misc/qsort_s.c
+index 8327f919..688b468b 100644
+--- a/src/misc/qsort_s.c
++++ b/src/misc/qsort_s.c
+@@ -342,10 +342,18 @@ static void qsort_musl(void *base, size_t nel, size_t width, cmpfun cmp,
+     }
+ }
+ 
++#ifdef FOR_DOXYGEN
++errno_t qsort_s(void *base, rsize_t nmemb, rsize_t size,
++                int (*compar)(const void *k, const void *y,
++                              void *context),
++                void *context)
++#else
+ EXPORT errno_t _qsort_s_chk(void *base, rsize_t nmemb, rsize_t size,
+                             int (*compar)(const void *k, const void *y,
+                                           void *context),
+-                            void *context, const size_t destbos) {
++                            void *context, const size_t destbos)
++#endif
++{
+     if (likely(nmemb != 0)) {
+         if (unlikely(base == NULL || compar == NULL)) {
+             invoke_safe_str_constraint_handler("qsort_s: base/compar is null",
+diff --git a/src/os/asctime_s.c b/src/os/asctime_s.c
+index 01cefd8f..9976c4aa 100644
+--- a/src/os/asctime_s.c
++++ b/src/os/asctime_s.c
+@@ -106,8 +106,13 @@ char *asctime_r(const struct tm * __restrict, char * __restrict);
+  *    ctime_s()
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t asctime_s(char *dest, rsize_t dmax, const struct tm *tm)
++#else
+ EXPORT errno_t _asctime_s_chk(char *dest, rsize_t dmax, const struct tm *tm,
+-                              const size_t destbos) {
++                              const size_t destbos)
++#endif
++{
+     const char *buf;
+     size_t len;
+ 
+diff --git a/src/os/ctime_s.c b/src/os/ctime_s.c
+index 7a1a138c..e50b5fab 100644
+--- a/src/os/ctime_s.c
++++ b/src/os/ctime_s.c
+@@ -104,8 +104,13 @@ char *ctime_r(const time_t *, char *);
+  *    asctime_s()
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t ctime_s(char *dest, rsize_t dmax, const time_t *timer)
++#else
+ EXPORT errno_t _ctime_s_chk(char *dest, rsize_t dmax, const time_t *timer,
+-                            const size_t destbos) {
++                            const size_t destbos)
++#endif
++{
+     const char *buf;
+     size_t len;
+ 
+diff --git a/src/os/getenv_s.c b/src/os/getenv_s.c
+index 5f9a0642..2d2158cb 100644
+--- a/src/os/getenv_s.c
++++ b/src/os/getenv_s.c
+@@ -88,9 +88,15 @@
+  * @retval  -1         when not found
+  */
+ 
++#ifdef FOR_DOXYGEN
++errno_t getenv_s(size_t *restrict len, char *restrict dest,
++                     rsize_t dmax, const char *restrict name)
++#else
+ EXPORT errno_t _getenv_s_chk(size_t *restrict len, char *restrict dest,
+                              rsize_t dmax, const char *restrict name,
+-                             const size_t destbos) {
++                             const size_t destbos)
++#endif
++{
+     const char *buf;
+     int len1;
+ 
+diff --git a/src/os/gmtime_s.c b/src/os/gmtime_s.c
+index cd8f064f..0ef4418f 100644
+--- a/src/os/gmtime_s.c
++++ b/src/os/gmtime_s.c
+@@ -88,8 +88,8 @@ struct tm *gmtime_r(const time_t * __restrict, struct tm * __restrict);
+  *    localtime_s(), ctime_s()
+  */
+ 
+-EXPORT struct tm *gmtime_s(const time_t *restrict timer,
+-                           struct tm *restrict dest) {
++EXPORT struct tm *gmtime_s(const time_t *restrict timer, struct tm *restrict dest)
++{
+ 
+     if (unlikely(dest == NULL)) {
+         invoke_safe_str_constraint_handler("gmtime_s: dest is null", NULL,
+diff --git a/src/str/strcat_s.c b/src/str/strcat_s.c
+index a38b43f0..117ad954 100644
+--- a/src/str/strcat_s.c
++++ b/src/str/strcat_s.c
+@@ -106,8 +106,15 @@
+  *    strncat_s(), strcpy_s(), strncpy_s()
+  *
+  */
++
++#ifdef FOR_DOXYGEN
++errno_t strcat_s(char *restrict dest, rsize_t dmax,
++                 const char *restrict src)
++#else
+ EXPORT errno_t _strcat_s_chk(char *restrict dest, rsize_t dmax,
+-                             const char *restrict src, size_t destbos) {
++                             const char *restrict src, size_t destbos)
++#endif
++{
+     rsize_t orig_dmax;
+     char *orig_dest;
+     const char *overlap_bumper;
+diff --git a/src/str/strcpy_s.c b/src/str/strcpy_s.c
+index f5d6c73f..8ddc2674 100644
+--- a/src/str/strcpy_s.c
++++ b/src/str/strcpy_s.c
+@@ -99,8 +99,13 @@
+  *    strcat_s(), strncat_s(), strncpy_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strcpy_s(char *restrict dest, rsize_t dmax, const char *restrict src)
++#else
+ EXPORT errno_t _strcpy_s_chk(char *restrict dest, rsize_t dmax,
+-                             const char *restrict src, const size_t destbos) {
++                             const char *restrict src, const size_t destbos)
++#endif
++{
+     rsize_t orig_dmax;
+     char *orig_dest;
+     const char *overlap_bumper;
+diff --git a/src/str/strerror_s.c b/src/str/strerror_s.c
+index 8b4a0b26..bc4454af 100644
+--- a/src/str/strerror_s.c
++++ b/src/str/strerror_s.c
+@@ -86,9 +86,13 @@
+  * @see
+  *    strerrorlen_s()
+  */
+-
++#ifdef FOR_DOXYGEN
++errno_t strerror_s(char *dest, rsize_t dmax, errno_t errnum)
++#else
+ EXPORT errno_t _strerror_s_chk(char *dest, rsize_t dmax, errno_t errnum,
+-                               const size_t destbos) {
++                               const size_t destbos)
++#endif
++{
+     size_t len;
+ 
+     CHK_DEST_NULL("strerror_s")
+diff --git a/src/str/strncat_s.c b/src/str/strncat_s.c
+index 4089d390..79a38eff 100644
+--- a/src/str/strncat_s.c
++++ b/src/str/strncat_s.c
+@@ -117,9 +117,15 @@
+  *    strcat_s(), strncpy_s(), wcsncat_s()
+  *    http://www.informit.com/articles/article.aspx?p=2036582&seqNum=5
+  */
++#ifdef FOR_DOXYGEN
++errno_t strncat_s(char *restrict dest, rsize_t dmax,
++                  const char *restrict src, rsize_t slen)
++#else
+ EXPORT errno_t _strncat_s_chk(char *restrict dest, rsize_t dmax,
+                               const char *restrict src, rsize_t slen,
+-                              size_t destbos, const size_t srcbos) {
++                              size_t destbos, const size_t srcbos)
++#endif
++{
+     rsize_t orig_dmax;
+     char *orig_dest;
+     const char *overlap_bumper;
+diff --git a/src/str/strncpy_s.c b/src/str/strncpy_s.c
+index bc49c38d..3e595268 100644
+--- a/src/str/strncpy_s.c
++++ b/src/str/strncpy_s.c
+@@ -106,9 +106,15 @@
+  *    http://www.informit.com/articles/article.aspx?p=2036582&seqNum=5
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t strncpy_s(char *restrict dest, rsize_t dmax,
++                  const char *restrict src, rsize_t slen)
++#else
+ EXPORT errno_t _strncpy_s_chk(char *restrict dest, rsize_t dmax,
+                               const char *restrict src, rsize_t slen,
+-                              const size_t destbos, const size_t srcbos) {
++                              const size_t destbos, const size_t srcbos)
++#endif
++{
+     rsize_t orig_dmax;
+     char *orig_dest;
+     const char *overlap_bumper;
+diff --git a/src/str/strnlen_s.c b/src/str/strnlen_s.c
+index d364aeec..1b57003f 100644
+--- a/src/str/strnlen_s.c
++++ b/src/str/strnlen_s.c
+@@ -68,7 +68,12 @@
+  *    http://www.informit.com/articles/article.aspx?p=2036582&seqNum=5
+  *
+  */
+-EXPORT rsize_t _strnlen_s_chk(const char *str, rsize_t smax, size_t strbos) {
++#ifdef FOR_DOXYGEN
++rsize_t strnlen_s(const char *str, rsize_t smax, size_t strbos)
++#else
++EXPORT rsize_t _strnlen_s_chk(const char *str, rsize_t smax, size_t strbos)
++#endif
++{
+     rsize_t count;
+ 
+     if (unlikely(str == NULL)) {
+diff --git a/src/str/strtok_s.c b/src/str/strtok_s.c
+index 2ba30f87..0da3beec 100644
+--- a/src/str/strtok_s.c
++++ b/src/str/strtok_s.c
+@@ -171,10 +171,15 @@
+  *    }
+  * @endcode
+  */
+-
++#ifdef FOR_DOXYGEN
++char *strtok_s(char *restrict dest, rsize_t *restrict dmaxp,
++               const char *restrict delim, char **restrict ptr)
++#else
+ EXPORT char *_strtok_s_chk(char *restrict dest, rsize_t *restrict dmaxp,
+                            const char *restrict delim, char **restrict ptr,
+-                           const size_t destbos) {
++                           const size_t destbos)
++#endif
++{
+     const char *pt;
+     char *ptoken;
+     rsize_t dlen;
+diff --git a/src/str/vsnprintf_s.c b/src/str/vsnprintf_s.c
+index bfb91740..869e431d 100644
+--- a/src/str/vsnprintf_s.c
++++ b/src/str/vsnprintf_s.c
+@@ -89,10 +89,15 @@
+  * @see
+  *    snprintf_s(), sprintf_s(), vsprintf_s(), vsnwprintf_s()
+  */
+-
++#ifdef FOR_DOXYGEN
++int vsnprintf_s(char *restrict dest, rsize_t dmax,
++                const char *restrict fmt, va_list ap)
++#else
+ EXPORT int _vsnprintf_s_chk(char *restrict dest, rsize_t dmax,
+                             const size_t destbos, const char *restrict fmt,
+-                            va_list ap) {
++                            va_list ap)
++#endif
++{
+ 
+     int ret = -1;
+     const char *p;
+diff --git a/src/str/vsprintf_s.c b/src/str/vsprintf_s.c
+index 699ec307..da0f1de5 100644
+--- a/src/str/vsprintf_s.c
++++ b/src/str/vsprintf_s.c
+@@ -96,9 +96,15 @@
+  *    sprintf_s(), vsnprintf_s()
+  */
+ 
++#ifdef FOR_DOXYGEN
++int vsprintf_s(char *restrict dest, const rsize_t dmax,
++               const char *restrict fmt, va_list ap)
++#else
+ EXPORT int _vsprintf_s_chk(char *restrict dest, const rsize_t dmax,
+                            const size_t destbos, const char *restrict fmt,
+-                           va_list ap) {
++                           va_list ap)
++#endif
++{
+ 
+     int ret = -1;
+     const char *p;
+diff --git a/src/wchar/mbsrtowcs_s.c b/src/wchar/mbsrtowcs_s.c
+index e7a52e95..738814ba 100644
+--- a/src/wchar/mbsrtowcs_s.c
++++ b/src/wchar/mbsrtowcs_s.c
+@@ -119,11 +119,18 @@
+  * @see
+  *    mbstowc_s()
+  */
+-
++#ifdef FOR_DOXYGEN
++errno_t mbsrtowcs_s(size_t *restrict retvalp,
++                    wchar_t *restrict dest, rsize_t dmax,
++                    const char **restrict srcp, rsize_t len,
++                    mbstate_t *restrict ps)
++#else
+ EXPORT errno_t _mbsrtowcs_s_chk(size_t *restrict retvalp,
+                                 wchar_t *restrict dest, rsize_t dmax,
+                                 const char **restrict srcp, rsize_t len,
+-                                mbstate_t *restrict ps, const size_t destbos) {
++                                mbstate_t *restrict ps, const size_t destbos)
++#endif
++{
+     wchar_t *orig_dest;
+     mbstate_t orig_ps;
+     errno_t rc;
+diff --git a/src/wchar/mbstowcs_s.c b/src/wchar/mbstowcs_s.c
+index e3f8100d..8d4bf7aa 100644
+--- a/src/wchar/mbstowcs_s.c
++++ b/src/wchar/mbstowcs_s.c
+@@ -118,9 +118,16 @@
+  *    mbsrtowc_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t mbstowcs_s(size_t *restrict retvalp, wchar_t *restrict dest,
++                   rsize_t dmax, const char *restrict src,
++                   rsize_t len)
++#else
+ EXPORT errno_t _mbstowcs_s_chk(size_t *restrict retvalp, wchar_t *restrict dest,
+                                rsize_t dmax, const char *restrict src,
+-                               rsize_t len, const size_t destbos) {
++                               rsize_t len, const size_t destbos)
++#endif
++{
+     wchar_t *orig_dest;
+     errno_t rc;
+ #ifdef HAVE_CYGWIN64
+diff --git a/src/wchar/snwprintf_s.c b/src/wchar/snwprintf_s.c
+index 4e733058..b4a4c0b7 100644
+--- a/src/wchar/snwprintf_s.c
++++ b/src/wchar/snwprintf_s.c
+@@ -111,8 +111,10 @@ any of the arguments corresponding to %s is a null pointer.
+  * @see
+  *    vswprintf_s(), swprintf_s(), vsnprintf_s()
+  */
+-
+-#if defined(SAFECLIB_HAVE_C99) && !defined(TEST_MSVCRT)
++#if defined FOR_DOXYGEN
++int snwprintf_s(wchar_t *restrict dest, rsize_t dmax,
++                const wchar_t *restrict fmt, ...)
++#elif defined(SAFECLIB_HAVE_C99) && !defined(TEST_MSVCRT)
+ EXPORT int _snwprintf_s_chk(wchar_t *restrict dest, rsize_t dmax,
+                             const size_t destbos, const wchar_t *restrict fmt,
+                             ...)
+diff --git a/src/wchar/swprintf_s.c b/src/wchar/swprintf_s.c
+index 824c35bd..be9d47fe 100644
+--- a/src/wchar/swprintf_s.c
++++ b/src/wchar/swprintf_s.c
+@@ -108,8 +108,10 @@ any of the arguments corresponding to %s is a null pointer.
+  * @see
+  *    vswprintf_s(), snwprintf_s(), vsnprintf_s()
+  */
+-
+-#if defined(SAFECLIB_HAVE_C99) && !defined(TEST_MSVCRT)
++#if defined FOR_DOXYGEN
++int swprintf_s(wchar_t *restrict dest, rsize_t dmax,
++               const wchar_t *restrict fmt, ...)
++#elif defined(SAFECLIB_HAVE_C99) && !defined(TEST_MSVCRT)
+ EXPORT int _swprintf_s_chk(wchar_t *restrict dest, rsize_t dmax,
+                            const size_t destbos, const wchar_t *restrict fmt,
+                            ...)
+diff --git a/src/wchar/vsnwprintf_s.c b/src/wchar/vsnwprintf_s.c
+index 462f083b..d0760787 100644
+--- a/src/wchar/vsnwprintf_s.c
++++ b/src/wchar/vsnwprintf_s.c
+@@ -112,10 +112,15 @@ any of the arguments corresponding to %s is a null pointer.
+  * @see
+  *    vswprintf_s(), snwprintf_s(), vsnprintf_s()
+  */
+-
++#ifdef FOR_DOXYGEN
++int vsnwprintf_s(wchar_t *restrict dest, rsize_t dmax,
++                 const wchar_t *restrict fmt, va_list ap)
++#else
+ EXPORT int _vsnwprintf_s_chk(wchar_t *restrict dest, rsize_t dmax,
+                              const size_t destbos, const wchar_t *restrict fmt,
+-                             va_list ap) {
++                             va_list ap)
++#endif
++{
+     wchar_t *p;
+     int ret = -1;
+     const size_t destsz = dmax * sizeof(wchar_t);
+diff --git a/src/wchar/vswprintf_s.c b/src/wchar/vswprintf_s.c
+index 39baa600..920a0615 100644
+--- a/src/wchar/vswprintf_s.c
++++ b/src/wchar/vswprintf_s.c
+@@ -101,10 +101,15 @@ any of the arguments corresponding to %s is a null pointer
+  *    sprintf_s(), vsnprintf_s(), swprintf_s()
+  *
+  */
+-
++#ifdef FOR_DOXYGEN
++int vswprintf_s(wchar_t *restrict dest, rsize_t dmax,
++                const wchar_t *restrict fmt, va_list ap)
++#else
+ EXPORT int _vswprintf_s_chk(wchar_t *restrict dest, rsize_t dmax,
+                             const size_t destbos, const wchar_t *restrict fmt,
+-                            va_list ap) {
++                            va_list ap)
++#endif
++{
+     wchar_t *p;
+     int ret = -1;
+     const size_t destsz = dmax * sizeof(wchar_t);
+diff --git a/src/wchar/wcrtomb_s.c b/src/wchar/wcrtomb_s.c
+index 89b91a49..e87c776c 100644
+--- a/src/wchar/wcrtomb_s.c
++++ b/src/wchar/wcrtomb_s.c
+@@ -120,10 +120,15 @@
+  * @see
+  *    wctomb_s()
+  */
+-
++#ifdef FOR_DOXYGEN
++errno_t wcrtomb_s(size_t *restrict retvalp, char *restrict dest,
++                  rsize_t dmax, wchar_t wc, mbstate_t *restrict ps)
++#else
+ EXPORT errno_t _wcrtomb_s_chk(size_t *restrict retvalp, char *restrict dest,
+                               rsize_t dmax, wchar_t wc, mbstate_t *restrict ps,
+-                              const size_t destbos) {
++                              const size_t destbos)
++#endif
++{
+     size_t len;
+     errno_t rc;
+ 
+diff --git a/src/wchar/wcscat_s.c b/src/wchar/wcscat_s.c
+index 409d5a7e..673e019d 100644
+--- a/src/wchar/wcscat_s.c
++++ b/src/wchar/wcscat_s.c
+@@ -96,9 +96,14 @@
+  *    wcscat_s(), strcpy_s(), strncpy_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t wcscat_s(wchar_t *restrict dest, rsize_t dmax, const wchar_t *restrict src)
++#else
+ EXPORT errno_t _wcscat_s_chk(wchar_t *restrict dest, rsize_t dmax,
+                              const wchar_t *restrict src,
+-                             const size_t destbos) {
++                             const size_t destbos)
++#endif
++{
+     rsize_t orig_dmax;
+     wchar_t *orig_dest;
+     const wchar_t *overlap_bumper;
+diff --git a/src/wchar/wcscpy_s.c b/src/wchar/wcscpy_s.c
+index 80ab366b..f395ecff 100644
+--- a/src/wchar/wcscpy_s.c
++++ b/src/wchar/wcscpy_s.c
+@@ -82,10 +82,13 @@
+  * @see
+  *    wcsncpy(), wmemcpy(), wmemmove(), strncpy_s()
+  */
+-
+-EXPORT errno_t _wcscpy_s_chk(wchar_t *restrict dest, rsize_t dmax,
+-                             const wchar_t *restrict src,
+-                             const size_t destbos) {
++#ifdef FOR_DOXYGEN
++errno_t wcscpy_s(wchar_t *restrict dest, rsize_t dmax, const wchar_t *restrict src)
++#else
++EXPORT errno_t _wcscpy_s_chk(wchar_t *restrict dest, rsize_t dmax, const wchar_t *restrict src,
++                             const size_t destbos)
++#endif
++{
+     rsize_t orig_dmax;
+     wchar_t *orig_dest;
+     const wchar_t *overlap_bumper;
+diff --git a/src/wchar/wcsncat_s.c b/src/wchar/wcsncat_s.c
+index 26a73802..cc7cf1a5 100644
+--- a/src/wchar/wcsncat_s.c
++++ b/src/wchar/wcsncat_s.c
+@@ -101,10 +101,15 @@
+  * @see
+  *    wcscat_s(), strncat_s()
+  */
+-
++#ifdef FOR_DOXYGEN
++errno_t wcsncat_s(wchar_t *restrict dest, rsize_t dmax,
++                  const wchar_t *restrict src, rsize_t slen)
++#else
+ EXPORT errno_t _wcsncat_s_chk(wchar_t *restrict dest, rsize_t dmax,
+                               const wchar_t *restrict src, rsize_t slen,
+-                              const size_t destbos, const size_t srcbos) {
++                              const size_t destbos, const size_t srcbos)
++#endif
++{
+     rsize_t orig_dmax;
+     wchar_t *orig_dest;
+     const wchar_t *overlap_bumper;
+diff --git a/src/wchar/wcsncpy_s.c b/src/wchar/wcsncpy_s.c
+index d4404f3b..84b8ad42 100644
+--- a/src/wchar/wcsncpy_s.c
++++ b/src/wchar/wcsncpy_s.c
+@@ -88,10 +88,15 @@
+  * @see
+  *    wcscpy_s(), strncpy_s(), wmemcpy_s(), wmemmove_s()
+  */
+-
++#ifdef FOR_DOXYGEN
++errno_t wcsncpy_s(wchar_t *restrict dest, rsize_t dmax,
++                  const wchar_t *restrict src, rsize_t slen)
++#else
+ EXPORT errno_t _wcsncpy_s_chk(wchar_t *restrict dest, rsize_t dmax,
+                               const wchar_t *restrict src, rsize_t slen,
+-                              const size_t destbos, const size_t srcbos) {
++                              const size_t destbos, const size_t srcbos)
++#endif
++{
+     rsize_t orig_dmax;
+     wchar_t *orig_dest;
+     const wchar_t *overlap_bumper;
+diff --git a/src/wchar/wcsnlen_s.c b/src/wchar/wcsnlen_s.c
+index 52c59e2a..e9156342 100644
+--- a/src/wchar/wcsnlen_s.c
++++ b/src/wchar/wcsnlen_s.c
+@@ -74,8 +74,12 @@
+  * @see
+  *    strnlen_s(), strnterminate_s()
+  */
+-
+-EXPORT rsize_t _wcsnlen_s_chk(const wchar_t *str, rsize_t smax, size_t strbos) {
++#ifdef FOR_DOXYGEN
++rsize_t wcsnlen_s(const wchar_t *str, rsize_t smax)
++#else
++EXPORT rsize_t _wcsnlen_s_chk(const wchar_t *str, rsize_t smax, size_t strbos)
++#endif
++{
+     const wchar_t *z;
+     rsize_t orig_smax = smax;
+ 
+diff --git a/src/wchar/wcsrtombs_s.c b/src/wchar/wcsrtombs_s.c
+index f83d9a0e..1606300c 100644
+--- a/src/wchar/wcsrtombs_s.c
++++ b/src/wchar/wcsrtombs_s.c
+@@ -126,11 +126,17 @@
+  * @see
+  *    wcrtomb_s(), wcstombs_s()
+  */
+-
++#ifdef FOR_DOXYGEN
++errno_t wcsrtombs_s(size_t *restrict retvalp, char *restrict dest,
++                    rsize_t dmax, const wchar_t **restrict srcp,
++                    rsize_t len, mbstate_t *restrict ps)
++#else
+ EXPORT errno_t _wcsrtombs_s_chk(size_t *restrict retvalp, char *restrict dest,
+                                 rsize_t dmax, const wchar_t **restrict srcp,
+                                 rsize_t len, mbstate_t *restrict ps,
+-                                const size_t destbos) {
++                                const size_t destbos)
++#endif
++{
+     size_t l;
+     errno_t rc;
+ 
+diff --git a/src/wchar/wcstok_s.c b/src/wchar/wcstok_s.c
+index 8c3e1ece..abeb8160 100644
+--- a/src/wchar/wcstok_s.c
++++ b/src/wchar/wcstok_s.c
+@@ -174,10 +174,15 @@
+  *    }
+  * @endcode
+  */
+-
++#ifdef FOR_DOXYGEN
++wchar_t *wcstok_s(wchar_t *restrict dest, rsize_t *restrict dmaxp,
++                  const wchar_t *restrict delim, wchar_t **restrict ptr)
++#else
+ EXPORT wchar_t *_wcstok_s_chk(wchar_t *restrict dest, rsize_t *restrict dmaxp,
+                               const wchar_t *restrict delim,
+-                              wchar_t **restrict ptr, const size_t destbos) {
++                              wchar_t **restrict ptr, const size_t destbos)
++#endif
++{
+     const wchar_t *pt;
+     wchar_t *ptoken;
+     rsize_t dlen;
+diff --git a/src/wchar/wcstombs_s.c b/src/wchar/wcstombs_s.c
+index cd6e2e2c..052d2477 100644
+--- a/src/wchar/wcstombs_s.c
++++ b/src/wchar/wcstombs_s.c
+@@ -120,9 +120,16 @@
+  * @see
+  *    mbstowc_s()
+  */
++#ifdef FOR_DOXYGEN
++errno_t wcstombs_s(size_t *restrict retvalp, char *restrict dest,
++                   rsize_t dmax, const wchar_t *restrict src,
++                   rsize_t len)
++#else
+ EXPORT errno_t _wcstombs_s_chk(size_t *restrict retvalp, char *restrict dest,
+                                rsize_t dmax, const wchar_t *restrict src,
+-                               rsize_t len, const size_t destbos) {
++                               rsize_t len, const size_t destbos)
++#endif
++{
+     size_t l;
+     errno_t rc;
+ #if defined(__CYGWIN__) && defined(__x86_64)
+diff --git a/src/wchar/wctomb_s.c b/src/wchar/wctomb_s.c
+index 179aabb4..1506fc8b 100644
+--- a/src/wchar/wctomb_s.c
++++ b/src/wchar/wctomb_s.c
+@@ -115,8 +115,14 @@
+  * @see
+  *    wcrtomb_s()
+  */
++#ifdef FOR_DOXYGEN
++errno_t wctomb_s(int *restrict retvalp, char *restrict dest,
++                 rsize_t dmax, wchar_t wc)
++#else
+ EXPORT errno_t _wctomb_s_chk(int *restrict retvalp, char *restrict dest,
+-                             rsize_t dmax, wchar_t wc, const size_t destbos) {
++                             rsize_t dmax, wchar_t wc, const size_t destbos)
++#endif
++{
+     int len;
+     errno_t rc;
+ #if defined(__CYGWIN__) && defined(__x86_64)
+diff --git a/src/wchar/wmemcpy_s.c b/src/wchar/wmemcpy_s.c
+index d556ba0b..c0a629a4 100644
+--- a/src/wchar/wmemcpy_s.c
++++ b/src/wchar/wmemcpy_s.c
+@@ -98,10 +98,14 @@
+  *    memcpy_s(), memcpy16_s(), wmemmove_s(), memmove16_s()
+  *
+  */
+-
++#ifdef FOR_DOXYGEN
++errno_t wmemcpy_s(wchar_t *dest, rsize_t dlen, const wchar_t *src, rsize_t count)
++#else
+ EXPORT errno_t _wmemcpy_s_chk(wchar_t *dest, rsize_t dlen, const wchar_t *src,
+                               rsize_t count, const size_t destbos,
+-                              const size_t srcbos) {
++                              const size_t srcbos)
++#endif
++{
+     const rsize_t dmax = dlen * SIZEOF_WCHAR_T;
+     const rsize_t smax = count * SIZEOF_WCHAR_T;
+ 
+diff --git a/src/wchar/wmemmove_s.c b/src/wchar/wmemmove_s.c
+index b24fa695..fcf08757 100644
+--- a/src/wchar/wmemmove_s.c
++++ b/src/wchar/wmemmove_s.c
+@@ -104,9 +104,14 @@
+  *    memmove_s(), memmove16_s(), memcpy_s(), memcpy16_s() memcpy32_s()
+  *
+  */
++#ifdef FOR_DOXYGEN
++errno_t wmemmove_s(wchar_t *dest, rsize_t dlen, const wchar_t *src, rsize_t count)
++#else
+ EXPORT errno_t _wmemmove_s_chk(wchar_t *dest, rsize_t dlen, const wchar_t *src,
+                                rsize_t count, const size_t destbos,
+-                               const size_t srcbos) {
++                               const size_t srcbos)
++#endif
++{
+     const rsize_t dmax = dlen * SIZEOF_WCHAR_T;
+     const rsize_t smax = count * SIZEOF_WCHAR_T;
+ 
diff --git a/meta-oe/recipes-core/safec/safec/0002-man-fix-various-doxygen-warnings.patch b/meta-oe/recipes-core/safec/safec/0002-man-fix-various-doxygen-warnings.patch
new file mode 100644
index 000000000..fa4b13218
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0002-man-fix-various-doxygen-warnings.patch
@@ -0,0 +1,438 @@ 
+From a171e13459a043d95425095fb2fa16f63c6cd726 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Wed, 2 Sep 2020 08:48:25 +0200
+Subject: [PATCH] man: fix various doxygen warnings
+
+* duplicate return values.
+---
+ src/extmem/memchr_s.c      |  6 +++---
+ src/extmem/memcpy16_s.c    |  9 ++++-----
+ src/extmem/memcpy32_s.c    |  9 ++++-----
+ src/extmem/memmove16_s.c   |  7 +++----
+ src/extmem/memmove32_s.c   |  7 +++----
+ src/extmem/memrchr_s.c     |  5 ++---
+ src/extmem/memset16_s.c    | 12 ++++++------
+ src/extmem/memset32_s.c    | 12 ++++++------
+ src/extstr/strchr_s.c      |  3 +--
+ src/extstr/strnset_s.c     |  3 +--
+ src/extstr/strrchr_s.c     |  3 +--
+ src/extstr/strset_s.c      |  3 +--
+ src/extwchar/wcsnatcmp_s.c |  3 +--
+ src/io/gets_s.c            |  4 ++--
+ src/mem/memcpy_s.c         |  2 +-
+ src/mem/memmove_s.c        |  2 +-
+ src/os/ctime_s.c           | 10 +++++-----
+ src/wchar/vfwscanf_s.c     |  5 +++--
+ src/wchar/vwscanf_s.c      |  5 +++--
+ src/wchar/wcrtomb_s.c      |  4 +---
+ src/wchar/wcsrtombs_s.c    |  3 ++-
+ 21 files changed, 54 insertions(+), 63 deletions(-)
+
+diff --git a/src/extmem/memchr_s.c b/src/extmem/memchr_s.c
+index 91b6265c..4f166147 100644
+--- a/src/extmem/memchr_s.c
++++ b/src/extmem/memchr_s.c
+@@ -55,11 +55,11 @@
+  * @pre  dmax shall not be greater than RSIZE_MAX_MEM and sizeof(dest)
+  * @pre  ch shall not be greater than 255
+  *
+- * @retval  EOK        when successfully character found.
++ * @retval  EOK        when the character was successfully found.
+  * @retval  ESNULLP    when dest/result is a NULL pointer
+  * @retval  ESZEROL    when dmax = 0
+- * @retval  ESLEMAX    when dmax > RSIZE_MAX_MEM or > sizeof(dest)
+- * @retval  ESLEMAX    when ch > 255
++ * @retval  ESLEMAX    when dmax > RSIZE_MAX_MEM or > sizeof(dest).
++ *                     Or when ch > 255
+  * @retval  ESNOTFND   when ch not found in dest
+  *
+  * @see
+diff --git a/src/extmem/memcpy16_s.c b/src/extmem/memcpy16_s.c
+index 6aefffbb..4c1f483c 100644
+--- a/src/extmem/memcpy16_s.c
++++ b/src/extmem/memcpy16_s.c
+@@ -67,13 +67,12 @@
+  * @retval  EOK         when operation is successful or slen = 0
+  * @retval  ESNULLP     when dest/src is NULL POINTER
+  * @retval  ESZEROL     when dmax = ZERO
+- * @retval  ESLEMAX     when dmax > RSIZE_MAX_MEM
++ * @retval  ESLEMAX     when dmax > RSIZE_MAX_MEM or slen > RSIZE_MAX_MEM16
+  * @retval  EOVERFLOW   when dmax > size of dest (optionally, when the compiler
+- *                      knows the object_size statically)
++ *                      knows the object_size statically).
++ *                      Or when 2*slen > size of src (optionally, when the
++ *                      compiler knows the object_size statically)
+  * @retval  ESLEWRNG    when dmax != sizeof(dest) and --enable-error-dmax
+- * @retval  ESLEMAX     when slen > RSIZE_MAX_MEM16
+- * @retval  EOVERFLOW   when 2*slen > size of src (optionally, when the
+- * compiler knows the object_size statically)
+  * @retval  ESNOSPC     when 2*slen > dmax
+  * @retval  ESOVRLP     when src memory overlaps dest
+  *
+diff --git a/src/extmem/memcpy32_s.c b/src/extmem/memcpy32_s.c
+index 4c6ebcad..4c50dcd6 100644
+--- a/src/extmem/memcpy32_s.c
++++ b/src/extmem/memcpy32_s.c
+@@ -67,13 +67,12 @@
+  * @retval  EOK         when operation is successful or slen = 0
+  * @retval  ESNULLP     when dest/src is NULL POINTER
+  * @retval  ESZEROL     when dmax = ZERO
+- * @retval  ESLEMAX     when dmax > RSIZE_MAX_MEM
++ * @retval  ESLEMAX     when dmax > RSIZE_MAX_MEM or slen > RSIZE_MAX_MEM32
+  * @retval  EOVERFLOW   when dmax > size of dest (optionally, when the compiler
+- *                      knows the object_size statically)
++ *                      knows the object_size statically).
++ *                      Or when 4*slen > size of src (optionally, when the
++ *                      compiler knows the object_size statically)
+  * @retval  ESLEWRNG    when dmax != sizeof(dest) and --enable-error-dmax
+- * @retval  ESLEMAX     when slen > RSIZE_MAX_MEM32
+- * @retval  EOVERFLOW   when 4*slen > size of src (optionally, when the
+- * compiler knows the object_size statically)
+  * @retval  ESNOSPC     when 4*slen > dmax
+  * @retval  ESOVRLP     when src memory overlaps dest
+  *
+diff --git a/src/extmem/memmove16_s.c b/src/extmem/memmove16_s.c
+index c2a3449e..595179e9 100644
+--- a/src/extmem/memmove16_s.c
++++ b/src/extmem/memmove16_s.c
+@@ -69,13 +69,12 @@
+  * @retval  EOK         when operation is successful or slen = 0
+  * @retval  ESNULLP     when dest/src is NULL POINTER
+  * @retval  ESZEROL     when dmax = ZERO
+- * @retval  ESLEMAX     when dmax > RSIZE_MAX_MEM
++ * @retval  ESLEMAX     when dmax > RSIZE_MAX_MEM or slen > RSIZE_MAX_MEM16
+  * @retval  EOVERFLOW   when dmax > size of dest (optionally, when the
++ *                      compiler knows the object_size statically).
++ *                      Or when 2*slen > size of src (optionally, when the
+  *                      compiler knows the object_size statically)
+  * @retval  ESLEWRNG    when dmax != sizeof(dest) and --enable-error-dmax
+- * @retval  ESLEMAX     when slen > RSIZE_MAX_MEM16
+- * @retval  EOVERFLOW   when 2*slen > size of src (optionally, when the
+- *                      compiler knows the object_size statically)
+  * @retval  ESNOSPC     when 2*slen > dmax
+  *
+  * @see
+diff --git a/src/extmem/memmove32_s.c b/src/extmem/memmove32_s.c
+index 2cc60c94..3c8e7e42 100644
+--- a/src/extmem/memmove32_s.c
++++ b/src/extmem/memmove32_s.c
+@@ -71,13 +71,12 @@
+  * @retval  EOK         when operation is successful or slen = 0
+  * @retval  ESNULLP     when dest/src is NULL POINTER
+  * @retval  ESZEROL     when dmax = ZERO
+- * @retval  ESLEMAX     when dmax > RSIZE_MAX_MEM
++ * @retval  ESLEMAX     when dmax > RSIZE_MAX_MEM or slen > RSIZE_MAX_MEM32
+  * @retval  EOVERFLOW   when dmax > size of dest (optionally, when the
++ *                      compiler knows the object_size statically).
++ *                      Or when 4*slen > size of src (optionally, when the
+  *                      compiler knows the object_size statically)
+  * @retval  ESLEWRNG    when dmax != sizeof(dest) and --enable-error-dmax
+- * @retval  ESLEMAX     when slen > RSIZE_MAX_MEM32
+- * @retval  EOVERFLOW   when 4*slen > size of src (optionally, when the
+- *                      compiler knows the object_size statically)
+  * @retval  ESNOSPC     when 4*slen > dmax
+  *
+  * @see
+diff --git a/src/extmem/memrchr_s.c b/src/extmem/memrchr_s.c
+index 2ffeabaa..e0a5b84c 100644
+--- a/src/extmem/memrchr_s.c
++++ b/src/extmem/memrchr_s.c
+@@ -62,14 +62,13 @@ extern void *memrchr(const void *, int, size_t);
+  * @pre  dmax shall not be greater than RSIZE_MAX_MEM and size of dest
+  * @pre  ch shall not be greater than 255
+  *
+- * @retval  EOK        when successfully character found.
++ * @retval  EOK        when the character was successfully found.
+  * @retval  ESNULLP    when dest/result is a NULL pointer
+  * @retval  ESZEROL    when dmax = 0
+- * @retval  ESLEMAX    when dmax > RSIZE_MAX_MEM
++ * @retval  ESLEMAX    when dmax > RSIZE_MAX_MEM or ch > 255
+  * @retval  EOVERFLOW  when dmax > size of dest (optionally, when the compiler
+  *                     knows the object_size statically)
+  * @retval  ESLEWRNG   when dmax != size of dest and --enable-error-dmax
+- * @retval  ESLEMAX    when ch > 255
+  * @retval  ESNOTFND   when ch not found in dest
+  *
+  * @see
+diff --git a/src/extmem/memset16_s.c b/src/extmem/memset16_s.c
+index 1da0082b..acc6abc3 100644
+--- a/src/extmem/memset16_s.c
++++ b/src/extmem/memset16_s.c
+@@ -59,17 +59,17 @@
+  * @pre  n shall not be greater than RSIZE_MAX_MEM16.
+  * @pre  2*n may not be greater than dmax
+  *
+- * @return  If there is a runtime-constraints violation, and if dest is not a
+- * null pointer, and if dmax is not larger than RSIZE_MAX_MEM, then, before
+- *          reporting the runtime-constraints violation, memset16_s() copies
+- *          dmax bytes to the destination.
++ * @return  If there is a runtime-constraints violation, and if dest is
++ *          not a null pointer, and if dmax is not larger than
++ *          RSIZE_MAX_MEM, then, before reporting the
++ *          runtime-constraints violation, memset16_s() copies dmax
++ *          bytes to the destination.
+  * @retval  EOK         when operation is successful or n = 0
+  * @retval  ESNULLP     when dest is NULL POINTER
+- * @retval  ESLEMAX     when dmax > RSIZE_MAX_MEM
++ * @retval  ESLEMAX     when dmax > RSIZE_MAX_MEM or n > RSIZE_MAX_MEM16
+  * @retval  EOVERFLOW   when dmax > size of dest (optionally, when the compiler
+  *                      knows the object_size statically)
+  * @retval  ESLEWRNG    when dmax != size of dest and --enable-error-dmax
+- * @retval  ESLEMAX     when n > RSIZE_MAX_MEM16
+  * @retval  ESNOSPC     when 2*n > dmax
+  *
+  * @see
+diff --git a/src/extmem/memset32_s.c b/src/extmem/memset32_s.c
+index 11733cb2..dbf42eeb 100644
+--- a/src/extmem/memset32_s.c
++++ b/src/extmem/memset32_s.c
+@@ -59,17 +59,17 @@
+  * @pre  n shall not be greater than RSIZE_MAX_MEM32.
+  * @pre  4*n may not be greater than dmax.
+  *
+- * @return  If there is a runtime-constraints violation, and if dest is not a
+- * null pointer, and if dmax is not larger than RSIZE_MAX_MEM, then, before
+- *          reporting the runtime-constraints violation, memset32_s() copies
+- *          dmax bytes to the destination.
++ * @return  If there is a runtime-constraints violation, and if dest is
++ *          not a null pointer, and if dmax is not larger than
++ *          RSIZE_MAX_MEM, then, before reporting the
++ *          runtime-constraints violation, memset32_s() copies dmax
++ *          bytes to the destination.
+  * @retval  EOK         when operation is successful or n = 0
+  * @retval  ESNULLP     when dest is NULL POINTER
+- * @retval  ESLEMAX     when dmax > RSIZE_MAX_MEM
++ * @retval  ESLEMAX     when dmax > RSIZE_MAX_MEM or n > RSIZE_MAX_MEM32
+  * @retval  EOVERFLOW   when dmax > size of dest (optionally, when the compiler
+  *                      knows the object_size statically)
+  * @retval  ESLEWRNG    when dmax != size of dest and --enable-error-dmax
+- * @retval  ESLEMAX     when n > RSIZE_MAX_MEM32
+  * @retval  ESNOSPC     when 4*n > dmax
+  *
+  * @see
+diff --git a/src/extstr/strchr_s.c b/src/extstr/strchr_s.c
+index 2229d2a2..5fd84d86 100644
+--- a/src/extstr/strchr_s.c
++++ b/src/extstr/strchr_s.c
+@@ -59,11 +59,10 @@
+  * @retval  EOK        when successfully character found.
+  * @retval  ESNULLP    when dest/resultp is a NULL pointer
+  * @retval  ESZEROL    when dmax = 0
+- * @retval  ESLEMAX    when dmax > RSIZE_MAX_STR
++ * @retval  ESLEMAX    when dmax > RSIZE_MAX_STR, or ch > 255
+  * @retval  EOVERFLOW  when dmax > size of dest (optionally, when the compiler
+  *                     knows the object_size statically)
+  * @retval  ESLEWRNG   when dmax != size of dest and --enable-error-dmax
+- * @retval  ESLEMAX    when ch > 255
+  * @retval  ESNOTFND   when ch not found in dest
+  *
+  * @see
+diff --git a/src/extstr/strnset_s.c b/src/extstr/strnset_s.c
+index 99f36109..1ede9888 100644
+--- a/src/extstr/strnset_s.c
++++ b/src/extstr/strnset_s.c
+@@ -64,8 +64,7 @@
+  * @retval  EOK         when successful
+  * @retval  ESNULLP     when dest is NULL pointer
+  * @retval  ESZEROL     when dmax = 0
+- * @retval  ESLEMAX     when value > 255
+- * @retval  ESLEMAX     when dmax > RSIZE_MAX_STR
++ * @retval  ESLEMAX     when value > 255 or dmax > RSIZE_MAX_STR
+  * @retval  EOVERFLOW   when dmax > size of dest (optionally, when the compiler
+  *                      knows the object_size statically)
+  * @retval  ESLEWRNG    when dmax != sizeof(dest) and --enable-error-dmax
+diff --git a/src/extstr/strrchr_s.c b/src/extstr/strrchr_s.c
+index 3e056ca6..e7f5178d 100644
+--- a/src/extstr/strrchr_s.c
++++ b/src/extstr/strrchr_s.c
+@@ -60,11 +60,10 @@
+  * @retval  EOK        when successfully character found.
+  * @retval  ESNULLP    when dest/resultp is a NULL pointer
+  * @retval  ESZEROL    when dmax = 0 or strnlen_s = 0
+- * @retval  ESLEMAX    when dmax > RSIZE_MAX_STR
++ * @retval  ESLEMAX    when dmax > RSIZE_MAX_STR or ch > 255
+  * @retval  EOVERFLOW  when dmax > size of dest (optionally, when the compiler
+  *                     knows the object_size statically)
+  * @retval  ESLEWRNG   when dmax != size of dest and --enable-error-dmax
+- * @retval  ESLEMAX    when ch > 255
+  * @retval  ESNOTFND   when ch not found in dest
+  *
+  * @see
+diff --git a/src/extstr/strset_s.c b/src/extstr/strset_s.c
+index 99ec7cdd..4100c881 100644
+--- a/src/extstr/strset_s.c
++++ b/src/extstr/strset_s.c
+@@ -62,8 +62,7 @@
+  * @retval  EOK         when successful
+  * @retval  ESNULLP     when dest is NULL pointer
+  * @retval  ESZEROL     when dmax = 0
+- * @retval  ESLEMAX     when value > 255
+- * @retval  ESLEMAX     when dmax > RSIZE_MAX_STR
++ * @retval  ESLEMAX     when value > 255 or dmax > RSIZE_MAX_STR
+  * @retval  EOVERFLOW   when dmax > size of dest (optionally, when the compiler
+  *                      knows the object_size statically)
+  * @retval  ESLEWRNG    when dmax != sizeof(dest) and --enable-error-dmax
+diff --git a/src/extwchar/wcsnatcmp_s.c b/src/extwchar/wcsnatcmp_s.c
+index f27b8f3d..9af8ef1f 100644
+--- a/src/extwchar/wcsnatcmp_s.c
++++ b/src/extwchar/wcsnatcmp_s.c
+@@ -73,11 +73,10 @@
+  * @retval  EOK        when comparison is complete
+  * @retval  ESUNTERM   when dest or src is unterminated, or dmax is too small.
+  * @retval  ESNULLP    when dest/src/resultp is NULL pointer
+- * @retval  ESZEROL    when dmax = 0
+  * @retval  ESZEROL    when dmax/smax = 0
+  * @retval  ESLEMAX    when dmax/smax > RSIZE_MAX_WSTR
+  * @retval  EOVERFLOW  when dmax/smax > size of dest/src (optionally, when the
+- * compiler knows the object_size statically)
++ *                     compiler knows the object_size statically)
+  * @retval  ESLEWRNG   when dmax != size of dest and --enable-error-dmax
+  *
+  * @see
+diff --git a/src/io/gets_s.c b/src/io/gets_s.c
+index 382945d0..05366dd1 100644
+--- a/src/io/gets_s.c
++++ b/src/io/gets_s.c
+@@ -85,9 +85,9 @@
+  * @return  If there is a runtime-constraint violation, then if dest is
+  *          not a null pointer and dmax is greater than zero and not
+  *          greater than RSIZE_MAX_STR, then gets_s nulls dest.
+- * @retval  >0         when successful operation, all the characters from src
++ * @retval  int >0     when on successful operation, all the characters from src
+  *                     were appended to dest and the result in dest is null
+- terminated.
++ *                     terminated.
+  * @retval  0 + errno=ESNULLP    when dest is a NULL pointer
+  * @retval  0 + errno=ESZEROL    when dmax = 0
+  * @retval  0 + errno=ESLEMAX    when dmax > RSIZE_MAX_STR
+diff --git a/src/mem/memcpy_s.c b/src/mem/memcpy_s.c
+index 742070cb..5a287786 100644
+--- a/src/mem/memcpy_s.c
++++ b/src/mem/memcpy_s.c
+@@ -79,7 +79,7 @@
+  * @retval  ESZEROL     when dmax = 0
+  * @retval  ESLEMAX     when dmax/slen > RSIZE_MAX_MEM
+  * @retval  EOVERFLOW   when dmax/slen > size of dest/src (optionally, when the
+- * compiler knows the object_size statically)
++ *                      compiler knows the object_size statically)
+  * @retval  ESLEWRNG    when dmax != size of dest and --enable-error-dmax
+  * @retval  ESNOSPC     when dmax < slen
+  * @retval  ESOVRLP     when src memory overlaps dst
+diff --git a/src/mem/memmove_s.c b/src/mem/memmove_s.c
+index 2d844497..e1dfbe17 100644
+--- a/src/mem/memmove_s.c
++++ b/src/mem/memmove_s.c
+@@ -83,7 +83,7 @@
+  * @retval  ESZEROL     when dmax = 0
+  * @retval  ESLEMAX     when dmax/slen > RSIZE_MAX_MEM
+  * @retval  EOVERFLOW   when dmax/slen > size of dest/src (optionally, when the
+- * compiler knows the object_size statically)
++ *                      compiler knows the object_size statically)
+  * @retval  ESLEWRNG    when dmax != size of dest and --enable-error-dmax
+  * @retval  ESNOSPC     when dmax < slen
+  *
+diff --git a/src/os/ctime_s.c b/src/os/ctime_s.c
+index e50b5fab..277c91ef 100644
+--- a/src/os/ctime_s.c
++++ b/src/os/ctime_s.c
+@@ -82,19 +82,19 @@ char *ctime_r(const time_t *, char *);
+  * @retval  EOK        on success
+  * @retval  ESNULLP    when dest or tm is a NULL pointer
+  * @retval  ESLEMIN    when dmax < 26 or *timer < 0
+- * @retval  ESLEMAX    when dmax > RSIZE_MAX_STR
++ * @retval  ESLEMAX    when dmax > RSIZE_MAX_STR.
++ *                     Or when *timer > 313360441200L, the year 10000,
++ *                     resp. LONG_MAX on 32bit systems.
+  * @retval  EOVERFLOW  when dmax > size of dest (optionally, when the compiler
+  *                     knows the object_size statically)
+  * @retval  ESLEWRNG   when dmax != size of dest and --enable-error-dmax
+- * @retval  ESLEMAX    when *timer > 313360441200L, the year 10000,
+- *                     resp. LONG_MAX on 32bit systems
+  * @retval  ESNOSPC    when dmax is too small for the result buffer
+  * @retval  -1         when ctime_r or ctime returned NULL
+  *
+  * @note
+  *    ctime returns a pointer to static data and is not thread-safe. In
+- * addition, it modifies the static tm object which may be shared with gmtime
+- * and localtime. POSIX marks this function obsolete and recommends strftime
++ *    addition, it modifies the static tm object which may be shared with gmtime
++ *    and localtime. POSIX marks this function obsolete and recommends strftime
+  *    instead. The C standard also recommends strftime instead of ctime and
+  *    ctime_s because strftime is more flexible and locale-sensitive.  The
+  *    behavior of ctime may be undefined for the values of time_t that result
+diff --git a/src/wchar/vfwscanf_s.c b/src/wchar/vfwscanf_s.c
+index 5554c3b5..d3e36122 100644
+--- a/src/wchar/vfwscanf_s.c
++++ b/src/wchar/vfwscanf_s.c
+@@ -79,7 +79,7 @@ any of the arguments corresponding to %s is a null pointer.
+  * @todo   When an argument is not assigned to, it should be zero'd
+  *         (not yet).
+  *
+- * @retval  > 0  on success, the number of arguments assigned
++ * @retval  int >0  on success, the number of arguments assigned
+  * @retval  EOF  on error
+  *
+  * @see
+@@ -88,7 +88,8 @@ any of the arguments corresponding to %s is a null pointer.
+  */
+ 
+ EXPORT int vfwscanf_s(FILE *restrict stream, const wchar_t *restrict fmt,
+-                      va_list ap) {
++                      va_list ap)
++{
+     wchar_t *p;
+     int ret;
+ 
+diff --git a/src/wchar/vwscanf_s.c b/src/wchar/vwscanf_s.c
+index aec4cedc..57d502ff 100644
+--- a/src/wchar/vwscanf_s.c
++++ b/src/wchar/vwscanf_s.c
+@@ -75,7 +75,7 @@ any of the arguments corresponding to %s is a null pointer.
+  *         was assigned or if there is a runtime constraint
+  *         violation.
+  *
+- * @retval  > 0  on success, the number of arguments assigned
++ * @retval  int >0  on success, the number of arguments assigned
+  * @retval  EOF  on error
+  *
+  * @see
+@@ -83,7 +83,8 @@ any of the arguments corresponding to %s is a null pointer.
+  *
+  */
+ 
+-EXPORT int vwscanf_s(const wchar_t *restrict fmt, va_list ap) {
++EXPORT int vwscanf_s(const wchar_t *restrict fmt, va_list ap)
++{
+     wchar_t *p;
+     int ret;
+ 
+diff --git a/src/wchar/wcrtomb_s.c b/src/wchar/wcrtomb_s.c
+index e87c776c..24531488 100644
+--- a/src/wchar/wcrtomb_s.c
++++ b/src/wchar/wcrtomb_s.c
+@@ -111,10 +111,8 @@
+  * @retval  EOVERFLOW  when dmax > size of dest (optionally, when the compiler
+  *                     knows the object_size statically), unless dest is NULL
+  * @retval  ESLEMAX    when dmax > RSIZE_MAX_STR, unless dest is NULL
+- * @retval  EOVERFLOW  when dmax > size of dest (optionally, when the compiler
+- *                     knows the object_size statically)
+  * @retval  ESLEWRNG   when dmax != size of dest and --enable-error-dmax and
+- * dest != NULL
++ *                     dest != NULL
+  * @retval  ESNOSPC    when dmax is smaller than the number of required bytes
+  *
+  * @see
+diff --git a/src/wchar/wcsrtombs_s.c b/src/wchar/wcsrtombs_s.c
+index 1606300c..02397d7e 100644
+--- a/src/wchar/wcsrtombs_s.c
++++ b/src/wchar/wcsrtombs_s.c
+@@ -115,7 +115,8 @@
+  * @retval  ESZEROL    when dmax = 0, unless dest is NULL
+  * @retval  ESLEMAX    when dmax > RSIZE_MAX_STR, unless dest is NULL
+  * @retval  EOVERFLOW  when dmax or len > size of dest (optionally, when the
+- * compiler knows the object_size statically), unless dest is NULL
++ *                     compiler knows the object_size statically), unless dest
++ *                     is NULL
+  * @retval  ESLEWRNG   when dmax != size of dest and --enable-error-dmax
+  * @retval  ESOVRLP    when *srcp and dest overlap
+  * @retval  ESNOSPC    when there is no null character in the first dmax
diff --git a/meta-oe/recipes-core/safec/safec/0003-v02092020-3.6.0-release.patch b/meta-oe/recipes-core/safec/safec/0003-v02092020-3.6.0-release.patch
new file mode 100644
index 000000000..5e3e0f889
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0003-v02092020-3.6.0-release.patch
@@ -0,0 +1,24 @@ 
+From 6d921f4e95586897fce98202ada7da82e0a6e97d Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Wed, 2 Sep 2020 09:18:04 +0200
+Subject: [PATCH] v02092020 3.6.0 release
+
+---
+ ChangeLog | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/ChangeLog b/ChangeLog
+index 563e0329..147b5feb 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -1,6 +1,10 @@
+ 
+         ChangeLog file for safeclib
+ 
++Changes in v02092020 3.6.0
++        - Improved generated man pages. Describe not the private _chk functions,
++          but the public _s functions. Merge duplicate return values.
++
+ Changes in v31082020 3.6.0
+         - Added smokers for more architectures and distros:
+           ubuntu, debian, centos, fedora, rhel /
diff --git a/meta-oe/recipes-core/safec/safec/0004-drone-no-fedora-modular-on-arm32.patch b/meta-oe/recipes-core/safec/safec/0004-drone-no-fedora-modular-on-arm32.patch
new file mode 100644
index 000000000..4af3f5c3c
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0004-drone-no-fedora-modular-on-arm32.patch
@@ -0,0 +1,34 @@ 
+From b25770ba512a887c9d6655d8217b10b13ba6f89f Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Thu, 3 Sep 2020 17:13:45 +0200
+Subject: [PATCH] drone: no fedora modular on arm32
+
+no idea why this fails.
+use the debian image, as with travis.
+---
+ .drone.yml | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/.drone.yml b/.drone.yml
+index 473b12dc..31b0494f 100644
+--- a/.drone.yml
++++ b/.drone.yml
+@@ -28,12 +28,14 @@ platform:
+   os: linux
+   arch: arm
+ steps:
+-  - name: arm32v7-fedora
+-    image: arm32v7/fedora
++  - name: arm32v7-debian
++    image: arm32v7/debian
+     commands:
+       - uname -a
+-      - dnf install -y gcc make file git automake autoconf which
+-                       libtool perl-Text-Diff pkgconf-pkg-config
++      - apt-get update -qq
++      - apt-get install -yq --no-install-suggests --no-install-recommends
++                build-essential file gcc make autotools-dev automake autoconf libtool
++                libtext-diff-perl pkg-config
+       - build-aux/autogen.sh
+       - build-aux/conf-make-check.sh
+ trigger:
diff --git a/meta-oe/recipes-core/safec/safec/0005-document-new-CI-s-tested-archs.patch b/meta-oe/recipes-core/safec/safec/0005-document-new-CI-s-tested-archs.patch
new file mode 100644
index 000000000..70043ea8f
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0005-document-new-CI-s-tested-archs.patch
@@ -0,0 +1,32 @@ 
+From 5d5c492eaa29fa357274d3f7d7912497d73db5a9 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Thu, 3 Sep 2020 17:42:41 +0200
+Subject: [PATCH] document new CI's, tested archs
+
+---
+ README | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/README b/README
+index 66e65f9c..77ca06a2 100644
+--- a/README
++++ b/README
+@@ -257,10 +257,16 @@ Tested Platforms
+ - cygwin32 gcc (newlib)
+ - cygwin64 gcc -std=c99 (newlib)
+ - freebsd 10 - 12 amd64
+-- arm-linux-gnueabihf cross-compiled and tested under qemu (under darwin and debian)
++- linux docker images under qemu:
++  i386/debian, x86_64/rhel, arm32v7/debian, aarch64: arm64v8/{debian,centos,rhel,fedora},
++  s390x/fedora (the only big endian test I could find), ppc64le/{debian,ubuntu,fedora,centos,rhel}
+ - User Mode Linux (UML), Linux kernel version v3.5.3 w/ Debian Squeeze rootfs
+ 
+-with most available compilers. See `build-aux/smoke.sh`.
++with most available compilers. See `build-aux/smoke.sh` and the various CI configs.
++- https://travis-ci.org/github/rurban/safeclib/
++- https://ci.appveyor.com/project/rurban/safeclib/
++- https://cirrus-ci.com/github/rurban/safeclib
++- https://cloud.drone.io/rurban/safeclib/
+ 
+ Known Issues
+ ------------
diff --git a/meta-oe/recipes-core/safec/safec/0006-man-improved-s-n-printf_s.patch b/meta-oe/recipes-core/safec/safec/0006-man-improved-s-n-printf_s.patch
new file mode 100644
index 000000000..98b850cd8
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0006-man-improved-s-n-printf_s.patch
@@ -0,0 +1,42 @@ 
+From a43d2b146614507e4f4aae6521fbaa2bd84bb4dc Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Fri, 4 Sep 2020 14:18:33 +0200
+Subject: [PATCH] man: improved s{n,}printf_s
+
+---
+ src/str/snprintf_s.c | 5 +++--
+ src/str/sprintf_s.c  | 5 +++--
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/src/str/snprintf_s.c b/src/str/snprintf_s.c
+index f74f6826..9f27d210 100644
+--- a/src/str/snprintf_s.c
++++ b/src/str/snprintf_s.c
+@@ -90,8 +90,9 @@ any of the arguments corresponding to %s is a null pointer
+  * @see
+  *    sprintf_s(), vsnprintf_s(), snwprintf_s()
+  */
+-
+-#ifdef SAFECLIB_HAVE_C99
++#if defined FOR_DOXYGEN
++int sprintf_s(char *restrict dest, rsize_t dmax, const char *restrict fmt, ...)
++#elif defined SAFECLIB_HAVE_C99
+ EXPORT int _snprintf_s_chk(char *restrict dest, rsize_t dmax,
+                            const size_t destbos, const char *restrict fmt, ...)
+ #else
+diff --git a/src/str/sprintf_s.c b/src/str/sprintf_s.c
+index 50875869..1c12b1c8 100644
+--- a/src/str/sprintf_s.c
++++ b/src/str/sprintf_s.c
+@@ -96,8 +96,9 @@
+  * @see
+  *    vsprintf_s(), snprintf_s()
+  */
+-
+-#ifdef SAFECLIB_HAVE_C99
++#if defined FOR_DOXYGEN
++int sprintf_s(char *restrict dest, rsize_t dmax, const char *restrict fmt, ...)
++#elif defined SAFECLIB_HAVE_C99
+ EXPORT int _sprintf_s_chk(char *restrict dest, const rsize_t dmax,
+                           const size_t destbos, const char *restrict fmt, ...)
+ #else
diff --git a/meta-oe/recipes-core/safec/safec/0007-mem_prim_set-remove-duplicate-MEMORY_BARRIER.patch b/meta-oe/recipes-core/safec/safec/0007-mem_prim_set-remove-duplicate-MEMORY_BARRIER.patch
new file mode 100644
index 000000000..63cbae4a8
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0007-mem_prim_set-remove-duplicate-MEMORY_BARRIER.patch
@@ -0,0 +1,31 @@ 
+From d870926392b8728115a3d9bb7cb789def374bec2 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Wed, 9 Sep 2020 11:00:41 +0200
+Subject: [PATCH] mem_prim_set: remove duplicate MEMORY_BARRIER
+
+They are already in all memset/zero/cpy calls. we dont need it twice, keep
+mem_prim_set fast
+---
+ src/mem/mem_primitives_lib.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/src/mem/mem_primitives_lib.c b/src/mem/mem_primitives_lib.c
+index 49e7641e..6890d8bf 100644
+--- a/src/mem/mem_primitives_lib.c
++++ b/src/mem/mem_primitives_lib.c
+@@ -160,7 +160,6 @@ void mem_prim_set(void *dest, uint32_t len, uint8_t value) {
+         *dp = value;
+     }
+ 
+-    MEMORY_BARRIER;
+     return;
+ }
+ 
+@@ -267,7 +266,6 @@ void mem_prim_set(void *dest, uint32_t len, uint8_t value) {
+         *dp = value;
+     }
+ 
+-    MEMORY_BARRIER;
+     return;
+ }
+ 
diff --git a/meta-oe/recipes-core/safec/safec/0008-perf_memset_s-add-mem_prim_set-test-without-MEMORY_B.patch b/meta-oe/recipes-core/safec/safec/0008-perf_memset_s-add-mem_prim_set-test-without-MEMORY_B.patch
new file mode 100644
index 000000000..c6bc88678
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0008-perf_memset_s-add-mem_prim_set-test-without-MEMORY_B.patch
@@ -0,0 +1,101 @@ 
+From 5c131595b20fd72aaebae6080be0b5bd6db6e307 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Wed, 9 Sep 2020 11:13:18 +0200
+Subject: [PATCH] perf_memset_s: add mem_prim_set test without MEMORY_BARRIER
+
+to test the MEMORY_BARRIER overhead and compare the fast mem_prim_set
+with native memset.
+
+gcc and clang overheads now both bad: 56/51% slower.
+apparently glibc got faster in between.
+---
+ tests/Makefile.am     |  1 +
+ tests/perf_memset_s.c | 31 +++++++++++++++++++++++++------
+ 2 files changed, 26 insertions(+), 6 deletions(-)
+
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 0102363e..b184b9b5 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -279,6 +279,7 @@ endif
+ 
+ p_memcpy_s_SOURCES            = perf_memcpy_s.c $(SAFEC_TEST_COMMON)
+ p_memset_s_SOURCES            = perf_memset_s.c $(SAFEC_TEST_COMMON)
++p_memset_s_CFLAGS             = $(CFLAGS) $(AM_CFLAGS) -I$(top_srcdir)/src
+ p_strcpy_s_SOURCES            = perf_strcpy_s.c $(SAFEC_TEST_COMMON)
+ 
+ t_memcpy_s_SOURCES            = test_memcpy_s.c $(SAFEC_TEST_COMMON) \
+diff --git a/tests/perf_memset_s.c b/tests/perf_memset_s.c
+index 6ca4b24c..eab767d1 100644
+--- a/tests/perf_memset_s.c
++++ b/tests/perf_memset_s.c
+@@ -17,10 +17,17 @@
+  *         memset_s.o  1228  +56%,  444 bytes
+  *
+  *   Speed overhead: -1 - 2%
++ *
++ * fc32 on ryzen3:
++ * gcc-10.2.1 speed overhead: 56.56%
++ * clang-10.0 speed overhead: 51.25%
++ *
+  */
+ 
+ #include "test_private.h"
+ #include "safe_mem_lib.h"
++#undef debug_printf
++#include "mem/mem_primitives_lib.h"
+ 
+ #ifndef __KERNEL__
+ #ifdef TIME_WITH_SYS_TIME
+@@ -74,9 +81,9 @@ static double timing_loop(uint32_t len, uint32_t loops) {
+ 
+     clock_t sl_clock_diff;
+     clock_t sd_clock_diff;
++    clock_t sp_clock_diff;
+ 
+-    double sl_clock_dur;
+-    double sd_clock_dur;
++    double sl_clock_dur, sd_clock_dur, sp_clock_dur;
+     double percent;
+ 
+     for (i = 0; i < LEN; i++) {
+@@ -89,7 +96,18 @@ static double timing_loop(uint32_t len, uint32_t loops) {
+     /*printf("\n Timing %d byte copy, %u loops \n", len, loops); */
+ 
+     /*
+-     * Safe C Lib Routine
++     * Fast safe C Lib Routine (without MEMORY_BARRIER)
++     */
++    clock_start = rdtsc();
++    for (i = 0; i < loops; i++) {
++        mem_prim_set(mem1, len, 0);
++    }
++    clock_end = rdtsc();
++
++    sp_clock_diff = (clock_end - clock_start) / loops;
++
++    /*
++     * Slow safe C Lib Routine (with MEMORY_BARRIER)
+      */
+     clock_start = rdtsc();
+     for (i = 0; i < loops; i++) {
+@@ -123,15 +141,16 @@ static double timing_loop(uint32_t len, uint32_t loops) {
+     sd_clock_diff = (clock_end - clock_start) / loops;
+ 
+     /* convert to seconds */
++    sp_clock_dur = ((double)(sp_clock_diff) / CLOCKS_PER_SEC);
+     sl_clock_dur = ((double)(sl_clock_diff) / CLOCKS_PER_SEC);
+     sd_clock_dur = ((double)(sd_clock_diff) / CLOCKS_PER_SEC);
+     percent = 100 * (sl_clock_dur - sd_clock_dur) / sl_clock_dur;
+ 
+     /* just to disable optimizing away the inner loop */
+     /* fprintf(stderr, "errors %lu\n", errors); */
+-    printf("%u  %u  memset_s %1.6f  memset %1.6f  diff %1.6f  %2.2f %%\n",
+-           loops, len, sl_clock_dur, sd_clock_dur,
+-           (sl_clock_dur - sd_clock_dur), percent);
++    printf("%u  %u  mem_prim_set %1.6f  memset_s %1.6f  memset %1.6f  diff %1.6f  %2.2f %%\n",
++           loops, len, sp_clock_dur, sl_clock_dur, sd_clock_dur,
++           (sp_clock_dur - sd_clock_dur), percent);
+ 
+     return percent;
+ }
diff --git a/meta-oe/recipes-core/safec/safec/0009-improve-perf_memset_s-proper-timer-linearization.patch b/meta-oe/recipes-core/safec/safec/0009-improve-perf_memset_s-proper-timer-linearization.patch
new file mode 100644
index 000000000..90a87c1e6
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0009-improve-perf_memset_s-proper-timer-linearization.patch
@@ -0,0 +1,175 @@ 
+From 919d494a892bbba3730bdfd50e0543ae74b71e13 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Wed, 9 Sep 2020 11:37:44 +0200
+Subject: [PATCH] improve perf_memset_s: proper timer linearization
+
+as in smhasher.
+also change the percent to compare against. mem_prim_set vs memset
+
+gcc now as fast as memset, only clang 2x slower without -march=native.
+With -march=native gcc is 2.5% faster than glibc, clang 3% slower.
+---
+ tests/perf_memset_s.c | 92 +++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 81 insertions(+), 11 deletions(-)
+
+diff --git a/tests/perf_memset_s.c b/tests/perf_memset_s.c
+index eab767d1..66489161 100644
+--- a/tests/perf_memset_s.c
++++ b/tests/perf_memset_s.c
+@@ -19,8 +19,8 @@
+  *   Speed overhead: -1 - 2%
+  *
+  * fc32 on ryzen3:
+- * gcc-10.2.1 speed overhead: 56.56%
+- * clang-10.0 speed overhead: 51.25%
++ * gcc-10.2.1 speed overhead: 5.13%
++ * clang-10.0 speed overhead: 51.16%
+  *
+  */
+ 
+@@ -54,6 +54,8 @@ uint8_t mem1[LEN];
+ uint8_t mem2[LEN];
+ 
+ static inline clock_t rdtsc();
++static inline uint64_t timer_start();
++static inline uint64_t timer_end();
+ static double timing_loop(uint32_t len, uint32_t loops);
+ int main(void);
+ 
+@@ -72,12 +74,80 @@ static inline clock_t rdtsc() {
+ #endif
+ }
+ 
++// see https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/ia-32-ia-64-benchmark-code-execution-paper.pdf
++// 3.2.1 The Improved Benchmarking Method
++static inline uint64_t timer_start()
++{
++#if defined (__i386__) || (defined(__x86_64__) && SIZEOF_SIZE_T == 4)
++  uint32_t cycles_high, cycles_low;
++  __asm__ volatile
++      ("cpuid\n\t"
++       "rdtsc\n\t"
++       "mov %%edx, %0\n\t"
++       "mov %%eax, %1\n\t": "=r" (cycles_high), "=r" (cycles_low)::
++       "%eax", "%ebx", "%ecx", "%edx");
++    return ((uint64_t)cycles_high << 32) | cycles_low;
++#elif defined __x86_64__
++  uint32_t cycles_high, cycles_low;
++  __asm__ volatile
++      ("cpuid\n\t"
++       "rdtsc\n\t"
++       "mov %%edx, %0\n\t"
++       "mov %%eax, %1\n\t": "=r" (cycles_high), "=r" (cycles_low)::
++       "%rax", "%rbx", "%rcx", "%rdx");
++  return ((uint64_t)cycles_high << 32) | cycles_low;
++#elif defined(__ARM_ARCH) && (__ARM_ARCH >= 6)
++  // V6 is the earliest arch that has a standard cyclecount
++  uint32_t pmccntr;
++  uint32_t pmuseren;
++  uint32_t pmcntenset;
++  // Read the user mode perf monitor counter access permissions.
++  asm volatile("mrc p15, 0, %0, c9, c14, 0" : "=r"(pmuseren));
++  if (pmuseren & 1) {  // Allows reading perfmon counters for user mode code.
++    asm volatile("mrc p15, 0, %0, c9, c12, 1" : "=r"(pmcntenset));
++    if (pmcntenset & 0x80000000ul) {  // Is it counting?
++      asm volatile("mrc p15, 0, %0, c9, c13, 0" : "=r"(pmccntr));
++      // The counter is set up to count every 64th cycle
++      return static_cast<int64_t>(pmccntr) * 64;  // Should optimize to << 6
++    }
++  }
++  return (uint64_t)rdtsc();
++#else
++  return (uint64_t)rdtsc();
++#endif
++}
++
++static inline uint64_t timer_end()
++{
++#if defined (__i386__) || (defined(__x86_64__) && defined (HAVE_BIT32))
++  uint32_t cycles_high, cycles_low;
++  __asm__ volatile
++      ("rdtscp\n\t"
++       "mov %%edx, %0\n\t"
++       "mov %%eax, %1\n\t"
++       "cpuid\n\t": "=r" (cycles_high), "=r" (cycles_low)::
++       "%eax", "%ebx", "%ecx", "%edx");
++    return ((uint64_t)cycles_high << 32) | cycles_low;
++#elif defined __x86_64__
++  uint32_t cycles_high, cycles_low;
++  __asm__ volatile
++      ("rdtscp\n\t"
++       "mov %%edx, %0\n\t"
++       "mov %%eax, %1\n\t"
++       "cpuid\n\t": "=r" (cycles_high), "=r" (cycles_low)::
++       "%rax", "%rbx", "%rcx", "%rdx");
++  return ((uint64_t)cycles_high << 32) | cycles_low;
++#else
++  return (uint64_t)rdtsc();
++#endif
++}
++
+ static double timing_loop(uint32_t len, uint32_t loops) {
+     uint32_t i;
+     size_t errors = 0;
+ 
+-    clock_t clock_start;
+-    clock_t clock_end;
++    uint64_t clock_start;
++    uint64_t clock_end;
+ 
+     clock_t sl_clock_diff;
+     clock_t sd_clock_diff;
+@@ -98,24 +168,24 @@ static double timing_loop(uint32_t len, uint32_t loops) {
+     /*
+      * Fast safe C Lib Routine (without MEMORY_BARRIER)
+      */
+-    clock_start = rdtsc();
++    clock_start = timer_start();
+     for (i = 0; i < loops; i++) {
+         mem_prim_set(mem1, len, 0);
+     }
+-    clock_end = rdtsc();
++    clock_end = timer_end();
+ 
+     sp_clock_diff = (clock_end - clock_start) / loops;
+ 
+     /*
+      * Slow safe C Lib Routine (with MEMORY_BARRIER)
+      */
+-    clock_start = rdtsc();
++    clock_start = timer_start();
+     for (i = 0; i < loops; i++) {
+         volatile errno_t rc;
+         rc = memset_s(mem1, len, 0, len);
+         errors += rc;
+     }
+-    clock_end = rdtsc();
++    clock_end = timer_end();
+ 
+     /*
+      * Note that background stuff continues to run, i.e. interrupts, so
+@@ -126,13 +196,13 @@ static double timing_loop(uint32_t len, uint32_t loops) {
+     /*
+      * Standard C Routine
+      */
+-    clock_start = rdtsc();
++    clock_start = timer_start();
+     for (i = 0; i < loops; i++) {
+         volatile char *rc;
+         rc = (char *)memset(mem1, 0, len);
+         errors += *rc;
+     }
+-    clock_end = rdtsc();
++    clock_end = timer_end();
+ 
+     /*
+      * Note that background stuff continues to run, i.e. interrupts, so
+@@ -144,7 +214,7 @@ static double timing_loop(uint32_t len, uint32_t loops) {
+     sp_clock_dur = ((double)(sp_clock_diff) / CLOCKS_PER_SEC);
+     sl_clock_dur = ((double)(sl_clock_diff) / CLOCKS_PER_SEC);
+     sd_clock_dur = ((double)(sd_clock_diff) / CLOCKS_PER_SEC);
+-    percent = 100 * (sl_clock_dur - sd_clock_dur) / sl_clock_dur;
++    percent = 100 * (sp_clock_dur - sd_clock_dur) / sp_clock_dur;
+ 
+     /* just to disable optimizing away the inner loop */
+     /* fprintf(stderr, "errors %lu\n", errors); */
diff --git a/meta-oe/recipes-core/safec/safec/0010-extract-perf-functions-into-perf_private.h.patch b/meta-oe/recipes-core/safec/safec/0010-extract-perf-functions-into-perf_private.h.patch
new file mode 100644
index 000000000..67da8a56b
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0010-extract-perf-functions-into-perf_private.h.patch
@@ -0,0 +1,581 @@ 
+From f9c15db3cb58cc9865d095aa0e04ab40fada0667 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Wed, 9 Sep 2020 11:50:42 +0200
+Subject: [PATCH] extract perf functions into perf_private.h
+
+and use it.
+p_memset_s needs to link to mem_primitives_lib.lo for windows.
+it is not exported.
+---
+ tests/Makefile.am       |   8 ++-
+ tests/perf_memcpy32_s.c |  30 ++-------
+ tests/perf_memcpy_s.c   |  48 +++-----------
+ tests/perf_memset_s.c   | 110 ++-----------------------------
+ tests/perf_private.h    | 140 ++++++++++++++++++++++++++++++++++++++++
+ tests/perf_strcpy_s.c   |  47 ++------------
+ 6 files changed, 173 insertions(+), 210 deletions(-)
+ create mode 100644 tests/perf_private.h
+
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index b184b9b5..0301794d 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -277,10 +277,12 @@ endif
+ # endif
+ # endif
+ 
+-p_memcpy_s_SOURCES            = perf_memcpy_s.c $(SAFEC_TEST_COMMON)
+-p_memset_s_SOURCES            = perf_memset_s.c $(SAFEC_TEST_COMMON)
++p_memcpy_s_SOURCES            = perf_memcpy_s.c $(SAFEC_TEST_COMMON) perf_private.h
++p_memset_s_SOURCES            = perf_memset_s.c $(SAFEC_TEST_COMMON) perf_private.h
+ p_memset_s_CFLAGS             = $(CFLAGS) $(AM_CFLAGS) -I$(top_srcdir)/src
+-p_strcpy_s_SOURCES            = perf_strcpy_s.c $(SAFEC_TEST_COMMON)
++# needed for windows
++p_memset_s_LDFLAGS            = $(top_builddir)/src/mem/mem_primitives_lib.lo $(LDADD)
++p_strcpy_s_SOURCES            = perf_strcpy_s.c $(SAFEC_TEST_COMMON) perf_private.h
+ 
+ t_memcpy_s_SOURCES            = test_memcpy_s.c $(SAFEC_TEST_COMMON) \
+ 	                        $(SAFEC_TEST_MSVCRT) test_expmem.h
+diff --git a/tests/perf_memcpy32_s.c b/tests/perf_memcpy32_s.c
+index ca56006c..7c01dbf2 100644
+--- a/tests/perf_memcpy32_s.c
++++ b/tests/perf_memcpy32_s.c
+@@ -4,21 +4,7 @@
+ 
+ #include "test_private.h"
+ #include "safe_mem_lib.h"
+-
+-#ifndef __KERNEL__
+-#ifdef TIME_WITH_SYS_TIME
+-#include <sys/time.h>
+-#include <time.h>
+-#else
+-#ifdef HAVE_SYS_TIME_H
+-#include <sys/time.h>
+-#else
+-#include <time.h>
+-#endif
+-#endif
+-#else
+-#error Not supported in Linux kernel space
+-#endif
++#include "perf_private.h"
+ 
+ #define LEN (1024 * 20)
+ 
+@@ -27,14 +13,12 @@ uint32_t mem2[LEN];
+ 
+ uint16_t mem3[LEN];
+ uint16_t mem4[LEN];
+-static void timing_loop(uint32_t len, uint32_t loops);
+-int main(void);
+ 
+ static void timing_loop(uint32_t len, uint32_t loops) {
+     uint32_t i;
+ 
+-    clock_t clock_start;
+-    clock_t clock_end;
++    uint64_t clock_start;
++    uint64_t clock_end;
+ 
+     clock_t sl_clock_diff;
+     clock_t sd_clock_diff;
+@@ -56,11 +40,11 @@ static void timing_loop(uint32_t len, uint32_t loops) {
+     /*
+      * Safe C Lib Routine
+      */
+-    clock_start = clock();
++    clock_start = timer_start();
+     for (i = 0; i < loops; i++) {
+         (void)memcpy32_s(mem1, len, mem2, len);
+     }
+-    clock_end = clock();
++    clock_end = timer_end();
+ 
+     /*
+      * Note that background stuff continues to run, i.e. interrupts, so
+@@ -71,12 +55,12 @@ static void timing_loop(uint32_t len, uint32_t loops) {
+     /*
+      * Standard C Routine
+      */
+-    clock_start = clock();
++    clock_start = timer_start();
+     for (i = 0; i < loops; i++) {
+         (void)memcpy16_s(mem3, len, mem4, len);
+         // memcpy(mem1, mem2, len);
+     }
+-    clock_end = clock();
++    clock_end = timer_end();
+ 
+     /*
+      * Note that background stuff continues to run, i.e. interrupts, so
+diff --git a/tests/perf_memcpy_s.c b/tests/perf_memcpy_s.c
+index d3a4023a..c50824db 100644
+--- a/tests/perf_memcpy_s.c
++++ b/tests/perf_memcpy_s.c
+@@ -45,21 +45,7 @@
+ 
+ #include "test_private.h"
+ #include "safe_mem_lib.h"
+-
+-#ifndef __KERNEL__
+-#ifdef TIME_WITH_SYS_TIME
+-#include <sys/time.h>
+-#include <time.h>
+-#else
+-#ifdef HAVE_SYS_TIME_H
+-#include <sys/time.h>
+-#else
+-#include <time.h>
+-#endif
+-#endif
+-#elif !defined(__x86_64__) && !defined(__i386__)
+-#error Not supported in Linux kernel space
+-#endif
++#include "perf_private.h"
+ 
+ #if defined(TEST_MSVCRT) && defined(HAVE_MEMCPY_S)
+ #undef memcpy_s
+@@ -70,31 +56,15 @@
+ uint8_t mem1[LEN];
+ uint8_t mem2[LEN];
+ 
+-static inline clock_t rdtsc();
+-static double timing_loop(uint32_t len, uint32_t loops);
+-int main(void);
+-
+-static inline clock_t rdtsc() {
+-#ifdef __x86_64__
+-    uint64_t a, d;
+-    __asm__ volatile("rdtsc" : "=a"(a), "=d"(d));
+-    return (clock_t)(a | (d << 32));
+-#elif defined(__i386__)
+-    clock_t x;
+-    __asm__ volatile("rdtsc" : "=A"(x));
+-    return x;
+-#else
+-#define NO_CYCLE_COUNTER
+-    return clock();
+-#endif
+-}
++//static double timing_loop(uint32_t len, uint32_t loops);
++//int main(void);
+ 
+ static double timing_loop(uint32_t len, uint32_t loops) {
+     uint32_t i;
+     size_t errors = 0;
+ 
+-    clock_t clock_start;
+-    clock_t clock_end;
++    uint64_t clock_start;
++    uint64_t clock_end;
+ 
+     clock_t sl_clock_diff;
+     clock_t sd_clock_diff;
+@@ -115,13 +85,13 @@ static double timing_loop(uint32_t len, uint32_t loops) {
+     /*
+      * Safe C Lib Routine
+      */
+-    clock_start = rdtsc();
++    clock_start = timer_start();
+     for (i = 0; i < loops; i++) {
+         volatile errno_t rc;
+         rc = memcpy_s(mem1, len, mem2, len);
+         errors += rc;
+     }
+-    clock_end = rdtsc();
++    clock_end = timer_end();
+ 
+     /*
+      * Note that background stuff continues to run, i.e. interrupts, so
+@@ -132,13 +102,13 @@ static double timing_loop(uint32_t len, uint32_t loops) {
+     /*
+      * Standard C Routine
+      */
+-    clock_start = rdtsc();
++    clock_start = timer_start();
+     for (i = 0; i < loops; i++) {
+         volatile char *rc;
+         rc = (char *)memcpy(mem1, mem2, len);
+         errors += *rc;
+     }
+-    clock_end = rdtsc();
++    clock_end = timer_end();
+ 
+     /*
+      * Note that background stuff continues to run, i.e. interrupts, so
+diff --git a/tests/perf_memset_s.c b/tests/perf_memset_s.c
+index 66489161..ca89ceec 100644
+--- a/tests/perf_memset_s.c
++++ b/tests/perf_memset_s.c
+@@ -19,31 +19,17 @@
+  *   Speed overhead: -1 - 2%
+  *
+  * fc32 on ryzen3:
+- * gcc-10.2.1 speed overhead: 5.13%
+- * clang-10.0 speed overhead: 51.16%
++ * gcc-10.2.1 speed overhead: 5.13% and -2.53% with -march=native
++ * clang-10.0 speed overhead: 51.16% and 3.26% with -march=native
+  *
+  */
+ 
+ #include "test_private.h"
+ #include "safe_mem_lib.h"
++#include "perf_private.h"
+ #undef debug_printf
+ #include "mem/mem_primitives_lib.h"
+ 
+-#ifndef __KERNEL__
+-#ifdef TIME_WITH_SYS_TIME
+-#include <sys/time.h>
+-#include <time.h>
+-#else
+-#ifdef HAVE_SYS_TIME_H
+-#include <sys/time.h>
+-#else
+-#include <time.h>
+-#endif
+-#endif
+-#elif !defined(__x86_64__) && !defined(__i386__)
+-#error Not supported in Linux kernel space
+-#endif
+-
+ #if defined(TEST_MSVCRT) && defined(HAVE_MEMSET_S)
+ #undef memset_s
+ #endif
+@@ -53,94 +39,8 @@
+ uint8_t mem1[LEN];
+ uint8_t mem2[LEN];
+ 
+-static inline clock_t rdtsc();
+-static inline uint64_t timer_start();
+-static inline uint64_t timer_end();
+-static double timing_loop(uint32_t len, uint32_t loops);
+-int main(void);
+-
+-static inline clock_t rdtsc() {
+-#ifdef __x86_64__
+-    uint64_t a, d;
+-    __asm__ volatile("rdtsc" : "=a"(a), "=d"(d));
+-    return (clock_t)(a | (d << 32));
+-#elif defined(__i386__)
+-    clock_t x;
+-    __asm__ volatile("rdtsc" : "=A"(x));
+-    return x;
+-#else
+-#define NO_CYCLE_COUNTER
+-    return clock();
+-#endif
+-}
+-
+-// see https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/ia-32-ia-64-benchmark-code-execution-paper.pdf
+-// 3.2.1 The Improved Benchmarking Method
+-static inline uint64_t timer_start()
+-{
+-#if defined (__i386__) || (defined(__x86_64__) && SIZEOF_SIZE_T == 4)
+-  uint32_t cycles_high, cycles_low;
+-  __asm__ volatile
+-      ("cpuid\n\t"
+-       "rdtsc\n\t"
+-       "mov %%edx, %0\n\t"
+-       "mov %%eax, %1\n\t": "=r" (cycles_high), "=r" (cycles_low)::
+-       "%eax", "%ebx", "%ecx", "%edx");
+-    return ((uint64_t)cycles_high << 32) | cycles_low;
+-#elif defined __x86_64__
+-  uint32_t cycles_high, cycles_low;
+-  __asm__ volatile
+-      ("cpuid\n\t"
+-       "rdtsc\n\t"
+-       "mov %%edx, %0\n\t"
+-       "mov %%eax, %1\n\t": "=r" (cycles_high), "=r" (cycles_low)::
+-       "%rax", "%rbx", "%rcx", "%rdx");
+-  return ((uint64_t)cycles_high << 32) | cycles_low;
+-#elif defined(__ARM_ARCH) && (__ARM_ARCH >= 6)
+-  // V6 is the earliest arch that has a standard cyclecount
+-  uint32_t pmccntr;
+-  uint32_t pmuseren;
+-  uint32_t pmcntenset;
+-  // Read the user mode perf monitor counter access permissions.
+-  asm volatile("mrc p15, 0, %0, c9, c14, 0" : "=r"(pmuseren));
+-  if (pmuseren & 1) {  // Allows reading perfmon counters for user mode code.
+-    asm volatile("mrc p15, 0, %0, c9, c12, 1" : "=r"(pmcntenset));
+-    if (pmcntenset & 0x80000000ul) {  // Is it counting?
+-      asm volatile("mrc p15, 0, %0, c9, c13, 0" : "=r"(pmccntr));
+-      // The counter is set up to count every 64th cycle
+-      return static_cast<int64_t>(pmccntr) * 64;  // Should optimize to << 6
+-    }
+-  }
+-  return (uint64_t)rdtsc();
+-#else
+-  return (uint64_t)rdtsc();
+-#endif
+-}
+-
+-static inline uint64_t timer_end()
+-{
+-#if defined (__i386__) || (defined(__x86_64__) && defined (HAVE_BIT32))
+-  uint32_t cycles_high, cycles_low;
+-  __asm__ volatile
+-      ("rdtscp\n\t"
+-       "mov %%edx, %0\n\t"
+-       "mov %%eax, %1\n\t"
+-       "cpuid\n\t": "=r" (cycles_high), "=r" (cycles_low)::
+-       "%eax", "%ebx", "%ecx", "%edx");
+-    return ((uint64_t)cycles_high << 32) | cycles_low;
+-#elif defined __x86_64__
+-  uint32_t cycles_high, cycles_low;
+-  __asm__ volatile
+-      ("rdtscp\n\t"
+-       "mov %%edx, %0\n\t"
+-       "mov %%eax, %1\n\t"
+-       "cpuid\n\t": "=r" (cycles_high), "=r" (cycles_low)::
+-       "%rax", "%rbx", "%rcx", "%rdx");
+-  return ((uint64_t)cycles_high << 32) | cycles_low;
+-#else
+-  return (uint64_t)rdtsc();
+-#endif
+-}
++//static double timing_loop(uint32_t len, uint32_t loops);
++//int main(void);
+ 
+ static double timing_loop(uint32_t len, uint32_t loops) {
+     uint32_t i;
+diff --git a/tests/perf_private.h b/tests/perf_private.h
+new file mode 100644
+index 00000000..9e05c6e6
+--- /dev/null
++++ b/tests/perf_private.h
+@@ -0,0 +1,140 @@
++/*------------------------------------------------------------------
++ * perf_private.h - Internal benchmarking tools
++ *
++ * 2020  Reini Urban
++ *
++ * Copyright (c) 2017, 2020 Reini Urban
++ * All rights reserved.
++ *
++ * Permission is hereby granted, free of charge, to any person
++ * obtaining a copy of this software and associated documentation
++ * files (the "Software"), to deal in the Software without
++ * restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or
++ * sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following
++ * conditions:
++ *
++ * The above copyright notice and this permission notice shall be
++ * included in all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
++ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *------------------------------------------------------------------
++ */
++
++#ifndef __PERF_PRIVATE_H__
++#define __PERF_PRIVATE_H__
++
++#include "config.h"
++#include "safe_config.h"
++
++#ifndef __KERNEL__
++#ifdef TIME_WITH_SYS_TIME
++#include <sys/time.h>
++#include <time.h>
++#else
++#ifdef HAVE_SYS_TIME_H
++#include <sys/time.h>
++#else
++#include <time.h>
++#endif
++#endif
++#elif !defined(__x86_64__) && !defined(__i386__)
++#error Not supported in Linux kernel space
++#endif
++
++static inline clock_t rdtsc();
++static inline uint64_t timer_start();
++static inline uint64_t timer_end();
++
++static inline clock_t rdtsc() {
++#ifdef __x86_64__
++    uint64_t a, d;
++    __asm__ volatile("rdtsc" : "=a"(a), "=d"(d));
++    return (clock_t)(a | (d << 32));
++#elif defined(__i386__)
++    clock_t x;
++    __asm__ volatile("rdtsc" : "=A"(x));
++    return x;
++#else
++#define NO_CYCLE_COUNTER
++    return clock();
++#endif
++}
++
++// see https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/ia-32-ia-64-benchmark-code-execution-paper.pdf
++// 3.2.1 The Improved Benchmarking Method
++static inline uint64_t timer_start()
++{
++#if defined (__i386__) || (defined(__x86_64__) && SIZEOF_SIZE_T == 4)
++  uint32_t cycles_high, cycles_low;
++  __asm__ volatile
++      ("cpuid\n\t"
++       "rdtsc\n\t"
++       "mov %%edx, %0\n\t"
++       "mov %%eax, %1\n\t": "=r" (cycles_high), "=r" (cycles_low)::
++       "%eax", "%ebx", "%ecx", "%edx");
++    return ((uint64_t)cycles_high << 32) | cycles_low;
++#elif defined __x86_64__
++  uint32_t cycles_high, cycles_low;
++  __asm__ volatile
++      ("cpuid\n\t"
++       "rdtsc\n\t"
++       "mov %%edx, %0\n\t"
++       "mov %%eax, %1\n\t": "=r" (cycles_high), "=r" (cycles_low)::
++       "%rax", "%rbx", "%rcx", "%rdx");
++  return ((uint64_t)cycles_high << 32) | cycles_low;
++#elif defined(__ARM_ARCH) && (__ARM_ARCH >= 6)
++  // V6 is the earliest arch that has a standard cyclecount
++  uint32_t pmccntr;
++  uint32_t pmuseren;
++  uint32_t pmcntenset;
++  // Read the user mode perf monitor counter access permissions.
++  asm volatile("mrc p15, 0, %0, c9, c14, 0" : "=r"(pmuseren));
++  if (pmuseren & 1) {  // Allows reading perfmon counters for user mode code.
++    asm volatile("mrc p15, 0, %0, c9, c12, 1" : "=r"(pmcntenset));
++    if (pmcntenset & 0x80000000ul) {  // Is it counting?
++      asm volatile("mrc p15, 0, %0, c9, c13, 0" : "=r"(pmccntr));
++      // The counter is set up to count every 64th cycle
++      return (int64_t)(pmccntr) * 64;  // Should optimize to << 6
++    }
++  }
++  return (uint64_t)rdtsc();
++#else
++  return (uint64_t)rdtsc();
++#endif
++}
++
++static inline uint64_t timer_end()
++{
++#if defined (__i386__) || (defined(__x86_64__) && defined (HAVE_BIT32))
++  uint32_t cycles_high, cycles_low;
++  __asm__ volatile
++      ("rdtscp\n\t"
++       "mov %%edx, %0\n\t"
++       "mov %%eax, %1\n\t"
++       "cpuid\n\t": "=r" (cycles_high), "=r" (cycles_low)::
++       "%eax", "%ebx", "%ecx", "%edx");
++    return ((uint64_t)cycles_high << 32) | cycles_low;
++#elif defined __x86_64__
++  uint32_t cycles_high, cycles_low;
++  __asm__ volatile
++      ("rdtscp\n\t"
++       "mov %%edx, %0\n\t"
++       "mov %%eax, %1\n\t"
++       "cpuid\n\t": "=r" (cycles_high), "=r" (cycles_low)::
++       "%rax", "%rbx", "%rcx", "%rdx");
++  return ((uint64_t)cycles_high << 32) | cycles_low;
++#else
++  return (uint64_t)rdtsc();
++#endif
++}
++
++#endif /* __PERF_PRIVATE_H__ */
+diff --git a/tests/perf_strcpy_s.c b/tests/perf_strcpy_s.c
+index 930f1fa5..3801f89c 100644
+--- a/tests/perf_strcpy_s.c
++++ b/tests/perf_strcpy_s.c
+@@ -22,21 +22,7 @@
+ 
+ #include "test_private.h"
+ #include "safe_str_lib.h"
+-
+-#ifndef __KERNEL__
+-#ifdef TIME_WITH_SYS_TIME
+-#include <sys/time.h>
+-#include <time.h>
+-#else
+-#ifdef HAVE_SYS_TIME_H
+-#include <sys/time.h>
+-#else
+-#include <time.h>
+-#endif
+-#endif
+-#else
+-#error Not supported in Linux kernel space
+-#endif
++#include "perf_private.h"
+ 
+ #if defined(TEST_MSVCRT) && defined(HAVE_STRCPY_S)
+ #undef strcpy_s
+@@ -47,31 +33,12 @@
+ char str1[LEN];
+ char str2[LEN];
+ 
+-static inline clock_t rdtsc();
+-static double timing_loop(uint32_t len, uint32_t loops);
+-int main(void);
+-
+-static inline clock_t rdtsc() {
+-#ifdef __x86_64__
+-    uint64_t a, d;
+-    __asm__ volatile("rdtsc" : "=a"(a), "=d"(d));
+-    return (clock_t)(a | (d << 32));
+-#elif defined(__i386__)
+-    clock_t x;
+-    __asm__ volatile("rdtsc" : "=A"(x));
+-    return x;
+-#else
+-#define NO_CYCLE_COUNTER
+-    return clock();
+-#endif
+-}
+-
+ static double timing_loop(uint32_t len, uint32_t loops) {
+     uint32_t i;
+     size_t errors = 0;
+ 
+-    clock_t clock_start;
+-    clock_t clock_end;
++    uint64_t clock_start;
++    uint64_t clock_end;
+ 
+     clock_t sl_clock_diff;
+     clock_t sd_clock_diff;
+@@ -94,13 +61,13 @@ static double timing_loop(uint32_t len, uint32_t loops) {
+     /*
+      * Safe C Lib Routine
+      */
+-    clock_start = rdtsc();
++    clock_start = timer_start();
+     for (i = 0; i < loops; i++) {
+         volatile errno_t rc;
+         rc = strcpy_s(str1, LEN, str2);
+         errors += rc;
+     }
+-    clock_end = rdtsc();
++    clock_end = timer_end();
+ 
+     /*
+      * Note that background stuff continues to run, i.e. interrupts, so
+@@ -111,13 +78,13 @@ static double timing_loop(uint32_t len, uint32_t loops) {
+     /*
+      * Standard C Routine
+      */
+-    clock_start = rdtsc();
++    clock_start = timer_start();
+     for (i = 0; i < loops; i++) {
+         volatile char *rc;
+         rc = strcpy(str1, str2);
+         errors += *rc;
+     }
+-    clock_end = rdtsc();
++    clock_end = timer_end();
+ 
+     /*
+      * Note that background stuff continues to run, i.e. interrupts, so
diff --git a/meta-oe/recipes-core/safec/safec/0011-.gitgnore-new-files.patch b/meta-oe/recipes-core/safec/safec/0011-.gitgnore-new-files.patch
new file mode 100644
index 000000000..66ac45edb
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0011-.gitgnore-new-files.patch
@@ -0,0 +1,30 @@ 
+From ee149b795970a51e93fd175835156540d713ecd8 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Thu, 10 Sep 2020 09:50:38 +0200
+Subject: [PATCH] .gitgnore: new files
+
+---
+ .gitignore | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/.gitignore b/.gitignore
+index 0224fe8c..a3e180ca 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -63,6 +63,8 @@ TAGS
+ /stamp-h1
+ /aclocal.m4
+ /autom4te.cache/
++/libsafec-*
++/fmt
+ 
+ # More generated files
+ build-aux/ar-lib
+@@ -79,6 +81,7 @@ doc/html
+ doc/man
+ src/gcov.log
+ tests/gcov.log
++src/Scripts.txt
+ 
+ #
+ # Debian directory (make deb-pkg)
diff --git a/meta-oe/recipes-core/safec/safec/0012-perf-fix-aarch64-and-add-more-archs.patch b/meta-oe/recipes-core/safec/safec/0012-perf-fix-aarch64-and-add-more-archs.patch
new file mode 100644
index 000000000..fa875afbf
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0012-perf-fix-aarch64-and-add-more-archs.patch
@@ -0,0 +1,97 @@ 
+From b90c52b1691fe82ce0a0681a503e1d45584f0162 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Thu, 10 Sep 2020 11:16:03 +0200
+Subject: [PATCH] perf: fix aarch64 and add more archs
+
+aarch64 has no mrc opcode.
+---
+ tests/perf_private.h | 69 ++++++++++++++++++++++++++++++++++----------
+ 1 file changed, 53 insertions(+), 16 deletions(-)
+
+diff --git a/tests/perf_private.h b/tests/perf_private.h
+index 9e05c6e6..070faf75 100644
+--- a/tests/perf_private.h
++++ b/tests/perf_private.h
+@@ -63,6 +63,59 @@ static inline clock_t rdtsc() {
+     clock_t x;
+     __asm__ volatile("rdtsc" : "=A"(x));
+     return x;
++#elif defined(__ARM_ARCH) && (__ARM_ARCH >= 7) && (SIZEOF_SIZE_T == 4)
++  // V7 is the earliest arch that has a standard cyclecount (some say 6)
++  uint32_t pmccntr;
++  uint32_t pmuseren;
++  uint32_t pmcntenset;
++  // Read the user mode perf monitor counter access permissions.
++  asm volatile("mrc p15, 0, %0, c9, c14, 0" : "=r"(pmuseren));
++  if (pmuseren & 1) {  // Allows reading perfmon counters for user mode code.
++    asm volatile("mrc p15, 0, %0, c9, c12, 1" : "=r"(pmcntenset));
++    if (pmcntenset & 0x80000000ul) {  // Is it counting?
++      asm volatile("mrc p15, 0, %0, c9, c13, 0" : "=r"(pmccntr));
++      // The counter is set up to count every 64th cycle
++      return (int64_t)(pmccntr) * 64;  // Should optimize to << 6
++    }
++  }
++  return (uint64_t)rdtsc();
++#elif defined(__aarch64__) && (SIZEOF_SIZE_T == 8)
++  uint64_t pmccntr;
++  uint64_t pmuseren = 1UL;
++  // Read the user mode perf monitor counter access permissions.
++  //asm volatile("mrs cntv_ctl_el0,  %0" : "=r" (pmuseren));
++  if (pmuseren & 1) {  // Allows reading perfmon counters for user mode code.
++    asm volatile("mrs %0, cntvct_el0" : "=r" (pmccntr));
++    return (uint64_t)(pmccntr) * 64;  // Should optimize to << 6
++  }
++  return (uint64_t)rdtsc();
++#elif defined(__powerpc64__) || defined(__ppc64__)
++    uint64_t tb;
++    __asm__ volatile (\
++      "mfspr %0, 268"
++      : "=r" (tb));
++    return tb;
++#elif defined(__powerpc__) || defined(__ppc__)
++    // This returns a time-base, which is not always precisely a cycle-count.
++    uint32_t tbu, tbl, tmp;
++    __asm__ volatile (\
++      "0:\n"
++      "mftbu %0\n"
++      "mftbl %1\n"
++      "mftbu %2\n"
++      "cmpw %0, %2\n"
++      "bne- 0b"
++      : "=r" (tbu), "=r" (tbl), "=r" (tmp));
++    return (((uint64) tbu << 32) | tbl);
++#elif defined(__sparc__)
++    uint64_t tick;
++    asm(".byte 0x83, 0x41, 0x00, 0x00");
++    asm("mov   %%g1, %0" : "=r" (tick));
++    return tick;
++#elif defined(__ia64__)
++    uint64_t itc;
++    asm("mov %0 = ar.itc" : "=r" (itc));
++    return itc;
+ #else
+ #define NO_CYCLE_COUNTER
+     return clock();
+@@ -91,22 +144,6 @@ static inline uint64_t timer_start()
+        "mov %%eax, %1\n\t": "=r" (cycles_high), "=r" (cycles_low)::
+        "%rax", "%rbx", "%rcx", "%rdx");
+   return ((uint64_t)cycles_high << 32) | cycles_low;
+-#elif defined(__ARM_ARCH) && (__ARM_ARCH >= 6)
+-  // V6 is the earliest arch that has a standard cyclecount
+-  uint32_t pmccntr;
+-  uint32_t pmuseren;
+-  uint32_t pmcntenset;
+-  // Read the user mode perf monitor counter access permissions.
+-  asm volatile("mrc p15, 0, %0, c9, c14, 0" : "=r"(pmuseren));
+-  if (pmuseren & 1) {  // Allows reading perfmon counters for user mode code.
+-    asm volatile("mrc p15, 0, %0, c9, c12, 1" : "=r"(pmcntenset));
+-    if (pmcntenset & 0x80000000ul) {  // Is it counting?
+-      asm volatile("mrc p15, 0, %0, c9, c13, 0" : "=r"(pmccntr));
+-      // The counter is set up to count every 64th cycle
+-      return (int64_t)(pmccntr) * 64;  // Should optimize to << 6
+-    }
+-  }
+-  return (uint64_t)rdtsc();
+ #else
+   return (uint64_t)rdtsc();
+ #endif
diff --git a/meta-oe/recipes-core/safec/safec/0013-add-support-banner-and-link.patch b/meta-oe/recipes-core/safec/safec/0013-add-support-banner-and-link.patch
new file mode 100644
index 000000000..1b180dfeb
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0013-add-support-banner-and-link.patch
@@ -0,0 +1,2912 @@ 
+From 91abca67137d46a95b8b264081905ecfa0fa0d15 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Fri, 2 Oct 2020 11:36:06 +0200
+Subject: [PATCH] add support banner and link
+
+---
+ README                  |   3 +++
+ doc/safeclib-banner.png | Bin 0 -> 149815 bytes
+ 2 files changed, 3 insertions(+)
+ create mode 100644 doc/safeclib-banner.png
+
+diff --git a/README b/README
+index 77ca06a2..c35a7e7c 100644
+--- a/README
++++ b/README
+@@ -1,5 +1,8 @@
+ Safe C Library - README
+ =======================
++.. image:: doc/safeclib-banner.png
++`safeclib support via xs:code <https://xscode.com/rurban/safeclib>`_
++
+ :toc:
+ 
+ 
+diff --git a/doc/safeclib-banner.png b/doc/safeclib-banner.png
+new file mode 100644
+index 0000000000000000000000000000000000000000..7014dec5f823be09f03db57724a18ff5758b1640
+GIT binary patch
+literal 149815
+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
+GLSTX$7oTDP
+
+literal 0
+HcmV?d00001
+
diff --git a/meta-oe/recipes-core/safec/safec/0014-add-rst-and-md-in-parallel.patch b/meta-oe/recipes-core/safec/safec/0014-add-rst-and-md-in-parallel.patch
new file mode 100644
index 000000000..27258186e
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0014-add-rst-and-md-in-parallel.patch
@@ -0,0 +1,335 @@ 
+From 7ef68891f130e257bf7e442b0dce626df7dcf068 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Fri, 2 Oct 2020 11:44:31 +0200
+Subject: [PATCH] add rst and md in parallel
+
+which should help rst
+---
+ .gitignore           |   2 +-
+ README.md            | 291 +++++++++++++++++++++++++++++++++++++++++++
+ README => README.rst |   0
+ 3 files changed, 292 insertions(+), 1 deletion(-)
+ create mode 100644 README.md
+ rename README => README.rst (100%)
+
+diff --git a/.gitignore b/.gitignore
+index a3e180ca..893dd74d 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -67,6 +67,7 @@ TAGS
+ /fmt
+ 
+ # More generated files
++compile_commands.json
+ build-aux/ar-lib
+ build-aux/test-driver
+ tests/test-suite.log
+@@ -75,7 +76,6 @@ tests/test-fc.pl
+ tests/test-norm.pl
+ tests/test-upr.pl
+ Doxyfile
+-README.md
+ doc/footer
+ doc/html
+ doc/man
+diff --git a/README.md b/README.md
+new file mode 100644
+index 00000000..6045165b
+--- /dev/null
++++ b/README.md
+@@ -0,0 +1,291 @@
++Safe C Library - README
++=======================
++[![safeclib support vis xs:code](doc/safeclib-banner.png)](https://xscode.com/rurban/safeclib)
++
++:toc:
++
++
++Copying
++-------
++
++This project's licensing restrictions are documented in the file 'COPYING'
++under the root directory of this release. Basically it's MIT licensed.
++
++Overview
++--------
++
++This library implements the secure C11 Annex K functions on top of most libc
++implementations, which are missing from them.
++
++The ISO TR24731 Bounds Checking Interface documents indicate that the key
++motivation for the new specification is to help mitigate the ever increasing
++security attacks, specifically the buffer overrun.
++
++The rationale document says ``Buffer overrun attacks continue to be a security
++problem. Roughly 10% of vulnerability reports cataloged by CERT from
++01/01/2005 to 07/01/2005 involved buffer overflows. Preventing buffer overruns
++is the primary, but not the only, motivation for this technical report.''
++
++The rationale document continues ``that these only mitigate, that is lessen,
++security problems. When used properly, these functions decrease the danger
++buffer overrun attacks. Source code may remain vulnerable due to other bugs
++and security issues. The highest level of security is achieved by building in
++layers of security utilizing multiple strategies.''
++
++.The rationale document lists the following key points for TR24731:
++- Guard against overflowing a buffer
++- Do not produce unterminated strings
++- Do not unexpectedly truncate strings
++- Provide a library useful to existing code
++- Preserve the null terminated string datatype
++- Only require local edits to programs
++- Library based solution
++- Support compile-time checking
++- Make failures obvious
++- Zero buffers, null strings
++- Runtime-constraint handler mechanism
++- Support re-entrant code
++- Consistent naming scheme
++- Have a uniform pattern for the function parameters and return type
++- Deference to existing technology
++
++and the following can be added...
++
++- provide a library of functions with like behavior
++- provide a library of functions that promote and increase code safety and
++  security
++- provide a library of functions that are efficient
++
++The C11 Standard adopted many of these points, and added some secure
++`_s` variants in the Annex K.  The Microsoft Windows/MINGW secure API
++did the same, but deviated in some functions from the standard.
++Besides Windows (with its msvcrt, ucrt, reactos msvcrt and wine msvcrt
++variants) only the unused stlport, Android's Bionic, Huawei securec
++and Embarcadero implemented this C11 secure Annex K API so far.  They
++are still missing from glibc, musl, FreeBSD, darwin and DragonFly
++libc, OpenBSD libc, newlib, dietlibc, uClibc, minilibc.
++
++Design Considerations
++---------------------
++
++This library implements since 3.0 all functions defined in the
++specifications.  Included in the library are extensions to the specification
++to provide a complementary set of functions with like behavior.
++
++This library is meant to be used on top of all the existing libc's
++which miss the secure C11 functions. Of course tighter integration
++into the system libc would be better, esp. with the printf, scanf and
++IO functions. See the seperate [libc-overview](doc/libc-overview.md) document.
++
++Austin Group Review of ISO/IEC WDTR 24731
++http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1106.txt
++
++C11 standard (ISO/IEC 9899:2011)
++http://en.cppreference.com/w/c
++
++Stackoverflow discussion:
++https://stackoverflow.com/questions/372980/do-you-use-the-tr-24731-safe-functions
++
++DrDobbs review
++http://www.drdobbs.com/cpp/the-new-c-standard-explored/232901670
++
++C17 reconsidered safeclib but looked only at the old incomplete Cisco version,
++not our complete and fixed version.
++http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm
++
++* Use of errno
++
++The TR24731 specification says an implementation may set errno for the
++functions defined in the technical report, but is not required to.
++This library does not set `errno` in most functions, only in
++bsearch_s, fscanf_s, fwscanf_s, gets_s, gmtime_s, localtime_s,
++scanf_s, sscanf_s, swscanf_s, strtok_s, vfscanf_s,
++vfwscanf_s, vsscanf_s, vswscanf_s, wcstok_s, wscanf_s.
++
++In most cases the safeclib extended ES* errors do not set errno, only
++when the underlying insecure system call fails, errno is set.  The
++library does use `errno` return codes as required by functional APIs.
++Specific Safe C String and Safe C Memory errno codes are defined in
++the `safe_errno.h` file.
++
++* Runtime-constraints
++
++Per the spec, the library verifies that the calling program does not violate
++the function's runtime-constraints. If a runtime-constraint is violated, the
++library calls the currently registered runtime-constraint handler.
++
++Per the spec, multiple runtime-constraint violations in the same call to a
++library function result in only one call to the runtime-constraint handler.
++The first violation encountered invokes the runtime-constraint handler.
++
++With `--disable-constraint-handler` calling the runtime-constraint handler
++can be disabled, saving some memory, but not much run-time performance.
++
++The runtime-constraint handler might not return. If the handler does
++return, the library function whose runtime-constraint was violated
++returns an indication of failure as given by the function’s return.
++With valid dest and dmax values, dest is cleared. With the optional
++`--disable-null-slack` only the first value of dest is cleared,
++otherwise the whole dest buffer.
++
++rsize_t::
++	The specification defines a new type.  This type, rsize_t, is
++	conditionally defined in the safe_lib.h header file.
++
++RSIZE_MAX::
++	The specification defines the macro RSIZE_MAX which expands to a value
++	of type rsize_t. The specification uses RSIZE_MAX for both the string
++	functions and the memory functions. This implementation defines two
++	macros: RSIZE_MAX_STR and RSIZE_MAX_MEM.  RSIZE_MAX_STR defines the
++	range limit for the safe string functions.  RSIZE_MAX_MEM defines the
++	range limit for the safe memory functions.  The point is that string
++	limits can and should be different from memory limits.
++	There also exist RSIZE_MAX_WSTR, RSIZE_MAX_MEM16, RSIZE_MAX_MEM32.
++
++* Compile-time constraints
++
++With supporting compilers the dmax overflow checks and several more
++are performed at compile-time.  Currently only since clang-5 with
++`diagnose_if` support. This checks similar to `_FORTIFY_SOURCE=2` if
++the `__builtin_object_size` of the dest buffer is the same size as
++dmax, and errors if dmax is too big. With the optional
++`--enable-warn-dmax` it prints a warning if the sizes are different,
++which is esp. practical as compile-time warning. It can be promoted
++via the optional `--enable-error-dmax` to be fatal. On unsupported
++compilers, the overflow check and optional equality warn-dmax check is
++deferred to run-time. This check is only possible with
++`__builtin_object_size` and `-O2` when the dest buffer size is known
++at compile-time, otherwise only the simplier `dest == NULL`, `dmax ==
++0` and `dmax > RSIZE_MAX` checks are performed.
++
++* Header Files
++
++The specification states the various functions would be added to
++existing Standard C header files: stdio.h, string.h, etc.  This
++implementation separates the memory related functions into the
++`safe_mem_lib.h` header, the string related functions into the
++`safe_str_lib.h` header, and the rest into the `safe_lib.h`
++header. There are also the internal `safe_compile.h`, `safe_config.h`
++`safe_lib_errno.h` and `safe_types.h` headers, but they do not need to
++be included.
++
++The make file builds a single library `libsafec-VERSION.a` and `.so`.
++Built but not installed are also libmemprims, libsafeccore and libstdunsafe.
++
++It is possible to split the make such that a separate `safe_mem_lib.so` and
++`safe_str_lib.so` are built.  It is also possible to integrate the prototypes
++into the Standard C header files, but that may require changes to your
++development tool chain.
++
++
++Userspace Library
++-----------------
++The build system for the userspace library is the well known *GNU build
++system*, a.k.a. Autotools. This system is well understood and supported
++by many different platforms and distributions which should allow this
++library to be built on a wide variety of platforms. See the
++xref:tested-platforms[``Tested Platforms''] section for details on what
++platforms this library was tested on during its development.
++
++* Building
++
++For those familiar with autotools you can probably skip this part. For those
++not and want to get right to building the code see below. And, for those that
++need additional information see the 'INSTALL' file in the same directory.
++
++.To build you do the following:
++
++    $ ./build-aux/autogen.sh
++    $ ./configure
++    $ make
++
++`autogen.sh` only needs to be run if you are building from the git
++repository. Optionally, you can do `make check` if you want to run the unit
++tests.
++
++
++* Installing
++
++Installation must be preformed by `root`, an `Administrator' on most
++systems. The following is used to install the library.
++
++    $ sudo make install
++
++Safe Linux Kernel Module
++------------------------
++The build for the kernel module has not been integrated into the autotools
++build infrastructure. Consequently, you have to run a different makefile to
++build the kernel module.
++
++
++* Building
++
++.To build do the following:
++
++    $ ./configure --disable-wchar
++    $ make -f Makefile.kernel
++
++
++This assumes you are compiling on a Linux box and this makefile supports the
++standard kernel build system infrastructure documented in:
++<linux-kernel-src-tree>/Documentation/kbuild/modules.txt
++
++NOTE: If you build the kernel module then wish to build the userspace library
++      or vice versa you will need to do a +make clean+ otherwise a +make check+
++      will fail to build.
++
++
++* Installing
++
++The kernel module will be found at the root of the source tree called
++'slkm.ko'. The file 'testslkm.ko' are the unit tests run on the userspace
++library but in Linux kernel module form to verify functionality within the
++kernel.
++
++
++[[tested-platforms]]
++Tested Platforms
++----------------
++
++.The library has been tested on the following systems:
++- Linux Fedora core 31 - 32 amd64/i386 glibc 2.28 - 2.31 (all gcc's + clang's)
++- Mac OS X 10.6-12 w/ Apple developer tools and macports (all gcc's + clang's)
++- Linux Debian 9 - 11 amd64/i386 glibc 2.24 - 2.28 (all gcc's + clang's)
++- Linux centos 7 amd64
++- Linux Void amd64 musl-1.1.16
++- x86_64-w64-mingw32 native and cross-compiled
++- i686-w64-mingw32 native, and cross-compiled and tested under wine
++- i386-mingw32 cross-compiled
++- cygwin32 gcc (newlib)
++- cygwin64 gcc -std=c99 (newlib)
++- freebsd 10 - 12 amd64
++- linux docker images under qemu:
++  i386/debian, x86_64/rhel, arm32v7/debian, aarch64: arm64v8/{debian,centos,rhel,fedora},
++  s390x/fedora (the only big endian test I could find), ppc64le/{debian,ubuntu,fedora,centos,rhel}
++- User Mode Linux (UML), Linux kernel version v3.5.3 w/ Debian Squeeze rootfs
++
++with most available compilers. See `build-aux/smoke.sh` and the various CI configs.
++- https://travis-ci.org/github/rurban/safeclib/
++- https://ci.appveyor.com/project/rurban/safeclib/
++- https://cirrus-ci.com/github/rurban/safeclib
++- https://cloud.drone.io/rurban/safeclib/
++
++Known Issues
++------------
++1. If you are building the library from the git repository you will have to
++   first run `build-aux/autogen.sh` which runs autoreconf to ``install'' the
++   autotools files and create the configure script.
++
++[bibliography]
++.References
++- [[[1]]] Programming languages, their environments and system software
++          interfaces, Extensions to the C Library, Part I: Bounds-checking
++          interfaces, ISO/IEC TR 24731-1.
++- [[[2]]] Rationale for TR 24731 Extensions to the C Library Part I:
++          Bounds-checking interfaces, ISO/IEC JTC1 SC22 WG14 N1225.
++- [[[3]]] The Open Group Base Specifications Issue 7
++          http://pubs.opengroup.org/onlinepubs/9699919799/functions/contents.html
++- [[[4]]] CERT C Secure Coding Standard
++          https://www.securecoding.cert.org/confluence/display/seccode/CERT+C+Secure+Coding+Standard
++- [[[5]]] C11 Standard (ISO/IEC 9899:2011) Annex K
++- [[[6]]] DrDobbs review http://www.drdobbs.com/cpp/the-new-c-standard-explored/232901670
+diff --git a/README b/README.rst
+similarity index 100%
+rename from README
+rename to README.rst
diff --git a/meta-oe/recipes-core/safec/safec/0015-generate-README.rst.patch b/meta-oe/recipes-core/safec/safec/0015-generate-README.rst.patch
new file mode 100644
index 000000000..23597138a
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0015-generate-README.rst.patch
@@ -0,0 +1,917 @@ 
+From 33d961cb6f9a2728e12c919f4a25bb6916f2605b Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Fri, 2 Oct 2020 12:54:12 +0200
+Subject: [PATCH] generate README.rst
+
+fixup some MD markups
+---
+ Makefile.am |  43 ++---
+ README.md   | 121 +++++++-------
+ README.rst  | 455 ++++++++++++++++++++++++++++------------------------
+ 3 files changed, 335 insertions(+), 284 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 7736025c..b917e77a 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -51,7 +51,8 @@ dist_pkginclude_HEADERS = \
+ 
+ # Support files
+ SAFEC_INFRA = \
+-	$(top_srcdir)/README                       \
++	$(top_srcdir)/README.md                  \
++	README.rst                               \
+ 	${top_srcdir}/build-aux/autogen.sh       \
+ 	${top_srcdir}/build-aux/msys2.bat        \
+ 	${top_srcdir}/build-aux/smoke.sh         \
+@@ -480,41 +481,46 @@ dist_man_MANS += \
+ #	doc/man/man3/WCSNORM_NFKC.3     \
+ #	doc/man/man3/WCSNORM_NFKD.3
+ #endif
+-CLEANFILES += Doxyfile doc/footer README.md
++CLEANFILES += Doxyfile doc/footer
++MAINTAINERCLEANFILES = *~ README.rst
+ 
+ # avoid parallel doxygen
+ $(dist_man_MANS) ::
+-doc/man/man3/EOK.3 :: Doxyfile README.md doc/footer include/safe_config.h
++doc/man/man3/EOK.3 :: Doxyfile README.rst doc/footer include/safe_config.h
+ 	-rm $@
+ 	doxygen
+ 
+-docs man: Doxyfile doc/footer $(BUILT_SOURCES) README.md \
++docs man: Doxyfile doc/footer $(BUILT_SOURCES) README.rst \
+    doc/man/man1/check_for_unsafe_apis.1 doc/man/man3/EOK.3
+ 	-rm -rf doc/man/man3/d[0-9a-f]
+ 	-rm doc/man/man3/_*.3
++	-rm doc/man/man3/v.3
++	-rm doc/man/man3/_*_chk.3
+ 	-rm doc/man/man3/slk_*.3
+ 	-rm doc/man/man3/BOS*.3
+-	-rm doc/man/man3/VAL_OVR2*
+ 	-rm doc/man/man3/HAVE___BUILTIN_CONSTANT_P.3
+ 	-rm doc/man/man3/HAVE___BUILTIN_OBJECT_SIZE.3
++	-rm doc/man/man3/UNWIF_*.3
++	-rm doc/man/man3/TBL.3
+ 	-rm doc/man/man3/VAL_OVR2*
+-	-rm doc/man/man3/{wmask,wsize,likely,unlikely}.3
++	-rm doc/man/man3/{wmask,wsize}.3
++	-rm doc/man/man3/ASM_VOLATILE.3
+ 	-rm doc/man/man3/CASE*.3
+ 	-rm doc/man/man3/DRV*.3
+-	-rm doc/man/man3/INLINE.3
+-	-rm doc/man/man3/EOVERFLOW.3
+-	-rm doc/man/man3/EXPORT_SYMBOL.3
+-	-rm doc/man/man3/EXPORT.3
++	-rm doc/man/man3/DISABLE_DLLIMPORT.3
+ 	-rm doc/man/man3/EXTERN.3
++	-rm doc/man/man3/errno_t.3
+ 	-rm doc/man/man3/Hangul*.3
+ 	-rm doc/man/man3/hangul.h.3
++	-rm doc/man/man3/seqindex_*
++	-rm doc/man/man3/*case_seqindex.3
++	-rm doc/man/man3/UINT16_MAX.3
+ 	-rm doc/man/man3/UNWIF_*.3
+ 	-rm doc/man/man3/README*
++	-rm doc/man/man3/__STDC_WANT_LIB_EXT1__.3
++	-rm doc/man/man3/__WORDSIZE.3
+ 	-rm doc/man/man3/MODULE*.3
+-	-rm doc/man/man3/NDEBUG.3
+ 	-rm doc/man/man3/NORMALIZE_IND_TBL.3
+-	-rm doc/man/man3/RCNEGATE.3
+-	-rm doc/man/man3/SAFECLIB_ENABLE_UNSAFE.3
+ 	-rm doc/man/man3/is*.3
+ 	-rm doc/man/man3/debruijn32.3
+ 	-rm doc/man/man3/errmsgs_s.3
+@@ -530,10 +536,7 @@ docs man: Doxyfile doc/footer $(BUILT_SOURCES) README.md \
+ 	-rm doc/man/man3/pntz.3
+ 	-rm doc/man/man3/pos.3
+ 	-rm doc/man/man3/sl_default_handler.3
+-	-rm doc/man/man3/slabort.3
+-	-rm doc/man/man3/sldebug_printf.3
+ 	-rm doc/man/man3/slkm_init.c.3
+-	-rm doc/man/man3/slprintf.3
+ 	-rm doc/man/man3/module_{exit,init}.3
+ 	-rm doc/man/man3/sift.3
+ 	-rm doc/man/man3/v.3
+@@ -541,6 +544,10 @@ docs man: Doxyfile doc/footer $(BUILT_SOURCES) README.md \
+ 	-rm doc/man/man3/todo.3
+ 	-rm doc/man/man3/tbl2.3
+ 	-rm doc/man/man3/tbl3.3
++	-rm doc/man/man3/unsafe_get_property.3
++	-rm doc/man/man3/unw16if*.h.3
++	-rm doc/man/man3/unwif*.h.3
++	-rm doc/man/man3/wsize.3
+ 	-rm doc/man/man3/md_doc_libc-overview.3
+ 	-rm doc/man/man3/libc-overview.md.3
+ 	-rm doc/man/man3/len{_errmsgs_s,}.3
+@@ -554,8 +561,8 @@ docs man: Doxyfile doc/footer $(BUILT_SOURCES) README.md \
+ 	-rm doc/man/man3/handle_{,w,mem_}error.3
+ 	-rm doc/man/man3/handle_{str,mem}_bos_*.3
+ 	-rm doc/man/man3/handle_str_src_bos_*.3
+-README.md: README
+-	cp $(srcdir)/README README.md
++README.rst: README.md
++	pandoc -o README.rst README.md
+ all-local: Doxyfile doc/footer
+ clean-local:
+ 	rm -rf $(builddir)/doc/html
+diff --git a/README.md b/README.md
+index 6045165b..dc025dd0 100644
+--- a/README.md
++++ b/README.md
+@@ -2,9 +2,6 @@ Safe C Library - README
+ =======================
+ [![safeclib support vis xs:code](doc/safeclib-banner.png)](https://xscode.com/rurban/safeclib)
+ 
+-:toc:
+-
+-
+ Copying
+ -------
+ 
+@@ -14,25 +11,26 @@ under the root directory of this release. Basically it's MIT licensed.
+ Overview
+ --------
+ 
+-This library implements the secure C11 Annex K functions on top of most libc
++This library implements the secure C11 Annex K[^5] functions on top of most libc
+ implementations, which are missing from them.
+ 
+ The ISO TR24731 Bounds Checking Interface documents indicate that the key
+ motivation for the new specification is to help mitigate the ever increasing
+-security attacks, specifically the buffer overrun.
++security attacks, specifically the buffer overrun.[^1]
+ 
+-The rationale document says ``Buffer overrun attacks continue to be a security
++The rationale document says _"Buffer overrun attacks continue to be a security
+ problem. Roughly 10% of vulnerability reports cataloged by CERT from
+ 01/01/2005 to 07/01/2005 involved buffer overflows. Preventing buffer overruns
+-is the primary, but not the only, motivation for this technical report.''
++is the primary, but not the only, motivation for this technical report."_[^2]
+ 
+-The rationale document continues ``that these only mitigate, that is lessen,
++The rationale document continues _"that these only mitigate, that is lessen,
+ security problems. When used properly, these functions decrease the danger
+ buffer overrun attacks. Source code may remain vulnerable due to other bugs
+ and security issues. The highest level of security is achieved by building in
+-layers of security utilizing multiple strategies.''
++layers of security utilizing multiple strategies."_[^2]
++
++The rationale document lists the following key points for TR24731:
+ 
+-.The rationale document lists the following key points for TR24731:
+ - Guard against overflowing a buffer
+ - Do not produce unterminated strings
+ - Do not unexpectedly truncate strings
+@@ -69,7 +67,7 @@ Design Considerations
+ ---------------------
+ 
+ This library implements since 3.0 all functions defined in the
+-specifications.  Included in the library are extensions to the specification
++specifications.[^3]  Included in the library are extensions to the specification
+ to provide a complementary set of functions with like behavior.
+ 
+ This library is meant to be used on top of all the existing libc's
+@@ -83,10 +81,12 @@ http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1106.txt
+ C11 standard (ISO/IEC 9899:2011)
+ http://en.cppreference.com/w/c
+ 
++CERT C Secure Coding Standard[^4]
++
+ Stackoverflow discussion:
+ https://stackoverflow.com/questions/372980/do-you-use-the-tr-24731-safe-functions
+ 
+-DrDobbs review
++DrDobbs review[^6]
+ http://www.drdobbs.com/cpp/the-new-c-standard-explored/232901670
+ 
+ C17 reconsidered safeclib but looked only at the old incomplete Cisco version,
+@@ -98,11 +98,11 @@ http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm
+ The TR24731 specification says an implementation may set errno for the
+ functions defined in the technical report, but is not required to.
+ This library does not set `errno` in most functions, only in
+-bsearch_s, fscanf_s, fwscanf_s, gets_s, gmtime_s, localtime_s,
+-scanf_s, sscanf_s, swscanf_s, strtok_s, vfscanf_s,
+-vfwscanf_s, vsscanf_s, vswscanf_s, wcstok_s, wscanf_s.
++`bsearch_s`, `fscanf_s`, `fwscanf_s`, `gets_s`, `gmtime_s`, `localtime_s`,
++`scanf_s`, `sscanf_s`, `swscanf_s`, `strtok_s`, `vfscanf_s`,
++`vfwscanf_s`, `vsscanf_s`, `vswscanf_s`, `wcstok_s`, `wscanf_s`.
+ 
+-In most cases the safeclib extended ES* errors do not set errno, only
++In most cases the safeclib extended ES* errors do not set `errno`, only
+ when the underlying insecure system call fails, errno is set.  The
+ library does use `errno` return codes as required by functional APIs.
+ Specific Safe C String and Safe C Memory errno codes are defined in
+@@ -128,19 +128,19 @@ With valid dest and dmax values, dest is cleared. With the optional
+ `--disable-null-slack` only the first value of dest is cleared,
+ otherwise the whole dest buffer.
+ 
+-rsize_t::
+-	The specification defines a new type.  This type, rsize_t, is
+-	conditionally defined in the safe_lib.h header file.
++`rsize_t`
++	The specification defines a new type.  This type, `rsize_t`, is
++    conditionally defined in the `safe_lib.h` header file.
+ 
+-RSIZE_MAX::
+-	The specification defines the macro RSIZE_MAX which expands to a value
+-	of type rsize_t. The specification uses RSIZE_MAX for both the string
++`RSIZE_MAX`
++	The specification defines the macro `RSIZE_MAX` which expands to a value
++	of type `rsize_t`. The specification uses `RSIZE_MAX` for both the string
+ 	functions and the memory functions. This implementation defines two
+-	macros: RSIZE_MAX_STR and RSIZE_MAX_MEM.  RSIZE_MAX_STR defines the
+-	range limit for the safe string functions.  RSIZE_MAX_MEM defines the
++	macros: `RSIZE_MAX_STR` and `RSIZE_MAX_MEM`.  `RSIZE_MAX_STR` defines the
++	range limit for the safe string functions. `RSIZE_MAX_MEM` defines the
+ 	range limit for the safe memory functions.  The point is that string
+ 	limits can and should be different from memory limits.
+-	There also exist RSIZE_MAX_WSTR, RSIZE_MAX_MEM16, RSIZE_MAX_MEM32.
++	There also exist `RSIZE_MAX_WSTR`, `RSIZE_MAX_MEM16`, `RSIZE_MAX_MEM32`.
+ 
+ * Compile-time constraints
+ 
+@@ -155,8 +155,8 @@ via the optional `--enable-error-dmax` to be fatal. On unsupported
+ compilers, the overflow check and optional equality warn-dmax check is
+ deferred to run-time. This check is only possible with
+ `__builtin_object_size` and `-O2` when the dest buffer size is known
+-at compile-time, otherwise only the simplier `dest == NULL`, `dmax ==
+-0` and `dmax > RSIZE_MAX` checks are performed.
++at compile-time, otherwise only the simplier `dest == NULL`, `dmax == 0`
++and `dmax > RSIZE_MAX` checks are performed.
+ 
+ * Header Files
+ 
+@@ -184,20 +184,20 @@ The build system for the userspace library is the well known *GNU build
+ system*, a.k.a. Autotools. This system is well understood and supported
+ by many different platforms and distributions which should allow this
+ library to be built on a wide variety of platforms. See the
+-xref:tested-platforms[``Tested Platforms''] section for details on what
++[Tested platforms](#tested-platforms) section for details on what
+ platforms this library was tested on during its development.
+ 
+ * Building
+ 
+ For those familiar with autotools you can probably skip this part. For those
+ not and want to get right to building the code see below. And, for those that
+-need additional information see the 'INSTALL' file in the same directory.
++need additional information see the `INSTALL` file in the same directory.
+ 
+-.To build you do the following:
++To build you do the following:
+ 
+-    $ ./build-aux/autogen.sh
+-    $ ./configure
+-    $ make
++    ./build-aux/autogen.sh
++    ./configure
++    make
+ 
+ `autogen.sh` only needs to be run if you are building from the git
+ repository. Optionally, you can do `make check` if you want to run the unit
+@@ -206,10 +206,10 @@ tests.
+ 
+ * Installing
+ 
+-Installation must be preformed by `root`, an `Administrator' on most
++Installation must be preformed by `root`, an `Administrator` on most
+ systems. The following is used to install the library.
+ 
+-    $ sudo make install
++    sudo make install
+ 
+ Safe Linux Kernel Module
+ ------------------------
+@@ -222,32 +222,30 @@ build the kernel module.
+ 
+ .To build do the following:
+ 
+-    $ ./configure --disable-wchar
+-    $ make -f Makefile.kernel
+-
++    ./configure --disable-wchar
++    make -f Makefile.kernel
+ 
+ This assumes you are compiling on a Linux box and this makefile supports the
+ standard kernel build system infrastructure documented in:
+-<linux-kernel-src-tree>/Documentation/kbuild/modules.txt
++`/usr/src/linux-kernel/Documentation/kbuild/modules.txt`
+ 
+ NOTE: If you build the kernel module then wish to build the userspace library
+-      or vice versa you will need to do a +make clean+ otherwise a +make check+
++      or vice versa you will need to do a `make clean` otherwise a `make check`
+       will fail to build.
+ 
+ 
+ * Installing
+ 
+ The kernel module will be found at the root of the source tree called
+-'slkm.ko'. The file 'testslkm.ko' are the unit tests run on the userspace
++`slkm.ko`. The file `testslkm.ko` are the unit tests run on the userspace
+ library but in Linux kernel module form to verify functionality within the
+ kernel.
+ 
+-
+-[[tested-platforms]]
+ Tested Platforms
+ ----------------
+ 
+-.The library has been tested on the following systems:
++The library has been tested on the following systems:
++
+ - Linux Fedora core 31 - 32 amd64/i386 glibc 2.28 - 2.31 (all gcc's + clang's)
+ - Mac OS X 10.6-12 w/ Apple developer tools and macports (all gcc's + clang's)
+ - Linux Debian 9 - 11 amd64/i386 glibc 2.24 - 2.28 (all gcc's + clang's)
+@@ -265,6 +263,7 @@ Tested Platforms
+ - User Mode Linux (UML), Linux kernel version v3.5.3 w/ Debian Squeeze rootfs
+ 
+ with most available compilers. See `build-aux/smoke.sh` and the various CI configs.
++
+ - https://travis-ci.org/github/rurban/safeclib/
+ - https://ci.appveyor.com/project/rurban/safeclib/
+ - https://cirrus-ci.com/github/rurban/safeclib
+@@ -273,19 +272,25 @@ with most available compilers. See `build-aux/smoke.sh` and the various CI confi
+ Known Issues
+ ------------
+ 1. If you are building the library from the git repository you will have to
+-   first run `build-aux/autogen.sh` which runs autoreconf to ``install'' the
++   first run `build-aux/autogen.sh` which runs autoreconf to `install` the
+    autotools files and create the configure script.
+ 
+-[bibliography]
+-.References
+-- [[[1]]] Programming languages, their environments and system software
+-          interfaces, Extensions to the C Library, Part I: Bounds-checking
+-          interfaces, ISO/IEC TR 24731-1.
+-- [[[2]]] Rationale for TR 24731 Extensions to the C Library Part I:
+-          Bounds-checking interfaces, ISO/IEC JTC1 SC22 WG14 N1225.
+-- [[[3]]] The Open Group Base Specifications Issue 7
+-          http://pubs.opengroup.org/onlinepubs/9699919799/functions/contents.html
+-- [[[4]]] CERT C Secure Coding Standard
+-          https://www.securecoding.cert.org/confluence/display/seccode/CERT+C+Secure+Coding+Standard
+-- [[[5]]] C11 Standard (ISO/IEC 9899:2011) Annex K
+-- [[[6]]] DrDobbs review http://www.drdobbs.com/cpp/the-new-c-standard-explored/232901670
++References
++----------
++
++[^1]: Programming languages, their environments and system software
++      interfaces, Extensions to the C Library, Part I: Bounds-checking
++      interfaces, ISO/IEC TR 24731-1.
++
++[^2]: Rationale for TR 24731 Extensions to the C Library Part I:
++      Bounds-checking interfaces, ISO/IEC JTC1 SC22 WG14 N1225.
++          
++[^3]: The Open Group Base Specifications Issue 7
++      http://pubs.opengroup.org/onlinepubs/9699919799/functions/contents.html
++
++[^4]: CERT C Secure Coding Standard
++      https://www.securecoding.cert.org/confluence/display/seccode/CERT+C+Secure+Coding+Standard
++
++[^5]: C11 Standard (ISO/IEC 9899:2011) Annex K
++
++[^6]: DrDobbs review http://www.drdobbs.com/cpp/the-new-c-standard-explored/232901670
+diff --git a/README.rst b/README.rst
+index c35a7e7c..89aba341 100644
+--- a/README.rst
++++ b/README.rst
+@@ -1,292 +1,331 @@
+ Safe C Library - README
+ =======================
+-.. image:: doc/safeclib-banner.png
+-`safeclib support via xs:code <https://xscode.com/rurban/safeclib>`_
+-
+-:toc:
+ 
++|safeclib support vis xs:code|
+ 
+ Copying
+ -------
+ 
+-This project's licensing restrictions are documented in the file 'COPYING'
+-under the root directory of this release. Basically it's MIT licensed.
++This project’s licensing restrictions are documented in the file
++‘COPYING’ under the root directory of this release. Basically it’s MIT
++licensed.
+ 
+ Overview
+ --------
+ 
+-This library implements the secure C11 Annex K functions on top of most libc
+-implementations, which are missing from them.
+-
+-The ISO TR24731 Bounds Checking Interface documents indicate that the key
+-motivation for the new specification is to help mitigate the ever increasing
+-security attacks, specifically the buffer overrun.
+-
+-The rationale document says ``Buffer overrun attacks continue to be a security
+-problem. Roughly 10% of vulnerability reports cataloged by CERT from
+-01/01/2005 to 07/01/2005 involved buffer overflows. Preventing buffer overruns
+-is the primary, but not the only, motivation for this technical report.''
+-
+-The rationale document continues ``that these only mitigate, that is lessen,
+-security problems. When used properly, these functions decrease the danger
+-buffer overrun attacks. Source code may remain vulnerable due to other bugs
+-and security issues. The highest level of security is achieved by building in
+-layers of security utilizing multiple strategies.''
+-
+-.The rationale document lists the following key points for TR24731:
+-- Guard against overflowing a buffer
+-- Do not produce unterminated strings
+-- Do not unexpectedly truncate strings
+-- Provide a library useful to existing code
+-- Preserve the null terminated string datatype
+-- Only require local edits to programs
+-- Library based solution
+-- Support compile-time checking
+-- Make failures obvious
+-- Zero buffers, null strings
+-- Runtime-constraint handler mechanism
+-- Support re-entrant code
+-- Consistent naming scheme
+-- Have a uniform pattern for the function parameters and return type
+-- Deference to existing technology
+-
+-and the following can be added...
+-
+-- provide a library of functions with like behavior
+-- provide a library of functions that promote and increase code safety and
+-  security
+-- provide a library of functions that are efficient
++This library implements the secure C11 Annex K [1]_ functions on top of
++most libc implementations, which are missing from them.
++
++The ISO TR24731 Bounds Checking Interface documents indicate that the
++key motivation for the new specification is to help mitigate the ever
++increasing security attacks, specifically the buffer overrun. [2]_
++
++The rationale document says *“Buffer overrun attacks continue to be a
++security problem. Roughly 10% of vulnerability reports cataloged by CERT
++from 01/01/2005 to 07/01/2005 involved buffer overflows. Preventing
++buffer overruns is the primary, but not the only, motivation for this
++technical report.”*\  [3]_
++
++The rationale document continues *“that these only mitigate, that is
++lessen, security problems. When used properly, these functions decrease
++the danger buffer overrun attacks. Source code may remain vulnerable due
++to other bugs and security issues. The highest level of security is
++achieved by building in layers of security utilizing multiple
++strategies.”*\  [4]_
++
++The rationale document lists the following key points for TR24731:
++
++-  Guard against overflowing a buffer
++-  Do not produce unterminated strings
++-  Do not unexpectedly truncate strings
++-  Provide a library useful to existing code
++-  Preserve the null terminated string datatype
++-  Only require local edits to programs
++-  Library based solution
++-  Support compile-time checking
++-  Make failures obvious
++-  Zero buffers, null strings
++-  Runtime-constraint handler mechanism
++-  Support re-entrant code
++-  Consistent naming scheme
++-  Have a uniform pattern for the function parameters and return type
++-  Deference to existing technology
++
++and the following can be added…
++
++-  provide a library of functions with like behavior
++-  provide a library of functions that promote and increase code safety
++   and security
++-  provide a library of functions that are efficient
+ 
+ The C11 Standard adopted many of these points, and added some secure
+-`_s` variants in the Annex K.  The Microsoft Windows/MINGW secure API
+-did the same, but deviated in some functions from the standard.
+-Besides Windows (with its msvcrt, ucrt, reactos msvcrt and wine msvcrt
+-variants) only the unused stlport, Android's Bionic, Huawei securec
+-and Embarcadero implemented this C11 secure Annex K API so far.  They
+-are still missing from glibc, musl, FreeBSD, darwin and DragonFly
+-libc, OpenBSD libc, newlib, dietlibc, uClibc, minilibc.
++``_s`` variants in the Annex K. The Microsoft Windows/MINGW secure API
++did the same, but deviated in some functions from the standard. Besides
++Windows (with its msvcrt, ucrt, reactos msvcrt and wine msvcrt variants)
++only the unused stlport, Android’s Bionic, Huawei securec and
++Embarcadero implemented this C11 secure Annex K API so far. They are
++still missing from glibc, musl, FreeBSD, darwin and DragonFly libc,
++OpenBSD libc, newlib, dietlibc, uClibc, minilibc.
+ 
+ Design Considerations
+ ---------------------
+ 
+ This library implements since 3.0 all functions defined in the
+-specifications.  Included in the library are extensions to the specification
+-to provide a complementary set of functions with like behavior.
++specifications. [5]_ Included in the library are extensions to the
++specification to provide a complementary set of functions with like
++behavior.
+ 
+-This library is meant to be used on top of all the existing libc's
+-which miss the secure C11 functions. Of course tighter integration
+-into the system libc would be better, esp. with the printf, scanf and
+-IO functions. See the seperate [libc-overview](doc/libc-overview.md) document.
++This library is meant to be used on top of all the existing libc’s which
++miss the secure C11 functions. Of course tighter integration into the
++system libc would be better, esp. with the printf, scanf and IO
++functions. See the seperate `libc-overview <doc/libc-overview.md>`__
++document.
+ 
+ Austin Group Review of ISO/IEC WDTR 24731
+ http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1106.txt
+ 
+-C11 standard (ISO/IEC 9899:2011)
+-http://en.cppreference.com/w/c
++C11 standard (ISO/IEC 9899:2011) http://en.cppreference.com/w/c
++
++CERT C Secure Coding Standard [6]_
+ 
+ Stackoverflow discussion:
+ https://stackoverflow.com/questions/372980/do-you-use-the-tr-24731-safe-functions
+ 
+-DrDobbs review
++DrDobbs review [7]_
+ http://www.drdobbs.com/cpp/the-new-c-standard-explored/232901670
+ 
+-C17 reconsidered safeclib but looked only at the old incomplete Cisco version,
+-not our complete and fixed version.
++C17 reconsidered safeclib but looked only at the old incomplete Cisco
++version, not our complete and fixed version.
+ http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm
+ 
+-* Use of errno
++-  Use of errno
+ 
+ The TR24731 specification says an implementation may set errno for the
+-functions defined in the technical report, but is not required to.
+-This library does not set `errno` in most functions, only in
+-bsearch_s, fscanf_s, fwscanf_s, gets_s, gmtime_s, localtime_s,
+-scanf_s, sscanf_s, swscanf_s, strtok_s, vfscanf_s,
+-vfwscanf_s, vsscanf_s, vswscanf_s, wcstok_s, wscanf_s.
+-
+-In most cases the safeclib extended ES* errors do not set errno, only
+-when the underlying insecure system call fails, errno is set.  The
+-library does use `errno` return codes as required by functional APIs.
+-Specific Safe C String and Safe C Memory errno codes are defined in
+-the `safe_errno.h` file.
+-
+-* Runtime-constraints
+-
+-Per the spec, the library verifies that the calling program does not violate
+-the function's runtime-constraints. If a runtime-constraint is violated, the
+-library calls the currently registered runtime-constraint handler.
+-
+-Per the spec, multiple runtime-constraint violations in the same call to a
+-library function result in only one call to the runtime-constraint handler.
+-The first violation encountered invokes the runtime-constraint handler.
+-
+-With `--disable-constraint-handler` calling the runtime-constraint handler
+-can be disabled, saving some memory, but not much run-time performance.
++functions defined in the technical report, but is not required to. This
++library does not set ``errno`` in most functions, only in ``bsearch_s``,
++``fscanf_s``, ``fwscanf_s``, ``gets_s``, ``gmtime_s``, ``localtime_s``,
++``scanf_s``, ``sscanf_s``, ``swscanf_s``, ``strtok_s``, ``vfscanf_s``,
++``vfwscanf_s``, ``vsscanf_s``, ``vswscanf_s``, ``wcstok_s``,
++``wscanf_s``.
++
++In most cases the safeclib extended ES\* errors do not set ``errno``,
++only when the underlying insecure system call fails, errno is set. The
++library does use ``errno`` return codes as required by functional APIs.
++Specific Safe C String and Safe C Memory errno codes are defined in the
++``safe_errno.h`` file.
++
++-  Runtime-constraints
++
++Per the spec, the library verifies that the calling program does not
++violate the function’s runtime-constraints. If a runtime-constraint is
++violated, the library calls the currently registered runtime-constraint
++handler.
++
++Per the spec, multiple runtime-constraint violations in the same call to
++a library function result in only one call to the runtime-constraint
++handler. The first violation encountered invokes the runtime-constraint
++handler.
++
++With ``--disable-constraint-handler`` calling the runtime-constraint
++handler can be disabled, saving some memory, but not much run-time
++performance.
+ 
+ The runtime-constraint handler might not return. If the handler does
+ return, the library function whose runtime-constraint was violated
+-returns an indication of failure as given by the function’s return.
+-With valid dest and dmax values, dest is cleared. With the optional
+-`--disable-null-slack` only the first value of dest is cleared,
++returns an indication of failure as given by the function’s return. With
++valid dest and dmax values, dest is cleared. With the optional
++``--disable-null-slack`` only the first value of dest is cleared,
+ otherwise the whole dest buffer.
+ 
+-rsize_t::
+-	The specification defines a new type.  This type, rsize_t, is
+-	conditionally defined in the safe_lib.h header file.
+-
+-RSIZE_MAX::
+-	The specification defines the macro RSIZE_MAX which expands to a value
+-	of type rsize_t. The specification uses RSIZE_MAX for both the string
+-	functions and the memory functions. This implementation defines two
+-	macros: RSIZE_MAX_STR and RSIZE_MAX_MEM.  RSIZE_MAX_STR defines the
+-	range limit for the safe string functions.  RSIZE_MAX_MEM defines the
+-	range limit for the safe memory functions.  The point is that string
+-	limits can and should be different from memory limits.
+-	There also exist RSIZE_MAX_WSTR, RSIZE_MAX_MEM16, RSIZE_MAX_MEM32.
+-
+-* Compile-time constraints
+-
+-With supporting compilers the dmax overflow checks and several more
+-are performed at compile-time.  Currently only since clang-5 with
+-`diagnose_if` support. This checks similar to `_FORTIFY_SOURCE=2` if
+-the `__builtin_object_size` of the dest buffer is the same size as
++``rsize_t`` The specification defines a new type. This type,
++``rsize_t``, is conditionally defined in the ``safe_lib.h`` header file.
++
++``RSIZE_MAX`` The specification defines the macro ``RSIZE_MAX`` which
++expands to a value of type ``rsize_t``. The specification uses
++``RSIZE_MAX`` for both the string functions and the memory functions.
++This implementation defines two macros: ``RSIZE_MAX_STR`` and
++``RSIZE_MAX_MEM``. ``RSIZE_MAX_STR`` defines the range limit for the
++safe string functions. ``RSIZE_MAX_MEM`` defines the range limit for the
++safe memory functions. The point is that string limits can and should be
++different from memory limits. There also exist ``RSIZE_MAX_WSTR``,
++``RSIZE_MAX_MEM16``, ``RSIZE_MAX_MEM32``.
++
++-  Compile-time constraints
++
++With supporting compilers the dmax overflow checks and several more are
++performed at compile-time. Currently only since clang-5 with
++``diagnose_if`` support. This checks similar to ``_FORTIFY_SOURCE=2`` if
++the ``__builtin_object_size`` of the dest buffer is the same size as
+ dmax, and errors if dmax is too big. With the optional
+-`--enable-warn-dmax` it prints a warning if the sizes are different,
+-which is esp. practical as compile-time warning. It can be promoted
+-via the optional `--enable-error-dmax` to be fatal. On unsupported
++``--enable-warn-dmax`` it prints a warning if the sizes are different,
++which is esp. practical as compile-time warning. It can be promoted via
++the optional ``--enable-error-dmax`` to be fatal. On unsupported
+ compilers, the overflow check and optional equality warn-dmax check is
+ deferred to run-time. This check is only possible with
+-`__builtin_object_size` and `-O2` when the dest buffer size is known
+-at compile-time, otherwise only the simplier `dest == NULL`, `dmax ==
+-0` and `dmax > RSIZE_MAX` checks are performed.
++``__builtin_object_size`` and ``-O2`` when the dest buffer size is known
++at compile-time, otherwise only the simplier ``dest == NULL``,
++``dmax == 0`` and ``dmax > RSIZE_MAX`` checks are performed.
+ 
+-* Header Files
++-  Header Files
+ 
+ The specification states the various functions would be added to
+-existing Standard C header files: stdio.h, string.h, etc.  This
++existing Standard C header files: stdio.h, string.h, etc. This
+ implementation separates the memory related functions into the
+-`safe_mem_lib.h` header, the string related functions into the
+-`safe_str_lib.h` header, and the rest into the `safe_lib.h`
+-header. There are also the internal `safe_compile.h`, `safe_config.h`
+-`safe_lib_errno.h` and `safe_types.h` headers, but they do not need to
+-be included.
+-
+-The make file builds a single library `libsafec-VERSION.a` and `.so`.
+-Built but not installed are also libmemprims, libsafeccore and libstdunsafe.
++``safe_mem_lib.h`` header, the string related functions into the
++``safe_str_lib.h`` header, and the rest into the ``safe_lib.h`` header.
++There are also the internal ``safe_compile.h``, ``safe_config.h``
++``safe_lib_errno.h`` and ``safe_types.h`` headers, but they do not need
++to be included.
+ 
+-It is possible to split the make such that a separate `safe_mem_lib.so` and
+-`safe_str_lib.so` are built.  It is also possible to integrate the prototypes
+-into the Standard C header files, but that may require changes to your
+-development tool chain.
++The make file builds a single library ``libsafec-VERSION.a`` and
++``.so``. Built but not installed are also libmemprims, libsafeccore and
++libstdunsafe.
+ 
++It is possible to split the make such that a separate
++``safe_mem_lib.so`` and ``safe_str_lib.so`` are built. It is also
++possible to integrate the prototypes into the Standard C header files,
++but that may require changes to your development tool chain.
+ 
+ Userspace Library
+ -----------------
++
+ The build system for the userspace library is the well known *GNU build
+ system*, a.k.a. Autotools. This system is well understood and supported
+ by many different platforms and distributions which should allow this
+-library to be built on a wide variety of platforms. See the
+-xref:tested-platforms[``Tested Platforms''] section for details on what
+-platforms this library was tested on during its development.
++library to be built on a wide variety of platforms. See the `Tested
++platforms <#tested-platforms>`__ section for details on what platforms
++this library was tested on during its development.
+ 
+-* Building
++-  Building
+ 
+-For those familiar with autotools you can probably skip this part. For those
+-not and want to get right to building the code see below. And, for those that
+-need additional information see the 'INSTALL' file in the same directory.
++For those familiar with autotools you can probably skip this part. For
++those not and want to get right to building the code see below. And, for
++those that need additional information see the ``INSTALL`` file in the
++same directory.
+ 
+-.To build you do the following:
++To build you do the following:
+ 
+-    $ ./build-aux/autogen.sh
+-    $ ./configure
+-    $ make
++::
+ 
+-`autogen.sh` only needs to be run if you are building from the git
+-repository. Optionally, you can do `make check` if you want to run the unit
+-tests.
++   ./build-aux/autogen.sh
++   ./configure
++   make
+ 
++``autogen.sh`` only needs to be run if you are building from the git
++repository. Optionally, you can do ``make check`` if you want to run the
++unit tests.
+ 
+-* Installing
++-  Installing
+ 
+-Installation must be preformed by `root`, an `Administrator' on most
++Installation must be preformed by ``root``, an ``Administrator`` on most
+ systems. The following is used to install the library.
+ 
+-    $ sudo make install
++::
++
++   sudo make install
+ 
+ Safe Linux Kernel Module
+ ------------------------
+-The build for the kernel module has not been integrated into the autotools
+-build infrastructure. Consequently, you have to run a different makefile to
+-build the kernel module.
+ 
++The build for the kernel module has not been integrated into the
++autotools build infrastructure. Consequently, you have to run a
++different makefile to build the kernel module.
+ 
+-* Building
++-  Building
+ 
+ .To build do the following:
+ 
+-    $ ./configure --disable-wchar
+-    $ make -f Makefile.kernel
+-
++::
+ 
+-This assumes you are compiling on a Linux box and this makefile supports the
+-standard kernel build system infrastructure documented in:
+-<linux-kernel-src-tree>/Documentation/kbuild/modules.txt
++   ./configure --disable-wchar
++   make -f Makefile.kernel
+ 
+-NOTE: If you build the kernel module then wish to build the userspace library
+-      or vice versa you will need to do a +make clean+ otherwise a +make check+
+-      will fail to build.
++This assumes you are compiling on a Linux box and this makefile supports
++the standard kernel build system infrastructure documented in:
++``/usr/src/linux-kernel/Documentation/kbuild/modules.txt``
+ 
++NOTE: If you build the kernel module then wish to build the userspace
++library or vice versa you will need to do a ``make clean`` otherwise a
++``make check`` will fail to build.
+ 
+-* Installing
++-  Installing
+ 
+ The kernel module will be found at the root of the source tree called
+-'slkm.ko'. The file 'testslkm.ko' are the unit tests run on the userspace
+-library but in Linux kernel module form to verify functionality within the
+-kernel.
++``slkm.ko``. The file ``testslkm.ko`` are the unit tests run on the
++userspace library but in Linux kernel module form to verify
++functionality within the kernel.
+ 
+-
+-[[tested-platforms]]
+ Tested Platforms
+ ----------------
+ 
+-.The library has been tested on the following systems:
+-- Linux Fedora core 31 - 32 amd64/i386 glibc 2.28 - 2.31 (all gcc's + clang's)
+-- Mac OS X 10.6-12 w/ Apple developer tools and macports (all gcc's + clang's)
+-- Linux Debian 9 - 11 amd64/i386 glibc 2.24 - 2.28 (all gcc's + clang's)
+-- Linux centos 7 amd64
+-- Linux Void amd64 musl-1.1.16
+-- x86_64-w64-mingw32 native and cross-compiled
+-- i686-w64-mingw32 native, and cross-compiled and tested under wine
+-- i386-mingw32 cross-compiled
+-- cygwin32 gcc (newlib)
+-- cygwin64 gcc -std=c99 (newlib)
+-- freebsd 10 - 12 amd64
+-- linux docker images under qemu:
+-  i386/debian, x86_64/rhel, arm32v7/debian, aarch64: arm64v8/{debian,centos,rhel,fedora},
+-  s390x/fedora (the only big endian test I could find), ppc64le/{debian,ubuntu,fedora,centos,rhel}
+-- User Mode Linux (UML), Linux kernel version v3.5.3 w/ Debian Squeeze rootfs
+-
+-with most available compilers. See `build-aux/smoke.sh` and the various CI configs.
+-- https://travis-ci.org/github/rurban/safeclib/
+-- https://ci.appveyor.com/project/rurban/safeclib/
+-- https://cirrus-ci.com/github/rurban/safeclib
+-- https://cloud.drone.io/rurban/safeclib/
++The library has been tested on the following systems:
++
++-  Linux Fedora core 31 - 32 amd64/i386 glibc 2.28 - 2.31 (all gcc’s +
++   clang’s)
++-  Mac OS X 10.6-12 w/ Apple developer tools and macports (all gcc’s +
++   clang’s)
++-  Linux Debian 9 - 11 amd64/i386 glibc 2.24 - 2.28 (all gcc’s +
++   clang’s)
++-  Linux centos 7 amd64
++-  Linux Void amd64 musl-1.1.16
++-  x86_64-w64-mingw32 native and cross-compiled
++-  i686-w64-mingw32 native, and cross-compiled and tested under wine
++-  i386-mingw32 cross-compiled
++-  cygwin32 gcc (newlib)
++-  cygwin64 gcc -std=c99 (newlib)
++-  freebsd 10 - 12 amd64
++-  linux docker images under qemu: i386/debian, x86_64/rhel,
++   arm32v7/debian, aarch64: arm64v8/{debian,centos,rhel,fedora},
++   s390x/fedora (the only big endian test I could find),
++   ppc64le/{debian,ubuntu,fedora,centos,rhel}
++-  User Mode Linux (UML), Linux kernel version v3.5.3 w/ Debian Squeeze
++   rootfs
++
++with most available compilers. See ``build-aux/smoke.sh`` and the
++various CI configs.
++
++-  https://travis-ci.org/github/rurban/safeclib/
++-  https://ci.appveyor.com/project/rurban/safeclib/
++-  https://cirrus-ci.com/github/rurban/safeclib
++-  https://cloud.drone.io/rurban/safeclib/
+ 
+ Known Issues
+ ------------
+-1. If you are building the library from the git repository you will have to
+-   first run `build-aux/autogen.sh` which runs autoreconf to ``install'' the
+-   autotools files and create the configure script.
+-
+-[bibliography]
+-.References
+-- [[[1]]] Programming languages, their environments and system software
+-          interfaces, Extensions to the C Library, Part I: Bounds-checking
+-          interfaces, ISO/IEC TR 24731-1.
+-- [[[2]]] Rationale for TR 24731 Extensions to the C Library Part I:
+-          Bounds-checking interfaces, ISO/IEC JTC1 SC22 WG14 N1225.
+-- [[[3]]] The Open Group Base Specifications Issue 7
+-          http://pubs.opengroup.org/onlinepubs/9699919799/functions/contents.html
+-- [[[4]]] CERT C Secure Coding Standard
+-          https://www.securecoding.cert.org/confluence/display/seccode/CERT+C+Secure+Coding+Standard
+-- [[[5]]] C11 Standard (ISO/IEC 9899:2011) Annex K
+-- [[[6]]] DrDobbs review http://www.drdobbs.com/cpp/the-new-c-standard-explored/232901670
++
++1. If you are building the library from the git repository you will have
++   to first run ``build-aux/autogen.sh`` which runs autoreconf to
++   ``install`` the autotools files and create the configure script.
++
++References
++----------
++
++.. [1]
++   C11 Standard (ISO/IEC 9899:2011) Annex K
++
++.. [2]
++   Programming languages, their environments and system software
++   interfaces, Extensions to the C Library, Part I: Bounds-checking
++   interfaces, ISO/IEC TR 24731-1.
++
++.. [3]
++   Rationale for TR 24731 Extensions to the C Library Part I:
++   Bounds-checking interfaces, ISO/IEC JTC1 SC22 WG14 N1225.
++
++.. [4]
++   Rationale for TR 24731 Extensions to the C Library Part I:
++   Bounds-checking interfaces, ISO/IEC JTC1 SC22 WG14 N1225.
++
++.. [5]
++   The Open Group Base Specifications Issue 7
++   http://pubs.opengroup.org/onlinepubs/9699919799/functions/contents.html
++
++.. [6]
++   CERT C Secure Coding Standard
++   https://www.securecoding.cert.org/confluence/display/seccode/CERT+C+Secure+Coding+Standard
++
++.. [7]
++   DrDobbs review
++   http://www.drdobbs.com/cpp/the-new-c-standard-explored/232901670
++
++.. |safeclib support vis xs:code| image:: doc/safeclib-banner.png
++   :target: https://xscode.com/rurban/safeclib
diff --git a/meta-oe/recipes-core/safec/safec/0016-travis-disable-unfree-osx.patch b/meta-oe/recipes-core/safec/safec/0016-travis-disable-unfree-osx.patch
new file mode 100644
index 000000000..c07dfe3a9
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0016-travis-disable-unfree-osx.patch
@@ -0,0 +1,31 @@ 
+From 0234bec46da4863f849f100c2f5336412ab2f69b Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Mon, 2 Nov 2020 18:46:40 +0100
+Subject: [PATCH] travis: disable unfree osx
+
+---
+ .travis.yml | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/.travis.yml b/.travis.yml
+index 2531643d..55a32322 100644
+--- a/.travis.yml
++++ b/.travis.yml
+@@ -178,11 +178,12 @@ matrix:
+       compiler: g++
+       env: CONF="--enable-debug --enable-unsafe --enable-norm-compat"
+       <<: *test_native
+-    - name: x86_64-osx
+-      compiler: gcc
+-      os: osx
+-      env: CONF="--enable-unsafe --enable-norm-compat"
+-      <<: *test_native
++    # osx is not free anymore
++    #- name: x86_64-osx
++    #  compiler: gcc
++    #  os: osx
++    #  env: CONF="--enable-unsafe --enable-norm-compat"
++    #  <<: *test_native
+     - name: x86_64-clang
+       compiler: clang
+       env: CFLAGS="-O2 -D_FORTIFY_SOURCE=2 -march=native" CONF="--disable-constraint-handler"
diff --git a/meta-oe/recipes-core/safec/safec/0017-Define-NDEBUG-only-if-not-already-defined.patch b/meta-oe/recipes-core/safec/safec/0017-Define-NDEBUG-only-if-not-already-defined.patch
new file mode 100644
index 000000000..4a37dc20c
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0017-Define-NDEBUG-only-if-not-already-defined.patch
@@ -0,0 +1,24 @@ 
+From f46a3368cdcb592553b8aa6918806832452fba31 Mon Sep 17 00:00:00 2001
+From: Alexey Klimkin <klimkin@gmail.com>
+Date: Sat, 30 Jan 2021 23:58:12 -0800
+Subject: [PATCH] Define NDEBUG only if not already defined
+
+---
+ src/safeclib_private.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/safeclib_private.h b/src/safeclib_private.h
+index 2974d5c9..a60a2016 100644
+--- a/src/safeclib_private.h
++++ b/src/safeclib_private.h
+@@ -35,8 +35,10 @@
+ #define __SAFECLIB_PRIVATE_H__
+ 
+ #ifndef DEBUG
++#ifndef NDEBUG
+ #define NDEBUG
+ #endif
++#endif
+ 
+ #include "config.h"
+ 
diff --git a/meta-oe/recipes-core/safec/safec/0018-switch-to-semantic-versioning-3.7-change-PACKAGE-nam.patch b/meta-oe/recipes-core/safec/safec/0018-switch-to-semantic-versioning-3.7-change-PACKAGE-nam.patch
new file mode 100644
index 000000000..1c39caae9
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0018-switch-to-semantic-versioning-3.7-change-PACKAGE-nam.patch
@@ -0,0 +1,254 @@ 
+From dbdf460c66fc1ad6048a23d62300c2bec4f02182 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Fri, 2 Oct 2020 15:57:55 +0200
+Subject: [PATCH] switch to semantic versioning: 3.7, change PACKAGE name
+
+the tardist name went from libsafec-02092020 to safeclib-3.7.
+this should stay the established public name.
+packagers still should use libsafec and libsafec-devel for the lib parts.
+
+without git tag versioning for now.
+See GH #91
+---
+ Makefile.am             | 10 +++++++---
+ configure.ac            | 29 +++++++++++++++++++++--------
+ libsafec.pc.in          |  2 +-
+ src/Makefile.am         | 21 +++++++++++----------
+ src/wchar/mbstowcs_s.c  |  4 ++--
+ src/wchar/wcsrtombs_s.c |  2 +-
+ tests/Makefile.am       |  2 +-
+ 7 files changed, 44 insertions(+), 26 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index b917e77a..c472c145 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -485,11 +485,11 @@ CLEANFILES += Doxyfile doc/footer
+ MAINTAINERCLEANFILES = *~ README.rst
+ 
+ # avoid parallel doxygen
++if HAVE_DOXYGEN
+ $(dist_man_MANS) ::
+ doc/man/man3/EOK.3 :: Doxyfile README.rst doc/footer include/safe_config.h
+ 	-rm $@
+-	doxygen
+-
++	$(DOXYGEN)
+ docs man: Doxyfile doc/footer $(BUILT_SOURCES) README.rst \
+    doc/man/man1/check_for_unsafe_apis.1 doc/man/man3/EOK.3
+ 	-rm -rf doc/man/man3/d[0-9a-f]
+@@ -561,8 +561,11 @@ docs man: Doxyfile doc/footer $(BUILT_SOURCES) README.rst \
+ 	-rm doc/man/man3/handle_{,w,mem_}error.3
+ 	-rm doc/man/man3/handle_{str,mem}_bos_*.3
+ 	-rm doc/man/man3/handle_str_src_bos_*.3
++endif
++if HAVE_PANDOC
+ README.rst: README.md
+ 	pandoc -o README.rst README.md
++endif
+ all-local: Doxyfile doc/footer
+ clean-local:
+ 	rm -rf $(builddir)/doc/html
+@@ -612,6 +615,7 @@ gh-pages: docs
+ release: docs distcheck
+ 	git branch |grep '^* master'
+ 	git tag -f v`date +%d%m%Y`
++	git tag -f $(PACKAGE_VERSION)
+ 	build-aux/autogen.sh
+ 	./configure
+ 	$(MAKE)
+@@ -626,6 +630,6 @@ release: docs distcheck
+ 	$(MAKE) docs
+ 	$(MAKE) gh-pages
+ 	git branch |grep '^* gh-pages'
+-	git commit -m"Update to v`date +%d%m%Y`"
++	git commit -m"Update to $(PACKAGE_VERSION)"
+ 	git push
+ 	git checkout master
+diff --git a/configure.ac b/configure.ac
+index 637e76ea..82ee4ab6 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -34,11 +34,10 @@
+ AC_PREREQ([2.69])
+ 
+ # information on the package
+-AC_INIT([Safe C Library],
+-        [m4_esyscmd(build-aux/version-gen.sh .tarball-version)],
++#AC_SUBST([PACKAGE_VERSION], [3.7])
++AC_INIT([Safe C Library], [3.7],
+         [https://github.com/rurban/safeclib/issues],
+-        [libsafec],
+-        [http://github.com/rurban/safeclib/])
++        [safeclib], [http://github.com/rurban/safeclib/])
+ 
+ # Configure the configure script
+ # ===============================================
+@@ -81,7 +80,6 @@ PKG_INSTALLDIR
+ 
+ # Global Variable & Defaults
+ # ===============================================
+-
+ # Keep this in sync with what is passed in AC_INIT
+ TARBALL_VERSION_FILE=".tarball-version"
+ 
+@@ -98,6 +96,16 @@ dnl         enable_static=no
+ dnl         ;;
+ dnl esac
+ 
++AC_MSG_CHECKING([package version])
++AC_MSG_RESULT($PACKAGE_VERSION)
++AC_MSG_CHECKING([so version-info])
++AC_MSG_RESULT($SAFECLIB_SO_VERSION)
++
++ISODATE=`date +%Y-%m-%d`
++AC_SUBST(ISODATE)
++
++AC_CANONICAL_HOST
++
+ # Configure options
+ # ===============================================
+ 
+@@ -654,6 +662,10 @@ AC_CHECK_PROGS([POD2MAN], [pod2man])
+ if test -z "POD2MAN";
+    then AC_MSG_WARN([pod2man not found - continuing without pod2man support])
+ fi
++AC_CHECK_PROGS([PANDOC], [pandoc])
++if test -z "$PANDOC";
++   then AC_MSG_WARN([pandoc not found - README.rst cannot be generated from README.md])
++fi
+ AM_CONDITIONAL([HAVE_DSYMUTIL], [test -n "$ac_ct_DSYMUTIL"])
+ 
+ case $host_os in
+@@ -1004,8 +1016,8 @@ AC_SUBST([TARBALL_VERSION_FILE])
+ # version information, refer to the libtool manual, section "Updating
+ # library version information":
+ # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
+-AC_SUBST([SAFEC_SO_VERSION], [3:6:0])
+-AC_SUBST([SAFEC_API_VERSION], [3.6.0])
++AC_SUBST([SAFEC_SO_VERSION], [3:7:0])
++AC_SUBST([SAFEC_API_VERSION], [3.7.0])
+ 
+ # Automake variables, these variables get automagically included at the top
+ # of all automake generated make files. This is why you don't see them
+@@ -1044,7 +1056,8 @@ AC_CONFIG_FILES([include/safe_lib_errno.h], [chmod -w include/safe_lib_errno.h])
+ AC_CONFIG_FILES([include/safe_types.h], [chmod -w include/safe_types.h])
+ 
+ AM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"])
+-AM_CONDITIONAL([HAVE_POD2MAN], [test -n "POD2MAN"])
++AM_CONDITIONAL([HAVE_POD2MAN], [test -n "$POD2MAN"])
++AM_CONDITIONAL([HAVE_PANDOC], [test -n "$PANDOC"])
+ AM_CONDITIONAL([HAVE_WINE], [test -n "$WINE"])
+ AM_COND_IF([HAVE_DOXYGEN], [AC_CONFIG_FILES([Doxyfile])])
+ AM_COND_IF([HAVE_DOXYGEN], [AC_CONFIG_FILES([doc/footer])])
+diff --git a/libsafec.pc.in b/libsafec.pc.in
+index 1ad4d964..435d6168 100644
+--- a/libsafec.pc.in
++++ b/libsafec.pc.in
+@@ -8,5 +8,5 @@ Name: @PACKAGE@
+ Description: A safe coding library for C, ref ISO TR24731, C11 Annex K
+ Version: @VERSION@
+ URL: @PACKAGE_URL@
+-Libs: -L${libdir} -lsafec-@SAFEC_API_VERSION@
++Libs: -L${libdir} -lsafec
+ Cflags: -I${includedir}/@PACKAGE@
+diff --git a/src/Makefile.am b/src/Makefile.am
+index e4280032..cd77e7e4 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -265,35 +265,36 @@ endif
+ #$(EXPORT_SYM): safec.h.in
+ #        sed -n -e 's/^..*SAFEC_EXPORT[[:space:]][[:space:]]*\([[:alnum:]_][[:alnum:]_]*\)..*$$/\1/p' @top_srcdir@/src/safec.h.in > $@
+ 
+-lib_LTLIBRARIES      = libsafec-@SAFEC_API_VERSION@.la
+-libsafec_@SAFEC_API_VERSION@_la_SOURCES = \
++lib_LTLIBRARIES  = libsafec.la
++libsafec_la_SOURCES = \
+ 	$(STD_MEM_FILES)    \
+ 	$(STD_STR_FILES)    \
+ 	$(STD_IO_FILES)     \
+ 	$(STD_OS_FILES)     \
+ 	$(STD_MISC_FILES)
+ if ENABLE_WCHAR
+-libsafec_@SAFEC_API_VERSION@_la_SOURCES += \
++libsafec_la_SOURCES += \
+ 	$(STD_WCHAR_FILES)
+ endif
+ if ENABLE_EXTS
+-libsafec_@SAFEC_API_VERSION@_la_SOURCES += \
++libsafec_la_SOURCES += \
+ 	$(EXT_MEM_FILES) \
+ 	$(EXT_STR_FILES)
+ endif
+ 
+-libsafec_@SAFEC_API_VERSION@_la_LIBADD = \
++libsafec_la_LIBADD = \
+ 	libmemprims.la  \
+ 	libsafeccore.la
+ if ENABLE_UNSAFE
+-libsafec_@SAFEC_API_VERSION@_la_LIBADD += \
++libsafec_la_LIBADD += \
+ 	libstdunsafe.la
+ endif
+-libsafec_@SAFEC_API_VERSION@_la_LDFLAGS = \
++libsafec_la_LDFLAGS = \
+ 	-version-info $(SAFEC_SO_VERSION) \
+-	-no-undefined
++	-no-undefined \
++	$(LDFLAGS) $(AM_LDFLAGS)
+ #	-export-symbols $(EXPORT_SYM)
+-#libsafec_@SAFEC_API_VERSION@_la_DEPENDENCIES = $(EXPORT_SYM)
++#libsafec_la_DEPENDENCIES = $(EXPORT_SYM)
+ 
+ # emacs flymake-mode
+ check-syntax:
+@@ -306,7 +307,7 @@ AM_CFLAGS += @GCOV_CFLAGS@
+ LIBS      += @GCOV_LIBS@
+ gcov:
+ 	-test -f $(builddir)/gcov.log && rm $(builddir)/gcov.log
+-	for c in $(libsafec_@SAFEC_API_VERSION@_la_SOURCES); do \
++	for c in $(libsafec_la_SOURCES); do \
+ 	  dir="`dirname $$c`"; base="`basename $$c .c`"; \
+ 	  if test -e "$$dir/$$base.gcno" -a -e $$c; then \
+ 	    $(GCOV) -s $$dir $$c | tee -a $(builddir)/gcov.log; \
+diff --git a/src/wchar/mbstowcs_s.c b/src/wchar/mbstowcs_s.c
+index 8d4bf7aa..14bae27c 100644
+--- a/src/wchar/mbstowcs_s.c
++++ b/src/wchar/mbstowcs_s.c
+@@ -35,8 +35,8 @@
+ #include "safeclib_private.h"
+ #endif
+ 
+-#if (defined(TEST_MSVCRT) && defined(HAVE_MBSRTOWC_S)) ||                      \
+-    !defined(HAVE_WCHAR_H) || !defined(HAVE_MBSTOWCS)
++#if (defined(TEST_MSVCRT) && defined(HAVE_MBSTOWCS_S)) ||                      \
++    !defined(HAVE_WCHAR_H)
+ #else
+ 
+ /* newlib, cygwin64 has no STDC_HEADERS!
+diff --git a/src/wchar/wcsrtombs_s.c b/src/wchar/wcsrtombs_s.c
+index 02397d7e..824a389c 100644
+--- a/src/wchar/wcsrtombs_s.c
++++ b/src/wchar/wcsrtombs_s.c
+@@ -35,7 +35,7 @@
+ #include "safeclib_private.h"
+ #endif
+ 
+-#if (defined(TEST_MSVCRT) && defined(HAVE_WCSTOK_S)) || !defined(HAVE_WCHAR_H)
++#if (defined(TEST_MSVCRT) && defined(HAVE_WCSRTOMBS_S)) || !defined(HAVE_WCHAR_H)
+ #else
+ 
+ /**
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 0301794d..9ace5de0 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -218,7 +218,7 @@ AM_CFLAGS  += -I$(top_builddir)/include -I$(srcdir)
+ # WARN_CFLAGS works mostly, but too strict with gnu extensions
+ AM_CFLAGS += $(WARN_CFLAGS_TESTS)
+ 
+-LDADD      = $(top_builddir)/src/libsafec-@SAFEC_API_VERSION@.la
++LDADD      = $(top_builddir)/src/libsafec.la
+ 
+ TESTS = $(SAFEC_BUILT_TESTS)
+ check_PROGRAMS = $(SAFEC_BUILT_TESTS)
diff --git a/meta-oe/recipes-core/safec/safec/0019-update-freebsd-smoker.patch b/meta-oe/recipes-core/safec/safec/0019-update-freebsd-smoker.patch
new file mode 100644
index 000000000..0d3797dd2
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0019-update-freebsd-smoker.patch
@@ -0,0 +1,28 @@ 
+From a4abce065446410d137cece7cd017ff80251713d Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sat, 20 Mar 2021 08:19:46 +0100
+Subject: [PATCH] update freebsd smoker
+
+---
+ .cirrus.yml | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/.cirrus.yml b/.cirrus.yml
+index bc7e7a66..ff47e5d0 100644
+--- a/.cirrus.yml
++++ b/.cirrus.yml
+@@ -1,11 +1,11 @@
+ # Build configuration for https://cirrus-ci.org
+ 
+ freebsd_instance:
+-  image_family: freebsd-12-1
+-
++  image_family: freebsd-12-2
++  cpu: 4
+ task:
+   install_script:
+-    - pkg install -y autoconf automake libtool pkgconf git wget
++    - pkg install -y autoconf automake libtool pkgconf git wget m4
+   build_script:
+     - build-aux/autogen.sh
+     - CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib ./configure --enable-unsafe --enable-norm-compat
diff --git a/meta-oe/recipes-core/safec/safec/0020-fix-mingw-keyring-mess-again.patch b/meta-oe/recipes-core/safec/safec/0020-fix-mingw-keyring-mess-again.patch
new file mode 100644
index 000000000..1a751eece
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0020-fix-mingw-keyring-mess-again.patch
@@ -0,0 +1,44 @@ 
+From 986f6d34e49637d68cb41221307231f0ea79ca4d Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Wed, 7 Apr 2021 16:56:05 +0200
+Subject: [PATCH] fix mingw keyring mess again
+
+---
+ build-aux/msys2.bat | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/build-aux/msys2.bat b/build-aux/msys2.bat
+index d76009ac..87d98cb9 100644
+--- a/build-aux/msys2.bat
++++ b/build-aux/msys2.bat
+@@ -16,11 +16,15 @@ echo Installation MSYS2 build preconditions...
+ echo Extending path to MSYS...
+ SET "PATH=C:\%MSYS2_DIR%\%MSYSTEM%\bin;C:\%MSYS2_DIR%\usr\bin;%PATH%"
+ 
++echo Skipping pacman updates
++goto depends
+ echo Temporary keyring mess (https://www.msys2.org/news/)
+-bash -lc "curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz"
+-bash -lc "curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz.sig"
+-bash -lc "pacman-key --verify msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz{.sig,}"
++bash -lc "wget http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz{,.sig}"
++bash -lc "pacman-key --verify msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz.sig"
+ bash -lc "pacman -U --noconfirm msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz"
++rem bash -lc "curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz"
++rem bash -lc "curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz.sig"
++rem bash -lc "pacman-key --verify msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz{.sig,}"
+ rem bash -lc "pacman -U --config <(echo) msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz"
+ 
+ echo Updating pacman...
+@@ -33,8 +37,9 @@ bash -lc "pacman -Syyu --noconfirm"
+ rem echo Installing git...
+ rem bash -lc "pacman -S --needed --noconfirm git"
+ 
++:depends
+ echo Installing dependencies...
+ rem mingw-w64-x86_64-pdcurses and mingw-w64-x86_64-ncurses are in conflict...
+ rem bash -lc "pacman -Rddn --noconfirm mingw-w64-%MSYS2_ARCH%-ncurses mingw-w64-%MSYS2_ARCH%-termcap mingw-w64-i686-gcc-ada mingw-w64-i686-gcc-objc mingw-w64-x86_64-gcc-ada mingw-w64-x86_64-gcc-objc"
+-bash -lc "pacman -Syyu --needed --noconfirm mingw-w64-%MSYS2_ARCH%-toolchain mingw-w64-%MSYS2_ARCH%-libtool mingw-w64-%MSYS2_ARCH%-libiconv"
+-rem autoconf-2.69 automake-wrapper
++bash -lc "pacman -S --needed --noconfirm mingw-w64-%MSYS2_ARCH%-libiconv"
++rem autoconf-2.69 automake-wrapper mingw-w64-%MSYS2_ARCH%-libtool mingw-w64-%MSYS2_ARCH%-toolchain
diff --git a/meta-oe/recipes-core/safec/safec/0021-Dont-install-wchar-manpages-with-disable-wchar.patch b/meta-oe/recipes-core/safec/safec/0021-Dont-install-wchar-manpages-with-disable-wchar.patch
new file mode 100644
index 000000000..7ea4a6506
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0021-Dont-install-wchar-manpages-with-disable-wchar.patch
@@ -0,0 +1,163 @@ 
+From 2218c62ce6d17760484530df95ba0f8d539d92c4 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sun, 18 Apr 2021 10:17:29 +0200
+Subject: [PATCH] Dont install wchar manpages with --disable-wchar
+
+and remove not generated wcsnaticmp_s.3 manpage. Fixes GH #95
+---
+ Makefile.am | 67 ++++++++++++++++++++++++++---------------------------
+ 1 file changed, 33 insertions(+), 34 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index c472c145..98b82982 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -138,7 +138,6 @@ dist_man_MANS += \
+ 	doc/man/man3/RSIZE_MAX_MEM16.3	\
+ 	doc/man/man3/RSIZE_MAX_MEM32.3	\
+ 	doc/man/man3/RSIZE_MAX_STR.3	\
+-	doc/man/man3/RSIZE_MAX_WMEM.3	\
+ 	doc/man/man3/RSIZE_MAX_WSTR.3	\
+ 	doc/man/man3/RSIZE_MIN_STR.3	\
+ 	doc/man/man3/SAFECLIB_STR_NULL_SLACK.3	\
+@@ -167,10 +166,6 @@ dist_man_MANS += \
+ 	doc/man/man3/freopen_s.c.3	\
+ 	doc/man/man3/fscanf_s.3		\
+ 	doc/man/man3/fscanf_s.c.3	\
+-	doc/man/man3/fwprintf_s.3	\
+-	doc/man/man3/fwprintf_s.c.3	\
+-	doc/man/man3/fwscanf_s.3	\
+-	doc/man/man3/fwscanf_s.c.3	\
+ 	doc/man/man3/getenv_s.3		\
+ 	doc/man/man3/getenv_s.c.3	\
+ 	doc/man/man3/gets_s.3		\
+@@ -183,10 +178,6 @@ dist_man_MANS += \
+ 	doc/man/man3/invoke_safe_str_constraint_handler.3	\
+ 	doc/man/man3/localtime_s.3	\
+ 	doc/man/man3/localtime_s.c.3	\
+-	doc/man/man3/mbsrtowcs_s.3	\
+-	doc/man/man3/mbsrtowcs_s.c.3	\
+-	doc/man/man3/mbstowcs_s.3	\
+-	doc/man/man3/mbstowcs_s.c.3	\
+ 	doc/man/man3/mem_handler.3	\
+ 	doc/man/man3/mem_prim_move.3	\
+ 	doc/man/man3/mem_prim_move16.3	\
+@@ -255,8 +246,6 @@ dist_man_MANS += \
+ 	doc/man/man3/set_str_constraint_handler_s.3	\
+ 	doc/man/man3/snprintf_s.3	\
+ 	doc/man/man3/snprintf_s.c.3	\
+-	doc/man/man3/snwprintf_s.3	\
+-	doc/man/man3/snwprintf_s.c.3	\
+ 	doc/man/man3/sprintf_s.3	\
+ 	doc/man/man3/sprintf_s.c.3	\
+ 	doc/man/man3/sscanf_s.3		\
+@@ -357,10 +346,6 @@ dist_man_MANS += \
+ 	doc/man/man3/strupr_s.3		\
+ 	doc/man/man3/strzero_s.3	\
+ 	doc/man/man3/strzero_s.c.3	\
+-	doc/man/man3/swprintf_s.3	\
+-	doc/man/man3/swprintf_s.c.3	\
+-	doc/man/man3/swscanf_s.3	\
+-	doc/man/man3/swscanf_s.c.3	\
+ 	doc/man/man3/timingsafe_bcmp.3	\
+ 	doc/man/man3/timingsafe_bcmp.c.3	\
+ 	doc/man/man3/timingsafe_memcmp.3	\
+@@ -369,6 +354,37 @@ dist_man_MANS += \
+ 	doc/man/man3/tmpfile_s.c.3	\
+ 	doc/man/man3/tmpnam_s.3		\
+ 	doc/man/man3/tmpnam_s.c.3	\
++	doc/man/man3/vfprintf_s.3	\
++	doc/man/man3/vfprintf_s.c.3	\
++	doc/man/man3/vfscanf_s.3	\
++	doc/man/man3/vfscanf_s.c.3	\
++	doc/man/man3/vprintf_s.3	\
++	doc/man/man3/vprintf_s.c.3	\
++	doc/man/man3/vscanf_s.3	\
++	doc/man/man3/vscanf_s.c.3	\
++	doc/man/man3/vsnprintf_s.3	\
++	doc/man/man3/vsnprintf_s.c.3	\
++	doc/man/man3/vsprintf_s.3	\
++	doc/man/man3/vsprintf_s.c.3	\
++	doc/man/man3/vsscanf_s.3	\
++	doc/man/man3/vsscanf_s.c.3
++if ENABLE_WCHAR
++dist_man_MANS += \
++	doc/man/man3/RSIZE_MAX_WMEM.3	\
++	doc/man/man3/fwprintf_s.3	\
++	doc/man/man3/fwprintf_s.c.3	\
++	doc/man/man3/fwscanf_s.3	\
++	doc/man/man3/fwscanf_s.c.3	\
++	doc/man/man3/mbsrtowcs_s.3	\
++	doc/man/man3/mbsrtowcs_s.c.3	\
++	doc/man/man3/mbstowcs_s.3	\
++	doc/man/man3/mbstowcs_s.c.3	\
++	doc/man/man3/snwprintf_s.3	\
++	doc/man/man3/snwprintf_s.c.3	\
++	doc/man/man3/swprintf_s.3	\
++	doc/man/man3/swprintf_s.c.3	\
++	doc/man/man3/swscanf_s.3	\
++	doc/man/man3/swscanf_s.c.3	\
+ 	doc/man/man3/towctrans.c.3	\
+ 	doc/man/man3/towfc_s.3		\
+ 	doc/man/man3/towfc_s.c.3	\
+@@ -384,26 +400,12 @@ dist_man_MANS += \
+ 	doc/man/man3/unwifcmp.h.3	\
+ 	doc/man/man3/unwifcpt.h.3	\
+ 	doc/man/man3/unwifexc.h.3	\
+-	doc/man/man3/vfprintf_s.3	\
+-	doc/man/man3/vfprintf_s.c.3	\
+-	doc/man/man3/vfscanf_s.3	\
+-	doc/man/man3/vfscanf_s.c.3	\
+ 	doc/man/man3/vfwprintf_s.3	\
+ 	doc/man/man3/vfwprintf_s.c.3	\
+ 	doc/man/man3/vfwscanf_s.3	\
+ 	doc/man/man3/vfwscanf_s.c.3	\
+-	doc/man/man3/vprintf_s.3	\
+-	doc/man/man3/vprintf_s.c.3	\
+-	doc/man/man3/vscanf_s.3	\
+-	doc/man/man3/vscanf_s.c.3	\
+-	doc/man/man3/vsnprintf_s.3	\
+-	doc/man/man3/vsnprintf_s.c.3	\
+ 	doc/man/man3/vsnwprintf_s.3	\
+ 	doc/man/man3/vsnwprintf_s.c.3	\
+-	doc/man/man3/vsprintf_s.3	\
+-	doc/man/man3/vsprintf_s.c.3	\
+-	doc/man/man3/vsscanf_s.3	\
+-	doc/man/man3/vsscanf_s.c.3	\
+ 	doc/man/man3/vswprintf_s.3	\
+ 	doc/man/man3/vswprintf_s.c.3	\
+ 	doc/man/man3/vswscanf_s.3	\
+@@ -411,7 +413,7 @@ dist_man_MANS += \
+ 	doc/man/man3/vwprintf_s.3	\
+ 	doc/man/man3/vwprintf_s.c.3	\
+ 	doc/man/man3/vwscanf_s.3	\
+-	doc/man/man3/vwscanf_s.c.3	\
++	doc/man/man3/vwscanf_s.c.3 	\
+ 	doc/man/man3/wcrtomb_s.3	\
+ 	doc/man/man3/wcrtomb_s.c.3	\
+ 	doc/man/man3/wcscat_s.3		\
+@@ -430,7 +432,6 @@ dist_man_MANS += \
+ 	doc/man/man3/wcslwr_s.c.3	\
+ 	doc/man/man3/wcsnatcmp_s.3	\
+ 	doc/man/man3/wcsnatcmp_s.c.3	\
+-	doc/man/man3/wcsnaticmp_s.3	\
+ 	doc/man/man3/wcsncat_s.3	\
+ 	doc/man/man3/wcsncat_s.c.3	\
+ 	doc/man/man3/wcsncmp_s.3	\
+@@ -472,15 +473,13 @@ dist_man_MANS += \
+ 	doc/man/man3/wprintf_s.c.3	\
+ 	doc/man/man3/wscanf_s.3		\
+ 	doc/man/man3/wscanf_s.c.3
+-#if ENABLE_WCHAR
+-#dist_man_MANS += \
+ #	doc/man/man3/WCSNORM_FCC.3      \
+ #	doc/man/man3/WCSNORM_FCD.3      \
+ #	doc/man/man3/WCSNORM_NFC.3      \
+ #	doc/man/man3/WCSNORM_NFD.3      \
+ #	doc/man/man3/WCSNORM_NFKC.3     \
+ #	doc/man/man3/WCSNORM_NFKD.3
+-#endif
++endif
+ CLEANFILES += Doxyfile doc/footer
+ MAINTAINERCLEANFILES = *~ README.rst
+ 
diff --git a/meta-oe/recipes-core/safec/safec/0022-kernel-fix-for-time64_t-only.patch b/meta-oe/recipes-core/safec/safec/0022-kernel-fix-for-time64_t-only.patch
new file mode 100644
index 000000000..89506a18a
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0022-kernel-fix-for-time64_t-only.patch
@@ -0,0 +1,24 @@ 
+From 24e41cec50b2ce2ad5a2fe8731d948c5993a19a2 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sun, 18 Apr 2021 13:12:42 +0200
+Subject: [PATCH] kernel: fix for time64_t only
+
+no CONFIG_COMPAT_32BIT_TIME
+Should fix GH #96
+---
+ src/safeclib_private.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/safeclib_private.h b/src/safeclib_private.h
+index a60a2016..d5cdb3f7 100644
+--- a/src/safeclib_private.h
++++ b/src/safeclib_private.h
+@@ -52,6 +52,8 @@
+ /* Needed since the switch to time64_t */
+ #if defined CONFIG_COMPAT_32BIT_TIME && defined _LINUX_TIME64_H && defined __VDSO_TIME32_H
+ #define time_t old_time32_t
++#elif defined _LINUX_TIME64_H && !defined __VDSO_TIME32_H
++#define time_t time64_t
+ #endif
+ 
+ #define RCNEGATE(x) (-(x))
diff --git a/meta-oe/recipes-core/safec/safec/0023-configure-replace-obsolute-macros.patch b/meta-oe/recipes-core/safec/safec/0023-configure-replace-obsolute-macros.patch
new file mode 100644
index 000000000..ee483419f
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0023-configure-replace-obsolute-macros.patch
@@ -0,0 +1,82 @@ 
+From b08b35f8eff8bc069a0bb23deb53b14dc6b3a53f Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sun, 18 Apr 2021 18:24:00 +0200
+Subject: [PATCH] configure: replace obsolute macros
+
+esp. hardcode $as_echo as echo.
+But the real problem is crlf conversion on multiple \ lines, leading
+to \^M on mingw.
+---
+ .gitattributes |  4 +++-
+ configure.ac   | 16 ++++++++--------
+ 2 files changed, 11 insertions(+), 9 deletions(-)
+
+diff --git a/.gitattributes b/.gitattributes
+index 8310a4b1..8f73f512 100644
+--- a/.gitattributes
++++ b/.gitattributes
+@@ -7,7 +7,9 @@
+ *.h           text
+ *.txt         text
+ *.am          text
+-/configure.ac text
++
++# needs unix lf
++/configure.ac text eol=lf
+ 
+ # Declare files that will always have CRLF line endings on checkout.
+ *.sln text eol=crlf
+diff --git a/configure.ac b/configure.ac
+index 82ee4ab6..bfc37754 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -35,9 +35,7 @@ AC_PREREQ([2.69])
+ 
+ # information on the package
+ #AC_SUBST([PACKAGE_VERSION], [3.7])
+-AC_INIT([Safe C Library], [3.7],
+-        [https://github.com/rurban/safeclib/issues],
+-        [safeclib], [http://github.com/rurban/safeclib/])
++AC_INIT([Safe C Library],[3.7],[https://github.com/rurban/safeclib/issues],[safeclib],[http://github.com/rurban/safeclib/])
+ 
+ # Configure the configure script
+ # ===============================================
+@@ -392,8 +390,8 @@ AC_PROG_CC
+ AC_PROG_CPP
+ AC_PROG_INSTALL
+ AM_PROG_CC_C_O
+-AC_PROG_CC_C99
+-AC_PROG_CC_C11
++#AC_PROG_CC_C99
++#AC_PROG_CC_C11
+ 
+ if test "x$ac_cv_prog_cc_c99" = "xno"; then
+    dnl we really should ERROR, lets see how far can come without
+@@ -694,6 +692,8 @@ AC_CHECK_HEADERS([stdlib.h	\
+                   malloc.h	\
+                   string.h	\
+                   limits.h	\
++                  stddef.h	\
++                  unistd.h	\
+                   sys/types.h	\
+                   inttypes.h	\
+                   stdint.h	\
+@@ -873,15 +873,15 @@ AC_CHECK_FUNCS([ memset strcmp strcasecmp strcasestr strcspn strpbrk strspn \
+         vswprintf vsnwprintf vswscanf mbsrtowcs mbstowcs iswdigit iswspace \
+         towlower towupper towctrans bcmp secure_getenv timingsafe_memcmp \
+         timingsafe_bcmp explicit_bzero explicit_memset \
+-        asctime_r ctime_r gmtime_r localtime_r memccpy ])
++        asctime_r ctime_r gmtime_r localtime_r memccpy])
+ 
+ dnl add the extensions, pretending we want them
+-$as_echo '#define __STDC_WANT_LIB_EXT1__  1' >>confdefs.h
++echo "#define __STDC_WANT_LIB_EXT1__  1" >>confdefs.h
+ dnl native safec shadowing functions (should be none)
+ AC_CHECK_FUNCS([_memcpy_s_chk _memmove_s_chk _memset_s_chk _memcmp_s_chk \
+         _strcpy_s_chk _strncpy_s_chk _strcat_s_chk _strncat_s_chk _strnlen_s_chk \
+         _printf_s_chk _sprintf_s_chk _snprintf_s_chk _swprintf_s_chk \
+-        _vfprintf_s_chk _vfwprintf_s_chk _vsprintf_s_chk _vsnprintf_s_chk ])
++        _vfprintf_s_chk _vfwprintf_s_chk _vsprintf_s_chk _vsnprintf_s_chk])
+ dnl native C11 Annex K functions
+ dnl vsnprintf_s vsnwprintf_s strtok_s wcstok_s deviate in mingw from c11
+ AC_CHECK_FUNCS(
diff --git a/meta-oe/recipes-core/safec/safec/0024-add-GH-Actions.patch b/meta-oe/recipes-core/safec/safec/0024-add-GH-Actions.patch
new file mode 100644
index 000000000..4fb766748
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0024-add-GH-Actions.patch
@@ -0,0 +1,151 @@ 
+From 13f7ee320f57fce221e53e442d8a63183199288a Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sun, 18 Apr 2021 13:21:24 +0200
+Subject: [PATCH] add GH Actions
+
+not as far as travis qemu/docker builds yet
+not much archs
+
+fixed mingw autoconf by setting the crlf policy. see previous commit.
+---
+ .github/workflows/main.yml | 117 +++++++++++++++++++++++++++++++++++++
+ configure.ac               |   2 +-
+ 2 files changed, 118 insertions(+), 1 deletion(-)
+ create mode 100644 .github/workflows/main.yml
+
+diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
+new file mode 100644
+index 00000000..0ea302db
+--- /dev/null
++++ b/.github/workflows/main.yml
+@@ -0,0 +1,117 @@
++name: Github CI
++on: [push, pull_request]
++
++#strategy:
++#  matrix:
++#    os: [ubuntu-14.04, ubuntu-18.04, ubuntu-latest]
++
++jobs:
++  linux:
++    runs-on: ubuntu-latest
++    timeout-minutes: 60
++    strategy:
++      fail-fast: false
++      matrix:
++        CONF_ARGS:
++          - --disable-wchar
++          - --enable-unsafe --enable-norm-compat
++          - --enable-debug --enable-unsafe --enable-norm-compat --enable-gcov
++          - --enable-debug --enable-unsafe --enable-norm-compat CFLAGS="-fsanitize=address"
++          - --disable-nullslack --enable-warn-dmax
++          - --disable-extensions CFLAGS="-march=native"
++    steps:
++    - uses: actions/checkout@v2
++      with:
++        fetch-depth: 1
++    - run: sudo apt-get install doxygen libtext-diff-perl pkg-config
++    - run: sh build-aux/autogen.sh
++    - run: ./configure ${{ matrix.CONF_ARGS }}
++    - if: matrix.CONF_ARGS == '--disable-wchar'
++      name: make kernel module
++      run: make -f Makefile.kernel && make clean
++    - run: make
++    - run: make check-log
++    - if: ${{ contains(matrix.CONF_ARGS, '--enable-gcov') }}
++      name: Run make codecov if --enable-gcov
++      run: |
++        sudo apt-get install libdevel-cover-perl
++        make gcov
++        curl -s https://codecov.io/bash -o codecov_io.sh
++        chmod +x codecov_io.sh
++        bash codecov_io.sh
++    - if: matrix.CONF_ARGS == ''
++      name: Run make distcheck
++      run: |
++        sudo apt-get -y install doxygen
++        make distcheck
++  macOS:
++    name: macOS
++    runs-on: macOS-latest
++    steps:
++    - name: init
++      run: brew install automake
++    - name: checkout
++      uses: actions/checkout@v2
++    - run: sh build-aux/autogen.sh
++    - run: ./configure
++    - run: make
++    - run: make check-log
++    #- run: make distcheck
++  mingw:
++    name: mingw
++    runs-on: windows-latest
++    env:
++      MSYS2_DIR: msys64
++      MSYS2_ARCH: x86_64
++      MSYSTEM: MINGW64
++      ARCH: win64
++      PLATFORM: x64
++      #PATH: "C:\%MSYS2_DIR%\%MSYSTEM%\bin;C:\%MSYS2_DIR%\usr\bin;%PATH%"
++    steps:
++      # see https://github.com/msys2/setup-msys2
++    - name: setup-msys2
++      uses: msys2/setup-msys2@v2
++      with:
++        path-type: minimal
++        update: true
++        install: >-
++          git
++          base-devel
++          coreutils
++          mingw-w64-x86_64-toolchain
++          mingw-w64-x86_64-libtool
++          mingw-w64-x86_64-perl
++    - run: reg add "HKLM\Software\Microsoft\Windows\Windows Error Reporting" /f /v DontShowUI /d 1
++    - run: git config --global core.autocrlf input
++    - name: checkout
++      uses: actions/checkout@v2
++    - shell: msys2 {0}
++      run: sh build-aux/autogen.sh
++    #- name: Create zipped asset
++    #  run: gzip -c configure >configure.gz
++    #- name: Create Release
++    #  id: create_release
++    #  uses: actions/create-release@v1
++    #  env:
++    #    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
++    #  with:
++    #    tag_name: ${{ github.ref }}
++    #    release_name: Draft Release ${{ github.ref }}
++    #    draft: true
++    #    prerelease: false
++    #- name: Upload Release Asset
++    #  id: upload-release-asset
++    #  uses: actions/upload-release-asset@v1
++    #  env:
++    #    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
++    #  with:
++    #    upload_url: ${{ steps.create_release.outputs.upload_url }}
++    #    asset_path: ./configure.gz
++    #    asset_name: configure.gz
++    #    asset_content_type: application/gzip
++    - shell: msys2 {0}
++      run: ./configure
++    - shell: msys2 {0}
++      run: make
++    - shell: msys2 {0}
++      run: make check-log
+diff --git a/configure.ac b/configure.ac
+index bfc37754..c6cfd8ca 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -4,7 +4,7 @@
+ # 2017  Reini Urban <rurban@cpan.org>
+ #
+ # Copyright (c) 2012, 2013 Cisco Systems
+-# Copyright (c) 2017, 2018, 2019, 2020 Reini Urban
++# Copyright (c) 2017-2021 Reini Urban
+ # All rights reserved.
+ #
+ # Permission is hereby granted, free of charge, to any person
diff --git a/meta-oe/recipes-core/safec/safec/0025-avoid-macro-redefinition-warnings.patch b/meta-oe/recipes-core/safec/safec/0025-avoid-macro-redefinition-warnings.patch
new file mode 100644
index 000000000..46bdf5213
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0025-avoid-macro-redefinition-warnings.patch
@@ -0,0 +1,60 @@ 
+From 210fa4546fafa4a36ab2d030803a85a56864dc08 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sun, 18 Apr 2021 19:03:41 +0200
+Subject: [PATCH] avoid macro redefinition warnings
+
+---
+ .github/workflows/main.yml | 2 +-
+ include/safe_mem_lib.h     | 1 +
+ include/safe_str_lib.h     | 1 +
+ src/safeclib_private.h     | 1 +
+ 4 files changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
+index 0ea302db..6f50ad69 100644
+--- a/.github/workflows/main.yml
++++ b/.github/workflows/main.yml
+@@ -112,6 +112,6 @@ jobs:
+     - shell: msys2 {0}
+       run: ./configure
+     - shell: msys2 {0}
+-      run: make
++      run: make V=1
+     - shell: msys2 {0}
+       run: make check-log
+diff --git a/include/safe_mem_lib.h b/include/safe_mem_lib.h
+index 6981711a..2b7468be 100644
+--- a/include/safe_mem_lib.h
++++ b/include/safe_mem_lib.h
+@@ -49,6 +49,7 @@ extern "C" {
+ #endif
+ 
+ #if defined _WIN32 && !defined(DISABLE_DLLIMPORT)
++#undef EXTERN
+ #if defined(EXPORT) && defined(__SAFECLIB_PRIVATE_H__)
+ #define EXTERN extern __declspec(dllexport)
+ #else
+diff --git a/include/safe_str_lib.h b/include/safe_str_lib.h
+index f373abc1..baa0c90b 100644
+--- a/include/safe_str_lib.h
++++ b/include/safe_str_lib.h
+@@ -56,6 +56,7 @@ extern "C" {
+ #endif
+ 
+ #if defined _WIN32 && !defined(DISABLE_DLLIMPORT)
++#undef EXTERN
+ #if defined(EXPORT) && defined(__SAFECLIB_PRIVATE_H__)
+ #define EXTERN extern __declspec(dllexport)
+ #else
+diff --git a/src/safeclib_private.h b/src/safeclib_private.h
+index d5cdb3f7..ae07cbcb 100644
+--- a/src/safeclib_private.h
++++ b/src/safeclib_private.h
+@@ -600,6 +600,7 @@ typedef unsigned long uintptr_t;
+ 
+ /* mingw64 3.0.1
+    has strtok_s, wcstok_s, and vsnprintf_s, which we patch in the tests. */
++#undef _ENC_W16
+ 
+ #if SIZEOF_WCHAR_T > 2
+ 
diff --git a/meta-oe/recipes-core/safec/safec/0026-add-stpcpy_s.patch b/meta-oe/recipes-core/safec/safec/0026-add-stpcpy_s.patch
new file mode 100644
index 000000000..9f30af393
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0026-add-stpcpy_s.patch
@@ -0,0 +1,585 @@ 
+From bfc9f8bb8a9bfd02fde8ef3fd78fcd61411d070d Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sun, 8 Nov 2020 12:04:53 +0100
+Subject: [PATCH] add stpcpy_s
+
+implemented from scratch, an optimized variant of strcpy_s.
+Note that the intel fork also has it, with the same API.
+
+This adds a src termination check, when src is static.
+---
+ configure.ac           |   2 +-
+ include/safe_str_lib.h |   8 ++
+ src/Makefile.am        |   1 +
+ src/extstr/stpcpy_s.c  | 252 +++++++++++++++++++++++++++++++++++++++++
+ src/extstr/strcmp_s.c  |   2 +-
+ tests/Makefile.am      |   2 +
+ tests/test_msvcrt.h    |   1 +
+ tests/test_stpcpy_s.c  | 210 ++++++++++++++++++++++++++++++++++
+ 8 files changed, 476 insertions(+), 2 deletions(-)
+ create mode 100644 src/extstr/stpcpy_s.c
+ create mode 100644 tests/test_stpcpy_s.c
+
+diff --git a/configure.ac b/configure.ac
+index c6cfd8ca..4d4220c5 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -873,7 +873,7 @@ AC_CHECK_FUNCS([ memset strcmp strcasecmp strcasestr strcspn strpbrk strspn \
+         vswprintf vsnwprintf vswscanf mbsrtowcs mbstowcs iswdigit iswspace \
+         towlower towupper towctrans bcmp secure_getenv timingsafe_memcmp \
+         timingsafe_bcmp explicit_bzero explicit_memset \
+-        asctime_r ctime_r gmtime_r localtime_r memccpy])
++        asctime_r ctime_r gmtime_r localtime_r memccpy stpcpy])
+ 
+ dnl add the extensions, pretending we want them
+ echo "#define __STDC_WANT_LIB_EXT1__  1" >>confdefs.h
+diff --git a/include/safe_str_lib.h b/include/safe_str_lib.h
+index baa0c90b..7742d254 100644
+--- a/include/safe_str_lib.h
++++ b/include/safe_str_lib.h
+@@ -245,6 +245,14 @@ EXTERN size_t strerrorlen_s(errno_t errnum);
+ 
+ #ifndef SAFECLIB_DISABLE_EXTENSIONS
+ 
++/* improved strcpy */
++EXTERN char *_stpcpy_s_chk(char *restrict dest, rsize_t dmax,
++                           const char *restrict src, errno_t *restrict errp,
++                           const size_t destbos, const size_t srcbos)
++  BOS_CHK(dest) BOS_NULL(src) BOS_NULL(errp);
++#define stpcpy_s(dest, dmax, src, errp)                                     \
++    _stpcpy_s_chk(dest, dmax, src, errp, BOS(dest), BOS(src))
++
+ /* string compare */
+ EXTERN errno_t _strcmp_s_chk(const char *dest, rsize_t dmax, const char *src,
+                              int *resultp, const size_t destbos,
+diff --git a/src/Makefile.am b/src/Makefile.am
+index cd77e7e4..8a79881c 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -85,6 +85,7 @@ STD_UNSAFE_FILES = \
+ 	io/tmpnam_s.c
+ 
+ EXT_STR_FILES = \
++	extstr/stpcpy_s.c            \
+ 	extstr/strcasecmp_s.c        \
+ 	extstr/strcasestr_s.c        \
+ 	extstr/strcmp_s.c            \
+diff --git a/src/extstr/stpcpy_s.c b/src/extstr/stpcpy_s.c
+new file mode 100644
+index 00000000..8b42e79d
+--- /dev/null
++++ b/src/extstr/stpcpy_s.c
+@@ -0,0 +1,252 @@
++/*------------------------------------------------------------------
++ * stpcpy_s.c
++ *
++ * November 2020, Reini Urban
++ *
++ * Copyright (c) 2020 by Reini Urban
++ * All rights reserved.
++ *
++ * Permission is hereby granted, free of charge, to any person
++ * obtaining a copy of this software and associated documentation
++ * files (the "Software"), to deal in the Software without
++ * restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or
++ * sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following
++ * conditions:
++ *
++ * The above copyright notice and this permission notice shall be
++ * included in all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
++ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *------------------------------------------------------------------
++ */
++
++#ifdef FOR_DOXYGEN
++#include "safe_str_lib.h"
++#else
++#include "safeclib_private.h"
++#endif
++
++/* TODO not via the naive byte copy, but aligned long word copy
++   via the (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080)
++   trick */
++
++/**
++ * @def stpcpy_s(dest,dmax,src,errp)
++ * @brief
++ *    The stpcpy_s function copies the string pointed to by src
++ *    (including the terminating null character) into the array
++ *    pointed to by dest. The strings my not overlap.
++ *    With SAFECLIB_STR_NULL_SLACK defined all elements following the
++ *    terminating null character (if any) written by stpcpy_s in the
++ *    array of dmax characters pointed to by dest are nulled when
++ *    stpcpy_s returns.
++ *    With modern compilers and constant arguments most errors
++ *    will be caught at compile-time.
++ *
++ * @remark SPECIFIED IN
++ *    * Since glibc 2.10:  _POSIX_C_SOURCE >= 200809L
++ *    * Before glibc 2.10:  _GNU_SOURCE
++ *
++ * @param[out]  dest  pointer to string that will be replaced by src.
++ * @param[in]   dmax  restricted maximum length of dest
++ * @param[in]   src   pointer to the string that will be copied to dest
++ * @param[out]  err   EOK        when successful operation, the characters in src were
++ *                               copied into dest and the result is null terminated.
++ *                    ESNULLP    when dest or src is a NULL pointer
++ *                    ESZEROL    when dmax = 0
++ *                    ESLEMAX    when dmax > RSIZE_MAX_STR
++ *                    EOVERFLOW  when dmax > size of dest (optionally, when the compiler
++ *                               knows the object_size statically)
++ *                    ESLEWRNG   when dmax != size of dest and --enable-error-dmax
++ *                    ESUNTERM   when src is unterminated
++ *                    ESOVRLP    when strings overlap
++ *                    ESNOSPC    when dest < src
++ *
++ * @pre Neither dest, src nor err nor shall be a null pointer.
++ * @pre dmax shall be size of dest
++ * @pre dmax shall not be greater than RSIZE_MAX_STR or size of dest.
++ * @pre dmax shall not equal zero.
++ * @pre dmax shall be greater than strnlen_s(src, dmax).
++ * @pre Copying shall not take place between objects that overlap.
++ *
++ * @note C11 uses RSIZE_MAX, not RSIZE_MAX_STR.
++ *
++ * @return  stpcpy_s() returns a pointer to the end of the string dest (that is,
++ *          the address of the terminating null byte) rather than the beginning.
++ * @return  If there is a runtime-constraint violation, and if dest
++ *          and dmax are valid, then stpcpy_s nulls dest.
++ *
++ * @see
++ *    stpncpy_s(), strcpy_s(), strncpy_s()
++ *
++ */
++#ifdef FOR_DOXYGEN
++char *stpcpy_s(char *restrict dest, rsize_t dmax, const char *restrict src,
++               errno_t *restrict err)
++#else
++EXPORT char *_stpcpy_s_chk(char *restrict dest, rsize_t dmax,
++                           const char *restrict src, errno_t *restrict err,
++                           const size_t destbos, const size_t srcbos)
++#endif
++{
++    rsize_t orig_dmax = dmax;
++    char* orig_dest = dest;
++    const char *overlap_bumper;
++    size_t slen;
++
++    if (unlikely(err == NULL)) {
++        invoke_safe_str_constraint_handler("stpcpy_s: err is null",
++                                           (void *)dest, ESNULLP);
++        return NULL;
++    }
++    if (unlikely(dest == NULL)) {
++        invoke_safe_str_constraint_handler("stpcpy_s: dest is null",
++                                           (void *)dest, ESNULLP);
++        *err = RCNEGATE(ESNULLP);
++        return NULL;
++    }
++    if (unlikely(dmax == 0)) {
++        invoke_safe_str_constraint_handler("stpcpy_s: dmax is 0", (void *)dest,
++                                           ESNULLP);
++        *err = RCNEGATE(ESZEROL);
++        return NULL;
++    }
++    if (destbos == BOS_UNKNOWN) {
++        if (unlikely(dmax > RSIZE_MAX_STR)) {
++            invoke_safe_str_constraint_handler("stpcpy_s: dmax exceeds max",
++                                               (void *)dest, ESLEMAX);
++            *err = RCNEGATE(ESLEMAX);
++            return NULL;
++        }
++        BND_CHK_PTR_BOUNDS(dest, dmax);
++    } else {
++        if (unlikely(dmax > destbos)) {
++            if (dmax > RSIZE_MAX_STR) {
++                handle_error(dest, destbos, "stpcpy_s: dmax exceeds max",
++                             ESLEMAX);
++                *err = RCNEGATE(ESLEMAX);
++                return NULL;
++            } else {
++                *err = handle_str_bos_overload("stpcpy_s: dmax exceeds dest",
++                                               (char *)dest, destbos);
++                return NULL;
++            }
++        }
++    }
++    if (unlikely(src == NULL)) {
++        handle_error(dest, _BOS_KNOWN(dest) ? BOS(dest) : dmax,
++                     "strpcpy_s: src is null", ESNULLP);
++        *err = RCNEGATE(ESNULLP);
++        return NULL;
++    }
++    slen = 0;
++
++    if (unlikely(dest == src)) {
++        /* walk to the terminating null character */
++        while (dmax > 0) {
++            if (*dest == '\0') {
++                goto eok;
++            }
++            dmax--;
++            dest++;
++        }
++        goto enospc;
++    }
++
++    if (dest < src) {
++        overlap_bumper = src;
++
++        while (dmax > 0) {
++            if (unlikely(dest == overlap_bumper)) {
++                handle_error(orig_dest, orig_dmax,
++                             "stpcpy_s: "
++                             "overlapping objects",
++                             ESOVRLP);
++                *err = RCNEGATE(ESOVRLP);
++                return NULL;
++            }
++
++            *dest = *src;
++            if (*dest == '\0')
++                goto eok;
++            dmax--;
++            slen++;
++            dest++;
++            src++;
++            /* sentinel srcbos -1 = ULONG_MAX */
++            if (unlikely(slen >= srcbos)) {
++                invoke_safe_str_constraint_handler("stpcpy_s: src unterminated",
++                                                   (void *)src, ESUNTERM);
++                *err = RCNEGATE(ESUNTERM);
++                return NULL;
++            }
++        }
++    } else {
++        overlap_bumper = dest;
++
++        while (dmax > 0) {
++            if (unlikely(src == overlap_bumper)) {
++                handle_error(orig_dest, orig_dmax,
++                             "stpcpy_s: "
++                             "overlapping objects",
++                             ESOVRLP);
++                *err = RCNEGATE(ESOVRLP);
++                return NULL;
++            }
++
++            *dest = *src;
++            if (*dest == '\0') {
++              eok:
++#ifdef SAFECLIB_STR_NULL_SLACK
++                /* null slack to clear any data */
++                if (dmax > 0x20)
++                    memset(dest, 0, dmax);
++                else {
++                    while (dmax) {
++                        *dest = '\0';
++                        dmax--;
++                        dest++;
++                    }
++                }
++#endif
++                *err = RCNEGATE(EOK);
++                return dest;
++            }
++
++            dmax--;
++            slen++;
++            dest++;
++            src++;
++            if (unlikely(slen >= srcbos)) {
++                invoke_safe_str_constraint_handler("stpcpy_s: src unterminated",
++                                                   (void *)src, ESUNTERM);
++                *err = RCNEGATE(ESUNTERM);
++                return NULL;
++            }
++        }
++    }
++
++  enospc:
++    /*
++     * the entire src must have been copied, if not reset dest
++     * to null the string. (only with SAFECLIB_STR_NULL_SLACK)
++     */
++    handle_error(orig_dest, orig_dmax,
++                 "stpcpy_s: not enough space for src",
++                 ESNOSPC);
++    *err = RCNEGATE(ESNOSPC);
++    return NULL;
++}
++#ifdef __KERNEL__
++EXPORT_SYMBOL(_stpcpy_s_chk);
++#endif /* __KERNEL__ */
++
+diff --git a/src/extstr/strcmp_s.c b/src/extstr/strcmp_s.c
+index f07659c8..ef5ea890 100644
+--- a/src/extstr/strcmp_s.c
++++ b/src/extstr/strcmp_s.c
+@@ -62,7 +62,7 @@
+  * @retval   0         when strings the same
+  * @retval  <0         when dest less than src
+  * @retval  EOK        when comparison is complete
+- * @retval  ESUNTERM   when dest or src is unterminated, or dmax is too small.
++ * @retval  ESUNTERM   when src is unterminated
+  * @retval  ESNULLP    when dest/src/resultp is NULL pointer
+  * @retval  ESZEROL    when dmax = 0
+  * @retval  ESLEMAX    when dmax > RSIZE_MAX_STR
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 9ace5de0..21d39595 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -118,6 +118,7 @@ SAFEC_BUILT_TESTS += \
+ 	t_memzero_s           \
+ 	t_memzero32_s         \
+ 	t_memzero16_s         \
++	t_stpcpy_s            \
+ 	t_strcasecmp_s        \
+ 	t_strcasestr_s        \
+ 	t_strcmp_s            \
+@@ -429,6 +430,7 @@ t_memset16_s_SOURCES          = test_memset16_s.c $(SAFEC_TEST_COMMON) test_expm
+ t_memzero_s_SOURCES           = test_memzero_s.c $(SAFEC_TEST_COMMON) test_expmem.h
+ t_memzero32_s_SOURCES         = test_memzero32_s.c $(SAFEC_TEST_COMMON) test_expmem.h
+ t_memzero16_s_SOURCES         = test_memzero16_s.c $(SAFEC_TEST_COMMON) test_expmem.h
++t_stpcpy_s_SOURCES            = test_stpcpy_s.c $(SAFEC_TEST_COMMON)
+ t_strcasecmp_s_SOURCES        = test_strcasecmp_s.c $(SAFEC_TEST_COMMON)
+ t_strcasestr_s_SOURCES        = test_strcasestr_s.c $(SAFEC_TEST_COMMON)
+ t_strcmpfld_s_SOURCES         = test_strcmpfld_s.c $(SAFEC_TEST_COMMON)
+diff --git a/tests/test_msvcrt.h b/tests/test_msvcrt.h
+index c0dd9768..0099c7c7 100644
+--- a/tests/test_msvcrt.h
++++ b/tests/test_msvcrt.h
+@@ -116,6 +116,7 @@ void _errno_msvc(const int n, const int winerr, int *errp, const char *f,
+ #undef wmemcmp_s
+ #undef strcat_s
+ #undef strcpy_s
++#undef stpcpy_s
+ #undef strncat_s
+ #undef strncpy_s
+ #undef strnlen_s
+diff --git a/tests/test_stpcpy_s.c b/tests/test_stpcpy_s.c
+new file mode 100644
+index 00000000..484904c9
+--- /dev/null
++++ b/tests/test_stpcpy_s.c
+@@ -0,0 +1,210 @@
++/*------------------------------------------------------------------
++ * test_stpcpy_s
++ * File 'extstr/stpcpy_s.c'
++ * Lines executed:100.00% of 48
++ *
++ *------------------------------------------------------------------
++ */
++
++#include "test_private.h"
++#include "safe_str_lib.h"
++#include "config.h"
++
++#ifdef HAVE_STPCPY_S
++#define HAVE_NATIVE 1
++#else
++#define HAVE_NATIVE 0
++#endif
++
++#define MAX (128)
++#define LEN (128)
++
++static char str1[LEN];
++static char str2[LEN];
++int test_stpcpy_s(void);
++
++int test_stpcpy_s(void) {
++    errno_t rc;
++    int len;
++    char* dest;
++    int errs = 0;
++
++    /*--------------------------------------------------*/
++
++#ifndef HAVE_CT_BOS_OVR
++    EXPECT_BOS("empty dest")
++    dest = stpcpy_s(NULL, LEN, str2, &rc);
++    ERR(ESNULLP);
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
++    len = strlen(str1);
++
++    EXPECT_BOS("empty dest or dmax")
++    dest = stpcpy_s(str1, 0, str2, &rc);
++    ERR(ESZEROL);
++
++    /*--------------------------------------------------*/
++
++#ifndef HAVE_ASAN /* With asan no BOS? */
++    if (_BOS_KNOWN(str1)) {
++        EXPECT_BOS("dest overflow")
++        dest = stpcpy_s(str1, LEN + 1, str2, &rc);
++        ERR(EOVERFLOW);   /* dmax exceeds dest */
++        EXPSTR(str1, ""); /* cleared */
++        CHECK_SLACK(str1, len);
++    } else {
++#ifdef HAVE___BUILTIN_OBJECT_SIZE
++        debug_printf("%s %u  Warning unknown str1 size\n", __FUNCTION__,
++                     __LINE__);
++#endif
++    }
++#endif
++
++    EXPECT_BOS("dest overflow")
++    dest = stpcpy_s(str1, (RSIZE_MAX_STR + 1), str2, &rc);
++    ERR(ESLEMAX);
++
++    EXPECT_BOS("dest overflow")
++    dest = stpcpy_s(str1, (size_t)-1L, str2, &rc);
++    ERR(ESLEMAX);
++
++    strcpy(str1, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
++    len = strlen(str1);
++
++    EXPECT_BOS("empty src")
++    dest = stpcpy_s(str1, 5, NULL, &rc);
++    ERR(ESNULLP);
++    CHECK_SLACK(str1, 5);
++#endif
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
++    str2[0] = '\0';
++
++    dest = stpcpy_s(str1, LEN / 2, str2, &rc);
++    ERR(EOK)
++    CHECK_SLACK(str1, LEN / 2);
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "aaaaa");
++    len = strlen(str1);
++
++    GCC_PUSH_WARN_RESTRICT
++    dest = stpcpy_s(str1, LEN, str1, &rc);
++    GCC_POP_WARN_RESTRICT
++    ERR(EOK);
++    EXPSTR(str1, "aaaaa");
++
++    /*--------------------------------------------------*/
++
++    strcpy(&str1[0], "keep it simple");
++
++    dest = stpcpy_s(&str1[0], LEN, &str1[5], &rc);
++    ERR(ESOVRLP);
++    CHECK_SLACK(str1, LEN);
++
++    /*--------------------------------------------------*/
++
++    strcpy(&str1[0], "keep it simple");
++
++    dest = stpcpy_s(&str1[5], LEN - 5, &str1[0], &rc);
++    ERR(ESOVRLP);
++    CHECK_SLACK(&str1[5], LEN - 5);
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "qqweqeqeqeq");
++    strcpy(str2, "keep it simple");
++    len = strlen(str1);
++
++    dest = stpcpy_s(str2, LEN, str1, &rc);
++    ERR(EOK)
++    EXPSTR(str1, str2);
++    CHECK_SLACK(&str2[len], LEN - len);
++
++    /*--------------------------------------------------*/
++
++    strcpy(&str1[0], "keep it simple");
++    str2[0] = '\0';
++
++    dest = stpcpy_s(str1, LEN, str2, &rc);
++    ERR(EOK)
++    EXPSTR(str1, str2);
++    CHECK_SLACK(str1, LEN);
++
++    /*--------------------------------------------------*/
++
++    str1[0] = '\0';
++    strcpy(&str2[0], "keep it simple");
++    len = strlen(str2);
++
++    dest = stpcpy_s(str1, LEN, str2, &rc);
++    ERR(EOK)
++    EXPSTR(str1, str2);
++    CHECK_SLACK(&str1[len], LEN - len);
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "qqweqeqeqeq");
++    strcpy(str2, "keep it simple");
++    len = strlen(str2);
++
++    dest = stpcpy_s(str1, LEN, str2, &rc);
++    ERR(EOK)
++    EXPSTR(str1, str2);
++    CHECK_SLACK(&str1[len], LEN - len);
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "qqweqeqeqeq");
++    strcpy(str2, "keep it simple");
++
++    dest = stpcpy_s(str1, 1, str2, &rc);
++    ERR(ESNOSPC);
++    CHECK_SLACK(str1, 1);
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "qqweqeqeqeq");
++    strcpy(str2, "keep it simple");
++
++    dest = stpcpy_s(str1, 2, str2, &rc);
++    ERR(ESNOSPC);
++    CHECK_SLACK(str1, 2);
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "qqweqeqeqeq");
++    strcpy(str2, "it");
++
++    dest = stpcpy_s(str1, 3, str2, &rc);
++    ERR(EOK)
++    EXPSTR(str1, str2);
++    CHECK_SLACK(&str1[2], 1);
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "qq12345weqeqeqeq");
++    strcpy(str2, "it");
++
++    dest = stpcpy_s(str1, 10, str2, &rc);
++    ERR(EOK);
++    EXPSTR(str1, str2);
++    CHECK_SLACK(&str1[2], 8);
++    /*for (i=0; i<10; i++) {
++        debug_printf("str1[%i] = %d \n", i, str1[i]);
++    }*/
++    /*--------------------------------------------------*/
++
++    return (errs);
++}
++
++#ifndef __KERNEL__
++/* simple hack to get this to work for both userspace and Linux kernel,
++   until a better solution can be created. */
++int main(void) { return (test_stpcpy_s()); }
++#endif
diff --git a/meta-oe/recipes-core/safec/safec/0027-Cope-with-EOVERFLOW-being-an-enum-value-rather-than-.patch b/meta-oe/recipes-core/safec/safec/0027-Cope-with-EOVERFLOW-being-an-enum-value-rather-than-.patch
new file mode 100644
index 000000000..09c528bff
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0027-Cope-with-EOVERFLOW-being-an-enum-value-rather-than-.patch
@@ -0,0 +1,31 @@ 
+From e8bf1fff157ba931692130a0ec6f2833fa7d5f87 Mon Sep 17 00:00:00 2001
+From: Adam Borowski <kilobyte@angband.pl>
+Date: Mon, 18 Oct 2021 15:15:19 +0100
+Subject: [PATCH] Cope with EOVERFLOW being an enum value rather than a macro
+ on Hurd.
+
+Closes #101
+---
+ tests/test_private.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/tests/test_private.h b/tests/test_private.h
+index da3b8847..c6f35211 100644
+--- a/tests/test_private.h
++++ b/tests/test_private.h
+@@ -176,6 +176,7 @@
+ #endif
+ 
+ /* mingw 3.4 */
++#ifndef __gnu_hurd__
+ #ifndef EOVERFLOW
+ #ifdef _WIN32
+ #define EOVERFLOW 132
+@@ -183,6 +184,7 @@
+ #define EOVERFLOW 75
+ #endif
+ #endif
++#endif
+ 
+ /* for a proper asctime string with 26 digits, i.e. max 4 digit year.
+    01.01.10000 00:00 */
diff --git a/meta-oe/recipes-core/safec/safec/0028-stpcpy_s-doc-typo.patch b/meta-oe/recipes-core/safec/safec/0028-stpcpy_s-doc-typo.patch
new file mode 100644
index 000000000..55b1a893f
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0028-stpcpy_s-doc-typo.patch
@@ -0,0 +1,22 @@ 
+From e0d34d8158507b64162a733099e961a84dd4e3b5 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sun, 24 Oct 2021 19:55:11 +0200
+Subject: [PATCH] stpcpy_s doc typo
+
+---
+ src/extstr/stpcpy_s.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/extstr/stpcpy_s.c b/src/extstr/stpcpy_s.c
+index 8b42e79d..9d29b646 100644
+--- a/src/extstr/stpcpy_s.c
++++ b/src/extstr/stpcpy_s.c
+@@ -44,7 +44,7 @@
+  * @brief
+  *    The stpcpy_s function copies the string pointed to by src
+  *    (including the terminating null character) into the array
+- *    pointed to by dest. The strings my not overlap.
++ *    pointed to by dest. The strings may not overlap.
+  *    With SAFECLIB_STR_NULL_SLACK defined all elements following the
+  *    terminating null character (if any) written by stpcpy_s in the
+  *    array of dmax characters pointed to by dest are nulled when
diff --git a/meta-oe/recipes-core/safec/safec/0029-avoid-macro-redefinition-warnings.patch b/meta-oe/recipes-core/safec/safec/0029-avoid-macro-redefinition-warnings.patch
new file mode 100644
index 000000000..33b3d0381
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0029-avoid-macro-redefinition-warnings.patch
@@ -0,0 +1,21 @@ 
+From 4256a9b26b08483715ee0f281ed4bc129dc5740b Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sun, 18 Apr 2021 19:03:41 +0200
+Subject: [PATCH] avoid macro redefinition warnings
+
+---
+ src/safeclib_private.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/safeclib_private.h b/src/safeclib_private.h
+index ae07cbcb..5bb3a7fb 100644
+--- a/src/safeclib_private.h
++++ b/src/safeclib_private.h
+@@ -604,6 +604,7 @@ typedef unsigned long uintptr_t;
+ 
+ #if SIZEOF_WCHAR_T > 2
+ 
++#undef _ENC_W16
+ #define _dec_w16(src) *(src)
+ #define _ENC_W16(dest, dmax, cp)                                               \
+     *(dest)++ = (cp);                                                          \
diff --git a/meta-oe/recipes-core/safec/safec/0030-stpcpy_s-rename-err-arg-to-errp.patch b/meta-oe/recipes-core/safec/safec/0030-stpcpy_s-rename-err-arg-to-errp.patch
new file mode 100644
index 000000000..20d9d2d28
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0030-stpcpy_s-rename-err-arg-to-errp.patch
@@ -0,0 +1,145 @@ 
+From a6b1c99f71cdac8efe6b6470c718e5c226d7bfbc Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sat, 30 Oct 2021 18:13:31 +0200
+Subject: [PATCH] stpcpy_s: rename err arg to errp
+
+---
+ src/extstr/stpcpy_s.c | 34 +++++++++++++++++-----------------
+ 1 file changed, 17 insertions(+), 17 deletions(-)
+
+diff --git a/src/extstr/stpcpy_s.c b/src/extstr/stpcpy_s.c
+index 9d29b646..bdd2815f 100644
+--- a/src/extstr/stpcpy_s.c
++++ b/src/extstr/stpcpy_s.c
+@@ -71,7 +71,7 @@
+  *                    ESOVRLP    when strings overlap
+  *                    ESNOSPC    when dest < src
+  *
+- * @pre Neither dest, src nor err nor shall be a null pointer.
++ * @pre Neither dest, src nor errp nor shall be a null pointer.
+  * @pre dmax shall be size of dest
+  * @pre dmax shall not be greater than RSIZE_MAX_STR or size of dest.
+  * @pre dmax shall not equal zero.
+@@ -91,10 +91,10 @@
+  */
+ #ifdef FOR_DOXYGEN
+ char *stpcpy_s(char *restrict dest, rsize_t dmax, const char *restrict src,
+-               errno_t *restrict err)
++               errno_t *restrict errp)
+ #else
+ EXPORT char *_stpcpy_s_chk(char *restrict dest, rsize_t dmax,
+-                           const char *restrict src, errno_t *restrict err,
++                           const char *restrict src, errno_t *restrict errp,
+                            const size_t destbos, const size_t srcbos)
+ #endif
+ {
+@@ -103,28 +103,28 @@ EXPORT char *_stpcpy_s_chk(char *restrict dest, rsize_t dmax,
+     const char *overlap_bumper;
+     size_t slen;
+ 
+-    if (unlikely(err == NULL)) {
+-        invoke_safe_str_constraint_handler("stpcpy_s: err is null",
++    if (unlikely(errp == NULL)) {
++        invoke_safe_str_constraint_handler("stpcpy_s: errp is null",
+                                            (void *)dest, ESNULLP);
+         return NULL;
+     }
+     if (unlikely(dest == NULL)) {
+         invoke_safe_str_constraint_handler("stpcpy_s: dest is null",
+                                            (void *)dest, ESNULLP);
+-        *err = RCNEGATE(ESNULLP);
++        *errp = RCNEGATE(ESNULLP);
+         return NULL;
+     }
+     if (unlikely(dmax == 0)) {
+         invoke_safe_str_constraint_handler("stpcpy_s: dmax is 0", (void *)dest,
+                                            ESNULLP);
+-        *err = RCNEGATE(ESZEROL);
++        *errp = RCNEGATE(ESZEROL);
+         return NULL;
+     }
+     if (destbos == BOS_UNKNOWN) {
+         if (unlikely(dmax > RSIZE_MAX_STR)) {
+             invoke_safe_str_constraint_handler("stpcpy_s: dmax exceeds max",
+                                                (void *)dest, ESLEMAX);
+-            *err = RCNEGATE(ESLEMAX);
++            *errp = RCNEGATE(ESLEMAX);
+             return NULL;
+         }
+         BND_CHK_PTR_BOUNDS(dest, dmax);
+@@ -133,10 +133,10 @@ EXPORT char *_stpcpy_s_chk(char *restrict dest, rsize_t dmax,
+             if (dmax > RSIZE_MAX_STR) {
+                 handle_error(dest, destbos, "stpcpy_s: dmax exceeds max",
+                              ESLEMAX);
+-                *err = RCNEGATE(ESLEMAX);
++                *errp = RCNEGATE(ESLEMAX);
+                 return NULL;
+             } else {
+-                *err = handle_str_bos_overload("stpcpy_s: dmax exceeds dest",
++                *errp = handle_str_bos_overload("stpcpy_s: dmax exceeds dest",
+                                                (char *)dest, destbos);
+                 return NULL;
+             }
+@@ -145,7 +145,7 @@ EXPORT char *_stpcpy_s_chk(char *restrict dest, rsize_t dmax,
+     if (unlikely(src == NULL)) {
+         handle_error(dest, _BOS_KNOWN(dest) ? BOS(dest) : dmax,
+                      "strpcpy_s: src is null", ESNULLP);
+-        *err = RCNEGATE(ESNULLP);
++        *errp = RCNEGATE(ESNULLP);
+         return NULL;
+     }
+     slen = 0;
+@@ -171,7 +171,7 @@ EXPORT char *_stpcpy_s_chk(char *restrict dest, rsize_t dmax,
+                              "stpcpy_s: "
+                              "overlapping objects",
+                              ESOVRLP);
+-                *err = RCNEGATE(ESOVRLP);
++                *errp = RCNEGATE(ESOVRLP);
+                 return NULL;
+             }
+ 
+@@ -186,7 +186,7 @@ EXPORT char *_stpcpy_s_chk(char *restrict dest, rsize_t dmax,
+             if (unlikely(slen >= srcbos)) {
+                 invoke_safe_str_constraint_handler("stpcpy_s: src unterminated",
+                                                    (void *)src, ESUNTERM);
+-                *err = RCNEGATE(ESUNTERM);
++                *errp = RCNEGATE(ESUNTERM);
+                 return NULL;
+             }
+         }
+@@ -199,7 +199,7 @@ EXPORT char *_stpcpy_s_chk(char *restrict dest, rsize_t dmax,
+                              "stpcpy_s: "
+                              "overlapping objects",
+                              ESOVRLP);
+-                *err = RCNEGATE(ESOVRLP);
++                *errp = RCNEGATE(ESOVRLP);
+                 return NULL;
+             }
+ 
+@@ -218,7 +218,7 @@ EXPORT char *_stpcpy_s_chk(char *restrict dest, rsize_t dmax,
+                     }
+                 }
+ #endif
+-                *err = RCNEGATE(EOK);
++                *errp = RCNEGATE(EOK);
+                 return dest;
+             }
+ 
+@@ -229,7 +229,7 @@ EXPORT char *_stpcpy_s_chk(char *restrict dest, rsize_t dmax,
+             if (unlikely(slen >= srcbos)) {
+                 invoke_safe_str_constraint_handler("stpcpy_s: src unterminated",
+                                                    (void *)src, ESUNTERM);
+-                *err = RCNEGATE(ESUNTERM);
++                *errp = RCNEGATE(ESUNTERM);
+                 return NULL;
+             }
+         }
+@@ -243,7 +243,7 @@ EXPORT char *_stpcpy_s_chk(char *restrict dest, rsize_t dmax,
+     handle_error(orig_dest, orig_dmax,
+                  "stpcpy_s: not enough space for src",
+                  ESNOSPC);
+-    *err = RCNEGATE(ESNOSPC);
++    *errp = RCNEGATE(ESNOSPC);
+     return NULL;
+ }
+ #ifdef __KERNEL__
diff --git a/meta-oe/recipes-core/safec/safec/0031-add-stpncpy_s.patch b/meta-oe/recipes-core/safec/safec/0031-add-stpncpy_s.patch
new file mode 100644
index 000000000..f731a8d7e
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0031-add-stpncpy_s.patch
@@ -0,0 +1,665 @@ 
+From 137571277d9015460746ff716c0a7c854771a263 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sun, 8 Nov 2020 12:36:06 +0100
+Subject: [PATCH] add stpncpy_s
+
+analog to stpcpy
+---
+ configure.ac           |   3 +-
+ include/safe_str_lib.h |   8 ++
+ src/Makefile.am        |   1 +
+ src/extstr/stpcpy_s.c  |   2 +-
+ src/extstr/stpncpy_s.c | 295 +++++++++++++++++++++++++++++++++++++++++
+ src/str/strncpy_s.c    |   4 +-
+ tests/Makefile.am      |   2 +
+ tests/test_stpcpy_s.c  |   3 +-
+ tests/test_stpncpy_s.c | 217 ++++++++++++++++++++++++++++++
+ 9 files changed, 530 insertions(+), 5 deletions(-)
+ create mode 100644 src/extstr/stpncpy_s.c
+ create mode 100644 tests/test_stpncpy_s.c
+
+diff --git a/configure.ac b/configure.ac
+index 4d4220c5..45b013da 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -873,7 +873,7 @@ AC_CHECK_FUNCS([ memset strcmp strcasecmp strcasestr strcspn strpbrk strspn \
+         vswprintf vsnwprintf vswscanf mbsrtowcs mbstowcs iswdigit iswspace \
+         towlower towupper towctrans bcmp secure_getenv timingsafe_memcmp \
+         timingsafe_bcmp explicit_bzero explicit_memset \
+-        asctime_r ctime_r gmtime_r localtime_r memccpy stpcpy])
++        asctime_r ctime_r gmtime_r localtime_r memccpy stpcpy stpncpy])
+ 
+ dnl add the extensions, pretending we want them
+ echo "#define __STDC_WANT_LIB_EXT1__  1" >>confdefs.h
+@@ -890,6 +890,7 @@ AC_CHECK_FUNCS(
+         strnlen_s strtok_s strerror_s vsprintf_s tmpnam_s snprintf_s \
+         vsnprintf_s snwprintf_s \
+         strspn_s strset_s strchr_s strrchr_s strstr_s strzero_s strnset_s \
++        stpcpy_s stpncpy_s \
+         mbsrtowcs_s mbstowcs_s wcsrtombs_s wcstombs_s \
+         wcrtomb_s wctomb_s wcsnlen_s wcscpy_s wcsncpy_s wcscat_s wcsncat_s \
+         wmemcpy_s wmemmove_s wcstok_s vswprintf_s swprintf_s vfwprintf_s \
+diff --git a/include/safe_str_lib.h b/include/safe_str_lib.h
+index 7742d254..9f5a85ef 100644
+--- a/include/safe_str_lib.h
++++ b/include/safe_str_lib.h
+@@ -253,6 +253,14 @@ EXTERN char *_stpcpy_s_chk(char *restrict dest, rsize_t dmax,
+ #define stpcpy_s(dest, dmax, src, errp)                                     \
+     _stpcpy_s_chk(dest, dmax, src, errp, BOS(dest), BOS(src))
+ 
++EXTERN char *_stpncpy_s_chk(char *restrict dest, rsize_t dmax,
++                            const char *restrict src, rsize_t slen,
++                            errno_t *restrict errp,
++                            const size_t destbos, const size_t srcbos)
++  BOS_CHK(dest) BOS_CHK2(src, slen) BOS_NULL(errp);
++#define stpncpy_s(dest, dmax, src, slen, errp)                   \
++  _stpncpy_s_chk(dest, dmax, src, slen, errp, BOS(dest), BOS(src))
++
+ /* string compare */
+ EXTERN errno_t _strcmp_s_chk(const char *dest, rsize_t dmax, const char *src,
+                              int *resultp, const size_t destbos,
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 8a79881c..18284f0d 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -86,6 +86,7 @@ STD_UNSAFE_FILES = \
+ 
+ EXT_STR_FILES = \
+ 	extstr/stpcpy_s.c            \
++	extstr/stpncpy_s.c           \
+ 	extstr/strcasecmp_s.c        \
+ 	extstr/strcasestr_s.c        \
+ 	extstr/strcmp_s.c            \
+diff --git a/src/extstr/stpcpy_s.c b/src/extstr/stpcpy_s.c
+index bdd2815f..49f2555f 100644
+--- a/src/extstr/stpcpy_s.c
++++ b/src/extstr/stpcpy_s.c
+@@ -59,7 +59,7 @@
+  * @param[out]  dest  pointer to string that will be replaced by src.
+  * @param[in]   dmax  restricted maximum length of dest
+  * @param[in]   src   pointer to the string that will be copied to dest
+- * @param[out]  err   EOK        when successful operation, the characters in src were
++ * @param[out]  errp  EOK        success. the characters in src were
+  *                               copied into dest and the result is null terminated.
+  *                    ESNULLP    when dest or src is a NULL pointer
+  *                    ESZEROL    when dmax = 0
+diff --git a/src/extstr/stpncpy_s.c b/src/extstr/stpncpy_s.c
+new file mode 100644
+index 00000000..c96c51b3
+--- /dev/null
++++ b/src/extstr/stpncpy_s.c
+@@ -0,0 +1,295 @@
++/*------------------------------------------------------------------
++ * strncpy_s.c
++ *
++ * November 2020, Reini Urban
++ *
++ * Copyright (c) 2020 by Reini Urban
++ * All rights reserved.
++ *
++ * Permission is hereby granted, free of charge, to any person
++ * obtaining a copy of this software and associated documentation
++ * files (the "Software"), to deal in the Software without
++ * restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or
++ * sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following
++ * conditions:
++ *
++ * The above copyright notice and this permission notice shall be
++ * included in all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
++ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++ * NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *------------------------------------------------------------------
++ */
++
++#ifdef FOR_DOXYGEN
++#include "safe_str_lib.h"
++#else
++#include "safeclib_private.h"
++#endif
++
++/* TODO not via the naive byte copy, but aligned long word copy
++   via the (((X) - 0x0101010101010101) & ~(X) & 0x8080808080808080)
++   trick */
++
++/**
++ * @def stpncpy_s(dest,dmax,src,slen,errp)
++ * @brief
++ *    The strncpy_s function copies max slen bytes of the string pointed
++ *    to by src (excluding the terminating null character) into the array
++ *    pointed to by dest. The strings may not overlap.
++ * @details
++ *    All elements following the terminating null character (if
++ *    any) written by stpncpy_s in the array of dmax characters
++ *    pointed to by dest take unspecified values when stpncpy_s returns.
++ *    With SAFECLIB_STR_NULL_SLACK defined all elements following the
++ *    terminating null character (if any) written by stpncpy_s in the
++ *    array of dmax characters pointed to by dest are nulled when
++ *    stpncpy_s returns.
++ *    With modern compilers and constant arguments most errors
++ *    will be caught at compile-time.
++ *
++ * @remark SPECIFIED IN
++ *    * Since glibc 2.10:  _POSIX_C_SOURCE >= 200809L
++ *    * Before glibc 2.10:  _GNU_SOURCE
++ *
++ * @param[out]  dest  pointer to string that will be replaced by src.
++ * @param[in]   dmax  restricted maximum length of dest
++ * @param[in]   src   pointer to the string that will be copied to dest
++ * @param[in]   slen  the maximum number of bytes to copy from src
++ * @param[out]  errp  EOK        success. the characters in src were
++ *                               copied into dest and the result is null terminated.
++ *                    ESNULLP    when dest or src is a NULL pointer
++ *                    ESZEROL    when dmax = 0
++ *                    ESLEMAX    when dmax or slen > RSIZE_MAX_STR
++ *                    EOVERFLOW  when dmax/slen > size of dest/slen (optionally, when the compiler
++ *                               knows the object_size statically)
++ *                    ESLEWRNG   when dmax != size of dest and --enable-error-dmax
++ *                    ESUNTERM   when src is unterminated
++ *                    ESOVRLP    when strings overlap
++ *                    ESNOSPC    when src longer than dest
++ *
++ * @pre Neither dest, src nor err nor shall be a null pointer.
++ * @pre dmax shall be size of dest
++ * @pre dmax shall not be greater than RSIZE_MAX_STR or size of dest.
++ * @pre dmax shall not equal zero.
++ * @pre dmax shall be greater than strnlen_s(src, dmax).
++ * @pre If slen is either greater than or equal to dmax, then dmax should
++ *      be more than strnlen_s(src,dmax) to avoid truncation.
++ * @pre Copying shall not take place between objects that overlap.
++ *
++ * @note C11 uses RSIZE_MAX, not RSIZE_MAX_STR.
++ *
++ * @return  stpncpy() returns a pointer to the terminating null byte in dest, or,
++            if dest is not null-terminated, dest+n.
++ * @return  If there is a runtime-constraint violation, and if dest
++ *          and dmax are valid, then stpncpy_s nulls dest.
++ *
++ * @see
++ *    stpcpy_s(), strcpy_s(), strncpy_s()
++ *
++ */
++#ifdef FOR_DOXYGEN
++char *stpncpy_s(char *restrict dest, rsize_t dmax, const char *restrict src,
++                rsize_t slen, errno_t *restrict errp)
++#else
++EXPORT char *_stpncpy_s_chk(char *restrict dest, rsize_t dmax,
++                            const char *restrict src, rsize_t slen,
++                            errno_t *restrict errp,
++                            const size_t destbos, const size_t srcbos)
++#endif
++{
++    rsize_t orig_dmax = dmax;
++    char* orig_dest = dest;
++    const char *overlap_bumper;
++
++    if (unlikely(errp == NULL)) {
++        invoke_safe_str_constraint_handler("stpncpy_s: errp is null",
++                                           (void *)dest, ESNULLP);
++        return NULL;
++    }
++    if (unlikely(dest == NULL)) {
++        invoke_safe_str_constraint_handler("stpncpy_s: dest is null",
++                                           (void *)dest, ESNULLP);
++        *errp = RCNEGATE(ESNULLP);
++        return NULL;
++    }
++    if (unlikely(dmax == 0)) {
++        invoke_safe_str_constraint_handler("stpncpy_s: dmax is 0", (void *)dest,
++                                           ESNULLP);
++        *errp = RCNEGATE(ESZEROL);
++        return NULL;
++    }
++    if (destbos == BOS_UNKNOWN) {
++        if (unlikely(dmax > RSIZE_MAX_STR)) {
++            invoke_safe_str_constraint_handler("stpncpy_s: dmax exceeds max",
++                                               (void *)dest, ESLEMAX);
++            *errp = RCNEGATE(ESLEMAX);
++            return NULL;
++        }
++        BND_CHK_PTR_BOUNDS(dest, dmax);
++    } else {
++        if (unlikely(dmax > destbos)) {
++            if (dmax > RSIZE_MAX_STR) {
++                handle_error(dest, destbos, "stpncpy_s: dmax exceeds max",
++                             ESLEMAX);
++                *errp = RCNEGATE(ESLEMAX);
++                return NULL;
++            } else {
++                *errp = handle_str_bos_overload("stpncpy_s: dmax exceeds dest",
++                                               (char *)dest, destbos);
++                return NULL;
++            }
++        }
++    }
++    if (unlikely(src == NULL)) {
++        handle_error(dest, _BOS_KNOWN(dest) ? BOS(dest) : dmax,
++                     "strpcpy_s: src is null", ESNULLP);
++        *errp = RCNEGATE(ESNULLP);
++        return NULL;
++    }
++    //CHK_SRC_OVR_CLEAR("stpncpy_s", src, slen, RSIZE_MAX_STR)
++    if (_BOS_KNOWN(src)) {
++        if (unlikely(_BOS_OVR_N(src, slen))) {
++            *errp = handle_str_bos_overload("stpncpy_s", (char *)dest,
++                                           _BOS_KNOWN(dest) ? BOS(dest) : dmax);
++            return NULL;
++        }
++        BND_CHK_PTR_BOUNDS(src, slen);
++    }
++    // CHK_SLEN_MAX_CLEAR("stpncpy_s", slen, RSIZE_MAX_STR)
++    if (unlikely(slen > RSIZE_MAX_STR)) {
++        handle_error(dest, _BOS_KNOWN(dest) ? BOS(dest) : strnlen_s(dest, dmax),
++                     "stpncpy_s: " _XSTR(slen) " exceeds max", ESLEMAX);
++        *errp = RCNEGATE(ESLEMAX);
++        return NULL;
++    }
++    if (srcbos == BOS_UNKNOWN) {
++        BND_CHK_PTR_BOUNDS(src, slen);
++    } else if (unlikely(slen > srcbos)) {
++        *errp = handle_str_bos_overload("stpncpy_s: slen exceeds src", dest,
++                                       destbos);
++        return NULL;
++    }
++
++    if (unlikely(dest == src)) {
++        /* walk to the terminating null character */
++        while (dmax > 0) {
++            if (*dest == '\0') {
++                goto eok;
++            }
++            dmax--;
++            dest++;
++        }
++        goto enospc;
++    }
++
++    if (dest < src) {
++        overlap_bumper = src;
++
++        while (dmax > 0) {
++            if (unlikely(dest == overlap_bumper)) {
++                handle_error(orig_dest, orig_dmax,
++                             "stpncpy_s: "
++                             "overlapping objects",
++                             ESOVRLP);
++                *errp = RCNEGATE(ESOVRLP);
++                return NULL;
++            }
++            if (unlikely(slen == 0)) {
++                /*
++                 * Copying truncated to slen chars.  Note that the TR says to
++                 * copy slen chars plus the null char.  We null the slack.
++                 */
++                goto eok;
++            }
++
++            *dest = *src;
++            if (*dest == '\0')
++                goto eok;
++            dmax--;
++            slen++;
++            dest++;
++            src++;
++            if (unlikely(slen >= srcbos)) {
++                invoke_safe_str_constraint_handler("stpncpy_s: src unterminated",
++                                                   (void *)src, ESUNTERM);
++                *errp = RCNEGATE(ESUNTERM);
++                return NULL;
++            }
++        }
++    } else {
++        overlap_bumper = dest;
++
++        while (dmax > 0) {
++            if (unlikely(src == overlap_bumper)) {
++                handle_error(orig_dest, orig_dmax,
++                             "stpncpy_s: "
++                             "overlapping objects",
++                             ESOVRLP);
++                *errp = RCNEGATE(ESOVRLP);
++                return NULL;
++            }
++
++            if (unlikely(slen == 0)) {
++                /*
++                 * Copying truncated to slen chars.  Note that the TR says to
++                 * copy slen chars plus the null char.  We null the slack.
++                 */
++                goto eok;
++            }
++
++            *dest = *src;
++            if (*dest == '\0') {
++              eok:
++#ifdef SAFECLIB_STR_NULL_SLACK
++                /* null slack to clear any data */
++                if (dmax > 0x20)
++                    memset(dest, 0, dmax);
++                else {
++                    while (dmax) {
++                        *dest = '\0';
++                        dmax--;
++                        dest++;
++                    }
++                }
++#endif
++                *errp = RCNEGATE(EOK);
++                return dest;
++            }
++
++            dmax--;
++            slen++;
++            dest++;
++            src++;
++            if (unlikely(slen >= srcbos)) {
++                invoke_safe_str_constraint_handler("stpncpy_s: src unterminated",
++                                                   (void *)src, ESUNTERM);
++                *errp = RCNEGATE(ESUNTERM);
++                return NULL;
++            }
++        }
++    }
++
++  enospc:
++    /*
++     * the entire src must have been copied, if not reset dest
++     * to null the string. (only with SAFECLIB_STR_NULL_SLACK)
++     */
++    handle_error(orig_dest, orig_dmax,
++                 "stpncpy_s: not enough space for src",
++                 ESNOSPC);
++    *errp = RCNEGATE(ESNOSPC);
++    return NULL;
++}
++#ifdef __KERNEL__
++EXPORT_SYMBOL(_stpncpy_s_chk);
++#endif /* __KERNEL__ */
++
+diff --git a/src/str/strncpy_s.c b/src/str/strncpy_s.c
+index 3e595268..7e828be2 100644
+--- a/src/str/strncpy_s.c
++++ b/src/str/strncpy_s.c
+@@ -86,12 +86,12 @@
+  * @return  If there is a runtime-constraint violation, and if dest and
+  *          dmax are valid, then strncpy_s nulls dest.
+  * @retval  EOK        successful operation, when slen == 0 or the characters
+- * in src were copied to dest and the result is null terminated.
++ *                     in src were copied to dest and the result is null terminated.
+  * @retval  ESNULLP    when dest/src is NULL pointer
+  * @retval  ESZEROL    when dmax = 0
+  * @retval  ESLEMAX    when dmax/slen > RSIZE_MAX_STR
+  * @retval  EOVERFLOW  when dmax/slen > size of dest/src (optionally, when the
+- * compiler knows the object_size statically)
++ *                     compiler knows the object_size statically)
+  * @retval  ESLEWRNG   when dmax != size of dest and --enable-error-dmax
+  * @retval  ESOVRLP    when strings overlap
+  * @retval  ESNOSPC    when src longer than dest
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 21d39595..f0b8ee2e 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -119,6 +119,7 @@ SAFEC_BUILT_TESTS += \
+ 	t_memzero32_s         \
+ 	t_memzero16_s         \
+ 	t_stpcpy_s            \
++	t_stpncpy_s           \
+ 	t_strcasecmp_s        \
+ 	t_strcasestr_s        \
+ 	t_strcmp_s            \
+@@ -431,6 +432,7 @@ t_memzero_s_SOURCES           = test_memzero_s.c $(SAFEC_TEST_COMMON) test_expme
+ t_memzero32_s_SOURCES         = test_memzero32_s.c $(SAFEC_TEST_COMMON) test_expmem.h
+ t_memzero16_s_SOURCES         = test_memzero16_s.c $(SAFEC_TEST_COMMON) test_expmem.h
+ t_stpcpy_s_SOURCES            = test_stpcpy_s.c $(SAFEC_TEST_COMMON)
++t_stpncpy_s_SOURCES           = test_stpncpy_s.c $(SAFEC_TEST_COMMON)
+ t_strcasecmp_s_SOURCES        = test_strcasecmp_s.c $(SAFEC_TEST_COMMON)
+ t_strcasestr_s_SOURCES        = test_strcasestr_s.c $(SAFEC_TEST_COMMON)
+ t_strcmpfld_s_SOURCES         = test_strcmpfld_s.c $(SAFEC_TEST_COMMON)
+diff --git a/tests/test_stpcpy_s.c b/tests/test_stpcpy_s.c
+index 484904c9..f8851168 100644
+--- a/tests/test_stpcpy_s.c
++++ b/tests/test_stpcpy_s.c
+@@ -93,10 +93,11 @@ int test_stpcpy_s(void) {
+     strcpy(str1, "aaaaa");
+     len = strlen(str1);
+ 
++    /* test overlap */
+     GCC_PUSH_WARN_RESTRICT
+     dest = stpcpy_s(str1, LEN, str1, &rc);
+     GCC_POP_WARN_RESTRICT
+-    ERR(EOK);
++    ERR(EOK); // same => OK
+     EXPSTR(str1, "aaaaa");
+ 
+     /*--------------------------------------------------*/
+diff --git a/tests/test_stpncpy_s.c b/tests/test_stpncpy_s.c
+new file mode 100644
+index 00000000..2b7f9fd2
+--- /dev/null
++++ b/tests/test_stpncpy_s.c
+@@ -0,0 +1,217 @@
++/*------------------------------------------------------------------
++ * test_strncpy_s
++ * File 'extstr/strncpy_s.c'
++ * Lines executed:100.00% of 48
++ *
++ *------------------------------------------------------------------
++ */
++
++#include "test_private.h"
++#include "safe_str_lib.h"
++#include "config.h"
++
++#ifdef HAVE_STPNCPY_S
++#define HAVE_NATIVE 1
++#else
++#define HAVE_NATIVE 0
++#endif
++
++#define MAX (128)
++#define LEN (128)
++
++static char str1[LEN];
++static char str2[LEN];
++int test_strncpy_s(void);
++
++int test_stpncpy_s(void) {
++    errno_t rc;
++    int len;
++    char* dest;
++    int errs = 0;
++    rsize_t slen = LEN;
++
++    /*--------------------------------------------------*/
++
++#ifndef HAVE_CT_BOS_OVR
++    EXPECT_BOS("empty dest")
++    dest = stpncpy_s(NULL, LEN, str2, slen, &rc);
++    ERR(ESNULLP);
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
++    len = strlen(str1);
++
++    EXPECT_BOS("empty dest or dmax")
++    dest = stpncpy_s(str1, 0, str2, slen, &rc);
++    ERR(ESZEROL);
++
++    /*--------------------------------------------------*/
++
++#ifndef HAVE_ASAN /* With asan no BOS? */
++    if (_BOS_KNOWN(str1)) {
++        EXPECT_BOS("dest overflow")
++        dest = stpncpy_s(str1, LEN + 1, str2, slen, &rc);
++        ERR(EOVERFLOW);   /* dmax exceeds dest */
++        EXPSTR(str1, ""); /* cleared */
++        CHECK_SLACK(str1, len);
++    } else {
++#ifdef HAVE___BUILTIN_OBJECT_SIZE
++        debug_printf("%s %u  Warning unknown str1 size\n", __FUNCTION__,
++                     __LINE__);
++#endif
++    }
++#endif
++
++    EXPECT_BOS("dest overflow")
++    dest = stpncpy_s(str1, (RSIZE_MAX_STR + 1), str2, slen, &rc);
++    ERR(ESLEMAX);
++
++    EXPECT_BOS("dest overflow")
++    dest = stpncpy_s(str1, (size_t)-1L, str2, slen, &rc);
++    ERR(ESLEMAX);
++
++    strcpy(str1, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
++    len = strlen(str1);
++
++    EXPECT_BOS("empty src")
++    dest = stpncpy_s(str1, 5, NULL, slen, &rc);
++    ERR(ESNULLP);
++    CHECK_SLACK(str1, 5);
++#endif
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
++    str2[0] = '\0';
++    slen = 10;
++
++    dest = stpncpy_s(str1, LEN / 2, str2, slen, &rc);
++    ERR(EOK)
++    CHECK_SLACK(str1, LEN / 2);
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "aaaaa");
++    len = strlen(str1);
++
++    /* test overlap */
++    GCC_PUSH_WARN_RESTRICT
++    dest = stpncpy_s(str1, LEN, str1, slen, &rc);
++    GCC_POP_WARN_RESTRICT
++    ERR(EOK); // OK if the same
++    EXPSTR(str1, "aaaaa");
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "keep it simple");
++    slen = strlen(str1);
++
++    dest = stpncpy_s(&str1[0], LEN, &str1[5], slen - 5, &rc);
++    ERR(ESOVRLP); // TODO
++    CHECK_SLACK(str1, LEN);
++
++    /*--------------------------------------------------*/
++
++    strcpy(&str1[0], "keep it simple");
++    slen = strlen(str1);
++
++    dest = stpncpy_s(&str1[5], LEN - 5, &str1[0], slen, &rc);
++    ERR(ESOVRLP);
++    CHECK_SLACK(&str1[5], LEN - 5);
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "qqweqeqeqeq");
++    strcpy(str2, "keep it simple");
++    slen = len = strlen(str1);
++
++    dest = stpncpy_s(str2, LEN, str1, slen, &rc);
++    ERR(EOK)
++    EXPSTR(str1, str2);
++    CHECK_SLACK(&str2[len], LEN - len);
++
++    /*--------------------------------------------------*/
++
++    strcpy(&str1[0], "keep it simple");
++    str2[0] = '\0';
++    slen = 10;
++
++    dest = stpncpy_s(str1, LEN, str2, slen, &rc);
++    ERR(EOK)
++    EXPSTR(str1, str2);
++    CHECK_SLACK(str1, LEN);
++
++    /*--------------------------------------------------*/
++
++    str1[0] = '\0';
++    strcpy(&str2[0], "keep it simple");
++    slen = len = strlen(str2);
++
++    dest = stpncpy_s(str1, LEN, str2, slen, &rc);
++    ERR(EOK)
++    EXPSTR(str1, str2);
++    CHECK_SLACK(&str1[len], LEN - len);
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "qqweqeqeqeq");
++    strcpy(str2, "keep it simple");
++    slen = len = strlen(str2);
++
++    dest = stpncpy_s(str1, LEN, str2, slen, &rc);
++    ERR(EOK)
++    EXPSTR(str1, str2);
++    CHECK_SLACK(&str1[len], LEN - len);
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "qqweqeqeqeq");
++    strcpy(str2, "keep it simple");
++    slen = strlen(str2);
++
++    dest = stpncpy_s(str1, 1, str2, slen, &rc);
++    ERR(ESNOSPC);
++    CHECK_SLACK(str1, 1);
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "qqweqeqeqeq");
++    strcpy(str2, "keep it simple");
++
++    dest = stpncpy_s(str1, 2, str2, slen, &rc);
++    ERR(ESNOSPC);
++    CHECK_SLACK(str1, 2);
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "qqweqeqeqeq");
++    strcpy(str2, "it");
++
++    dest = stpncpy_s(str1, 3, str2, 2, &rc);
++    ERR(EOK)
++    EXPSTR(str1, str2);
++    CHECK_SLACK(&str1[2], 1);
++
++    /*--------------------------------------------------*/
++
++    strcpy(str1, "qq12345weqeqeqeq");
++    strcpy(str2, "it");
++
++    dest = stpncpy_s(str1, 10, str2, 2, &rc);
++    ERR(EOK);
++    EXPSTR(str1, str2);
++    CHECK_SLACK(&str1[2], 8);
++    /*for (i=0; i<10; i++) {
++        debug_printf("str1[%i] = %d \n", i, str1[i]);
++    }*/
++    /*--------------------------------------------------*/
++
++    return (errs);
++}
++
++#ifndef __KERNEL__
++/* simple hack to get this to work for both userspace and Linux kernel,
++   until a better solution can be created. */
++int main(void) { return (test_stpncpy_s()); }
++#endif
diff --git a/meta-oe/recipes-core/safec/safec/0032-configure-don-t-probe-for-wchar-with-disable-wchar.patch b/meta-oe/recipes-core/safec/safec/0032-configure-don-t-probe-for-wchar-with-disable-wchar.patch
new file mode 100644
index 000000000..c7dda09f4
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0032-configure-don-t-probe-for-wchar-with-disable-wchar.patch
@@ -0,0 +1,185 @@ 
+From f3b041f44e25d1d09269aed44337e503042becda Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Tue, 26 Oct 2021 19:27:49 +0200
+Subject: [PATCH] configure: don't probe for wchar with --disable-wchar
+
+minor performance optim
+---
+ configure.ac | 112 ++++++++++++++++++++++++++++++---------------------
+ 1 file changed, 65 insertions(+), 47 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 45b013da..8f568d77 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -849,6 +849,43 @@ AX_GCC_BUILTIN(__builtin___bnd_chk_ptr_bounds)
+ #AX_GCC_BUILTIN(__builtin___bnd_get_ptr_lbound)
+ #AX_GCC_BUILTIN(__builtin___bnd_get_ptr_ubound)
+ 
++AC_CHECK_FUNCS([ vswprintf vswscanf mbsrtowcs ])
++
++dnl this user choice needs to probe first for the default
++AC_ARG_ENABLE(wchar,
++	AS_HELP_STRING([--disable-wchar],
++		       [Disable multibyte and wchar support. @<:@default=no@:>@]),
++	[case "${enableval}" in
++	yes) enable_wchar=true ;;
++	no)  enable_wchar=false ;;
++        dnl early mingw32 have only crippled wchar support: only wcscmp, wcslen
++	*)   if test x$ac_cv_type_wchar_t = xyes -a x$ac_cv_func_vswprintf = xyes \
++                  -a x$ac_cv_header_wchar_h = xyes
++             then
++               enable_wchar=true
++             else
++               AC_MSG_WARN([no proper wchar support])
++               enable_wchar=false
++             fi ;;
++	esac], [enable_wchar=true])
++
++AC_MSG_CHECKING([for --disable-wchar or broken wchar usability])
++dnl catch mingw32 1.0 with crippled wchar
++
++if test x$ac_cv_header_wchar_h = xyes -a x$enable_wchar = xtrue \
++   -a x$ac_cv_func_vswprintf = xyes \
++   -a x$ac_cv_func_mbsrtowcs = xyes -a x$ac_cv_func_vswscanf = xyes
++then
++  enable_wchar=true
++else
++  enable_wchar=false
++fi
++if test "x$enable_wchar" = "xtrue" ; then
++	AC_MSG_RESULT([no (default)])
++else
++	AC_MSG_RESULT([yes])
++fi
++
+ AC_MSG_NOTICE([Check library functions])
+ # ===============================================
+ # dynamic checks if registered via malloc (e.g. libmpx)
+@@ -857,9 +894,9 @@ dnl bos enabled chk functions (but not yet usable)
+ #for b in $builtins_chk; do
+ AC_CHECK_FUNCS([__memcpy_chk __memmove_chk __memset_chk \
+         __strcpy_chk __strncpy_chk __strcat_chk __strncat_chk \
+-        __printf_chk __sprintf_chk __snprintf_chk __swprintf_chk \
++        __printf_chk __sprintf_chk __snprintf_chk  \
+         __vfprintf_chk __vfwprintf_chk __vsprintf_chk __vsnprintf_chk \
+-        __vsscanf_chk __vswscanf_chk ])
++        __vsscanf_chk ])
+ #done
+ dnl They need to include the relevant intrin header first
+ dnl TODO: probe for MEMORY_BARRIER and COMPILER_BARRIER here
+@@ -869,46 +906,58 @@ AC_FUNC_MEMCMP
+ dnl no header needed as is checks if the linker can find it
+ dnl mbstowcs missing on cygwin64
+ AC_CHECK_FUNCS([ memset strcmp strcasecmp strcasestr strcspn strpbrk strspn \
+-        strnstr strnlen strrchr memrchr strstr wmemchr wmemcmp wcscmp wcsstr \
+-        vswprintf vsnwprintf vswscanf mbsrtowcs mbstowcs iswdigit iswspace \
+-        towlower towupper towctrans bcmp secure_getenv timingsafe_memcmp \
++        strnstr strnlen strrchr memrchr strstr bcmp secure_getenv timingsafe_memcmp \
+         timingsafe_bcmp explicit_bzero explicit_memset \
+         asctime_r ctime_r gmtime_r localtime_r memccpy stpcpy stpncpy])
+ 
++if test "x$enable_wchar" = "xtrue" ; then        
++   AC_CHECK_FUNCS([ wmemchr wmemcmp wcscmp wcsstr \
++        vswprintf vsnwprintf vswscanf mbsrtowcs mbstowcs iswdigit iswspace \
++        towlower towupper towctrans ])
++   AC_CHECK_FUNCS([ __swprintf_chk  __vfwprintf_chk __vswscanf_chk ])
++fi
++
+ dnl add the extensions, pretending we want them
+ echo "#define __STDC_WANT_LIB_EXT1__  1" >>confdefs.h
++
+ dnl native safec shadowing functions (should be none)
+ AC_CHECK_FUNCS([_memcpy_s_chk _memmove_s_chk _memset_s_chk _memcmp_s_chk \
+         _strcpy_s_chk _strncpy_s_chk _strcat_s_chk _strncat_s_chk _strnlen_s_chk \
+-        _printf_s_chk _sprintf_s_chk _snprintf_s_chk _swprintf_s_chk \
+-        _vfprintf_s_chk _vfwprintf_s_chk _vsprintf_s_chk _vsnprintf_s_chk])
++        _printf_s_chk _sprintf_s_chk _snprintf_s_chk \
++        _vfprintf_s_chk _vsprintf_s_chk _vsnprintf_s_chk])
++
+ dnl native C11 Annex K functions
+ dnl vsnprintf_s vsnwprintf_s strtok_s wcstok_s deviate in mingw from c11
+ AC_CHECK_FUNCS(
+       [ memset_s memcpy_s memmove_s memzero_s memchr_s memrchr_s memccpy_s \
+         sprintf_s strcat_s strcpy_s strncat_s strncpy_s \
+-        strnlen_s strtok_s strerror_s vsprintf_s tmpnam_s snprintf_s \
+-        vsnprintf_s snwprintf_s \
++        strnlen_s strtok_s strerror_s vsprintf_s tmpnam_s snprintf_s vsnprintf_s \
+         strspn_s strset_s strchr_s strrchr_s strstr_s strzero_s strnset_s \
+         stpcpy_s stpncpy_s \
+-        mbsrtowcs_s mbstowcs_s wcsrtombs_s wcstombs_s \
++        sscanf_s fscanf_s scanf_s vfscanf_s \
++        vsscanf_s vscanf_s printf_s fprintf_s tmpfile_s vfprintf_s vprintf_s \
++        fopen_s freopen_s gets_s bsearch_s qsort_s gmtime_s localtime_s \
++        asctime_s ctime_s getenv_s ])
++
++if test "x$enable_wchar" = "xtrue" ; then        
++   AC_CHECK_FUNCS(
++      [ mbsrtowcs_s mbstowcs_s wcsrtombs_s wcstombs_s \
+         wcrtomb_s wctomb_s wcsnlen_s wcscpy_s wcsncpy_s wcscat_s wcsncat_s \
+         wmemcpy_s wmemmove_s wcstok_s vswprintf_s swprintf_s vfwprintf_s \
+-        vwprintf_s wprintf_s fwprintf_s swscanf_s vswscanf_s wscanf_s \
++        vwprintf_s wprintf_s snwprintf_s fwprintf_s swscanf_s vswscanf_s wscanf_s \
+         vfwscanf_s fwscanf_s vwscanf_s vsnwprintf_s wcsstr_s wmemcmp_s \
+         wcscmp_s wcsncmp_s wcsicmp_s wcsset_s wcsnset_s wcscoll_s wcslwr_s \
+-        wcsupr_s towfc_s wcsfc_s sscanf_s fscanf_s scanf_s vfscanf_s \
+-        vsscanf_s vscanf_s printf_s fprintf_s tmpfile_s vfprintf_s vprintf_s \
+-        fopen_s freopen_s gets_s bsearch_s qsort_s gmtime_s localtime_s \
+-        asctime_s ctime_s getenv_s ])
++        wcsupr_s towfc_s wcsfc_s  ])
++   AC_CHECK_FUNCS([ _swprintf_s_chk _vfwprintf_s_chk ])
++fi
+ dnl but delete it, because we override it case by case
+ $GREP -v '__STDC_WANT_LIB_EXT1__' confdefs.h > confdefs.h.tmp
+ mv confdefs.h.tmp confdefs.h
+         
+ AM_CONDITIONAL([HAVE_WCSSTR], [test "x$ac_cv_func_wcsstr" = "xyes"])
+ AM_CONDITIONAL([HAVE_MBSTOWCS], [test "x$ac_cv_func_mbstowcs" = "xyes"])
+-AM_CONDITIONAL([HAVE_MEMCPY_S], [test "x$ac_cv_func_memcpy_s" = "xyes"])
+ AM_CONDITIONAL([HAVE_VSNWPRINTF_S], [test "x$ac_cv_func_vsnwprintf_s" = "xyes"])
++AM_CONDITIONAL([HAVE_MEMCPY_S], [test "x$ac_cv_func_memcpy_s" = "xyes"])
+ AM_CONDITIONAL([HAVE_TIMINGSAFE_BCMP],
+    [test "x$ac_cv_func_timingsafe_memcmp" = "xyes" -a "x$ac_cv_func_timingsafe_bcmp" = "xyes" ])
+ 
+@@ -950,41 +999,10 @@ return strnstr("%s %n", "%n", 6) ? 0 : 1;
+ 	[ AC_MSG_RESULT([no (cross)]) ])
+ fi
+ 
+-dnl this user choice needs to probe first for the default
+-AC_ARG_ENABLE(wchar,
+-	AS_HELP_STRING([--disable-wchar],
+-		       [Disable multibyte and wchar support. @<:@default=no@:>@]),
+-	[case "${enableval}" in
+-	yes) enable_wchar=true ;;
+-	no)  enable_wchar=false ;;
+-        dnl early mingw32 have only crippled wchar support: only wcscmp, wcslen
+-	*)   if test x$ac_cv_type_wchar_t = xyes -a x$ac_cv_func_vswprintf = xyes \
+-                  -a x$ac_cv_header_wchar_h = xyes
+-             then
+-               enable_wchar=true
+-             else
+-               AC_MSG_WARN([no proper wchar support])
+-               enable_wchar=false
+-             fi ;;
+-	esac], [enable_wchar=true])
+-AC_MSG_CHECKING([for --disable-wchar or broken wchar usability])
+-dnl catch mingw32 1.0 with crippled wchar
+-
+-
+-if test x$ac_cv_header_wchar_h = xyes -a x$enable_wchar = xtrue \
+-   -a x$ac_cv_func_vswprintf = xyes \
+-   -a x$ac_cv_func_mbsrtowcs = xyes -a x$ac_cv_func_vswscanf = xyes
+-then
+-  enable_wchar=true
+-else
+-  enable_wchar=false
+-fi
+ if test "x$enable_wchar" = "xtrue" ; then
+-	AC_MSG_RESULT([no (default)])
+         INSERT_DISABLE_WCHAR="#undef SAFECLIB_DISABLE_WCHAR"
+         AX_COMPILE_CHECK_SIZEOF(wchar_t, [#include <wchar.h>])
+ else
+-	AC_MSG_RESULT([yes])
+         INSERT_DISABLE_WCHAR="#define SAFECLIB_DISABLE_WCHAR 1"
+         ac_cv_header_wchar_h=no
+ fi
diff --git a/meta-oe/recipes-core/safec/safec/0033-doxyfile-update.patch b/meta-oe/recipes-core/safec/safec/0033-doxyfile-update.patch
new file mode 100644
index 000000000..21ecf020c
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0033-doxyfile-update.patch
@@ -0,0 +1,64 @@ 
+From ac5baea3897ade0def2529059e66f287f94b4c87 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sat, 30 Oct 2021 17:10:44 +0200
+Subject: [PATCH] doxyfile update
+
+COLS_IN_ALPHA_INDEX is now obsolete
+---
+ Doxyfile.in             | 1 -
+ src/str/snprintf_s.c    | 2 +-
+ src/str/sprintf_s.c     | 2 +-
+ src/wchar/snwprintf_s.c | 2 +-
+ 4 files changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/Doxyfile.in b/Doxyfile.in
+index 57220b52..dfd37cb1 100644
+--- a/Doxyfile.in
++++ b/Doxyfile.in
+@@ -147,7 +147,6 @@ VERBATIM_HEADERS       = NO
+ # Configuration options related to the alphabetical class index
+ #---------------------------------------------------------------------------
+ ALPHABETICAL_INDEX     = YES
+-COLS_IN_ALPHA_INDEX    = 5
+ IGNORE_PREFIX          =
+ #---------------------------------------------------------------------------
+ # Configuration options related to the HTML output
+diff --git a/src/str/snprintf_s.c b/src/str/snprintf_s.c
+index 9f27d210..5b4cfa5e 100644
+--- a/src/str/snprintf_s.c
++++ b/src/str/snprintf_s.c
+@@ -43,7 +43,7 @@ any of the arguments corresponding to %s is a null pointer
+ */
+ 
+ /**
+- * @def snprintf_s(dest,dmax,fmt,...)
++ * @def snprintf_s(dest, dmax, fmt, ...)
+  * @brief
+  *    The truncating \c snprintf_s function composes a string with
+  *    same test that would be printed if format was used on \c
+diff --git a/src/str/sprintf_s.c b/src/str/sprintf_s.c
+index 1c12b1c8..06c09eb6 100644
+--- a/src/str/sprintf_s.c
++++ b/src/str/sprintf_s.c
+@@ -42,7 +42,7 @@
+ #else
+ 
+ /**
+- * @def sprintf_s(dest,dmax,fmt,...)
++ * @def sprintf_s(dest, dmax, fmt, ...)
+  * @brief
+  *    The \b sprintf_s function composes a string with the same content that
+  *    would be printed if format was used on printf. Instead of being
+diff --git a/src/wchar/snwprintf_s.c b/src/wchar/snwprintf_s.c
+index b4a4c0b7..6c51dbef 100644
+--- a/src/wchar/snwprintf_s.c
++++ b/src/wchar/snwprintf_s.c
+@@ -43,7 +43,7 @@ any of the arguments corresponding to %s is a null pointer.
+ */
+ 
+ /**
+- * @def snwprintf_s(dest,dmax,fmt,...)
++ * @def snwprintf_s(dest, dmax, fmt, ...)
+  * @brief
+  *    The truncating \c snwprintf_s function composes a wide string
+  *    with same test that would be printed if format was used on \c
diff --git a/meta-oe/recipes-core/safec/safec/0034-gcc-std-c-11-already-defines-_GNU_SOURCE.patch b/meta-oe/recipes-core/safec/safec/0034-gcc-std-c-11-already-defines-_GNU_SOURCE.patch
new file mode 100644
index 000000000..bc8908877
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0034-gcc-std-c-11-already-defines-_GNU_SOURCE.patch
@@ -0,0 +1,154 @@ 
+From 2f7cd39eecd192c8c89032f123fdf4e5e3a08132 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sat, 30 Oct 2021 18:08:39 +0200
+Subject: [PATCH] gcc -std=c++11 already defines _GNU_SOURCE
+
+---
+ src/extmem/memzero_s.c  | 2 ++
+ src/io/gets_s.c         | 2 ++
+ src/os/asctime_s.c      | 2 ++
+ src/os/ctime_s.c        | 2 ++
+ src/os/gmtime_s.c       | 2 ++
+ src/os/localtime_s.c    | 2 ++
+ tests/test_stpcpy_s.c   | 2 +-
+ tests/test_stpncpy_s.c  | 2 ++
+ tests/test_wcsfc_s.c    | 2 +-
+ tests/test_wcstombs_s.c | 2 +-
+ 10 files changed, 17 insertions(+), 3 deletions(-)
+
+diff --git a/src/extmem/memzero_s.c b/src/extmem/memzero_s.c
+index b4b03ef8..3ed7ba62 100644
+--- a/src/extmem/memzero_s.c
++++ b/src/extmem/memzero_s.c
+@@ -31,7 +31,9 @@
+  *------------------------------------------------------------------
+  */
+ 
++#ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
++#endif
+ 
+ #ifdef FOR_DOXYGEN
+ #include "safe_mem_lib.h"
+diff --git a/src/io/gets_s.c b/src/io/gets_s.c
+index 05366dd1..22a9340e 100644
+--- a/src/io/gets_s.c
++++ b/src/io/gets_s.c
+@@ -29,7 +29,9 @@
+  *------------------------------------------------------------------
+  */
+ 
++#ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
++#endif
+ 
+ #ifdef FOR_DOXYGEN
+ #include "safe_lib.h"
+diff --git a/src/os/asctime_s.c b/src/os/asctime_s.c
+index 9976c4aa..9d0e00d0 100644
+--- a/src/os/asctime_s.c
++++ b/src/os/asctime_s.c
+@@ -29,7 +29,9 @@
+  *------------------------------------------------------------------
+  */
+ 
++#ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
++#endif
+ 
+ #ifdef FOR_DOXYGEN
+ #include "safe_lib.h"
+diff --git a/src/os/ctime_s.c b/src/os/ctime_s.c
+index 277c91ef..5fe707e5 100644
+--- a/src/os/ctime_s.c
++++ b/src/os/ctime_s.c
+@@ -29,7 +29,9 @@
+  *------------------------------------------------------------------
+  */
+ 
++#ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
++#endif
+ 
+ #ifdef FOR_DOXYGEN
+ #include "safe_lib.h"
+diff --git a/src/os/gmtime_s.c b/src/os/gmtime_s.c
+index 0ef4418f..f76039bc 100644
+--- a/src/os/gmtime_s.c
++++ b/src/os/gmtime_s.c
+@@ -29,7 +29,9 @@
+  *------------------------------------------------------------------
+  */
+ 
++#ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
++#endif
+ 
+ #ifdef FOR_DOXYGEN
+ #include "safe_lib.h"
+diff --git a/src/os/localtime_s.c b/src/os/localtime_s.c
+index 92ea21b9..b5bbbccf 100644
+--- a/src/os/localtime_s.c
++++ b/src/os/localtime_s.c
+@@ -29,7 +29,9 @@
+  *------------------------------------------------------------------
+  */
+ 
++#ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
++#endif
+ 
+ #ifdef FOR_DOXYGEN
+ #include "safe_lib.h"
+diff --git a/tests/test_stpcpy_s.c b/tests/test_stpcpy_s.c
+index f8851168..7656f379 100644
+--- a/tests/test_stpcpy_s.c
++++ b/tests/test_stpcpy_s.c
+@@ -1,7 +1,7 @@
+ /*------------------------------------------------------------------
+  * test_stpcpy_s
+  * File 'extstr/stpcpy_s.c'
+- * Lines executed:100.00% of 48
++ * Lines executed:83.53% of 85
+  *
+  *------------------------------------------------------------------
+  */
+diff --git a/tests/test_stpncpy_s.c b/tests/test_stpncpy_s.c
+index 2b7f9fd2..83ca6b63 100644
+--- a/tests/test_stpncpy_s.c
++++ b/tests/test_stpncpy_s.c
+@@ -1,6 +1,8 @@
+ /*------------------------------------------------------------------
+  * test_strncpy_s
+  * File 'extstr/strncpy_s.c'
++ * File 'stpncpy_s.c'
++ * Lines executed:75.25% of 101
+  * Lines executed:100.00% of 48
+  *
+  *------------------------------------------------------------------
+diff --git a/tests/test_wcsfc_s.c b/tests/test_wcsfc_s.c
+index 02703e30..f81c5113 100644
+--- a/tests/test_wcsfc_s.c
++++ b/tests/test_wcsfc_s.c
+@@ -1,7 +1,7 @@
+ /*------------------------------------------------------------------
+  * test_wcsfc_s
+  * File 'wcsfc_s.c'
+- * Lines executed:52.21% of 136
++ * Lines executed:94.12% of 136
+  *
+  *------------------------------------------------------------------
+  */
+diff --git a/tests/test_wcstombs_s.c b/tests/test_wcstombs_s.c
+index 3b932770..46f4cb8d 100644
+--- a/tests/test_wcstombs_s.c
++++ b/tests/test_wcstombs_s.c
+@@ -1,7 +1,7 @@
+ /*------------------------------------------------------------------
+  * test_wcstombs_s
+  * File 'wchar/wcstombs_s.c'
+- * Lines executed:90.63% of 32
++ * Lines executed:90.62% of 32
+  *
+  *------------------------------------------------------------------
+  */
diff --git a/meta-oe/recipes-core/safec/safec/0035-mingw-fixes-disable-p_memset_s-test.patch b/meta-oe/recipes-core/safec/safec/0035-mingw-fixes-disable-p_memset_s-test.patch
new file mode 100644
index 000000000..634c1c303
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0035-mingw-fixes-disable-p_memset_s-test.patch
@@ -0,0 +1,89 @@ 
+From ef647ca6d394184b074875734da5b3983a5eb517 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sat, 30 Oct 2021 18:59:51 +0200
+Subject: [PATCH] mingw fixes: disable p_memset_s test
+
+and improve the includes for some p_ deps
+---
+ src/mem/mem_primitives_lib.h  |  2 +-
+ src/mem/safe_mem_constraint.h |  2 +-
+ src/str/safe_str_constraint.h |  2 +-
+ tests/Makefile.am             | 11 +++++++++--
+ tests/perf_memset_s.c         |  2 +-
+ 5 files changed, 13 insertions(+), 6 deletions(-)
+
+diff --git a/src/mem/mem_primitives_lib.h b/src/mem/mem_primitives_lib.h
+index 72365e4e..347b3a2f 100644
+--- a/src/mem/mem_primitives_lib.h
++++ b/src/mem/mem_primitives_lib.h
+@@ -35,7 +35,7 @@
+ #define __MEM_PRIMITIVES_LIB_H__
+ 
+ #ifndef FOR_DOXYGEN
+-#include "safeclib_private.h"
++#include "src/safeclib_private.h"
+ #endif
+ 
+ #ifndef __KERNEL__
+diff --git a/src/mem/safe_mem_constraint.h b/src/mem/safe_mem_constraint.h
+index 41346819..748af001 100644
+--- a/src/mem/safe_mem_constraint.h
++++ b/src/mem/safe_mem_constraint.h
+@@ -35,7 +35,7 @@
+ #ifdef FOR_DOXYGEN
+ #include "safe_mem_lib.h"
+ #else
+-#include "safeclib_private.h"
++#include "src/safeclib_private.h"
+ #endif
+ 
+ /*
+diff --git a/src/str/safe_str_constraint.h b/src/str/safe_str_constraint.h
+index 19f1dd97..0a685185 100644
+--- a/src/str/safe_str_constraint.h
++++ b/src/str/safe_str_constraint.h
+@@ -35,7 +35,7 @@
+ #ifdef FOR_DOXYGEN
+ #include "safe_str_lib.h"
+ #else
+-#include "safeclib_private.h"
++#include "src/safeclib_private.h"
+ #endif
+ 
+ /*
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index f0b8ee2e..535e91e8 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -197,9 +197,16 @@ SAFEC_BUILT_TESTS += 	\
+ endif
+ endif
+ 
+-SAFEC_BUILT_PERFS =  p_memcpy_s p_memset_s p_strcpy_s
++SAFEC_BUILT_PERFS = \
++	p_memcpy_s \
++	p_strcpy_s
++if !HAVE_MINGW
++SAFEC_BUILT_PERFS += \
++	p_memset_s
++endif
+ if ENABLE_EXTS
+-SAFEC_BUILT_PERFS += p_memcpy32_s
++SAFEC_BUILT_PERFS += \
++	p_memcpy32_s
+ endif
+ 
+ SAFEC_TEST_COMMON = \
+diff --git a/tests/perf_memset_s.c b/tests/perf_memset_s.c
+index ca89ceec..303ad14e 100644
+--- a/tests/perf_memset_s.c
++++ b/tests/perf_memset_s.c
+@@ -28,7 +28,7 @@
+ #include "safe_mem_lib.h"
+ #include "perf_private.h"
+ #undef debug_printf
+-#include "mem/mem_primitives_lib.h"
++#include "src/mem/mem_primitives_lib.h"
+ 
+ #if defined(TEST_MSVCRT) && defined(HAVE_MEMSET_S)
+ #undef memset_s
diff --git a/meta-oe/recipes-core/safec/safec/0036-fixup-smoker-for-mingw.patch b/meta-oe/recipes-core/safec/safec/0036-fixup-smoker-for-mingw.patch
new file mode 100644
index 000000000..96b9ef4e9
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0036-fixup-smoker-for-mingw.patch
@@ -0,0 +1,106 @@ 
+From d39290baca0d475906d53ffa674c2dd5a075d7e7 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sat, 30 Oct 2021 19:39:03 +0200
+Subject: [PATCH] fixup smoker for mingw
+
+cross from linux might need libssp-0.dll, at least on fedora.
+not on debian
+---
+ build-aux/smoke.sh     | 25 ++++++++++++++-----------
+ tests/test_stpncpy_s.c |  3 ---
+ 2 files changed, 14 insertions(+), 14 deletions(-)
+
+diff --git a/build-aux/smoke.sh b/build-aux/smoke.sh
+index 2d70978c..1a061077 100755
+--- a/build-aux/smoke.sh
++++ b/build-aux/smoke.sh
+@@ -121,7 +121,7 @@ if [ -e /opt/pgi/osx86-64/2019/bin/pgcc ]; then
+     echo /opt/pgi/osx86-64/2019/bin/pgcc --enable-unsafe --enable-debug
+     CC=/opt/pgi/osx86-64/2019/bin/pgcc ./configure --enable-unsafe --enable-debug && \
+         gmake -s j4 && gmake check-log
+-        # fails on several not null slack wirh >RMAX
++        # fails on several not null slack with >RMAX
+     gmake -s -j4 clean
+ fi
+ 
+@@ -129,15 +129,15 @@ fi
+ 
+ Linux)
+     make -s clean
+-    for clang in clang clang-10 clang-7 clang-5.0
++    if test -n "`which clang`"; then
++        echo clang -fsanitize=address -fno-omit-frame-pointer --enable-debug --enable-unsafe --enable-norm-compat
++        CC="clang -fsanitize=address -fno-omit-frame-pointer" \
++          ./configure --enable-debug --enable-unsafe --enable-norm-compat && \
++            make -s -j4 check-log || exit
++        make -s clean
++    fi
++    for clang in clang clang-{11,10,7,5.0}
+     do
+-        if test -n "`which clang`"; then
+-            echo $clang -fsanitize=address -fno-omit-frame-pointer --enable-debug --enable-unsafe --enable-norm-compat
+-            CC="clang -fsanitize=address -fno-omit-frame-pointer" \
+-              ./configure --enable-debug --enable-unsafe --enable-norm-compat && \
+-                make -s -j4 check-log || exit
+-            make -s clean
+-        fi
+         if test -n `which $clang`; then
+             echo $clang -march=native --disable-constraint-handler --enable-unsafe --enable-norm-compat
+             CC="$clang -march=native" \
+@@ -145,7 +145,7 @@ Linux)
+                 make -s -j4 check-log && make -s -j4 -C tests tests-bos
+         fi
+     done
+-    for clang in clang-3.7 clang-3.6 clang-3.5 clang-3.4
++    for clang in clang-{3.7,3.6,3.5,3.4}
+     do
+         if test -n "`which $clang`"; then
+             echo $clang -std=c99 --enable-debug --enable-unsafe --enable-norm-compat
+@@ -169,7 +169,7 @@ Linux)
+     fi
+     #CC="g++-6 -std=c++11" ./configure && \
+         #    make -s -j4 check-log || exit
+-    for gcc in gcc-{10,9,8,7,6,5}
++    for gcc in gcc-{12,11,10,9,8,7,6,5}
+     do
+         if test -n "`which $gcc`"; then
+             if CC="$gcc" ./configure; then
+@@ -309,6 +309,7 @@ git clean -dxf src tests
+ autoreconf
+ if test -n "`which x86_64-w64-mingw32-gcc`"; then
+     #CC="x86_64-w64-mingw32-gcc"
++    test -f libssp-0.dll.m64 && cp tests/libssp-0.dll
+     ./configure --enable-unsafe --host=x86_64-w64-mingw32 && \
+     $make -s -j4 && $make -s -j4 -C tests tests && \
+     if [ `uname` = Linux ]; then
+@@ -321,6 +322,7 @@ if test -n "`which x86_64-w64-mingw32-gcc`"; then
+     autoreconf
+ fi
+ if test -n "`which i686-w64-mingw32-gcc`"; then
++    test -f libssp-0.dll.m32 && cp tests/libssp-0.dll
+     ./configure --enable-unsafe --host=i686-w64-mingw32 && \
+     $make -s -j4  && $make -s -j4 -C tests tests && \
+     if [ `uname` = Linux ]; then
+@@ -344,6 +346,7 @@ if test -n "`which i686-w64-mingw32-gcc`"; then
+ fi
+ if test -n "`i386-mingw32-gcc`"; then
+     #CC="i386-mingw32-gcc"
++    test -f libssp-0.dll.m32 && cp tests/libssp-0.dll
+     ./configure --enable-unsafe --host=i386-mingw32 && \
+     $make -s -j4  && $make -s -j4 -C tests tests && \
+     if [ `uname` = Linux ]; then
+diff --git a/tests/test_stpncpy_s.c b/tests/test_stpncpy_s.c
+index 83ca6b63..ef2a1636 100644
+--- a/tests/test_stpncpy_s.c
++++ b/tests/test_stpncpy_s.c
+@@ -1,10 +1,7 @@
+ /*------------------------------------------------------------------
+  * test_strncpy_s
+- * File 'extstr/strncpy_s.c'
+  * File 'stpncpy_s.c'
+  * Lines executed:75.25% of 101
+- * Lines executed:100.00% of 48
+- *
+  *------------------------------------------------------------------
+  */
+ 
diff --git a/meta-oe/recipes-core/safec/safec/0037-fix-sprintf_s-with-arg-GH-97.patch b/meta-oe/recipes-core/safec/safec/0037-fix-sprintf_s-with-arg-GH-97.patch
new file mode 100644
index 000000000..fbac3ae3e
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0037-fix-sprintf_s-with-arg-GH-97.patch
@@ -0,0 +1,62 @@ 
+From ffd25a2709f536f59b93da9baefbb7564e91a983 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sat, 30 Oct 2021 22:32:51 +0200
+Subject: [PATCH] fix sprintf_s with "" arg, GH #97
+
+all other printf's use < correctly
+Fixes GH #97
+---
+ src/str/sprintf_s.c     | 2 +-
+ tests/test_snprintf_s.c | 8 ++++++++
+ tests/test_sprintf_s.c  | 6 ++++++
+ 3 files changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/src/str/sprintf_s.c b/src/str/sprintf_s.c
+index 06c09eb6..33b76fd0 100644
+--- a/src/str/sprintf_s.c
++++ b/src/str/sprintf_s.c
+@@ -191,7 +191,7 @@ EXPORT int sprintf_s(char *restrict dest, rsize_t dmax,
+                             but like all other implementations */
+     }
+ 
+-    if (unlikely(ret <= 0)) {
++    if (unlikely(ret < 0)) {
+         char errstr[128] = "sprintf_s: ";
+         strcat(errstr, strerror(errno));
+         handle_error(dest, dmax, errstr, -ret);
+diff --git a/tests/test_snprintf_s.c b/tests/test_snprintf_s.c
+index e1899810..bb3c7c66 100644
+--- a/tests/test_snprintf_s.c
++++ b/tests/test_snprintf_s.c
+@@ -228,6 +228,14 @@ int test_snprintf_s(void) {
+     ERR(0)
+     EXPNULL(str1)
+ 
++
++    strcpy(str1, "qqweqq");
++
++    rc = snprintf_s(str1, LEN, "%s", "");
++    ERR(0)
++    EXPNULL(str1)
++
++
+     /*--------------------------------------------------*/
+ 
+     str1[0] = '\0';
+diff --git a/tests/test_sprintf_s.c b/tests/test_sprintf_s.c
+index 3e8420be..3766b69d 100644
+--- a/tests/test_sprintf_s.c
++++ b/tests/test_sprintf_s.c
+@@ -174,6 +174,12 @@ int test_sprintf_s(void) {
+     ERR(0)
+     EXPNULL(str1)
+ 
++    strcpy(str1, "qqweqq");
++
++    rc = sprintf_s(str1, LEN, "%s", "");
++    ERR(0)
++    EXPNULL(str1)
++
+     /*--------------------------------------------------*/
+ 
+     str1[0] = '\0';
diff --git a/meta-oe/recipes-core/safec/safec/0038-WIP-start-with-our-own-printf.patch b/meta-oe/recipes-core/safec/safec/0038-WIP-start-with-our-own-printf.patch
new file mode 100644
index 000000000..42b7e4183
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0038-WIP-start-with-our-own-printf.patch
@@ -0,0 +1,1343 @@ 
+From 5e4905e2316a11b45afcf7024ee9303c2cfc53c2 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sat, 30 Oct 2021 20:51:59 +0200
+Subject: [PATCH] WIP start with our own printf
+
+based on the MIT printf from https://github.com/mpaland/printf/
+---
+ src/io/printf_s.c      |  29 +-
+ src/safeclib_private.h |  43 ++
+ src/str/snprintf_s.c   |  81 +---
+ src/str/sprintf_s.c    | 113 +----
+ src/str/vsnprintf_s.c  | 916 ++++++++++++++++++++++++++++++++++++++++-
+ 5 files changed, 975 insertions(+), 207 deletions(-)
+
+diff --git a/src/io/printf_s.c b/src/io/printf_s.c
+index fee6f769..2b36a28c 100644
+--- a/src/io/printf_s.c
++++ b/src/io/printf_s.c
+@@ -2,8 +2,9 @@
+  * printf_s.c
+  *
+  * September 2017, Reini Urban
++ * November 2021, Reini Urban
+  *
+- * Copyright (c) 2017 by Reini Urban
++ * Copyright (c) 2017, 2021 by Reini Urban
+  * All rights reserved.
+  *
+  * Permission is hereby granted, free of charge, to any person
+@@ -66,29 +67,13 @@
+  */
+ 
+ EXPORT int printf_s(const char *restrict fmt, ...) {
+-    va_list ap;
++    va_list va;
+     int ret;
+-    const char *p;
++    char buffer[1];
+ 
+-    if (unlikely(fmt == NULL)) {
+-        invoke_safe_str_constraint_handler("printf_s: fmt is null", NULL,
+-                                           ESNULLP);
+-        return -(ESNULLP);
+-    }
+-
+-    if (unlikely((p = strnstr(fmt, "%n", RSIZE_MAX_STR)))) {
+-        /* at the beginning or if inside, not %%n */
+-        if ((p - fmt == 0) || *(p - 1) != '%') {
+-            invoke_safe_str_constraint_handler("printf_s: illegal %n", NULL,
+-                                               EINVAL);
+-            return -(EINVAL);
+-        }
+-    }
+-
+-    errno = 0;
+-    va_start(ap, fmt);
+-    ret = vprintf(fmt, ap);
+-    va_end(ap);
++    va_start(va, fmt);
++    ret = _vsnprintf_s(_out_char, buffer, (rsize_t)-1, fmt, va);
++    va_end(va);
+ 
+     if (unlikely(ret < 0)) {
+         char errstr[128] = "printf_s: ";
+diff --git a/src/safeclib_private.h b/src/safeclib_private.h
+index 5bb3a7fb..b110aec6 100644
+--- a/src/safeclib_private.h
++++ b/src/safeclib_private.h
+@@ -643,4 +643,47 @@ EXTERN int _decomp_s(wchar_t *restrict dest, rsize_t dmax, const uint32_t cp,
+ 
+ #endif /* SAFECLIB_DISABLE_WCHAR */
+ 
++// internal helper for the *printf_s functions.
++// output function type
++typedef void (*out_fct_type)(char character, void *buffer, size_t idx,
++                             size_t maxlen);
++// wrapper (used as buffer) for output function type
++typedef struct {
++    void (*fct)(char character, void *arg);
++    void *arg;
++} out_fct_wrap_type;
++
++// internal buffer output
++static inline void _out_buffer(char character, void *buffer, size_t idx,
++                               size_t maxlen) {
++    if (idx < maxlen) {
++        ((char *)buffer)[idx] = character;
++    }
++}
++
++// internal putchar wrapper
++static inline void _out_char(char character, void *buffer, size_t idx,
++                             size_t maxlen) {
++    (void)buffer;
++    (void)idx;
++    (void)maxlen;
++    if (character) {
++        putchar(character);
++    }
++}
++
++// internal output function wrapper
++static inline void _out_fct(char character, void *buffer, size_t idx,
++                            size_t maxlen) {
++    (void)idx;
++    (void)maxlen;
++    if (character) {
++        // buffer is the output fct pointer
++        ((out_fct_wrap_type *)buffer)
++            ->fct(character, ((out_fct_wrap_type *)buffer)->arg);
++    }
++}
++int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
++                 const char *format, va_list va);
++
+ #endif /* __SAFECLIB_PRIVATE_H__ */
+diff --git a/src/str/snprintf_s.c b/src/str/snprintf_s.c
+index 5b4cfa5e..8c8ee32f 100644
+--- a/src/str/snprintf_s.c
++++ b/src/str/snprintf_s.c
+@@ -1,10 +1,9 @@
+ /*------------------------------------------------------------------
+  * snprintf_s.c
+  *
+- * August 2017, Reini Urban
+- * February 2018, Reini Urban
++ * November 2021, Reini Urban
+  *
+- * Copyright (c) 2017, 2018 by Reini Urban
++ * Copyright (c) 2021 by Reini Urban
+  * All rights reserved.
+  *
+  * Permission is hereby granted, free of charge, to any person
+@@ -91,7 +90,7 @@ any of the arguments corresponding to %s is a null pointer
+  *    sprintf_s(), vsnprintf_s(), snwprintf_s()
+  */
+ #if defined FOR_DOXYGEN
+-int sprintf_s(char *restrict dest, rsize_t dmax, const char *restrict fmt, ...)
++int snprintf_s(char *restrict dest, rsize_t dmax, const char *restrict fmt, ...)
+ #elif defined SAFECLIB_HAVE_C99
+ EXPORT int _snprintf_s_chk(char *restrict dest, rsize_t dmax,
+                            const size_t destbos, const char *restrict fmt, ...)
+@@ -100,75 +99,15 @@ EXPORT int snprintf_s(char *restrict dest, rsize_t dmax,
+                       const char *restrict fmt, ...)
+ #endif
+ {
+-    va_list ap;
+-    const char *p;
+-    int ret = -1;
+-#ifndef SAFECLIB_HAVE_C99
+-    const size_t destbos = BOS_UNKNOWN;
+-#endif
+-
+-    if (unlikely(dest == NULL ||
+-                 fmt == NULL)) { /* for !dmax size-calc use sprintf_s */
+-        invoke_safe_str_constraint_handler("snprintf_s: dest/fmt is null", NULL,
+-                                           ESNULLP);
+-        return -(ESNULLP);
+-    }
+-    if (unlikely(dmax == 0)) {
+-        invoke_safe_str_constraint_handler("snprintf_s: dmax is zero", dest,
+-                                           ESZEROL);
+-        return -ESZEROL;
+-    }
+-    if (unlikely(dmax > RSIZE_MAX_STR)) {
+-        invoke_safe_str_constraint_handler("snprintf_s: dmax exceeds max", dest,
+-                                           ESLEMAX);
+-        return -ESLEMAX;
+-    }
+-    if (destbos == BOS_UNKNOWN) {
+-        BND_CHK_PTR_BOUNDS(dest, dmax);
+-    } else {
+-        if (unlikely(dmax > destbos)) {
+-            return -(handle_str_bos_overload("snprintf_s: dmax exceeds dest",
+-                                             dest, destbos));
+-        }
+-    }
+-
+-    if (unlikely((p = strnstr(fmt, "%n", RSIZE_MAX_STR)))) {
+-        /* at the beginning or if inside, not %%n */
+-        if ((p - fmt == 0) || *(p - 1) != '%') {
+-            invoke_safe_str_constraint_handler("snprintf_s: illegal %n", dest,
+-                                               EINVAL);
+-            return -(EINVAL);
+-        }
+-    }
+-
+-    errno = 0;
+-    va_start(ap, fmt);
+-    ret = vsnprintf(dest, (size_t)dmax, fmt, ap);
+-    va_end(ap);
+-
+-    if (unlikely(ret < 0)) {
+-        char errstr[128] = "snprintf_s: ";
+-#ifdef HAVE_MINGW32
+-        if (errno == ERANGE)
+-            strcat(errstr, "len exceeds dmax");
+-        else
+-#endif
+-            strcat(errstr, strerror(errno));
+-        handle_error(dest, dmax, errstr, -ret);
+-        return ret;
+-    }
+-    /* manual truncation */
+-#ifdef SAFECLIB_STR_NULL_SLACK
+-    /* oops, ret would have been written if dmax was ignored */
+-    if ((rsize_t)ret > dmax) {
+-        dest[dmax - 1] = '\0';
+-    } else {
+-        memset(&dest[ret], 0, dmax - ret);
+-    }
++    va_list va;
++    int ret;
++    va_start(va, fmt);
++#if defined SAFECLIB_HAVE_C99
++    ret = _vsnprintf_s_chk(dest, dmax, destbos, fmt, va);
+ #else
+-    dest[dmax - 1] = '\0';
++    ret = vsnprintf_s(dest, dmax, fmt, va);
+ #endif
+-
++    va_end(va);
+     return ret;
+ }
+ 
+diff --git a/src/str/sprintf_s.c b/src/str/sprintf_s.c
+index 33b76fd0..5478911a 100644
+--- a/src/str/sprintf_s.c
++++ b/src/str/sprintf_s.c
+@@ -1,12 +1,9 @@
+ /*------------------------------------------------------------------
+  * sprintf_s.c
+  *
+- * November 2014, Charlie Lenahan
+- * April 2017, Reini Urban
+- * February 2018, Reini Urban
++ * November 2021, Reini Urban
+  *
+- * Copyright (c) 2014 by Charlie Lenahan
+- * Copyright (c) 2017,2018 by Reini Urban
++ * Copyright (c) 2021 by Reini Urban
+  * All rights reserved.
+  *
+  * Permission is hereby granted, free of charge, to any person
+@@ -38,9 +35,6 @@
+ #include "safeclib_private.h"
+ #endif
+ 
+-#if defined(TEST_MSVCRT) && defined(HAVE_SPRINTF_S)
+-#else
+-
+ /**
+  * @def sprintf_s(dest, dmax, fmt, ...)
+  * @brief
+@@ -87,7 +81,7 @@
+  * @retval -1  if an encoding error or a runtime constraint violation in the
+  *             libc function \c vsnprintf occured.
+  *
+- * @note The C11 standard was most likely wrong with changing the return value
++ * @note The C11 standard was most likely wrong with changing the return value to
+  * 0 on errors. All other functions and existing C11 implementations do return
+  * -1, so we return negative error codes. See the
+  * http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1141.pdf revision for their
+@@ -106,101 +100,18 @@ EXPORT int sprintf_s(char *restrict dest, rsize_t dmax,
+                      const char *restrict fmt, ...)
+ #endif
+ {
+-    int ret = -1;
+-    va_list ap;
+-    const char *p;
+-#ifndef SAFECLIB_HAVE_C99
+-    const size_t destbos = BOS_UNKNOWN;
+-#endif
+-
+-    if (unlikely(dmax && dest == NULL)) {
+-        invoke_safe_str_constraint_handler("sprintf_s: dest is null", NULL,
+-                                           ESNULLP);
+-        return -ESNULLP;
+-    }
+-
+-    if (unlikely(fmt == NULL)) {
+-        invoke_safe_str_constraint_handler("sprintf_s: fmt is null", dest,
+-                                           ESNULLP);
+-        return -ESNULLP;
+-    }
+-
+-    if (unlikely(dest && dmax == 0)) {
+-        invoke_safe_str_constraint_handler("sprintf_s: dmax is 0", dest,
+-                                           ESZEROL);
+-        return -ESZEROL;
+-    }
+-
+-    if (unlikely(dmax > RSIZE_MAX_STR)) {
+-        invoke_safe_str_constraint_handler("sprintf_s: dmax exceeds max", dest,
+-                                           ESLEMAX);
+-        return -ESLEMAX;
+-    }
+-    if (destbos == BOS_UNKNOWN) {
+-        if (dmax) {
+-            BND_CHK_PTR_BOUNDS(dest, dmax);
+-        }
+-    } else {
+-        if (unlikely(dmax > destbos)) {
+-            return -(handle_str_bos_overload("sprintf_s: dmax exceeds dest",
+-                                             dest, destbos));
+-        }
+-    }
+-
+-    if (unlikely((p = strnstr(fmt, "%n", RSIZE_MAX_STR)))) {
+-        /* at the beginning or if inside, not %%n */
+-        if ((p - fmt == 0) || *(p - 1) != '%') {
+-            invoke_safe_str_constraint_handler("sprintf_s: illegal %n",
+-                                               (char *restrict)fmt, EINVAL);
+-            return -1; /* EINVAL */
+-        }
+-    }
+-
+-    /* TODO: in order to check for NULL fmt args, need va_copy.
+-    va_copy(ap2, ap);
+-    void *ptr = va_arg(*ap2, void*);
+-    if (ptr == NULL)
+-        return -(ESNULLP);
+-    va_end(ap2);
+-    */
+-
+-    va_start(ap, fmt);
+-    /* FIXME: gcc 4.3 GCC_DIAG_IGNORE(-Wmissing-format-attribute) */
+-#if defined(_WIN32) && defined(HAVE_VSNPRINTF_S)
+-    /* to detect illegal format specifiers */
+-    ret = vsnprintf_s(dest, (size_t)dmax, (size_t)dmax, fmt, ap);
+-    /*#elif defined(HAVE___VSNPRINTF_CHK) */
+-    /* glibc allows %n from readonly strings, freebsd/darwin ignores flag. */
+-    /*ret = __vsnprintf_chk(dest, (size_t)dmax, 2, (size_t)dmax, fmt, ap);*/
++    va_list va;
++    int ret;
++    va_start(va, fmt);
++#if defined SAFECLIB_HAVE_C99
++    ret = _vsnprintf_s_chk(dest, dmax, destbos, fmt, va);
+ #else
+-    ret = vsnprintf((char *)dest, (size_t)dmax, fmt, ap);
+-#endif
+-    /* GCC_DIAG_RESTORE */
+-    va_end(ap);
+-
+-    if (unlikely(dmax && ret >= (int)dmax)
+-#ifdef HAVE_MINGW32
+-        || (ret == -1 && errno == ERANGE)
+-#endif
+-    ) {
+-        handle_error(dest, dmax, "sprintf_s: len exceeds dmax", ESNOSPC);
+-#ifdef HAVE_MINGW32
+-        errno = 0;
+-#endif
+-        return -ESNOSPC; /* different to the standard (=0),
+-                            but like all other implementations */
+-    }
+-
+-    if (unlikely(ret < 0)) {
+-        char errstr[128] = "sprintf_s: ";
+-        strcat(errstr, strerror(errno));
+-        handle_error(dest, dmax, errstr, -ret);
+-    }
+-
++    ret = vsnprintf_s(dest, dmax, fmt, va);
++#endif    
++    va_end(va);
+     return ret;
+ }
++
+ #ifdef __KERNEL__
+ EXPORT_SYMBOL(_sprintf_s_chk);
+ #endif /* __KERNEL__ */
+-
+-#endif /* TEST_MSVCRT */
+diff --git a/src/str/vsnprintf_s.c b/src/str/vsnprintf_s.c
+index 869e431d..6a438943 100644
+--- a/src/str/vsnprintf_s.c
++++ b/src/str/vsnprintf_s.c
+@@ -1,10 +1,11 @@
+ /*------------------------------------------------------------------
+- * vsnprintf_s_s.c
++ * vsnprintf_s.c
+  *
+- * August 2017, Reini Urban
+- * February 2018, Reini Urban
++ * 2014-2019 Marco Paland
++ * November 2021, Reini Urban
+  *
+- * Copyright (c) 2017, 2018 by Reini Urban
++ * Copyright (c) 2014-2019, PALANDesign Hannover, Germany
++ * Copyright (c) 2021 by Reini Urban
+  * All rights reserved.
+  *
+  * Permission is hereby granted, free of charge, to any person
+@@ -36,8 +37,900 @@
+ #include "safeclib_private.h"
+ #endif
+ 
+-#if defined(_WIN32) && defined(HAVE_VSNPRINTF_S)
++///////////////////////////////////////////////////////////////////////////////
++// \author (c) Marco Paland (info@paland.com)
++//             2014-2019, PALANDesign Hannover, Germany
++//
++// based on https://github.com/mpaland/printf/blob/master/printf.c
++// converted by Reini Urban Nov 2021 for the _s variants.
++//
++// \license The MIT License (MIT)
++//
++// Permission is hereby granted, free of charge, to any person obtaining a copy
++// of this software and associated documentation files (the "Software"), to deal
++// in the Software without restriction, including without limitation the rights
++// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
++// copies of the Software, and to permit persons to whom the Software is
++// furnished to do so, subject to the following conditions:
++//
++// The above copyright notice and this permission notice shall be included in
++// all copies or substantial portions of the Software.
++//
++// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++// THE SOFTWARE.
++//
++// \brief Tiny printf, sprintf and (v)snprintf implementation, optimized for
++// speed on
++//        embedded systems with a very limited resources. These routines are
++//        thread safe and reentrant! Use this instead of the bloated
++//        standard/newlib printf cause these use malloc for printf (and may not
++//        be thread safe).
++//
++///////////////////////////////////////////////////////////////////////////////
++
++#include <stdbool.h>
++#include <stdint.h>
++
++#ifdef FOR_DOXYGEN
++#include "safe_str_lib.h"
+ #else
++#include "safeclib_private.h"
++#endif
++
++// define this globally (e.g. gcc -DPRINTF_INCLUDE_CONFIG_H ...) to include the
++// printf_config.h header file
++// default: undefined
++#ifdef PRINTF_INCLUDE_CONFIG_H
++#include "printf_config.h"
++#endif
++
++// 'ntoa' conversion buffer size, this must be big enough to hold one converted
++// numeric number including padded zeros (dynamically created on stack)
++// default: 32 byte
++#ifndef PRINTF_NTOA_BUFFER_SIZE
++#define PRINTF_NTOA_BUFFER_SIZE 32U
++#endif
++
++// 'ftoa' conversion buffer size, this must be big enough to hold one converted
++// float number including padded zeros (dynamically created on stack)
++// default: 32 byte
++#ifndef PRINTF_FTOA_BUFFER_SIZE
++#define PRINTF_FTOA_BUFFER_SIZE 32U
++#endif
++
++// support for the floating point type (%f)
++// default: activated
++#ifndef PRINTF_DISABLE_SUPPORT_FLOAT
++#define PRINTF_SUPPORT_FLOAT
++#endif
++
++// support for exponential floating point notation (%e/%g)
++// default: activated
++#ifndef PRINTF_DISABLE_SUPPORT_EXPONENTIAL
++#define PRINTF_SUPPORT_EXPONENTIAL
++#endif
++
++// define the default floating point precision
++// default: 6 digits
++#ifndef PRINTF_DEFAULT_FLOAT_PRECISION
++#define PRINTF_DEFAULT_FLOAT_PRECISION 6U
++#endif
++
++// define the largest float suitable to print with %f
++// default: 1e9
++#ifndef PRINTF_MAX_FLOAT
++#define PRINTF_MAX_FLOAT 1e9
++#endif
++
++// support for the long long types (%llu or %p)
++// default: activated
++#ifndef PRINTF_DISABLE_SUPPORT_LONG_LONG
++#define PRINTF_SUPPORT_LONG_LONG
++#endif
++
++// support for the ptrdiff_t type (%t)
++// ptrdiff_t is normally defined in <stddef.h> as long or long long type
++// default: activated
++#ifndef PRINTF_DISABLE_SUPPORT_PTRDIFF_T
++#define PRINTF_SUPPORT_PTRDIFF_T
++#endif
++
++///////////////////////////////////////////////////////////////////////////////
++
++// internal flag definitions
++#define FLAGS_ZEROPAD (1U << 0U)
++#define FLAGS_LEFT (1U << 1U)
++#define FLAGS_PLUS (1U << 2U)
++#define FLAGS_SPACE (1U << 3U)
++#define FLAGS_HASH (1U << 4U)
++#define FLAGS_UPPERCASE (1U << 5U)
++#define FLAGS_CHAR (1U << 6U)
++#define FLAGS_SHORT (1U << 7U)
++#define FLAGS_LONG (1U << 8U)
++#define FLAGS_LONG_LONG (1U << 9U)
++#define FLAGS_PRECISION (1U << 10U)
++#define FLAGS_ADAPT_EXP (1U << 11U)
++
++// import float.h for DBL_MAX
++#if defined(PRINTF_SUPPORT_FLOAT)
++#include <float.h>
++#endif
++
++// internal secure strlen
++// \return The length of the string (excluding the terminating 0) limited by
++// 'maxsize'
++static inline unsigned int _strnlen_s(const char *str, size_t maxsize) {
++    const char *s;
++    for (s = str; *s && maxsize--; ++s)
++        ;
++    return (unsigned int)(s - str);
++}
++
++// internal test if char is a digit (0-9)
++// \return true if char is a digit
++static inline bool _is_digit(char ch) { return (ch >= '0') && (ch <= '9'); }
++
++// internal ASCII string to unsigned int conversion
++static unsigned int _atoi(const char **str) {
++    unsigned int i = 0U;
++    while (_is_digit(**str)) {
++        i = i * 10U + (unsigned int)(*((*str)++) - '0');
++    }
++    return i;
++}
++
++// output the specified string in reverse, taking care of any zero-padding
++static size_t _out_rev(out_fct_type out, char *buffer, size_t idx,
++                       size_t maxlen, const char *buf, size_t len,
++                       unsigned int width, unsigned int flags) {
++    const size_t start_idx = idx;
++
++    // pad spaces up to given width
++    if (!(flags & FLAGS_LEFT) && !(flags & FLAGS_ZEROPAD)) {
++        for (size_t i = len; i < width; i++) {
++            out(' ', buffer, idx++, maxlen);
++        }
++    }
++
++    // reverse string
++    while (len) {
++        out(buf[--len], buffer, idx++, maxlen);
++    }
++
++    // append pad spaces up to given width
++    if (flags & FLAGS_LEFT) {
++        while (idx - start_idx < width) {
++            out(' ', buffer, idx++, maxlen);
++        }
++    }
++
++    return idx;
++}
++
++// internal itoa format
++static size_t _ntoa_format(out_fct_type out, char *buffer, size_t idx,
++                           size_t maxlen, char *buf, size_t len, bool negative,
++                           unsigned int base, unsigned int prec,
++                           unsigned int width, unsigned int flags) {
++    // pad leading zeros
++    if (!(flags & FLAGS_LEFT)) {
++        if (width && (flags & FLAGS_ZEROPAD) &&
++            (negative || (flags & (FLAGS_PLUS | FLAGS_SPACE)))) {
++            width--;
++        }
++        while ((len < prec) && (len < PRINTF_NTOA_BUFFER_SIZE)) {
++            buf[len++] = '0';
++        }
++        while ((flags & FLAGS_ZEROPAD) && (len < width) &&
++               (len < PRINTF_NTOA_BUFFER_SIZE)) {
++            buf[len++] = '0';
++        }
++    }
++
++    // handle hash
++    if (flags & FLAGS_HASH) {
++        if (!(flags & FLAGS_PRECISION) && len &&
++            ((len == prec) || (len == width))) {
++            len--;
++            if (len && (base == 16U)) {
++                len--;
++            }
++        }
++        if ((base == 16U) && !(flags & FLAGS_UPPERCASE) &&
++            (len < PRINTF_NTOA_BUFFER_SIZE)) {
++            buf[len++] = 'x';
++        } else if ((base == 16U) && (flags & FLAGS_UPPERCASE) &&
++                   (len < PRINTF_NTOA_BUFFER_SIZE)) {
++            buf[len++] = 'X';
++        } else if ((base == 2U) && (len < PRINTF_NTOA_BUFFER_SIZE)) {
++            buf[len++] = 'b';
++        }
++        if (len < PRINTF_NTOA_BUFFER_SIZE) {
++            buf[len++] = '0';
++        }
++    }
++
++    if (len < PRINTF_NTOA_BUFFER_SIZE) {
++        if (negative) {
++            buf[len++] = '-';
++        } else if (flags & FLAGS_PLUS) {
++            buf[len++] = '+'; // ignore the space if the '+' exists
++        } else if (flags & FLAGS_SPACE) {
++            buf[len++] = ' ';
++        }
++    }
++
++    return _out_rev(out, buffer, idx, maxlen, buf, len, width, flags);
++}
++
++// internal itoa for 'long' type
++static size_t _ntoa_long(out_fct_type out, char *buffer, size_t idx,
++                         size_t maxlen, unsigned long value, bool negative,
++                         unsigned long base, unsigned int prec,
++                         unsigned int width, unsigned int flags) {
++    char buf[PRINTF_NTOA_BUFFER_SIZE];
++    size_t len = 0U;
++
++    // no hash for 0 values
++    if (!value) {
++        flags &= ~FLAGS_HASH;
++    }
++
++    // write if precision != 0 and value is != 0
++    if (!(flags & FLAGS_PRECISION) || value) {
++        do {
++            const char digit = (char)(value % base);
++            buf[len++] =
++                digit < 10 ? '0' + digit
++                           : (flags & FLAGS_UPPERCASE ? 'A' : 'a') + digit - 10;
++            value /= base;
++        } while (value && (len < PRINTF_NTOA_BUFFER_SIZE));
++    }
++
++    return _ntoa_format(out, buffer, idx, maxlen, buf, len, negative,
++                        (unsigned int)base, prec, width, flags);
++}
++
++// internal itoa for 'long long' type
++#if defined(PRINTF_SUPPORT_LONG_LONG)
++static size_t _ntoa_long_long(out_fct_type out, char *buffer, size_t idx,
++                              size_t maxlen, unsigned long long value,
++                              bool negative, unsigned long long base,
++                              unsigned int prec, unsigned int width,
++                              unsigned int flags) {
++    char buf[PRINTF_NTOA_BUFFER_SIZE];
++    size_t len = 0U;
++
++    // no hash for 0 values
++    if (!value) {
++        flags &= ~FLAGS_HASH;
++    }
++
++    // write if precision != 0 and value is != 0
++    if (!(flags & FLAGS_PRECISION) || value) {
++        do {
++            const char digit = (char)(value % base);
++            buf[len++] =
++                digit < 10 ? '0' + digit
++                           : (flags & FLAGS_UPPERCASE ? 'A' : 'a') + digit - 10;
++            value /= base;
++        } while (value && (len < PRINTF_NTOA_BUFFER_SIZE));
++    }
++
++    return _ntoa_format(out, buffer, idx, maxlen, buf, len, negative,
++                        (unsigned int)base, prec, width, flags);
++}
++#endif // PRINTF_SUPPORT_LONG_LONG
++
++#if defined(PRINTF_SUPPORT_FLOAT)
++
++#if defined(PRINTF_SUPPORT_EXPONENTIAL)
++// forward declaration so that _ftoa can switch to exp notation for values >
++// PRINTF_MAX_FLOAT
++static size_t _etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
++                    double value, unsigned int prec, unsigned int width,
++                    unsigned int flags);
++#endif
++
++// internal ftoa for fixed decimal floating point
++static size_t _ftoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
++                    double value, unsigned int prec, unsigned int width,
++                    unsigned int flags) {
++    char buf[PRINTF_FTOA_BUFFER_SIZE];
++    size_t len = 0U;
++    double tmp;
++    double diff = 0.0;
++    unsigned long frac;
++    int whole;
++    bool negative;
++
++    // powers of 10
++    static const double pow10[] = {1,         10,        100,     1000,
++                                   10000,     100000,    1000000, 10000000,
++                                   100000000, 1000000000};
++
++    // test for special values
++    if (value != value)
++        return _out_rev(out, buffer, idx, maxlen, "nan", 3, width, flags);
++    if (value < -DBL_MAX)
++        return _out_rev(out, buffer, idx, maxlen, "fni-", 4, width, flags);
++    if (value > DBL_MAX)
++        return _out_rev(out, buffer, idx, maxlen,
++                        (flags & FLAGS_PLUS) ? "fni+" : "fni",
++                        (flags & FLAGS_PLUS) ? 4U : 3U, width, flags);
++
++    // test for very large values
++    // standard printf behavior is to print EVERY whole number digit -- which
++    // could be 100s of characters overflowing your buffers == bad
++    if ((value > PRINTF_MAX_FLOAT) || (value < -PRINTF_MAX_FLOAT)) {
++#if defined(PRINTF_SUPPORT_EXPONENTIAL)
++        return _etoa(out, buffer, idx, maxlen, value, prec, width, flags);
++#else
++        return 0U;
++#endif
++    }
++
++    // test for negative
++    negative = false;
++    if (value < 0) {
++        negative = true;
++        value = 0 - value;
++    }
++
++    // set default precision, if not set explicitly
++    if (!(flags & FLAGS_PRECISION)) {
++        prec = PRINTF_DEFAULT_FLOAT_PRECISION;
++    }
++    // limit precision to 9, cause a prec >= 10 can lead to overflow errors
++    while ((len < PRINTF_FTOA_BUFFER_SIZE) && (prec > 9U)) {
++        buf[len++] = '0';
++        prec--;
++    }
++
++    whole = (int)value;
++    tmp = (value - whole) * pow10[prec];
++    frac = (unsigned long)tmp;
++    diff = tmp - frac;
++
++    if (diff > 0.5) {
++        ++frac;
++        // handle rollover, e.g. case 0.99 with prec 1 is 1.0
++        if (frac >= pow10[prec]) {
++            frac = 0;
++            ++whole;
++        }
++    } else if (diff < 0.5) {
++    } else if ((frac == 0U) || (frac & 1U)) {
++        // if halfway, round up if odd OR if last digit is 0
++        ++frac;
++    }
++
++    if (prec == 0U) {
++        diff = value - (double)whole;
++        if ((!(diff < 0.5) || (diff > 0.5)) && (whole & 1)) {
++            // exactly 0.5 and ODD, then round up
++            // 1.5 -> 2, but 2.5 -> 2
++            ++whole;
++        }
++    } else {
++        unsigned int count = prec;
++        // now do fractional part, as an unsigned number
++        while (len < PRINTF_FTOA_BUFFER_SIZE) {
++            --count;
++            buf[len++] = (char)(48U + (frac % 10U));
++            if (!(frac /= 10U)) {
++                break;
++            }
++        }
++        // add extra 0s
++        while ((len < PRINTF_FTOA_BUFFER_SIZE) && (count-- > 0U)) {
++            buf[len++] = '0';
++        }
++        if (len < PRINTF_FTOA_BUFFER_SIZE) {
++            // add decimal
++            buf[len++] = '.';
++        }
++    }
++
++    // do whole part, number is reversed
++    while (len < PRINTF_FTOA_BUFFER_SIZE) {
++        buf[len++] = (char)(48 + (whole % 10));
++        if (!(whole /= 10)) {
++            break;
++        }
++    }
++
++    // pad leading zeros
++    if (!(flags & FLAGS_LEFT) && (flags & FLAGS_ZEROPAD)) {
++        if (width && (negative || (flags & (FLAGS_PLUS | FLAGS_SPACE)))) {
++            width--;
++        }
++        while ((len < width) && (len < PRINTF_FTOA_BUFFER_SIZE)) {
++            buf[len++] = '0';
++        }
++    }
++
++    if (len < PRINTF_FTOA_BUFFER_SIZE) {
++        if (negative) {
++            buf[len++] = '-';
++        } else if (flags & FLAGS_PLUS) {
++            buf[len++] = '+'; // ignore the space if the '+' exists
++        } else if (flags & FLAGS_SPACE) {
++            buf[len++] = ' ';
++        }
++    }
++
++    return _out_rev(out, buffer, idx, maxlen, buf, len, width, flags);
++}
++
++#if defined(PRINTF_SUPPORT_EXPONENTIAL)
++// internal ftoa variant for exponential floating-point type, contributed by
++// Martijn Jasperse <m.jasperse@gmail.com>
++static size_t _etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
++                    double value, unsigned int prec, unsigned int width,
++                    unsigned int flags) {
++    union {
++        uint64_t U;
++        double F;
++    } conv;
++    int exp2, expval;
++    unsigned int minwidth, fwidth;
++    bool negative;
++
++    // check for NaN and special values
++    if ((value != value) || (value > DBL_MAX) || (value < -DBL_MAX)) {
++        return _ftoa(out, buffer, idx, maxlen, value, prec, width, flags);
++    }
++
++    // determine the sign
++    negative = value < 0;
++    if (negative) {
++        value = -value;
++    }
++
++    // default precision
++    if (!(flags & FLAGS_PRECISION)) {
++        prec = PRINTF_DEFAULT_FLOAT_PRECISION;
++    }
++
++    // determine the decimal exponent
++    // based on the algorithm by David Gay
++    // (https://www.ampl.com/netlib/fp/dtoa.c)
++    conv.F = value;
++    exp2 = (int)((conv.U >> 52U) & 0x07FFU) - 1023; // effectively log2
++    conv.U = (conv.U & ((1ULL << 52U) - 1U)) |
++             (1023ULL << 52U); // drop the exponent so conv.F is now in [1,2)
++    // now approximate log10 from the log2 integer part and an expansion of ln
++    // around 1.5
++    expval = (int)(0.1760912590558 + exp2 * 0.301029995663981 +
++                       (conv.F - 1.5) * 0.289529654602168);
++    // now we want to compute 10^expval but we want to be sure it won't overflow
++    exp2 = (int)(expval * 3.321928094887362 + 0.5);
++    {
++        const double z = expval * 2.302585092994046 - exp2 * 0.6931471805599453;
++        const double z2 = z * z;
++        conv.U = (uint64_t)(exp2 + 1023) << 52U;
++        // compute exp(z) using continued fractions, see
++        // https://en.wikipedia.org/wiki/Exponential_function#Continued_fractions_for_ex
++        conv.F *= 1 + 2 * z / (2 - z + (z2 / (6 + (z2 / (10 + z2 / 14)))));
++        // correct for rounding errors
++        if (value < conv.F) {
++            expval--;
++            conv.F /= 10;
++        }
++    }
++
++    // the exponent format is "%+03d" and largest value is "307", so set aside
++    // 4-5 characters
++    minwidth = ((expval < 100) && (expval > -100)) ? 4U : 5U;
++
++    // in "%g" mode, "prec" is the number of *significant figures* not decimals
++    if (flags & FLAGS_ADAPT_EXP) {
++        // do we want to fall-back to "%f" mode?
++        if ((value >= 1e-4) && (value < 1e6)) {
++            if ((int)prec > expval) {
++                prec = (unsigned)((int)prec - expval - 1);
++            } else {
++                prec = 0;
++            }
++            flags |= FLAGS_PRECISION; // make sure _ftoa respects precision
++            // no characters in exponent
++            minwidth = 0U;
++            expval = 0;
++        } else {
++            // we use one sigfig for the whole part
++            if ((prec > 0) && (flags & FLAGS_PRECISION)) {
++                --prec;
++            }
++        }
++    }
++
++    // will everything fit?
++    fwidth = width;
++    if (width > minwidth) {
++        // we didn't fall-back so subtract the characters required for the
++        // exponent
++        fwidth -= minwidth;
++    } else {
++        // not enough characters, so go back to default sizing
++        fwidth = 0U;
++    }
++    if ((flags & FLAGS_LEFT) && minwidth) {
++        // if we're padding on the right, DON'T pad the floating part
++        fwidth = 0U;
++    }
++
++    // rescale the float value
++    if (expval) {
++        value /= conv.F;
++    }
++
++    // output the floating part
++    {
++        const size_t start_idx = idx;
++        idx = _ftoa(out, buffer, idx, maxlen, negative ? -value : value, prec,
++                    fwidth, flags & ~FLAGS_ADAPT_EXP);
++
++        // output the exponent part
++        if (minwidth) {
++            // output the exponential symbol
++            out((flags & FLAGS_UPPERCASE) ? 'E' : 'e', buffer, idx++, maxlen);
++            // output the exponent value
++            idx = _ntoa_long(out, buffer, idx, maxlen,
++                             (expval < 0) ? -expval : expval, expval < 0, 10, 0,
++                             minwidth - 1, FLAGS_ZEROPAD | FLAGS_PLUS);
++            // might need to right-pad spaces
++            if (flags & FLAGS_LEFT) {
++                while (idx - start_idx < width)
++                    out(' ', buffer, idx++, maxlen);
++            }
++        }
++    }
++    return idx;
++}
++#endif // PRINTF_SUPPORT_EXPONENTIAL
++#endif // PRINTF_SUPPORT_FLOAT
++
++// internal vsnprintf, extended for _s
++int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
++                 const char *format, va_list va)
++{
++    unsigned int flags, width, precision, n;
++    size_t idx = 0U;
++
++    if (unlikely(buffer == NULL || format == NULL)) { /* for !bufsize size-calc use sprintf_s */
++        invoke_safe_str_constraint_handler("vsnprintf_s: dest/fmt is null", NULL,
++                                           ESNULLP);
++        return -ESNULLP;
++    }
++    if (unlikely(bufsize == 0)) {
++        invoke_safe_str_constraint_handler("vsnprintf_s: dmax is zero", buffer,
++                                           ESZEROL);
++        return -ESZEROL;
++    }
++    if (unlikely(bufsize > RSIZE_MAX_STR)) {
++        invoke_safe_str_constraint_handler("vsnprintf_s: dmax exceeds max", buffer,
++                                           ESLEMAX);
++        return -ESLEMAX;
++    }
++
++    while (*format) {
++        // format specifier?  %[flags][width][.precision][length]
++        if (*format != '%') {
++            // no
++            out(*format, buffer, idx++, bufsize);
++            format++;
++            continue;
++        } else {
++            // yes, evaluate it
++            format++;
++        }
++
++        // evaluate flags
++        flags = 0U;
++        do {
++            switch (*format) {
++            case '0':
++                flags |= FLAGS_ZEROPAD;
++                format++;
++                n = 1U;
++                break;
++            case '-':
++                flags |= FLAGS_LEFT;
++                format++;
++                n = 1U;
++                break;
++            case '+':
++                flags |= FLAGS_PLUS;
++                format++;
++                n = 1U;
++                break;
++            case ' ':
++                flags |= FLAGS_SPACE;
++                format++;
++                n = 1U;
++                break;
++            case '#':
++                flags |= FLAGS_HASH;
++                format++;
++                n = 1U;
++                break;
++            default:
++                n = 0U;
++                break;
++            }
++        } while (n);
++
++        // evaluate width field
++        width = 0U;
++        if (_is_digit(*format)) {
++            width = _atoi(&format);
++        } else if (*format == '*') {
++            const int w = va_arg(va, int);
++            if (w < 0) {
++                flags |= FLAGS_LEFT; // reverse padding
++                width = (unsigned int)-w;
++            } else {
++                width = (unsigned int)w;
++            }
++            format++;
++        }
++
++        // evaluate precision field
++        precision = 0U;
++        if (*format == '.') {
++            flags |= FLAGS_PRECISION;
++            format++;
++            if (_is_digit(*format)) {
++                precision = _atoi(&format);
++            } else if (*format == '*') {
++                const int prec = (int)va_arg(va, int);
++                precision = prec > 0 ? (unsigned int)prec : 0U;
++                format++;
++            }
++        }
++
++        // evaluate length field
++        switch (*format) {
++        case 'l':
++            flags |= FLAGS_LONG;
++            format++;
++            if (*format == 'l') {
++                flags |= FLAGS_LONG_LONG;
++                format++;
++            }
++            break;
++        case 'h':
++            flags |= FLAGS_SHORT;
++            format++;
++            if (*format == 'h') {
++                flags |= FLAGS_CHAR;
++                format++;
++            }
++            break;
++#if defined(PRINTF_SUPPORT_PTRDIFF_T)
++        case 't':
++            flags |= (sizeof(ptrdiff_t) == sizeof(long) ? FLAGS_LONG
++                                                        : FLAGS_LONG_LONG);
++            format++;
++            break;
++#endif
++        case 'j':
++            flags |= (sizeof(intmax_t) == sizeof(long) ? FLAGS_LONG
++                                                       : FLAGS_LONG_LONG);
++            format++;
++            break;
++        case 'z':
++            flags |=
++                (sizeof(size_t) == sizeof(long) ? FLAGS_LONG : FLAGS_LONG_LONG);
++            format++;
++            break;
++        default:
++            break;
++        }
++
++        // evaluate specifier
++        switch (*format) {
++        case 'd':
++        case 'i':
++        case 'u':
++        case 'x':
++        case 'X':
++        case 'o':
++        case 'b': {
++            // set the base
++            unsigned int base;
++            if (*format == 'x' || *format == 'X') {
++                base = 16U;
++            } else if (*format == 'o') {
++                base = 8U;
++            } else if (*format == 'b') {
++                base = 2U;
++            } else {
++                base = 10U;
++                flags &= ~FLAGS_HASH; // no hash for dec format
++            }
++            // uppercase
++            if (*format == 'X') {
++                flags |= FLAGS_UPPERCASE;
++            }
++
++            // no plus or space flag for u, x, X, o, b
++            if ((*format != 'i') && (*format != 'd')) {
++                flags &= ~(FLAGS_PLUS | FLAGS_SPACE);
++            }
++
++            // ignore '0' flag when precision is given
++            if (flags & FLAGS_PRECISION) {
++                flags &= ~FLAGS_ZEROPAD;
++            }
++
++            // convert the integer
++            if ((*format == 'i') || (*format == 'd')) {
++                // signed
++                if (flags & FLAGS_LONG_LONG) {
++#if defined(PRINTF_SUPPORT_LONG_LONG)
++                    const long long value = va_arg(va, long long);
++                    idx = _ntoa_long_long(
++                        out, buffer, idx, bufsize,
++                        (unsigned long long)(value > 0 ? value : 0 - value),
++                        value < 0, base, precision, width, flags);
++#endif
++                } else if (flags & FLAGS_LONG) {
++                    const long value = va_arg(va, long);
++                    idx = _ntoa_long(
++                        out, buffer, idx, bufsize,
++                        (unsigned long)(value > 0 ? value : 0 - value),
++                        value < 0, base, precision, width, flags);
++                } else {
++                    const int value =
++                        (flags & FLAGS_CHAR)    ? (char)va_arg(va, int)
++                        : (flags & FLAGS_SHORT) ? (short int)va_arg(va, int)
++                                                : va_arg(va, int);
++                    idx = _ntoa_long(
++                        out, buffer, idx, bufsize,
++                        (unsigned int)(value > 0 ? value : 0 - value),
++                        value < 0, base, precision, width, flags);
++                }
++            } else {
++                // unsigned
++                if (flags & FLAGS_LONG_LONG) {
++#if defined(PRINTF_SUPPORT_LONG_LONG)
++                    idx = _ntoa_long_long(out, buffer, idx, bufsize,
++                                          va_arg(va, unsigned long long), false,
++                                          base, precision, width, flags);
++#endif
++                } else if (flags & FLAGS_LONG) {
++                    idx = _ntoa_long(out, buffer, idx, bufsize,
++                                     va_arg(va, unsigned long), false, base,
++                                     precision, width, flags);
++                } else {
++                    const unsigned int value =
++                        (flags & FLAGS_CHAR)
++                            ? (unsigned char)va_arg(va, unsigned int)
++                        : (flags & FLAGS_SHORT)
++                            ? (unsigned short int)va_arg(va, unsigned int)
++                            : va_arg(va, unsigned int);
++                    idx = _ntoa_long(out, buffer, idx, bufsize, value, false,
++                                     base, precision, width, flags);
++                }
++            }
++            format++;
++            break;
++        }
++#if defined(PRINTF_SUPPORT_FLOAT)
++        case 'f':
++        case 'F':
++            if (*format == 'F')
++                flags |= FLAGS_UPPERCASE;
++            idx = _ftoa(out, buffer, idx, bufsize, va_arg(va, double), precision,
++                        width, flags);
++            format++;
++            break;
++#if defined(PRINTF_SUPPORT_EXPONENTIAL)
++        case 'e':
++        case 'E':
++        case 'g':
++        case 'G':
++            if ((*format == 'g') || (*format == 'G'))
++                flags |= FLAGS_ADAPT_EXP;
++            if ((*format == 'E') || (*format == 'G'))
++                flags |= FLAGS_UPPERCASE;
++            idx = _etoa(out, buffer, idx, bufsize, va_arg(va, double), precision,
++                        width, flags);
++            format++;
++            break;
++#endif // PRINTF_SUPPORT_EXPONENTIAL
++#endif // PRINTF_SUPPORT_FLOAT
++        case 'c': {
++            unsigned int l = 1U;
++            // pre padding
++            if (!(flags & FLAGS_LEFT)) {
++                while (l++ < width) {
++                    out(' ', buffer, idx++, bufsize);
++                }
++            }
++            // char output
++            out((char)va_arg(va, int), buffer, idx++, bufsize);
++            // post padding
++            if (flags & FLAGS_LEFT) {
++                while (l++ < width) {
++                    out(' ', buffer, idx++, bufsize);
++                }
++            }
++            format++;
++            break;
++        }
++
++        case 's': {
++            const char *p = va_arg(va, char *);
++            unsigned int l = _strnlen_s(p, precision ? precision : (size_t)-1);
++            // pre padding
++            if (flags & FLAGS_PRECISION) {
++                l = (l < precision ? l : precision);
++            }
++            if (!(flags & FLAGS_LEFT)) {
++                while (l++ < width) {
++                    out(' ', buffer, idx++, bufsize);
++                }
++            }
++            // string output
++            while ((*p != 0) && (!(flags & FLAGS_PRECISION) || precision--)) {
++                out(*(p++), buffer, idx++, bufsize);
++            }
++            // post padding
++            if (flags & FLAGS_LEFT) {
++                while (l++ < width) {
++                    out(' ', buffer, idx++, bufsize);
++                }
++            }
++            format++;
++            break;
++        }
++
++        case 'p': {
++            width = sizeof(void *) * 2U;
++            flags |= FLAGS_ZEROPAD | FLAGS_UPPERCASE;
++#if defined(PRINTF_SUPPORT_LONG_LONG)
++            if (sizeof(uintptr_t) == sizeof(long long)) {
++                idx = _ntoa_long_long(out, buffer, idx, bufsize,
++                                      (uintptr_t)va_arg(va, void *), false, 16U,
++                                      precision, width, flags);
++            } else {
++#endif
++                idx = _ntoa_long(out, buffer, idx, bufsize,
++                                 (unsigned long)((uintptr_t)va_arg(va, void *)),
++                                 false, 16U, precision, width, flags);
++#if defined(PRINTF_SUPPORT_LONG_LONG)
++            }
++#endif
++            format++;
++            break;
++        }
++
++        case '%':
++            out('%', buffer, idx++, bufsize);
++            format++;
++            break;
++
++        default:
++            out(*format, buffer, idx++, bufsize);
++            format++;
++            break;
++        }
++    }
++
++    // termination
++    out((char)0, buffer, idx < bufsize ? idx : bufsize - 1U, bufsize);
++
++    // return written chars without terminating \0
++    return (int)idx;
++}
+ 
+ /**
+  * @def vsnprintf_s(dest,dmax,fmt,ap)
+@@ -98,14 +991,13 @@ EXPORT int _vsnprintf_s_chk(char *restrict dest, rsize_t dmax,
+                             va_list ap)
+ #endif
+ {
+-
+     int ret = -1;
+     const char *p;
+ 
+     if (unlikely(dest == NULL || fmt == NULL)) {
+         invoke_safe_str_constraint_handler("vsnprintf_s: dest/fmt is null",
+-                                           NULL, ESNULLP);
+-        return -(ESNULLP);
++                                           dest, ESNULLP);
++        return -ESNULLP;
+     }
+     if (unlikely(dmax == 0)) {
+         invoke_safe_str_constraint_handler("vsnprintf_s: dmax is zero", dest,
+@@ -125,7 +1017,7 @@ EXPORT int _vsnprintf_s_chk(char *restrict dest, rsize_t dmax,
+                                              dest, destbos));
+         }
+     }
+-
++#if 1 // TODO
+     if (unlikely((p = strnstr(fmt, "%n", RSIZE_MAX_STR)))) {
+         /* at the beginning or if inside, not %%n */
+         if ((p - fmt == 0) || *(p - 1) != '%') {
+@@ -134,9 +1026,10 @@ EXPORT int _vsnprintf_s_chk(char *restrict dest, rsize_t dmax,
+             return -(EINVAL);
+         }
+     }
++#endif
+ 
+     errno = 0;
+-    ret = vsnprintf(dest, (size_t)dmax, fmt, ap);
++    ret = _vsnprintf_s(_out_buffer, dest, dmax, fmt, ap);
+ 
+     if (unlikely(ret < 0)) {
+         char errstr[128] = "vsnprintf_s: ";
+@@ -155,8 +1048,5 @@ EXPORT int _vsnprintf_s_chk(char *restrict dest, rsize_t dmax,
+ #else
+     dest[dmax - 1] = '\0';
+ #endif
+-
+     return ret;
+ }
+-
+-#endif /* MINGW64 */
diff --git a/meta-oe/recipes-core/safec/safec/0039-vsnprintf_s-catch-s-ESNULLP-and-ESNOSPC.patch b/meta-oe/recipes-core/safec/safec/0039-vsnprintf_s-catch-s-ESNULLP-and-ESNOSPC.patch
new file mode 100644
index 000000000..6bf11a21c
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0039-vsnprintf_s-catch-s-ESNULLP-and-ESNOSPC.patch
@@ -0,0 +1,406 @@ 
+From a928f894b0957b852d2f11ba994940e52bb73150 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sun, 31 Oct 2021 16:09:51 +0100
+Subject: [PATCH] vsnprintf_s: catch %s ESNULLP and ESNOSPC
+
+---
+ src/safeclib_private.h |  3 +-
+ src/str/snprintf_s.c   | 12 +-----
+ src/str/sprintf_s.c    | 19 +++++----
+ src/str/vsnprintf_s.c  | 60 +++++++++++++++++++---------
+ src/str/vsprintf_s.c   | 88 +++++++-----------------------------------
+ tests/test_sprintf_s.c | 12 +++---
+ 6 files changed, 73 insertions(+), 121 deletions(-)
+
+diff --git a/src/safeclib_private.h b/src/safeclib_private.h
+index b110aec6..75369fa4 100644
+--- a/src/safeclib_private.h
++++ b/src/safeclib_private.h
+@@ -679,8 +679,7 @@ static inline void _out_fct(char character, void *buffer, size_t idx,
+     (void)maxlen;
+     if (character) {
+         // buffer is the output fct pointer
+-        ((out_fct_wrap_type *)buffer)
+-            ->fct(character, ((out_fct_wrap_type *)buffer)->arg);
++        ((out_fct_wrap_type *)buffer)->fct(character, ((out_fct_wrap_type *)buffer)->arg);
+     }
+ }
+ int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+diff --git a/src/str/snprintf_s.c b/src/str/snprintf_s.c
+index 8c8ee32f..e71a4e9e 100644
+--- a/src/str/snprintf_s.c
++++ b/src/str/snprintf_s.c
+@@ -35,12 +35,6 @@
+ #include "safeclib_private.h"
+ #endif
+ 
+-#ifdef SAFECLIB_ENABLE_UNSAFE
+-
+-/* TODO:
+-any of the arguments corresponding to %s is a null pointer
+-*/
+-
+ /**
+  * @def snprintf_s(dest, dmax, fmt, ...)
+  * @brief
+@@ -69,8 +63,7 @@ any of the arguments corresponding to %s is a null pointer
+  * @pre \c dmax shall not be zero.
+  * @pre \c dmax shall not be greater than \c RSIZE_MAX_STR and size of dest.
+  * @pre \c fmt  shall not contain the conversion specifier \c %n.
+- * @pre None of the arguments corresponding to \c %s is a null pointer. (not
+- * yet)
++ * @pre None of the arguments corresponding to \c %s is a null pointer.
+  * @pre No encoding error shall occur.
+  *
+  * @return  If the buffer \c dest is too small for the formatted text,
+@@ -81,6 +74,7 @@ any of the arguments corresponding to %s is a null pointer
+  *          constraints violation or an encoding error occurred.
+  *
+  * @retval  -ESNULLP    when \c dest/fmt is NULL pointer
++ * @retval  -ESNULLP    when a \c %s argument is NULL
+  * @retval  -ESZEROL    when \c dmax == 0
+  * @retval  -ESLEMAX    when \c dmax > \c RSIZE_MAX_STR
+  * @retval  -EOVERFLOW  when \c dmax > size of dest
+@@ -110,5 +104,3 @@ EXPORT int snprintf_s(char *restrict dest, rsize_t dmax,
+     va_end(va);
+     return ret;
+ }
+-
+-#endif /* SAFECLIB_ENABLE_UNSAFE */
+diff --git a/src/str/sprintf_s.c b/src/str/sprintf_s.c
+index 5478911a..75165d5a 100644
+--- a/src/str/sprintf_s.c
++++ b/src/str/sprintf_s.c
+@@ -70,16 +70,15 @@
+  *          including the terminating null, then the buffer is cleared, and the
+  *          invalid parameter handler is invoked.
+  *
+- * @retval -ESNULLP when \c fmt is NULL pointer
+- *         -ESNULLP when \c dest is NULL and dmax > 0
+- *         -ESZEROL when \c dmax = 0 and dest is not NULL
+- *         -ESLEMAX when \c dmax > \c RSIZE_MAX_STR or dmax > size of dest
+- *         -EOVERFLOW when \c dmax > size of dest
+- *         -ESNOSPC when return value exceeds dmax unless dmax is zero and dest
+- * is NULL -EINVAL  when \c fmt contains \c %n
+- *
+- * @retval -1  if an encoding error or a runtime constraint violation in the
+- *             libc function \c vsnprintf occured.
++ * @retval -ESNULLP    when \c fmt is NULL pointer
++ * @retval -ESNULLP    when \c dest is NULL and dmax > 0
++ * @retval -ESNULLP    when a \c %s argument is NULL
++ * @retval -ESZEROL    when \c dmax = 0 and dest is not NULL
++ * @retval -ESLEMAX    when \c dmax > \c RSIZE_MAX_STR or dmax > size of dest
++ * @retval -EOVERFLOW  when \c dmax > size of dest
++ * @retval -ESNOSPC    when return value exceeds dmax unless dmax is zero and dest
++ *                     is NULL
++ * @retval -EINVAL     when \c fmt contains \c %n
+  *
+  * @note The C11 standard was most likely wrong with changing the return value to
+  * 0 on errors. All other functions and existing C11 implementations do return
+diff --git a/src/str/vsnprintf_s.c b/src/str/vsnprintf_s.c
+index 6a438943..6fd7ff7e 100644
+--- a/src/str/vsnprintf_s.c
++++ b/src/str/vsnprintf_s.c
+@@ -82,7 +82,7 @@
+ #include "safeclib_private.h"
+ #endif
+ 
+-// define this globally (e.g. gcc -DPRINTF_INCLUDE_CONFIG_H ...) to include the
++// optionally define this globally (e.g. gcc -DPRINTF_INCLUDE_CONFIG_H ...) to include the
+ // printf_config.h header file
+ // default: undefined
+ #ifdef PRINTF_INCLUDE_CONFIG_H
+@@ -869,7 +869,17 @@ int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+ 
+         case 's': {
+             const char *p = va_arg(va, char *);
++            if (!p) {
++                invoke_safe_str_constraint_handler("vsnprintf_s: %s arg is null",
++                                                   NULL, ESNULLP);
++                return -(ESNULLP);
++            }
+             unsigned int l = _strnlen_s(p, precision ? precision : (size_t)-1);
++            if (l + idx > bufsize) {
++                invoke_safe_str_constraint_handler("vsnprintf_s: %s arg exceeds dmax",
++                                                   NULL, ESNULLP);
++                return -(ESNOSPC);
++            }
+             // pre padding
+             if (flags & FLAGS_PRECISION) {
+                 l = (l < precision ? l : precision);
+@@ -894,17 +904,18 @@ int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+         }
+ 
+         case 'p': {
++            uintptr_t arg = (uintptr_t)va_arg(va, void *);
+             width = sizeof(void *) * 2U;
+             flags |= FLAGS_ZEROPAD | FLAGS_UPPERCASE;
+ #if defined(PRINTF_SUPPORT_LONG_LONG)
+             if (sizeof(uintptr_t) == sizeof(long long)) {
+                 idx = _ntoa_long_long(out, buffer, idx, bufsize,
+-                                      (uintptr_t)va_arg(va, void *), false, 16U,
++                                      arg, false, 16U,
+                                       precision, width, flags);
+             } else {
+ #endif
+                 idx = _ntoa_long(out, buffer, idx, bufsize,
+-                                 (unsigned long)((uintptr_t)va_arg(va, void *)),
++                                 (unsigned long)arg,
+                                  false, 16U, precision, width, flags);
+ #if defined(PRINTF_SUPPORT_LONG_LONG)
+             }
+@@ -918,6 +929,11 @@ int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+             format++;
+             break;
+ 
++        case 'n':
++            invoke_safe_str_constraint_handler("vsprintf_s: illegal %n", NULL,
++                                               EINVAL);
++            return -1;
++
+         default:
+             out(*format, buffer, idx++, bufsize);
+             format++;
+@@ -961,8 +977,7 @@ int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+  * @pre \c dmax shall not be greater than \c RSIZE_MAX_STR and the size of
+  * dest.
+  * @pre \c fmt  shall not contain the conversion specifier \c %n.
+- * @pre None of the arguments corresponding to \c %s is a null pointer. (not
+- * yet)
++ * @pre None of the arguments corresponding to \c %s is a null pointer.
+  * @pre No encoding error shall occur.
+  *
+  * @note C11 uses RSIZE_MAX, not RSIZE_MAX_STR.
+@@ -974,6 +989,7 @@ int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+  *          and null terminated.
+  *
+  * @retval  -ESNULLP    when \c dest/fmt is NULL pointer
++ * @retval  -ESNULLP    when a \c %s argument is NULL
+  * @retval  -ESZEROL    when \c dmax == 0
+  * @retval  -ESLEMAX    when \c dmax > \c RSIZE_MAX_STR
+  * @retval  -EOVERFLOW  when \c dmax > size of dest
+@@ -991,8 +1007,8 @@ EXPORT int _vsnprintf_s_chk(char *restrict dest, rsize_t dmax,
+                             va_list ap)
+ #endif
+ {
+-    int ret = -1;
+     const char *p;
++    int ret;
+ 
+     if (unlikely(dest == NULL || fmt == NULL)) {
+         invoke_safe_str_constraint_handler("vsnprintf_s: dest/fmt is null",
+@@ -1017,7 +1033,7 @@ EXPORT int _vsnprintf_s_chk(char *restrict dest, rsize_t dmax,
+                                              dest, destbos));
+         }
+     }
+-#if 1 // TODO
++    // catch %n early, before it outputs anything
+     if (unlikely((p = strnstr(fmt, "%n", RSIZE_MAX_STR)))) {
+         /* at the beginning or if inside, not %%n */
+         if ((p - fmt == 0) || *(p - 1) != '%') {
+@@ -1026,27 +1042,35 @@ EXPORT int _vsnprintf_s_chk(char *restrict dest, rsize_t dmax,
+             return -(EINVAL);
+         }
+     }
+-#endif
+ 
+     errno = 0;
+     ret = _vsnprintf_s(_out_buffer, dest, dmax, fmt, ap);
+ 
+-    if (unlikely(ret < 0)) {
+-        char errstr[128] = "vsnprintf_s: ";
+-        strcat(errstr, strerror(errno));
+-        handle_error(dest, dmax, errstr, -ret);
+-        return ret;
+-    }
++    //if (unlikely(ret < 0)) {
++    //    char errstr[128] = "vsnprintf_s: ";
++    //    strcat(errstr, strerror(errno));
++    //    handle_error(dest, dmax, errstr, -ret);
++    //    return ret;
++    //}
++
+     /* manual truncation */
++    if (ret >= 0) {
+ #ifdef SAFECLIB_STR_NULL_SLACK
+     /* oops, ret would have been written if dmax was ignored */
+-    if ((rsize_t)ret > dmax) {
++        if ((rsize_t)ret > dmax) {
++            dest[dmax - 1] = '\0';
++        } else {
++            memset(&dest[ret], 0, dmax - ret);
++        }
++#else
+         dest[dmax - 1] = '\0';
++#endif
+     } else {
+-        memset(&dest[ret], 0, dmax - ret);
+-    }
++#ifdef SAFECLIB_STR_NULL_SLACK
++        memset(dest, 0, dmax);
+ #else
+-    dest[dmax - 1] = '\0';
++        *dest = '\0';
+ #endif
++    }
+     return ret;
+ }
+diff --git a/src/str/vsprintf_s.c b/src/str/vsprintf_s.c
+index da0f1de5..8d8b3fb2 100644
+--- a/src/str/vsprintf_s.c
++++ b/src/str/vsprintf_s.c
+@@ -1,10 +1,11 @@
+ /*------------------------------------------------------------------
+- * vsprintf_s_s.c
++ * vsprintf_s.c
+  *
+  * August 2017, Reini Urban
+  * February 2018, Reini Urban
++ * November 2021, Reini Urban
+  *
+- * Copyright (c) 2017,2018 by Reini Urban
++ * Copyright (c) 2017,2018,2021 by Reini Urban
+  * All rights reserved.
+  *
+  * Permission is hereby granted, free of charge, to any person
+@@ -75,16 +76,15 @@
+  *          including the terminating null, then the buffer is cleared, and the
+  *          invalid parameter handler is invoked.
+  *
+- * @retval -ESNULLP when \c fmt is NULL pointer
+- *         -ESNULLP when \c dest is NULL and dmax > 0
+- *         -ESZEROL when \c dmax = 0 and dest is not NULL
+- *         -ESLEMAX when \c dmax > \c RSIZE_MAX_STR
+- *         -EOVERFLOW when \c dmax > size of dest
+- *         -ESNOSPC when return value exceeds dmax unless dmax is zero and dest
+- * is NULL -EINVAL  when \c fmt contains \c %n
+- *
+- * @retval -1  if an encoding error or a runtime constraint violation in the
+- *             libc function \c vsnprintf occured.
++ * @retval -ESNULLP    when \c fmt is NULL pointer
++ * @retval -ESNULLP    when \c dest is NULL and dmax > 0
++ * @retval -ESNULLP    when a \c %s argument is NULL
++ * @retval -ESZEROL    when \c dmax = 0 and dest is not NULL
++ * @retval -ESLEMAX    when \c dmax > \c RSIZE_MAX_STR
++ * @retval -EOVERFLOW  when \c dmax > size of dest
++ * @retval -ESNOSPC    when return value exceeds dmax unless dmax is zero and dest
++ *                     is NULL
++ * @retval -EINVAL     when \c fmt contains \c %n
+  *
+  * @note The C11 standard was most likely wrong with changing the return value
+  * 0 on errors. All other functions and existing C11 implementations do return
+@@ -105,62 +105,8 @@ EXPORT int _vsprintf_s_chk(char *restrict dest, const rsize_t dmax,
+                            va_list ap)
+ #endif
+ {
+-
+-    int ret = -1;
+-    const char *p;
+-
+-    if (unlikely(dmax && dest == NULL)) {
+-        invoke_safe_str_constraint_handler("vsprintf_s: dest is null", NULL,
+-                                           ESNULLP);
+-        return -ESNULLP;
+-    }
+-
+-    if (unlikely(fmt == NULL)) {
+-        invoke_safe_str_constraint_handler("vsprintf_s: fmt is null", NULL,
+-                                           ESNULLP);
+-        return -ESNULLP;
+-    }
+-
+-    if (unlikely(dest && dmax == 0)) {
+-        invoke_safe_str_constraint_handler("vsprintf_s: dmax is 0", dest,
+-                                           ESZEROL);
+-        return -ESZEROL;
+-    }
+-
+-    if (unlikely(dmax > RSIZE_MAX_STR)) {
+-        invoke_safe_str_constraint_handler("vsprintf_s: dmax exceeds max", dest,
+-                                           ESLEMAX);
+-        return -ESLEMAX;
+-    }
+-    if (destbos == BOS_UNKNOWN) {
+-        if (dmax) {
+-            BND_CHK_PTR_BOUNDS(dest, dmax);
+-        }
+-    } else {
+-        if (unlikely(dmax > destbos)) {
+-            return -(handle_str_bos_overload("vsprintf_s: dmax exceeds dest",
+-                                             dest, destbos));
+-        }
+-    }
+-
+-    if (unlikely((p = strnstr(fmt, "%n", RSIZE_MAX_STR)))) {
+-        /* at the beginning or if inside, not %%n */
+-        if ((p - fmt == 0) || *(p - 1) != '%') {
+-            invoke_safe_str_constraint_handler("vsprintf_s: illegal %n", NULL,
+-                                               EINVAL);
+-            return -1; /* EINVAL */
+-        }
+-    }
+-
+-#if defined(_WIN32) && defined(HAVE_VSNPRINTF_S)
+-    /* to detect illegal format specifiers */
+-    ret = vsnprintf_s(dest, (size_t)dmax, (size_t)dmax, fmt, ap);
+-    /*#elif defined(HAVE___VSNPRINTF_CHK) */
+-    /* glibc allows %n from readonly strings, freebsd/darwin ignores flag. */
+-    /*ret = __vsnprintf_chk(dest, (size_t)dmax, 2, (size_t)dmax, fmt, ap);*/
+-#else
+-    ret = vsnprintf(dest, (size_t)dmax, fmt, ap);
+-#endif
++    int ret;
++    ret = _vsnprintf_s_chk(dest, dmax, destbos, fmt, ap);
+ 
+     if (unlikely(dmax && ret >= (int)dmax)
+ #ifdef HAVE_MINGW32
+@@ -175,12 +121,6 @@ EXPORT int _vsprintf_s_chk(char *restrict dest, const rsize_t dmax,
+                             but like all other implementations */
+     }
+ 
+-    if (unlikely(ret < 0)) {
+-        char errstr[128] = "vsprintf_s: ";
+-        strcat(errstr, strerror(errno));
+-        handle_error(dest, dmax, errstr, -ret);
+-    }
+-
+     return ret;
+ }
+ 
+diff --git a/tests/test_sprintf_s.c b/tests/test_sprintf_s.c
+index 3766b69d..aedc3964 100644
+--- a/tests/test_sprintf_s.c
++++ b/tests/test_sprintf_s.c
+@@ -64,7 +64,7 @@ int test_sprintf_s(void) {
+     rc = sprintf_s(str1, LEN, NULL);
+     ERR_MSVC(-ESNULLP, -1);
+     ERRNO_MSVC(0, EINVAL);
+-#endif
++ #endif
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -76,7 +76,7 @@ int test_sprintf_s(void) {
+     /*--------------------------------------------------*/
+ 
+     rc = sprintf_s(str1, LEN, "%s %n", str2, &ind);
+-    ERR(-1); /* EINVAL */
++    ERR(-EINVAL);
+     errno = 0;
+ 
+     rc = sprintf_s(str1, LEN, "%s %%n", str2);
+@@ -87,11 +87,9 @@ int test_sprintf_s(void) {
+ 
+     /*--------------------------------------------------*/
+ 
+-    /* TODO not yet implemented
+-    rc = sprintf_s(str1, LEN, "%p", NULL);
+-    ERR(-1);
+-    ERRNO_MSVC(ESNULLP, EINVAL);
+-    */
++    rc = sprintf_s(str1, LEN, "%s", NULL);
++    ERR(-ESNULLP);
++    ERRNO_MSVC(0, EINVAL); // ??
+ 
+     /*--------------------------------------------------*/
+ 
diff --git a/meta-oe/recipes-core/safec/safec/0040-new-safe-f-printf_s-also.patch b/meta-oe/recipes-core/safec/safec/0040-new-safe-f-printf_s-also.patch
new file mode 100644
index 000000000..c672c2783
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0040-new-safe-f-printf_s-also.patch
@@ -0,0 +1,270 @@ 
+From a40bf4ac3643562eb32d9e69dd1284be7868988f Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sun, 31 Oct 2021 16:40:00 +0100
+Subject: [PATCH] new safe (f)printf_s also
+
+---
+ src/io/fprintf_s.c     | 20 ++++++++------------
+ src/io/printf_s.c      | 24 ++++++++++++++++++++----
+ src/safeclib_private.h | 12 ++++++++++--
+ src/str/vsnprintf_s.c  | 21 +++------------------
+ tests/test_fprintf_s.c | 14 +++++++++-----
+ tests/test_sprintf_s.c |  7 +++++++
+ 6 files changed, 57 insertions(+), 41 deletions(-)
+
+diff --git a/src/io/fprintf_s.c b/src/io/fprintf_s.c
+index cfdbdce6..436c7961 100644
+--- a/src/io/fprintf_s.c
++++ b/src/io/fprintf_s.c
+@@ -35,9 +35,6 @@
+ #include "safeclib_private.h"
+ #endif
+ 
+-#if defined(TEST_MSVCRT) && defined(HAVE_FPRINTF_S)
+-#else
+-
+ /**
+  * @brief
+  *    The fprintf_s function composes a string via the format string
+@@ -59,14 +56,14 @@
+  *
+  * @pre Neither stream nor fmt shall be a null pointer.
+  * @pre fmt  shall not contain the conversion specifier %n.
+- * @pre None of the arguments corresponding to %s is a null pointer. (not yet)
++ * @pre None of the arguments corresponding to %s is a null pointer.
+  * @pre No encoding error shall occur.
+  *
+  * @return  On success the total number of characters written is returned.
+  * @return  On failure a negative number is returned.
+- * @retval  -ESNULLP when stream/fmt is NULL pointer
++ * @retval  -ESNULLP when stream or fmt is NULL pointer
+  * @retval  -EINVAL  when fmt contains %n
+- * @retval  -1       on some other error. errno is set then.
++ * @retval  -1       on some other error. errno may be set then.
+  *
+  */
+ 
+@@ -74,19 +71,20 @@ EXPORT int fprintf_s(FILE *restrict stream, const char *restrict fmt, ...) {
+     va_list ap;
+     int ret;
+     const char *p;
++    out_fct_wrap_type wrap = {
++        .arg  = stream
++    };
+ 
+     if (unlikely(stream == NULL)) {
+         invoke_safe_str_constraint_handler("fprintf_s: stream is null", NULL,
+                                            ESNULLP);
+         return -(ESNULLP);
+     }
+-
+     if (unlikely(fmt == NULL)) {
+         invoke_safe_str_constraint_handler("fprintf_s: fmt is null", NULL,
+                                            ESNULLP);
+         return -(ESNULLP);
+     }
+-
+     if (unlikely((p = strnstr(fmt, "%n", RSIZE_MAX_STR)))) {
+         /* at the beginning or if inside, not %%n */
+         if ((p - fmt == 0) || *(p - 1) != '%') {
+@@ -98,10 +96,10 @@ EXPORT int fprintf_s(FILE *restrict stream, const char *restrict fmt, ...) {
+ 
+     errno = 0;
+     va_start(ap, fmt);
+-    ret = vfprintf(stream, fmt, ap);
++    ret = _vsnprintf_s(_out_fchar, (char*)&wrap, (rsize_t)-1, fmt, ap);
+     va_end(ap);
+ 
+-    if (unlikely(ret < 0)) {
++    if (unlikely(ret < 0 && errno != 0)) {
+         char errstr[128] = "fprintf_s: ";
+         strcat(errstr, strerror(errno));
+         invoke_safe_str_constraint_handler(errstr, NULL, -ret);
+@@ -109,5 +107,3 @@ EXPORT int fprintf_s(FILE *restrict stream, const char *restrict fmt, ...) {
+ 
+     return ret;
+ }
+-
+-#endif /* TEST_MSVCRT */
+diff --git a/src/io/printf_s.c b/src/io/printf_s.c
+index 2b36a28c..84521ea6 100644
+--- a/src/io/printf_s.c
++++ b/src/io/printf_s.c
+@@ -39,7 +39,7 @@
+ /**
+  * @brief
+  *    The printf_s function composes a string via the format string
+- *    and writes it to a FILE buffer.
++ *    and writes it to the STDOUT file.
+  *
+  * @note
+  *    POSIX specifies that \c errno is set on error. However, the safeclib
+@@ -56,26 +56,42 @@
+  *
+  * @pre fmt shall not be a null pointer.
+  * @pre fmt shall not contain the conversion specifier %n.
+- * @pre None of the arguments corresponding to %s is a null pointer. (not yet)
++ * @pre None of the arguments corresponding to %s is a null pointer.
+  * @pre No encoding error shall occur.
+  *
+  * @return  On success the total number of characters written is returned.
+  * @return  On failure a negative number is returned.
+  * @retval  -ESNULLP when fmt is NULL pointer
+  * @retval  -EINVAL  when fmt contains %n
+- * @retval  -1       on some other error. errno is set then.
++ * @retval  -1       on some other error. errno might be set then.
+  */
+ 
+ EXPORT int printf_s(const char *restrict fmt, ...) {
+     va_list va;
+     int ret;
++    const char *p;
+     char buffer[1];
+ 
++    if (unlikely(fmt == NULL)) {
++        invoke_safe_str_constraint_handler("vsnprintf_s: fmt is null",
++                                           NULL, ESNULLP);
++        return -ESNULLP;
++    }
++    // catch %n early, before it outputs anything
++    if (unlikely((p = strnstr(fmt, "%n", RSIZE_MAX_STR)))) {
++        /* at the beginning or if inside, not %%n */
++        if ((p - fmt == 0) || *(p - 1) != '%') {
++            invoke_safe_str_constraint_handler("vsnprintf_s: illegal %n", NULL,
++                                               EINVAL);
++            return -(EINVAL);
++        }
++    }
++    
+     va_start(va, fmt);
+     ret = _vsnprintf_s(_out_char, buffer, (rsize_t)-1, fmt, va);
+     va_end(va);
+ 
+-    if (unlikely(ret < 0)) {
++    if (unlikely(ret < 0 && errno != 0)) {
+         char errstr[128] = "printf_s: ";
+         strcat(errstr, strerror(errno));
+         invoke_safe_str_constraint_handler(errstr, NULL, -ret);
+diff --git a/src/safeclib_private.h b/src/safeclib_private.h
+index 75369fa4..e7d43215 100644
+--- a/src/safeclib_private.h
++++ b/src/safeclib_private.h
+@@ -672,14 +672,22 @@ static inline void _out_char(char character, void *buffer, size_t idx,
+     }
+ }
+ 
++// special-case of _out_fct for fprintf_s
++static inline void _out_fchar(char character, void *wrap, size_t idx,
++                             size_t maxlen) {
++    (void)idx;
++    (void)maxlen;
++    fprintf(((out_fct_wrap_type *)wrap)->arg, "%c", character);
++}
++
+ // internal output function wrapper
+-static inline void _out_fct(char character, void *buffer, size_t idx,
++static inline void _out_fct(char character, void *wrap, size_t idx,
+                             size_t maxlen) {
+     (void)idx;
+     (void)maxlen;
+     if (character) {
+         // buffer is the output fct pointer
+-        ((out_fct_wrap_type *)buffer)->fct(character, ((out_fct_wrap_type *)buffer)->arg);
++        ((out_fct_wrap_type *)wrap)->fct(character, ((out_fct_wrap_type *)wrap)->arg);
+     }
+ }
+ int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+diff --git a/src/str/vsnprintf_s.c b/src/str/vsnprintf_s.c
+index 6fd7ff7e..8d1ce3ad 100644
+--- a/src/str/vsnprintf_s.c
++++ b/src/str/vsnprintf_s.c
+@@ -596,29 +596,14 @@ static size_t _etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
+ #endif // PRINTF_SUPPORT_EXPONENTIAL
+ #endif // PRINTF_SUPPORT_FLOAT
+ 
+-// internal vsnprintf, extended for _s
++// internal vsnprintf, extended for _s.
++// already checked in the caller
+ int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+-                 const char *format, va_list va)
++                        const char *format, va_list va)
+ {
+     unsigned int flags, width, precision, n;
+     size_t idx = 0U;
+ 
+-    if (unlikely(buffer == NULL || format == NULL)) { /* for !bufsize size-calc use sprintf_s */
+-        invoke_safe_str_constraint_handler("vsnprintf_s: dest/fmt is null", NULL,
+-                                           ESNULLP);
+-        return -ESNULLP;
+-    }
+-    if (unlikely(bufsize == 0)) {
+-        invoke_safe_str_constraint_handler("vsnprintf_s: dmax is zero", buffer,
+-                                           ESZEROL);
+-        return -ESZEROL;
+-    }
+-    if (unlikely(bufsize > RSIZE_MAX_STR)) {
+-        invoke_safe_str_constraint_handler("vsnprintf_s: dmax exceeds max", buffer,
+-                                           ESLEMAX);
+-        return -ESLEMAX;
+-    }
+-
+     while (*format) {
+         // format specifier?  %[flags][width][.precision][length]
+         if (*format != '%') {
+diff --git a/tests/test_fprintf_s.c b/tests/test_fprintf_s.c
+index 454a7496..2706f33c 100644
+--- a/tests/test_fprintf_s.c
++++ b/tests/test_fprintf_s.c
+@@ -70,17 +70,21 @@ int test_fprintf_s(void) {
+ 
+     /*--------------------------------------------------*/
+ 
+-    /* TODO
+-    rc = fprintf_s(out, "%p", NULL);
++    rc = fprintf_s(out, "%s", NULL);
+     NEGERR(ESNULLP)
+-    */
+ 
+     /*--------------------------------------------------*/
+ 
+     strcpy(str, "keep it simple");
+ 
+     rc = fprintf_s(out, "%s", str);
+-    NOERRNULL()
++    NOERR()
++
++    rc = fprintf_s(out, "%d", -10000);
++    ERR(6)
++
++    rc = fprintf_s(out, "%ld", -10000L);
++    NOERR()
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -94,7 +98,7 @@ int test_fprintf_s(void) {
+     strcpy(str, "keep it simple");
+ 
+     rc = fprintf_s(out, "%s", str);
+-    NOERRNULL()
++    ERR(strlen(str))
+ 
+     /*--------------------------------------------------*/
+ 
+diff --git a/tests/test_sprintf_s.c b/tests/test_sprintf_s.c
+index aedc3964..6ceb968c 100644
+--- a/tests/test_sprintf_s.c
++++ b/tests/test_sprintf_s.c
+@@ -154,6 +154,13 @@ int test_sprintf_s(void) {
+     ERRNO_MSVC(0, ERANGE);
+     EXPNULL(str1)
+ 
++    str1[0] = '\0';
++
++    rc = sprintf_s(str1, 5, "%ld", -10000000L);
++    ERR_MSVC(-ESNOSPC, -1);
++    ERRNO_MSVC(0, ERANGE);
++    EXPNULL(str1)
++
+     /*--------------------------------------------------*/
+ 
+     str1[0] = '\0';
diff --git a/meta-oe/recipes-core/safec/safec/0041-printf_s-catch-more-ESNOSPC-errors.patch b/meta-oe/recipes-core/safec/safec/0041-printf_s-catch-more-ESNOSPC-errors.patch
new file mode 100644
index 000000000..39660c12d
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0041-printf_s-catch-more-ESNOSPC-errors.patch
@@ -0,0 +1,142 @@ 
+From 13e413f7d0718cdf33a28793eed9ad53bc5b48e8 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sun, 31 Oct 2021 16:52:06 +0100
+Subject: [PATCH] printf_s: catch more ESNOSPC errors
+
+---
+ src/safeclib_private.h |  3 +++
+ src/str/vsnprintf_s.c  | 28 +++++++++++++++++++++++++++-
+ 2 files changed, 30 insertions(+), 1 deletion(-)
+
+diff --git a/src/safeclib_private.h b/src/safeclib_private.h
+index e7d43215..516faca3 100644
+--- a/src/safeclib_private.h
++++ b/src/safeclib_private.h
+@@ -658,6 +658,9 @@ static inline void _out_buffer(char character, void *buffer, size_t idx,
+                                size_t maxlen) {
+     if (idx < maxlen) {
+         ((char *)buffer)[idx] = character;
++    } else {
++        invoke_safe_str_constraint_handler("vsnprintf_s: exceeds dmax",
++                                           (char*)buffer, ESNOSPC);
+     }
+ }
+ 
+diff --git a/src/str/vsnprintf_s.c b/src/str/vsnprintf_s.c
+index 8d1ce3ad..60b0b691 100644
+--- a/src/str/vsnprintf_s.c
++++ b/src/str/vsnprintf_s.c
+@@ -194,18 +194,24 @@ static size_t _out_rev(out_fct_type out, char *buffer, size_t idx,
+     if (!(flags & FLAGS_LEFT) && !(flags & FLAGS_ZEROPAD)) {
+         for (size_t i = len; i < width; i++) {
+             out(' ', buffer, idx++, maxlen);
++            if (out == _out_buffer && idx > maxlen)
++                return -(ESNOSPC);
+         }
+     }
+ 
+     // reverse string
+     while (len) {
+         out(buf[--len], buffer, idx++, maxlen);
++        if (out == _out_buffer && idx > maxlen)
++            return -(ESNOSPC);
+     }
+ 
+     // append pad spaces up to given width
+     if (flags & FLAGS_LEFT) {
+         while (idx - start_idx < width) {
+             out(' ', buffer, idx++, maxlen);
++            if (out == _out_buffer && idx > maxlen)
++                return -(ESNOSPC);
+         }
+     }
+ 
+@@ -605,6 +611,8 @@ int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+     size_t idx = 0U;
+ 
+     while (*format) {
++        if ((long)idx < 0)
++            return idx;
+         // format specifier?  %[flags][width][.precision][length]
+         if (*format != '%') {
+             // no
+@@ -838,14 +846,20 @@ int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+             if (!(flags & FLAGS_LEFT)) {
+                 while (l++ < width) {
+                     out(' ', buffer, idx++, bufsize);
++                    if (out == _out_buffer && idx > bufsize)
++                        return -(ESNOSPC);
+                 }
+             }
+             // char output
+             out((char)va_arg(va, int), buffer, idx++, bufsize);
++            if (out == _out_buffer && idx > bufsize)
++                return -(ESNOSPC);
+             // post padding
+             if (flags & FLAGS_LEFT) {
+                 while (l++ < width) {
+                     out(' ', buffer, idx++, bufsize);
++                    if (out == _out_buffer && idx > bufsize)
++                        return -(ESNOSPC);
+                 }
+             }
+             format++;
+@@ -862,7 +876,7 @@ int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+             unsigned int l = _strnlen_s(p, precision ? precision : (size_t)-1);
+             if (l + idx > bufsize) {
+                 invoke_safe_str_constraint_handler("vsnprintf_s: %s arg exceeds dmax",
+-                                                   NULL, ESNULLP);
++                                                   NULL, ESNOSPC);
+                 return -(ESNOSPC);
+             }
+             // pre padding
+@@ -872,16 +886,22 @@ int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+             if (!(flags & FLAGS_LEFT)) {
+                 while (l++ < width) {
+                     out(' ', buffer, idx++, bufsize);
++                    if (out == _out_buffer && idx > bufsize)
++                        return -(ESNOSPC);
+                 }
+             }
+             // string output
+             while ((*p != 0) && (!(flags & FLAGS_PRECISION) || precision--)) {
+                 out(*(p++), buffer, idx++, bufsize);
++                if (out == _out_buffer && idx > bufsize)
++                    return -(ESNOSPC);
+             }
+             // post padding
+             if (flags & FLAGS_LEFT) {
+                 while (l++ < width) {
+                     out(' ', buffer, idx++, bufsize);
++                    if (out == _out_buffer && idx > bufsize)
++                        return -(ESNOSPC);
+                 }
+             }
+             format++;
+@@ -911,6 +931,8 @@ int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+ 
+         case '%':
+             out('%', buffer, idx++, bufsize);
++            if (out == _out_buffer && idx > bufsize)
++                return -(ESNOSPC);
+             format++;
+             break;
+ 
+@@ -921,6 +943,8 @@ int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+ 
+         default:
+             out(*format, buffer, idx++, bufsize);
++            if (out == _out_buffer && idx > bufsize)
++                return -(ESNOSPC);
+             format++;
+             break;
+         }
+@@ -928,6 +952,8 @@ int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+ 
+     // termination
+     out((char)0, buffer, idx < bufsize ? idx : bufsize - 1U, bufsize);
++    if (out == _out_buffer && idx > bufsize)
++        return -(ESNOSPC);
+ 
+     // return written chars without terminating \0
+     return (int)idx;
diff --git a/meta-oe/recipes-core/safec/safec/0042-fix-all-printf_s-tests.patch b/meta-oe/recipes-core/safec/safec/0042-fix-all-printf_s-tests.patch
new file mode 100644
index 000000000..28639b70d
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0042-fix-all-printf_s-tests.patch
@@ -0,0 +1,420 @@ 
+From 637a4b856b035bf94faa782b004b065226e5e0eb Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Tue, 2 Nov 2021 20:18:56 +0100
+Subject: [PATCH] fix all printf_s tests
+
+---
+ src/safeclib_private.h   |  3 ++-
+ src/str/vsprintf_s.c     |  5 ----
+ tests/test_snprintf_s.c  | 56 +++++++++++-----------------------------
+ tests/test_sprintf_s.c   | 10 +++----
+ tests/test_vfprintf_s.c  | 16 +++++-------
+ tests/test_vsnprintf_s.c | 32 +++++++++++------------
+ tests/test_vsprintf_s.c  | 28 ++++++++++----------
+ 7 files changed, 58 insertions(+), 92 deletions(-)
+
+diff --git a/src/safeclib_private.h b/src/safeclib_private.h
+index 516faca3..cc4b7c3f 100644
+--- a/src/safeclib_private.h
++++ b/src/safeclib_private.h
+@@ -643,7 +643,8 @@ EXTERN int _decomp_s(wchar_t *restrict dest, rsize_t dmax, const uint32_t cp,
+ 
+ #endif /* SAFECLIB_DISABLE_WCHAR */
+ 
+-// internal helper for the *printf_s functions.
++// internal helpers for the *printf_s functions:
++
+ // output function type
+ typedef void (*out_fct_type)(char character, void *buffer, size_t idx,
+                              size_t maxlen);
+diff --git a/src/str/vsprintf_s.c b/src/str/vsprintf_s.c
+index 8d8b3fb2..a727a383 100644
+--- a/src/str/vsprintf_s.c
++++ b/src/str/vsprintf_s.c
+@@ -37,9 +37,6 @@
+ #include "safeclib_private.h"
+ #endif
+ 
+-#if defined(TEST_MSVCRT) && defined(HAVE_VSPRINTF_S)
+-#else
+-
+ /**
+  * @def vsprintf_s(dest,dmax,fmt,va_args)
+  * @brief
+@@ -123,5 +120,3 @@ EXPORT int _vsprintf_s_chk(char *restrict dest, const rsize_t dmax,
+ 
+     return ret;
+ }
+-
+-#endif /* TEST_MSVCRT */
+diff --git a/tests/test_snprintf_s.c b/tests/test_snprintf_s.c
+index bb3c7c66..caf0b3a7 100644
+--- a/tests/test_snprintf_s.c
++++ b/tests/test_snprintf_s.c
+@@ -16,11 +16,11 @@ EXTERN int snprintf_s(char *restrict dest, rsize_t dmax,
+ #endif
+ #endif
+ 
+-#ifdef HAVE_SNPRINTF_S
+-#define HAVE_NATIVE 1
+-#else
+-#define HAVE_NATIVE 0
+-#endif
++//#ifdef HAVE_SNPRINTF_S
++//#define HAVE_NATIVE 1
++//#else
++//#define HAVE_NATIVE 0
++//#endif
+ #include "test_msvcrt.h"
+ 
+ #define LEN (128)
+@@ -86,16 +86,15 @@ int test_snprintf_s(void) {
+ 
+     /*--------------------------------------------------*/
+ 
+-    /* TODO
+-    rc = snprintf_s(str1, LEN, "%p", NULL);
+-    NEGERR(ESNULLP)
+-    */
++    rc = snprintf_s(str1, LEN, "%p", NULL); // %p NULL is allowed
++    NOERR();
+ 
+     /*--------------------------------------------------*/
+ 
+     strcpy(str1, "123456");
+     strcpy(str2, "keep it simple");
+ 
++    // note: compare to the insecure variant
+     rc = snprintf(str1, 1, "%s", str2);
+     /* number of characters (not including the terminating null character)
+        which would have been written to buffer if dmax was ignored */
+@@ -120,7 +119,7 @@ int test_snprintf_s(void) {
+      * RSIZE_MAX), which would have been written to buffer if bufsz
+      * was ignored. */
+ #if !defined(HAVE_MINGW32) || defined(HAVE_MINGW64)
+-    ERR(14); /* but truncated, written only 1, the \0 */
++    ERR(-ESNOSPC);
+ #else
+     ERR(-1);
+ #endif
+@@ -136,6 +135,7 @@ int test_snprintf_s(void) {
+     strcpy(str1, "123456");
+     strcpy(str2, "keep it simple");
+ 
++    // compare to the insecure variant
+     rc = snprintf(str1, 2, "%s", str2);
+ #if !defined(HAVE_MINGW32) || defined(HAVE_MINGW64)
+     ERR(14); /* but truncated, written only 2: k\0 */
+@@ -152,18 +152,8 @@ int test_snprintf_s(void) {
+ 
+     strcpy(str1, "123456");
+     rc = snprintf_s(str1, 2, "%s", str2);
+-#if !defined(HAVE_MINGW32) || defined(HAVE_MINGW64)
+-    ERR(14); /* but truncated, written only 2: k\0 */
+-    EXPSTR(str1, "k")
+-    if ((ind = memcmp(str1, "k\0003456\000", 7))) {
+-        debug_printf("%s %u snprintf truncation: %d \"%s\"\n", __FUNCTION__,
+-                     __LINE__, ind, str1);
+-        errs++;
+-    }
+-#else
+-    ERR(-1);
++    ERR(-ESNOSPC);
+     EXPSTR(str1, "")
+-#endif
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -190,12 +180,8 @@ int test_snprintf_s(void) {
+     strcpy(str2, "keep it simple");
+ 
+     rc = snprintf_s(str1, 5, "%s", str2);
+-#if !defined(HAVE_MINGW32) || defined(HAVE_MINGW64)
+-    NOERRNULL() /* no ENOSPC */
+-    EXPSTR(str1, "keep")
+-#else
++    ERR(-ESNOSPC);
+     EXPSTR(str1, "")
+-#endif
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -203,12 +189,8 @@ int test_snprintf_s(void) {
+     strcpy(str2, "keep it simple");
+ 
+     rc = snprintf_s(str1, 2, "%s", str2);
+-#if !defined(HAVE_MINGW32) || defined(HAVE_MINGW64)
+-    NOERRNULL()
+-    EXPSTR(str1, "k")
+-#else
++    ERR(-ESNOSPC);
+     EXPSTR(str1, "")
+-#endif
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -260,12 +242,8 @@ int test_snprintf_s(void) {
+     strcpy(str2, "keep it simple");
+ 
+     rc = snprintf_s(str1, 12, "%s", str2);
+-#if !defined(HAVE_MINGW32) || defined(HAVE_MINGW64)
+-    ERR(14) /* sic! unsafe */
+-#else
+-    ERR(-1);
++    ERR(-ESNOSPC);
+     EXPSTR(str1, "")
+-#endif
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -281,12 +259,8 @@ int test_snprintf_s(void) {
+     strcpy(str1, "12345678901234567890");
+ 
+     rc = snprintf_s(str1, 8, "%s", &str1[7]);
+-#if !defined(HAVE_MINGW32) || defined(HAVE_MINGW64)
+-    ERR(13) /* sic! unsafe */
+-#else
+-    ERR(-1);
++    ERR(-ESNOSPC);
+     EXPSTR(str1, "")
+-#endif
+ 
+     /*--------------------------------------------------*/
+ 
+diff --git a/tests/test_sprintf_s.c b/tests/test_sprintf_s.c
+index 6ceb968c..a2df855f 100644
+--- a/tests/test_sprintf_s.c
++++ b/tests/test_sprintf_s.c
+@@ -16,11 +16,11 @@ EXTERN int sprintf_s(char *restrict dest, rsize_t dmax,
+ #endif
+ #endif
+ 
+-#ifdef HAVE_SPRINTF_S
+-#define HAVE_NATIVE 1
+-#else
+-#define HAVE_NATIVE 0
+-#endif
++//#ifdef HAVE_SPRINTF_S
++//#define HAVE_NATIVE 1
++//#else
++//#define HAVE_NATIVE 0
++//#endif
+ #include "test_msvcrt.h"
+ 
+ #define LEN (128)
+diff --git a/tests/test_vfprintf_s.c b/tests/test_vfprintf_s.c
+index e0e00853..fecdc227 100644
+--- a/tests/test_vfprintf_s.c
++++ b/tests/test_vfprintf_s.c
+@@ -10,11 +10,11 @@
+ #include "safe_str_lib.h"
+ #include <unistd.h>
+ 
+-#ifdef HAVE_VFPRINTF_S
+-#define HAVE_NATIVE 1
+-#else
+-#define HAVE_NATIVE 0
+-#endif
++//#ifdef HAVE_VFPRINTF_S
++//#define HAVE_NATIVE 1
++//#else
++//#define HAVE_NATIVE 0
++//#endif
+ #include "test_msvcrt.h"
+ 
+ #define TMP "tmpvfp"
+@@ -55,10 +55,8 @@ int test_vfprintf_s(void) {
+     rc = vtfprintf_s(out, "", NULL);
+     NEGERR(EOK)
+ 
+-    /* TODO
+     rc = vtfprintf_s(NULL, "%s", NULL);
+     NEGERR(ESNULLP);
+-    */
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -80,10 +78,8 @@ int test_vfprintf_s(void) {
+ 
+     /*--------------------------------------------------*/
+ 
+-    /* TODO
+     rc = vtfprintf_s(out, "%s", NULL);
+     NEGERR(ESNULLP)
+-    */
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -95,7 +91,7 @@ int test_vfprintf_s(void) {
+ 
+     /*--------------------------------------------------*/
+ 
+-#if 0
++#if 1
+     /* 0x7fffffff + 1 >INT_MAX */
+     rc = printf_s("\n%2147483648d\n", INT_MAX);
+     ANYERR();
+diff --git a/tests/test_vsnprintf_s.c b/tests/test_vsnprintf_s.c
+index c5e346fe..adc4f7dc 100644
+--- a/tests/test_vsnprintf_s.c
++++ b/tests/test_vsnprintf_s.c
+@@ -10,11 +10,11 @@
+ #include "safe_str_lib.h"
+ #include <stdarg.h>
+ 
+-#ifdef HAVE_VSNPRINTF_S
+-#define HAVE_NATIVE 1
+-#else
+-#define HAVE_NATIVE 0
+-#endif
++//#ifdef HAVE_VSNPRINTF_S
++//#define HAVE_NATIVE 1
++//#else
++//#define HAVE_NATIVE 0
++//#endif
+ #include "test_msvcrt.h"
+ 
+ #if defined(_WIN32) && defined(HAVE_VSNPRINTF_S)
+@@ -127,7 +127,7 @@ int test_vsnprintf_s(void) {
+ 
+     rc = vtprintf_s(str1, 1, "%s", str2);
+     if (!use_msvcrt) {
+-        ERR(14);
++        ERR(-ESNOSPC);
+     } else {
+         ERR(-1);
+     }
+@@ -140,7 +140,7 @@ int test_vsnprintf_s(void) {
+ 
+     rc = vtprintf_s(str1, 2, "%s", str2);
+     if (!use_msvcrt) {
+-        ERR(14);
++        ERR(-ESNOSPC);
+     } else {
+         ERR(-1);
+     }
+@@ -171,12 +171,11 @@ int test_vsnprintf_s(void) {
+ 
+     rc = vtprintf_s(str1, 5, "%s", str2);
+ #ifndef HAVE_MINGW32
+-    NOERRNULL() /* no ENOSPC */
+-    EXPSTR(str1, "keep")
++    ERR(-ESNOSPC);
+ #else
+     ERR(-1);
+-    EXPSTR(str1, "")
+ #endif
++    EXPSTR(str1, "")
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -185,12 +184,11 @@ int test_vsnprintf_s(void) {
+ 
+     rc = vtprintf_s(str1, 2, "%s", str2);
+ #ifndef HAVE_MINGW32
+-    ERR(14) /* sic! unsafe */
+-    EXPSTR(str1, "k")
++    ERR(-ESNOSPC);
+ #else
+     ERR(-1);
+-    EXPSTR(str1, "")
+ #endif
++    EXPSTR(str1, "")
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -235,11 +233,11 @@ int test_vsnprintf_s(void) {
+ 
+     rc = vtprintf_s(str1, 12, "%s", str2);
+ #ifndef HAVE_MINGW32
+-    ERR(14) /* sic! unsafe */
++    ERR(-ESNOSPC);
+ #else
+     ERR(-1);
+-    EXPSTR(str1, "")
+ #endif
++    EXPSTR(str1, "")
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -256,11 +254,11 @@ int test_vsnprintf_s(void) {
+ 
+     rc = vtprintf_s(str1, 8, "%s", &str1[7]);
+ #ifndef HAVE_MINGW32
+-    ERR(13) /* sic! unsafe */
++    EXPSTR(str1, "")
+ #else
+     ERR(-1);
+-    EXPSTR(str1, "")
+ #endif
++    EXPSTR(str1, "")
+ 
+     /*--------------------------------------------------*/
+ 
+diff --git a/tests/test_vsprintf_s.c b/tests/test_vsprintf_s.c
+index deb0d17a..30fbfd8a 100644
+--- a/tests/test_vsprintf_s.c
++++ b/tests/test_vsprintf_s.c
+@@ -15,11 +15,11 @@ EXTERN int vsprintf_s(char *restrict dest, rsize_t dmax,
+                       const char *restrict fmt, va_list ap);
+ #endif
+ 
+-#ifdef HAVE_VSPRINTF_S
+-#define HAVE_NATIVE 1
+-#else
+-#define HAVE_NATIVE 0
+-#endif
++//#ifdef HAVE_VSPRINTF_S
++//#define HAVE_NATIVE 1
++//#else
++//#define HAVE_NATIVE 0
++//#endif
+ #include "test_msvcrt.h"
+ 
+ #define LEN (128)
+@@ -48,11 +48,9 @@ int test_vsprintf_s(void) {
+ 
+     /*--------------------------------------------------*/
+ 
+-    /* not testable, and not implemented.
+-      rc = vtprintf_s(str1, LEN, "%s", NULL);
+-      ERR(0);
+-      ERRNO(ESNULLP);
+-    */
++    rc = vtprintf_s(str1, LEN, "%s", NULL);
++    ERR(-ESNULLP);
++    ERRNO_MSVC(0, EINVAL);
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -97,7 +95,7 @@ int test_vsprintf_s(void) {
+     /* wine msvcrt doesn't check %n neither */
+ #if !(defined(_WINE_MSVCRT) && defined(TEST_MSVCRT) && defined(HAVE_VSPRINTF_S))
+     rc = vtprintf_s(str1, LEN, "%s %n", str2);
+-    ERR(-1);
++    ERR(-EINVAL);
+     ERRNO_MSVC(0, EINVAL);
+ #endif
+ 
+@@ -159,6 +157,11 @@ int test_vsprintf_s(void) {
+     ERRNO_MSVC(0, ERANGE);
+     EXPNULL(str1)
+ 
++    rc = vtprintf_s(str1, 5, "%ld", -10000000L);
++    ERR_MSVC(-ESNOSPC, -1);
++    ERRNO_MSVC(0, ERANGE);
++    EXPNULL(str1)
++
+     /*--------------------------------------------------*/
+ 
+     str1[0] = '\0';
+@@ -263,8 +266,7 @@ int test_vsprintf_s(void) {
+     /* everybody incorrectly accepts illegal % specifiers, only musl not. */
+     rc = vtprintf_s(str1, LEN, "%y");
+     /* TODO: dietlibc, uClibc, minilibc */
+-#if defined(__GLIBC__) || defined(BSD_ALL_LIKE) /* and older mingw versions    \
+-                                                 */
++#if defined(__GLIBC__) || defined(BSD_ALL_LIKE) /* and older mingw versions */
+     /* they print unknown formats verbatim */
+     NOERR();
+ #else
diff --git a/meta-oe/recipes-core/safec/safec/0043-rename-_vsnprintf_s-to-__vsnprintf_s.patch b/meta-oe/recipes-core/safec/safec/0043-rename-_vsnprintf_s-to-__vsnprintf_s.patch
new file mode 100644
index 000000000..cf8ba4740
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0043-rename-_vsnprintf_s-to-__vsnprintf_s.patch
@@ -0,0 +1,76 @@ 
+From 7960db0e3b6c545ee12b83eb55f54a45376f9031 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Tue, 2 Nov 2021 21:25:08 +0100
+Subject: [PATCH] rename _vsnprintf_s to __vsnprintf_s
+
+clashes with mingw
+---
+ src/io/fprintf_s.c     | 2 +-
+ src/io/printf_s.c      | 2 +-
+ src/safeclib_private.h | 3 ++-
+ src/str/vsnprintf_s.c  | 5 +++--
+ 4 files changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/src/io/fprintf_s.c b/src/io/fprintf_s.c
+index 436c7961..3f31bb53 100644
+--- a/src/io/fprintf_s.c
++++ b/src/io/fprintf_s.c
+@@ -96,7 +96,7 @@ EXPORT int fprintf_s(FILE *restrict stream, const char *restrict fmt, ...) {
+ 
+     errno = 0;
+     va_start(ap, fmt);
+-    ret = _vsnprintf_s(_out_fchar, (char*)&wrap, (rsize_t)-1, fmt, ap);
++    ret = __vsnprintf_s(_out_fchar, (char*)&wrap, (rsize_t)-1, fmt, ap);
+     va_end(ap);
+ 
+     if (unlikely(ret < 0 && errno != 0)) {
+diff --git a/src/io/printf_s.c b/src/io/printf_s.c
+index 84521ea6..b0d1fa62 100644
+--- a/src/io/printf_s.c
++++ b/src/io/printf_s.c
+@@ -88,7 +88,7 @@ EXPORT int printf_s(const char *restrict fmt, ...) {
+     }
+     
+     va_start(va, fmt);
+-    ret = _vsnprintf_s(_out_char, buffer, (rsize_t)-1, fmt, va);
++    ret = __vsnprintf_s(_out_char, buffer, (rsize_t)-1, fmt, va);
+     va_end(va);
+ 
+     if (unlikely(ret < 0 && errno != 0)) {
+diff --git a/src/safeclib_private.h b/src/safeclib_private.h
+index cc4b7c3f..13b2bab8 100644
+--- a/src/safeclib_private.h
++++ b/src/safeclib_private.h
+@@ -694,7 +694,8 @@ static inline void _out_fct(char character, void *wrap, size_t idx,
+         ((out_fct_wrap_type *)wrap)->fct(character, ((out_fct_wrap_type *)wrap)->arg);
+     }
+ }
+-int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
++// mingw has a _vsnprintf_s
++int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+                  const char *format, va_list va);
+ 
+ #endif /* __SAFECLIB_PRIVATE_H__ */
+diff --git a/src/str/vsnprintf_s.c b/src/str/vsnprintf_s.c
+index 60b0b691..f15c3294 100644
+--- a/src/str/vsnprintf_s.c
++++ b/src/str/vsnprintf_s.c
+@@ -604,7 +604,8 @@ static size_t _etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
+ 
+ // internal vsnprintf, extended for _s.
+ // already checked in the caller
+-int _vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
++// mingw has a _vsnprintf_s(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,va_list _ArgList);
++int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+                         const char *format, va_list va)
+ {
+     unsigned int flags, width, precision, n;
+@@ -1055,7 +1056,7 @@ EXPORT int _vsnprintf_s_chk(char *restrict dest, rsize_t dmax,
+     }
+ 
+     errno = 0;
+-    ret = _vsnprintf_s(_out_buffer, dest, dmax, fmt, ap);
++    ret = __vsnprintf_s(_out_buffer, dest, dmax, fmt, ap);
+ 
+     //if (unlikely(ret < 0)) {
+     //    char errstr[128] = "vsnprintf_s: ";
diff --git a/meta-oe/recipes-core/safec/safec/0044-disable-fixup-some-io-for-the-kernel.patch b/meta-oe/recipes-core/safec/safec/0044-disable-fixup-some-io-for-the-kernel.patch
new file mode 100644
index 000000000..c33835313
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0044-disable-fixup-some-io-for-the-kernel.patch
@@ -0,0 +1,37 @@ 
+From 4c65989c0a674631a59fdf9bb12b9e3f41fc95b7 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Tue, 2 Nov 2021 22:05:35 +0100
+Subject: [PATCH] disable/fixup some io for the kernel
+
+---
+ src/safeclib_private.h | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/src/safeclib_private.h b/src/safeclib_private.h
+index 13b2bab8..46ece93b 100644
+--- a/src/safeclib_private.h
++++ b/src/safeclib_private.h
+@@ -672,10 +672,15 @@ static inline void _out_char(char character, void *buffer, size_t idx,
+     (void)idx;
+     (void)maxlen;
+     if (character) {
++#ifndef __KERNEL__
+         putchar(character);
++#else
++        slprintf("%c", character);
++#endif
+     }
+ }
+ 
++#ifndef __KERNEL__
+ // special-case of _out_fct for fprintf_s
+ static inline void _out_fchar(char character, void *wrap, size_t idx,
+                              size_t maxlen) {
+@@ -683,6 +688,7 @@ static inline void _out_fchar(char character, void *wrap, size_t idx,
+     (void)maxlen;
+     fprintf(((out_fct_wrap_type *)wrap)->arg, "%c", character);
+ }
++#endif
+ 
+ // internal output function wrapper
+ static inline void _out_fct(char character, void *wrap, size_t idx,
diff --git a/meta-oe/recipes-core/safec/safec/0045-let-vfprintf_s-use-the-new-secure-vsnprintf_s.patch b/meta-oe/recipes-core/safec/safec/0045-let-vfprintf_s-use-the-new-secure-vsnprintf_s.patch
new file mode 100644
index 000000000..af5c0608f
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0045-let-vfprintf_s-use-the-new-secure-vsnprintf_s.patch
@@ -0,0 +1,151 @@ 
+From eb722776c9a5d0604ae8e7cec09e8efcabea8f87 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Tue, 2 Nov 2021 22:38:48 +0100
+Subject: [PATCH] let vfprintf_s use the new secure vsnprintf_s
+
+---
+ src/io/fprintf_s.c      |  5 ++---
+ src/io/vfprintf_s.c     | 15 +++++++++++++--
+ src/safeclib_private.h  |  3 ++-
+ src/str/vsnprintf_s.c   |  8 +++++++-
+ tests/test_vfprintf_s.c | 10 ++++++----
+ 5 files changed, 30 insertions(+), 11 deletions(-)
+
+diff --git a/src/io/fprintf_s.c b/src/io/fprintf_s.c
+index 3f31bb53..e580d2e5 100644
+--- a/src/io/fprintf_s.c
++++ b/src/io/fprintf_s.c
+@@ -71,9 +71,7 @@ EXPORT int fprintf_s(FILE *restrict stream, const char *restrict fmt, ...) {
+     va_list ap;
+     int ret;
+     const char *p;
+-    out_fct_wrap_type wrap = {
+-        .arg  = stream
+-    };
++    out_fct_wrap_type wrap;
+ 
+     if (unlikely(stream == NULL)) {
+         invoke_safe_str_constraint_handler("fprintf_s: stream is null", NULL,
+@@ -95,6 +93,7 @@ EXPORT int fprintf_s(FILE *restrict stream, const char *restrict fmt, ...) {
+     }
+ 
+     errno = 0;
++    wrap.arg = stream;
+     va_start(ap, fmt);
+     ret = __vsnprintf_s(_out_fchar, (char*)&wrap, (rsize_t)-1, fmt, ap);
+     va_end(ap);
+diff --git a/src/io/vfprintf_s.c b/src/io/vfprintf_s.c
+index a95f5c6a..92d71cc3 100644
+--- a/src/io/vfprintf_s.c
++++ b/src/io/vfprintf_s.c
+@@ -61,7 +61,7 @@
+  *
+  * @return  On success the total number of characters written is returned.
+  * @return  On failure a negative number is returned.
+- * @retval  -ESNULLP when stream/fmt is NULL pointer
++ * @retval  -ESNULLP when stream or fmt is NULL pointer
+  * @retval  -EINVAL  when fmt contains %n
+  * @retval  -1       on some other error. errno is set then.
+  *
+@@ -71,6 +71,7 @@ EXPORT int vfprintf_s(FILE *restrict stream, const char *restrict fmt,
+                       va_list ap) {
+     int ret;
+     const char *p;
++    out_fct_wrap_type wrap;
+ 
+     if (unlikely(stream == NULL)) {
+         invoke_safe_str_constraint_handler("vfprintf_s: stream is null", NULL,
+@@ -94,13 +95,23 @@ EXPORT int vfprintf_s(FILE *restrict stream, const char *restrict fmt,
+     }
+ 
+     errno = 0;
++#if 0
+     ret = vfprintf(stream, fmt, ap);
+-
+     if (unlikely(ret < 0)) {
+         char errstr[128] = "vfprintf_s: ";
+         strcat(errstr, strerror(errno));
+         invoke_safe_str_constraint_handler(errstr, NULL, -ret);
+     }
++#else
++    wrap.arg = stream;
++    ret = __vsnprintf_s(_out_fchar, (char*)&wrap, (rsize_t)-1, fmt, ap);
++
++    if (unlikely(ret < 0 && errno != 0)) {
++        char errstr[128] = "vfprintf_s: ";
++        strcat(errstr, strerror(errno));
++        invoke_safe_str_constraint_handler(errstr, NULL, -ret);
++    }
++#endif
+ 
+     return ret;
+ }
+diff --git a/src/safeclib_private.h b/src/safeclib_private.h
+index 46ece93b..355bf164 100644
+--- a/src/safeclib_private.h
++++ b/src/safeclib_private.h
+@@ -686,7 +686,8 @@ static inline void _out_fchar(char character, void *wrap, size_t idx,
+                              size_t maxlen) {
+     (void)idx;
+     (void)maxlen;
+-    fprintf(((out_fct_wrap_type *)wrap)->arg, "%c", character);
++    //((out_fct_wrap_type *)wrap)->fct(character, ((out_fct_wrap_type *)wrap)->arg);
++    fprintf((FILE*)((out_fct_wrap_type *)wrap)->arg, "%c", character);
+ }
+ #endif
+ 
+diff --git a/src/str/vsnprintf_s.c b/src/str/vsnprintf_s.c
+index f15c3294..765014d6 100644
+--- a/src/str/vsnprintf_s.c
++++ b/src/str/vsnprintf_s.c
+@@ -270,6 +270,11 @@ static size_t _ntoa_format(out_fct_type out, char *buffer, size_t idx,
+             buf[len++] = ' ';
+         }
+     }
++    if (width > 2147483614) {
++        invoke_safe_str_constraint_handler("vsnprintf_s: width exceeds max",
++                                           NULL, ESLEMAX);
++        return -ESLEMAX;
++    }
+ 
+     return _out_rev(out, buffer, idx, maxlen, buf, len, width, flags);
+ }
+@@ -868,13 +873,14 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+         }
+ 
+         case 's': {
++            unsigned int l;
+             const char *p = va_arg(va, char *);
+             if (!p) {
+                 invoke_safe_str_constraint_handler("vsnprintf_s: %s arg is null",
+                                                    NULL, ESNULLP);
+                 return -(ESNULLP);
+             }
+-            unsigned int l = _strnlen_s(p, precision ? precision : (size_t)-1);
++            l = _strnlen_s(p, precision ? precision : (size_t)-1);
+             if (l + idx > bufsize) {
+                 invoke_safe_str_constraint_handler("vsnprintf_s: %s arg exceeds dmax",
+                                                    NULL, ESNOSPC);
+diff --git a/tests/test_vfprintf_s.c b/tests/test_vfprintf_s.c
+index fecdc227..340ad3d6 100644
+--- a/tests/test_vfprintf_s.c
++++ b/tests/test_vfprintf_s.c
+@@ -94,12 +94,14 @@ int test_vfprintf_s(void) {
+ #if 1
+     /* 0x7fffffff + 1 >INT_MAX */
+     rc = printf_s("\n%2147483648d\n", INT_MAX);
+-    ANYERR();
+-#if defined(__GLIBC__)
+-    ERRNO(EOVERFLOW);
++    NEGERR(ESLEMAX);
++    //#if defined(__GLIBC__)
++    //ERRNO(EOVERFLOW);
++    //#endif
+ #endif
+ 
+-    /* segfaults under darwin */
++#if 0
++    /* segfaults */
+     rc = printf_s("%s\n", L'\xd834df01');
+     ANYERR();
+ #endif
diff --git a/meta-oe/recipes-core/safec/safec/0046-doc-fix-retval-doxygen-warnings.patch b/meta-oe/recipes-core/safec/safec/0046-doc-fix-retval-doxygen-warnings.patch
new file mode 100644
index 000000000..7dfb19383
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0046-doc-fix-retval-doxygen-warnings.patch
@@ -0,0 +1,101 @@ 
+From 66e6c0a731363e85643ca76495520a12068e3de2 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Fri, 5 Nov 2021 08:12:21 +0100
+Subject: [PATCH] doc: fix @retval doxygen warnings
+
+warning: return value '-ESNULLP' of *printf_s has multiple documentation sections
+---
+ src/io/gets_s.c       | 12 ++++++------
+ src/str/snprintf_s.c  |  4 ++--
+ src/str/sprintf_s.c   |  6 +++---
+ src/str/vsnprintf_s.c |  4 ++--
+ src/str/vsprintf_s.c  |  6 +++---
+ 5 files changed, 16 insertions(+), 16 deletions(-)
+
+diff --git a/src/io/gets_s.c b/src/io/gets_s.c
+index 22a9340e..35f33039 100644
+--- a/src/io/gets_s.c
++++ b/src/io/gets_s.c
+@@ -90,12 +90,12 @@
+  * @retval  int >0     when on successful operation, all the characters from src
+  *                     were appended to dest and the result in dest is null
+  *                     terminated.
+- * @retval  0 + errno=ESNULLP    when dest is a NULL pointer
+- * @retval  0 + errno=ESZEROL    when dmax = 0
+- * @retval  0 + errno=ESLEMAX    when dmax > RSIZE_MAX_STR
+- * @retval  0 + errno=EOVERFLOW  when dmax > size of dest
+- * @retval  0 + errno=ESUNTERM   endline or eof not encountered after storing
+- *                               dmax-1 characters to dest.
++ * @retval  0,errno=ESNULLP    when dest is a NULL pointer
++ * @retval  0,errno=ESZEROL    when dmax = 0
++ * @retval  0,errno=ESLEMAX    when dmax > RSIZE_MAX_STR
++ * @retval  0,errno=EOVERFLOW  when dmax > size of dest
++ * @retval  0,errno=ESUNTERM   endline or eof not encountered after storing
++ *                             dmax-1 characters to dest.
+  *
+  * @see
+  *    scanf_s()
+diff --git a/src/str/snprintf_s.c b/src/str/snprintf_s.c
+index e71a4e9e..e0dae533 100644
+--- a/src/str/snprintf_s.c
++++ b/src/str/snprintf_s.c
+@@ -73,8 +73,8 @@
+  *          character, or a negative error number if a runtime
+  *          constraints violation or an encoding error occurred.
+  *
+- * @retval  -ESNULLP    when \c dest/fmt is NULL pointer
+- * @retval  -ESNULLP    when a \c %s argument is NULL
++ * @retval  -ESNULLP    when \c dest/fmt is NULL pointer, or
++ *                      when a \c %s argument is NULL
+  * @retval  -ESZEROL    when \c dmax == 0
+  * @retval  -ESLEMAX    when \c dmax > \c RSIZE_MAX_STR
+  * @retval  -EOVERFLOW  when \c dmax > size of dest
+diff --git a/src/str/sprintf_s.c b/src/str/sprintf_s.c
+index 75165d5a..dbaa6208 100644
+--- a/src/str/sprintf_s.c
++++ b/src/str/sprintf_s.c
+@@ -70,9 +70,9 @@
+  *          including the terminating null, then the buffer is cleared, and the
+  *          invalid parameter handler is invoked.
+  *
+- * @retval -ESNULLP    when \c fmt is NULL pointer
+- * @retval -ESNULLP    when \c dest is NULL and dmax > 0
+- * @retval -ESNULLP    when a \c %s argument is NULL
++ * @retval -ESNULLP    when \c fmt is NULL pointer, or
++ *                     when \c dest is NULL and dmax > 0, or
++ *                     when a \c %s argument is NULL
+  * @retval -ESZEROL    when \c dmax = 0 and dest is not NULL
+  * @retval -ESLEMAX    when \c dmax > \c RSIZE_MAX_STR or dmax > size of dest
+  * @retval -EOVERFLOW  when \c dmax > size of dest
+diff --git a/src/str/vsnprintf_s.c b/src/str/vsnprintf_s.c
+index 765014d6..0e758967 100644
+--- a/src/str/vsnprintf_s.c
++++ b/src/str/vsnprintf_s.c
+@@ -1006,8 +1006,8 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+  *          including the terminating null, then the buffer is truncated
+  *          and null terminated.
+  *
+- * @retval  -ESNULLP    when \c dest/fmt is NULL pointer
+- * @retval  -ESNULLP    when a \c %s argument is NULL
++ * @retval  -ESNULLP    when \c dest or fmt is NULL pointer, or
++ *                      when a \c %s argument is NULL
+  * @retval  -ESZEROL    when \c dmax == 0
+  * @retval  -ESLEMAX    when \c dmax > \c RSIZE_MAX_STR
+  * @retval  -EOVERFLOW  when \c dmax > size of dest
+diff --git a/src/str/vsprintf_s.c b/src/str/vsprintf_s.c
+index a727a383..69095c4b 100644
+--- a/src/str/vsprintf_s.c
++++ b/src/str/vsprintf_s.c
+@@ -73,9 +73,9 @@
+  *          including the terminating null, then the buffer is cleared, and the
+  *          invalid parameter handler is invoked.
+  *
+- * @retval -ESNULLP    when \c fmt is NULL pointer
+- * @retval -ESNULLP    when \c dest is NULL and dmax > 0
+- * @retval -ESNULLP    when a \c %s argument is NULL
++ * @retval -ESNULLP    when \c fmt is NULL pointer, or
++ *                     when \c dest is NULL and dmax > 0, or
++ *                     when a \c %s argument is NULL
+  * @retval -ESZEROL    when \c dmax = 0 and dest is not NULL
+  * @retval -ESLEMAX    when \c dmax > \c RSIZE_MAX_STR
+  * @retval -EOVERFLOW  when \c dmax > size of dest
diff --git a/meta-oe/recipes-core/safec/safec/0047-add-ESNOSPC-check-to-qsort_s.patch b/meta-oe/recipes-core/safec/safec/0047-add-ESNOSPC-check-to-qsort_s.patch
new file mode 100644
index 000000000..77da43845
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0047-add-ESNOSPC-check-to-qsort_s.patch
@@ -0,0 +1,94 @@ 
+From a266031fa0ca6942ddb44e9782d8b2e1b0c62675 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Mon, 8 Nov 2021 17:57:44 +0100
+Subject: [PATCH] add ESNOSPC check to qsort_s
+
+check BOS(base) if known
+---
+ src/misc/qsort_s.c   | 39 ++++++++++++++++++++++++++++++---------
+ tests/test_qsort_s.c |  4 ++--
+ 2 files changed, 32 insertions(+), 11 deletions(-)
+
+diff --git a/src/misc/qsort_s.c b/src/misc/qsort_s.c
+index 688b468b..5d1fd15f 100644
+--- a/src/misc/qsort_s.c
++++ b/src/misc/qsort_s.c
+@@ -117,8 +117,9 @@ typedef unsigned long uint64_t;
+  *
+  * @return  Zero on success, an errno_t on errors.
+  * @retval  EOK         when operation is successful
+- * @retval  -ESNULLP    when base/compar is NULL pointer and nmemb > 0
+- * @retval  -ESLEMAX    when nmemb/size > RSIZE_MAX_MEM
++ * @retval  -ESNULLP    when base * compar is NULL pointer and nmemb > 0
++ * @retval  -ESLEMAX    when nmemb or size > RSIZE_MAX_MEM
++ * @retval  -ESNOSPC    when nmemb*size > sizeof base
+  *
+  * @see
+  *    bsearch_s()
+@@ -351,21 +352,41 @@ errno_t qsort_s(void *base, rsize_t nmemb, rsize_t size,
+ EXPORT errno_t _qsort_s_chk(void *base, rsize_t nmemb, rsize_t size,
+                             int (*compar)(const void *k, const void *y,
+                                           void *context),
+-                            void *context, const size_t destbos)
++                            void *context, const size_t basebos)
+ #endif
+ {
++    (void)basebos;
+     if (likely(nmemb != 0)) {
+         if (unlikely(base == NULL || compar == NULL)) {
+-            invoke_safe_str_constraint_handler("qsort_s: base/compar is null",
++            invoke_safe_str_constraint_handler("qsort_s: base or compar is null",
+                                                NULL, ESNULLP);
+             return RCNEGATE(ESNULLP);
+         }
+     }
+-
+-    if (unlikely(nmemb > RSIZE_MAX_MEM || size > RSIZE_MAX_MEM)) {
+-        invoke_safe_str_constraint_handler("qsort_s: nmemb/size exceeds max",
+-                                           NULL, ESLEMAX);
+-        return RCNEGATE(ESLEMAX);
++    if (basebos == BOS_UNKNOWN) {
++        if (unlikely(nmemb > RSIZE_MAX_MEM || size > RSIZE_MAX_MEM ||
++                     ((basebos != BOS_UNKNOWN) && (basebos > RSIZE_MAX_MEM)))) {
++            invoke_safe_str_constraint_handler("qsort_s: nmemb or size exceeds max",
++                                               NULL, ESLEMAX);
++            return RCNEGATE(ESLEMAX);
++        }
++        BND_CHK_PTR_BOUNDS(base, nmemb * size);
++    } else {
++        rsize_t basesz = nmemb * size;
++        if (unlikely(basesz > basebos)) {
++            invoke_safe_str_constraint_handler("qsort_s: nmemb*size exceeds sizeof base",
++                                               NULL, ESNOSPC);
++            return RCNEGATE(ESNOSPC);
++        }
++#ifdef HAVE_WARN_DMAX
++        if (unlikely(basesz != basebos)) {
++            handle_mem_bos_chk_warn("qsort_s", (void *)base, basesz, basebos);
++#ifdef HAVE_ERROR_DMAX
++            errno = ESLEWRNG;
++            return NULL;
++#endif
++        }
++#endif
+     }
+ 
+     qsort_musl(base, (size_t)nmemb, (size_t)size, compar, context);
+diff --git a/tests/test_qsort_s.c b/tests/test_qsort_s.c
+index be9708e8..31fc393f 100644
+--- a/tests/test_qsort_s.c
++++ b/tests/test_qsort_s.c
+@@ -72,11 +72,11 @@ int test_qsort_s(void) {
+     if (!use_msvcrt) {
+         EXPECT_BOS("base overflow")
+         rc = qsort_s(array, RSIZE_MAX_MEM + 1, sizeof(array[0]), comp, NULL);
+-        ERR(ESLEMAX);
++        ERR(ESNOSPC);
+ 
+         EXPECT_BOS("base overflow")
+         rc = qsort_s(array, LEN, RSIZE_MAX_MEM + 1, comp, NULL);
+-        ERR(ESLEMAX);
++        ERR(ESNOSPC);
+     }
+ #endif
+ 
diff --git a/meta-oe/recipes-core/safec/safec/0048-adjust-bsearch_s-error-messages-to-qsort_s.patch b/meta-oe/recipes-core/safec/safec/0048-adjust-bsearch_s-error-messages-to-qsort_s.patch
new file mode 100644
index 000000000..ad1480f9c
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0048-adjust-bsearch_s-error-messages-to-qsort_s.patch
@@ -0,0 +1,96 @@ 
+From c3fa0b9e75a3f9b45dc6b993ffb01f1638c7d146 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Mon, 8 Nov 2021 18:06:45 +0100
+Subject: [PATCH] adjust bsearch_s error messages to qsort_s
+
+---
+ include/safe_lib.h     | 6 +++---
+ src/misc/bsearch_s.c   | 9 +++++----
+ tests/test_bsearch_s.c | 4 ++--
+ 3 files changed, 10 insertions(+), 9 deletions(-)
+
+diff --git a/include/safe_lib.h b/include/safe_lib.h
+index 73f2172b..30e022e3 100644
+--- a/include/safe_lib.h
++++ b/include/safe_lib.h
+@@ -179,7 +179,7 @@ _bsearch_s_chk(const void *key, const void *base, rsize_t nmemb, rsize_t size,
+                void *context, const size_t basebos)
+     BOS_ATTR(nmemb && (_BOS_NULL(key) || _BOS_NULL(base) ||
+                        _BOS_ZERO(base, nmemb *size)),
+-             "empty buf or bufsize") BOS_OVR2_BUTNULL(base, nmemb *size)
++             "empty buf or bufsize") BOS_OVR2_BUTNULL(base, nmemb * size)
+         BOS_ATTR(nmemb && !compar, "empty compar");
+ #define bsearch_s(key, base, nmemb, size, compar, context)                     \
+     _bsearch_s_chk(key, base, nmemb, size, compar, context, BOS(base))
+@@ -188,8 +188,8 @@ EXTERN errno_t _qsort_s_chk(void *base, rsize_t nmemb, rsize_t size,
+                             int (*compar)(const void *x, const void *y,
+                                           void *context),
+                             void *context, const size_t basebos)
+-    BOS_ATTR(nmemb && (_BOS_NULL(base) || _BOS_ZERO(base, nmemb *size)),
+-             "empty buf or bufsize") BOS_OVR2_BUTNULL(base, nmemb *size)
++    BOS_ATTR(nmemb && (_BOS_NULL(base) || _BOS_ZERO(base, nmemb * size)),
++             "empty buf or bufsize") BOS_OVR2_BUTNULL(base, nmemb * size)
+         BOS_ATTR(nmemb && !compar, "empty compar");
+ #ifndef MINGW_HAS_SECURE_API
+ #define qsort_s(base, nmemb, size, compar, context)                            \
+diff --git a/src/misc/bsearch_s.c b/src/misc/bsearch_s.c
+index e40b908c..f65ce7f1 100644
+--- a/src/misc/bsearch_s.c
++++ b/src/misc/bsearch_s.c
+@@ -80,7 +80,7 @@
+  * @pre nmemb or size shall not be greater than RSIZE_MAX_MEM.
+  *
+  *    If the array contains several elements that compar would indicate as
+- * equal to the element searched for, then it is unspecified which element the
++ *    equal to the element searched for, then it is unspecified which element the
+  *    function will return as the result.
+  *
+  * @return Pointer to an element in the array that compares equal to *key, or
+@@ -100,6 +100,7 @@
+  * errno values:
+  *   ESNULLP   when key, base or compar are a NULL pointer, and nmemb is > 0
+  *   ESLEMAX   when nmemb or size > RSIZE_MAX_MEM
++ *   ESNOSPC   when nmemb * size > sizeof base
+  *
+  * @see
+  *    qsort_s()
+@@ -128,7 +129,7 @@ _bsearch_s_chk(const void *key, const void *base, rsize_t nmemb, rsize_t size,
+     if (basebos == BOS_UNKNOWN) {
+         if (unlikely(nmemb > RSIZE_MAX_MEM || size > RSIZE_MAX_MEM)) {
+             invoke_safe_mem_constraint_handler(
+-                "bsearch_s: nmemb/size exceeds max", (void *)base, ESLEMAX);
++                "bsearch_s: nmemb or size exceeds max", (void *)base, ESLEMAX);
+             errno = ESLEMAX;
+             return NULL;
+         }
+@@ -137,8 +138,8 @@ _bsearch_s_chk(const void *key, const void *base, rsize_t nmemb, rsize_t size,
+         rsize_t basesz = nmemb * size;
+         if (unlikely(basesz > basebos)) {
+             invoke_safe_mem_constraint_handler(
+-                "bsearch_s: nmemb*size exceeds base", (void *)base, ESLEMAX);
+-            errno = ESLEMAX;
++                "bsearch_s: nmemb*size exceeds sizeof base", (void *)base, ESNOSPC);
++            errno = ESNOSPC;
+             return NULL;
+         }
+ #ifdef HAVE_WARN_DMAX
+diff --git a/tests/test_bsearch_s.c b/tests/test_bsearch_s.c
+index 304e80a8..8801333d 100644
+--- a/tests/test_bsearch_s.c
++++ b/tests/test_bsearch_s.c
+@@ -77,13 +77,13 @@ int test_bsearch_s(void) {
+ 
+     EXPECT_BOS("base overflow")
+     vitem = bsearch_s(&key, array, RSIZE_MAX_MEM + 1, sizeof(array[0]), comp, NULL);
+-    ERRNO_MSVC(ESLEMAX, EOF);
++    ERRNO_MSVC(ESNOSPC, EOF);
+     if (!use_msvcrt)
+         PTRNULL(vitem);
+ 
+     EXPECT_BOS("base overflow")
+     vitem = bsearch_s(&key, array, LEN, RSIZE_MAX_MEM + 1, comp, NULL);
+-    ERRNO_MSVC(ESLEMAX, EOF);
++    ERRNO_MSVC(ESNOSPC, EOF);
+     if (!use_msvcrt)
+         PTRNULL(vitem);
+ #endif
diff --git a/meta-oe/recipes-core/safec/safec/0049-add-safec_-prefix-for-internal-printf-function.patch b/meta-oe/recipes-core/safec/safec/0049-add-safec_-prefix-for-internal-printf-function.patch
new file mode 100644
index 000000000..057e42d93
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0049-add-safec_-prefix-for-internal-printf-function.patch
@@ -0,0 +1,572 @@ 
+From b4a1e3c3844fe22eca05d62b44eb5588336891c4 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Mon, 8 Nov 2021 19:22:27 +0100
+Subject: [PATCH] add safec_ prefix for internal printf function
+
+using _ is reserved
+---
+ src/io/fprintf_s.c     |   2 +-
+ src/io/printf_s.c      |   2 +-
+ src/io/vfprintf_s.c    |   2 +-
+ src/safeclib_private.h |  22 +++---
+ src/str/vsnprintf_s.c  | 156 ++++++++++++++++++++++-------------------
+ 5 files changed, 97 insertions(+), 87 deletions(-)
+
+diff --git a/src/io/fprintf_s.c b/src/io/fprintf_s.c
+index e580d2e5..446471d5 100644
+--- a/src/io/fprintf_s.c
++++ b/src/io/fprintf_s.c
+@@ -95,7 +95,7 @@ EXPORT int fprintf_s(FILE *restrict stream, const char *restrict fmt, ...) {
+     errno = 0;
+     wrap.arg = stream;
+     va_start(ap, fmt);
+-    ret = __vsnprintf_s(_out_fchar, (char*)&wrap, (rsize_t)-1, fmt, ap);
++    ret = safec_vsnprintf_s(safec_out_fchar, (char*)&wrap, (rsize_t)-1, fmt, ap);
+     va_end(ap);
+ 
+     if (unlikely(ret < 0 && errno != 0)) {
+diff --git a/src/io/printf_s.c b/src/io/printf_s.c
+index b0d1fa62..babc1c9a 100644
+--- a/src/io/printf_s.c
++++ b/src/io/printf_s.c
+@@ -88,7 +88,7 @@ EXPORT int printf_s(const char *restrict fmt, ...) {
+     }
+     
+     va_start(va, fmt);
+-    ret = __vsnprintf_s(_out_char, buffer, (rsize_t)-1, fmt, va);
++    ret = safec_vsnprintf_s(safec_out_char, buffer, (rsize_t)-1, fmt, va);
+     va_end(va);
+ 
+     if (unlikely(ret < 0 && errno != 0)) {
+diff --git a/src/io/vfprintf_s.c b/src/io/vfprintf_s.c
+index 92d71cc3..e37897e5 100644
+--- a/src/io/vfprintf_s.c
++++ b/src/io/vfprintf_s.c
+@@ -104,7 +104,7 @@ EXPORT int vfprintf_s(FILE *restrict stream, const char *restrict fmt,
+     }
+ #else
+     wrap.arg = stream;
+-    ret = __vsnprintf_s(_out_fchar, (char*)&wrap, (rsize_t)-1, fmt, ap);
++    ret = safec_vsnprintf_s(safec_out_fchar, (char*)&wrap, (rsize_t)-1, fmt, ap);
+ 
+     if (unlikely(ret < 0 && errno != 0)) {
+         char errstr[128] = "vfprintf_s: ";
+diff --git a/src/safeclib_private.h b/src/safeclib_private.h
+index 355bf164..8dc59d12 100644
+--- a/src/safeclib_private.h
++++ b/src/safeclib_private.h
+@@ -655,8 +655,9 @@ typedef struct {
+ } out_fct_wrap_type;
+ 
+ // internal buffer output
+-static inline void _out_buffer(char character, void *buffer, size_t idx,
+-                               size_t maxlen) {
++static inline void safec_out_buffer(char character, void *buffer, size_t idx,
++                                    size_t maxlen)
++{
+     if (idx < maxlen) {
+         ((char *)buffer)[idx] = character;
+     } else {
+@@ -666,8 +667,9 @@ static inline void _out_buffer(char character, void *buffer, size_t idx,
+ }
+ 
+ // internal putchar wrapper
+-static inline void _out_char(char character, void *buffer, size_t idx,
+-                             size_t maxlen) {
++static inline void safec_out_char(char character, void *buffer, size_t idx,
++                                  size_t maxlen)
++{
+     (void)buffer;
+     (void)idx;
+     (void)maxlen;
+@@ -681,8 +683,8 @@ static inline void _out_char(char character, void *buffer, size_t idx,
+ }
+ 
+ #ifndef __KERNEL__
+-// special-case of _out_fct for fprintf_s
+-static inline void _out_fchar(char character, void *wrap, size_t idx,
++// special-case of safec_out_fct for fprintf_s
++static inline void safec_out_fchar(char character, void *wrap, size_t idx,
+                              size_t maxlen) {
+     (void)idx;
+     (void)maxlen;
+@@ -692,8 +694,8 @@ static inline void _out_fchar(char character, void *wrap, size_t idx,
+ #endif
+ 
+ // internal output function wrapper
+-static inline void _out_fct(char character, void *wrap, size_t idx,
+-                            size_t maxlen) {
++static inline void safec_out_fct(char character, void *wrap, size_t idx,
++                                 size_t maxlen) {
+     (void)idx;
+     (void)maxlen;
+     if (character) {
+@@ -702,7 +704,7 @@ static inline void _out_fct(char character, void *wrap, size_t idx,
+     }
+ }
+ // mingw has a _vsnprintf_s
+-int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+-                 const char *format, va_list va);
++int safec_vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
++                      const char *format, va_list va);
+ 
+ #endif /* __SAFECLIB_PRIVATE_H__ */
+diff --git a/src/str/vsnprintf_s.c b/src/str/vsnprintf_s.c
+index 0e758967..06a579e4 100644
+--- a/src/str/vsnprintf_s.c
++++ b/src/str/vsnprintf_s.c
+@@ -164,7 +164,8 @@
+ // internal secure strlen
+ // \return The length of the string (excluding the terminating 0) limited by
+ // 'maxsize'
+-static inline unsigned int _strnlen_s(const char *str, size_t maxsize) {
++static inline unsigned int safec_strnlen_s(const char *str, size_t maxsize)
++{
+     const char *s;
+     for (s = str; *s && maxsize--; ++s)
+         ;
+@@ -173,28 +174,30 @@ static inline unsigned int _strnlen_s(const char *str, size_t maxsize) {
+ 
+ // internal test if char is a digit (0-9)
+ // \return true if char is a digit
+-static inline bool _is_digit(char ch) { return (ch >= '0') && (ch <= '9'); }
++static inline bool safec_is_digit(char ch) { return (ch >= '0') && (ch <= '9'); }
+ 
+ // internal ASCII string to unsigned int conversion
+-static unsigned int _atoi(const char **str) {
++static unsigned int safec_atoi(const char **str)
++{
+     unsigned int i = 0U;
+-    while (_is_digit(**str)) {
++    while (safec_is_digit(**str)) {
+         i = i * 10U + (unsigned int)(*((*str)++) - '0');
+     }
+     return i;
+ }
+ 
+ // output the specified string in reverse, taking care of any zero-padding
+-static size_t _out_rev(out_fct_type out, char *buffer, size_t idx,
+-                       size_t maxlen, const char *buf, size_t len,
+-                       unsigned int width, unsigned int flags) {
++static size_t safec_out_rev(out_fct_type out, char *buffer, size_t idx,
++                            size_t maxlen, const char *buf, size_t len,
++                            unsigned int width, unsigned int flags)
++{
+     const size_t start_idx = idx;
+ 
+     // pad spaces up to given width
+     if (!(flags & FLAGS_LEFT) && !(flags & FLAGS_ZEROPAD)) {
+         for (size_t i = len; i < width; i++) {
+             out(' ', buffer, idx++, maxlen);
+-            if (out == _out_buffer && idx > maxlen)
++            if (out == safec_out_buffer && idx > maxlen)
+                 return -(ESNOSPC);
+         }
+     }
+@@ -202,7 +205,7 @@ static size_t _out_rev(out_fct_type out, char *buffer, size_t idx,
+     // reverse string
+     while (len) {
+         out(buf[--len], buffer, idx++, maxlen);
+-        if (out == _out_buffer && idx > maxlen)
++        if (out == safec_out_buffer && idx > maxlen)
+             return -(ESNOSPC);
+     }
+ 
+@@ -210,7 +213,7 @@ static size_t _out_rev(out_fct_type out, char *buffer, size_t idx,
+     if (flags & FLAGS_LEFT) {
+         while (idx - start_idx < width) {
+             out(' ', buffer, idx++, maxlen);
+-            if (out == _out_buffer && idx > maxlen)
++            if (out == safec_out_buffer && idx > maxlen)
+                 return -(ESNOSPC);
+         }
+     }
+@@ -219,10 +222,11 @@ static size_t _out_rev(out_fct_type out, char *buffer, size_t idx,
+ }
+ 
+ // internal itoa format
+-static size_t _ntoa_format(out_fct_type out, char *buffer, size_t idx,
+-                           size_t maxlen, char *buf, size_t len, bool negative,
+-                           unsigned int base, unsigned int prec,
+-                           unsigned int width, unsigned int flags) {
++static size_t safec_ntoa_format(out_fct_type out, char *buffer, size_t idx,
++                                size_t maxlen, char *buf, size_t len, bool negative,
++                                unsigned int base, unsigned int prec,
++                                unsigned int width, unsigned int flags)
++{
+     // pad leading zeros
+     if (!(flags & FLAGS_LEFT)) {
+         if (width && (flags & FLAGS_ZEROPAD) &&
+@@ -276,14 +280,15 @@ static size_t _ntoa_format(out_fct_type out, char *buffer, size_t idx,
+         return -ESLEMAX;
+     }
+ 
+-    return _out_rev(out, buffer, idx, maxlen, buf, len, width, flags);
++    return safec_out_rev(out, buffer, idx, maxlen, buf, len, width, flags);
+ }
+ 
+ // internal itoa for 'long' type
+-static size_t _ntoa_long(out_fct_type out, char *buffer, size_t idx,
+-                         size_t maxlen, unsigned long value, bool negative,
+-                         unsigned long base, unsigned int prec,
+-                         unsigned int width, unsigned int flags) {
++static size_t safec_ntoa_long(out_fct_type out, char *buffer, size_t idx,
++                              size_t maxlen, unsigned long value, bool negative,
++                              unsigned long base, unsigned int prec,
++                              unsigned int width, unsigned int flags)
++{
+     char buf[PRINTF_NTOA_BUFFER_SIZE];
+     size_t len = 0U;
+ 
+@@ -303,17 +308,18 @@ static size_t _ntoa_long(out_fct_type out, char *buffer, size_t idx,
+         } while (value && (len < PRINTF_NTOA_BUFFER_SIZE));
+     }
+ 
+-    return _ntoa_format(out, buffer, idx, maxlen, buf, len, negative,
+-                        (unsigned int)base, prec, width, flags);
++    return safec_ntoa_format(out, buffer, idx, maxlen, buf, len, negative,
++                             (unsigned int)base, prec, width, flags);
+ }
+ 
+ // internal itoa for 'long long' type
+ #if defined(PRINTF_SUPPORT_LONG_LONG)
+-static size_t _ntoa_long_long(out_fct_type out, char *buffer, size_t idx,
+-                              size_t maxlen, unsigned long long value,
+-                              bool negative, unsigned long long base,
+-                              unsigned int prec, unsigned int width,
+-                              unsigned int flags) {
++static size_t safec_ntoa_long_long(out_fct_type out, char *buffer, size_t idx,
++                                   size_t maxlen, unsigned long long value,
++                                   bool negative, unsigned long long base,
++                                   unsigned int prec, unsigned int width,
++                                   unsigned int flags)
++{
+     char buf[PRINTF_NTOA_BUFFER_SIZE];
+     size_t len = 0U;
+ 
+@@ -333,25 +339,26 @@ static size_t _ntoa_long_long(out_fct_type out, char *buffer, size_t idx,
+         } while (value && (len < PRINTF_NTOA_BUFFER_SIZE));
+     }
+ 
+-    return _ntoa_format(out, buffer, idx, maxlen, buf, len, negative,
+-                        (unsigned int)base, prec, width, flags);
++    return safec_ntoa_format(out, buffer, idx, maxlen, buf, len, negative,
++                             (unsigned int)base, prec, width, flags);
+ }
+ #endif // PRINTF_SUPPORT_LONG_LONG
+ 
+ #if defined(PRINTF_SUPPORT_FLOAT)
+ 
+ #if defined(PRINTF_SUPPORT_EXPONENTIAL)
+-// forward declaration so that _ftoa can switch to exp notation for values >
++// forward declaration so that safec_ftoa can switch to exp notation for values >
+ // PRINTF_MAX_FLOAT
+-static size_t _etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
+-                    double value, unsigned int prec, unsigned int width,
+-                    unsigned int flags);
++static size_t safec_etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
++                         double value, unsigned int prec, unsigned int width,
++                         unsigned int flags);
+ #endif
+ 
+ // internal ftoa for fixed decimal floating point
+-static size_t _ftoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
+-                    double value, unsigned int prec, unsigned int width,
+-                    unsigned int flags) {
++static size_t safec_ftoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
++                         double value, unsigned int prec, unsigned int width,
++                         unsigned int flags)
++{
+     char buf[PRINTF_FTOA_BUFFER_SIZE];
+     size_t len = 0U;
+     double tmp;
+@@ -367,11 +374,11 @@ static size_t _ftoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
+ 
+     // test for special values
+     if (value != value)
+-        return _out_rev(out, buffer, idx, maxlen, "nan", 3, width, flags);
++        return safec_out_rev(out, buffer, idx, maxlen, "nan", 3, width, flags);
+     if (value < -DBL_MAX)
+-        return _out_rev(out, buffer, idx, maxlen, "fni-", 4, width, flags);
++        return safec_out_rev(out, buffer, idx, maxlen, "fni-", 4, width, flags);
+     if (value > DBL_MAX)
+-        return _out_rev(out, buffer, idx, maxlen,
++        return safec_out_rev(out, buffer, idx, maxlen,
+                         (flags & FLAGS_PLUS) ? "fni+" : "fni",
+                         (flags & FLAGS_PLUS) ? 4U : 3U, width, flags);
+ 
+@@ -380,7 +387,7 @@ static size_t _ftoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
+     // could be 100s of characters overflowing your buffers == bad
+     if ((value > PRINTF_MAX_FLOAT) || (value < -PRINTF_MAX_FLOAT)) {
+ #if defined(PRINTF_SUPPORT_EXPONENTIAL)
+-        return _etoa(out, buffer, idx, maxlen, value, prec, width, flags);
++        return safec_etoa(out, buffer, idx, maxlen, value, prec, width, flags);
+ #else
+         return 0U;
+ #endif
+@@ -476,15 +483,16 @@ static size_t _ftoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
+         }
+     }
+ 
+-    return _out_rev(out, buffer, idx, maxlen, buf, len, width, flags);
++    return safec_out_rev(out, buffer, idx, maxlen, buf, len, width, flags);
+ }
+ 
+ #if defined(PRINTF_SUPPORT_EXPONENTIAL)
+ // internal ftoa variant for exponential floating-point type, contributed by
+ // Martijn Jasperse <m.jasperse@gmail.com>
+-static size_t _etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
+-                    double value, unsigned int prec, unsigned int width,
+-                    unsigned int flags) {
++static size_t safec_etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
++                         double value, unsigned int prec, unsigned int width,
++                         unsigned int flags)
++{
+     union {
+         uint64_t U;
+         double F;
+@@ -495,7 +503,7 @@ static size_t _etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
+ 
+     // check for NaN and special values
+     if ((value != value) || (value > DBL_MAX) || (value < -DBL_MAX)) {
+-        return _ftoa(out, buffer, idx, maxlen, value, prec, width, flags);
++        return safec_ftoa(out, buffer, idx, maxlen, value, prec, width, flags);
+     }
+ 
+     // determine the sign
+@@ -549,7 +557,7 @@ static size_t _etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
+             } else {
+                 prec = 0;
+             }
+-            flags |= FLAGS_PRECISION; // make sure _ftoa respects precision
++            flags |= FLAGS_PRECISION; // make sure safec_ftoa respects precision
+             // no characters in exponent
+             minwidth = 0U;
+             expval = 0;
+@@ -584,7 +592,7 @@ static size_t _etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
+     // output the floating part
+     {
+         const size_t start_idx = idx;
+-        idx = _ftoa(out, buffer, idx, maxlen, negative ? -value : value, prec,
++        idx = safec_ftoa(out, buffer, idx, maxlen, negative ? -value : value, prec,
+                     fwidth, flags & ~FLAGS_ADAPT_EXP);
+ 
+         // output the exponent part
+@@ -592,7 +600,7 @@ static size_t _etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
+             // output the exponential symbol
+             out((flags & FLAGS_UPPERCASE) ? 'E' : 'e', buffer, idx++, maxlen);
+             // output the exponent value
+-            idx = _ntoa_long(out, buffer, idx, maxlen,
++            idx = safec_ntoa_long(out, buffer, idx, maxlen,
+                              (expval < 0) ? -expval : expval, expval < 0, 10, 0,
+                              minwidth - 1, FLAGS_ZEROPAD | FLAGS_PLUS);
+             // might need to right-pad spaces
+@@ -610,8 +618,8 @@ static size_t _etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
+ // internal vsnprintf, extended for _s.
+ // already checked in the caller
+ // mingw has a _vsnprintf_s(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,va_list _ArgList);
+-int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+-                        const char *format, va_list va)
++int safec_vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
++                      const char *format, va_list va)
+ {
+     unsigned int flags, width, precision, n;
+     size_t idx = 0U;
+@@ -667,8 +675,8 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+ 
+         // evaluate width field
+         width = 0U;
+-        if (_is_digit(*format)) {
+-            width = _atoi(&format);
++        if (safec_is_digit(*format)) {
++            width = safec_atoi(&format);
+         } else if (*format == '*') {
+             const int w = va_arg(va, int);
+             if (w < 0) {
+@@ -685,8 +693,8 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+         if (*format == '.') {
+             flags |= FLAGS_PRECISION;
+             format++;
+-            if (_is_digit(*format)) {
+-                precision = _atoi(&format);
++            if (safec_is_digit(*format)) {
++                precision = safec_atoi(&format);
+             } else if (*format == '*') {
+                 const int prec = (int)va_arg(va, int);
+                 precision = prec > 0 ? (unsigned int)prec : 0U;
+@@ -775,14 +783,14 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+                 if (flags & FLAGS_LONG_LONG) {
+ #if defined(PRINTF_SUPPORT_LONG_LONG)
+                     const long long value = va_arg(va, long long);
+-                    idx = _ntoa_long_long(
++                    idx = safec_ntoa_long_long(
+                         out, buffer, idx, bufsize,
+                         (unsigned long long)(value > 0 ? value : 0 - value),
+                         value < 0, base, precision, width, flags);
+ #endif
+                 } else if (flags & FLAGS_LONG) {
+                     const long value = va_arg(va, long);
+-                    idx = _ntoa_long(
++                    idx = safec_ntoa_long(
+                         out, buffer, idx, bufsize,
+                         (unsigned long)(value > 0 ? value : 0 - value),
+                         value < 0, base, precision, width, flags);
+@@ -791,7 +799,7 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+                         (flags & FLAGS_CHAR)    ? (char)va_arg(va, int)
+                         : (flags & FLAGS_SHORT) ? (short int)va_arg(va, int)
+                                                 : va_arg(va, int);
+-                    idx = _ntoa_long(
++                    idx = safec_ntoa_long(
+                         out, buffer, idx, bufsize,
+                         (unsigned int)(value > 0 ? value : 0 - value),
+                         value < 0, base, precision, width, flags);
+@@ -800,12 +808,12 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+                 // unsigned
+                 if (flags & FLAGS_LONG_LONG) {
+ #if defined(PRINTF_SUPPORT_LONG_LONG)
+-                    idx = _ntoa_long_long(out, buffer, idx, bufsize,
++                    idx = safec_ntoa_long_long(out, buffer, idx, bufsize,
+                                           va_arg(va, unsigned long long), false,
+                                           base, precision, width, flags);
+ #endif
+                 } else if (flags & FLAGS_LONG) {
+-                    idx = _ntoa_long(out, buffer, idx, bufsize,
++                    idx = safec_ntoa_long(out, buffer, idx, bufsize,
+                                      va_arg(va, unsigned long), false, base,
+                                      precision, width, flags);
+                 } else {
+@@ -815,7 +823,7 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+                         : (flags & FLAGS_SHORT)
+                             ? (unsigned short int)va_arg(va, unsigned int)
+                             : va_arg(va, unsigned int);
+-                    idx = _ntoa_long(out, buffer, idx, bufsize, value, false,
++                    idx = safec_ntoa_long(out, buffer, idx, bufsize, value, false,
+                                      base, precision, width, flags);
+                 }
+             }
+@@ -827,7 +835,7 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+         case 'F':
+             if (*format == 'F')
+                 flags |= FLAGS_UPPERCASE;
+-            idx = _ftoa(out, buffer, idx, bufsize, va_arg(va, double), precision,
++            idx = safec_ftoa(out, buffer, idx, bufsize, va_arg(va, double), precision,
+                         width, flags);
+             format++;
+             break;
+@@ -840,7 +848,7 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+                 flags |= FLAGS_ADAPT_EXP;
+             if ((*format == 'E') || (*format == 'G'))
+                 flags |= FLAGS_UPPERCASE;
+-            idx = _etoa(out, buffer, idx, bufsize, va_arg(va, double), precision,
++            idx = safec_etoa(out, buffer, idx, bufsize, va_arg(va, double), precision,
+                         width, flags);
+             format++;
+             break;
+@@ -852,19 +860,19 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+             if (!(flags & FLAGS_LEFT)) {
+                 while (l++ < width) {
+                     out(' ', buffer, idx++, bufsize);
+-                    if (out == _out_buffer && idx > bufsize)
++                    if (out == safec_out_buffer && idx > bufsize)
+                         return -(ESNOSPC);
+                 }
+             }
+             // char output
+             out((char)va_arg(va, int), buffer, idx++, bufsize);
+-            if (out == _out_buffer && idx > bufsize)
++            if (out == safec_out_buffer && idx > bufsize)
+                 return -(ESNOSPC);
+             // post padding
+             if (flags & FLAGS_LEFT) {
+                 while (l++ < width) {
+                     out(' ', buffer, idx++, bufsize);
+-                    if (out == _out_buffer && idx > bufsize)
++                    if (out == safec_out_buffer && idx > bufsize)
+                         return -(ESNOSPC);
+                 }
+             }
+@@ -880,7 +888,7 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+                                                    NULL, ESNULLP);
+                 return -(ESNULLP);
+             }
+-            l = _strnlen_s(p, precision ? precision : (size_t)-1);
++            l = safec_strnlen_s(p, precision ? precision : (size_t)-1);
+             if (l + idx > bufsize) {
+                 invoke_safe_str_constraint_handler("vsnprintf_s: %s arg exceeds dmax",
+                                                    NULL, ESNOSPC);
+@@ -893,21 +901,21 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+             if (!(flags & FLAGS_LEFT)) {
+                 while (l++ < width) {
+                     out(' ', buffer, idx++, bufsize);
+-                    if (out == _out_buffer && idx > bufsize)
++                    if (out == safec_out_buffer && idx > bufsize)
+                         return -(ESNOSPC);
+                 }
+             }
+             // string output
+             while ((*p != 0) && (!(flags & FLAGS_PRECISION) || precision--)) {
+                 out(*(p++), buffer, idx++, bufsize);
+-                if (out == _out_buffer && idx > bufsize)
++                if (out == safec_out_buffer && idx > bufsize)
+                     return -(ESNOSPC);
+             }
+             // post padding
+             if (flags & FLAGS_LEFT) {
+                 while (l++ < width) {
+                     out(' ', buffer, idx++, bufsize);
+-                    if (out == _out_buffer && idx > bufsize)
++                    if (out == safec_out_buffer && idx > bufsize)
+                         return -(ESNOSPC);
+                 }
+             }
+@@ -921,12 +929,12 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+             flags |= FLAGS_ZEROPAD | FLAGS_UPPERCASE;
+ #if defined(PRINTF_SUPPORT_LONG_LONG)
+             if (sizeof(uintptr_t) == sizeof(long long)) {
+-                idx = _ntoa_long_long(out, buffer, idx, bufsize,
++                idx = safec_ntoa_long_long(out, buffer, idx, bufsize,
+                                       arg, false, 16U,
+                                       precision, width, flags);
+             } else {
+ #endif
+-                idx = _ntoa_long(out, buffer, idx, bufsize,
++                idx = safec_ntoa_long(out, buffer, idx, bufsize,
+                                  (unsigned long)arg,
+                                  false, 16U, precision, width, flags);
+ #if defined(PRINTF_SUPPORT_LONG_LONG)
+@@ -938,7 +946,7 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+ 
+         case '%':
+             out('%', buffer, idx++, bufsize);
+-            if (out == _out_buffer && idx > bufsize)
++            if (out == safec_out_buffer && idx > bufsize)
+                 return -(ESNOSPC);
+             format++;
+             break;
+@@ -950,7 +958,7 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+ 
+         default:
+             out(*format, buffer, idx++, bufsize);
+-            if (out == _out_buffer && idx > bufsize)
++            if (out == safec_out_buffer && idx > bufsize)
+                 return -(ESNOSPC);
+             format++;
+             break;
+@@ -959,7 +967,7 @@ int __vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+ 
+     // termination
+     out((char)0, buffer, idx < bufsize ? idx : bufsize - 1U, bufsize);
+-    if (out == _out_buffer && idx > bufsize)
++    if (out == safec_out_buffer && idx > bufsize)
+         return -(ESNOSPC);
+ 
+     // return written chars without terminating \0
+@@ -1062,7 +1070,7 @@ EXPORT int _vsnprintf_s_chk(char *restrict dest, rsize_t dmax,
+     }
+ 
+     errno = 0;
+-    ret = __vsnprintf_s(_out_buffer, dest, dmax, fmt, ap);
++    ret = safec_vsnprintf_s(safec_out_buffer, dest, dmax, fmt, ap);
+ 
+     //if (unlikely(ret < 0)) {
+     //    char errstr[128] = "vsnprintf_s: ";
diff --git a/meta-oe/recipes-core/safec/safec/0050-printf-add-name-of-failing-function.patch b/meta-oe/recipes-core/safec/safec/0050-printf-add-name-of-failing-function.patch
new file mode 100644
index 000000000..5ca5a3a86
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0050-printf-add-name-of-failing-function.patch
@@ -0,0 +1,499 @@ 
+From 4f9f1060509408b8c725c249b1649d24a81468e7 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Wed, 10 Nov 2021 07:23:51 +0100
+Subject: [PATCH] printf: add name of failing function
+
+---
+ src/io/fprintf_s.c     |   2 +-
+ src/io/printf_s.c      |   2 +-
+ src/io/vfprintf_s.c    |   2 +-
+ src/safeclib_private.h |   9 +-
+ src/str/vsnprintf_s.c  | 201 ++++++++++++++++++++++++++++++-----------
+ 5 files changed, 155 insertions(+), 61 deletions(-)
+
+diff --git a/src/io/fprintf_s.c b/src/io/fprintf_s.c
+index 446471d5..954718a8 100644
+--- a/src/io/fprintf_s.c
++++ b/src/io/fprintf_s.c
+@@ -95,7 +95,7 @@ EXPORT int fprintf_s(FILE *restrict stream, const char *restrict fmt, ...) {
+     errno = 0;
+     wrap.arg = stream;
+     va_start(ap, fmt);
+-    ret = safec_vsnprintf_s(safec_out_fchar, (char*)&wrap, (rsize_t)-1, fmt, ap);
++    ret = safec_vsnprintf_s(safec_out_fchar, "fprintf_s", (char*)&wrap, (rsize_t)-1, fmt, ap);
+     va_end(ap);
+ 
+     if (unlikely(ret < 0 && errno != 0)) {
+diff --git a/src/io/printf_s.c b/src/io/printf_s.c
+index babc1c9a..20ca299c 100644
+--- a/src/io/printf_s.c
++++ b/src/io/printf_s.c
+@@ -88,7 +88,7 @@ EXPORT int printf_s(const char *restrict fmt, ...) {
+     }
+     
+     va_start(va, fmt);
+-    ret = safec_vsnprintf_s(safec_out_char, buffer, (rsize_t)-1, fmt, va);
++    ret = safec_vsnprintf_s(safec_out_char, "printf_s", buffer, (rsize_t)-1, fmt, va);
+     va_end(va);
+ 
+     if (unlikely(ret < 0 && errno != 0)) {
+diff --git a/src/io/vfprintf_s.c b/src/io/vfprintf_s.c
+index e37897e5..ce6dbdb5 100644
+--- a/src/io/vfprintf_s.c
++++ b/src/io/vfprintf_s.c
+@@ -104,7 +104,7 @@ EXPORT int vfprintf_s(FILE *restrict stream, const char *restrict fmt,
+     }
+ #else
+     wrap.arg = stream;
+-    ret = safec_vsnprintf_s(safec_out_fchar, (char*)&wrap, (rsize_t)-1, fmt, ap);
++    ret = safec_vsnprintf_s(safec_out_fchar, "vfprintf_s", (char*)&wrap, (rsize_t)-1, fmt, ap);
+ 
+     if (unlikely(ret < 0 && errno != 0)) {
+         char errstr[128] = "vfprintf_s: ";
+diff --git a/src/safeclib_private.h b/src/safeclib_private.h
+index 8dc59d12..9f36368f 100644
+--- a/src/safeclib_private.h
++++ b/src/safeclib_private.h
+@@ -598,6 +598,9 @@ typedef unsigned long uintptr_t;
+ #define vswprintf(dest, dmax, fmt, ap) vswprintf(dest, fmt, ap)
+ #endif
+ 
++#define wcstombs_s(retvalp, dest, dmax, src, len)                              \
++    _wcstombs_s_chk(retvalp, dest, dmax, src, len, BOS(dest))
++
+ /* mingw64 3.0.1
+    has strtok_s, wcstok_s, and vsnprintf_s, which we patch in the tests. */
+ #undef _ENC_W16
+@@ -703,8 +706,8 @@ static inline void safec_out_fct(char character, void *wrap, size_t idx,
+         ((out_fct_wrap_type *)wrap)->fct(character, ((out_fct_wrap_type *)wrap)->arg);
+     }
+ }
+-// mingw has a _vsnprintf_s
+-int safec_vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+-                      const char *format, va_list va);
++// mingw has a _vsnprintf_s. we use our own.
++int safec_vsnprintf_s(out_fct_type out, const char *funcname, char *buffer,
++                      const size_t bufsize, const char *format, va_list va);
+ 
+ #endif /* __SAFECLIB_PRIVATE_H__ */
+diff --git a/src/str/vsnprintf_s.c b/src/str/vsnprintf_s.c
+index 06a579e4..e1716f25 100644
+--- a/src/str/vsnprintf_s.c
++++ b/src/str/vsnprintf_s.c
+@@ -65,14 +65,18 @@
+ // THE SOFTWARE.
+ //
+ // \brief Tiny printf, sprintf and (v)snprintf implementation, optimized for
+-// speed on
+-//        embedded systems with a very limited resources. These routines are
+-//        thread safe and reentrant! Use this instead of the bloated
+-//        standard/newlib printf cause these use malloc for printf (and may not
+-//        be thread safe).
++//        speed on embedded systems with a very limited
++//        resources. These routines are thread safe and reentrant! Use
++//        this instead of the bloated standard/newlib printf cause
++//        these use malloc for printf (and may not be thread safe).
+ //
+ ///////////////////////////////////////////////////////////////////////////////
+ 
++/* safelib extensions:
++ * added support for _s
++ * %lc, %ls widechar conversions
++ */
++
+ #include <stdbool.h>
+ #include <stdint.h>
+ 
+@@ -222,7 +226,8 @@ static size_t safec_out_rev(out_fct_type out, char *buffer, size_t idx,
+ }
+ 
+ // internal itoa format
+-static size_t safec_ntoa_format(out_fct_type out, char *buffer, size_t idx,
++static size_t safec_ntoa_format(out_fct_type out, const char *funcname,
++				char *buffer, size_t idx,
+                                 size_t maxlen, char *buf, size_t len, bool negative,
+                                 unsigned int base, unsigned int prec,
+                                 unsigned int width, unsigned int flags)
+@@ -275,8 +280,9 @@ static size_t safec_ntoa_format(out_fct_type out, char *buffer, size_t idx,
+         }
+     }
+     if (width > 2147483614) {
+-        invoke_safe_str_constraint_handler("vsnprintf_s: width exceeds max",
+-                                           NULL, ESLEMAX);
++        char msg[80];
++        snprintf(msg, sizeof msg, "%s: width exceeds max", funcname);
++        invoke_safe_str_constraint_handler(msg, buf, ESLEMAX);
+         return -ESLEMAX;
+     }
+ 
+@@ -284,7 +290,8 @@ static size_t safec_ntoa_format(out_fct_type out, char *buffer, size_t idx,
+ }
+ 
+ // internal itoa for 'long' type
+-static size_t safec_ntoa_long(out_fct_type out, char *buffer, size_t idx,
++static size_t safec_ntoa_long(out_fct_type out,  const char *funcname,
++			      char *buffer, size_t idx,
+                               size_t maxlen, unsigned long value, bool negative,
+                               unsigned long base, unsigned int prec,
+                               unsigned int width, unsigned int flags)
+@@ -308,13 +315,14 @@ static size_t safec_ntoa_long(out_fct_type out, char *buffer, size_t idx,
+         } while (value && (len < PRINTF_NTOA_BUFFER_SIZE));
+     }
+ 
+-    return safec_ntoa_format(out, buffer, idx, maxlen, buf, len, negative,
++    return safec_ntoa_format(out, funcname, buffer, idx, maxlen, buf, len, negative,
+                              (unsigned int)base, prec, width, flags);
+ }
+ 
+ // internal itoa for 'long long' type
+ #if defined(PRINTF_SUPPORT_LONG_LONG)
+-static size_t safec_ntoa_long_long(out_fct_type out, char *buffer, size_t idx,
++static size_t safec_ntoa_long_long(out_fct_type out,  const char *funcname,
++				   char *buffer, size_t idx,
+                                    size_t maxlen, unsigned long long value,
+                                    bool negative, unsigned long long base,
+                                    unsigned int prec, unsigned int width,
+@@ -339,7 +347,7 @@ static size_t safec_ntoa_long_long(out_fct_type out, char *buffer, size_t idx,
+         } while (value && (len < PRINTF_NTOA_BUFFER_SIZE));
+     }
+ 
+-    return safec_ntoa_format(out, buffer, idx, maxlen, buf, len, negative,
++    return safec_ntoa_format(out, funcname, buffer, idx, maxlen, buf, len, negative,
+                              (unsigned int)base, prec, width, flags);
+ }
+ #endif // PRINTF_SUPPORT_LONG_LONG
+@@ -349,13 +357,15 @@ static size_t safec_ntoa_long_long(out_fct_type out, char *buffer, size_t idx,
+ #if defined(PRINTF_SUPPORT_EXPONENTIAL)
+ // forward declaration so that safec_ftoa can switch to exp notation for values >
+ // PRINTF_MAX_FLOAT
+-static size_t safec_etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
++static size_t safec_etoa(out_fct_type out,  const char *funcname,
++			 char *buffer, size_t idx, size_t maxlen,
+                          double value, unsigned int prec, unsigned int width,
+                          unsigned int flags);
+ #endif
+ 
+ // internal ftoa for fixed decimal floating point
+-static size_t safec_ftoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
++static size_t safec_ftoa(out_fct_type out,  const char *funcname,
++			 char *buffer, size_t idx, size_t maxlen,
+                          double value, unsigned int prec, unsigned int width,
+                          unsigned int flags)
+ {
+@@ -387,7 +397,7 @@ static size_t safec_ftoa(out_fct_type out, char *buffer, size_t idx, size_t maxl
+     // could be 100s of characters overflowing your buffers == bad
+     if ((value > PRINTF_MAX_FLOAT) || (value < -PRINTF_MAX_FLOAT)) {
+ #if defined(PRINTF_SUPPORT_EXPONENTIAL)
+-        return safec_etoa(out, buffer, idx, maxlen, value, prec, width, flags);
++        return safec_etoa(out, funcname, buffer, idx, maxlen, value, prec, width, flags);
+ #else
+         return 0U;
+ #endif
+@@ -489,7 +499,8 @@ static size_t safec_ftoa(out_fct_type out, char *buffer, size_t idx, size_t maxl
+ #if defined(PRINTF_SUPPORT_EXPONENTIAL)
+ // internal ftoa variant for exponential floating-point type, contributed by
+ // Martijn Jasperse <m.jasperse@gmail.com>
+-static size_t safec_etoa(out_fct_type out, char *buffer, size_t idx, size_t maxlen,
++static size_t safec_etoa(out_fct_type out, const char *funcname,
++			 char *buffer, size_t idx, size_t maxlen,
+                          double value, unsigned int prec, unsigned int width,
+                          unsigned int flags)
+ {
+@@ -503,7 +514,7 @@ static size_t safec_etoa(out_fct_type out, char *buffer, size_t idx, size_t maxl
+ 
+     // check for NaN and special values
+     if ((value != value) || (value > DBL_MAX) || (value < -DBL_MAX)) {
+-        return safec_ftoa(out, buffer, idx, maxlen, value, prec, width, flags);
++        return safec_ftoa(out, funcname, buffer, idx, maxlen, value, prec, width, flags);
+     }
+ 
+     // determine the sign
+@@ -592,15 +603,16 @@ static size_t safec_etoa(out_fct_type out, char *buffer, size_t idx, size_t maxl
+     // output the floating part
+     {
+         const size_t start_idx = idx;
+-        idx = safec_ftoa(out, buffer, idx, maxlen, negative ? -value : value, prec,
+-                    fwidth, flags & ~FLAGS_ADAPT_EXP);
++        idx = safec_ftoa(out, funcname, buffer, idx, maxlen,
++                         negative ? -value : value, prec, fwidth,
++                         flags & ~FLAGS_ADAPT_EXP);
+ 
+         // output the exponent part
+         if (minwidth) {
+             // output the exponential symbol
+             out((flags & FLAGS_UPPERCASE) ? 'E' : 'e', buffer, idx++, maxlen);
+             // output the exponent value
+-            idx = safec_ntoa_long(out, buffer, idx, maxlen,
++            idx = safec_ntoa_long(out, funcname, buffer, idx, maxlen,
+                              (expval < 0) ? -expval : expval, expval < 0, 10, 0,
+                              minwidth - 1, FLAGS_ZEROPAD | FLAGS_PLUS);
+             // might need to right-pad spaces
+@@ -618,8 +630,8 @@ static size_t safec_etoa(out_fct_type out, char *buffer, size_t idx, size_t maxl
+ // internal vsnprintf, extended for _s.
+ // already checked in the caller
+ // mingw has a _vsnprintf_s(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,va_list _ArgList);
+-int safec_vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+-                      const char *format, va_list va)
++int safec_vsnprintf_s(out_fct_type out, const char* funcname,
++                      char *buffer, const size_t bufsize, const char *format, va_list va)
+ {
+     unsigned int flags, width, precision, n;
+     size_t idx = 0U;
+@@ -784,14 +796,14 @@ int safec_vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+ #if defined(PRINTF_SUPPORT_LONG_LONG)
+                     const long long value = va_arg(va, long long);
+                     idx = safec_ntoa_long_long(
+-                        out, buffer, idx, bufsize,
++                        out, funcname, buffer, idx, bufsize,
+                         (unsigned long long)(value > 0 ? value : 0 - value),
+                         value < 0, base, precision, width, flags);
+ #endif
+                 } else if (flags & FLAGS_LONG) {
+                     const long value = va_arg(va, long);
+                     idx = safec_ntoa_long(
+-                        out, buffer, idx, bufsize,
++                        out, funcname, buffer, idx, bufsize,
+                         (unsigned long)(value > 0 ? value : 0 - value),
+                         value < 0, base, precision, width, flags);
+                 } else {
+@@ -800,7 +812,7 @@ int safec_vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+                         : (flags & FLAGS_SHORT) ? (short int)va_arg(va, int)
+                                                 : va_arg(va, int);
+                     idx = safec_ntoa_long(
+-                        out, buffer, idx, bufsize,
++                        out, funcname, buffer, idx, bufsize,
+                         (unsigned int)(value > 0 ? value : 0 - value),
+                         value < 0, base, precision, width, flags);
+                 }
+@@ -808,14 +820,15 @@ int safec_vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+                 // unsigned
+                 if (flags & FLAGS_LONG_LONG) {
+ #if defined(PRINTF_SUPPORT_LONG_LONG)
+-                    idx = safec_ntoa_long_long(out, buffer, idx, bufsize,
+-                                          va_arg(va, unsigned long long), false,
+-                                          base, precision, width, flags);
++                    idx = safec_ntoa_long_long(
++                        out, funcname, buffer, idx, bufsize,
++                        va_arg(va, unsigned long long), false, base, precision,
++                        width, flags);
+ #endif
+                 } else if (flags & FLAGS_LONG) {
+-                    idx = safec_ntoa_long(out, buffer, idx, bufsize,
+-                                     va_arg(va, unsigned long), false, base,
+-                                     precision, width, flags);
++                    idx = safec_ntoa_long(out, funcname, buffer, idx, bufsize,
++                                          va_arg(va, unsigned long), false,
++                                          base, precision, width, flags);
+                 } else {
+                     const unsigned int value =
+                         (flags & FLAGS_CHAR)
+@@ -823,8 +836,9 @@ int safec_vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+                         : (flags & FLAGS_SHORT)
+                             ? (unsigned short int)va_arg(va, unsigned int)
+                             : va_arg(va, unsigned int);
+-                    idx = safec_ntoa_long(out, buffer, idx, bufsize, value, false,
+-                                     base, precision, width, flags);
++                    idx = safec_ntoa_long(out, funcname, buffer, idx, bufsize,
++                                          value, false, base, precision, width,
++                                          flags);
+                 }
+             }
+             format++;
+@@ -835,8 +849,8 @@ int safec_vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+         case 'F':
+             if (*format == 'F')
+                 flags |= FLAGS_UPPERCASE;
+-            idx = safec_ftoa(out, buffer, idx, bufsize, va_arg(va, double), precision,
+-                        width, flags);
++            idx = safec_ftoa(out, funcname, buffer, idx, bufsize,
++                             va_arg(va, double), precision, width, flags);
+             format++;
+             break;
+ #if defined(PRINTF_SUPPORT_EXPONENTIAL)
+@@ -848,14 +862,31 @@ int safec_vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+                 flags |= FLAGS_ADAPT_EXP;
+             if ((*format == 'E') || (*format == 'G'))
+                 flags |= FLAGS_UPPERCASE;
+-            idx = safec_etoa(out, buffer, idx, bufsize, va_arg(va, double), precision,
+-                        width, flags);
++            idx = safec_etoa(out, funcname, buffer, idx, bufsize,
++                             va_arg(va, double), precision, width, flags);
+             format++;
+             break;
+ #endif // PRINTF_SUPPORT_EXPONENTIAL
+ #endif // PRINTF_SUPPORT_FLOAT
+         case 'c': {
+             unsigned int l = 1U;
++            char wstr[4];
++            if (flags & FLAGS_LONG) {
++#ifndef SAFECLIB_DISABLE_WCHAR
++                int len = wctomb(wstr, va_arg(va, int));
++                if (len <= 0) {
++		    char msg[80];
++		    snprintf(msg, sizeof msg, "%s: wctomb for %%lc arg failed", funcname);
++                    invoke_safe_str_constraint_handler(msg, buffer, RCNEGATE(-len));
++                    return len;
++                }
++#else
++		char msg[80];
++		snprintf(msg, sizeof msg, "%s: unsupported %%lc arg", funcname);
++                invoke_safe_str_constraint_handler(msg, buffer, RCNEGATE(1));
++                return -1;
++#endif
++            }
+             // pre padding
+             if (!(flags & FLAGS_LEFT)) {
+                 while (l++ < width) {
+@@ -865,7 +896,16 @@ int safec_vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+                 }
+             }
+             // char output
+-            out((char)va_arg(va, int), buffer, idx++, bufsize);
++            if (flags & FLAGS_LONG) {
++                char *p = &wstr[0];
++                while (*p != 0) {
++                    out(*(p++), buffer, idx++, bufsize);
++                    if (out == safec_out_buffer && idx > bufsize)
++                        return -(ESNOSPC);
++                }
++            } else {
++                out((char)va_arg(va, int), buffer, idx++, bufsize);
++            }
+             if (out == safec_out_buffer && idx > bufsize)
+                 return -(ESNOSPC);
+             // post padding
+@@ -881,17 +921,58 @@ int safec_vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+         }
+ 
+         case 's': {
++            char *p;
+             unsigned int l;
+-            const char *p = va_arg(va, char *);
+-            if (!p) {
+-                invoke_safe_str_constraint_handler("vsnprintf_s: %s arg is null",
+-                                                   NULL, ESNULLP);
+-                return -(ESNULLP);
++            if (flags & FLAGS_LONG) {
++#ifndef SAFECLIB_DISABLE_WCHAR
++                size_t len;
++                errno_t err;
++                const wchar_t *lp = va_arg(va, wchar_t *);
++                if (!lp) {
++		    char msg[80];
++		    snprintf(msg, sizeof msg, "%s: %%ls arg is null", funcname);
++                    invoke_safe_str_constraint_handler(msg, buffer, ESNULLP);
++                    return -(ESNULLP);
++                }
++                l = wcsnlen_s(lp, precision ? precision : (size_t)-1);
++                p = malloc(l + 1);
++                if (!p) {
++		    char msg[80];
++		    snprintf(msg, sizeof msg, "%s: malloc %%ls arg failed", funcname);
++                    invoke_safe_str_constraint_handler(msg, buffer, 1);
++                    return -1;
++                }
++                err = wcstombs_s(&len, p, l, lp, l);
++                if (err != EOK) {
++		    char msg[80];
++		    snprintf(msg, sizeof msg, "%s: wcstombs_s for %%ls arg failed", funcname);
++                    invoke_safe_str_constraint_handler(msg, buffer, RCNEGATE(err));
++                    return err; 
++                }
++#else
++		{
++		    char msg[80];
++		    snprintf(msg, sizeof msg, "%s: unsupported %%ls arg", funcname);
++		    invoke_safe_str_constraint_handler(msg, buffer, RCNEGATE(1));
++		}
++                return -1;
++#endif
++            } else {
++                p = va_arg(va, char *);
++                if (!p) {
++		    char msg[80];
++		    snprintf(msg, sizeof msg, "%s: %%s arg is null", funcname);
++                    invoke_safe_str_constraint_handler(msg, buffer, ESNULLP);
++                    return -(ESNULLP);
++                }
++                l = safec_strnlen_s(p, precision ? precision : (size_t)-1);
+             }
+-            l = safec_strnlen_s(p, precision ? precision : (size_t)-1);
+             if (l + idx > bufsize) {
+-                invoke_safe_str_constraint_handler("vsnprintf_s: %s arg exceeds dmax",
+-                                                   NULL, ESNOSPC);
++		char msg[80];
++		snprintf(msg, sizeof msg, "%s: %%s arg exceeds dmax", funcname);
++                invoke_safe_str_constraint_handler(msg, buffer, ESNOSPC);
++                if (flags & FLAGS_LONG)
++                    free(p);
+                 return -(ESNOSPC);
+             }
+             // pre padding
+@@ -901,16 +982,24 @@ int safec_vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+             if (!(flags & FLAGS_LEFT)) {
+                 while (l++ < width) {
+                     out(' ', buffer, idx++, bufsize);
+-                    if (out == safec_out_buffer && idx > bufsize)
++                    if (out == safec_out_buffer && idx > bufsize) {
++                        if (flags & FLAGS_LONG)
++                            free(p);
+                         return -(ESNOSPC);
++                    }
+                 }
+             }
+             // string output
+             while ((*p != 0) && (!(flags & FLAGS_PRECISION) || precision--)) {
+                 out(*(p++), buffer, idx++, bufsize);
+-                if (out == safec_out_buffer && idx > bufsize)
++                if (out == safec_out_buffer && idx > bufsize) {
++                    if (flags & FLAGS_LONG)
++                        free(p);
+                     return -(ESNOSPC);
++                }
+             }
++            if (flags & FLAGS_LONG)
++                free(p);
+             // post padding
+             if (flags & FLAGS_LEFT) {
+                 while (l++ < width) {
+@@ -929,12 +1018,12 @@ int safec_vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+             flags |= FLAGS_ZEROPAD | FLAGS_UPPERCASE;
+ #if defined(PRINTF_SUPPORT_LONG_LONG)
+             if (sizeof(uintptr_t) == sizeof(long long)) {
+-                idx = safec_ntoa_long_long(out, buffer, idx, bufsize,
++                idx = safec_ntoa_long_long(out, funcname, buffer, idx, bufsize,
+                                       arg, false, 16U,
+                                       precision, width, flags);
+             } else {
+ #endif
+-                idx = safec_ntoa_long(out, buffer, idx, bufsize,
++                idx = safec_ntoa_long(out, funcname, buffer, idx, bufsize,
+                                  (unsigned long)arg,
+                                  false, 16U, precision, width, flags);
+ #if defined(PRINTF_SUPPORT_LONG_LONG)
+@@ -952,10 +1041,12 @@ int safec_vsnprintf_s(out_fct_type out, char *buffer, const size_t bufsize,
+             break;
+ 
+         case 'n':
+-            invoke_safe_str_constraint_handler("vsprintf_s: illegal %n", NULL,
+-                                               EINVAL);
+-            return -1;
+-
++            {
++                char msg[80];
++                snprintf(msg, sizeof msg, "%s: illegal %%n", funcname);
++                invoke_safe_str_constraint_handler(msg, NULL, EINVAL);
++                return -1;
++            }
+         default:
+             out(*format, buffer, idx++, bufsize);
+             if (out == safec_out_buffer && idx > bufsize)
+@@ -1070,7 +1161,7 @@ EXPORT int _vsnprintf_s_chk(char *restrict dest, rsize_t dmax,
+     }
+ 
+     errno = 0;
+-    ret = safec_vsnprintf_s(safec_out_buffer, dest, dmax, fmt, ap);
++    ret = safec_vsnprintf_s(safec_out_buffer, "vsnprintf_s", dest, dmax, fmt, ap);
+ 
+     //if (unlikely(ret < 0)) {
+     //    char errstr[128] = "vsnprintf_s: ";
diff --git a/meta-oe/recipes-core/safec/safec/0051-printf-correctly-reject-illegal-format-specifiers.patch b/meta-oe/recipes-core/safec/safec/0051-printf-correctly-reject-illegal-format-specifiers.patch
new file mode 100644
index 000000000..6b37b35aa
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0051-printf-correctly-reject-illegal-format-specifiers.patch
@@ -0,0 +1,64 @@ 
+From 99f15561b08cc3f33531f6c8eb5cab326ff946ee Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sat, 13 Nov 2021 16:55:04 +0100
+Subject: [PATCH] printf: correctly reject illegal format specifiers
+
+as formerly only with musl or msvcrt, but now for all libc's.
+With the optional ENABLE_ILLEGAL_FORMATSPECIFIER you get back
+the old glibc and bsd libc behaviour.
+(when people forget about %% to print a single %)
+---
+ src/str/vsnprintf_s.c   | 10 ++++++++++
+ tests/test_vsprintf_s.c | 11 ++---------
+ 2 files changed, 12 insertions(+), 9 deletions(-)
+
+diff --git a/src/str/vsnprintf_s.c b/src/str/vsnprintf_s.c
+index e1716f25..f9d5c209 100644
+--- a/src/str/vsnprintf_s.c
++++ b/src/str/vsnprintf_s.c
+@@ -1048,10 +1048,20 @@ int safec_vsnprintf_s(out_fct_type out, const char* funcname,
+                 return -1;
+             }
+         default:
++            // illegal % format-specifier
++#ifndef ENABLE_ILLEGAL_FORMATSPECIFIER
++            {
++                char msg[80];
++                snprintf(msg, sizeof msg, "%s: illegal %%%c format-specifier", funcname, *format);
++                invoke_safe_str_constraint_handler(msg, NULL, EINVAL);
++            }
++            return -1;
++#else
+             out(*format, buffer, idx++, bufsize);
+             if (out == safec_out_buffer && idx > bufsize)
+                 return -(ESNOSPC);
+             format++;
++#endif
+             break;
+         }
+     }
+diff --git a/tests/test_vsprintf_s.c b/tests/test_vsprintf_s.c
+index 30fbfd8a..63f7548d 100644
+--- a/tests/test_vsprintf_s.c
++++ b/tests/test_vsprintf_s.c
+@@ -263,18 +263,11 @@ int test_vsprintf_s(void) {
+ 
+     /*--------------------------------------------------*/
+ 
+-    /* everybody incorrectly accepts illegal % specifiers, only musl not. */
++    /* Only musl and msvcrt sec_api incorrectly accepts illegal % specifiers. */
+     rc = vtprintf_s(str1, LEN, "%y");
+-    /* TODO: dietlibc, uClibc, minilibc */
+-#if defined(__GLIBC__) || defined(BSD_ALL_LIKE) /* and older mingw versions */
+-    /* they print unknown formats verbatim */
+-    NOERR();
+-#else
+-    /* only musl and msvcrt sec_api correctly rejects illegal format specifiers
+-     */
++    /* We implemented it now by our own, as we cannot trust most libc's */
+     ERR(-1);
+     EXPNULL(str1)
+-#endif
+ 
+     /*--------------------------------------------------*/
+ 
diff --git a/meta-oe/recipes-core/safec/safec/0052-printf-catch-print-to-closed-stream-external-errno.patch b/meta-oe/recipes-core/safec/safec/0052-printf-catch-print-to-closed-stream-external-errno.patch
new file mode 100644
index 000000000..4434ed2f5
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0052-printf-catch-print-to-closed-stream-external-errno.patch
@@ -0,0 +1,365 @@ 
+From f3a16787dd8d538146a1f5e301fe8398a5a9dafa Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sun, 14 Nov 2021 11:39:22 +0100
+Subject: [PATCH] printf: catch print to closed stream, external errno
+
+return the result of the systemcall. esp. for print to stdout or FILE.
+Fixes the unportability of the latest test_vfprintf_s across libc's.
+---
+ src/io/vfprintf_s.c     |  7 ++-
+ src/safeclib_private.h  | 32 ++++++++------
+ src/str/vsnprintf_s.c   | 96 +++++++++++++++++++++++------------------
+ tests/test_vfprintf_s.c | 20 ++-------
+ 4 files changed, 80 insertions(+), 75 deletions(-)
+
+diff --git a/src/io/vfprintf_s.c b/src/io/vfprintf_s.c
+index ce6dbdb5..00c9e522 100644
+--- a/src/io/vfprintf_s.c
++++ b/src/io/vfprintf_s.c
+@@ -2,6 +2,7 @@
+  * vfprintf_s.c
+  *
+  * September 2017, Reini Urban
++ * November 2021, Reini Urban
+  *
+  * Copyright (c) 2017 by Reini Urban
+  * All rights reserved.
+@@ -78,7 +79,11 @@ EXPORT int vfprintf_s(FILE *restrict stream, const char *restrict fmt,
+                                            ESNULLP);
+         return -(ESNULLP);
+     }
+-
++    if (unlikely(fileno(stream) < 0)) {
++        invoke_safe_str_constraint_handler("vfprintf_s: stream is invalid", NULL,
++                                           EBADF);
++        return -(EBADF);
++    }
+     if (unlikely(fmt == NULL)) {
+         invoke_safe_str_constraint_handler("vfprintf_s: fmt is null", NULL,
+                                            ESNULLP);
+diff --git a/src/safeclib_private.h b/src/safeclib_private.h
+index 9f36368f..20a4f7e7 100644
+--- a/src/safeclib_private.h
++++ b/src/safeclib_private.h
+@@ -649,28 +649,30 @@ EXTERN int _decomp_s(wchar_t *restrict dest, rsize_t dmax, const uint32_t cp,
+ // internal helpers for the *printf_s functions:
+ 
+ // output function type
+-typedef void (*out_fct_type)(char character, void *buffer, size_t idx,
+-                             size_t maxlen);
++typedef int (*out_fct_type)(char character, void *buffer, size_t idx,
++                            size_t maxlen);
+ // wrapper (used as buffer) for output function type
+ typedef struct {
+-    void (*fct)(char character, void *arg);
++    int (*fct)(char character, void *arg);
+     void *arg;
+ } out_fct_wrap_type;
+ 
+ // internal buffer output
+-static inline void safec_out_buffer(char character, void *buffer, size_t idx,
++static inline int safec_out_buffer(char character, void *buffer, size_t idx,
+                                     size_t maxlen)
+ {
+     if (idx < maxlen) {
+         ((char *)buffer)[idx] = character;
++        return 1;
+     } else {
+         invoke_safe_str_constraint_handler("vsnprintf_s: exceeds dmax",
+                                            (char*)buffer, ESNOSPC);
++        return -(ESNOSPC);
+     }
+ }
+ 
+ // internal putchar wrapper
+-static inline void safec_out_char(char character, void *buffer, size_t idx,
++static inline int safec_out_char(char character, void *buffer, size_t idx,
+                                   size_t maxlen)
+ {
+     (void)buffer;
+@@ -678,33 +680,35 @@ static inline void safec_out_char(char character, void *buffer, size_t idx,
+     (void)maxlen;
+     if (character) {
+ #ifndef __KERNEL__
+-        putchar(character);
++        return putchar(character);
+ #else
+-        slprintf("%c", character);
++        int rc = 0;
++        rc = slprintf("%c", character);
++        return rc;
+ #endif
+     }
++    else
++        return 0;
+ }
+ 
+ #ifndef __KERNEL__
+ // special-case of safec_out_fct for fprintf_s
+-static inline void safec_out_fchar(char character, void *wrap, size_t idx,
++static inline int safec_out_fchar(char character, void *wrap, size_t idx,
+                              size_t maxlen) {
+     (void)idx;
+     (void)maxlen;
+     //((out_fct_wrap_type *)wrap)->fct(character, ((out_fct_wrap_type *)wrap)->arg);
+-    fprintf((FILE*)((out_fct_wrap_type *)wrap)->arg, "%c", character);
++    return fprintf((FILE*)((out_fct_wrap_type *)wrap)->arg, "%c", character);
+ }
+ #endif
+ 
+ // internal output function wrapper
+-static inline void safec_out_fct(char character, void *wrap, size_t idx,
++static inline int safec_out_fct(char character, void *wrap, size_t idx,
+                                  size_t maxlen) {
+     (void)idx;
+     (void)maxlen;
+-    if (character) {
+-        // buffer is the output fct pointer
+-        ((out_fct_wrap_type *)wrap)->fct(character, ((out_fct_wrap_type *)wrap)->arg);
+-    }
++    // wrap is the output fct pointer
++    return ((out_fct_wrap_type *)wrap)->fct(character, ((out_fct_wrap_type *)wrap)->arg);
+ }
+ // mingw has a _vsnprintf_s. we use our own.
+ int safec_vsnprintf_s(out_fct_type out, const char *funcname, char *buffer,
+diff --git a/src/str/vsnprintf_s.c b/src/str/vsnprintf_s.c
+index f9d5c209..f20707d1 100644
+--- a/src/str/vsnprintf_s.c
++++ b/src/str/vsnprintf_s.c
+@@ -200,25 +200,25 @@ static size_t safec_out_rev(out_fct_type out, char *buffer, size_t idx,
+     // pad spaces up to given width
+     if (!(flags & FLAGS_LEFT) && !(flags & FLAGS_ZEROPAD)) {
+         for (size_t i = len; i < width; i++) {
+-            out(' ', buffer, idx++, maxlen);
+-            if (out == safec_out_buffer && idx > maxlen)
+-                return -(ESNOSPC);
++            int rc = out(' ', buffer, idx++, maxlen);
++            if (unlikely(rc < 0))
++                return rc;
+         }
+     }
+ 
+     // reverse string
+     while (len) {
+-        out(buf[--len], buffer, idx++, maxlen);
+-        if (out == safec_out_buffer && idx > maxlen)
+-            return -(ESNOSPC);
++        int rc = out(buf[--len], buffer, idx++, maxlen);
++        if (unlikely(rc < 0))
++            return rc;
+     }
+ 
+     // append pad spaces up to given width
+     if (flags & FLAGS_LEFT) {
+         while (idx - start_idx < width) {
+-            out(' ', buffer, idx++, maxlen);
+-            if (out == safec_out_buffer && idx > maxlen)
+-                return -(ESNOSPC);
++            int rc = out(' ', buffer, idx++, maxlen);
++            if (unlikely(rc < 0))
++                return rc;
+         }
+     }
+ 
+@@ -610,15 +610,20 @@ static size_t safec_etoa(out_fct_type out, const char *funcname,
+         // output the exponent part
+         if (minwidth) {
+             // output the exponential symbol
+-            out((flags & FLAGS_UPPERCASE) ? 'E' : 'e', buffer, idx++, maxlen);
++            int rc = out((flags & FLAGS_UPPERCASE) ? 'E' : 'e', buffer, idx++, maxlen);
++            if (unlikely(rc < 0))
++                return rc;
+             // output the exponent value
+             idx = safec_ntoa_long(out, funcname, buffer, idx, maxlen,
+                              (expval < 0) ? -expval : expval, expval < 0, 10, 0,
+                              minwidth - 1, FLAGS_ZEROPAD | FLAGS_PLUS);
+             // might need to right-pad spaces
+             if (flags & FLAGS_LEFT) {
+-                while (idx - start_idx < width)
++                while (idx - start_idx < width) {
+                     out(' ', buffer, idx++, maxlen);
++                    if (unlikely(rc < 0))
++                        return rc;
++                }
+             }
+         }
+     }
+@@ -633,8 +638,9 @@ static size_t safec_etoa(out_fct_type out, const char *funcname,
+ int safec_vsnprintf_s(out_fct_type out, const char* funcname,
+                       char *buffer, const size_t bufsize, const char *format, va_list va)
+ {
+-    unsigned int flags, width, precision, n;
+     size_t idx = 0U;
++    unsigned int flags, width, precision, n;
++    int rc = 0;
+ 
+     while (*format) {
+         if ((long)idx < 0)
+@@ -642,7 +648,9 @@ int safec_vsnprintf_s(out_fct_type out, const char* funcname,
+         // format specifier?  %[flags][width][.precision][length]
+         if (*format != '%') {
+             // no
+-            out(*format, buffer, idx++, bufsize);
++            rc = out(*format, buffer, idx++, bufsize);
++            if (unlikely(rc < 0))
++                return rc;
+             format++;
+             continue;
+         } else {
+@@ -890,30 +898,30 @@ int safec_vsnprintf_s(out_fct_type out, const char* funcname,
+             // pre padding
+             if (!(flags & FLAGS_LEFT)) {
+                 while (l++ < width) {
+-                    out(' ', buffer, idx++, bufsize);
+-                    if (out == safec_out_buffer && idx > bufsize)
+-                        return -(ESNOSPC);
++                    rc = out(' ', buffer, idx++, bufsize);
++                    if (unlikely(rc < 0))
++                        return rc;
+                 }
+             }
+             // char output
+             if (flags & FLAGS_LONG) {
+                 char *p = &wstr[0];
+                 while (*p != 0) {
+-                    out(*(p++), buffer, idx++, bufsize);
+-                    if (out == safec_out_buffer && idx > bufsize)
+-                        return -(ESNOSPC);
++                    rc = out(*(p++), buffer, idx++, bufsize);
++                    if (unlikely(rc < 0))
++                        return rc;
+                 }
+             } else {
+-                out((char)va_arg(va, int), buffer, idx++, bufsize);
++                rc = out((char)va_arg(va, int), buffer, idx++, bufsize);
++                if (unlikely(rc < 0))
++                    return rc;
+             }
+-            if (out == safec_out_buffer && idx > bufsize)
+-                return -(ESNOSPC);
+             // post padding
+             if (flags & FLAGS_LEFT) {
+                 while (l++ < width) {
+-                    out(' ', buffer, idx++, bufsize);
+-                    if (out == safec_out_buffer && idx > bufsize)
+-                        return -(ESNOSPC);
++                    rc = out(' ', buffer, idx++, bufsize);
++                    if (unlikely(rc < 0))
++                        return rc;
+                 }
+             }
+             format++;
+@@ -981,21 +989,21 @@ int safec_vsnprintf_s(out_fct_type out, const char* funcname,
+             }
+             if (!(flags & FLAGS_LEFT)) {
+                 while (l++ < width) {
+-                    out(' ', buffer, idx++, bufsize);
+-                    if (out == safec_out_buffer && idx > bufsize) {
++                    rc = out(' ', buffer, idx++, bufsize);
++                    if (unlikely(rc < 0)) {
+                         if (flags & FLAGS_LONG)
+                             free(p);
+-                        return -(ESNOSPC);
++                        return rc;
+                     }
+                 }
+             }
+             // string output
+             while ((*p != 0) && (!(flags & FLAGS_PRECISION) || precision--)) {
+-                out(*(p++), buffer, idx++, bufsize);
+-                if (out == safec_out_buffer && idx > bufsize) {
++                rc = out(*(p++), buffer, idx++, bufsize);
++                if (unlikely(rc < 0)) { //eg.  EBADF write to closed file
+                     if (flags & FLAGS_LONG)
+                         free(p);
+-                    return -(ESNOSPC);
++                    return rc;
+                 }
+             }
+             if (flags & FLAGS_LONG)
+@@ -1003,9 +1011,9 @@ int safec_vsnprintf_s(out_fct_type out, const char* funcname,
+             // post padding
+             if (flags & FLAGS_LEFT) {
+                 while (l++ < width) {
+-                    out(' ', buffer, idx++, bufsize);
+-                    if (out == safec_out_buffer && idx > bufsize)
+-                        return -(ESNOSPC);
++                    rc = out(' ', buffer, idx++, bufsize);
++                    if (unlikely(rc < 0))
++                        return rc;
+                 }
+             }
+             format++;
+@@ -1034,9 +1042,9 @@ int safec_vsnprintf_s(out_fct_type out, const char* funcname,
+         }
+ 
+         case '%':
+-            out('%', buffer, idx++, bufsize);
+-            if (out == safec_out_buffer && idx > bufsize)
+-                return -(ESNOSPC);
++            rc = out('%', buffer, idx++, bufsize);
++            if (unlikely(rc < 0))
++                return rc;
+             format++;
+             break;
+ 
+@@ -1057,9 +1065,11 @@ int safec_vsnprintf_s(out_fct_type out, const char* funcname,
+             }
+             return -1;
+ #else
+-            out(*format, buffer, idx++, bufsize);
+-            if (out == safec_out_buffer && idx > bufsize)
+-                return -(ESNOSPC);
++            {
++                rc = out(*format, buffer, idx++, bufsize);
++                if (unlikely(rc < 0))
++                    return rc;
++            }
+             format++;
+ #endif
+             break;
+@@ -1067,9 +1077,9 @@ int safec_vsnprintf_s(out_fct_type out, const char* funcname,
+     }
+ 
+     // termination
+-    out((char)0, buffer, idx < bufsize ? idx : bufsize - 1U, bufsize);
+-    if (out == safec_out_buffer && idx > bufsize)
+-        return -(ESNOSPC);
++    rc = out((char)0, buffer, idx < bufsize ? idx : bufsize - 1U, bufsize);
++    if (unlikely(rc < 0))
++        return rc;
+ 
+     // return written chars without terminating \0
+     return (int)idx;
+diff --git a/tests/test_vfprintf_s.c b/tests/test_vfprintf_s.c
+index 340ad3d6..418470db 100644
+--- a/tests/test_vfprintf_s.c
++++ b/tests/test_vfprintf_s.c
+@@ -110,24 +110,10 @@ int test_vfprintf_s(void) {
+ 
+     fclose(out);
+ 
+-    /* print to closed stream: unportable, and not valgrind-safe */
+-#ifndef __GLIBC__
++    /* print to closed stream: across libc's unportable, and not valgrind-safe */
+     rc = vtfprintf_s(out, "%s", str1);
+-#if defined(__GLIBC__)
+-    if (rc < 0) {
+-        ERR(-1);
+-        ERRNO(EBADF);
+-    } else {
+-        /* older glibc upstream bug */
+-        NOERR();
+-        ERRNO(0);
+-    }
+-#elif defined BSD_ALL_LIKE
+-    ERR(-1);
+-#else
+-    /* musl throws no error */
+-#endif
+-#endif
++    ERR(-EBADF);
++    ERRNO(EBADF);
+ 
+     unlink(TMP);
+ 
diff --git a/meta-oe/recipes-core/safec/safec/0053-Add-Changelog-for-upcoming-3.7.0.patch b/meta-oe/recipes-core/safec/safec/0053-Add-Changelog-for-upcoming-3.7.0.patch
new file mode 100644
index 000000000..29096170b
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0053-Add-Changelog-for-upcoming-3.7.0.patch
@@ -0,0 +1,31 @@ 
+From d257832e4cd3e2c2a560de074ca2b171056ed4f2 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Wed, 17 Nov 2021 11:38:17 +0100
+Subject: [PATCH] Add Changelog for upcoming 3.7.0
+
+---
+ ChangeLog | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/ChangeLog b/ChangeLog
+index 147b5feb..8eb6d432 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -1,6 +1,17 @@
+ 
+         ChangeLog file for safeclib
+ 
++Changes in 3.7.0
++        - Switched to proper semantic versioning for upstream packagers.
++        - Added stpcpy_s and stpncpy_s as in the Intel safestringlib fork.
++        - Added our own portable implementation of the family of printf_s
++          functions. This make the results and errno sideeffects more predictable.
++          scanf_s not yet. Fixes GH #97.
++        - Some minor bugfixes, like unknown size_t GH #89, ECONSTANTS as enums
++          on hurd (GH #101), sprintf_s with "" arg (GH #97).
++        - Minor test improvements overall.
++        - Don't build/install wchar manpages with --disable-wchar (GH #95)
++
+ Changes in v02092020 3.6.0
+         - Improved generated man pages. Describe not the private _chk functions,
+           but the public _s functions. Merge duplicate return values.
diff --git a/meta-oe/recipes-core/safec/safec/0054-WIP-test_vfprintf_s-test-more-fprintf-errors.patch b/meta-oe/recipes-core/safec/safec/0054-WIP-test_vfprintf_s-test-more-fprintf-errors.patch
new file mode 100644
index 000000000..8a83980a6
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0054-WIP-test_vfprintf_s-test-more-fprintf-errors.patch
@@ -0,0 +1,223 @@ 
+From 1ce37f6b82986063fad74d208f0d355fdd8e0e28 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sun, 14 Nov 2021 12:35:54 +0100
+Subject: [PATCH] WIP test_vfprintf_s: test more fprintf errors
+
+not just EBADF on closed files. also permission errors.
+use fputc instead of fprintf internally.
+test: also check the written filecontent.
+---
+ src/io/vfprintf_s.c     |  3 +-
+ src/safeclib_private.h  |  3 +-
+ tests/test_vfprintf_s.c | 88 +++++++++++++++++++++++++++++++++++++++--
+ 3 files changed, 88 insertions(+), 6 deletions(-)
+
+diff --git a/src/io/vfprintf_s.c b/src/io/vfprintf_s.c
+index 00c9e522..3ade54c0 100644
+--- a/src/io/vfprintf_s.c
++++ b/src/io/vfprintf_s.c
+@@ -89,8 +89,7 @@ EXPORT int vfprintf_s(FILE *restrict stream, const char *restrict fmt,
+                                            ESNULLP);
+         return -(ESNULLP);
+     }
+-
+-    if (unlikely((p = strnstr(fmt, "%n", RSIZE_MAX_STR)))) {
++    if (unlikely((p = strstr(fmt, "%n")))) {
+         /* at the beginning or if inside, not %%n */
+         if ((p - fmt == 0) || *(p - 1) != '%') {
+             invoke_safe_str_constraint_handler("vfprintf_s: illegal %n", NULL,
+diff --git a/src/safeclib_private.h b/src/safeclib_private.h
+index 20a4f7e7..a502f41b 100644
+--- a/src/safeclib_private.h
++++ b/src/safeclib_private.h
+@@ -698,7 +698,7 @@ static inline int safec_out_fchar(char character, void *wrap, size_t idx,
+     (void)idx;
+     (void)maxlen;
+     //((out_fct_wrap_type *)wrap)->fct(character, ((out_fct_wrap_type *)wrap)->arg);
+-    return fprintf((FILE*)((out_fct_wrap_type *)wrap)->arg, "%c", character);
++    return fputc(character, (FILE*)((out_fct_wrap_type *)wrap)->arg);
+ }
+ #endif
+ 
+@@ -710,6 +710,7 @@ static inline int safec_out_fct(char character, void *wrap, size_t idx,
+     // wrap is the output fct pointer
+     return ((out_fct_wrap_type *)wrap)->fct(character, ((out_fct_wrap_type *)wrap)->arg);
+ }
++
+ // mingw has a _vsnprintf_s. we use our own.
+ int safec_vsnprintf_s(out_fct_type out, const char *funcname, char *buffer,
+                       const size_t bufsize, const char *format, va_list va);
+diff --git a/tests/test_vfprintf_s.c b/tests/test_vfprintf_s.c
+index 418470db..ab47f361 100644
+--- a/tests/test_vfprintf_s.c
++++ b/tests/test_vfprintf_s.c
+@@ -6,9 +6,13 @@
+  *------------------------------------------------------------------
+  */
+ 
++//#define _POSIX_C_SOURCE 199309
+ #include "test_private.h"
+ #include "safe_str_lib.h"
+ #include <unistd.h>
++#ifdef HAVE_SYS_STAT_H
++#include <sys/stat.h>
++#endif
+ 
+ //#ifdef HAVE_VFPRINTF_S
+ //#define HAVE_NATIVE 1
+@@ -21,6 +25,7 @@
+ #define LEN (128)
+ 
+ static FILE *out;
++static char buf[LEN];
+ static char str1[LEN];
+ static char str2[LEN];
+ int vtfprintf_s(FILE *restrict stream, const char *restrict fmt, ...);
+@@ -35,46 +40,77 @@ int vtfprintf_s(FILE *restrict stream, const char *restrict fmt, ...) {
+     return rc;
+ }
+ 
++#define CMP_AND_RESET(out, s)                                                  \
++    pos = ftell(out);                                                          \
++    fflush(out);							       \
++    rewind(out);							       \
++    *buf = '\0';                                                               \
++    ind = fread(buf, pos, 1, out);                                             \
++    EXPSTR(buf, s)							       \
++    rewind(out);							       \
++    ind = ftruncate(fileno(out), 0L);
++
+ int test_vfprintf_s(void) {
+     errno_t rc;
+     int32_t ind;
++    long pos;
+     int errs = 0;
+ 
+-    out = fopen(TMP, "w");
+-
++    out = fopen(TMP, "w+");
++    if (errno) {
++        perror("fopen");
++        return 1;
++    }
++#ifdef HAVE_SYS_STAT_H
++    {
++        int fd = fileno(out);
++        if (fd < 0) {
++            perror("invalid " TMP);
++            return 1;
++        }
++    }
++#endif
+     /*--------------------------------------------------*/
+ 
+     print_msvcrt(use_msvcrt);
+     rc = vtfprintf_s(out, NULL);
+     init_msvcrt(rc == -ESNULLP, &use_msvcrt);
+     NEGERR_MSVC(ESNULLP, EOF);
++    CMP_AND_RESET(out, "")
+ 
+     rc = vtfprintf_s(NULL, "");
+     NEGERR_MSVC(ESNULLP, EOF);
++    CMP_AND_RESET(out, "")
+ 
+     rc = vtfprintf_s(out, "", NULL);
+     NEGERR(EOK)
++    CMP_AND_RESET(out, "")
+ 
+     rc = vtfprintf_s(NULL, "%s", NULL);
+     NEGERR(ESNULLP);
++    CMP_AND_RESET(out, "")
+ 
+     /*--------------------------------------------------*/
+ 
+     str1[0] = '\0';
+     rc = vtfprintf_s(out, "%s%n\n", str1, &ind);
+     NEGERR_MSVC(EINVAL, EOF);
++    CMP_AND_RESET(out, "")
+ 
+     /*--------------------------------------------------*/
+ 
+     rc = vtfprintf_s(out, "%s%%n\n", str1);
+     if (rc < 0) {
+-        printf("Failed to open stdout for write: %s\n", strerror(errno));
++        perror("vtfprintf_s");
+         return errs;
+     }
+     ERR(3)
++    //rewind(out);
++    CMP_AND_RESET(out, "%n\n") //FIXME
+ 
+     rc = vtfprintf_s(out, "%%n\n");
+     ERR(3);
++    CMP_AND_RESET(out, "%n\n")
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -88,6 +124,7 @@ int test_vfprintf_s(void) {
+ 
+     rc = vtfprintf_s(out, "%s%s", str1, str2);
+     ERR(4);
++    CMP_AND_RESET(out, "1234")
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -95,6 +132,7 @@ int test_vfprintf_s(void) {
+     /* 0x7fffffff + 1 >INT_MAX */
+     rc = printf_s("\n%2147483648d\n", INT_MAX);
+     NEGERR(ESLEMAX);
++    CMP_AND_RESET(out, "")
+     //#if defined(__GLIBC__)
+     //ERRNO(EOVERFLOW);
+     //#endif
+@@ -106,6 +144,50 @@ int test_vfprintf_s(void) {
+     ANYERR();
+ #endif
+ 
++#if defined HAVE_SYS_STAT_H && 0
++    {
++        int fd = fileno(out);
++        if (fd >= 0) {
++            struct stat st;
++            fstat(fd, &st);
++            if (!S_ISREG(st.st_mode))
++                return 1;
++            /* print to not-writable stream */
++#ifndef _WIN32
++            if (fchmod(fd, st.st_mode & ~(S_IWUSR|S_IWGRP|S_IWOTH)) == 0)
++#else
++            if (chmod(TMP, st.st_mode & ~(S_IWUSR|S_IWGRP|S_IWOTH)) == 0)
++#endif
++	    {
++                struct stat st1;
++                fstat(fd, &st1);
++                if (st1.st_mode < st.st_mode) {
++                    rc = vtfprintf_s(out, "%s", str1);
++                    ANYERR(); // Linux produces EINVAL, other EBADF
++                    if (errno >= 0) {
++                        debug_printf("%s %u  Error errno=%d \n", __FUNCTION__,
++                                     __LINE__, (int)errno);
++                        errs++;
++                    }
++                    CMP_AND_RESET(out, "")
++		    if (pos) {
++			debug_printf("%s %u  pos=%ld \n", __FUNCTION__, __LINE__, pos);
++			errs++;
++		    }
++                } else {
++		    debug_printf("fchmod failed to remove write perms\n");
++		}
++            }
++#ifndef _WIN32
++            fchmod(fd, st.st_mode); // restore wr perms
++#else
++            chmod(TMP, st.st_mode);
++#endif
++            rewind(out);
++        }
++    }
++#endif
++
+     /*--------------------------------------------------*/
+ 
+     fclose(out);
diff --git a/meta-oe/recipes-core/safec/safec/0055-fix-compilation-with-c-std-c-11.patch b/meta-oe/recipes-core/safec/safec/0055-fix-compilation-with-c-std-c-11.patch
new file mode 100644
index 000000000..77dfa8480
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0055-fix-compilation-with-c-std-c-11.patch
@@ -0,0 +1,22 @@ 
+From e06ed1609e8e0e6c2108c6f3bbd88d8a40b26f26 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Mon, 15 Nov 2021 14:06:37 +0100
+Subject: [PATCH] fix compilation with c++ -std=c++11
+
+---
+ src/str/vsnprintf_s.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/str/vsnprintf_s.c b/src/str/vsnprintf_s.c
+index f20707d1..59dbda94 100644
+--- a/src/str/vsnprintf_s.c
++++ b/src/str/vsnprintf_s.c
+@@ -943,7 +943,7 @@ int safec_vsnprintf_s(out_fct_type out, const char* funcname,
+                     return -(ESNULLP);
+                 }
+                 l = wcsnlen_s(lp, precision ? precision : (size_t)-1);
+-                p = malloc(l + 1);
++                p = (char*)malloc(l + 1);
+                 if (!p) {
+ 		    char msg[80];
+ 		    snprintf(msg, sizeof msg, "%s: malloc %%ls arg failed", funcname);
diff --git a/meta-oe/recipes-core/safec/safec/0056-fix-t_vfprintf_s.patch b/meta-oe/recipes-core/safec/safec/0056-fix-t_vfprintf_s.patch
new file mode 100644
index 000000000..246298ff3
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0056-fix-t_vfprintf_s.patch
@@ -0,0 +1,287 @@ 
+From 4e525314a826cf00eee2bba0adb22dd78dc2e4a2 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Mon, 15 Nov 2021 17:21:21 +0100
+Subject: [PATCH] fix t_vfprintf_s
+
+The kernel caches the stat mode, fchmod fails.
+So close the file, and re-open with wrong perms.
+
+some windows variants return EINVAL with fopen w+ (not wine, but
+on Github actions Windows Server 2019), so workaround that quirks
+---
+ tests/test_vfprintf_s.c | 163 +++++++++++++++++++++++-----------------
+ 1 file changed, 92 insertions(+), 71 deletions(-)
+
+diff --git a/tests/test_vfprintf_s.c b/tests/test_vfprintf_s.c
+index ab47f361..6d345a3f 100644
+--- a/tests/test_vfprintf_s.c
++++ b/tests/test_vfprintf_s.c
+@@ -6,7 +6,6 @@
+  *------------------------------------------------------------------
+  */
+ 
+-//#define _POSIX_C_SOURCE 199309
+ #include "test_private.h"
+ #include "safe_str_lib.h"
+ #include <unistd.h>
+@@ -14,11 +13,6 @@
+ #include <sys/stat.h>
+ #endif
+ 
+-//#ifdef HAVE_VFPRINTF_S
+-//#define HAVE_NATIVE 1
+-//#else
+-//#define HAVE_NATIVE 0
+-//#endif
+ #include "test_msvcrt.h"
+ 
+ #define TMP "tmpvfp"
+@@ -28,6 +22,7 @@ static FILE *out;
+ static char buf[LEN];
+ static char str1[LEN];
+ static char str2[LEN];
++
+ int vtfprintf_s(FILE *restrict stream, const char *restrict fmt, ...);
+ int test_vfprintf_s(void);
+ 
+@@ -40,32 +35,73 @@ int vtfprintf_s(FILE *restrict stream, const char *restrict fmt, ...) {
+     return rc;
+ }
+ 
+-#define CMP_AND_RESET(out, s)                                                  \
+-    pos = ftell(out);                                                          \
+-    fflush(out);							       \
+-    rewind(out);							       \
+-    *buf = '\0';                                                               \
+-    ind = fread(buf, pos, 1, out);                                             \
+-    EXPSTR(buf, s)							       \
+-    rewind(out);							       \
+-    ind = ftruncate(fileno(out), 0L);
++int errs = 0;
++int win_wplus = 0; // if EINVAL with fopen w+
++
++// a variant for debugging
++static size_t cmp_and_reset(FILE *out, const char *s) {
++    size_t pos = ftell(out);
++    fflush(out);
++    *buf = '\0';
++    if (win_wplus) {
++        fclose(out);
++        out = fopen(TMP, "r");
++        size_t nread = fread(buf, pos, 1, out);
++        fclose(out);
++        out = fopen(TMP, "w");
++    } else {
++        rewind(out);
++        size_t nread = fread(buf, pos, 1, out);
++    }
++    EXPSTR(buf, s)
++    if (!win_wplus) {
++        rewind(out);
++        size_t nread = ftruncate(fileno(out), 0L);
++    }
++    return pos;
++}
+ 
+ int test_vfprintf_s(void) {
+     errno_t rc;
+     int32_t ind;
+     long pos;
+-    int errs = 0;
+ 
++    // mingw (with some versions) disallows w+ (EINVAL)
+     out = fopen(TMP, "w+");
+     if (errno) {
+-        perror("fopen");
+-        return 1;
++        perror("fopen w+");
++        fclose(out);
++	out = fopen(TMP, "w");
++	win_wplus = 1;
++    }
++
++#define CMP_AND_RESET(out, s)                                                  \
++    pos = ftell(out);                                                          \
++    fflush(out);                                                               \
++    *buf = '\0';                                                               \
++    if (win_wplus) {                                                           \
++        fclose(out);                                                           \
++        out = fopen(TMP, "r");                                                 \
++        ind = fread(buf, pos, 1, out);                                         \
++        fclose(out);                                                           \
++        out = fopen(TMP, "w");                                                 \
++    } else {                                                                   \
++        rewind(out);                                                           \
++        ind = fread(buf, pos, 1, out);                                         \
++    }                                                                          \
++    EXPSTR(buf, s)                                                             \
++    if (!win_wplus) {                                                          \
++        rewind(out);                                                           \
++        ind = ftruncate(fileno(out), 0L);                                      \
+     }
++
+ #ifdef HAVE_SYS_STAT_H
+     {
+         int fd = fileno(out);
+         if (fd < 0) {
+             perror("invalid " TMP);
++            fclose(out);
++            unlink(TMP);
+             return 1;
+         }
+     }
+@@ -76,41 +112,43 @@ int test_vfprintf_s(void) {
+     rc = vtfprintf_s(out, NULL);
+     init_msvcrt(rc == -ESNULLP, &use_msvcrt);
+     NEGERR_MSVC(ESNULLP, EOF);
+-    CMP_AND_RESET(out, "")
++    CMP_AND_RESET(out, "");
+ 
+     rc = vtfprintf_s(NULL, "");
+     NEGERR_MSVC(ESNULLP, EOF);
+-    CMP_AND_RESET(out, "")
++    CMP_AND_RESET(out, "");
+ 
+     rc = vtfprintf_s(out, "", NULL);
+     NEGERR(EOK)
+-    CMP_AND_RESET(out, "")
++    CMP_AND_RESET(out, "");
+ 
+     rc = vtfprintf_s(NULL, "%s", NULL);
+     NEGERR(ESNULLP);
+-    CMP_AND_RESET(out, "")
++    CMP_AND_RESET(out, "");
+ 
+     /*--------------------------------------------------*/
+ 
+     str1[0] = '\0';
+     rc = vtfprintf_s(out, "%s%n\n", str1, &ind);
+     NEGERR_MSVC(EINVAL, EOF);
+-    CMP_AND_RESET(out, "")
++    CMP_AND_RESET(out, "");
+ 
+     /*--------------------------------------------------*/
+ 
+     rc = vtfprintf_s(out, "%s%%n\n", str1);
+     if (rc < 0) {
+         perror("vtfprintf_s");
++        fclose(out);
++        unlink(TMP);
+         return errs;
+     }
+     ERR(3)
+     //rewind(out);
+-    CMP_AND_RESET(out, "%n\n") //FIXME
++    CMP_AND_RESET(out, "%n\n"); //FIXME
+ 
+     rc = vtfprintf_s(out, "%%n\n");
+     ERR(3);
+-    CMP_AND_RESET(out, "%n\n")
++    CMP_AND_RESET(out, "%n\n");
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -124,7 +162,7 @@ int test_vfprintf_s(void) {
+ 
+     rc = vtfprintf_s(out, "%s%s", str1, str2);
+     ERR(4);
+-    CMP_AND_RESET(out, "1234")
++    CMP_AND_RESET(out, "1234");
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -132,7 +170,7 @@ int test_vfprintf_s(void) {
+     /* 0x7fffffff + 1 >INT_MAX */
+     rc = printf_s("\n%2147483648d\n", INT_MAX);
+     NEGERR(ESLEMAX);
+-    CMP_AND_RESET(out, "")
++    CMP_AND_RESET(out, "");
+     //#if defined(__GLIBC__)
+     //ERRNO(EOVERFLOW);
+     //#endif
+@@ -144,49 +182,27 @@ int test_vfprintf_s(void) {
+     ANYERR();
+ #endif
+ 
+-#if defined HAVE_SYS_STAT_H && 0
+-    {
+-        int fd = fileno(out);
+-        if (fd >= 0) {
+-            struct stat st;
+-            fstat(fd, &st);
+-            if (!S_ISREG(st.st_mode))
+-                return 1;
+-            /* print to not-writable stream */
+-#ifndef _WIN32
+-            if (fchmod(fd, st.st_mode & ~(S_IWUSR|S_IWGRP|S_IWOTH)) == 0)
+-#else
+-            if (chmod(TMP, st.st_mode & ~(S_IWUSR|S_IWGRP|S_IWOTH)) == 0)
+-#endif
+-	    {
+-                struct stat st1;
+-                fstat(fd, &st1);
+-                if (st1.st_mode < st.st_mode) {
+-                    rc = vtfprintf_s(out, "%s", str1);
+-                    ANYERR(); // Linux produces EINVAL, other EBADF
+-                    if (errno >= 0) {
+-                        debug_printf("%s %u  Error errno=%d \n", __FUNCTION__,
+-                                     __LINE__, (int)errno);
+-                        errs++;
+-                    }
+-                    CMP_AND_RESET(out, "")
+-		    if (pos) {
+-			debug_printf("%s %u  pos=%ld \n", __FUNCTION__, __LINE__, pos);
+-			errs++;
+-		    }
+-                } else {
+-		    debug_printf("fchmod failed to remove write perms\n");
+-		}
+-            }
+-#ifndef _WIN32
+-            fchmod(fd, st.st_mode); // restore wr perms
+-#else
+-            chmod(TMP, st.st_mode);
+-#endif
+-            rewind(out);
+-        }
++    fclose(out);
++    out = fopen(TMP, "r");
++    if (errno) {
++        perror("fopen r");
++        unlink(TMP);
++        return errs + 1;
++    }    
++    /* print to not-writable stream */
++    errno = 0;
++    rc = vtfprintf_s(out, "%s", str1);
++    ANYERR(); // Linux may produce EINVAL, most others EBADF
++    if (errno == 0) {
++        debug_printf("%s %u  Error errno=%d \n", __FUNCTION__,
++                     __LINE__, (int)errno);
++        errs++;
++    }
++    CMP_AND_RESET(out, "");
++    if (pos) {
++        debug_printf("%s %u  pos=%ld \n", __FUNCTION__, __LINE__, pos);
++        errs++;
+     }
+-#endif
+ 
+     /*--------------------------------------------------*/
+ 
+@@ -194,8 +210,13 @@ int test_vfprintf_s(void) {
+ 
+     /* print to closed stream: across libc's unportable, and not valgrind-safe */
+     rc = vtfprintf_s(out, "%s", str1);
+-    ERR(-EBADF);
+-    ERRNO(EBADF);
++    ANYERR(); // Windows may produce EOF, most others EBADF
++    // EBADF (linux, mingw) or EINVAL (bsd)
++    if (errno == 0) {
++        debug_printf("%s %u  Error errno=%d \n", __FUNCTION__,
++                     __LINE__, (int)errno);
++        errs++;
++    }
+ 
+     unlink(TMP);
+ 
diff --git a/meta-oe/recipes-core/safec/safec/0057-update-coverages-smoke.sh.patch b/meta-oe/recipes-core/safec/safec/0057-update-coverages-smoke.sh.patch
new file mode 100644
index 000000000..54def386b
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0057-update-coverages-smoke.sh.patch
@@ -0,0 +1,134 @@ 
+From bc5ca6a2c5b14bee21030b12f0c7e45feecabee9 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Wed, 17 Nov 2021 14:34:49 +0100
+Subject: [PATCH] update coverages (smoke.sh)
+
+---
+ tests/test_fprintf_s.c   | 2 +-
+ tests/test_printf_s.c    | 2 +-
+ tests/test_qsort_s.c     | 2 +-
+ tests/test_snprintf_s.c  | 2 +-
+ tests/test_sprintf_s.c   | 2 +-
+ tests/test_stpncpy_s.c   | 2 ++
+ tests/test_vfprintf_s.c  | 2 +-
+ tests/test_vsnprintf_s.c | 2 +-
+ tests/test_vsprintf_s.c  | 2 +-
+ 9 files changed, 10 insertions(+), 8 deletions(-)
+
+diff --git a/tests/test_fprintf_s.c b/tests/test_fprintf_s.c
+index 2706f33c..0ba6e376 100644
+--- a/tests/test_fprintf_s.c
++++ b/tests/test_fprintf_s.c
+@@ -1,7 +1,7 @@
+ /*------------------------------------------------------------------
+  * test_fprintf_s
+  * File 'io/fprintf_s.c'
+- * Lines executed:85.00% of 20
++ * Lines executed:85.71% of 21
+  *
+  *------------------------------------------------------------------
+  */
+diff --git a/tests/test_printf_s.c b/tests/test_printf_s.c
+index 03404ca0..7843ca63 100644
+--- a/tests/test_printf_s.c
++++ b/tests/test_printf_s.c
+@@ -1,7 +1,7 @@
+ /*------------------------------------------------------------------
+  * test_printf_s
+  * File 'printf_s.c'
+- * Lines executed:82.35% of 17
++ * Lines executed:81.25% of 16
+  *
+  *------------------------------------------------------------------
+  */
+diff --git a/tests/test_qsort_s.c b/tests/test_qsort_s.c
+index 31fc393f..2c73c2be 100644
+--- a/tests/test_qsort_s.c
++++ b/tests/test_qsort_s.c
+@@ -1,7 +1,7 @@
+ /*------------------------------------------------------------------
+  * test_qsort_s
+  * File 'misc/qsort_s.c'
+- * Lines executed:90.40% of 125
++ * Lines executed:89.23% of 130
+  *
+  *------------------------------------------------------------------
+  */
+diff --git a/tests/test_snprintf_s.c b/tests/test_snprintf_s.c
+index caf0b3a7..d68a8c5e 100644
+--- a/tests/test_snprintf_s.c
++++ b/tests/test_snprintf_s.c
+@@ -1,7 +1,7 @@
+ /*------------------------------------------------------------------
+  * test_snprintf_s
+  * File 'snprintf_s.c'
+- * Lines executed:87.10% of 31
++ * Lines executed:100.00% of 5
+  *
+  *------------------------------------------------------------------
+  */
+diff --git a/tests/test_sprintf_s.c b/tests/test_sprintf_s.c
+index a2df855f..ad7e2116 100644
+--- a/tests/test_sprintf_s.c
++++ b/tests/test_sprintf_s.c
+@@ -1,7 +1,7 @@
+ /*------------------------------------------------------------------
+  * test_sprintf_s
+  * File 'str/sprintf_s.c'
+- * Lines executed:96.88% of 32
++ * Lines executed:100.00% of 5
+  *
+  *------------------------------------------------------------------
+  */
+diff --git a/tests/test_stpncpy_s.c b/tests/test_stpncpy_s.c
+index ef2a1636..30fec845 100644
+--- a/tests/test_stpncpy_s.c
++++ b/tests/test_stpncpy_s.c
+@@ -1,6 +1,8 @@
+ /*------------------------------------------------------------------
+  * test_strncpy_s
+  * File 'stpncpy_s.c'
++ * File 'stpncpy_s.c'
++ * Lines executed:75.25% of 101
+  * Lines executed:75.25% of 101
+  *------------------------------------------------------------------
+  */
+diff --git a/tests/test_vfprintf_s.c b/tests/test_vfprintf_s.c
+index 6d345a3f..b19c36dd 100644
+--- a/tests/test_vfprintf_s.c
++++ b/tests/test_vfprintf_s.c
+@@ -1,7 +1,7 @@
+ /*------------------------------------------------------------------
+  * test_vfprintf_s
+  * File 'vfprintf_s.c'
+- * Lines executed:83.33% of 18
++ * Lines executed:100.00% of 22
+  *
+  *------------------------------------------------------------------
+  */
+diff --git a/tests/test_vsnprintf_s.c b/tests/test_vsnprintf_s.c
+index adc4f7dc..6d33e75e 100644
+--- a/tests/test_vsnprintf_s.c
++++ b/tests/test_vsnprintf_s.c
+@@ -1,7 +1,7 @@
+ /*------------------------------------------------------------------
+  * test_vsnprintf_s
+  * File 'wchar/vsnprintf_s.c'
+- * Lines executed:75.86% of 29
++ * Lines executed:40.37% of 488
+  *
+  *------------------------------------------------------------------
+  */
+diff --git a/tests/test_vsprintf_s.c b/tests/test_vsprintf_s.c
+index 63f7548d..da244766 100644
+--- a/tests/test_vsprintf_s.c
++++ b/tests/test_vsprintf_s.c
+@@ -1,7 +1,7 @@
+ /*------------------------------------------------------------------
+  * test_vsprintf_s
+  * File 'str/vsprintf_s.c'
+- * Lines executed:83.33% of 30
++ * Lines executed:66.67% of 6
+  *
+  *------------------------------------------------------------------
+  */
diff --git a/meta-oe/recipes-core/safec/safec/0058-configure-more-required-safec-CFLAGS.patch b/meta-oe/recipes-core/safec/safec/0058-configure-more-required-safec-CFLAGS.patch
new file mode 100644
index 000000000..355a443b4
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0058-configure-more-required-safec-CFLAGS.patch
@@ -0,0 +1,36 @@ 
+From 97e5923e56109b963a1fb6a6babf1875752fe197 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Mon, 13 Dec 2021 09:37:06 +0100
+Subject: [PATCH] configure: more required safec CFLAGS
+
+-fno-strict-aliasing -fno-strict-overflow -fno-delete-null-pointer-checks
+-fno-lifetime-dse
+to restrict wrong UB optimizations.
+See https://gcc.gnu.org/wiki/boringcc
+---
+ configure.ac | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 8f568d77..55756b06 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -543,10 +543,14 @@ case $host_os in
+        [],[$ax_ccf_err])
+     ;;
+ esac
+-AX_APPEND_COMPILE_FLAGS([-fstack-protector-strong -fstack-clash-protection -fcf-protection],
+-                         [WARN_CFLAGS],[$ax_ccf_err])
+-AX_APPEND_LINK_FLAGS([-fstack-protector-strong -fstack-clash-protection -fcf-protection],
+-                         [WARN_LDFLAGS],[$ax_ccf_err])
++AX_APPEND_COMPILE_FLAGS(
++        [-fstack-protector-strong -fstack-clash-protection -fcf-protection \
++         -fno-strict-aliasing -fno-strict-overflow -fno-delete-null-pointer-checks \
++         -fno-lifetime-dse],
++        [WARN_CFLAGS],[$ax_ccf_err])
++AX_APPEND_LINK_FLAGS(
++        [-fstack-protector-strong -fstack-clash-protection -fcf-protection],
++        [WARN_LDFLAGS],[$ax_ccf_err])
+ 
+ if test x$ax_cv_check_cflags__Wrestrict = xyes; then
+    AC_DEFINE([HAVE_WARNING_RESTRICT], 1, [Have -Wrestrict])
diff --git a/meta-oe/recipes-core/safec/safec/0059-configure.ac-add-disable-hardening-option.patch b/meta-oe/recipes-core/safec/safec/0059-configure.ac-add-disable-hardening-option.patch
new file mode 100644
index 000000000..4d9ee88f4
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0059-configure.ac-add-disable-hardening-option.patch
@@ -0,0 +1,67 @@ 
+From 8ba8901aec3257d2b98edf0a70e0bccc7447e243 Mon Sep 17 00:00:00 2001
+From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+Date: Sat, 8 Jan 2022 21:49:22 +0100
+Subject: [PATCH] configure.ac: add --disable-hardening option
+
+Allow the user to disable hardening which is enabled by default since
+version 02092020 and
+https://github.com/rurban/safeclib/commit/caa4408eb4a5c767f0474258af3b6ccf444e10aa
+to avoid the following build failure when the toolchain doesn't support
+stack-protector:
+
+/home/buildroot/autobuild/instance-3/output-1/host/opt/ext-toolchain/m68k-buildroot-uclinux-uclibc/bin/ld.real: ../src/.libs/libsafec-3.6.0.a(safe_mem_constraint.o): in function `handle_mem_bos_chk_warn':
+safe_mem_constraint.c:(.text+0x40): undefined reference to `__stack_chk_guard'
+
+Fixes:
+ - http://autobuild.buildroot.org/results/a481ee2d26a094358b0298617cce691be3077f22
+
+Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+---
+ configure.ac | 27 +++++++++++++++++++--------
+ 1 file changed, 19 insertions(+), 8 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 55756b06..bb82cedc 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -383,6 +383,14 @@ AC_ARG_ENABLE(debug-build,
+ 	esac], [enable_debug_build=false ])
+ AM_CONDITIONAL(ENABLE_DEBUG_BUILD, test "x$enable_debug_build" = "xtrue")
+ 
++AC_ARG_ENABLE(hardening,
++	AS_HELP_STRING([--disable-hardening],
++	               [disable hardening @<:@default=no@:>@]),
++	[case "${enableval}" in
++	yes) enable_hardening=true ;;
++	no)  enable_hardening=false ;;
++	*)   AC_MSG_ERROR([bad value ${enableval} for --enable-hardening]) ;;
++	esac], [enable_hardening=true])
+ 
+ AC_MSG_NOTICE([Check programs])
+ # ===============================================
+@@ -543,14 +551,17 @@ case $host_os in
+        [],[$ax_ccf_err])
+     ;;
+ esac
+-AX_APPEND_COMPILE_FLAGS(
+-        [-fstack-protector-strong -fstack-clash-protection -fcf-protection \
+-         -fno-strict-aliasing -fno-strict-overflow -fno-delete-null-pointer-checks \
+-         -fno-lifetime-dse],
+-        [WARN_CFLAGS],[$ax_ccf_err])
+-AX_APPEND_LINK_FLAGS(
+-        [-fstack-protector-strong -fstack-clash-protection -fcf-protection],
+-        [WARN_LDFLAGS],[$ax_ccf_err])
++
++if test "x$enable_hardening" = "xtrue" ; then
++	AX_APPEND_COMPILE_FLAGS(
++	        [-fstack-protector-strong -fstack-clash-protection -fcf-protection \
++	         -fno-strict-aliasing -fno-strict-overflow -fno-delete-null-pointer-checks \
++	         -fno-lifetime-dse],
++	        [WARN_CFLAGS],[$ax_ccf_err])
++	AX_APPEND_LINK_FLAGS(
++	        [-fstack-protector-strong -fstack-clash-protection -fcf-protection],
++	        [WARN_LDFLAGS],[$ax_ccf_err])
++fi
+ 
+ if test x$ax_cv_check_cflags__Wrestrict = xyes; then
+    AC_DEFINE([HAVE_WARNING_RESTRICT], 1, [Have -Wrestrict])
diff --git a/meta-oe/recipes-core/safec/safec/0060-ChangeLog-for-PR-107.patch b/meta-oe/recipes-core/safec/safec/0060-ChangeLog-for-PR-107.patch
new file mode 100644
index 000000000..a2639ee80
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0060-ChangeLog-for-PR-107.patch
@@ -0,0 +1,23 @@ 
+From defc4c7c2b8a5ff4b0ef6dd60d6a8422c21fe2bf Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Fri, 14 Jan 2022 14:33:05 +0100
+Subject: [PATCH] ChangeLog for PR #107
+
+---
+ ChangeLog | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/ChangeLog b/ChangeLog
+index 8eb6d432..9e0e9d47 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -7,6 +7,9 @@ Changes in 3.7.0
+         - Added our own portable implementation of the family of printf_s
+           functions. This make the results and errno sideeffects more predictable.
+           scanf_s not yet. Fixes GH #97.
++	- Added a --disable-hardening option, which bypasses obviously failing
++	  AX_APPEND_COMPILE_FLAGS probes (PR #107, ffontaine).
++	  E.g. needed on some exotic uclibc buildroot targets.
+         - Some minor bugfixes, like unknown size_t GH #89, ECONSTANTS as enums
+           on hurd (GH #101), sprintf_s with "" arg (GH #97).
+         - Minor test improvements overall.
diff --git a/meta-oe/recipes-core/safec/safec/0061-fixup-mingw-GH-action.patch b/meta-oe/recipes-core/safec/safec/0061-fixup-mingw-GH-action.patch
new file mode 100644
index 000000000..f0b33e945
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0061-fixup-mingw-GH-action.patch
@@ -0,0 +1,57 @@ 
+From 929e8002805b37c2ce1495e8bd8d0fd44e143ed8 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sun, 9 Jan 2022 19:10:35 +0100
+Subject: [PATCH] fixup mingw GH action
+
+no update, which is broken
+---
+ .github/workflows/main.yml | 19 ++++++++++++-------
+ 1 file changed, 12 insertions(+), 7 deletions(-)
+
+diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
+index 6f50ad69..a0d7c8a3 100644
+--- a/.github/workflows/main.yml
++++ b/.github/workflows/main.yml
+@@ -54,7 +54,7 @@ jobs:
+       uses: actions/checkout@v2
+     - run: sh build-aux/autogen.sh
+     - run: ./configure
+-    - run: make
++    - run: make V=1
+     - run: make check-log
+     #- run: make distcheck
+   mingw:
+@@ -81,12 +81,23 @@ jobs:
+           mingw-w64-x86_64-toolchain
+           mingw-w64-x86_64-libtool
+           mingw-w64-x86_64-perl
++          libtool
++          autoconf-wrapper
++          automake-wrapper
+     - run: reg add "HKLM\Software\Microsoft\Windows\Windows Error Reporting" /f /v DontShowUI /d 1
+     - run: git config --global core.autocrlf input
+     - name: checkout
+       uses: actions/checkout@v2
+     - shell: msys2 {0}
+       run: sh build-aux/autogen.sh
++      #run: libtoolize -f && autoheader && aclocal -I m4 && autoconf && automake --add-missing; autoreconf -fi
++      continue-on-error: true
++    - shell: msys2 {0}
++      run: ./configure
++    - shell: msys2 {0}
++      run: make V=1
++    - shell: msys2 {0}
++      run: make check-log
+     #- name: Create zipped asset
+     #  run: gzip -c configure >configure.gz
+     #- name: Create Release
+@@ -109,9 +120,3 @@ jobs:
+     #    asset_path: ./configure.gz
+     #    asset_name: configure.gz
+     #    asset_content_type: application/gzip
+-    - shell: msys2 {0}
+-      run: ./configure
+-    - shell: msys2 {0}
+-      run: make V=1
+-    - shell: msys2 {0}
+-      run: make check-log
diff --git a/meta-oe/recipes-core/safec/safec/0062-no-stack-clash-protection-on-macOS-clang-yet.patch b/meta-oe/recipes-core/safec/safec/0062-no-stack-clash-protection-on-macOS-clang-yet.patch
new file mode 100644
index 000000000..5aea0b083
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0062-no-stack-clash-protection-on-macOS-clang-yet.patch
@@ -0,0 +1,30 @@ 
+From c611d5cccbffd3223830fb51ee525b73a046ffd2 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Fri, 28 Jan 2022 14:57:57 +0100
+Subject: [PATCH] no stack-clash-protection on macOS clang yet
+
+---
+ .github/workflows/main.yml | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
+index a0d7c8a3..69470a7e 100644
+--- a/.github/workflows/main.yml
++++ b/.github/workflows/main.yml
+@@ -53,7 +53,7 @@ jobs:
+     - name: checkout
+       uses: actions/checkout@v2
+     - run: sh build-aux/autogen.sh
+-    - run: ./configure
++    - run: ./configure --disable-hardening
+     - run: make V=1
+     - run: make check-log
+     #- run: make distcheck
+@@ -90,7 +90,6 @@ jobs:
+       uses: actions/checkout@v2
+     - shell: msys2 {0}
+       run: sh build-aux/autogen.sh
+-      #run: libtoolize -f && autoheader && aclocal -I m4 && autoconf && automake --add-missing; autoreconf -fi
+       continue-on-error: true
+     - shell: msys2 {0}
+       run: ./configure
diff --git a/meta-oe/recipes-core/safec/safec/0063-minor-docs-m4.patch b/meta-oe/recipes-core/safec/safec/0063-minor-docs-m4.patch
new file mode 100644
index 000000000..6ddd407d5
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0063-minor-docs-m4.patch
@@ -0,0 +1,46 @@ 
+From 089a145c41cb4331de9ec7d9520aafd933c8fefe Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Fri, 28 Jan 2022 15:12:31 +0100
+Subject: [PATCH] minor: docs, m4
+
+---
+ m4/ax_gcc_func_attribute.m4 |  2 +-
+ src/io/gets_s.c             | 12 ++++++------
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/m4/ax_gcc_func_attribute.m4 b/m4/ax_gcc_func_attribute.m4
+index 2e93b004..3bebb975 100644
+--- a/m4/ax_gcc_func_attribute.m4
++++ b/m4/ax_gcc_func_attribute.m4
+@@ -81,7 +81,7 @@
+ #   and this notice are preserved.  This file is offered as-is, without any
+ #   warranty.
+ 
+-#serial 12
++#serial 13
+ 
+ AC_DEFUN([AX_GCC_FUNC_ATTRIBUTE], [
+     AS_VAR_PUSHDEF([ac_var], [ax_cv_have_func_attribute_$1])
+diff --git a/src/io/gets_s.c b/src/io/gets_s.c
+index 35f33039..02cb7032 100644
+--- a/src/io/gets_s.c
++++ b/src/io/gets_s.c
+@@ -90,12 +90,12 @@
+  * @retval  int >0     when on successful operation, all the characters from src
+  *                     were appended to dest and the result in dest is null
+  *                     terminated.
+- * @retval  0,errno=ESNULLP    when dest is a NULL pointer
+- * @retval  0,errno=ESZEROL    when dmax = 0
+- * @retval  0,errno=ESLEMAX    when dmax > RSIZE_MAX_STR
+- * @retval  0,errno=EOVERFLOW  when dmax > size of dest
+- * @retval  0,errno=ESUNTERM   endline or eof not encountered after storing
+- *                             dmax-1 characters to dest.
++ * @retval  errno=ESNULLP    when dest is a NULL pointer
++ * @retval  errno=ESZEROL    when dmax = 0
++ * @retval  errno=ESLEMAX    when dmax > RSIZE_MAX_STR
++ * @retval  errno=EOVERFLOW  when dmax > size of dest
++ * @retval  errno=ESUNTERM   endline or eof not encountered after storing
++ *                           dmax-1 characters to dest.
+  *
+  * @see
+  *    scanf_s()
diff --git a/meta-oe/recipes-core/safec/safec/0064-getenv_s-allow-dest-NULL-and-dmax-0.patch b/meta-oe/recipes-core/safec/safec/0064-getenv_s-allow-dest-NULL-and-dmax-0.patch
new file mode 100644
index 000000000..67a1d3e29
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0064-getenv_s-allow-dest-NULL-and-dmax-0.patch
@@ -0,0 +1,158 @@ 
+From b1441a77b3f50c8470e6e2a3f4c7632f8593528b Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Fri, 28 Jan 2022 15:43:49 +0100
+Subject: [PATCH] getenv_s: allow dest=NULL and dmax=0
+
+Thanks to @ulatekh, GH #109
+---
+ include/safe_lib.h    |  2 +-
+ src/os/getenv_s.c     | 27 +++++++++++++--------------
+ tests/test_getenv_s.c | 21 +++++++++++++--------
+ 3 files changed, 27 insertions(+), 23 deletions(-)
+
+diff --git a/include/safe_lib.h b/include/safe_lib.h
+index 30e022e3..265a207d 100644
+--- a/include/safe_lib.h
++++ b/include/safe_lib.h
+@@ -168,7 +168,7 @@ EXTERN struct tm *localtime_s(const time_t *restrict timer,
+ 
+ EXTERN errno_t _getenv_s_chk(size_t *restrict len, char *restrict dest,
+                              rsize_t dmax, const char *restrict name,
+-                             const size_t destbos) BOS_CHK(dest)
++                             const size_t destbos) BOS_CHK_BUTZERO(dest, dmax)
+     BOS_ATTR(_BOS_NULL(name), "empty name");
+ #define getenv_s(len, dest, dmax, name)                                        \
+     _getenv_s_chk(len, dest, dmax, name, BOS(dest))
+diff --git a/src/os/getenv_s.c b/src/os/getenv_s.c
+index 2d2158cb..abae4303 100644
+--- a/src/os/getenv_s.c
++++ b/src/os/getenv_s.c
+@@ -2,8 +2,9 @@
+  * getenv_s.c
+  *
+  * September 2017, Reini Urban
++ * January 2022, Reini Urban
+  *
+- * Copyright (c) 2017 by Reini Urban
++ * Copyright (c) 2017,2022 by Reini Urban
+  * All rights reserved.
+  *
+  * Permission is hereby granted, free of charge, to any person
+@@ -62,24 +63,22 @@
+  * @param[out] len    pointer to a size_t where getenv_s will store the length
+  *                    of the found environment variable. Might be NULL.
+  * @param[out] dest   pointer to a string where getenv_s will store the
+- * contents of the found environment variable.
++ *                    contents of the found environment variable. Might be NULL.
+  * @param[in]  dmax   maximum number of characters that getenv_s is allowed
+- *                    to write to dest (size of the buffer).
++ *                    to write to dest (size of the buffer). Might be 0.
+  * @param[in]  name   null-terminated character string identifying the name of
+  *                    the environmental variable to look for.
+  *
+- * @pre name and dest shall not be a null pointer.
++ * @pre name shall not be a null pointer.
+  * @pre dmax shall not be greater than RSIZE_MAX_STR and size of dest.
+- * @pre dmax shall not equal zero.
+- * @pre dmax shall be greater than the strlen of the returned env value.
++ * @pre dmax shall be 0 if dest is NULL or greater than the strlen of the returned env value.
+  *
+  * @return zero if the environment variable was found, non-zero if it was not
+  *         found of if a runtime constrant violation occurred. On any error,
+- *         writes zero to *len (unless len is a null pointer).
++ *         writes zero to *len, unless len is a null pointer.
+  *
+  * @retval  EOK        on success
+- * @retval  ESNULLP    when dest or name are a NULL pointer
+- * @retval  ESZEROL    when dmax = 0
++ * @retval  ESNULLP    when name is a NULL pointer
+  * @retval  ESLEMAX    when dmax > RSIZE_MAX_STR
+  * @retval  EOVERFLOW  when dmax > size of dest (optionally, when the compiler
+  *                     knows the object_size statically)
+@@ -98,10 +97,8 @@ EXPORT errno_t _getenv_s_chk(size_t *restrict len, char *restrict dest,
+ #endif
+ {
+     const char *buf;
+-    int len1;
++    size_t len1;
+ 
+-    CHK_DEST_NULL("getenv_s")
+-    CHK_DMAX_ZERO("getenv_s")
+     if (destbos == BOS_UNKNOWN) {
+         CHK_DMAX_MAX("getenv_s", RSIZE_MAX_STR)
+         BND_CHK_PTR_BOUNDS(dest, dmax);
+@@ -109,6 +106,8 @@ EXPORT errno_t _getenv_s_chk(size_t *restrict len, char *restrict dest,
+         CHK_DEST_OVR("getenv_s", destbos)
+     }
+     if (unlikely(name == NULL)) {
++        if (len)
++            *len = 0;
+         handle_error(dest, dmax, "getenv_s: name is null", ESNULLP);
+         return ESNULLP;
+     }
+@@ -130,12 +129,12 @@ EXPORT errno_t _getenv_s_chk(size_t *restrict len, char *restrict dest,
+     }
+ 
+     len1 = strlen(buf);
+-    if (unlikely((rsize_t)len1 >= dmax)) {
++    if (unlikely(dmax != 0 && len1 >= dmax)) {
+         if (len)
+             *len = 0;
+         handle_error(dest, dmax, "getenv_s: dmax is too small", ESNOSPC);
+         return RCNEGATE(ESNOSPC);
+-    } else {
++    } else if (dest) {
+         if (len)
+             *len = len1;
+         strcpy_s(dest, dmax, buf);
+diff --git a/tests/test_getenv_s.c b/tests/test_getenv_s.c
+index 3c7be785..4e36fa9b 100644
+--- a/tests/test_getenv_s.c
++++ b/tests/test_getenv_s.c
+@@ -33,26 +33,26 @@ int test_getenv_s(void) {
+     /*--------------------------------------------------*/
+ 
+ #ifndef HAVE_CT_BOS_OVR
+-    EXPECT_BOS("empty dest")
+-    rc = getenv_s(&len, NULL, LEN, name);
++    EXPECT_BOS("empty name")
++    rc = getenv_s(&len, dest, LEN, NULL);
+     if (use_msvcrt && rc == ESNULLP) {
+         printf("safec.dll overriding msvcrt.dll\n");
+         use_msvcrt = false;
+     }
+-    ERR_MSVC(ESNULLP, EINVAL);
+-
+-    EXPECT_BOS("empty name")
+-    rc = getenv_s(&len, dest, LEN, NULL);
+     ERR_MSVC(ESNULLP, 0);
++#endif
++
++    rc = getenv_s(&len, NULL, 0, name);
++    ERR_MSVC(0, EINVAL);
+ 
+     /*--------------------------------------------------*/
+ 
+-    EXPECT_BOS("empty dest or dmax")
+     rc = getenv_s(&len, dest, 0, name);
+-    ERR_MSVC(ESZEROL, EINVAL);
++    ERR_MSVC(0, EINVAL);
+ 
+     /*--------------------------------------------------*/
+ 
++#ifndef HAVE_CT_BOS_OVR
+     EXPECT_BOS("dest overflow")
+     rc = getenv_s(&len, dest, RSIZE_MAX_STR + 1, name);
+     ERR_MSVC(ESLEMAX, 0);
+@@ -62,6 +62,11 @@ int test_getenv_s(void) {
+ 
+     rc = getenv_s(&len, dest, 1, name);
+     ERR_MSVC(ESNOSPC, 34);
++    if (len != 0) {
++        printf("%s %u  Error len=%u rc=%d \n", __FUNCTION__, __LINE__,
++               (unsigned)len, rc);
++        errs++;
++    }
+ 
+     /*--------------------------------------------------*/
+ 
diff --git a/meta-oe/recipes-core/safec/safec/0065-fixup-header-includes.patch b/meta-oe/recipes-core/safec/safec/0065-fixup-header-includes.patch
new file mode 100644
index 000000000..e0c24dba5
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0065-fixup-header-includes.patch
@@ -0,0 +1,104 @@ 
+From 9be9658cf33ff07bcb500075fd6404f070893556 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Fri, 28 Jan 2022 17:56:03 +0100
+Subject: [PATCH] fixup header includes
+
+---
+ .github/workflows/main.yml    | 3 ++-
+ Makefile.am                   | 6 +++---
+ src/mem/mem_primitives_lib.h  | 2 +-
+ src/mem/safe_mem_constraint.h | 2 +-
+ src/str/safe_str_constraint.h | 2 +-
+ tests/perf_memset_s.c         | 2 +-
+ 6 files changed, 9 insertions(+), 8 deletions(-)
+
+diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
+index 69470a7e..559685cf 100644
+--- a/.github/workflows/main.yml
++++ b/.github/workflows/main.yml
+@@ -13,6 +13,7 @@ jobs:
+       fail-fast: false
+       matrix:
+         CONF_ARGS:
++          -
+           - --disable-wchar
+           - --enable-unsafe --enable-norm-compat
+           - --enable-debug --enable-unsafe --enable-norm-compat --enable-gcov
+@@ -42,7 +43,7 @@ jobs:
+     - if: matrix.CONF_ARGS == ''
+       name: Run make distcheck
+       run: |
+-        sudo apt-get -y install doxygen
++        sudo apt-get -y install doxygen wget perl
+         make distcheck
+   macOS:
+     name: macOS
+diff --git a/Makefile.am b/Makefile.am
+index 98b82982..bcf4de00 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -57,9 +57,9 @@ SAFEC_INFRA = \
+ 	${top_srcdir}/build-aux/msys2.bat        \
+ 	${top_srcdir}/build-aux/smoke.sh         \
+ 	$(top_srcdir)/build-aux/version-gen.sh   \
+-	$(top_srcdir)/doc/libc-overview.md     	   \
+-	$(top_srcdir)/scripts                      \
+-	$(top_srcdir)/.version                     \
++	$(top_srcdir)/doc/libc-overview.md     	 \
++	$(top_srcdir)/scripts                    \
++	$(top_srcdir)/.version                   \
+ 	$(top_srcdir)/libsafec.pc.in
+ 
+ SAFEC_GENHEADERS = \
+diff --git a/src/mem/mem_primitives_lib.h b/src/mem/mem_primitives_lib.h
+index 347b3a2f..72365e4e 100644
+--- a/src/mem/mem_primitives_lib.h
++++ b/src/mem/mem_primitives_lib.h
+@@ -35,7 +35,7 @@
+ #define __MEM_PRIMITIVES_LIB_H__
+ 
+ #ifndef FOR_DOXYGEN
+-#include "src/safeclib_private.h"
++#include "safeclib_private.h"
+ #endif
+ 
+ #ifndef __KERNEL__
+diff --git a/src/mem/safe_mem_constraint.h b/src/mem/safe_mem_constraint.h
+index 748af001..41346819 100644
+--- a/src/mem/safe_mem_constraint.h
++++ b/src/mem/safe_mem_constraint.h
+@@ -35,7 +35,7 @@
+ #ifdef FOR_DOXYGEN
+ #include "safe_mem_lib.h"
+ #else
+-#include "src/safeclib_private.h"
++#include "safeclib_private.h"
+ #endif
+ 
+ /*
+diff --git a/src/str/safe_str_constraint.h b/src/str/safe_str_constraint.h
+index 0a685185..19f1dd97 100644
+--- a/src/str/safe_str_constraint.h
++++ b/src/str/safe_str_constraint.h
+@@ -35,7 +35,7 @@
+ #ifdef FOR_DOXYGEN
+ #include "safe_str_lib.h"
+ #else
+-#include "src/safeclib_private.h"
++#include "safeclib_private.h"
+ #endif
+ 
+ /*
+diff --git a/tests/perf_memset_s.c b/tests/perf_memset_s.c
+index 303ad14e..ca89ceec 100644
+--- a/tests/perf_memset_s.c
++++ b/tests/perf_memset_s.c
+@@ -28,7 +28,7 @@
+ #include "safe_mem_lib.h"
+ #include "perf_private.h"
+ #undef debug_printf
+-#include "src/mem/mem_primitives_lib.h"
++#include "mem/mem_primitives_lib.h"
+ 
+ #if defined(TEST_MSVCRT) && defined(HAVE_MEMSET_S)
+ #undef memset_s
diff --git a/meta-oe/recipes-core/safec/safec/0066-fixup-test_towfc_s-a-bit.patch b/meta-oe/recipes-core/safec/safec/0066-fixup-test_towfc_s-a-bit.patch
new file mode 100644
index 000000000..f9bbd1045
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0066-fixup-test_towfc_s-a-bit.patch
@@ -0,0 +1,34 @@ 
+From 9fbdac53fceb2241fb44d2f8829aec20a5d5718f Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Fri, 28 Jan 2022 18:06:53 +0100
+Subject: [PATCH] fixup test_towfc_s a bit
+
+---
+ tests/test_towfc_s.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/tests/test_towfc_s.c b/tests/test_towfc_s.c
+index 46795bd7..e378c91b 100644
+--- a/tests/test_towfc_s.c
++++ b/tests/test_towfc_s.c
+@@ -111,7 +111,7 @@ int test_towfc_s(void) {
+                     ERR(ESNOTFND);
+                     if (n) {
+                         printf("%s %u  Error %d U+%04X n=%d 0x%x\n",
+-                               __FUNCTION__, __LINE__, rc, wc, n, (int)cp);
++                               __FUNCTION__, __LINE__, rc, wc, n, (unsigned)cp);
+                         errs++;
+                     }
+                 }
+@@ -212,9 +212,9 @@ int test_towfc_s(void) {
+                                status, name);
+                     } else if (cp != m0) {
+                         errs++;
+-                        printf("%s %u  Error: towfc(U+%04X) => %X \"%s\" "
++                        printf("%s %u  Error: towfc(U+%04X) => %X != %X \"%s\" "
+                                "status=%s %s\n",
+-                               __FUNCTION__, __LINE__, wc, cp, mapping, status,
++                               __FUNCTION__, __LINE__, wc, cp, m0, mapping, status,
+                                name);
+                     }
+                 }
diff --git a/meta-oe/recipes-core/safec/safec/0067-export-SAFECLIB_UNICODE_VERSION-13.patch b/meta-oe/recipes-core/safec/safec/0067-export-SAFECLIB_UNICODE_VERSION-13.patch
new file mode 100644
index 000000000..20207c295
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0067-export-SAFECLIB_UNICODE_VERSION-13.patch
@@ -0,0 +1,152 @@ 
+From 815a26260504f32c5f053ab53830b3a9dccea99a Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Fri, 28 Jan 2022 18:28:23 +0100
+Subject: [PATCH] export SAFECLIB_UNICODE_VERSION 13
+
+and adjust tests. we are at 15 already (!), latest perl5.35 just at 14
+---
+ ChangeLog              |  3 +++
+ include/safe_str_lib.h |  3 +++
+ tests/test_towfc_s.c   |  2 +-
+ tests/test_towlower.c  |  2 +-
+ tests/test_towupper.c  | 11 +++++------
+ tests/test_wcsfc_s.c   |  6 +++---
+ tests/test_wcsnorm_s.c |  4 ++--
+ 7 files changed, 18 insertions(+), 13 deletions(-)
+
+diff --git a/ChangeLog b/ChangeLog
+index 9e0e9d47..d456cc76 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -3,6 +3,9 @@
+ 
+ Changes in 3.7.0
+         - Switched to proper semantic versioning for upstream packagers.
++        - Fixed getenv_s to allow dest=NULL or dmax=0 as in the spec. (GH #109)
++        - Updated to Unicode 13 (tested against perl 5.34)
++          export define SAFECLIB_UNICODE_VERSION 13
+         - Added stpcpy_s and stpncpy_s as in the Intel safestringlib fork.
+         - Added our own portable implementation of the family of printf_s
+           functions. This make the results and errno sideeffects more predictable.
+diff --git a/include/safe_str_lib.h b/include/safe_str_lib.h
+index 9f5a85ef..b5680fde 100644
+--- a/include/safe_str_lib.h
++++ b/include/safe_str_lib.h
+@@ -66,6 +66,9 @@ extern "C" {
+ #define EXTERN extern
+ #endif
+ 
++/* With this UCD version we generated our tables */
++#define SAFECLIB_UNICODE_VERSION 13
++
+ /**
+  * The shortest string is a null string!!
+  */
+diff --git a/tests/test_towfc_s.c b/tests/test_towfc_s.c
+index e378c91b..a7ac808f 100644
+--- a/tests/test_towfc_s.c
++++ b/tests/test_towfc_s.c
+@@ -67,7 +67,7 @@ int test_towfc_s(void) {
+     if (!f) {
+         printf("downloading %s ...", CFOLD);
+         fflush(stdout);
+-        system("wget ftp://ftp.unicode.org/Public/UNIDATA/CaseFolding.txt")
++        system("wget https://www.unicode.org/Public/13.0.0/ucd/CaseFolding.txt")
+             ? printf(" done\n")
+             : printf(" failed\n");
+         f = fopen(CFOLD, "r");
+diff --git a/tests/test_towlower.c b/tests/test_towlower.c
+index 49b9a26c..e4a496d4 100644
+--- a/tests/test_towlower.c
++++ b/tests/test_towlower.c
+@@ -38,7 +38,7 @@ int test_towlower(void) {
+     if (!f) {
+         printf("downloading %s ...", CFOLD);
+         fflush(stdout);
+-        system("wget ftp://ftp.unicode.org/Public/UNIDATA/CaseFolding.txt")
++        system("wget https://www.unicode.org/Public/13.0.0/ucd/CaseFolding.txt")
+             ? printf(" done\n")
+             : printf(" failed\n");
+         printf(" done\n");
+diff --git a/tests/test_towupper.c b/tests/test_towupper.c
+index 5d3531b6..b47be8e4 100644
+--- a/tests/test_towupper.c
++++ b/tests/test_towupper.c
+@@ -29,11 +29,11 @@ int test_towupper(void);
+ #define CFOLD "CaseFolding.txt"
+ #ifndef PERL
+ /* Must have the same Unicode version 9.0, at least 5.26.
+-   Better 5.27.3 with Unicode 10, 5.30 with 12.1, 5.32 with 13.0
++   Better 5.27.3 with Unicode 10, 5.30 with 12.1, 5.32 with 13.0, 5.34 with 14.0
+  */
+ /*# define PERL "perl" */
+-/*# define PERL "cperl5.27.2"*/
+-#define PERL "perl5.32"
++/*# define PERL "cperl5.30.0"*/
++#define PERL "perl5.34.0"
+ #endif
+ #define TESTPL "test-upr.pl"
+ 
+@@ -154,8 +154,7 @@ int test_towupper(void) {
+     if (!f) {
+         printf("downloading %s ...", GENCAT);
+         fflush(stdout);
+-        if (system("wget "
+-                   "ftp://ftp.unicode.org/Public/UNIDATA/extracted/"
++        if (system("wget https://www.unicode.org/Public/13.0.0/ucd/extracted/"
+                    "DerivedGeneralCategory.txt"))
+             printf(" done\n");
+         else
+@@ -167,7 +166,7 @@ int test_towupper(void) {
+     if (!cf) {
+         printf("downloading %s ...", CFOLD);
+         fflush(stdout);
+-        if (system("wget ftp://ftp.unicode.org/Public/UNIDATA/CaseFolding.txt"))
++        if (system("wget https://www.unicode.org/Public/13.0.0/ucd/CaseFolding.txt"))
+             printf(" done\n");
+         else
+             printf(" failed\n");
+diff --git a/tests/test_wcsfc_s.c b/tests/test_wcsfc_s.c
+index f81c5113..49e429d0 100644
+--- a/tests/test_wcsfc_s.c
++++ b/tests/test_wcsfc_s.c
+@@ -18,13 +18,13 @@ int test_wcsfc_s(void);
+ 
+ #define PERL_TEST
+ /* Must have the same Unicode version 9.0, at least 5.26.
+-   Better 5.27.3 with Unicode 10, 5.30 with 12.1, 5.32 with 13.0
++   Better 5.27.3 with Unicode 10, 5.30 with 12.1, 5.32, 5.36 with 14.0
+    perl -MUnicode::UCD -e'print Unicode::UCD::UnicodeVersion()'
+ */
+ #ifndef PERL
+ /*# define PERL "perl"*/
+ /*# define PERL "cperl5.30.0"*/
+-#define PERL "perl5.32"
++#define PERL "perl5.34.0"
+ #endif
+ #define TESTPL "test-fc.pl"
+ 
+@@ -440,7 +440,7 @@ int test_wcsfc_s(void) {
+     /* see if we can lower-case and decompose all */
+ #ifdef PERL_TEST
+     fprintf_s(pl,
+-              "use v5.27.2;\nno warnings;\nuse Unicode::Normalize;\nmy $err;"
++              "use v5.34;\nno warnings;\nuse Unicode::Normalize;\nmy $err;"
+               "sub wstr ($) {\n"
+               "  join('',map{sprintf'\\x{%%X}',$_} unpack 'W*',shift);\n"
+               "}\n"
+diff --git a/tests/test_wcsnorm_s.c b/tests/test_wcsnorm_s.c
+index 44e71177..4219ae1c 100644
+--- a/tests/test_wcsnorm_s.c
++++ b/tests/test_wcsnorm_s.c
+@@ -28,8 +28,8 @@ int test_wcsnorm_s(void);
+ */
+ #ifndef PERL
+ /*# define PERL "perl" */
+-/*# define PERL "cperl5.29.2" */
+-#define PERL "perl5.32"
++/*# define PERL "cperl5.30.0" */
++#define PERL "perl5.34.0"
+ #endif
+ #define TESTPL "test-norm.pl"
+ 
diff --git a/meta-oe/recipes-core/safec/safec/0068-update-to-Unicode-14.patch b/meta-oe/recipes-core/safec/safec/0068-update-to-Unicode-14.patch
new file mode 100644
index 000000000..caba43c9b
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0068-update-to-Unicode-14.patch
@@ -0,0 +1,10124 @@ 
+From 838c640ecc7d3e8ee69fa155a07cf2aa816737bb Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Fri, 28 Jan 2022 18:50:06 +0100
+Subject: [PATCH] update to Unicode 14
+
+---
+ .gitignore                       |    4 +
+ ChangeLog                        |    4 +-
+ include/safe_str_lib.h           |    2 +-
+ src/extwchar/towctrans.c         |   10 +-
+ src/extwchar/towfc_s.c           |  121 +-
+ src/extwchar/unw16ifcan.h        |    2 +-
+ src/extwchar/unw16ifcmb.h        |   24 +-
+ src/extwchar/unw16ifcmp.h        |    2 +-
+ src/extwchar/unw16ifcpt.h        | 1540 +++++------
+ src/extwchar/unw16ifexc.h        |    2 +-
+ src/extwchar/unwifcan.h          |    2 +-
+ src/extwchar/unwifcmb.h          |   24 +-
+ src/extwchar/unwifcmp.h          |    2 +-
+ src/extwchar/unwifcpt.h          | 1323 +++++-----
+ src/extwchar/unwifexc.h          |    2 +-
+ tests/CaseFolding.txt            | 1584 ------------
+ tests/DerivedGeneralCategory.txt | 4100 ------------------------------
+ tests/Makefile.am                |    2 +-
+ tests/test_towfc_s.c             |   17 +-
+ tests/test_towlower.c            |    2 +-
+ tests/test_towupper.c            |    6 +-
+ tests/test_wcsfc_s.c             |    2 +-
+ tests/test_wcsnorm_s.c           |    2 +-
+ 23 files changed, 1579 insertions(+), 7200 deletions(-)
+ delete mode 100644 tests/CaseFolding.txt
+ delete mode 100644 tests/DerivedGeneralCategory.txt
+
+diff --git a/.gitignore b/.gitignore
+index 893dd74d..32975b6a 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -75,6 +75,8 @@ tests/test-suite*.log
+ tests/test-fc.pl
+ tests/test-norm.pl
+ tests/test-upr.pl
++tests/CaseFolding.txt
++tests/DerivedGeneralCategory.txt
+ Doxyfile
+ doc/footer
+ doc/html
+@@ -82,6 +84,8 @@ doc/man
+ src/gcov.log
+ tests/gcov.log
+ src/Scripts.txt
++# generated for u8
++src/extwchar/un8if*.h
+ 
+ #
+ # Debian directory (make deb-pkg)
+diff --git a/ChangeLog b/ChangeLog
+index d456cc76..8c537aa1 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -4,8 +4,8 @@
+ Changes in 3.7.0
+         - Switched to proper semantic versioning for upstream packagers.
+         - Fixed getenv_s to allow dest=NULL or dmax=0 as in the spec. (GH #109)
+-        - Updated to Unicode 13 (tested against perl 5.34)
+-          export define SAFECLIB_UNICODE_VERSION 13
++        - Updated to Unicode 14 (tested against perl 5.35.7)
++          export define SAFECLIB_UNICODE_VERSION 14
+         - Added stpcpy_s and stpncpy_s as in the Intel safestringlib fork.
+         - Added our own portable implementation of the family of printf_s
+           functions. This make the results and errno sideeffects more predictable.
+diff --git a/include/safe_str_lib.h b/include/safe_str_lib.h
+index b5680fde..5486ceb5 100644
+--- a/include/safe_str_lib.h
++++ b/include/safe_str_lib.h
+@@ -67,7 +67,7 @@ extern "C" {
+ #endif
+ 
+ /* With this UCD version we generated our tables */
+-#define SAFECLIB_UNICODE_VERSION 13
++#define SAFECLIB_UNICODE_VERSION 14
+ 
+ /**
+  * The shortest string is a null string!!
+diff --git a/src/extwchar/towctrans.c b/src/extwchar/towctrans.c
+index dfa36aeb..cd9fdc8d 100644
+--- a/src/extwchar/towctrans.c
++++ b/src/extwchar/towctrans.c
+@@ -39,7 +39,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+     { (u1), (l) - (u1), (u2) - (u1) + 1 }
+ #define CASELACE(u1, u2) CASEMAP((u1), (u2), (u1) + 1)
+ 
+-/* Unicode 13.0 */
++/* Unicode 14.0 */
+ 
+ /* must be sorted */
+ static const struct {
+@@ -113,7 +113,8 @@ static const struct {
+ 
+     CASEMAP(0x2160, 0x216f, 0x2170),
+     CASEMAP(0x24b6, 0x24cf, 0x24d0),
+-    CASEMAP(0x2c00, 0x2c2e, 0x2c30),
++    CASEMAP(0x2c00, 0x2c2f, 0x2c30),
++
+     CASELACE(0x2c67, 0x2c6b),
+     CASELACE(0x2c80, 0x2ce2),
+     CASELACE(0x2ceb, 0x2ced),
+@@ -131,9 +132,13 @@ static const struct {
+     CASELACE(0xa796, 0xa79e),
+     CASELACE(0xa7a0, 0xa7a8),
+     CASELACE(0xa7b4, 0xa7be), /* Unicode 8,12 */
++    CASELACE(0xa7c0, 0xa7c1), /* Unicode 14 */
+     CASELACE(0xa7c2, 0xa7c3), /* Unicode 12 */
+     CASELACE(0xa7c7, 0xa7c8), /* Unicode 13 */
+     CASELACE(0xa7c9, 0xa7ca), /* Unicode 13 */
++    CASELACE(0xa7d0, 0xa7d1), /* Unicode 14 */
++    CASELACE(0xa7d6, 0xa7d7), /* Unicode 14 */
++    CASELACE(0xa7d8, 0xa7d9), /* Unicode 14 */
+     CASELACE(0xa7f5, 0xa7f6), /* Unicode 13 */
+ 
+     CASEMAP(0xff21, 0xff3a, 0xff41),
+@@ -150,6 +155,7 @@ static const struct {
+     CASEMAP(0xab70, 0xabbf, 0x13a0), /* CHEROKEE */
+     CASEMAP(0x10400, 0x10427, 0x10428),
+     CASEMAP(0x104b0, 0x104d3, 0x104d8), /* Unicode 9 */
++    CASEMAP(0x10570, 0x10595, 0x10597), /* Unicode 14 */
+     CASEMAP(0x10c80, 0x10cb2, 0x10cc0), /* Unicode 8 */
+     CASEMAP(0x118a0, 0x118bf, 0x118c0), /* Unicode 7 */
+     CASEMAP(0x16e40, 0x16e5f, 0x16e60), /* MEDEFAIDRIN reverse (Unicode 11) */
+diff --git a/src/extwchar/towfc_s.c b/src/extwchar/towfc_s.c
+index baabde42..2e31c430 100644
+--- a/src/extwchar/towfc_s.c
++++ b/src/extwchar/towfc_s.c
+@@ -2,8 +2,9 @@
+  * towfc_s.c
+  *
+  * September 2017, Reini Urban
++ * January 2022, Reini Urban
+  *
+- * Copyright (c) 2017 by Reini Urban
++ * Copyright (c) 2017,2022 by Reini Urban
+  * All rights reserved.
+  *
+  * Permission is hereby granted, free of charge, to any person
+@@ -42,14 +43,14 @@
+  *    \b iswfc() checks the uppercase character for a mapping to foldcase,
+  *    returning the number of new wide character codepoints needed.
+  *    The usual \c iswupper(wc) case returns 1, and the special 104 full
+- * folding cases as specified in Unicode 10.0 \c CaseFolding.txt return either
+- * 2 or 3.
++ *    folding cases as specified in Unicode 10.0 \c CaseFolding.txt return either
++ *    2 or 3. This implements Unicode 14.0
+  *
+  * @param[in]   wc  unicode character codepoint
+  *
+  * @retval  0   when there is no corresponding lowercase mapping.
+  * @retval  1   when there is a corresponding common or simple foldcase
+- * mapping.
++ *              mapping.
+  * @retval  2   a full case-folding expands to 2 characters
+  * @retval  3   a full case-folding expands to 3 characters
+  *
+@@ -68,6 +69,7 @@ static const struct {
+     unsigned short lower1;
+     unsigned short lower2;
+ } tbl2[] = {
++    // clang-format off
+     {0x00DF, 0x0073, 0x0073}, /* LATIN SMALL LETTER SHARP S => ss */
+     {0x0130, 0x0069, 0x0307}, /* LATIN CAPITAL LETTER I WITH DOT ABOVE */
+     {0x0149, 0x02BC, 0x006E}, /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */
+@@ -81,10 +83,8 @@ static const struct {
+     {0x1E9E, 0x0073, 0x0073}, /* LATIN CAPITAL LETTER SHARP S => ss */
+     {0x1F50, 0x03C5, 0x0313}, /* GREEK SMALL LETTER UPSILON WITH PSILI */
+     /* the following folding mappings need to be normalized to NFD */
+-    {0x1F80, 0x1F00,
+-     0x03B9}, /* GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI */
+-    {0x1F81, 0x1F01,
+-     0x03B9}, /* GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI */
++    {0x1F80, 0x1F00, 0x03B9}, /* GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI */
++    {0x1F81, 0x1F01, 0x03B9}, /* GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI */
+     {0x1F82, 0x1F02, 0x03B9}, /* GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+                                  AND YPOGEGRAMMENI */
+     {0x1F83, 0x1F03, 0x03B9}, /* GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+@@ -97,10 +97,8 @@ static const struct {
+                                  PERISPOMENI AND YPOGEGRAMMENI */
+     {0x1F87, 0x1F07, 0x03B9}, /* GREEK SMALL LETTER ALPHA WITH DASIA AND
+                                  PERISPOMENI AND YPOGEGRAMMENI */
+-    {0x1F88, 0x1F00,
+-     0x03B9}, /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI */
+-    {0x1F89, 0x1F01,
+-     0x03B9}, /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI */
++    {0x1F88, 0x1F00, 0x03B9}, /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI */
++    {0x1F89, 0x1F01, 0x03B9}, /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI */
+     {0x1F8A, 0x1F02, 0x03B9}, /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND
+                                  VARIA AND PROSGEGRAMMENI */
+     {0x1F8B, 0x1F03, 0x03B9}, /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND
+@@ -113,10 +111,8 @@ static const struct {
+                                  PERISPOMENI AND PROSGEGRAMMENI */
+     {0x1F8F, 0x1F07, 0x03B9}, /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND
+                                  PERISPOMENI AND PROSGEGRAMMENI */
+-    {0x1F90, 0x1F20,
+-     0x03B9}, /* GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI */
+-    {0x1F91, 0x1F21,
+-     0x03B9}, /* GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI */
++    {0x1F90, 0x1F20, 0x03B9}, /* GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI */
++    {0x1F91, 0x1F21, 0x03B9}, /* GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI */
+     {0x1F92, 0x1F22, 0x03B9}, /* GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+                                  AND YPOGEGRAMMENI */
+     {0x1F93, 0x1F23, 0x03B9}, /* GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+@@ -129,10 +125,8 @@ static const struct {
+                                  PERISPOMENI AND YPOGEGRAMMENI */
+     {0x1F97, 0x1F27, 0x03B9}, /* GREEK SMALL LETTER ETA WITH DASIA AND
+                                  PERISPOMENI AND YPOGEGRAMMENI */
+-    {0x1F98, 0x1F20,
+-     0x03B9}, /* GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI */
+-    {0x1F99, 0x1F21,
+-     0x03B9}, /* GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI */
++    {0x1F98, 0x1F20, 0x03B9}, /* GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI */
++    {0x1F99, 0x1F21, 0x03B9}, /* GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI */
+     {0x1F9A, 0x1F22, 0x03B9}, /* GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+                                  AND PROSGEGRAMMENI */
+     {0x1F9B, 0x1F23, 0x03B9}, /* GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+@@ -145,10 +139,8 @@ static const struct {
+                                  PERISPOMENI AND PROSGEGRAMMENI */
+     {0x1F9F, 0x1F27, 0x03B9}, /* GREEK CAPITAL LETTER ETA WITH DASIA AND
+                                  PERISPOMENI AND PROSGEGRAMMENI */
+-    {0x1FA0, 0x1F60,
+-     0x03B9}, /* GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI */
+-    {0x1FA1, 0x1F61,
+-     0x03B9}, /* GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI */
++    {0x1FA0, 0x1F60, 0x03B9}, /* GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI */
++    {0x1FA1, 0x1F61, 0x03B9}, /* GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI */
+     {0x1FA2, 0x1F62, 0x03B9}, /* GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+                                  AND YPOGEGRAMMENI */
+     {0x1FA3, 0x1F63, 0x03B9}, /* GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+@@ -161,10 +153,8 @@ static const struct {
+                                  PERISPOMENI AND YPOGEGRAMMENI */
+     {0x1FA7, 0x1F67, 0x03B9}, /* GREEK SMALL LETTER OMEGA WITH DASIA AND
+                                  PERISPOMENI AND YPOGEGRAMMENI */
+-    {0x1FA8, 0x1F60,
+-     0x03B9}, /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI */
+-    {0x1FA9, 0x1F61,
+-     0x03B9}, /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI */
++    {0x1FA8, 0x1F60, 0x03B9}, /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI */
++    {0x1FA9, 0x1F61, 0x03B9}, /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI */
+     {0x1FAA, 0x1F62, 0x03B9}, /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND
+                                  VARIA AND PROSGEGRAMMENI */
+     {0x1FAB, 0x1F63, 0x03B9}, /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND
+@@ -177,33 +167,25 @@ static const struct {
+                                  PERISPOMENI AND PROSGEGRAMMENI */
+     {0x1FAF, 0x1F67, 0x03B9}, /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND
+                                  PERISPOMENI AND PROSGEGRAMMENI */
+-    {0x1FB2, 0x1F70,
+-     0x03B9}, /* GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI */
++    {0x1FB2, 0x1F70, 0x03B9}, /* GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI */
+     {0x1FB3, 0x03B1, 0x03B9}, /* GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI */
+-    {0x1FB4, 0x03AC,
+-     0x03B9}, /* GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI */
++    {0x1FB4, 0x03AC, 0x03B9}, /* GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI */
+     {0x1FB6, 0x03B1, 0x0342}, /* GREEK SMALL LETTER ALPHA WITH PERISPOMENI */
+-    {0x1FBC, 0x03B1,
+-     0x03B9}, /* GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI */
+-    {0x1FC2, 0x1F74,
+-     0x03B9}, /* GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI */
++    {0x1FBC, 0x03B1, 0x03B9}, /* GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI */
++    {0x1FC2, 0x1F74, 0x03B9}, /* GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI */
+     {0x1FC3, 0x03B7, 0x03B9}, /* GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI */
+-    {0x1FC4, 0x03AE,
+-     0x03B9}, /* GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI */
++    {0x1FC4, 0x03AE, 0x03B9}, /* GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI */
+     {0x1FC6, 0x03B7, 0x0342}, /* GREEK SMALL LETTER ETA WITH PERISPOMENI */
+     {0x1FCC, 0x03B7, 0x03B9}, /* GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI */
+     {0x1FD6, 0x03B9, 0x0342}, /* GREEK SMALL LETTER IOTA WITH PERISPOMENI */
+     {0x1FE4, 0x03C1, 0x0313}, /* GREEK SMALL LETTER RHO WITH PSILI */
+     {0x1FE6, 0x03C5, 0x0342}, /* GREEK SMALL LETTER UPSILON WITH PERISPOMENI */
+-    {0x1FF2, 0x1F7C,
+-     0x03B9}, /* GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI */
++    {0x1FF2, 0x1F7C, 0x03B9}, /* GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI */
+     {0x1FF3, 0x03C9, 0x03B9}, /* GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI */
+-    {0x1FF4, 0x03CE,
+-     0x03B9}, /* GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI */
++    {0x1FF4, 0x03CE, 0x03B9}, /* GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI */
+     /* eof nfd */
+     {0x1FF6, 0x03C9, 0x0342}, /* GREEK SMALL LETTER OMEGA WITH PERISPOMENI */
+-    {0x1FFC, 0x03C9,
+-     0x03B9}, /* GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI */
++    {0x1FFC, 0x03C9, 0x03B9}, /* GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI */
+     {0xFB00, 0x0066, 0x0066}, /* LATIN SMALL LIGATURE FF */
+     {0xFB01, 0x0066, 0x0069}, /* LATIN SMALL LIGATURE FI */
+     {0xFB02, 0x0066, 0x006C}, /* LATIN SMALL LIGATURE FL */
+@@ -214,7 +196,9 @@ static const struct {
+     {0xFB15, 0x0574, 0x056B}, /* ARMENIAN SMALL LIGATURE MEN INI */
+     {0xFB16, 0x057E, 0x0576}, /* ARMENIAN SMALL LIGATURE VEW NOW */
+     {0xFB17, 0x0574, 0x056D}, /* ARMENIAN SMALL LIGATURE MEN XEH */
+-    {0, 0, 0}};
++    {0, 0, 0}
++    // clang-format on
++};
+ 
+ static const struct {
+     unsigned short upper;
+@@ -222,37 +206,26 @@ static const struct {
+     unsigned short lower2;
+     unsigned short lower3;
+ } tbl3[] = {
+-    {0x0390, 0x03B9, 0x0308,
+-     0x0301}, /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
+-    {0x03B0, 0x03C5, 0x0308,
+-     0x0301}, /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
+-    {0x1F52, 0x03C5, 0x0313,
+-     0x0300}, /* GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA */
+-    {0x1F54, 0x03C5, 0x0313,
+-     0x0301}, /* GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA */
+-    {0x1F56, 0x03C5, 0x0313,
+-     0x0342}, /* GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI */
+-    {0x1FB7, 0x03B1, 0x0342,
+-     0x03B9}, /* GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI */
+-    {0x1FC7, 0x03B7, 0x0342,
+-     0x03B9}, /* GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI */
+-    {0x1FD2, 0x03B9, 0x0308,
+-     0x0300}, /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA */
+-    {0x1FD3, 0x03B9, 0x0308,
+-     0x0301}, /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA */
+-    {0x1FD7, 0x03B9, 0x0308,
+-     0x0342}, /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI */
+-    {0x1FE2, 0x03C5, 0x0308,
+-     0x0300}, /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA */
+-    {0x1FE3, 0x03C5, 0x0308,
+-     0x0301}, /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA */
+-    {0x1FE7, 0x03C5, 0x0308,
+-     0x0342}, /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI */
+-    {0x1FF7, 0x03C9, 0x0342,
+-     0x03B9}, /* GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI */
++    // clang-format off
++    {0x0390, 0x03B9, 0x0308, 0x0301}, /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
++    {0x03B0, 0x03C5, 0x0308, 0x0301}, /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
++    {0x1F52, 0x03C5, 0x0313, 0x0300}, /* GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA */
++    {0x1F54, 0x03C5, 0x0313, 0x0301}, /* GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA */
++    {0x1F56, 0x03C5, 0x0313, 0x0342}, /* GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI */
++    {0x1FB7, 0x03B1, 0x0342, 0x03B9}, /* GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI */
++    {0x1FC7, 0x03B7, 0x0342, 0x03B9}, /* GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI */
++    {0x1FD2, 0x03B9, 0x0308, 0x0300}, /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA */
++    {0x1FD3, 0x03B9, 0x0308, 0x0301}, /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA */
++    {0x1FD7, 0x03B9, 0x0308, 0x0342}, /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI */
++    {0x1FE2, 0x03C5, 0x0308, 0x0300}, /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA */
++    {0x1FE3, 0x03C5, 0x0308, 0x0301}, /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA */
++    {0x1FE7, 0x03C5, 0x0308, 0x0342}, /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI */
++    {0x1FF7, 0x03C9, 0x0342, 0x03B9}, /* GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI */
+     {0xFB03, 0x0066, 0x0066, 0x0069}, /* LATIN SMALL LIGATURE FFI */
+     {0xFB04, 0x0066, 0x0066, 0x006C}, /* LATIN SMALL LIGATURE FFL */
+-    {0, 0, 0, 0}};
++    {0, 0, 0, 0}
++    // clang-format on
++};
+ 
+ /* Return the number of wide lower-case characters needed to full fold-case
+    the given uppercase character. Returns 0, 1, 2 or 3.
+diff --git a/src/extwchar/unw16ifcan.h b/src/extwchar/unw16ifcan.h
+index 77f8c1ea..5b7029d5 100644
+--- a/src/extwchar/unw16ifcan.h
++++ b/src/extwchar/unw16ifcan.h
+@@ -2,7 +2,7 @@
+  * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+  * This file is auto-generated by Unicode-Normalize 1.27
+  * mkheader -uni -ind -std
+- * for Unicode 13.0.0 UTF-16
++ * for Unicode 14.0.0 UTF-16
+  * Any changes here will be lost!
+  */
+ /* Canonical Decomposition */
+diff --git a/src/extwchar/unw16ifcmb.h b/src/extwchar/unw16ifcmb.h
+index 629d730a..68fef127 100644
+--- a/src/extwchar/unw16ifcmb.h
++++ b/src/extwchar/unw16ifcmb.h
+@@ -2,7 +2,7 @@
+  * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+  * This file is auto-generated by Unicode-Normalize 1.27
+  * mkheader -uni -ind -std
+- * for Unicode 13.0.0 UTF-16
++ * for Unicode 14.0.0 UTF-16
+  * Any changes here will be lost!
+  */
+ /* CombiningClass */
+@@ -202,14 +202,14 @@ static const uint8_t UNWIF_combin_00_08 [256] = {
+ /*   0880 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0888 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0890 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   0898 */  0, 0, 0, 0, 0, 0, 0, 0,
++/*   0898 */  230, 220, 220, 220, 230, 230, 230, 230,
+ /*   08a0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   08a8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   08b0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   08b8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   08c0 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   08c8 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   08d0 */  0, 0, 0, 220, 230, 230, 230, 230,
++/*   08c8 */  0, 0, 230, 230, 230, 230, 230, 220,
++/*   08d0 */  220, 220, 220, 220, 230, 230, 230, 230,
+ /*   08d8 */  230, 230, 230, 230, 230, 230, 230, 230,
+ /*   08e0 */  230, 230, 0, 220, 230, 230, 220, 230,
+ /*   08e8 */  230, 220, 230, 230, 230, 220, 220, 220,
+@@ -330,7 +330,7 @@ static const uint8_t UNWIF_combin_00_0c [256] = {
+ /*   0c20 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0c28 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0c30 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   0c38 */  0, 0, 0, 0, 0, 0, 0, 0,
++/*   0c38 */  0, 0, 0, 0, 7, 0, 0, 0,
+ /*   0c40 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0c48 */  0, 0, 0, 0, 0, 9, 0, 0,
+ /*   0c50 */  0, 0, 0, 0, 0, 84, 91, 0,
+@@ -535,7 +535,7 @@ static const uint8_t UNWIF_combin_00_13 [256] = {
+ static const uint8_t UNWIF_combin_00_17 [256] = {
+ /*   1700 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1708 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   1710 */  0, 0, 0, 0, 9, 0, 0, 0,
++/*   1710 */  0, 0, 0, 0, 9, 9, 0, 0,
+ /*   1718 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1720 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1728 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -662,8 +662,8 @@ static const uint8_t UNWIF_combin_00_1a [256] = {
+ /*   1aa8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1ab0 */  230, 230, 230, 230, 230, 220, 220, 220,
+ /*   1ab8 */  220, 220, 220, 230, 230, 220, 0, 220,
+-/*   1ac0 */  220, 0, 0, 0, 0, 0, 0, 0,
+-/*   1ac8 */  0, 0, 0, 0, 0, 0, 0, 0,
++/*   1ac0 */  220, 230, 230, 220, 220, 230, 230, 230,
++/*   1ac8 */  230, 230, 220, 230, 230, 230, 230, 0,
+ /*   1ad0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1ad8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1ae0 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -774,7 +774,7 @@ static const uint8_t UNWIF_combin_00_1d [256] = {
+ /*   1de0 */  230, 230, 230, 230, 230, 230, 230, 230,
+ /*   1de8 */  230, 230, 230, 230, 230, 230, 230, 230,
+ /*   1df0 */  230, 230, 230, 230, 230, 230, 232, 228,
+-/*   1df8 */  228, 220, 0, 230, 233, 220, 230, 220
++/*   1df8 */  228, 220, 218, 230, 233, 220, 230, 220
+ };
+ 
+ static const uint8_t UNWIF_combin_00_20 [256] = {
+@@ -1389,7 +1389,7 @@ static const uint8_t UNWIF_combin_01_0f [256] = {
+ /* 010f68 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 010f70 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 010f78 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/* 010f80 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010f80 */  0, 0, 230, 220, 230, 220, 0, 0,
+ /* 010f88 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 010f90 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 010f98 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1422,7 +1422,7 @@ static const uint8_t UNWIF_combin_01_10 [256] = {
+ /* 011058 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 011060 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 011068 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/* 011070 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 011070 */  9, 0, 0, 0, 0, 0, 0, 0,
+ /* 011078 */  0, 0, 0, 0, 0, 0, 0, 9,
+ /* 011080 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 011088 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -2164,7 +2164,7 @@ static const uint8_t UNWIF_combin_01_e2 [256] = {
+ /* 01e290 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 01e298 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 01e2a0 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/* 01e2a8 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 01e2a8 */  0, 0, 0, 0, 0, 0, 230, 0,
+ /* 01e2b0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 01e2b8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 01e2c0 */  0, 0, 0, 0, 0, 0, 0, 0,
+diff --git a/src/extwchar/unw16ifcmp.h b/src/extwchar/unw16ifcmp.h
+index ed7acca1..768c9439 100644
+--- a/src/extwchar/unw16ifcmp.h
++++ b/src/extwchar/unw16ifcmp.h
+@@ -2,7 +2,7 @@
+  * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+  * This file is auto-generated by Unicode-Normalize 1.27
+  * mkheader -uni -ind -std
+- * for Unicode 13.0.0 UTF-16
++ * for Unicode 14.0.0 UTF-16
+  * Any changes here will be lost!
+  */
+ /* Composition */
+diff --git a/src/extwchar/unw16ifcpt.h b/src/extwchar/unw16ifcpt.h
+index 1a7ce186..751fb4c4 100644
+--- a/src/extwchar/unw16ifcpt.h
++++ b/src/extwchar/unw16ifcpt.h
+@@ -2,7 +2,7 @@
+  * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+  * This file is auto-generated by Unicode-Normalize 1.27
+  * mkheader -uni -ind -std
+- * for Unicode 13.0.0 UTF-16
++ * for Unicode 14.0.0 UTF-16
+  * Any changes here will be lost!
+  */
+ /* Compat. Decomposition */
+@@ -12,9 +12,9 @@
+ 
+ #undef NORMALIZE_IND_TBL
+ #define NORMALIZE_IND_TBL
+-/* tbl sizes: (1556,1286,629,126,16,23,1,1,,,,,,,,,,1) */
++/* tbl sizes: (1604,1292,629,126,16,23,1,1,,,,,,,,,,1) */
+ /* l: 1-18 */
+-/* max size: 1556 0x614 */
++/* max size: 1604 0x644 */
+ #define UNWIF_compat_MAXLEN  5
+ #define TBL(i)               ((i-1) << 11)
+ /* value = (const wchar_t*)&UNWIF_compat_tbl[LEN-1][IDX] */
+@@ -23,7 +23,7 @@
+ #define UNWIF_compat_PLANE_T uint16_t
+ 
+ /* the values */
+-static const wchar_t UNWIF_compat_tbl_1 [1556][1] = {
++static const wchar_t UNWIF_compat_tbl_1 [1604][1] = {
+  /*   0 */  {L'('}, {L')'}, {L'*'}, {L'+'}, {L','}, {L'-'}, {L'.'}, {L'/'},
+  /*   8 */  {L'0'}, {L'1'}, {L'2'}, {L'3'}, {L'4'}, {L'5'}, {L'6'}, {L'7'},
+  /*  16 */  {L'8'}, {L'9'}, {L':'}, {L';'}, {L'<'}, {L'='}, {L'>'}, {L'?'},
+@@ -32,195 +32,201 @@ static const wchar_t UNWIF_compat_tbl_1 [1556][1] = {
+  /*  40 */  {L'P'}, {L'Q'}, {L'R'}, {L'S'}, {L'T'}, {L'U'}, {L'V'}, {L'W'},
+  /*  48 */  {L'X'}, {L'Y'}, {L'Z'}, {L'['}, {L'\x0020'}, {L'\x0021'}, {L'\x0022'}, {L'\x0023'},
+  /*  56 */  {L'\x0024'}, {L'\x0025'}, {L'\x0026'}, {L'\x0027'}, {L'\x005c'}, {L'\x00a2'}, {L'\x00a3'}, {L'\x00a5'},
+- /*  64 */  {L'\x00a6'}, {L'\x00ac'}, {L'\x00b7'}, {L'\x00c6'}, {L'\x00f0'}, {L'\x0126'}, {L'\x0127'}, {L'\x0131'},
+- /*  72 */  {L'\x014b'}, {L'\x0153'}, {L'\x018e'}, {L'\x0190'}, {L'\x01ab'}, {L'\x0222'}, {L'\x0237'}, {L'\x0250'},
+- /*  80 */  {L'\x0251'}, {L'\x0252'}, {L'\x0254'}, {L'\x0255'}, {L'\x0259'}, {L'\x025b'}, {L'\x025c'}, {L'\x025f'},
+- /*  88 */  {L'\x0261'}, {L'\x0263'}, {L'\x0265'}, {L'\x0266'}, {L'\x0268'}, {L'\x0269'}, {L'\x026a'}, {L'\x026b'},
+- /*  96 */  {L'\x026d'}, {L'\x026f'}, {L'\x0270'}, {L'\x0271'}, {L'\x0272'}, {L'\x0273'}, {L'\x0274'}, {L'\x0275'},
+- /* 104 */  {L'\x0278'}, {L'\x0279'}, {L'\x027b'}, {L'\x0281'}, {L'\x0282'}, {L'\x0283'}, {L'\x0289'}, {L'\x028a'},
+- /* 112 */  {L'\x028b'}, {L'\x028c'}, {L'\x028d'}, {L'\x0290'}, {L'\x0291'}, {L'\x0292'}, {L'\x0295'}, {L'\x029d'},
+- /* 120 */  {L'\x029f'}, {L'\x02b9'}, {L'\x0300'}, {L'\x0301'}, {L'\x0313'}, {L'\x0391'}, {L'\x0392'}, {L'\x0393'},
+- /* 128 */  {L'\x0394'}, {L'\x0395'}, {L'\x0396'}, {L'\x0397'}, {L'\x0398'}, {L'\x0399'}, {L'\x039a'}, {L'\x039b'},
+- /* 136 */  {L'\x039c'}, {L'\x039d'}, {L'\x039e'}, {L'\x039f'}, {L'\x03a0'}, {L'\x03a1'}, {L'\x03a3'}, {L'\x03a4'},
+- /* 144 */  {L'\x03a5'}, {L'\x03a6'}, {L'\x03a7'}, {L'\x03a8'}, {L'\x03a9'}, {L'\x03b1'}, {L'\x03b2'}, {L'\x03b3'},
+- /* 152 */  {L'\x03b4'}, {L'\x03b5'}, {L'\x03b6'}, {L'\x03b7'}, {L'\x03b8'}, {L'\x03b9'}, {L'\x03ba'}, {L'\x03bb'},
+- /* 160 */  {L'\x03bc'}, {L'\x03bd'}, {L'\x03be'}, {L'\x03bf'}, {L'\x03c0'}, {L'\x03c1'}, {L'\x03c2'}, {L'\x03c3'},
+- /* 168 */  {L'\x03c4'}, {L'\x03c5'}, {L'\x03c6'}, {L'\x03c7'}, {L'\x03c8'}, {L'\x03c9'}, {L'\x03dc'}, {L'\x03dd'},
+- /* 176 */  {L'\x043d'}, {L'\x044a'}, {L'\x044c'}, {L'\x05d0'}, {L'\x05d1'}, {L'\x05d2'}, {L'\x05d3'}, {L'\x05d4'},
+- /* 184 */  {L'\x05db'}, {L'\x05dc'}, {L'\x05dd'}, {L'\x05e2'}, {L'\x05e8'}, {L'\x05ea'}, {L'\x0621'}, {L'\x0627'},
+- /* 192 */  {L'\x0628'}, {L'\x0629'}, {L'\x062a'}, {L'\x062b'}, {L'\x062c'}, {L'\x062d'}, {L'\x062e'}, {L'\x062f'},
+- /* 200 */  {L'\x0630'}, {L'\x0631'}, {L'\x0632'}, {L'\x0633'}, {L'\x0634'}, {L'\x0635'}, {L'\x0636'}, {L'\x0637'},
+- /* 208 */  {L'\x0638'}, {L'\x0639'}, {L'\x063a'}, {L'\x0641'}, {L'\x0642'}, {L'\x0643'}, {L'\x0644'}, {L'\x0645'},
+- /* 216 */  {L'\x0646'}, {L'\x0647'}, {L'\x0648'}, {L'\x0649'}, {L'\x064a'}, {L'\x066e'}, {L'\x066f'}, {L'\x0671'},
+- /* 224 */  {L'\x0679'}, {L'\x067a'}, {L'\x067b'}, {L'\x067e'}, {L'\x067f'}, {L'\x0680'}, {L'\x0683'}, {L'\x0684'},
+- /* 232 */  {L'\x0686'}, {L'\x0687'}, {L'\x0688'}, {L'\x068c'}, {L'\x068d'}, {L'\x068e'}, {L'\x0691'}, {L'\x0698'},
+- /* 240 */  {L'\x06a1'}, {L'\x06a4'}, {L'\x06a6'}, {L'\x06a9'}, {L'\x06ad'}, {L'\x06af'}, {L'\x06b1'}, {L'\x06b3'},
+- /* 248 */  {L'\x06ba'}, {L'\x06bb'}, {L'\x06be'}, {L'\x06c1'}, {L'\x06c5'}, {L'\x06c6'}, {L'\x06c7'}, {L'\x06c8'},
+- /* 256 */  {L'\x06c9'}, {L'\x06cb'}, {L'\x06cc'}, {L'\x06d0'}, {L'\x06d2'}, {L'\x0f0b'}, {L'\x10dc'}, {L'\x1100'},
+- /* 264 */  {L'\x1101'}, {L'\x1102'}, {L'\x1103'}, {L'\x1104'}, {L'\x1105'}, {L'\x1106'}, {L'\x1107'}, {L'\x1108'},
+- /* 272 */  {L'\x1109'}, {L'\x110a'}, {L'\x110b'}, {L'\x110c'}, {L'\x110d'}, {L'\x110e'}, {L'\x110f'}, {L'\x1110'},
+- /* 280 */  {L'\x1111'}, {L'\x1112'}, {L'\x1114'}, {L'\x1115'}, {L'\x111a'}, {L'\x111c'}, {L'\x111d'}, {L'\x111e'},
+- /* 288 */  {L'\x1120'}, {L'\x1121'}, {L'\x1122'}, {L'\x1123'}, {L'\x1127'}, {L'\x1129'}, {L'\x112b'}, {L'\x112c'},
+- /* 296 */  {L'\x112d'}, {L'\x112e'}, {L'\x112f'}, {L'\x1132'}, {L'\x1136'}, {L'\x1140'}, {L'\x1147'}, {L'\x114c'},
+- /* 304 */  {L'\x1157'}, {L'\x1158'}, {L'\x1159'}, {L'\x1160'}, {L'\x1161'}, {L'\x1162'}, {L'\x1163'}, {L'\x1164'},
+- /* 312 */  {L'\x1165'}, {L'\x1166'}, {L'\x1167'}, {L'\x1168'}, {L'\x1169'}, {L'\x116a'}, {L'\x116b'}, {L'\x116c'},
+- /* 320 */  {L'\x116d'}, {L'\x116e'}, {L'\x116f'}, {L'\x1170'}, {L'\x1171'}, {L'\x1172'}, {L'\x1173'}, {L'\x1174'},
+- /* 328 */  {L'\x1175'}, {L'\x1184'}, {L'\x1185'}, {L'\x1188'}, {L'\x1191'}, {L'\x1192'}, {L'\x1194'}, {L'\x119e'},
+- /* 336 */  {L'\x11a1'}, {L'\x11aa'}, {L'\x11ac'}, {L'\x11ad'}, {L'\x11b0'}, {L'\x11b1'}, {L'\x11b2'}, {L'\x11b3'},
+- /* 344 */  {L'\x11b4'}, {L'\x11b5'}, {L'\x11c7'}, {L'\x11c8'}, {L'\x11cc'}, {L'\x11ce'}, {L'\x11d3'}, {L'\x11d7'},
+- /* 352 */  {L'\x11d9'}, {L'\x11dd'}, {L'\x11df'}, {L'\x11f1'}, {L'\x11f2'}, {L'\x1d02'}, {L'\x1d16'}, {L'\x1d17'},
+- /* 360 */  {L'\x1d1c'}, {L'\x1d1d'}, {L'\x1d25'}, {L'\x1d7b'}, {L'\x1d85'}, {L'\x2010'}, {L'\x2013'}, {L'\x2014'},
+- /* 368 */  {L'\x20a9'}, {L'\x2190'}, {L'\x2191'}, {L'\x2192'}, {L'\x2193'}, {L'\x2202'}, {L'\x2207'}, {L'\x2211'},
+- /* 376 */  {L'\x2212'}, {L'\x2502'}, {L'\x25a0'}, {L'\x25cb'}, {L'\x2985'}, {L'\x2986'}, {L'\x2d61'}, {L'\x3001'},
+- /* 384 */  {L'\x3002'}, {L'\x3008'}, {L'\x3009'}, {L'\x300a'}, {L'\x300b'}, {L'\x300c'}, {L'\x300d'}, {L'\x300e'},
+- /* 392 */  {L'\x300f'}, {L'\x3010'}, {L'\x3011'}, {L'\x3012'}, {L'\x3014'}, {L'\x3015'}, {L'\x3016'}, {L'\x3017'},
+- /* 400 */  {L'\x3099'}, {L'\x309a'}, {L'\x30a1'}, {L'\x30a2'}, {L'\x30a3'}, {L'\x30a4'}, {L'\x30a5'}, {L'\x30a6'},
+- /* 408 */  {L'\x30a7'}, {L'\x30a8'}, {L'\x30a9'}, {L'\x30aa'}, {L'\x30ab'}, {L'\x30ad'}, {L'\x30af'}, {L'\x30b1'},
+- /* 416 */  {L'\x30b3'}, {L'\x30b5'}, {L'\x30b7'}, {L'\x30b9'}, {L'\x30bb'}, {L'\x30bd'}, {L'\x30bf'}, {L'\x30c1'},
+- /* 424 */  {L'\x30c3'}, {L'\x30c4'}, {L'\x30c6'}, {L'\x30c8'}, {L'\x30ca'}, {L'\x30cb'}, {L'\x30cc'}, {L'\x30cd'},
+- /* 432 */  {L'\x30ce'}, {L'\x30cf'}, {L'\x30d2'}, {L'\x30d5'}, {L'\x30d8'}, {L'\x30db'}, {L'\x30de'}, {L'\x30df'},
+- /* 440 */  {L'\x30e0'}, {L'\x30e1'}, {L'\x30e2'}, {L'\x30e3'}, {L'\x30e4'}, {L'\x30e5'}, {L'\x30e6'}, {L'\x30e7'},
+- /* 448 */  {L'\x30e8'}, {L'\x30e9'}, {L'\x30ea'}, {L'\x30eb'}, {L'\x30ec'}, {L'\x30ed'}, {L'\x30ef'}, {L'\x30f0'},
+- /* 456 */  {L'\x30f1'}, {L'\x30f2'}, {L'\x30f3'}, {L'\x30fb'}, {L'\x30fc'}, {L'\x349e'}, {L'\x34b9'}, {L'\x34bb'},
+- /* 464 */  {L'\x34df'}, {L'\x3515'}, {L'\x36ee'}, {L'\x36fc'}, {L'\x3781'}, {L'\x382f'}, {L'\x3862'}, {L'\x387c'},
+- /* 472 */  {L'\x38c7'}, {L'\x38e3'}, {L'\x391c'}, {L'\x393a'}, {L'\x3a2e'}, {L'\x3a6c'}, {L'\x3ae4'}, {L'\x3b08'},
+- /* 480 */  {L'\x3b19'}, {L'\x3b49'}, {L'\x3b9d'}, {L'\x3c18'}, {L'\x3c4e'}, {L'\x3d33'}, {L'\x3d96'}, {L'\x3eac'},
+- /* 488 */  {L'\x3eb8'}, {L'\x3f1b'}, {L'\x3ffc'}, {L'\x4008'}, {L'\x4018'}, {L'\x4039'}, {L'\x4046'}, {L'\x4096'},
+- /* 496 */  {L'\x40e3'}, {L'\x412f'}, {L'\x4202'}, {L'\x4227'}, {L'\x42a0'}, {L'\x4301'}, {L'\x4334'}, {L'\x4359'},
+- /* 504 */  {L'\x43d5'}, {L'\x43d9'}, {L'\x440b'}, {L'\x446b'}, {L'\x452b'}, {L'\x455d'}, {L'\x4561'}, {L'\x456b'},
+- /* 512 */  {L'\x45d7'}, {L'\x45f9'}, {L'\x4635'}, {L'\x46be'}, {L'\x46c7'}, {L'\x4995'}, {L'\x49e6'}, {L'\x4a6e'},
+- /* 520 */  {L'\x4a76'}, {L'\x4ab2'}, {L'\x4b33'}, {L'\x4bce'}, {L'\x4cce'}, {L'\x4ced'}, {L'\x4cf8'}, {L'\x4d56'},
+- /* 528 */  {L'\x4e00'}, {L'\x4e01'}, {L'\x4e03'}, {L'\x4e09'}, {L'\x4e0a'}, {L'\x4e0b'}, {L'\x4e0d'}, {L'\x4e19'},
+- /* 536 */  {L'\x4e26'}, {L'\x4e28'}, {L'\x4e2d'}, {L'\x4e32'}, {L'\x4e36'}, {L'\x4e38'}, {L'\x4e39'}, {L'\x4e3d'},
+- /* 544 */  {L'\x4e3f'}, {L'\x4e41'}, {L'\x4e59'}, {L'\x4e5d'}, {L'\x4e82'}, {L'\x4e85'}, {L'\x4e86'}, {L'\x4e8c'},
+- /* 552 */  {L'\x4e94'}, {L'\x4ea0'}, {L'\x4ea4'}, {L'\x4eae'}, {L'\x4eba'}, {L'\x4ec0'}, {L'\x4ecc'}, {L'\x4ee4'},
+- /* 560 */  {L'\x4f01'}, {L'\x4f11'}, {L'\x4f60'}, {L'\x4f80'}, {L'\x4f86'}, {L'\x4f8b'}, {L'\x4fae'}, {L'\x4fbb'},
+- /* 568 */  {L'\x4fbf'}, {L'\x5002'}, {L'\x502b'}, {L'\x507a'}, {L'\x5099'}, {L'\x50cf'}, {L'\x50da'}, {L'\x50e7'},
+- /* 576 */  {L'\x512a'}, {L'\x513f'}, {L'\x5140'}, {L'\x5145'}, {L'\x514d'}, {L'\x5154'}, {L'\x5164'}, {L'\x5165'},
+- /* 584 */  {L'\x5167'}, {L'\x5168'}, {L'\x5169'}, {L'\x516b'}, {L'\x516d'}, {L'\x5177'}, {L'\x5180'}, {L'\x5182'},
+- /* 592 */  {L'\x518d'}, {L'\x5192'}, {L'\x5195'}, {L'\x5196'}, {L'\x5197'}, {L'\x5199'}, {L'\x51a4'}, {L'\x51ab'},
+- /* 600 */  {L'\x51ac'}, {L'\x51b5'}, {L'\x51b7'}, {L'\x51c9'}, {L'\x51cc'}, {L'\x51dc'}, {L'\x51de'}, {L'\x51e0'},
+- /* 608 */  {L'\x51f5'}, {L'\x5200'}, {L'\x5203'}, {L'\x5207'}, {L'\x5217'}, {L'\x521d'}, {L'\x5229'}, {L'\x523a'},
+- /* 616 */  {L'\x523b'}, {L'\x5246'}, {L'\x524d'}, {L'\x5272'}, {L'\x5277'}, {L'\x5289'}, {L'\x529b'}, {L'\x52a3'},
+- /* 624 */  {L'\x52b3'}, {L'\x52b4'}, {L'\x52c7'}, {L'\x52c9'}, {L'\x52d2'}, {L'\x52de'}, {L'\x52e4'}, {L'\x52f5'},
+- /* 632 */  {L'\x52f9'}, {L'\x52fa'}, {L'\x5305'}, {L'\x5306'}, {L'\x5315'}, {L'\x5317'}, {L'\x531a'}, {L'\x5338'},
+- /* 640 */  {L'\x533b'}, {L'\x533f'}, {L'\x5341'}, {L'\x5344'}, {L'\x5345'}, {L'\x5349'}, {L'\x5351'}, {L'\x5354'},
+- /* 648 */  {L'\x535a'}, {L'\x535c'}, {L'\x5369'}, {L'\x5370'}, {L'\x5373'}, {L'\x5375'}, {L'\x537d'}, {L'\x537f'},
+- /* 656 */  {L'\x5382'}, {L'\x53b6'}, {L'\x53c3'}, {L'\x53c8'}, {L'\x53ca'}, {L'\x53cc'}, {L'\x53df'}, {L'\x53e3'},
+- /* 664 */  {L'\x53e5'}, {L'\x53eb'}, {L'\x53ef'}, {L'\x53f1'}, {L'\x53f3'}, {L'\x5406'}, {L'\x5408'}, {L'\x540d'},
+- /* 672 */  {L'\x540f'}, {L'\x541d'}, {L'\x5438'}, {L'\x5439'}, {L'\x5442'}, {L'\x5448'}, {L'\x5468'}, {L'\x549e'},
+- /* 680 */  {L'\x54a2'}, {L'\x54bd'}, {L'\x54f6'}, {L'\x5510'}, {L'\x554f'}, {L'\x5553'}, {L'\x5555'}, {L'\x5563'},
+- /* 688 */  {L'\x5584'}, {L'\x5587'}, {L'\x5599'}, {L'\x559d'}, {L'\x55ab'}, {L'\x55b3'}, {L'\x55b6'}, {L'\x55c0'},
+- /* 696 */  {L'\x55c2'}, {L'\x55e2'}, {L'\x5606'}, {L'\x5651'}, {L'\x5668'}, {L'\x5674'}, {L'\x56d7'}, {L'\x56db'},
+- /* 704 */  {L'\x56f9'}, {L'\x5716'}, {L'\x5717'}, {L'\x571f'}, {L'\x5730'}, {L'\x578b'}, {L'\x57ce'}, {L'\x57f4'},
+- /* 712 */  {L'\x580d'}, {L'\x5831'}, {L'\x5832'}, {L'\x5840'}, {L'\x585a'}, {L'\x585e'}, {L'\x58a8'}, {L'\x58ac'},
+- /* 720 */  {L'\x58b3'}, {L'\x58d8'}, {L'\x58df'}, {L'\x58eb'}, {L'\x58ee'}, {L'\x58f0'}, {L'\x58f2'}, {L'\x58f7'},
+- /* 728 */  {L'\x5902'}, {L'\x5906'}, {L'\x590a'}, {L'\x5915'}, {L'\x591a'}, {L'\x591c'}, {L'\x5922'}, {L'\x5927'},
+- /* 736 */  {L'\x5929'}, {L'\x5944'}, {L'\x5948'}, {L'\x5951'}, {L'\x5954'}, {L'\x5962'}, {L'\x5973'}, {L'\x59d8'},
+- /* 744 */  {L'\x59ec'}, {L'\x5a1b'}, {L'\x5a27'}, {L'\x5a62'}, {L'\x5a66'}, {L'\x5ab5'}, {L'\x5b08'}, {L'\x5b28'},
+- /* 752 */  {L'\x5b3e'}, {L'\x5b50'}, {L'\x5b57'}, {L'\x5b66'}, {L'\x5b80'}, {L'\x5b85'}, {L'\x5b97'}, {L'\x5bc3'},
+- /* 760 */  {L'\x5bd8'}, {L'\x5be7'}, {L'\x5bee'}, {L'\x5bf3'}, {L'\x5bf8'}, {L'\x5bff'}, {L'\x5c06'}, {L'\x5c0f'},
+- /* 768 */  {L'\x5c22'}, {L'\x5c38'}, {L'\x5c3f'}, {L'\x5c60'}, {L'\x5c62'}, {L'\x5c64'}, {L'\x5c65'}, {L'\x5c6e'},
+- /* 776 */  {L'\x5c71'}, {L'\x5c8d'}, {L'\x5cc0'}, {L'\x5d19'}, {L'\x5d43'}, {L'\x5d50'}, {L'\x5d6b'}, {L'\x5d6e'},
+- /* 784 */  {L'\x5d7c'}, {L'\x5db2'}, {L'\x5dba'}, {L'\x5ddb'}, {L'\x5de1'}, {L'\x5de2'}, {L'\x5de5'}, {L'\x5de6'},
+- /* 792 */  {L'\x5df1'}, {L'\x5dfd'}, {L'\x5dfe'}, {L'\x5e28'}, {L'\x5e3d'}, {L'\x5e69'}, {L'\x5e72'}, {L'\x5e74'},
+- /* 800 */  {L'\x5e7a'}, {L'\x5e7c'}, {L'\x5e7f'}, {L'\x5ea6'}, {L'\x5eb0'}, {L'\x5eb3'}, {L'\x5eb6'}, {L'\x5ec9'},
+- /* 808 */  {L'\x5eca'}, {L'\x5ed2'}, {L'\x5ed3'}, {L'\x5ed9'}, {L'\x5eec'}, {L'\x5ef4'}, {L'\x5efe'}, {L'\x5f04'},
+- /* 816 */  {L'\x5f0b'}, {L'\x5f13'}, {L'\x5f22'}, {L'\x5f50'}, {L'\x5f53'}, {L'\x5f61'}, {L'\x5f62'}, {L'\x5f69'},
+- /* 824 */  {L'\x5f6b'}, {L'\x5f73'}, {L'\x5f8b'}, {L'\x5f8c'}, {L'\x5f97'}, {L'\x5f9a'}, {L'\x5fa9'}, {L'\x5fad'},
+- /* 832 */  {L'\x5fc3'}, {L'\x5fcd'}, {L'\x5fd7'}, {L'\x5ff5'}, {L'\x5ff9'}, {L'\x6012'}, {L'\x601c'}, {L'\x6075'},
+- /* 840 */  {L'\x6081'}, {L'\x6094'}, {L'\x60c7'}, {L'\x60d8'}, {L'\x60e1'}, {L'\x6108'}, {L'\x6144'}, {L'\x6148'},
+- /* 848 */  {L'\x614c'}, {L'\x614e'}, {L'\x6160'}, {L'\x6168'}, {L'\x617a'}, {L'\x618e'}, {L'\x6190'}, {L'\x61a4'},
+- /* 856 */  {L'\x61af'}, {L'\x61b2'}, {L'\x61de'}, {L'\x61f2'}, {L'\x61f6'}, {L'\x6200'}, {L'\x6208'}, {L'\x6210'},
+- /* 864 */  {L'\x621b'}, {L'\x622e'}, {L'\x6234'}, {L'\x6236'}, {L'\x624b'}, {L'\x6253'}, {L'\x625d'}, {L'\x6295'},
+- /* 872 */  {L'\x62b1'}, {L'\x62c9'}, {L'\x62cf'}, {L'\x62d3'}, {L'\x62d4'}, {L'\x62fc'}, {L'\x62fe'}, {L'\x6307'},
+- /* 880 */  {L'\x633d'}, {L'\x6350'}, {L'\x6355'}, {L'\x6368'}, {L'\x637b'}, {L'\x6383'}, {L'\x63a0'}, {L'\x63a9'},
+- /* 888 */  {L'\x63c4'}, {L'\x63c5'}, {L'\x63e4'}, {L'\x641c'}, {L'\x6422'}, {L'\x6452'}, {L'\x6469'}, {L'\x6477'},
+- /* 896 */  {L'\x647e'}, {L'\x649a'}, {L'\x649d'}, {L'\x64c4'}, {L'\x652f'}, {L'\x6534'}, {L'\x654f'}, {L'\x6556'},
+- /* 904 */  {L'\x656c'}, {L'\x6578'}, {L'\x6587'}, {L'\x6597'}, {L'\x6599'}, {L'\x65a4'}, {L'\x65b0'}, {L'\x65b9'},
+- /* 912 */  {L'\x65c5'}, {L'\x65e0'}, {L'\x65e2'}, {L'\x65e3'}, {L'\x65e5'}, {L'\x6613'}, {L'\x6620'}, {L'\x6649'},
+- /* 920 */  {L'\x6674'}, {L'\x6688'}, {L'\x6691'}, {L'\x669c'}, {L'\x66b4'}, {L'\x66c6'}, {L'\x66f0'}, {L'\x66f4'},
+- /* 928 */  {L'\x66f8'}, {L'\x6700'}, {L'\x6708'}, {L'\x6709'}, {L'\x6717'}, {L'\x671b'}, {L'\x6721'}, {L'\x6728'},
+- /* 936 */  {L'\x674e'}, {L'\x6753'}, {L'\x6756'}, {L'\x675e'}, {L'\x677b'}, {L'\x6785'}, {L'\x6797'}, {L'\x67f3'},
+- /* 944 */  {L'\x67fa'}, {L'\x6817'}, {L'\x681f'}, {L'\x682a'}, {L'\x6852'}, {L'\x6881'}, {L'\x6885'}, {L'\x688e'},
+- /* 952 */  {L'\x68a8'}, {L'\x6914'}, {L'\x6942'}, {L'\x69a3'}, {L'\x69ea'}, {L'\x6a02'}, {L'\x6a13'}, {L'\x6aa8'},
+- /* 960 */  {L'\x6ad3'}, {L'\x6adb'}, {L'\x6b04'}, {L'\x6b20'}, {L'\x6b21'}, {L'\x6b54'}, {L'\x6b62'}, {L'\x6b63'},
+- /* 968 */  {L'\x6b72'}, {L'\x6b77'}, {L'\x6b79'}, {L'\x6b9f'}, {L'\x6bae'}, {L'\x6bb3'}, {L'\x6bba'}, {L'\x6bbb'},
+- /* 976 */  {L'\x6bcb'}, {L'\x6bcd'}, {L'\x6bd4'}, {L'\x6bdb'}, {L'\x6c0f'}, {L'\x6c14'}, {L'\x6c34'}, {L'\x6c4e'},
+- /* 984 */  {L'\x6c67'}, {L'\x6c88'}, {L'\x6cbf'}, {L'\x6ccc'}, {L'\x6ccd'}, {L'\x6ce5'}, {L'\x6ce8'}, {L'\x6d16'},
+- /* 992 */  {L'\x6d1b'}, {L'\x6d1e'}, {L'\x6d34'}, {L'\x6d3e'}, {L'\x6d41'}, {L'\x6d69'}, {L'\x6d6a'}, {L'\x6d77'},
+- /* 1000 */  {L'\x6d78'}, {L'\x6d85'}, {L'\x6dcb'}, {L'\x6dda'}, {L'\x6dea'}, {L'\x6df9'}, {L'\x6e1a'}, {L'\x6e2f'},
+- /* 1008 */  {L'\x6e6e'}, {L'\x6e80'}, {L'\x6e9c'}, {L'\x6eba'}, {L'\x6ec7'}, {L'\x6ecb'}, {L'\x6ed1'}, {L'\x6edb'},
+- /* 1016 */  {L'\x6f0f'}, {L'\x6f14'}, {L'\x6f22'}, {L'\x6f23'}, {L'\x6f6e'}, {L'\x6fc6'}, {L'\x6feb'}, {L'\x6ffe'},
+- /* 1024 */  {L'\x701b'}, {L'\x701e'}, {L'\x7039'}, {L'\x704a'}, {L'\x706b'}, {L'\x7070'}, {L'\x7077'}, {L'\x707d'},
+- /* 1032 */  {L'\x7099'}, {L'\x70ad'}, {L'\x70c8'}, {L'\x70d9'}, {L'\x7121'}, {L'\x7145'}, {L'\x7149'}, {L'\x716e'},
+- /* 1040 */  {L'\x719c'}, {L'\x71ce'}, {L'\x71d0'}, {L'\x7210'}, {L'\x721b'}, {L'\x7228'}, {L'\x722a'}, {L'\x722b'},
+- /* 1048 */  {L'\x7235'}, {L'\x7236'}, {L'\x723b'}, {L'\x723f'}, {L'\x7247'}, {L'\x7250'}, {L'\x7259'}, {L'\x725b'},
+- /* 1056 */  {L'\x7262'}, {L'\x7279'}, {L'\x7280'}, {L'\x7295'}, {L'\x72ac'}, {L'\x72af'}, {L'\x72c0'}, {L'\x72fc'},
+- /* 1064 */  {L'\x732a'}, {L'\x7375'}, {L'\x737a'}, {L'\x7384'}, {L'\x7387'}, {L'\x7389'}, {L'\x738b'}, {L'\x73a5'},
+- /* 1072 */  {L'\x73b2'}, {L'\x73de'}, {L'\x7406'}, {L'\x7409'}, {L'\x7422'}, {L'\x7447'}, {L'\x745c'}, {L'\x7469'},
+- /* 1080 */  {L'\x7471'}, {L'\x7485'}, {L'\x7489'}, {L'\x7498'}, {L'\x74ca'}, {L'\x74dc'}, {L'\x74e6'}, {L'\x7506'},
+- /* 1088 */  {L'\x7518'}, {L'\x751f'}, {L'\x7524'}, {L'\x7528'}, {L'\x7530'}, {L'\x7532'}, {L'\x7533'}, {L'\x7537'},
+- /* 1096 */  {L'\x753b'}, {L'\x753e'}, {L'\x7559'}, {L'\x7565'}, {L'\x7570'}, {L'\x758b'}, {L'\x7592'}, {L'\x75e2'},
+- /* 1104 */  {L'\x7610'}, {L'\x761d'}, {L'\x761f'}, {L'\x7642'}, {L'\x7669'}, {L'\x7676'}, {L'\x767d'}, {L'\x76ae'},
+- /* 1112 */  {L'\x76bf'}, {L'\x76ca'}, {L'\x76db'}, {L'\x76e3'}, {L'\x76e7'}, {L'\x76ee'}, {L'\x76f4'}, {L'\x7701'},
+- /* 1120 */  {L'\x771e'}, {L'\x771f'}, {L'\x7740'}, {L'\x774a'}, {L'\x778b'}, {L'\x77a7'}, {L'\x77db'}, {L'\x77e2'},
+- /* 1128 */  {L'\x77f3'}, {L'\x784e'}, {L'\x786b'}, {L'\x788c'}, {L'\x7891'}, {L'\x78ca'}, {L'\x78cc'}, {L'\x78fb'},
+- /* 1136 */  {L'\x792a'}, {L'\x793a'}, {L'\x793c'}, {L'\x793e'}, {L'\x7948'}, {L'\x7949'}, {L'\x7950'}, {L'\x7956'},
+- /* 1144 */  {L'\x795d'}, {L'\x795e'}, {L'\x7965'}, {L'\x797f'}, {L'\x7981'}, {L'\x798d'}, {L'\x798e'}, {L'\x798f'},
+- /* 1152 */  {L'\x79ae'}, {L'\x79b8'}, {L'\x79be'}, {L'\x79ca'}, {L'\x79d8'}, {L'\x79eb'}, {L'\x7a1c'}, {L'\x7a40'},
+- /* 1160 */  {L'\x7a4a'}, {L'\x7a4f'}, {L'\x7a74'}, {L'\x7a7a'}, {L'\x7a81'}, {L'\x7ab1'}, {L'\x7acb'}, {L'\x7aee'},
+- /* 1168 */  {L'\x7af9'}, {L'\x7b20'}, {L'\x7b8f'}, {L'\x7bc0'}, {L'\x7bc6'}, {L'\x7bc9'}, {L'\x7c3e'}, {L'\x7c60'},
+- /* 1176 */  {L'\x7c73'}, {L'\x7c7b'}, {L'\x7c92'}, {L'\x7cbe'}, {L'\x7cd2'}, {L'\x7cd6'}, {L'\x7ce3'}, {L'\x7ce7'},
+- /* 1184 */  {L'\x7ce8'}, {L'\x7cf8'}, {L'\x7d00'}, {L'\x7d10'}, {L'\x7d22'}, {L'\x7d2f'}, {L'\x7d42'}, {L'\x7d5b'},
+- /* 1192 */  {L'\x7d63'}, {L'\x7da0'}, {L'\x7dbe'}, {L'\x7dc7'}, {L'\x7df4'}, {L'\x7e02'}, {L'\x7e09'}, {L'\x7e37'},
+- /* 1200 */  {L'\x7e41'}, {L'\x7e45'}, {L'\x7f36'}, {L'\x7f3e'}, {L'\x7f51'}, {L'\x7f72'}, {L'\x7f79'}, {L'\x7f7a'},
+- /* 1208 */  {L'\x7f85'}, {L'\x7f8a'}, {L'\x7f95'}, {L'\x7f9a'}, {L'\x7fbd'}, {L'\x7ffa'}, {L'\x8001'}, {L'\x8005'},
+- /* 1216 */  {L'\x800c'}, {L'\x8012'}, {L'\x8033'}, {L'\x8046'}, {L'\x8060'}, {L'\x806f'}, {L'\x8070'}, {L'\x807e'},
+- /* 1224 */  {L'\x807f'}, {L'\x8089'}, {L'\x808b'}, {L'\x80ad'}, {L'\x80b2'}, {L'\x8103'}, {L'\x813e'}, {L'\x81d8'},
+- /* 1232 */  {L'\x81e3'}, {L'\x81e8'}, {L'\x81ea'}, {L'\x81ed'}, {L'\x81f3'}, {L'\x81fc'}, {L'\x8201'}, {L'\x8204'},
+- /* 1240 */  {L'\x820c'}, {L'\x8218'}, {L'\x821b'}, {L'\x821f'}, {L'\x826e'}, {L'\x826f'}, {L'\x8272'}, {L'\x8278'},
+- /* 1248 */  {L'\x8279'}, {L'\x828b'}, {L'\x8291'}, {L'\x829d'}, {L'\x82b1'}, {L'\x82b3'}, {L'\x82bd'}, {L'\x82e5'},
+- /* 1256 */  {L'\x82e6'}, {L'\x831d'}, {L'\x8323'}, {L'\x8336'}, {L'\x8352'}, {L'\x8353'}, {L'\x8363'}, {L'\x83ad'},
+- /* 1264 */  {L'\x83bd'}, {L'\x83c9'}, {L'\x83ca'}, {L'\x83cc'}, {L'\x83dc'}, {L'\x83e7'}, {L'\x83ef'}, {L'\x83f1'},
+- /* 1272 */  {L'\x843d'}, {L'\x8449'}, {L'\x8457'}, {L'\x84ee'}, {L'\x84f1'}, {L'\x84f3'}, {L'\x84fc'}, {L'\x8516'},
+- /* 1280 */  {L'\x8564'}, {L'\x85cd'}, {L'\x85fa'}, {L'\x8606'}, {L'\x8612'}, {L'\x862d'}, {L'\x863f'}, {L'\x864d'},
+- /* 1288 */  {L'\x8650'}, {L'\x865c'}, {L'\x8667'}, {L'\x8669'}, {L'\x866b'}, {L'\x8688'}, {L'\x86a9'}, {L'\x86e2'},
+- /* 1296 */  {L'\x870e'}, {L'\x8728'}, {L'\x876b'}, {L'\x8779'}, {L'\x8786'}, {L'\x87ba'}, {L'\x87e1'}, {L'\x8801'},
+- /* 1304 */  {L'\x881f'}, {L'\x8840'}, {L'\x884c'}, {L'\x8860'}, {L'\x8863'}, {L'\x88c2'}, {L'\x88cf'}, {L'\x88d7'},
+- /* 1312 */  {L'\x88de'}, {L'\x88e1'}, {L'\x88f8'}, {L'\x88fa'}, {L'\x8910'}, {L'\x8941'}, {L'\x8964'}, {L'\x897e'},
+- /* 1320 */  {L'\x8986'}, {L'\x898b'}, {L'\x8996'}, {L'\x89d2'}, {L'\x89e3'}, {L'\x8a00'}, {L'\x8aa0'}, {L'\x8aaa'},
+- /* 1328 */  {L'\x8abf'}, {L'\x8acb'}, {L'\x8ad2'}, {L'\x8ad6'}, {L'\x8aed'}, {L'\x8af8'}, {L'\x8afe'}, {L'\x8b01'},
+- /* 1336 */  {L'\x8b39'}, {L'\x8b58'}, {L'\x8b80'}, {L'\x8b8a'}, {L'\x8c37'}, {L'\x8c46'}, {L'\x8c48'}, {L'\x8c55'},
+- /* 1344 */  {L'\x8c78'}, {L'\x8c9d'}, {L'\x8ca1'}, {L'\x8ca9'}, {L'\x8cab'}, {L'\x8cc1'}, {L'\x8cc2'}, {L'\x8cc7'},
+- /* 1352 */  {L'\x8cc8'}, {L'\x8cd3'}, {L'\x8d08'}, {L'\x8d1b'}, {L'\x8d64'}, {L'\x8d70'}, {L'\x8d77'}, {L'\x8db3'},
+- /* 1360 */  {L'\x8dbc'}, {L'\x8dcb'}, {L'\x8def'}, {L'\x8df0'}, {L'\x8eab'}, {L'\x8eca'}, {L'\x8ed4'}, {L'\x8f26'},
+- /* 1368 */  {L'\x8f2a'}, {L'\x8f38'}, {L'\x8f3b'}, {L'\x8f62'}, {L'\x8f9b'}, {L'\x8f9e'}, {L'\x8fb0'}, {L'\x8fb5'},
+- /* 1376 */  {L'\x8fb6'}, {L'\x9023'}, {L'\x9038'}, {L'\x904a'}, {L'\x9069'}, {L'\x9072'}, {L'\x907c'}, {L'\x908f'},
+- /* 1384 */  {L'\x9091'}, {L'\x9094'}, {L'\x90ce'}, {L'\x90de'}, {L'\x90f1'}, {L'\x90fd'}, {L'\x9111'}, {L'\x911b'},
+- /* 1392 */  {L'\x9149'}, {L'\x914d'}, {L'\x916a'}, {L'\x9199'}, {L'\x91b4'}, {L'\x91c6'}, {L'\x91cc'}, {L'\x91cf'},
+- /* 1400 */  {L'\x91d1'}, {L'\x9234'}, {L'\x9238'}, {L'\x9276'}, {L'\x927c'}, {L'\x92d7'}, {L'\x92d8'}, {L'\x9304'},
+- /* 1408 */  {L'\x934a'}, {L'\x93f9'}, {L'\x9415'}, {L'\x9577'}, {L'\x9580'}, {L'\x958b'}, {L'\x95ad'}, {L'\x95b7'},
+- /* 1416 */  {L'\x961c'}, {L'\x962e'}, {L'\x964b'}, {L'\x964d'}, {L'\x9675'}, {L'\x9678'}, {L'\x967c'}, {L'\x9686'},
+- /* 1424 */  {L'\x96a3'}, {L'\x96b6'}, {L'\x96b7'}, {L'\x96b8'}, {L'\x96b9'}, {L'\x96c3'}, {L'\x96e2'}, {L'\x96e3'},
+- /* 1432 */  {L'\x96e8'}, {L'\x96f6'}, {L'\x96f7'}, {L'\x9723'}, {L'\x9732'}, {L'\x9748'}, {L'\x9751'}, {L'\x9756'},
+- /* 1440 */  {L'\x975e'}, {L'\x9762'}, {L'\x9769'}, {L'\x97cb'}, {L'\x97db'}, {L'\x97e0'}, {L'\x97ed'}, {L'\x97f3'},
+- /* 1448 */  {L'\x97ff'}, {L'\x9801'}, {L'\x9805'}, {L'\x980b'}, {L'\x9818'}, {L'\x9829'}, {L'\x983b'}, {L'\x985e'},
+- /* 1456 */  {L'\x98a8'}, {L'\x98db'}, {L'\x98df'}, {L'\x98e2'}, {L'\x98ef'}, {L'\x98fc'}, {L'\x9928'}, {L'\x9929'},
+- /* 1464 */  {L'\x9996'}, {L'\x9999'}, {L'\x99a7'}, {L'\x99ac'}, {L'\x99c2'}, {L'\x99f1'}, {L'\x99fe'}, {L'\x9a6a'},
+- /* 1472 */  {L'\x9aa8'}, {L'\x9ad8'}, {L'\x9adf'}, {L'\x9b12'}, {L'\x9b25'}, {L'\x9b2f'}, {L'\x9b32'}, {L'\x9b3c'},
+- /* 1480 */  {L'\x9b5a'}, {L'\x9b6f'}, {L'\x9c40'}, {L'\x9c57'}, {L'\x9ce5'}, {L'\x9cfd'}, {L'\x9d67'}, {L'\x9db4'},
+- /* 1488 */  {L'\x9dfa'}, {L'\x9e1e'}, {L'\x9e75'}, {L'\x9e7f'}, {L'\x9e97'}, {L'\x9e9f'}, {L'\x9ea5'}, {L'\x9ebb'},
+- /* 1496 */  {L'\x9ec3'}, {L'\x9ecd'}, {L'\x9ece'}, {L'\x9ed1'}, {L'\x9ef9'}, {L'\x9efd'}, {L'\x9efe'}, {L'\x9f05'},
+- /* 1504 */  {L'\x9f0e'}, {L'\x9f0f'}, {L'\x9f13'}, {L'\x9f16'}, {L'\x9f20'}, {L'\x9f3b'}, {L'\x9f43'}, {L'\x9f4a'},
+- /* 1512 */  {L'\x9f52'}, {L'\x9f8d'}, {L'\x9f8e'}, {L'\x9f9c'}, {L'\x9f9f'}, {L'\x9fa0'}, {L'\xa727'}, {L'\xa76f'},
+- /* 1520 */  {L'\xab37'}, {L'\xab52'}, {L']'}, {L'^'}, {L'_'}, {L'`'}, {L'a'}, {L'b'},
+- /* 1528 */  {L'c'}, {L'd'}, {L'e'}, {L'f'}, {L'g'}, {L'h'}, {L'i'}, {L'j'},
+- /* 1536 */  {L'k'}, {L'l'}, {L'm'}, {L'n'}, {L'o'}, {L'p'}, {L'q'}, {L'r'},
+- /* 1544 */  {L's'}, {L't'}, {L'u'}, {L'v'}, {L'w'}, {L'x'}, {L'y'}, {L'z'},
+- /* 1552 */  {L'{'}, {L'|'}, {L'}'}, {L'~'}};
+-
+-static const wchar_t UNWIF_compat_tbl_2 [1286][2] = {
++ /*  64 */  {L'\x00a6'}, {L'\x00ac'}, {L'\x00b7'}, {L'\x00c6'}, {L'\x00e6'}, {L'\x00f0'}, {L'\x00f8'}, {L'\x0126'},
++ /*  72 */  {L'\x0127'}, {L'\x0131'}, {L'\x014b'}, {L'\x0153'}, {L'\x018e'}, {L'\x0190'}, {L'\x01ab'}, {L'\x01c0'},
++ /*  80 */  {L'\x01c1'}, {L'\x01c2'}, {L'\x0222'}, {L'\x0237'}, {L'\x0250'}, {L'\x0251'}, {L'\x0252'}, {L'\x0253'},
++ /*  88 */  {L'\x0254'}, {L'\x0255'}, {L'\x0256'}, {L'\x0257'}, {L'\x0258'}, {L'\x0259'}, {L'\x025b'}, {L'\x025c'},
++ /*  96 */  {L'\x025e'}, {L'\x025f'}, {L'\x0260'}, {L'\x0261'}, {L'\x0262'}, {L'\x0263'}, {L'\x0264'}, {L'\x0265'},
++ /* 104 */  {L'\x0266'}, {L'\x0267'}, {L'\x0268'}, {L'\x0269'}, {L'\x026a'}, {L'\x026b'}, {L'\x026c'}, {L'\x026d'},
++ /* 112 */  {L'\x026e'}, {L'\x026f'}, {L'\x0270'}, {L'\x0271'}, {L'\x0272'}, {L'\x0273'}, {L'\x0274'}, {L'\x0275'},
++ /* 120 */  {L'\x0276'}, {L'\x0277'}, {L'\x0278'}, {L'\x0279'}, {L'\x027a'}, {L'\x027b'}, {L'\x027d'}, {L'\x027e'},
++ /* 128 */  {L'\x0280'}, {L'\x0281'}, {L'\x0282'}, {L'\x0283'}, {L'\x0284'}, {L'\x0288'}, {L'\x0289'}, {L'\x028a'},
++ /* 136 */  {L'\x028b'}, {L'\x028c'}, {L'\x028d'}, {L'\x028e'}, {L'\x028f'}, {L'\x0290'}, {L'\x0291'}, {L'\x0292'},
++ /* 144 */  {L'\x0295'}, {L'\x0298'}, {L'\x0299'}, {L'\x029b'}, {L'\x029c'}, {L'\x029d'}, {L'\x029f'}, {L'\x02a1'},
++ /* 152 */  {L'\x02a2'}, {L'\x02a3'}, {L'\x02a4'}, {L'\x02a5'}, {L'\x02a6'}, {L'\x02a7'}, {L'\x02a8'}, {L'\x02a9'},
++ /* 160 */  {L'\x02aa'}, {L'\x02ab'}, {L'\x02b9'}, {L'\x02d0'}, {L'\x02d1'}, {L'\x0300'}, {L'\x0301'}, {L'\x0313'},
++ /* 168 */  {L'\x0391'}, {L'\x0392'}, {L'\x0393'}, {L'\x0394'}, {L'\x0395'}, {L'\x0396'}, {L'\x0397'}, {L'\x0398'},
++ /* 176 */  {L'\x0399'}, {L'\x039a'}, {L'\x039b'}, {L'\x039c'}, {L'\x039d'}, {L'\x039e'}, {L'\x039f'}, {L'\x03a0'},
++ /* 184 */  {L'\x03a1'}, {L'\x03a3'}, {L'\x03a4'}, {L'\x03a5'}, {L'\x03a6'}, {L'\x03a7'}, {L'\x03a8'}, {L'\x03a9'},
++ /* 192 */  {L'\x03b1'}, {L'\x03b2'}, {L'\x03b3'}, {L'\x03b4'}, {L'\x03b5'}, {L'\x03b6'}, {L'\x03b7'}, {L'\x03b8'},
++ /* 200 */  {L'\x03b9'}, {L'\x03ba'}, {L'\x03bb'}, {L'\x03bc'}, {L'\x03bd'}, {L'\x03be'}, {L'\x03bf'}, {L'\x03c0'},
++ /* 208 */  {L'\x03c1'}, {L'\x03c2'}, {L'\x03c3'}, {L'\x03c4'}, {L'\x03c5'}, {L'\x03c6'}, {L'\x03c7'}, {L'\x03c8'},
++ /* 216 */  {L'\x03c9'}, {L'\x03dc'}, {L'\x03dd'}, {L'\x043d'}, {L'\x044a'}, {L'\x044c'}, {L'\x05d0'}, {L'\x05d1'},
++ /* 224 */  {L'\x05d2'}, {L'\x05d3'}, {L'\x05d4'}, {L'\x05db'}, {L'\x05dc'}, {L'\x05dd'}, {L'\x05e2'}, {L'\x05e8'},
++ /* 232 */  {L'\x05ea'}, {L'\x0621'}, {L'\x0627'}, {L'\x0628'}, {L'\x0629'}, {L'\x062a'}, {L'\x062b'}, {L'\x062c'},
++ /* 240 */  {L'\x062d'}, {L'\x062e'}, {L'\x062f'}, {L'\x0630'}, {L'\x0631'}, {L'\x0632'}, {L'\x0633'}, {L'\x0634'},
++ /* 248 */  {L'\x0635'}, {L'\x0636'}, {L'\x0637'}, {L'\x0638'}, {L'\x0639'}, {L'\x063a'}, {L'\x0641'}, {L'\x0642'},
++ /* 256 */  {L'\x0643'}, {L'\x0644'}, {L'\x0645'}, {L'\x0646'}, {L'\x0647'}, {L'\x0648'}, {L'\x0649'}, {L'\x064a'},
++ /* 264 */  {L'\x066e'}, {L'\x066f'}, {L'\x0671'}, {L'\x0679'}, {L'\x067a'}, {L'\x067b'}, {L'\x067e'}, {L'\x067f'},
++ /* 272 */  {L'\x0680'}, {L'\x0683'}, {L'\x0684'}, {L'\x0686'}, {L'\x0687'}, {L'\x0688'}, {L'\x068c'}, {L'\x068d'},
++ /* 280 */  {L'\x068e'}, {L'\x0691'}, {L'\x0698'}, {L'\x06a1'}, {L'\x06a4'}, {L'\x06a6'}, {L'\x06a9'}, {L'\x06ad'},
++ /* 288 */  {L'\x06af'}, {L'\x06b1'}, {L'\x06b3'}, {L'\x06ba'}, {L'\x06bb'}, {L'\x06be'}, {L'\x06c1'}, {L'\x06c5'},
++ /* 296 */  {L'\x06c6'}, {L'\x06c7'}, {L'\x06c8'}, {L'\x06c9'}, {L'\x06cb'}, {L'\x06cc'}, {L'\x06d0'}, {L'\x06d2'},
++ /* 304 */  {L'\x0f0b'}, {L'\x10dc'}, {L'\x1100'}, {L'\x1101'}, {L'\x1102'}, {L'\x1103'}, {L'\x1104'}, {L'\x1105'},
++ /* 312 */  {L'\x1106'}, {L'\x1107'}, {L'\x1108'}, {L'\x1109'}, {L'\x110a'}, {L'\x110b'}, {L'\x110c'}, {L'\x110d'},
++ /* 320 */  {L'\x110e'}, {L'\x110f'}, {L'\x1110'}, {L'\x1111'}, {L'\x1112'}, {L'\x1114'}, {L'\x1115'}, {L'\x111a'},
++ /* 328 */  {L'\x111c'}, {L'\x111d'}, {L'\x111e'}, {L'\x1120'}, {L'\x1121'}, {L'\x1122'}, {L'\x1123'}, {L'\x1127'},
++ /* 336 */  {L'\x1129'}, {L'\x112b'}, {L'\x112c'}, {L'\x112d'}, {L'\x112e'}, {L'\x112f'}, {L'\x1132'}, {L'\x1136'},
++ /* 344 */  {L'\x1140'}, {L'\x1147'}, {L'\x114c'}, {L'\x1157'}, {L'\x1158'}, {L'\x1159'}, {L'\x1160'}, {L'\x1161'},
++ /* 352 */  {L'\x1162'}, {L'\x1163'}, {L'\x1164'}, {L'\x1165'}, {L'\x1166'}, {L'\x1167'}, {L'\x1168'}, {L'\x1169'},
++ /* 360 */  {L'\x116a'}, {L'\x116b'}, {L'\x116c'}, {L'\x116d'}, {L'\x116e'}, {L'\x116f'}, {L'\x1170'}, {L'\x1171'},
++ /* 368 */  {L'\x1172'}, {L'\x1173'}, {L'\x1174'}, {L'\x1175'}, {L'\x1184'}, {L'\x1185'}, {L'\x1188'}, {L'\x1191'},
++ /* 376 */  {L'\x1192'}, {L'\x1194'}, {L'\x119e'}, {L'\x11a1'}, {L'\x11aa'}, {L'\x11ac'}, {L'\x11ad'}, {L'\x11b0'},
++ /* 384 */  {L'\x11b1'}, {L'\x11b2'}, {L'\x11b3'}, {L'\x11b4'}, {L'\x11b5'}, {L'\x11c7'}, {L'\x11c8'}, {L'\x11cc'},
++ /* 392 */  {L'\x11ce'}, {L'\x11d3'}, {L'\x11d7'}, {L'\x11d9'}, {L'\x11dd'}, {L'\x11df'}, {L'\x11f1'}, {L'\x11f2'},
++ /* 400 */  {L'\x1d02'}, {L'\x1d16'}, {L'\x1d17'}, {L'\x1d1c'}, {L'\x1d1d'}, {L'\x1d25'}, {L'\x1d7b'}, {L'\x1d85'},
++ /* 408 */  {L'\x1d91'}, {L'\x2010'}, {L'\x2013'}, {L'\x2014'}, {L'\x20a9'}, {L'\x2190'}, {L'\x2191'}, {L'\x2192'},
++ /* 416 */  {L'\x2193'}, {L'\x2202'}, {L'\x2207'}, {L'\x2211'}, {L'\x2212'}, {L'\x2502'}, {L'\x25a0'}, {L'\x25cb'},
++ /* 424 */  {L'\x2985'}, {L'\x2986'}, {L'\x2c71'}, {L'\x2d61'}, {L'\x3001'}, {L'\x3002'}, {L'\x3008'}, {L'\x3009'},
++ /* 432 */  {L'\x300a'}, {L'\x300b'}, {L'\x300c'}, {L'\x300d'}, {L'\x300e'}, {L'\x300f'}, {L'\x3010'}, {L'\x3011'},
++ /* 440 */  {L'\x3012'}, {L'\x3014'}, {L'\x3015'}, {L'\x3016'}, {L'\x3017'}, {L'\x3099'}, {L'\x309a'}, {L'\x30a1'},
++ /* 448 */  {L'\x30a2'}, {L'\x30a3'}, {L'\x30a4'}, {L'\x30a5'}, {L'\x30a6'}, {L'\x30a7'}, {L'\x30a8'}, {L'\x30a9'},
++ /* 456 */  {L'\x30aa'}, {L'\x30ab'}, {L'\x30ad'}, {L'\x30af'}, {L'\x30b1'}, {L'\x30b3'}, {L'\x30b5'}, {L'\x30b7'},
++ /* 464 */  {L'\x30b9'}, {L'\x30bb'}, {L'\x30bd'}, {L'\x30bf'}, {L'\x30c1'}, {L'\x30c3'}, {L'\x30c4'}, {L'\x30c6'},
++ /* 472 */  {L'\x30c8'}, {L'\x30ca'}, {L'\x30cb'}, {L'\x30cc'}, {L'\x30cd'}, {L'\x30ce'}, {L'\x30cf'}, {L'\x30d2'},
++ /* 480 */  {L'\x30d5'}, {L'\x30d8'}, {L'\x30db'}, {L'\x30de'}, {L'\x30df'}, {L'\x30e0'}, {L'\x30e1'}, {L'\x30e2'},
++ /* 488 */  {L'\x30e3'}, {L'\x30e4'}, {L'\x30e5'}, {L'\x30e6'}, {L'\x30e7'}, {L'\x30e8'}, {L'\x30e9'}, {L'\x30ea'},
++ /* 496 */  {L'\x30eb'}, {L'\x30ec'}, {L'\x30ed'}, {L'\x30ef'}, {L'\x30f0'}, {L'\x30f1'}, {L'\x30f2'}, {L'\x30f3'},
++ /* 504 */  {L'\x30fb'}, {L'\x30fc'}, {L'\x349e'}, {L'\x34b9'}, {L'\x34bb'}, {L'\x34df'}, {L'\x3515'}, {L'\x36ee'},
++ /* 512 */  {L'\x36fc'}, {L'\x3781'}, {L'\x382f'}, {L'\x3862'}, {L'\x387c'}, {L'\x38c7'}, {L'\x38e3'}, {L'\x391c'},
++ /* 520 */  {L'\x393a'}, {L'\x3a2e'}, {L'\x3a6c'}, {L'\x3ae4'}, {L'\x3b08'}, {L'\x3b19'}, {L'\x3b49'}, {L'\x3b9d'},
++ /* 528 */  {L'\x3c18'}, {L'\x3c4e'}, {L'\x3d33'}, {L'\x3d96'}, {L'\x3eac'}, {L'\x3eb8'}, {L'\x3f1b'}, {L'\x3ffc'},
++ /* 536 */  {L'\x4008'}, {L'\x4018'}, {L'\x4039'}, {L'\x4046'}, {L'\x4096'}, {L'\x40e3'}, {L'\x412f'}, {L'\x4202'},
++ /* 544 */  {L'\x4227'}, {L'\x42a0'}, {L'\x4301'}, {L'\x4334'}, {L'\x4359'}, {L'\x43d5'}, {L'\x43d9'}, {L'\x440b'},
++ /* 552 */  {L'\x446b'}, {L'\x452b'}, {L'\x455d'}, {L'\x4561'}, {L'\x456b'}, {L'\x45d7'}, {L'\x45f9'}, {L'\x4635'},
++ /* 560 */  {L'\x46be'}, {L'\x46c7'}, {L'\x4995'}, {L'\x49e6'}, {L'\x4a6e'}, {L'\x4a76'}, {L'\x4ab2'}, {L'\x4b33'},
++ /* 568 */  {L'\x4bce'}, {L'\x4cce'}, {L'\x4ced'}, {L'\x4cf8'}, {L'\x4d56'}, {L'\x4e00'}, {L'\x4e01'}, {L'\x4e03'},
++ /* 576 */  {L'\x4e09'}, {L'\x4e0a'}, {L'\x4e0b'}, {L'\x4e0d'}, {L'\x4e19'}, {L'\x4e26'}, {L'\x4e28'}, {L'\x4e2d'},
++ /* 584 */  {L'\x4e32'}, {L'\x4e36'}, {L'\x4e38'}, {L'\x4e39'}, {L'\x4e3d'}, {L'\x4e3f'}, {L'\x4e41'}, {L'\x4e59'},
++ /* 592 */  {L'\x4e5d'}, {L'\x4e82'}, {L'\x4e85'}, {L'\x4e86'}, {L'\x4e8c'}, {L'\x4e94'}, {L'\x4ea0'}, {L'\x4ea4'},
++ /* 600 */  {L'\x4eae'}, {L'\x4eba'}, {L'\x4ec0'}, {L'\x4ecc'}, {L'\x4ee4'}, {L'\x4f01'}, {L'\x4f11'}, {L'\x4f60'},
++ /* 608 */  {L'\x4f80'}, {L'\x4f86'}, {L'\x4f8b'}, {L'\x4fae'}, {L'\x4fbb'}, {L'\x4fbf'}, {L'\x5002'}, {L'\x502b'},
++ /* 616 */  {L'\x507a'}, {L'\x5099'}, {L'\x50cf'}, {L'\x50da'}, {L'\x50e7'}, {L'\x512a'}, {L'\x513f'}, {L'\x5140'},
++ /* 624 */  {L'\x5145'}, {L'\x514d'}, {L'\x5154'}, {L'\x5164'}, {L'\x5165'}, {L'\x5167'}, {L'\x5168'}, {L'\x5169'},
++ /* 632 */  {L'\x516b'}, {L'\x516d'}, {L'\x5177'}, {L'\x5180'}, {L'\x5182'}, {L'\x518d'}, {L'\x5192'}, {L'\x5195'},
++ /* 640 */  {L'\x5196'}, {L'\x5197'}, {L'\x5199'}, {L'\x51a4'}, {L'\x51ab'}, {L'\x51ac'}, {L'\x51b5'}, {L'\x51b7'},
++ /* 648 */  {L'\x51c9'}, {L'\x51cc'}, {L'\x51dc'}, {L'\x51de'}, {L'\x51e0'}, {L'\x51f5'}, {L'\x5200'}, {L'\x5203'},
++ /* 656 */  {L'\x5207'}, {L'\x5217'}, {L'\x521d'}, {L'\x5229'}, {L'\x523a'}, {L'\x523b'}, {L'\x5246'}, {L'\x524d'},
++ /* 664 */  {L'\x5272'}, {L'\x5277'}, {L'\x5289'}, {L'\x529b'}, {L'\x52a3'}, {L'\x52b3'}, {L'\x52b4'}, {L'\x52c7'},
++ /* 672 */  {L'\x52c9'}, {L'\x52d2'}, {L'\x52de'}, {L'\x52e4'}, {L'\x52f5'}, {L'\x52f9'}, {L'\x52fa'}, {L'\x5305'},
++ /* 680 */  {L'\x5306'}, {L'\x5315'}, {L'\x5317'}, {L'\x531a'}, {L'\x5338'}, {L'\x533b'}, {L'\x533f'}, {L'\x5341'},
++ /* 688 */  {L'\x5344'}, {L'\x5345'}, {L'\x5349'}, {L'\x5351'}, {L'\x5354'}, {L'\x535a'}, {L'\x535c'}, {L'\x5369'},
++ /* 696 */  {L'\x5370'}, {L'\x5373'}, {L'\x5375'}, {L'\x537d'}, {L'\x537f'}, {L'\x5382'}, {L'\x53b6'}, {L'\x53c3'},
++ /* 704 */  {L'\x53c8'}, {L'\x53ca'}, {L'\x53cc'}, {L'\x53df'}, {L'\x53e3'}, {L'\x53e5'}, {L'\x53eb'}, {L'\x53ef'},
++ /* 712 */  {L'\x53f1'}, {L'\x53f3'}, {L'\x5406'}, {L'\x5408'}, {L'\x540d'}, {L'\x540f'}, {L'\x541d'}, {L'\x5438'},
++ /* 720 */  {L'\x5439'}, {L'\x5442'}, {L'\x5448'}, {L'\x5468'}, {L'\x549e'}, {L'\x54a2'}, {L'\x54bd'}, {L'\x54f6'},
++ /* 728 */  {L'\x5510'}, {L'\x554f'}, {L'\x5553'}, {L'\x5555'}, {L'\x5563'}, {L'\x5584'}, {L'\x5587'}, {L'\x5599'},
++ /* 736 */  {L'\x559d'}, {L'\x55ab'}, {L'\x55b3'}, {L'\x55b6'}, {L'\x55c0'}, {L'\x55c2'}, {L'\x55e2'}, {L'\x5606'},
++ /* 744 */  {L'\x5651'}, {L'\x5668'}, {L'\x5674'}, {L'\x56d7'}, {L'\x56db'}, {L'\x56f9'}, {L'\x5716'}, {L'\x5717'},
++ /* 752 */  {L'\x571f'}, {L'\x5730'}, {L'\x578b'}, {L'\x57ce'}, {L'\x57f4'}, {L'\x580d'}, {L'\x5831'}, {L'\x5832'},
++ /* 760 */  {L'\x5840'}, {L'\x585a'}, {L'\x585e'}, {L'\x58a8'}, {L'\x58ac'}, {L'\x58b3'}, {L'\x58d8'}, {L'\x58df'},
++ /* 768 */  {L'\x58eb'}, {L'\x58ee'}, {L'\x58f0'}, {L'\x58f2'}, {L'\x58f7'}, {L'\x5902'}, {L'\x5906'}, {L'\x590a'},
++ /* 776 */  {L'\x5915'}, {L'\x591a'}, {L'\x591c'}, {L'\x5922'}, {L'\x5927'}, {L'\x5929'}, {L'\x5944'}, {L'\x5948'},
++ /* 784 */  {L'\x5951'}, {L'\x5954'}, {L'\x5962'}, {L'\x5973'}, {L'\x59d8'}, {L'\x59ec'}, {L'\x5a1b'}, {L'\x5a27'},
++ /* 792 */  {L'\x5a62'}, {L'\x5a66'}, {L'\x5ab5'}, {L'\x5b08'}, {L'\x5b28'}, {L'\x5b3e'}, {L'\x5b50'}, {L'\x5b57'},
++ /* 800 */  {L'\x5b66'}, {L'\x5b80'}, {L'\x5b85'}, {L'\x5b97'}, {L'\x5bc3'}, {L'\x5bd8'}, {L'\x5be7'}, {L'\x5bee'},
++ /* 808 */  {L'\x5bf3'}, {L'\x5bf8'}, {L'\x5bff'}, {L'\x5c06'}, {L'\x5c0f'}, {L'\x5c22'}, {L'\x5c38'}, {L'\x5c3f'},
++ /* 816 */  {L'\x5c60'}, {L'\x5c62'}, {L'\x5c64'}, {L'\x5c65'}, {L'\x5c6e'}, {L'\x5c71'}, {L'\x5c8d'}, {L'\x5cc0'},
++ /* 824 */  {L'\x5d19'}, {L'\x5d43'}, {L'\x5d50'}, {L'\x5d6b'}, {L'\x5d6e'}, {L'\x5d7c'}, {L'\x5db2'}, {L'\x5dba'},
++ /* 832 */  {L'\x5ddb'}, {L'\x5de1'}, {L'\x5de2'}, {L'\x5de5'}, {L'\x5de6'}, {L'\x5df1'}, {L'\x5dfd'}, {L'\x5dfe'},
++ /* 840 */  {L'\x5e28'}, {L'\x5e3d'}, {L'\x5e69'}, {L'\x5e72'}, {L'\x5e74'}, {L'\x5e7a'}, {L'\x5e7c'}, {L'\x5e7f'},
++ /* 848 */  {L'\x5ea6'}, {L'\x5eb0'}, {L'\x5eb3'}, {L'\x5eb6'}, {L'\x5ec9'}, {L'\x5eca'}, {L'\x5ed2'}, {L'\x5ed3'},
++ /* 856 */  {L'\x5ed9'}, {L'\x5eec'}, {L'\x5ef4'}, {L'\x5efe'}, {L'\x5f04'}, {L'\x5f0b'}, {L'\x5f13'}, {L'\x5f22'},
++ /* 864 */  {L'\x5f50'}, {L'\x5f53'}, {L'\x5f61'}, {L'\x5f62'}, {L'\x5f69'}, {L'\x5f6b'}, {L'\x5f73'}, {L'\x5f8b'},
++ /* 872 */  {L'\x5f8c'}, {L'\x5f97'}, {L'\x5f9a'}, {L'\x5fa9'}, {L'\x5fad'}, {L'\x5fc3'}, {L'\x5fcd'}, {L'\x5fd7'},
++ /* 880 */  {L'\x5ff5'}, {L'\x5ff9'}, {L'\x6012'}, {L'\x601c'}, {L'\x6075'}, {L'\x6081'}, {L'\x6094'}, {L'\x60c7'},
++ /* 888 */  {L'\x60d8'}, {L'\x60e1'}, {L'\x6108'}, {L'\x6144'}, {L'\x6148'}, {L'\x614c'}, {L'\x614e'}, {L'\x6160'},
++ /* 896 */  {L'\x6168'}, {L'\x617a'}, {L'\x618e'}, {L'\x6190'}, {L'\x61a4'}, {L'\x61af'}, {L'\x61b2'}, {L'\x61de'},
++ /* 904 */  {L'\x61f2'}, {L'\x61f6'}, {L'\x6200'}, {L'\x6208'}, {L'\x6210'}, {L'\x621b'}, {L'\x622e'}, {L'\x6234'},
++ /* 912 */  {L'\x6236'}, {L'\x624b'}, {L'\x6253'}, {L'\x625d'}, {L'\x6295'}, {L'\x62b1'}, {L'\x62c9'}, {L'\x62cf'},
++ /* 920 */  {L'\x62d3'}, {L'\x62d4'}, {L'\x62fc'}, {L'\x62fe'}, {L'\x6307'}, {L'\x633d'}, {L'\x6350'}, {L'\x6355'},
++ /* 928 */  {L'\x6368'}, {L'\x637b'}, {L'\x6383'}, {L'\x63a0'}, {L'\x63a9'}, {L'\x63c4'}, {L'\x63c5'}, {L'\x63e4'},
++ /* 936 */  {L'\x641c'}, {L'\x6422'}, {L'\x6452'}, {L'\x6469'}, {L'\x6477'}, {L'\x647e'}, {L'\x649a'}, {L'\x649d'},
++ /* 944 */  {L'\x64c4'}, {L'\x652f'}, {L'\x6534'}, {L'\x654f'}, {L'\x6556'}, {L'\x656c'}, {L'\x6578'}, {L'\x6587'},
++ /* 952 */  {L'\x6597'}, {L'\x6599'}, {L'\x65a4'}, {L'\x65b0'}, {L'\x65b9'}, {L'\x65c5'}, {L'\x65e0'}, {L'\x65e2'},
++ /* 960 */  {L'\x65e3'}, {L'\x65e5'}, {L'\x6613'}, {L'\x6620'}, {L'\x6649'}, {L'\x6674'}, {L'\x6688'}, {L'\x6691'},
++ /* 968 */  {L'\x669c'}, {L'\x66b4'}, {L'\x66c6'}, {L'\x66f0'}, {L'\x66f4'}, {L'\x66f8'}, {L'\x6700'}, {L'\x6708'},
++ /* 976 */  {L'\x6709'}, {L'\x6717'}, {L'\x671b'}, {L'\x6721'}, {L'\x6728'}, {L'\x674e'}, {L'\x6753'}, {L'\x6756'},
++ /* 984 */  {L'\x675e'}, {L'\x677b'}, {L'\x6785'}, {L'\x6797'}, {L'\x67f3'}, {L'\x67fa'}, {L'\x6817'}, {L'\x681f'},
++ /* 992 */  {L'\x682a'}, {L'\x6852'}, {L'\x6881'}, {L'\x6885'}, {L'\x688e'}, {L'\x68a8'}, {L'\x6914'}, {L'\x6942'},
++ /* 1000 */  {L'\x69a3'}, {L'\x69ea'}, {L'\x6a02'}, {L'\x6a13'}, {L'\x6aa8'}, {L'\x6ad3'}, {L'\x6adb'}, {L'\x6b04'},
++ /* 1008 */  {L'\x6b20'}, {L'\x6b21'}, {L'\x6b54'}, {L'\x6b62'}, {L'\x6b63'}, {L'\x6b72'}, {L'\x6b77'}, {L'\x6b79'},
++ /* 1016 */  {L'\x6b9f'}, {L'\x6bae'}, {L'\x6bb3'}, {L'\x6bba'}, {L'\x6bbb'}, {L'\x6bcb'}, {L'\x6bcd'}, {L'\x6bd4'},
++ /* 1024 */  {L'\x6bdb'}, {L'\x6c0f'}, {L'\x6c14'}, {L'\x6c34'}, {L'\x6c4e'}, {L'\x6c67'}, {L'\x6c88'}, {L'\x6cbf'},
++ /* 1032 */  {L'\x6ccc'}, {L'\x6ccd'}, {L'\x6ce5'}, {L'\x6ce8'}, {L'\x6d16'}, {L'\x6d1b'}, {L'\x6d1e'}, {L'\x6d34'},
++ /* 1040 */  {L'\x6d3e'}, {L'\x6d41'}, {L'\x6d69'}, {L'\x6d6a'}, {L'\x6d77'}, {L'\x6d78'}, {L'\x6d85'}, {L'\x6dcb'},
++ /* 1048 */  {L'\x6dda'}, {L'\x6dea'}, {L'\x6df9'}, {L'\x6e1a'}, {L'\x6e2f'}, {L'\x6e6e'}, {L'\x6e80'}, {L'\x6e9c'},
++ /* 1056 */  {L'\x6eba'}, {L'\x6ec7'}, {L'\x6ecb'}, {L'\x6ed1'}, {L'\x6edb'}, {L'\x6f0f'}, {L'\x6f14'}, {L'\x6f22'},
++ /* 1064 */  {L'\x6f23'}, {L'\x6f6e'}, {L'\x6fc6'}, {L'\x6feb'}, {L'\x6ffe'}, {L'\x701b'}, {L'\x701e'}, {L'\x7039'},
++ /* 1072 */  {L'\x704a'}, {L'\x706b'}, {L'\x7070'}, {L'\x7077'}, {L'\x707d'}, {L'\x7099'}, {L'\x70ad'}, {L'\x70c8'},
++ /* 1080 */  {L'\x70d9'}, {L'\x7121'}, {L'\x7145'}, {L'\x7149'}, {L'\x716e'}, {L'\x719c'}, {L'\x71ce'}, {L'\x71d0'},
++ /* 1088 */  {L'\x7210'}, {L'\x721b'}, {L'\x7228'}, {L'\x722a'}, {L'\x722b'}, {L'\x7235'}, {L'\x7236'}, {L'\x723b'},
++ /* 1096 */  {L'\x723f'}, {L'\x7247'}, {L'\x7250'}, {L'\x7259'}, {L'\x725b'}, {L'\x7262'}, {L'\x7279'}, {L'\x7280'},
++ /* 1104 */  {L'\x7295'}, {L'\x72ac'}, {L'\x72af'}, {L'\x72c0'}, {L'\x72fc'}, {L'\x732a'}, {L'\x7375'}, {L'\x737a'},
++ /* 1112 */  {L'\x7384'}, {L'\x7387'}, {L'\x7389'}, {L'\x738b'}, {L'\x73a5'}, {L'\x73b2'}, {L'\x73de'}, {L'\x7406'},
++ /* 1120 */  {L'\x7409'}, {L'\x7422'}, {L'\x7447'}, {L'\x745c'}, {L'\x7469'}, {L'\x7471'}, {L'\x7485'}, {L'\x7489'},
++ /* 1128 */  {L'\x7498'}, {L'\x74ca'}, {L'\x74dc'}, {L'\x74e6'}, {L'\x7506'}, {L'\x7518'}, {L'\x751f'}, {L'\x7524'},
++ /* 1136 */  {L'\x7528'}, {L'\x7530'}, {L'\x7532'}, {L'\x7533'}, {L'\x7537'}, {L'\x753b'}, {L'\x753e'}, {L'\x7559'},
++ /* 1144 */  {L'\x7565'}, {L'\x7570'}, {L'\x758b'}, {L'\x7592'}, {L'\x75e2'}, {L'\x7610'}, {L'\x761d'}, {L'\x761f'},
++ /* 1152 */  {L'\x7642'}, {L'\x7669'}, {L'\x7676'}, {L'\x767d'}, {L'\x76ae'}, {L'\x76bf'}, {L'\x76ca'}, {L'\x76db'},
++ /* 1160 */  {L'\x76e3'}, {L'\x76e7'}, {L'\x76ee'}, {L'\x76f4'}, {L'\x7701'}, {L'\x771e'}, {L'\x771f'}, {L'\x7740'},
++ /* 1168 */  {L'\x774a'}, {L'\x778b'}, {L'\x77a7'}, {L'\x77db'}, {L'\x77e2'}, {L'\x77f3'}, {L'\x784e'}, {L'\x786b'},
++ /* 1176 */  {L'\x788c'}, {L'\x7891'}, {L'\x78ca'}, {L'\x78cc'}, {L'\x78fb'}, {L'\x792a'}, {L'\x793a'}, {L'\x793c'},
++ /* 1184 */  {L'\x793e'}, {L'\x7948'}, {L'\x7949'}, {L'\x7950'}, {L'\x7956'}, {L'\x795d'}, {L'\x795e'}, {L'\x7965'},
++ /* 1192 */  {L'\x797f'}, {L'\x7981'}, {L'\x798d'}, {L'\x798e'}, {L'\x798f'}, {L'\x79ae'}, {L'\x79b8'}, {L'\x79be'},
++ /* 1200 */  {L'\x79ca'}, {L'\x79d8'}, {L'\x79eb'}, {L'\x7a1c'}, {L'\x7a40'}, {L'\x7a4a'}, {L'\x7a4f'}, {L'\x7a74'},
++ /* 1208 */  {L'\x7a7a'}, {L'\x7a81'}, {L'\x7ab1'}, {L'\x7acb'}, {L'\x7aee'}, {L'\x7af9'}, {L'\x7b20'}, {L'\x7b8f'},
++ /* 1216 */  {L'\x7bc0'}, {L'\x7bc6'}, {L'\x7bc9'}, {L'\x7c3e'}, {L'\x7c60'}, {L'\x7c73'}, {L'\x7c7b'}, {L'\x7c92'},
++ /* 1224 */  {L'\x7cbe'}, {L'\x7cd2'}, {L'\x7cd6'}, {L'\x7ce3'}, {L'\x7ce7'}, {L'\x7ce8'}, {L'\x7cf8'}, {L'\x7d00'},
++ /* 1232 */  {L'\x7d10'}, {L'\x7d22'}, {L'\x7d2f'}, {L'\x7d42'}, {L'\x7d5b'}, {L'\x7d63'}, {L'\x7da0'}, {L'\x7dbe'},
++ /* 1240 */  {L'\x7dc7'}, {L'\x7df4'}, {L'\x7e02'}, {L'\x7e09'}, {L'\x7e37'}, {L'\x7e41'}, {L'\x7e45'}, {L'\x7f36'},
++ /* 1248 */  {L'\x7f3e'}, {L'\x7f51'}, {L'\x7f72'}, {L'\x7f79'}, {L'\x7f7a'}, {L'\x7f85'}, {L'\x7f8a'}, {L'\x7f95'},
++ /* 1256 */  {L'\x7f9a'}, {L'\x7fbd'}, {L'\x7ffa'}, {L'\x8001'}, {L'\x8005'}, {L'\x800c'}, {L'\x8012'}, {L'\x8033'},
++ /* 1264 */  {L'\x8046'}, {L'\x8060'}, {L'\x806f'}, {L'\x8070'}, {L'\x807e'}, {L'\x807f'}, {L'\x8089'}, {L'\x808b'},
++ /* 1272 */  {L'\x80ad'}, {L'\x80b2'}, {L'\x8103'}, {L'\x813e'}, {L'\x81d8'}, {L'\x81e3'}, {L'\x81e8'}, {L'\x81ea'},
++ /* 1280 */  {L'\x81ed'}, {L'\x81f3'}, {L'\x81fc'}, {L'\x8201'}, {L'\x8204'}, {L'\x820c'}, {L'\x8218'}, {L'\x821b'},
++ /* 1288 */  {L'\x821f'}, {L'\x826e'}, {L'\x826f'}, {L'\x8272'}, {L'\x8278'}, {L'\x8279'}, {L'\x828b'}, {L'\x8291'},
++ /* 1296 */  {L'\x829d'}, {L'\x82b1'}, {L'\x82b3'}, {L'\x82bd'}, {L'\x82e5'}, {L'\x82e6'}, {L'\x831d'}, {L'\x8323'},
++ /* 1304 */  {L'\x8336'}, {L'\x8352'}, {L'\x8353'}, {L'\x8363'}, {L'\x83ad'}, {L'\x83bd'}, {L'\x83c9'}, {L'\x83ca'},
++ /* 1312 */  {L'\x83cc'}, {L'\x83dc'}, {L'\x83e7'}, {L'\x83ef'}, {L'\x83f1'}, {L'\x843d'}, {L'\x8449'}, {L'\x8457'},
++ /* 1320 */  {L'\x84ee'}, {L'\x84f1'}, {L'\x84f3'}, {L'\x84fc'}, {L'\x8516'}, {L'\x8564'}, {L'\x85cd'}, {L'\x85fa'},
++ /* 1328 */  {L'\x8606'}, {L'\x8612'}, {L'\x862d'}, {L'\x863f'}, {L'\x864d'}, {L'\x8650'}, {L'\x865c'}, {L'\x8667'},
++ /* 1336 */  {L'\x8669'}, {L'\x866b'}, {L'\x8688'}, {L'\x86a9'}, {L'\x86e2'}, {L'\x870e'}, {L'\x8728'}, {L'\x876b'},
++ /* 1344 */  {L'\x8779'}, {L'\x8786'}, {L'\x87ba'}, {L'\x87e1'}, {L'\x8801'}, {L'\x881f'}, {L'\x8840'}, {L'\x884c'},
++ /* 1352 */  {L'\x8860'}, {L'\x8863'}, {L'\x88c2'}, {L'\x88cf'}, {L'\x88d7'}, {L'\x88de'}, {L'\x88e1'}, {L'\x88f8'},
++ /* 1360 */  {L'\x88fa'}, {L'\x8910'}, {L'\x8941'}, {L'\x8964'}, {L'\x897e'}, {L'\x8986'}, {L'\x898b'}, {L'\x8996'},
++ /* 1368 */  {L'\x89d2'}, {L'\x89e3'}, {L'\x8a00'}, {L'\x8aa0'}, {L'\x8aaa'}, {L'\x8abf'}, {L'\x8acb'}, {L'\x8ad2'},
++ /* 1376 */  {L'\x8ad6'}, {L'\x8aed'}, {L'\x8af8'}, {L'\x8afe'}, {L'\x8b01'}, {L'\x8b39'}, {L'\x8b58'}, {L'\x8b80'},
++ /* 1384 */  {L'\x8b8a'}, {L'\x8c37'}, {L'\x8c46'}, {L'\x8c48'}, {L'\x8c55'}, {L'\x8c78'}, {L'\x8c9d'}, {L'\x8ca1'},
++ /* 1392 */  {L'\x8ca9'}, {L'\x8cab'}, {L'\x8cc1'}, {L'\x8cc2'}, {L'\x8cc7'}, {L'\x8cc8'}, {L'\x8cd3'}, {L'\x8d08'},
++ /* 1400 */  {L'\x8d1b'}, {L'\x8d64'}, {L'\x8d70'}, {L'\x8d77'}, {L'\x8db3'}, {L'\x8dbc'}, {L'\x8dcb'}, {L'\x8def'},
++ /* 1408 */  {L'\x8df0'}, {L'\x8eab'}, {L'\x8eca'}, {L'\x8ed4'}, {L'\x8f26'}, {L'\x8f2a'}, {L'\x8f38'}, {L'\x8f3b'},
++ /* 1416 */  {L'\x8f62'}, {L'\x8f9b'}, {L'\x8f9e'}, {L'\x8fb0'}, {L'\x8fb5'}, {L'\x8fb6'}, {L'\x9023'}, {L'\x9038'},
++ /* 1424 */  {L'\x904a'}, {L'\x9069'}, {L'\x9072'}, {L'\x907c'}, {L'\x908f'}, {L'\x9091'}, {L'\x9094'}, {L'\x90ce'},
++ /* 1432 */  {L'\x90de'}, {L'\x90f1'}, {L'\x90fd'}, {L'\x9111'}, {L'\x911b'}, {L'\x9149'}, {L'\x914d'}, {L'\x916a'},
++ /* 1440 */  {L'\x9199'}, {L'\x91b4'}, {L'\x91c6'}, {L'\x91cc'}, {L'\x91cf'}, {L'\x91d1'}, {L'\x9234'}, {L'\x9238'},
++ /* 1448 */  {L'\x9276'}, {L'\x927c'}, {L'\x92d7'}, {L'\x92d8'}, {L'\x9304'}, {L'\x934a'}, {L'\x93f9'}, {L'\x9415'},
++ /* 1456 */  {L'\x9577'}, {L'\x9580'}, {L'\x958b'}, {L'\x95ad'}, {L'\x95b7'}, {L'\x961c'}, {L'\x962e'}, {L'\x964b'},
++ /* 1464 */  {L'\x964d'}, {L'\x9675'}, {L'\x9678'}, {L'\x967c'}, {L'\x9686'}, {L'\x96a3'}, {L'\x96b6'}, {L'\x96b7'},
++ /* 1472 */  {L'\x96b8'}, {L'\x96b9'}, {L'\x96c3'}, {L'\x96e2'}, {L'\x96e3'}, {L'\x96e8'}, {L'\x96f6'}, {L'\x96f7'},
++ /* 1480 */  {L'\x9723'}, {L'\x9732'}, {L'\x9748'}, {L'\x9751'}, {L'\x9756'}, {L'\x975e'}, {L'\x9762'}, {L'\x9769'},
++ /* 1488 */  {L'\x97cb'}, {L'\x97db'}, {L'\x97e0'}, {L'\x97ed'}, {L'\x97f3'}, {L'\x97ff'}, {L'\x9801'}, {L'\x9805'},
++ /* 1496 */  {L'\x980b'}, {L'\x9818'}, {L'\x9829'}, {L'\x983b'}, {L'\x985e'}, {L'\x98a8'}, {L'\x98db'}, {L'\x98df'},
++ /* 1504 */  {L'\x98e2'}, {L'\x98ef'}, {L'\x98fc'}, {L'\x9928'}, {L'\x9929'}, {L'\x9996'}, {L'\x9999'}, {L'\x99a7'},
++ /* 1512 */  {L'\x99ac'}, {L'\x99c2'}, {L'\x99f1'}, {L'\x99fe'}, {L'\x9a6a'}, {L'\x9aa8'}, {L'\x9ad8'}, {L'\x9adf'},
++ /* 1520 */  {L'\x9b12'}, {L'\x9b25'}, {L'\x9b2f'}, {L'\x9b32'}, {L'\x9b3c'}, {L'\x9b5a'}, {L'\x9b6f'}, {L'\x9c40'},
++ /* 1528 */  {L'\x9c57'}, {L'\x9ce5'}, {L'\x9cfd'}, {L'\x9d67'}, {L'\x9db4'}, {L'\x9dfa'}, {L'\x9e1e'}, {L'\x9e75'},
++ /* 1536 */  {L'\x9e7f'}, {L'\x9e97'}, {L'\x9e9f'}, {L'\x9ea5'}, {L'\x9ebb'}, {L'\x9ec3'}, {L'\x9ecd'}, {L'\x9ece'},
++ /* 1544 */  {L'\x9ed1'}, {L'\x9ef9'}, {L'\x9efd'}, {L'\x9efe'}, {L'\x9f05'}, {L'\x9f0e'}, {L'\x9f0f'}, {L'\x9f13'},
++ /* 1552 */  {L'\x9f16'}, {L'\x9f20'}, {L'\x9f3b'}, {L'\x9f43'}, {L'\x9f4a'}, {L'\x9f52'}, {L'\x9f8d'}, {L'\x9f8e'},
++ /* 1560 */  {L'\x9f9c'}, {L'\x9f9f'}, {L'\x9fa0'}, {L'\xa727'}, {L'\xa76f'}, {L'\xa78e'}, {L'\xab37'}, {L'\xab52'},
++ /* 1568 */  {L'\xab66'}, {L'\xab67'}, {L']'}, {L'^'}, {L'_'}, {L'`'}, {L'a'}, {L'b'},
++ /* 1576 */  {L'c'}, {L'd'}, {L'e'}, {L'f'}, {L'g'}, {L'h'}, {L'i'}, {L'j'},
++ /* 1584 */  {L'k'}, {L'l'}, {L'm'}, {L'n'}, {L'o'}, {L'p'}, {L'q'}, {L'r'},
++ /* 1592 */  {L's'}, {L't'}, {L'u'}, {L'v'}, {L'w'}, {L'x'}, {L'y'}, {L'z'},
++ /* 1600 */  {L'{'}, {L'|'}, {L'}'}, {L'~'}};
++
++static const wchar_t UNWIF_compat_tbl_2 [1292][2] = {
+  /*   0 */  {L'.',L'.'}, {L'0',L','}, {L'0',L'.'}, {L'0',L'\x70b9'}, {L'1',L','}, {L'1',L'.'}, {L'1',L'0'}, {L'1',L'1'},
+  /*   8 */  {L'1',L'2'}, {L'1',L'3'}, {L'1',L'4'}, {L'1',L'5'}, {L'1',L'6'}, {L'1',L'7'}, {L'1',L'8'}, {L'1',L'9'},
+  /*  16 */  {L'1',L'\x2044'}, {L'1',L'\x65e5'}, {L'1',L'\x6708'}, {L'1',L'\x70b9'}, {L'2',L','}, {L'2',L'.'}, {L'2',L'0'}, {L'2',L'1'},
+@@ -336,52 +342,53 @@ static const wchar_t UNWIF_compat_tbl_2 [1286][2] = {
+  /* 896 */  {L'\x30c1',L'\x3099'}, {L'\x30c4',L'\x3099'}, {L'\x30c6',L'\x3099'}, {L'\x30c8',L'\x3099'}, {L'\x30c8',L'\x30f3'}, {L'\x30ca',L'\x30ce'}, {L'\x30cf',L'\x3099'}, {L'\x30cf',L'\x309a'},
+  /* 904 */  {L'\x30d2',L'\x3099'}, {L'\x30d2',L'\x309a'}, {L'\x30d5',L'\x3099'}, {L'\x30d5',L'\x309a'}, {L'\x30d8',L'\x3099'}, {L'\x30d8',L'\x309a'}, {L'\x30db',L'\x3099'}, {L'\x30db',L'\x309a'},
+  /* 912 */  {L'\x30db',L'\x30f3'}, {L'\x30df',L'\x30ea'}, {L'\x30ea',L'\x30e9'}, {L'\x30ec',L'\x30e0'}, {L'\x30ef',L'\x3099'}, {L'\x30f0',L'\x3099'}, {L'\x30f1',L'\x3099'}, {L'\x30f2',L'\x3099'},
+- /* 920 */  {L'\x30fd',L'\x3099'}, {L'\x4ee4',L'\x548c'}, {L'\x5927',L'\x6b63'}, {L'\x5e73',L'\x6210'}, {L'\x660e',L'\x6cbb'}, {L'\x662d',L'\x548c'}, {L'\xd840',L'\xdd22'}, {L'\xd841',L'\xdd1c'},
+- /* 928 */  {L'\xd841',L'\xdd25'}, {L'\xd841',L'\xdd4b'}, {L'\xd841',L'\xde3a'}, {L'\xd842',L'\xdc04'}, {L'\xd842',L'\xdcde'}, {L'\xd842',L'\xde2c'}, {L'\xd842',L'\xdf63'}, {L'\xd845',L'\xdce4'},
+- /* 936 */  {L'\xd845',L'\xdea8'}, {L'\xd845',L'\xdeea'}, {L'\xd846',L'\xddc8'}, {L'\xd846',L'\xdf18'}, {L'\xd847',L'\xdd0b'}, {L'\xd847',L'\xdde4'}, {L'\xd847',L'\xdde6'}, {L'\xd848',L'\xdd83'},
+- /* 944 */  {L'\xd848',L'\xdd9f'}, {L'\xd848',L'\xdf31'}, {L'\xd849',L'\xded4'}, {L'\xd84a',L'\xdc44'}, {L'\xd84a',L'\xdc4a'}, {L'\xd84a',L'\xdf0c'}, {L'\xd84a',L'\xdff1'}, {L'\xd84c',L'\xdc0a'},
+- /* 952 */  {L'\xd84c',L'\xdeb8'}, {L'\xd84c',L'\xdf5f'}, {L'\xd84c',L'\xdf93'}, {L'\xd84c',L'\xdf9c'}, {L'\xd84c',L'\xdfc3'}, {L'\xd84c',L'\xdfd5'}, {L'\xd84d',L'\xdc6d'}, {L'\xd84d',L'\xdea3'},
+- /* 960 */  {L'\xd84e',L'\xdca7'}, {L'\xd84e',L'\xde8d'}, {L'\xd84e',L'\xdefa'}, {L'\xd84f',L'\xdcbc'}, {L'\xd84f',L'\xdd1e'}, {L'\xd84f',L'\xded1'}, {L'\xd84f',L'\xdf5e'}, {L'\xd84f',L'\xdf8e'},
+- /* 968 */  {L'\xd850',L'\xde63'}, {L'\xd850',L'\xdeee'}, {L'\xd850',L'\xdfab'}, {L'\xd851',L'\xde08'}, {L'\xd851',L'\xdf35'}, {L'\xd852',L'\xdc14'}, {L'\xd853',L'\xdc36'}, {L'\xd853',L'\xdc92'},
+- /* 976 */  {L'\xd853',L'\xdfa1'}, {L'\xd853',L'\xdfb8'}, {L'\xd854',L'\xdc44'}, {L'\xd854',L'\xdcf2'}, {L'\xd854',L'\xdcf3'}, {L'\xd854',L'\xdd19'}, {L'\xd854',L'\xdd33'}, {L'\xd854',L'\xde49'},
+- /* 984 */  {L'\xd855',L'\xdc1d'}, {L'\xd855',L'\xde26'}, {L'\xd855',L'\xde9a'}, {L'\xd855',L'\xdec5'}, {L'\xd856',L'\xdd7c'}, {L'\xd856',L'\xdea7'}, {L'\xd856',L'\xdfab'}, {L'\xd857',L'\xdc80'},
+- /* 992 */  {L'\xd857',L'\xdcd0'}, {L'\xd857',L'\xdf86'}, {L'\xd858',L'\xddda'}, {L'\xd858',L'\xde28'}, {L'\xd858',L'\xde47'}, {L'\xd858',L'\xded9'}, {L'\xd858',L'\xdf3e'}, {L'\xd859',L'\xdcda'},
+- /* 1000 */  {L'\xd859',L'\xdd23'}, {L'\xd859',L'\xdda8'}, {L'\xd859',L'\xdfa7'}, {L'\xd859',L'\xdfb5'}, {L'\xd85a',L'\xdf3c'}, {L'\xd85b',L'\xdc36'}, {L'\xd85b',L'\xdcd5'}, {L'\xd85b',L'\xdd6b'},
+- /* 1008 */  {L'\xd85b',L'\xdf2c'}, {L'\xd85b',L'\xdfb1'}, {L'\xd85c',L'\xdcd2'}, {L'\xd85c',L'\xdfca'}, {L'\xd85d',L'\xde67'}, {L'\xd85e',L'\xdcae'}, {L'\xd85e',L'\xdd66'}, {L'\xd85f',L'\xdca8'},
+- /* 1016 */  {L'\xd85f',L'\xded3'}, {L'\xd85f',L'\xdf2f'}, {L'\xd861',L'\xddd2'}, {L'\xd861',L'\xdded'}, {L'\xd861',L'\xdf2e'}, {L'\xd862',L'\xdffa'}, {L'\xd863',L'\xdd77'}, {L'\xd864',L'\xdd45'},
+- /* 1024 */  {L'\xd864',L'\xdddf'}, {L'\xd864',L'\xde1a'}, {L'\xd865',L'\xdc0a'}, {L'\xd865',L'\xdc96'}, {L'\xd865',L'\xddb6'}, {L'\xd866',L'\xdf30'}, {L'\xd868',L'\xdcce'}, {L'\xd868',L'\xdd05'},
+- /* 1032 */  {L'\xd868',L'\xde0e'}, {L'\xd868',L'\xde91'}, {L'\xd868',L'\xdf92'}, {L'\xd869',L'\xde00'}, {L'a',L'\x02be'}, {L'a',L'\x0300'}, {L'a',L'\x0301'}, {L'a',L'\x0302'},
+- /* 1040 */  {L'a',L'\x0303'}, {L'a',L'\x0304'}, {L'a',L'\x0306'}, {L'a',L'\x0307'}, {L'a',L'\x0308'}, {L'a',L'\x0309'}, {L'a',L'\x030a'}, {L'a',L'\x030c'},
+- /* 1048 */  {L'a',L'\x030f'}, {L'a',L'\x0311'}, {L'a',L'\x0323'}, {L'a',L'\x0325'}, {L'a',L'\x0328'}, {L'b',L'\x0307'}, {L'b',L'\x0323'}, {L'b',L'\x0331'},
+- /* 1056 */  {L'c',L'\x0301'}, {L'c',L'\x0302'}, {L'c',L'\x0307'}, {L'c',L'\x030c'}, {L'c',L'\x0327'}, {L'c',L'c'}, {L'c',L'd'}, {L'c',L'm'},
+- /* 1064 */  {L'd',L'B'}, {L'd',L'\x0307'}, {L'd',L'\x030c'}, {L'd',L'\x0323'}, {L'd',L'\x0327'}, {L'd',L'\x032d'}, {L'd',L'\x0331'}, {L'd',L'a'},
+- /* 1072 */  {L'd',L'l'}, {L'd',L'm'}, {L'd',L'z'}, {L'e',L'V'}, {L'e',L'\x0300'}, {L'e',L'\x0301'}, {L'e',L'\x0302'}, {L'e',L'\x0303'},
+- /* 1080 */  {L'e',L'\x0304'}, {L'e',L'\x0306'}, {L'e',L'\x0307'}, {L'e',L'\x0308'}, {L'e',L'\x0309'}, {L'e',L'\x030c'}, {L'e',L'\x030f'}, {L'e',L'\x0311'},
+- /* 1088 */  {L'e',L'\x0323'}, {L'e',L'\x0327'}, {L'e',L'\x0328'}, {L'e',L'\x032d'}, {L'e',L'\x0330'}, {L'f',L'\x0307'}, {L'f',L'f'}, {L'f',L'i'},
+- /* 1096 */  {L'f',L'l'}, {L'f',L'm'}, {L'g',L'\x0301'}, {L'g',L'\x0302'}, {L'g',L'\x0304'}, {L'g',L'\x0306'}, {L'g',L'\x0307'}, {L'g',L'\x030c'},
+- /* 1104 */  {L'g',L'\x0327'}, {L'h',L'\x0302'}, {L'h',L'\x0307'}, {L'h',L'\x0308'}, {L'h',L'\x030c'}, {L'h',L'\x0323'}, {L'h',L'\x0327'}, {L'h',L'\x032e'},
+- /* 1112 */  {L'h',L'\x0331'}, {L'h',L'a'}, {L'i',L'\x0300'}, {L'i',L'\x0301'}, {L'i',L'\x0302'}, {L'i',L'\x0303'}, {L'i',L'\x0304'}, {L'i',L'\x0306'},
+- /* 1120 */  {L'i',L'\x0308'}, {L'i',L'\x0309'}, {L'i',L'\x030c'}, {L'i',L'\x030f'}, {L'i',L'\x0311'}, {L'i',L'\x0323'}, {L'i',L'\x0328'}, {L'i',L'\x0330'},
+- /* 1128 */  {L'i',L'i'}, {L'i',L'j'}, {L'i',L'n'}, {L'i',L'v'}, {L'i',L'x'}, {L'j',L'\x0302'}, {L'j',L'\x030c'}, {L'k',L'A'},
+- /* 1136 */  {L'k',L'V'}, {L'k',L'W'}, {L'k',L'\x0301'}, {L'k',L'\x030c'}, {L'k',L'\x0323'}, {L'k',L'\x0327'}, {L'k',L'\x0331'}, {L'k',L'\x03a9'},
+- /* 1144 */  {L'k',L'g'}, {L'k',L'l'}, {L'k',L'm'}, {L'k',L't'}, {L'l',L'\x00b7'}, {L'l',L'\x0301'}, {L'l',L'\x030c'}, {L'l',L'\x0323'},
+- /* 1152 */  {L'l',L'\x0327'}, {L'l',L'\x032d'}, {L'l',L'\x0331'}, {L'l',L'j'}, {L'l',L'm'}, {L'l',L'n'}, {L'l',L'x'}, {L'm',L'2'},
+- /* 1160 */  {L'm',L'3'}, {L'm',L'A'}, {L'm',L'V'}, {L'm',L'W'}, {L'm',L'\x0301'}, {L'm',L'\x0307'}, {L'm',L'\x0323'}, {L'm',L'b'},
+- /* 1168 */  {L'm',L'g'}, {L'm',L'l'}, {L'm',L'm'}, {L'm',L's'}, {L'n',L'A'}, {L'n',L'F'}, {L'n',L'V'}, {L'n',L'W'},
+- /* 1176 */  {L'n',L'\x0300'}, {L'n',L'\x0301'}, {L'n',L'\x0303'}, {L'n',L'\x0307'}, {L'n',L'\x030c'}, {L'n',L'\x0323'}, {L'n',L'\x0327'}, {L'n',L'\x032d'},
+- /* 1184 */  {L'n',L'\x0331'}, {L'n',L'j'}, {L'n',L'm'}, {L'n',L's'}, {L'o',L'V'}, {L'o',L'\x0300'}, {L'o',L'\x0301'}, {L'o',L'\x0302'},
+- /* 1192 */  {L'o',L'\x0303'}, {L'o',L'\x0304'}, {L'o',L'\x0306'}, {L'o',L'\x0307'}, {L'o',L'\x0308'}, {L'o',L'\x0309'}, {L'o',L'\x030b'}, {L'o',L'\x030c'},
+- /* 1200 */  {L'o',L'\x030f'}, {L'o',L'\x0311'}, {L'o',L'\x031b'}, {L'o',L'\x0323'}, {L'o',L'\x0328'}, {L'p',L'A'}, {L'p',L'F'}, {L'p',L'V'},
+- /* 1208 */  {L'p',L'W'}, {L'p',L'\x0301'}, {L'p',L'\x0307'}, {L'p',L'c'}, {L'p',L's'}, {L'r',L'\x0301'}, {L'r',L'\x0307'}, {L'r',L'\x030c'},
+- /* 1216 */  {L'r',L'\x030f'}, {L'r',L'\x0311'}, {L'r',L'\x0323'}, {L'r',L'\x0327'}, {L'r',L'\x0331'}, {L's',L'\x0301'}, {L's',L'\x0302'}, {L's',L'\x0307'},
+- /* 1224 */  {L's',L'\x030c'}, {L's',L'\x0323'}, {L's',L'\x0326'}, {L's',L'\x0327'}, {L's',L'r'}, {L's',L't'}, {L't',L'\x0307'}, {L't',L'\x0308'},
+- /* 1232 */  {L't',L'\x030c'}, {L't',L'\x0323'}, {L't',L'\x0326'}, {L't',L'\x0327'}, {L't',L'\x032d'}, {L't',L'\x0331'}, {L'u',L'\x0300'}, {L'u',L'\x0301'},
+- /* 1240 */  {L'u',L'\x0302'}, {L'u',L'\x0303'}, {L'u',L'\x0304'}, {L'u',L'\x0306'}, {L'u',L'\x0308'}, {L'u',L'\x0309'}, {L'u',L'\x030a'}, {L'u',L'\x030b'},
+- /* 1248 */  {L'u',L'\x030c'}, {L'u',L'\x030f'}, {L'u',L'\x0311'}, {L'u',L'\x031b'}, {L'u',L'\x0323'}, {L'u',L'\x0324'}, {L'u',L'\x0328'}, {L'u',L'\x032d'},
+- /* 1256 */  {L'u',L'\x0330'}, {L'v',L'\x0303'}, {L'v',L'\x0323'}, {L'v',L'i'}, {L'w',L'\x0300'}, {L'w',L'\x0301'}, {L'w',L'\x0302'}, {L'w',L'\x0307'},
+- /* 1264 */  {L'w',L'\x0308'}, {L'w',L'\x030a'}, {L'w',L'\x0323'}, {L'x',L'\x0307'}, {L'x',L'\x0308'}, {L'x',L'i'}, {L'y',L'\x0300'}, {L'y',L'\x0301'},
+- /* 1272 */  {L'y',L'\x0302'}, {L'y',L'\x0303'}, {L'y',L'\x0304'}, {L'y',L'\x0307'}, {L'y',L'\x0308'}, {L'y',L'\x0309'}, {L'y',L'\x030a'}, {L'y',L'\x0323'},
+- /* 1280 */  {L'z',L'\x0301'}, {L'z',L'\x0302'}, {L'z',L'\x0307'}, {L'z',L'\x030c'}, {L'z',L'\x0323'}, {L'z',L'\x0331'}};
++ /* 920 */  {L'\x30fd',L'\x3099'}, {L'\x4ee4',L'\x548c'}, {L'\x5927',L'\x6b63'}, {L'\x5e73',L'\x6210'}, {L'\x660e',L'\x6cbb'}, {L'\x662d',L'\x548c'}, {L'\xd837',L'\xdf04'}, {L'\xd837',L'\xdf05'},
++ /* 928 */  {L'\xd837',L'\xdf06'}, {L'\xd837',L'\xdf08'}, {L'\xd837',L'\xdf0a'}, {L'\xd837',L'\xdf1e'}, {L'\xd840',L'\xdd22'}, {L'\xd841',L'\xdd1c'}, {L'\xd841',L'\xdd25'}, {L'\xd841',L'\xdd4b'},
++ /* 936 */  {L'\xd841',L'\xde3a'}, {L'\xd842',L'\xdc04'}, {L'\xd842',L'\xdcde'}, {L'\xd842',L'\xde2c'}, {L'\xd842',L'\xdf63'}, {L'\xd845',L'\xdce4'}, {L'\xd845',L'\xdea8'}, {L'\xd845',L'\xdeea'},
++ /* 944 */  {L'\xd846',L'\xddc8'}, {L'\xd846',L'\xdf18'}, {L'\xd847',L'\xdd0b'}, {L'\xd847',L'\xdde4'}, {L'\xd847',L'\xdde6'}, {L'\xd848',L'\xdd83'}, {L'\xd848',L'\xdd9f'}, {L'\xd848',L'\xdf31'},
++ /* 952 */  {L'\xd849',L'\xded4'}, {L'\xd84a',L'\xdc44'}, {L'\xd84a',L'\xdc4a'}, {L'\xd84a',L'\xdf0c'}, {L'\xd84a',L'\xdff1'}, {L'\xd84c',L'\xdc0a'}, {L'\xd84c',L'\xdeb8'}, {L'\xd84c',L'\xdf5f'},
++ /* 960 */  {L'\xd84c',L'\xdf93'}, {L'\xd84c',L'\xdf9c'}, {L'\xd84c',L'\xdfc3'}, {L'\xd84c',L'\xdfd5'}, {L'\xd84d',L'\xdc6d'}, {L'\xd84d',L'\xdea3'}, {L'\xd84e',L'\xdca7'}, {L'\xd84e',L'\xde8d'},
++ /* 968 */  {L'\xd84e',L'\xdefa'}, {L'\xd84f',L'\xdcbc'}, {L'\xd84f',L'\xdd1e'}, {L'\xd84f',L'\xded1'}, {L'\xd84f',L'\xdf5e'}, {L'\xd84f',L'\xdf8e'}, {L'\xd850',L'\xde63'}, {L'\xd850',L'\xdeee'},
++ /* 976 */  {L'\xd850',L'\xdfab'}, {L'\xd851',L'\xde08'}, {L'\xd851',L'\xdf35'}, {L'\xd852',L'\xdc14'}, {L'\xd853',L'\xdc36'}, {L'\xd853',L'\xdc92'}, {L'\xd853',L'\xdfa1'}, {L'\xd853',L'\xdfb8'},
++ /* 984 */  {L'\xd854',L'\xdc44'}, {L'\xd854',L'\xdcf2'}, {L'\xd854',L'\xdcf3'}, {L'\xd854',L'\xdd19'}, {L'\xd854',L'\xdd33'}, {L'\xd854',L'\xde49'}, {L'\xd855',L'\xdc1d'}, {L'\xd855',L'\xde26'},
++ /* 992 */  {L'\xd855',L'\xde9a'}, {L'\xd855',L'\xdec5'}, {L'\xd856',L'\xdd7c'}, {L'\xd856',L'\xdea7'}, {L'\xd856',L'\xdfab'}, {L'\xd857',L'\xdc80'}, {L'\xd857',L'\xdcd0'}, {L'\xd857',L'\xdf86'},
++ /* 1000 */  {L'\xd858',L'\xddda'}, {L'\xd858',L'\xde28'}, {L'\xd858',L'\xde47'}, {L'\xd858',L'\xded9'}, {L'\xd858',L'\xdf3e'}, {L'\xd859',L'\xdcda'}, {L'\xd859',L'\xdd23'}, {L'\xd859',L'\xdda8'},
++ /* 1008 */  {L'\xd859',L'\xdfa7'}, {L'\xd859',L'\xdfb5'}, {L'\xd85a',L'\xdf3c'}, {L'\xd85b',L'\xdc36'}, {L'\xd85b',L'\xdcd5'}, {L'\xd85b',L'\xdd6b'}, {L'\xd85b',L'\xdf2c'}, {L'\xd85b',L'\xdfb1'},
++ /* 1016 */  {L'\xd85c',L'\xdcd2'}, {L'\xd85c',L'\xdfca'}, {L'\xd85d',L'\xde67'}, {L'\xd85e',L'\xdcae'}, {L'\xd85e',L'\xdd66'}, {L'\xd85f',L'\xdca8'}, {L'\xd85f',L'\xded3'}, {L'\xd85f',L'\xdf2f'},
++ /* 1024 */  {L'\xd861',L'\xddd2'}, {L'\xd861',L'\xdded'}, {L'\xd861',L'\xdf2e'}, {L'\xd862',L'\xdffa'}, {L'\xd863',L'\xdd77'}, {L'\xd864',L'\xdd45'}, {L'\xd864',L'\xdddf'}, {L'\xd864',L'\xde1a'},
++ /* 1032 */  {L'\xd865',L'\xdc0a'}, {L'\xd865',L'\xdc96'}, {L'\xd865',L'\xddb6'}, {L'\xd866',L'\xdf30'}, {L'\xd868',L'\xdcce'}, {L'\xd868',L'\xdd05'}, {L'\xd868',L'\xde0e'}, {L'\xd868',L'\xde91'},
++ /* 1040 */  {L'\xd868',L'\xdf92'}, {L'\xd869',L'\xde00'}, {L'a',L'\x02be'}, {L'a',L'\x0300'}, {L'a',L'\x0301'}, {L'a',L'\x0302'}, {L'a',L'\x0303'}, {L'a',L'\x0304'},
++ /* 1048 */  {L'a',L'\x0306'}, {L'a',L'\x0307'}, {L'a',L'\x0308'}, {L'a',L'\x0309'}, {L'a',L'\x030a'}, {L'a',L'\x030c'}, {L'a',L'\x030f'}, {L'a',L'\x0311'},
++ /* 1056 */  {L'a',L'\x0323'}, {L'a',L'\x0325'}, {L'a',L'\x0328'}, {L'b',L'\x0307'}, {L'b',L'\x0323'}, {L'b',L'\x0331'}, {L'c',L'\x0301'}, {L'c',L'\x0302'},
++ /* 1064 */  {L'c',L'\x0307'}, {L'c',L'\x030c'}, {L'c',L'\x0327'}, {L'c',L'c'}, {L'c',L'd'}, {L'c',L'm'}, {L'd',L'B'}, {L'd',L'\x0307'},
++ /* 1072 */  {L'd',L'\x030c'}, {L'd',L'\x0323'}, {L'd',L'\x0327'}, {L'd',L'\x032d'}, {L'd',L'\x0331'}, {L'd',L'a'}, {L'd',L'l'}, {L'd',L'm'},
++ /* 1080 */  {L'd',L'z'}, {L'e',L'V'}, {L'e',L'\x0300'}, {L'e',L'\x0301'}, {L'e',L'\x0302'}, {L'e',L'\x0303'}, {L'e',L'\x0304'}, {L'e',L'\x0306'},
++ /* 1088 */  {L'e',L'\x0307'}, {L'e',L'\x0308'}, {L'e',L'\x0309'}, {L'e',L'\x030c'}, {L'e',L'\x030f'}, {L'e',L'\x0311'}, {L'e',L'\x0323'}, {L'e',L'\x0327'},
++ /* 1096 */  {L'e',L'\x0328'}, {L'e',L'\x032d'}, {L'e',L'\x0330'}, {L'f',L'\x0307'}, {L'f',L'f'}, {L'f',L'i'}, {L'f',L'l'}, {L'f',L'm'},
++ /* 1104 */  {L'g',L'\x0301'}, {L'g',L'\x0302'}, {L'g',L'\x0304'}, {L'g',L'\x0306'}, {L'g',L'\x0307'}, {L'g',L'\x030c'}, {L'g',L'\x0327'}, {L'h',L'\x0302'},
++ /* 1112 */  {L'h',L'\x0307'}, {L'h',L'\x0308'}, {L'h',L'\x030c'}, {L'h',L'\x0323'}, {L'h',L'\x0327'}, {L'h',L'\x032e'}, {L'h',L'\x0331'}, {L'h',L'a'},
++ /* 1120 */  {L'i',L'\x0300'}, {L'i',L'\x0301'}, {L'i',L'\x0302'}, {L'i',L'\x0303'}, {L'i',L'\x0304'}, {L'i',L'\x0306'}, {L'i',L'\x0308'}, {L'i',L'\x0309'},
++ /* 1128 */  {L'i',L'\x030c'}, {L'i',L'\x030f'}, {L'i',L'\x0311'}, {L'i',L'\x0323'}, {L'i',L'\x0328'}, {L'i',L'\x0330'}, {L'i',L'i'}, {L'i',L'j'},
++ /* 1136 */  {L'i',L'n'}, {L'i',L'v'}, {L'i',L'x'}, {L'j',L'\x0302'}, {L'j',L'\x030c'}, {L'k',L'A'}, {L'k',L'V'}, {L'k',L'W'},
++ /* 1144 */  {L'k',L'\x0301'}, {L'k',L'\x030c'}, {L'k',L'\x0323'}, {L'k',L'\x0327'}, {L'k',L'\x0331'}, {L'k',L'\x03a9'}, {L'k',L'g'}, {L'k',L'l'},
++ /* 1152 */  {L'k',L'm'}, {L'k',L't'}, {L'l',L'\x00b7'}, {L'l',L'\x0301'}, {L'l',L'\x030c'}, {L'l',L'\x0323'}, {L'l',L'\x0327'}, {L'l',L'\x032d'},
++ /* 1160 */  {L'l',L'\x0331'}, {L'l',L'j'}, {L'l',L'm'}, {L'l',L'n'}, {L'l',L'x'}, {L'm',L'2'}, {L'm',L'3'}, {L'm',L'A'},
++ /* 1168 */  {L'm',L'V'}, {L'm',L'W'}, {L'm',L'\x0301'}, {L'm',L'\x0307'}, {L'm',L'\x0323'}, {L'm',L'b'}, {L'm',L'g'}, {L'm',L'l'},
++ /* 1176 */  {L'm',L'm'}, {L'm',L's'}, {L'n',L'A'}, {L'n',L'F'}, {L'n',L'V'}, {L'n',L'W'}, {L'n',L'\x0300'}, {L'n',L'\x0301'},
++ /* 1184 */  {L'n',L'\x0303'}, {L'n',L'\x0307'}, {L'n',L'\x030c'}, {L'n',L'\x0323'}, {L'n',L'\x0327'}, {L'n',L'\x032d'}, {L'n',L'\x0331'}, {L'n',L'j'},
++ /* 1192 */  {L'n',L'm'}, {L'n',L's'}, {L'o',L'V'}, {L'o',L'\x0300'}, {L'o',L'\x0301'}, {L'o',L'\x0302'}, {L'o',L'\x0303'}, {L'o',L'\x0304'},
++ /* 1200 */  {L'o',L'\x0306'}, {L'o',L'\x0307'}, {L'o',L'\x0308'}, {L'o',L'\x0309'}, {L'o',L'\x030b'}, {L'o',L'\x030c'}, {L'o',L'\x030f'}, {L'o',L'\x0311'},
++ /* 1208 */  {L'o',L'\x031b'}, {L'o',L'\x0323'}, {L'o',L'\x0328'}, {L'p',L'A'}, {L'p',L'F'}, {L'p',L'V'}, {L'p',L'W'}, {L'p',L'\x0301'},
++ /* 1216 */  {L'p',L'\x0307'}, {L'p',L'c'}, {L'p',L's'}, {L'r',L'\x0301'}, {L'r',L'\x0307'}, {L'r',L'\x030c'}, {L'r',L'\x030f'}, {L'r',L'\x0311'},
++ /* 1224 */  {L'r',L'\x0323'}, {L'r',L'\x0327'}, {L'r',L'\x0331'}, {L's',L'\x0301'}, {L's',L'\x0302'}, {L's',L'\x0307'}, {L's',L'\x030c'}, {L's',L'\x0323'},
++ /* 1232 */  {L's',L'\x0326'}, {L's',L'\x0327'}, {L's',L'r'}, {L's',L't'}, {L't',L'\x0307'}, {L't',L'\x0308'}, {L't',L'\x030c'}, {L't',L'\x0323'},
++ /* 1240 */  {L't',L'\x0326'}, {L't',L'\x0327'}, {L't',L'\x032d'}, {L't',L'\x0331'}, {L'u',L'\x0300'}, {L'u',L'\x0301'}, {L'u',L'\x0302'}, {L'u',L'\x0303'},
++ /* 1248 */  {L'u',L'\x0304'}, {L'u',L'\x0306'}, {L'u',L'\x0308'}, {L'u',L'\x0309'}, {L'u',L'\x030a'}, {L'u',L'\x030b'}, {L'u',L'\x030c'}, {L'u',L'\x030f'},
++ /* 1256 */  {L'u',L'\x0311'}, {L'u',L'\x031b'}, {L'u',L'\x0323'}, {L'u',L'\x0324'}, {L'u',L'\x0328'}, {L'u',L'\x032d'}, {L'u',L'\x0330'}, {L'v',L'\x0303'},
++ /* 1264 */  {L'v',L'\x0323'}, {L'v',L'i'}, {L'w',L'\x0300'}, {L'w',L'\x0301'}, {L'w',L'\x0302'}, {L'w',L'\x0307'}, {L'w',L'\x0308'}, {L'w',L'\x030a'},
++ /* 1272 */  {L'w',L'\x0323'}, {L'x',L'\x0307'}, {L'x',L'\x0308'}, {L'x',L'i'}, {L'y',L'\x0300'}, {L'y',L'\x0301'}, {L'y',L'\x0302'}, {L'y',L'\x0303'},
++ /* 1280 */  {L'y',L'\x0304'}, {L'y',L'\x0307'}, {L'y',L'\x0308'}, {L'y',L'\x0309'}, {L'y',L'\x030a'}, {L'y',L'\x0323'}, {L'z',L'\x0301'}, {L'z',L'\x0302'},
++ /* 1288 */  {L'z',L'\x0307'}, {L'z',L'\x030c'}, {L'z',L'\x0323'}, {L'z',L'\x0331'}};
+ 
+ static const wchar_t UNWIF_compat_tbl_3 [629][3] = {
+  /*   0 */  {L'(',L'1',L')'}, {L'(',L'2',L')'}, {L'(',L'3',L')'}, {L'(',L'4',L')'}, {L'(',L'5',L')'}, {L'(',L'6',L')'}, {L'(',L'7',L')'}, {L'(',L'8',L')'},
+@@ -550,62 +557,62 @@ static const uint16_t UNWIF_compat_00_00 [256] = {
+ /*   0090 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0098 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   00a0 */  TBL(1)|52, 0, 0, 0, 0, 0, 0, 0,
+-/*   00a8 */  TBL(2)|335, 0, TBL(1)|1526, 0, 0, 0, 0, TBL(2)|331,
+-/*   00b0 */  0, 0, TBL(1)|10, TBL(1)|11, TBL(2)|329, TBL(1)|160, 0, 0,
+-/*   00b8 */  TBL(2)|340, TBL(1)|9, TBL(1)|1540, 0, TBL(3)|148, TBL(3)|146, TBL(3)|174, 0,
++/*   00a8 */  TBL(2)|335, 0, TBL(1)|1574, 0, 0, 0, 0, TBL(2)|331,
++/*   00b0 */  0, 0, TBL(1)|10, TBL(1)|11, TBL(2)|329, TBL(1)|203, 0, 0,
++/*   00b8 */  TBL(2)|340, TBL(1)|9, TBL(1)|1588, 0, TBL(3)|148, TBL(3)|146, TBL(3)|174, 0,
+ /*   00c0 */  TBL(2)|98, TBL(2)|99, TBL(2)|100, TBL(2)|101, TBL(2)|105, TBL(2)|107, 0, TBL(2)|123,
+ /*   00c8 */  TBL(2)|133, TBL(2)|134, TBL(2)|135, TBL(2)|140, TBL(2)|176, TBL(2)|177, TBL(2)|178, TBL(2)|183,
+ /*   00d0 */  0, TBL(2)|222, TBL(2)|231, TBL(2)|232, TBL(2)|233, TBL(2)|234, TBL(2)|238, 0,
+ /*   00d8 */  0, TBL(2)|280, TBL(2)|281, TBL(2)|282, TBL(2)|286, TBL(2)|315, 0, 0,
+-/*   00e0 */  TBL(2)|1037, TBL(2)|1038, TBL(2)|1039, TBL(2)|1040, TBL(2)|1044, TBL(2)|1046, 0, TBL(2)|1060,
+-/*   00e8 */  TBL(2)|1076, TBL(2)|1077, TBL(2)|1078, TBL(2)|1083, TBL(2)|1114, TBL(2)|1115, TBL(2)|1116, TBL(2)|1120,
+-/*   00f0 */  0, TBL(2)|1178, TBL(2)|1189, TBL(2)|1190, TBL(2)|1191, TBL(2)|1192, TBL(2)|1196, 0,
+-/*   00f8 */  0, TBL(2)|1238, TBL(2)|1239, TBL(2)|1240, TBL(2)|1244, TBL(2)|1271, 0, TBL(2)|1276
++/*   00e0 */  TBL(2)|1043, TBL(2)|1044, TBL(2)|1045, TBL(2)|1046, TBL(2)|1050, TBL(2)|1052, 0, TBL(2)|1066,
++/*   00e8 */  TBL(2)|1082, TBL(2)|1083, TBL(2)|1084, TBL(2)|1089, TBL(2)|1120, TBL(2)|1121, TBL(2)|1122, TBL(2)|1126,
++/*   00f0 */  0, TBL(2)|1184, TBL(2)|1195, TBL(2)|1196, TBL(2)|1197, TBL(2)|1198, TBL(2)|1202, 0,
++/*   00f8 */  0, TBL(2)|1244, TBL(2)|1245, TBL(2)|1246, TBL(2)|1250, TBL(2)|1277, 0, TBL(2)|1282
+ };
+ 
+ static const uint16_t UNWIF_compat_00_01 [256] = {
+-/*   0100 */  TBL(2)|102, TBL(2)|1041, TBL(2)|103, TBL(2)|1042, TBL(2)|113, TBL(2)|1052, TBL(2)|119, TBL(2)|1056,
+-/*   0108 */  TBL(2)|120, TBL(2)|1057, TBL(2)|121, TBL(2)|1058, TBL(2)|122, TBL(2)|1059, TBL(2)|127, TBL(2)|1066,
+-/*   0110 */  0, 0, TBL(2)|137, TBL(2)|1080, TBL(2)|138, TBL(2)|1081, TBL(2)|139, TBL(2)|1082,
+-/*   0118 */  TBL(2)|147, TBL(2)|1090, TBL(2)|142, TBL(2)|1085, TBL(2)|153, TBL(2)|1099, TBL(2)|155, TBL(2)|1101,
+-/*   0120 */  TBL(2)|156, TBL(2)|1102, TBL(2)|158, TBL(2)|1104, TBL(2)|162, TBL(2)|1105, 0, 0,
+-/*   0128 */  TBL(2)|179, TBL(2)|1117, TBL(2)|180, TBL(2)|1118, TBL(2)|181, TBL(2)|1119, TBL(2)|189, TBL(2)|1126,
+-/*   0130 */  TBL(2)|182, 0, TBL(2)|172, TBL(2)|1129, TBL(2)|191, TBL(2)|1133, TBL(2)|198, TBL(2)|1141,
+-/*   0138 */  0, TBL(2)|202, TBL(2)|1149, TBL(2)|205, TBL(2)|1152, TBL(2)|203, TBL(2)|1150, TBL(2)|201,
+-/*   0140 */  TBL(2)|1148, 0, 0, TBL(2)|221, TBL(2)|1177, TBL(2)|226, TBL(2)|1182, TBL(2)|224,
+-/*   0148 */  TBL(2)|1180, TBL(2)|367, 0, 0, TBL(2)|235, TBL(2)|1193, TBL(2)|236, TBL(2)|1194,
+-/*   0150 */  TBL(2)|240, TBL(2)|1198, 0, 0, TBL(2)|252, TBL(2)|1213, TBL(2)|258, TBL(2)|1219,
+-/*   0158 */  TBL(2)|254, TBL(2)|1215, TBL(2)|264, TBL(2)|1221, TBL(2)|265, TBL(2)|1222, TBL(2)|270, TBL(2)|1227,
+-/*   0160 */  TBL(2)|267, TBL(2)|1224, TBL(2)|277, TBL(2)|1235, TBL(2)|274, TBL(2)|1232, 0, 0,
+-/*   0168 */  TBL(2)|283, TBL(2)|1241, TBL(2)|284, TBL(2)|1242, TBL(2)|285, TBL(2)|1243, TBL(2)|288, TBL(2)|1246,
+-/*   0170 */  TBL(2)|289, TBL(2)|1247, TBL(2)|296, TBL(2)|1254, TBL(2)|306, TBL(2)|1262, TBL(2)|316, TBL(2)|1272,
+-/*   0178 */  TBL(2)|320, TBL(2)|323, TBL(2)|1280, TBL(2)|325, TBL(2)|1282, TBL(2)|326, TBL(2)|1283, TBL(1)|1544,
++/*   0100 */  TBL(2)|102, TBL(2)|1047, TBL(2)|103, TBL(2)|1048, TBL(2)|113, TBL(2)|1058, TBL(2)|119, TBL(2)|1062,
++/*   0108 */  TBL(2)|120, TBL(2)|1063, TBL(2)|121, TBL(2)|1064, TBL(2)|122, TBL(2)|1065, TBL(2)|127, TBL(2)|1072,
++/*   0110 */  0, 0, TBL(2)|137, TBL(2)|1086, TBL(2)|138, TBL(2)|1087, TBL(2)|139, TBL(2)|1088,
++/*   0118 */  TBL(2)|147, TBL(2)|1096, TBL(2)|142, TBL(2)|1091, TBL(2)|153, TBL(2)|1105, TBL(2)|155, TBL(2)|1107,
++/*   0120 */  TBL(2)|156, TBL(2)|1108, TBL(2)|158, TBL(2)|1110, TBL(2)|162, TBL(2)|1111, 0, 0,
++/*   0128 */  TBL(2)|179, TBL(2)|1123, TBL(2)|180, TBL(2)|1124, TBL(2)|181, TBL(2)|1125, TBL(2)|189, TBL(2)|1132,
++/*   0130 */  TBL(2)|182, 0, TBL(2)|172, TBL(2)|1135, TBL(2)|191, TBL(2)|1139, TBL(2)|198, TBL(2)|1147,
++/*   0138 */  0, TBL(2)|202, TBL(2)|1155, TBL(2)|205, TBL(2)|1158, TBL(2)|203, TBL(2)|1156, TBL(2)|201,
++/*   0140 */  TBL(2)|1154, 0, 0, TBL(2)|221, TBL(2)|1183, TBL(2)|226, TBL(2)|1188, TBL(2)|224,
++/*   0148 */  TBL(2)|1186, TBL(2)|367, 0, 0, TBL(2)|235, TBL(2)|1199, TBL(2)|236, TBL(2)|1200,
++/*   0150 */  TBL(2)|240, TBL(2)|1204, 0, 0, TBL(2)|252, TBL(2)|1219, TBL(2)|258, TBL(2)|1225,
++/*   0158 */  TBL(2)|254, TBL(2)|1221, TBL(2)|264, TBL(2)|1227, TBL(2)|265, TBL(2)|1228, TBL(2)|270, TBL(2)|1233,
++/*   0160 */  TBL(2)|267, TBL(2)|1230, TBL(2)|277, TBL(2)|1241, TBL(2)|274, TBL(2)|1238, 0, 0,
++/*   0168 */  TBL(2)|283, TBL(2)|1247, TBL(2)|284, TBL(2)|1248, TBL(2)|285, TBL(2)|1249, TBL(2)|288, TBL(2)|1252,
++/*   0170 */  TBL(2)|289, TBL(2)|1253, TBL(2)|296, TBL(2)|1260, TBL(2)|306, TBL(2)|1268, TBL(2)|316, TBL(2)|1278,
++/*   0178 */  TBL(2)|320, TBL(2)|323, TBL(2)|1286, TBL(2)|325, TBL(2)|1288, TBL(2)|326, TBL(2)|1289, TBL(1)|1592,
+ /*   0180 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0188 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0190 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0198 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   01a0 */  TBL(2)|244, TBL(2)|1202, 0, 0, 0, 0, 0, 0,
++/*   01a0 */  TBL(2)|244, TBL(2)|1208, 0, 0, 0, 0, 0, 0,
+ /*   01a8 */  0, 0, 0, 0, 0, 0, 0, TBL(2)|293,
+-/*   01b0 */  TBL(2)|1251, 0, 0, 0, 0, 0, 0, 0,
++/*   01b0 */  TBL(2)|1257, 0, 0, 0, 0, 0, 0, 0,
+ /*   01b8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   01c0 */  0, 0, 0, 0, TBL(3)|199, TBL(3)|200, TBL(3)|566, TBL(2)|200,
+-/*   01c8 */  TBL(2)|208, TBL(2)|1155, TBL(2)|219, TBL(2)|229, TBL(2)|1185, TBL(2)|108, TBL(2)|1047, TBL(2)|185,
+-/*   01d0 */  TBL(2)|1122, TBL(2)|241, TBL(2)|1199, TBL(2)|290, TBL(2)|1248, TBL(3)|249, TBL(3)|620, TBL(3)|248,
++/*   01c8 */  TBL(2)|208, TBL(2)|1161, TBL(2)|219, TBL(2)|229, TBL(2)|1191, TBL(2)|108, TBL(2)|1053, TBL(2)|185,
++/*   01d0 */  TBL(2)|1128, TBL(2)|241, TBL(2)|1205, TBL(2)|290, TBL(2)|1254, TBL(3)|249, TBL(3)|620, TBL(3)|248,
+ /*   01d8 */  TBL(3)|619, TBL(3)|250, TBL(3)|621, TBL(3)|247, TBL(3)|618, 0, TBL(3)|192, TBL(3)|553,
+-/*   01e0 */  TBL(3)|191, TBL(3)|552, TBL(2)|360, TBL(2)|363, 0, 0, TBL(2)|157, TBL(2)|1103,
+-/*   01e8 */  TBL(2)|196, TBL(2)|1139, TBL(2)|246, TBL(2)|1204, TBL(3)|235, TBL(3)|610, TBL(2)|365, TBL(2)|366,
+-/*   01f0 */  TBL(2)|1134, TBL(2)|125, TBL(2)|132, TBL(2)|1074, TBL(2)|152, TBL(2)|1098, 0, 0,
+-/*   01f8 */  TBL(2)|220, TBL(2)|1176, TBL(3)|193, TBL(3)|554, TBL(2)|359, TBL(2)|362, TBL(2)|361, TBL(2)|364
++/*   01e0 */  TBL(3)|191, TBL(3)|552, TBL(2)|360, TBL(2)|363, 0, 0, TBL(2)|157, TBL(2)|1109,
++/*   01e8 */  TBL(2)|196, TBL(2)|1145, TBL(2)|246, TBL(2)|1210, TBL(3)|235, TBL(3)|610, TBL(2)|365, TBL(2)|366,
++/*   01f0 */  TBL(2)|1140, TBL(2)|125, TBL(2)|132, TBL(2)|1080, TBL(2)|152, TBL(2)|1104, 0, 0,
++/*   01f8 */  TBL(2)|220, TBL(2)|1182, TBL(3)|193, TBL(3)|554, TBL(2)|359, TBL(2)|362, TBL(2)|361, TBL(2)|364
+ };
+ 
+ static const uint16_t UNWIF_compat_00_02 [256] = {
+-/*   0200 */  TBL(2)|109, TBL(2)|1048, TBL(2)|110, TBL(2)|1049, TBL(2)|143, TBL(2)|1086, TBL(2)|144, TBL(2)|1087,
+-/*   0208 */  TBL(2)|186, TBL(2)|1123, TBL(2)|187, TBL(2)|1124, TBL(2)|242, TBL(2)|1200, TBL(2)|243, TBL(2)|1201,
+-/*   0210 */  TBL(2)|255, TBL(2)|1216, TBL(2)|256, TBL(2)|1217, TBL(2)|291, TBL(2)|1249, TBL(2)|292, TBL(2)|1250,
+-/*   0218 */  TBL(2)|269, TBL(2)|1226, TBL(2)|276, TBL(2)|1234, 0, 0, TBL(2)|165, TBL(2)|1108,
+-/*   0220 */  0, 0, 0, 0, 0, 0, TBL(2)|104, TBL(2)|1043,
+-/*   0228 */  TBL(2)|146, TBL(2)|1089, TBL(3)|228, TBL(3)|603, TBL(3)|223, TBL(3)|598, TBL(2)|237, TBL(2)|1195,
+-/*   0230 */  TBL(3)|227, TBL(3)|602, TBL(2)|318, TBL(2)|1274, 0, 0, 0, 0,
++/*   0200 */  TBL(2)|109, TBL(2)|1054, TBL(2)|110, TBL(2)|1055, TBL(2)|143, TBL(2)|1092, TBL(2)|144, TBL(2)|1093,
++/*   0208 */  TBL(2)|186, TBL(2)|1129, TBL(2)|187, TBL(2)|1130, TBL(2)|242, TBL(2)|1206, TBL(2)|243, TBL(2)|1207,
++/*   0210 */  TBL(2)|255, TBL(2)|1222, TBL(2)|256, TBL(2)|1223, TBL(2)|291, TBL(2)|1255, TBL(2)|292, TBL(2)|1256,
++/*   0218 */  TBL(2)|269, TBL(2)|1232, TBL(2)|276, TBL(2)|1240, 0, 0, TBL(2)|165, TBL(2)|1114,
++/*   0220 */  0, 0, 0, 0, 0, 0, TBL(2)|104, TBL(2)|1049,
++/*   0228 */  TBL(2)|146, TBL(2)|1095, TBL(3)|228, TBL(3)|603, TBL(3)|223, TBL(3)|598, TBL(2)|237, TBL(2)|1201,
++/*   0230 */  TBL(3)|227, TBL(3)|602, TBL(2)|318, TBL(2)|1280, 0, 0, 0, 0,
+ /*   0238 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0240 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0248 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -621,13 +628,13 @@ static const uint16_t UNWIF_compat_00_02 [256] = {
+ /*   0298 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   02a0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   02a8 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   02b0 */  TBL(1)|1533, TBL(1)|91, TBL(1)|1535, TBL(1)|1543, TBL(1)|105, TBL(1)|106, TBL(1)|107, TBL(1)|1548,
+-/*   02b8 */  TBL(1)|1550, 0, 0, 0, 0, 0, 0, 0,
++/*   02b0 */  TBL(1)|1581, TBL(1)|104, TBL(1)|1583, TBL(1)|1591, TBL(1)|123, TBL(1)|125, TBL(1)|129, TBL(1)|1596,
++/*   02b8 */  TBL(1)|1598, 0, 0, 0, 0, 0, 0, 0,
+ /*   02c0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   02c8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   02d0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   02d8 */  TBL(2)|333, TBL(2)|334, TBL(2)|336, TBL(2)|341, TBL(2)|330, TBL(2)|337, 0, 0,
+-/*   02e0 */  TBL(1)|89, TBL(1)|1537, TBL(1)|1544, TBL(1)|1549, TBL(1)|118, 0, 0, 0,
++/*   02e0 */  TBL(1)|101, TBL(1)|1585, TBL(1)|1592, TBL(1)|1597, TBL(1)|144, 0, 0, 0,
+ /*   02e8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   02f0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   02f8 */  0, 0, 0, 0, 0, 0, 0, 0
+@@ -642,13 +649,13 @@ static const uint16_t UNWIF_compat_00_03 [256] = {
+ /*   0328 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0330 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0338 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   0340 */  TBL(1)|122, TBL(1)|123, 0, TBL(1)|124, TBL(2)|368, 0, 0, 0,
++/*   0340 */  TBL(1)|165, TBL(1)|166, 0, TBL(1)|167, TBL(2)|368, 0, 0, 0,
+ /*   0348 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0350 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0358 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0360 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0368 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   0370 */  0, 0, 0, 0, TBL(1)|121, 0, 0, 0,
++/*   0370 */  0, 0, 0, 0, TBL(1)|162, 0, 0, 0,
+ /*   0378 */  0, 0, TBL(2)|344, 0, 0, 0, TBL(1)|19, 0,
+ /*   0380 */  0, 0, 0, 0, TBL(2)|329, TBL(3)|260, TBL(2)|370, TBL(1)|66,
+ /*   0388 */  TBL(2)|377, TBL(2)|381, TBL(2)|386, 0, TBL(2)|393, 0, TBL(2)|398, TBL(2)|404,
+@@ -660,12 +667,12 @@ static const uint16_t UNWIF_compat_00_03 [256] = {
+ /*   03b8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   03c0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   03c8 */  0, 0, TBL(2)|430, TBL(2)|452, TBL(2)|443, TBL(2)|449, TBL(2)|457, 0,
+-/*   03d0 */  TBL(1)|150, TBL(1)|156, TBL(1)|144, TBL(2)|398, TBL(2)|401, TBL(1)|170, TBL(1)|164, 0,
++/*   03d0 */  TBL(1)|193, TBL(1)|199, TBL(1)|187, TBL(2)|398, TBL(2)|401, TBL(1)|213, TBL(1)|207, 0,
+ /*   03d8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   03e0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   03e8 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   03f0 */  TBL(1)|158, TBL(1)|165, TBL(1)|166, 0, TBL(1)|132, TBL(1)|153, 0, 0,
+-/*   03f8 */  0, TBL(1)|142, 0, 0, 0, 0, 0, 0
++/*   03f0 */  TBL(1)|201, TBL(1)|208, TBL(1)|209, 0, TBL(1)|175, TBL(1)|196, 0, 0,
++/*   03f8 */  0, TBL(1)|185, 0, 0, 0, 0, 0, 0
+ };
+ 
+ static const uint16_t UNWIF_compat_00_04 [256] = {
+@@ -985,7 +992,7 @@ static const uint16_t UNWIF_compat_00_0e [256] = {
+ 
+ static const uint16_t UNWIF_compat_00_0f [256] = {
+ /*   0f00 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   0f08 */  0, 0, 0, 0, TBL(1)|261, 0, 0, 0,
++/*   0f08 */  0, 0, 0, 0, TBL(1)|304, 0, 0, 0,
+ /*   0f10 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0f18 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0f20 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1050,7 +1057,7 @@ static const uint16_t UNWIF_compat_00_10 [256] = {
+ /*   10e0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   10e8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   10f0 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   10f8 */  0, 0, 0, 0, TBL(1)|262, 0, 0, 0
++/*   10f8 */  0, 0, 0, 0, TBL(1)|305, 0, 0, 0
+ };
+ 
+ static const uint16_t UNWIF_compat_00_1b [256] = {
+@@ -1095,24 +1102,24 @@ static const uint16_t UNWIF_compat_00_1d [256] = {
+ /*   1d18 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1d20 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1d28 */  0, 0, 0, 0, TBL(1)|25, TBL(1)|67, TBL(1)|26, 0,
+-/*   1d30 */  TBL(1)|28, TBL(1)|29, TBL(1)|74, TBL(1)|31, TBL(1)|32, TBL(1)|33, TBL(1)|34, TBL(1)|35,
+-/*   1d38 */  TBL(1)|36, TBL(1)|37, TBL(1)|38, 0, TBL(1)|39, TBL(1)|77, TBL(1)|40, TBL(1)|42,
+-/*   1d40 */  TBL(1)|44, TBL(1)|45, TBL(1)|47, TBL(1)|1526, TBL(1)|79, TBL(1)|80, TBL(1)|357, TBL(1)|1527,
+-/*   1d48 */  TBL(1)|1529, TBL(1)|1530, TBL(1)|84, TBL(1)|85, TBL(1)|86, TBL(1)|1532, 0, TBL(1)|1536,
+-/*   1d50 */  TBL(1)|1538, TBL(1)|72, TBL(1)|1540, TBL(1)|82, TBL(1)|358, TBL(1)|359, TBL(1)|1541, TBL(1)|1545,
+-/*   1d58 */  TBL(1)|1546, TBL(1)|361, TBL(1)|97, TBL(1)|1547, TBL(1)|362, TBL(1)|150, TBL(1)|151, TBL(1)|152,
+-/*   1d60 */  TBL(1)|170, TBL(1)|171, TBL(1)|1534, TBL(1)|1543, TBL(1)|1546, TBL(1)|1547, TBL(1)|150, TBL(1)|151,
+-/*   1d68 */  TBL(1)|165, TBL(1)|170, TBL(1)|171, 0, 0, 0, 0, 0,
++/*   1d30 */  TBL(1)|28, TBL(1)|29, TBL(1)|76, TBL(1)|31, TBL(1)|32, TBL(1)|33, TBL(1)|34, TBL(1)|35,
++/*   1d38 */  TBL(1)|36, TBL(1)|37, TBL(1)|38, 0, TBL(1)|39, TBL(1)|82, TBL(1)|40, TBL(1)|42,
++/*   1d40 */  TBL(1)|44, TBL(1)|45, TBL(1)|47, TBL(1)|1574, TBL(1)|84, TBL(1)|85, TBL(1)|400, TBL(1)|1575,
++/*   1d48 */  TBL(1)|1577, TBL(1)|1578, TBL(1)|93, TBL(1)|94, TBL(1)|95, TBL(1)|1580, 0, TBL(1)|1584,
++/*   1d50 */  TBL(1)|1586, TBL(1)|74, TBL(1)|1588, TBL(1)|88, TBL(1)|401, TBL(1)|402, TBL(1)|1589, TBL(1)|1593,
++/*   1d58 */  TBL(1)|1594, TBL(1)|404, TBL(1)|113, TBL(1)|1595, TBL(1)|405, TBL(1)|193, TBL(1)|194, TBL(1)|195,
++/*   1d60 */  TBL(1)|213, TBL(1)|214, TBL(1)|1582, TBL(1)|1591, TBL(1)|1594, TBL(1)|1595, TBL(1)|193, TBL(1)|194,
++/*   1d68 */  TBL(1)|208, TBL(1)|213, TBL(1)|214, 0, 0, 0, 0, 0,
+ /*   1d70 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   1d78 */  TBL(1)|176, 0, 0, 0, 0, 0, 0, 0,
++/*   1d78 */  TBL(1)|219, 0, 0, 0, 0, 0, 0, 0,
+ /*   1d80 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1d88 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1d90 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   1d98 */  0, 0, 0, TBL(1)|81, TBL(1)|1528, TBL(1)|83, TBL(1)|68, TBL(1)|86,
+-/*   1da0 */  TBL(1)|1531, TBL(1)|87, TBL(1)|88, TBL(1)|90, TBL(1)|92, TBL(1)|93, TBL(1)|94, TBL(1)|363,
+-/*   1da8 */  TBL(1)|119, TBL(1)|96, TBL(1)|364, TBL(1)|120, TBL(1)|99, TBL(1)|98, TBL(1)|100, TBL(1)|101,
+-/*   1db0 */  TBL(1)|102, TBL(1)|103, TBL(1)|104, TBL(1)|108, TBL(1)|109, TBL(1)|76, TBL(1)|110, TBL(1)|111,
+-/*   1db8 */  TBL(1)|360, TBL(1)|112, TBL(1)|113, TBL(1)|1551, TBL(1)|115, TBL(1)|116, TBL(1)|117, TBL(1)|156,
++/*   1d98 */  0, 0, 0, TBL(1)|86, TBL(1)|1576, TBL(1)|89, TBL(1)|69, TBL(1)|95,
++/*   1da0 */  TBL(1)|1579, TBL(1)|97, TBL(1)|99, TBL(1)|103, TBL(1)|106, TBL(1)|107, TBL(1)|108, TBL(1)|406,
++/*   1da8 */  TBL(1)|149, TBL(1)|111, TBL(1)|407, TBL(1)|150, TBL(1)|115, TBL(1)|114, TBL(1)|116, TBL(1)|117,
++/*   1db0 */  TBL(1)|118, TBL(1)|119, TBL(1)|122, TBL(1)|130, TBL(1)|131, TBL(1)|78, TBL(1)|134, TBL(1)|135,
++/*   1db8 */  TBL(1)|403, TBL(1)|136, TBL(1)|137, TBL(1)|1599, TBL(1)|141, TBL(1)|142, TBL(1)|143, TBL(1)|199,
+ /*   1dc0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1dc8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1dd0 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1124,38 +1131,38 @@ static const uint16_t UNWIF_compat_00_1d [256] = {
+ };
+ 
+ static const uint16_t UNWIF_compat_00_1e [256] = {
+-/*   1e00 */  TBL(2)|112, TBL(2)|1051, TBL(2)|114, TBL(2)|1053, TBL(2)|115, TBL(2)|1054, TBL(2)|116, TBL(2)|1055,
+-/*   1e08 */  TBL(3)|197, TBL(3)|560, TBL(2)|126, TBL(2)|1065, TBL(2)|128, TBL(2)|1067, TBL(2)|131, TBL(2)|1070,
+-/*   1e10 */  TBL(2)|129, TBL(2)|1068, TBL(2)|130, TBL(2)|1069, TBL(3)|205, TBL(3)|571, TBL(3)|206, TBL(3)|572,
+-/*   1e18 */  TBL(2)|148, TBL(2)|1091, TBL(2)|149, TBL(2)|1092, TBL(3)|208, TBL(3)|574, TBL(2)|150, TBL(2)|1093,
+-/*   1e20 */  TBL(2)|154, TBL(2)|1100, TBL(2)|163, TBL(2)|1106, TBL(2)|166, TBL(2)|1109, TBL(2)|164, TBL(2)|1107,
+-/*   1e28 */  TBL(2)|167, TBL(2)|1110, TBL(2)|168, TBL(2)|1111, TBL(2)|190, TBL(2)|1127, TBL(3)|213, TBL(3)|580,
+-/*   1e30 */  TBL(2)|195, TBL(2)|1138, TBL(2)|197, TBL(2)|1140, TBL(2)|199, TBL(2)|1142, TBL(2)|204, TBL(2)|1151,
+-/*   1e38 */  TBL(3)|215, TBL(3)|586, TBL(2)|207, TBL(2)|1154, TBL(2)|206, TBL(2)|1153, TBL(2)|215, TBL(2)|1164,
+-/*   1e40 */  TBL(2)|216, TBL(2)|1165, TBL(2)|217, TBL(2)|1166, TBL(2)|223, TBL(2)|1179, TBL(2)|225, TBL(2)|1181,
+-/*   1e48 */  TBL(2)|228, TBL(2)|1184, TBL(2)|227, TBL(2)|1183, TBL(3)|222, TBL(3)|597, TBL(3)|224, TBL(3)|599,
+-/*   1e50 */  TBL(3)|225, TBL(3)|600, TBL(3)|226, TBL(3)|601, TBL(2)|249, TBL(2)|1209, TBL(2)|250, TBL(2)|1210,
+-/*   1e58 */  TBL(2)|253, TBL(2)|1214, TBL(2)|257, TBL(2)|1218, TBL(3)|239, TBL(3)|611, TBL(2)|259, TBL(2)|1220,
+-/*   1e60 */  TBL(2)|266, TBL(2)|1223, TBL(2)|268, TBL(2)|1225, TBL(3)|240, TBL(3)|613, TBL(3)|241, TBL(3)|614,
+-/*   1e68 */  TBL(3)|242, TBL(3)|615, TBL(2)|273, TBL(2)|1230, TBL(2)|275, TBL(2)|1233, TBL(2)|279, TBL(2)|1237,
+-/*   1e70 */  TBL(2)|278, TBL(2)|1236, TBL(2)|295, TBL(2)|1253, TBL(2)|298, TBL(2)|1256, TBL(2)|297, TBL(2)|1255,
+-/*   1e78 */  TBL(3)|245, TBL(3)|616, TBL(3)|246, TBL(3)|617, TBL(2)|300, TBL(2)|1257, TBL(2)|301, TBL(2)|1258,
+-/*   1e80 */  TBL(2)|304, TBL(2)|1260, TBL(2)|305, TBL(2)|1261, TBL(2)|308, TBL(2)|1264, TBL(2)|307, TBL(2)|1263,
+-/*   1e88 */  TBL(2)|309, TBL(2)|1266, TBL(2)|312, TBL(2)|1267, TBL(2)|313, TBL(2)|1268, TBL(2)|319, TBL(2)|1275,
+-/*   1e90 */  TBL(2)|324, TBL(2)|1281, TBL(2)|327, TBL(2)|1284, TBL(2)|328, TBL(2)|1285, TBL(2)|1112, TBL(2)|1231,
+-/*   1e98 */  TBL(2)|1265, TBL(2)|1278, TBL(2)|1036, TBL(2)|1223, 0, 0, 0, 0,
+-/*   1ea0 */  TBL(2)|111, TBL(2)|1050, TBL(2)|106, TBL(2)|1045, TBL(3)|184, TBL(3)|545, TBL(3)|183, TBL(3)|544,
++/*   1e00 */  TBL(2)|112, TBL(2)|1057, TBL(2)|114, TBL(2)|1059, TBL(2)|115, TBL(2)|1060, TBL(2)|116, TBL(2)|1061,
++/*   1e08 */  TBL(3)|197, TBL(3)|560, TBL(2)|126, TBL(2)|1071, TBL(2)|128, TBL(2)|1073, TBL(2)|131, TBL(2)|1076,
++/*   1e10 */  TBL(2)|129, TBL(2)|1074, TBL(2)|130, TBL(2)|1075, TBL(3)|205, TBL(3)|571, TBL(3)|206, TBL(3)|572,
++/*   1e18 */  TBL(2)|148, TBL(2)|1097, TBL(2)|149, TBL(2)|1098, TBL(3)|208, TBL(3)|574, TBL(2)|150, TBL(2)|1099,
++/*   1e20 */  TBL(2)|154, TBL(2)|1106, TBL(2)|163, TBL(2)|1112, TBL(2)|166, TBL(2)|1115, TBL(2)|164, TBL(2)|1113,
++/*   1e28 */  TBL(2)|167, TBL(2)|1116, TBL(2)|168, TBL(2)|1117, TBL(2)|190, TBL(2)|1133, TBL(3)|213, TBL(3)|580,
++/*   1e30 */  TBL(2)|195, TBL(2)|1144, TBL(2)|197, TBL(2)|1146, TBL(2)|199, TBL(2)|1148, TBL(2)|204, TBL(2)|1157,
++/*   1e38 */  TBL(3)|215, TBL(3)|586, TBL(2)|207, TBL(2)|1160, TBL(2)|206, TBL(2)|1159, TBL(2)|215, TBL(2)|1170,
++/*   1e40 */  TBL(2)|216, TBL(2)|1171, TBL(2)|217, TBL(2)|1172, TBL(2)|223, TBL(2)|1185, TBL(2)|225, TBL(2)|1187,
++/*   1e48 */  TBL(2)|228, TBL(2)|1190, TBL(2)|227, TBL(2)|1189, TBL(3)|222, TBL(3)|597, TBL(3)|224, TBL(3)|599,
++/*   1e50 */  TBL(3)|225, TBL(3)|600, TBL(3)|226, TBL(3)|601, TBL(2)|249, TBL(2)|1215, TBL(2)|250, TBL(2)|1216,
++/*   1e58 */  TBL(2)|253, TBL(2)|1220, TBL(2)|257, TBL(2)|1224, TBL(3)|239, TBL(3)|611, TBL(2)|259, TBL(2)|1226,
++/*   1e60 */  TBL(2)|266, TBL(2)|1229, TBL(2)|268, TBL(2)|1231, TBL(3)|240, TBL(3)|613, TBL(3)|241, TBL(3)|614,
++/*   1e68 */  TBL(3)|242, TBL(3)|615, TBL(2)|273, TBL(2)|1236, TBL(2)|275, TBL(2)|1239, TBL(2)|279, TBL(2)|1243,
++/*   1e70 */  TBL(2)|278, TBL(2)|1242, TBL(2)|295, TBL(2)|1259, TBL(2)|298, TBL(2)|1262, TBL(2)|297, TBL(2)|1261,
++/*   1e78 */  TBL(3)|245, TBL(3)|616, TBL(3)|246, TBL(3)|617, TBL(2)|300, TBL(2)|1263, TBL(2)|301, TBL(2)|1264,
++/*   1e80 */  TBL(2)|304, TBL(2)|1266, TBL(2)|305, TBL(2)|1267, TBL(2)|308, TBL(2)|1270, TBL(2)|307, TBL(2)|1269,
++/*   1e88 */  TBL(2)|309, TBL(2)|1272, TBL(2)|312, TBL(2)|1273, TBL(2)|313, TBL(2)|1274, TBL(2)|319, TBL(2)|1281,
++/*   1e90 */  TBL(2)|324, TBL(2)|1287, TBL(2)|327, TBL(2)|1290, TBL(2)|328, TBL(2)|1291, TBL(2)|1118, TBL(2)|1237,
++/*   1e98 */  TBL(2)|1271, TBL(2)|1284, TBL(2)|1042, TBL(2)|1229, 0, 0, 0, 0,
++/*   1ea0 */  TBL(2)|111, TBL(2)|1056, TBL(2)|106, TBL(2)|1051, TBL(3)|184, TBL(3)|545, TBL(3)|183, TBL(3)|544,
+ /*   1ea8 */  TBL(3)|186, TBL(3)|547, TBL(3)|185, TBL(3)|546, TBL(3)|194, TBL(3)|555, TBL(3)|188, TBL(3)|549,
+ /*   1eb0 */  TBL(3)|187, TBL(3)|548, TBL(3)|190, TBL(3)|551, TBL(3)|189, TBL(3)|550, TBL(3)|195, TBL(3)|556,
+-/*   1eb8 */  TBL(2)|145, TBL(2)|1088, TBL(2)|141, TBL(2)|1084, TBL(2)|136, TBL(2)|1079, TBL(3)|202, TBL(3)|568,
++/*   1eb8 */  TBL(2)|145, TBL(2)|1094, TBL(2)|141, TBL(2)|1090, TBL(2)|136, TBL(2)|1085, TBL(3)|202, TBL(3)|568,
+ /*   1ec0 */  TBL(3)|201, TBL(3)|567, TBL(3)|204, TBL(3)|570, TBL(3)|203, TBL(3)|569, TBL(3)|207, TBL(3)|573,
+-/*   1ec8 */  TBL(2)|184, TBL(2)|1121, TBL(2)|188, TBL(2)|1125, TBL(2)|245, TBL(2)|1203, TBL(2)|239, TBL(2)|1197,
++/*   1ec8 */  TBL(2)|184, TBL(2)|1127, TBL(2)|188, TBL(2)|1131, TBL(2)|245, TBL(2)|1209, TBL(2)|239, TBL(2)|1203,
+ /*   1ed0 */  TBL(3)|219, TBL(3)|594, TBL(3)|218, TBL(3)|593, TBL(3)|221, TBL(3)|596, TBL(3)|220, TBL(3)|595,
+ /*   1ed8 */  TBL(3)|234, TBL(3)|609, TBL(3)|230, TBL(3)|605, TBL(3)|229, TBL(3)|604, TBL(3)|232, TBL(3)|607,
+-/*   1ee0 */  TBL(3)|231, TBL(3)|606, TBL(3)|233, TBL(3)|608, TBL(2)|294, TBL(2)|1252, TBL(2)|287, TBL(2)|1245,
++/*   1ee0 */  TBL(3)|231, TBL(3)|606, TBL(3)|233, TBL(3)|608, TBL(2)|294, TBL(2)|1258, TBL(2)|287, TBL(2)|1251,
+ /*   1ee8 */  TBL(3)|252, TBL(3)|623, TBL(3)|251, TBL(3)|622, TBL(3)|254, TBL(3)|625, TBL(3)|253, TBL(3)|624,
+-/*   1ef0 */  TBL(3)|255, TBL(3)|626, TBL(2)|314, TBL(2)|1270, TBL(2)|322, TBL(2)|1279, TBL(2)|321, TBL(2)|1277,
+-/*   1ef8 */  TBL(2)|317, TBL(2)|1273, 0, 0, 0, 0, 0, 0
++/*   1ef0 */  TBL(3)|255, TBL(3)|626, TBL(2)|314, TBL(2)|1276, TBL(2)|322, TBL(2)|1285, TBL(2)|321, TBL(2)|1283,
++/*   1ef8 */  TBL(2)|317, TBL(2)|1279, 0, 0, 0, 0, 0, 0
+ };
+ 
+ static const uint16_t UNWIF_compat_00_1f [256] = {
+@@ -1182,13 +1189,13 @@ static const uint16_t UNWIF_compat_00_1f [256] = {
+ /*   1fa0 */  TBL(3)|368, TBL(3)|372, TBL(4)|59, TBL(4)|62, TBL(4)|60, TBL(4)|63, TBL(4)|61, TBL(4)|64,
+ /*   1fa8 */  TBL(3)|310, TBL(3)|314, TBL(4)|41, TBL(4)|44, TBL(4)|42, TBL(4)|45, TBL(4)|43, TBL(4)|46,
+ /*   1fb0 */  TBL(2)|411, TBL(2)|410, TBL(3)|315, TBL(2)|415, TBL(3)|316, 0, TBL(2)|414, TBL(3)|325,
+-/*   1fb8 */  TBL(2)|372, TBL(2)|371, TBL(2)|369, TBL(2)|370, TBL(2)|375, TBL(2)|338, TBL(1)|157, TBL(2)|338,
++/*   1fb8 */  TBL(2)|372, TBL(2)|371, TBL(2)|369, TBL(2)|370, TBL(2)|375, TBL(2)|338, TBL(1)|200, TBL(2)|338,
+ /*   1fc0 */  TBL(2)|343, TBL(3)|261, TBL(3)|330, TBL(2)|425, TBL(3)|331, 0, TBL(2)|424, TBL(3)|340,
+ /*   1fc8 */  TBL(2)|376, TBL(2)|377, TBL(2)|380, TBL(2)|381, TBL(2)|384, TBL(3)|262, TBL(3)|263, TBL(3)|264,
+ /*   1fd0 */  TBL(2)|429, TBL(2)|428, TBL(3)|341, TBL(3)|342, 0, 0, TBL(2)|433, TBL(3)|343,
+ /*   1fd8 */  TBL(2)|388, TBL(2)|387, TBL(2)|385, TBL(2)|386, 0, TBL(3)|265, TBL(3)|266, TBL(3)|267,
+ /*   1fe0 */  TBL(2)|451, TBL(2)|450, TBL(3)|354, TBL(3)|355, TBL(2)|446, TBL(2)|447, TBL(2)|455, TBL(3)|356,
+-/*   1fe8 */  TBL(2)|400, TBL(2)|399, TBL(2)|397, TBL(2)|398, TBL(2)|396, TBL(3)|259, TBL(3)|260, TBL(1)|1525,
++/*   1fe8 */  TBL(2)|400, TBL(2)|399, TBL(2)|397, TBL(2)|398, TBL(2)|396, TBL(3)|259, TBL(3)|260, TBL(1)|1573,
+ /*   1ff0 */  0, 0, TBL(3)|363, TBL(2)|461, TBL(3)|364, 0, TBL(2)|460, TBL(3)|373,
+ /*   1ff8 */  TBL(2)|392, TBL(2)|393, TBL(2)|403, TBL(2)|404, TBL(2)|407, TBL(2)|329, TBL(2)|339, 0
+ };
+@@ -1196,7 +1203,7 @@ static const uint16_t UNWIF_compat_00_1f [256] = {
+ static const uint16_t UNWIF_compat_00_20 [256] = {
+ /*   2000 */  TBL(1)|52, TBL(1)|52, TBL(1)|52, TBL(1)|52, TBL(1)|52, TBL(1)|52, TBL(1)|52, TBL(1)|52,
+ /*   2008 */  TBL(1)|52, TBL(1)|52, TBL(1)|52, 0, 0, 0, 0, 0,
+-/*   2010 */  0, TBL(1)|365, 0, 0, 0, 0, 0, TBL(2)|342,
++/*   2010 */  0, TBL(1)|409, 0, 0, 0, 0, 0, TBL(2)|342,
+ /*   2018 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2020 */  0, 0, 0, 0, TBL(1)|6, TBL(2)|0, TBL(3)|111, 0,
+ /*   2028 */  0, 0, 0, 0, 0, 0, 0, TBL(1)|52,
+@@ -1208,12 +1215,12 @@ static const uint16_t UNWIF_compat_00_20 [256] = {
+ /*   2058 */  0, 0, 0, 0, 0, 0, 0, TBL(1)|52,
+ /*   2060 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2068 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   2070 */  TBL(1)|8, TBL(1)|1534, 0, 0, TBL(1)|12, TBL(1)|13, TBL(1)|14, TBL(1)|15,
+-/*   2078 */  TBL(1)|16, TBL(1)|17, TBL(1)|3, TBL(1)|376, TBL(1)|21, TBL(1)|0, TBL(1)|1, TBL(1)|1539,
++/*   2070 */  TBL(1)|8, TBL(1)|1582, 0, 0, TBL(1)|12, TBL(1)|13, TBL(1)|14, TBL(1)|15,
++/*   2078 */  TBL(1)|16, TBL(1)|17, TBL(1)|3, TBL(1)|420, TBL(1)|21, TBL(1)|0, TBL(1)|1, TBL(1)|1587,
+ /*   2080 */  TBL(1)|8, TBL(1)|9, TBL(1)|10, TBL(1)|11, TBL(1)|12, TBL(1)|13, TBL(1)|14, TBL(1)|15,
+-/*   2088 */  TBL(1)|16, TBL(1)|17, TBL(1)|3, TBL(1)|376, TBL(1)|21, TBL(1)|0, TBL(1)|1, 0,
+-/*   2090 */  TBL(1)|1526, TBL(1)|1530, TBL(1)|1540, TBL(1)|1549, TBL(1)|84, TBL(1)|1533, TBL(1)|1536, TBL(1)|1537,
+-/*   2098 */  TBL(1)|1538, TBL(1)|1539, TBL(1)|1541, TBL(1)|1544, TBL(1)|1545, 0, 0, 0,
++/*   2088 */  TBL(1)|16, TBL(1)|17, TBL(1)|3, TBL(1)|420, TBL(1)|21, TBL(1)|0, TBL(1)|1, 0,
++/*   2090 */  TBL(1)|1574, TBL(1)|1578, TBL(1)|1588, TBL(1)|1597, TBL(1)|93, TBL(1)|1581, TBL(1)|1584, TBL(1)|1585,
++/*   2098 */  TBL(1)|1586, TBL(1)|1587, TBL(1)|1589, TBL(1)|1592, TBL(1)|1593, 0, 0, 0,
+ /*   20a0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   20a8 */  TBL(2)|260, 0, 0, 0, 0, 0, 0, 0,
+ /*   20b0 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1229,22 +1236,22 @@ static const uint16_t UNWIF_compat_00_20 [256] = {
+ };
+ 
+ static const uint16_t UNWIF_compat_00_21 [256] = {
+-/*   2100 */  TBL(3)|542, TBL(3)|543, TBL(1)|27, TBL(2)|357, 0, TBL(3)|558, TBL(3)|559, TBL(1)|75,
+-/*   2108 */  0, TBL(2)|358, TBL(1)|1532, TBL(1)|32, TBL(1)|32, TBL(1)|32, TBL(1)|1533, TBL(1)|70,
+-/*   2110 */  TBL(1)|33, TBL(1)|33, TBL(1)|36, TBL(1)|1537, 0, TBL(1)|38, TBL(2)|230, 0,
++/*   2100 */  TBL(3)|542, TBL(3)|543, TBL(1)|27, TBL(2)|357, 0, TBL(3)|558, TBL(3)|559, TBL(1)|77,
++/*   2108 */  0, TBL(2)|358, TBL(1)|1580, TBL(1)|32, TBL(1)|32, TBL(1)|32, TBL(1)|1581, TBL(1)|72,
++/*   2110 */  TBL(1)|33, TBL(1)|33, TBL(1)|36, TBL(1)|1585, 0, TBL(1)|38, TBL(2)|230, 0,
+ /*   2118 */  0, TBL(1)|40, TBL(1)|41, TBL(1)|42, TBL(1)|42, TBL(1)|42, 0, 0,
+-/*   2120 */  TBL(2)|262, TBL(3)|243, TBL(2)|272, 0, TBL(1)|50, 0, TBL(1)|148, 0,
+-/*   2128 */  TBL(1)|50, 0, TBL(1)|35, TBL(2)|107, TBL(1)|26, TBL(1)|27, 0, TBL(1)|1530,
+-/*   2130 */  TBL(1)|29, TBL(1)|30, 0, TBL(1)|37, TBL(1)|1540, TBL(1)|179, TBL(1)|180, TBL(1)|181,
+-/*   2138 */  TBL(1)|182, TBL(1)|1534, 0, TBL(3)|209, TBL(1)|164, TBL(1)|151, TBL(1)|127, TBL(1)|140,
+-/*   2140 */  TBL(1)|375, 0, 0, 0, 0, TBL(1)|28, TBL(1)|1529, TBL(1)|1530,
+-/*   2148 */  TBL(1)|1534, TBL(1)|1535, 0, 0, 0, 0, 0, 0,
++/*   2120 */  TBL(2)|262, TBL(3)|243, TBL(2)|272, 0, TBL(1)|50, 0, TBL(1)|191, 0,
++/*   2128 */  TBL(1)|50, 0, TBL(1)|35, TBL(2)|107, TBL(1)|26, TBL(1)|27, 0, TBL(1)|1578,
++/*   2130 */  TBL(1)|29, TBL(1)|30, 0, TBL(1)|37, TBL(1)|1588, TBL(1)|222, TBL(1)|223, TBL(1)|224,
++/*   2138 */  TBL(1)|225, TBL(1)|1582, 0, TBL(3)|209, TBL(1)|207, TBL(1)|194, TBL(1)|170, TBL(1)|183,
++/*   2140 */  TBL(1)|419, 0, 0, 0, 0, TBL(1)|28, TBL(1)|1577, TBL(1)|1578,
++/*   2148 */  TBL(1)|1582, TBL(1)|1583, 0, 0, 0, 0, 0, 0,
+ /*   2150 */  TBL(3)|151, TBL(3)|153, TBL(4)|26, TBL(3)|147, TBL(3)|170, TBL(3)|149, TBL(3)|171, TBL(3)|175,
+ /*   2158 */  TBL(3)|177, TBL(3)|150, TBL(3)|178, TBL(3)|152, TBL(3)|176, TBL(3)|179, TBL(3)|180, TBL(2)|16,
+ /*   2160 */  TBL(1)|33, TBL(2)|171, TBL(3)|212, TBL(2)|174, TBL(1)|46, TBL(2)|299, TBL(3)|256, TBL(4)|28,
+ /*   2168 */  TBL(2)|175, TBL(1)|48, TBL(2)|311, TBL(3)|258, TBL(1)|36, TBL(1)|27, TBL(1)|28, TBL(1)|37,
+-/*   2170 */  TBL(1)|1534, TBL(2)|1128, TBL(3)|581, TBL(2)|1131, TBL(1)|1547, TBL(2)|1259, TBL(3)|627, TBL(4)|125,
+-/*   2178 */  TBL(2)|1132, TBL(1)|1549, TBL(2)|1269, TBL(3)|628, TBL(1)|1537, TBL(1)|1528, TBL(1)|1529, TBL(1)|1538,
++/*   2170 */  TBL(1)|1582, TBL(2)|1134, TBL(3)|581, TBL(2)|1137, TBL(1)|1595, TBL(2)|1265, TBL(3)|627, TBL(4)|125,
++/*   2178 */  TBL(2)|1138, TBL(1)|1597, TBL(2)|1275, TBL(3)|628, TBL(1)|1585, TBL(1)|1576, TBL(1)|1577, TBL(1)|1586,
+ /*   2180 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2188 */  0, TBL(3)|112, 0, 0, 0, 0, 0, 0,
+ /*   2190 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1304,7 +1311,7 @@ static const uint16_t UNWIF_compat_00_23 [256] = {
+ /*   2310 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2318 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2320 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   2328 */  0, TBL(1)|385, TBL(1)|386, 0, 0, 0, 0, 0,
++/*   2328 */  0, TBL(1)|430, TBL(1)|431, 0, 0, 0, 0, 0,
+ /*   2330 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2338 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2340 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1360,10 +1367,10 @@ static const uint16_t UNWIF_compat_00_24 [256] = {
+ /*   24b8 */  TBL(1)|27, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32, TBL(1)|33, TBL(1)|34,
+ /*   24c0 */  TBL(1)|35, TBL(1)|36, TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40, TBL(1)|41, TBL(1)|42,
+ /*   24c8 */  TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50,
+-/*   24d0 */  TBL(1)|1526, TBL(1)|1527, TBL(1)|1528, TBL(1)|1529, TBL(1)|1530, TBL(1)|1531, TBL(1)|1532, TBL(1)|1533,
+-/*   24d8 */  TBL(1)|1534, TBL(1)|1535, TBL(1)|1536, TBL(1)|1537, TBL(1)|1538, TBL(1)|1539, TBL(1)|1540, TBL(1)|1541,
+-/*   24e0 */  TBL(1)|1542, TBL(1)|1543, TBL(1)|1544, TBL(1)|1545, TBL(1)|1546, TBL(1)|1547, TBL(1)|1548, TBL(1)|1549,
+-/*   24e8 */  TBL(1)|1550, TBL(1)|1551, TBL(1)|8, 0, 0, 0, 0, 0,
++/*   24d0 */  TBL(1)|1574, TBL(1)|1575, TBL(1)|1576, TBL(1)|1577, TBL(1)|1578, TBL(1)|1579, TBL(1)|1580, TBL(1)|1581,
++/*   24d8 */  TBL(1)|1582, TBL(1)|1583, TBL(1)|1584, TBL(1)|1585, TBL(1)|1586, TBL(1)|1587, TBL(1)|1588, TBL(1)|1589,
++/*   24e0 */  TBL(1)|1590, TBL(1)|1591, TBL(1)|1592, TBL(1)|1593, TBL(1)|1594, TBL(1)|1595, TBL(1)|1596, TBL(1)|1597,
++/*   24e8 */  TBL(1)|1598, TBL(1)|1599, TBL(1)|8, 0, 0, 0, 0, 0,
+ /*   24f0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   24f8 */  0, 0, 0, 0, 0, 0, 0, 0
+ };
+@@ -1419,7 +1426,7 @@ static const uint16_t UNWIF_compat_00_2c [256] = {
+ /*   2c60 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2c68 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2c70 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   2c78 */  0, 0, 0, 0, TBL(1)|1535, TBL(1)|46, 0, 0,
++/*   2c78 */  0, 0, 0, 0, TBL(1)|1583, TBL(1)|46, 0, 0,
+ /*   2c80 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2c88 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2c90 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1452,7 +1459,7 @@ static const uint16_t UNWIF_compat_00_2d [256] = {
+ /*   2d50 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2d58 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2d60 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   2d68 */  0, 0, 0, 0, 0, 0, 0, TBL(1)|382,
++/*   2d68 */  0, 0, 0, 0, 0, 0, 0, TBL(1)|427,
+ /*   2d70 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2d78 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2d80 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1493,7 +1500,7 @@ static const uint16_t UNWIF_compat_00_2e [256] = {
+ /*   2e80 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2e88 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2e90 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   2e98 */  0, 0, 0, 0, 0, 0, 0, TBL(1)|977,
++/*   2e98 */  0, 0, 0, 0, 0, 0, 0, TBL(1)|1022,
+ /*   2ea0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2ea8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2eb0 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1504,38 +1511,38 @@ static const uint16_t UNWIF_compat_00_2e [256] = {
+ /*   2ed8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2ee0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2ee8 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   2ef0 */  0, 0, 0, TBL(1)|1516, 0, 0, 0, 0,
++/*   2ef0 */  0, 0, 0, TBL(1)|1561, 0, 0, 0, 0,
+ /*   2ef8 */  0, 0, 0, 0, 0, 0, 0, 0
+ };
+ 
+ static const uint16_t UNWIF_compat_00_2f [256] = {
+-/*   2f00 */  TBL(1)|528, TBL(1)|537, TBL(1)|540, TBL(1)|544, TBL(1)|546, TBL(1)|549, TBL(1)|551, TBL(1)|553,
+-/*   2f08 */  TBL(1)|556, TBL(1)|577, TBL(1)|583, TBL(1)|587, TBL(1)|591, TBL(1)|595, TBL(1)|599, TBL(1)|607,
+-/*   2f10 */  TBL(1)|608, TBL(1)|609, TBL(1)|622, TBL(1)|632, TBL(1)|636, TBL(1)|638, TBL(1)|639, TBL(1)|642,
+-/*   2f18 */  TBL(1)|649, TBL(1)|650, TBL(1)|656, TBL(1)|657, TBL(1)|659, TBL(1)|663, TBL(1)|702, TBL(1)|707,
+-/*   2f20 */  TBL(1)|723, TBL(1)|728, TBL(1)|730, TBL(1)|731, TBL(1)|735, TBL(1)|742, TBL(1)|753, TBL(1)|756,
+-/*   2f28 */  TBL(1)|764, TBL(1)|767, TBL(1)|768, TBL(1)|769, TBL(1)|775, TBL(1)|776, TBL(1)|787, TBL(1)|790,
+-/*   2f30 */  TBL(1)|792, TBL(1)|794, TBL(1)|798, TBL(1)|800, TBL(1)|802, TBL(1)|813, TBL(1)|814, TBL(1)|816,
+-/*   2f38 */  TBL(1)|817, TBL(1)|819, TBL(1)|821, TBL(1)|825, TBL(1)|832, TBL(1)|862, TBL(1)|867, TBL(1)|868,
+-/*   2f40 */  TBL(1)|900, TBL(1)|901, TBL(1)|906, TBL(1)|907, TBL(1)|909, TBL(1)|911, TBL(1)|913, TBL(1)|916,
+-/*   2f48 */  TBL(1)|926, TBL(1)|930, TBL(1)|935, TBL(1)|963, TBL(1)|966, TBL(1)|970, TBL(1)|973, TBL(1)|976,
+-/*   2f50 */  TBL(1)|978, TBL(1)|979, TBL(1)|980, TBL(1)|981, TBL(1)|982, TBL(1)|1028, TBL(1)|1046, TBL(1)|1049,
+-/*   2f58 */  TBL(1)|1050, TBL(1)|1051, TBL(1)|1052, TBL(1)|1054, TBL(1)|1055, TBL(1)|1060, TBL(1)|1067, TBL(1)|1069,
+-/*   2f60 */  TBL(1)|1085, TBL(1)|1086, TBL(1)|1088, TBL(1)|1089, TBL(1)|1091, TBL(1)|1092, TBL(1)|1101, TBL(1)|1102,
+-/*   2f68 */  TBL(1)|1109, TBL(1)|1110, TBL(1)|1111, TBL(1)|1112, TBL(1)|1117, TBL(1)|1126, TBL(1)|1127, TBL(1)|1128,
+-/*   2f70 */  TBL(1)|1137, TBL(1)|1153, TBL(1)|1154, TBL(1)|1162, TBL(1)|1166, TBL(1)|1168, TBL(1)|1176, TBL(1)|1185,
+-/*   2f78 */  TBL(1)|1202, TBL(1)|1204, TBL(1)|1209, TBL(1)|1212, TBL(1)|1214, TBL(1)|1216, TBL(1)|1217, TBL(1)|1218,
+-/*   2f80 */  TBL(1)|1224, TBL(1)|1225, TBL(1)|1232, TBL(1)|1234, TBL(1)|1236, TBL(1)|1237, TBL(1)|1240, TBL(1)|1242,
+-/*   2f88 */  TBL(1)|1243, TBL(1)|1244, TBL(1)|1246, TBL(1)|1247, TBL(1)|1287, TBL(1)|1292, TBL(1)|1305, TBL(1)|1306,
+-/*   2f90 */  TBL(1)|1308, TBL(1)|1319, TBL(1)|1321, TBL(1)|1323, TBL(1)|1325, TBL(1)|1340, TBL(1)|1341, TBL(1)|1343,
+-/*   2f98 */  TBL(1)|1344, TBL(1)|1345, TBL(1)|1356, TBL(1)|1357, TBL(1)|1359, TBL(1)|1364, TBL(1)|1365, TBL(1)|1372,
+-/*   2fa0 */  TBL(1)|1374, TBL(1)|1375, TBL(1)|1384, TBL(1)|1392, TBL(1)|1397, TBL(1)|1398, TBL(1)|1400, TBL(1)|1411,
+-/*   2fa8 */  TBL(1)|1412, TBL(1)|1416, TBL(1)|1425, TBL(1)|1428, TBL(1)|1432, TBL(1)|1438, TBL(1)|1440, TBL(1)|1441,
+-/*   2fb0 */  TBL(1)|1442, TBL(1)|1443, TBL(1)|1446, TBL(1)|1447, TBL(1)|1449, TBL(1)|1456, TBL(1)|1457, TBL(1)|1458,
+-/*   2fb8 */  TBL(1)|1464, TBL(1)|1465, TBL(1)|1467, TBL(1)|1472, TBL(1)|1473, TBL(1)|1474, TBL(1)|1476, TBL(1)|1477,
+-/*   2fc0 */  TBL(1)|1478, TBL(1)|1479, TBL(1)|1480, TBL(1)|1484, TBL(1)|1490, TBL(1)|1491, TBL(1)|1494, TBL(1)|1495,
+-/*   2fc8 */  TBL(1)|1496, TBL(1)|1497, TBL(1)|1499, TBL(1)|1500, TBL(1)|1501, TBL(1)|1504, TBL(1)|1506, TBL(1)|1508,
+-/*   2fd0 */  TBL(1)|1509, TBL(1)|1511, TBL(1)|1512, TBL(1)|1513, TBL(1)|1515, TBL(1)|1517, 0, 0,
++/*   2f00 */  TBL(1)|573, TBL(1)|582, TBL(1)|585, TBL(1)|589, TBL(1)|591, TBL(1)|594, TBL(1)|596, TBL(1)|598,
++/*   2f08 */  TBL(1)|601, TBL(1)|622, TBL(1)|628, TBL(1)|632, TBL(1)|636, TBL(1)|640, TBL(1)|644, TBL(1)|652,
++/*   2f10 */  TBL(1)|653, TBL(1)|654, TBL(1)|667, TBL(1)|677, TBL(1)|681, TBL(1)|683, TBL(1)|684, TBL(1)|687,
++/*   2f18 */  TBL(1)|694, TBL(1)|695, TBL(1)|701, TBL(1)|702, TBL(1)|704, TBL(1)|708, TBL(1)|747, TBL(1)|752,
++/*   2f20 */  TBL(1)|768, TBL(1)|773, TBL(1)|775, TBL(1)|776, TBL(1)|780, TBL(1)|787, TBL(1)|798, TBL(1)|801,
++/*   2f28 */  TBL(1)|809, TBL(1)|812, TBL(1)|813, TBL(1)|814, TBL(1)|820, TBL(1)|821, TBL(1)|832, TBL(1)|835,
++/*   2f30 */  TBL(1)|837, TBL(1)|839, TBL(1)|843, TBL(1)|845, TBL(1)|847, TBL(1)|858, TBL(1)|859, TBL(1)|861,
++/*   2f38 */  TBL(1)|862, TBL(1)|864, TBL(1)|866, TBL(1)|870, TBL(1)|877, TBL(1)|907, TBL(1)|912, TBL(1)|913,
++/*   2f40 */  TBL(1)|945, TBL(1)|946, TBL(1)|951, TBL(1)|952, TBL(1)|954, TBL(1)|956, TBL(1)|958, TBL(1)|961,
++/*   2f48 */  TBL(1)|971, TBL(1)|975, TBL(1)|980, TBL(1)|1008, TBL(1)|1011, TBL(1)|1015, TBL(1)|1018, TBL(1)|1021,
++/*   2f50 */  TBL(1)|1023, TBL(1)|1024, TBL(1)|1025, TBL(1)|1026, TBL(1)|1027, TBL(1)|1073, TBL(1)|1091, TBL(1)|1094,
++/*   2f58 */  TBL(1)|1095, TBL(1)|1096, TBL(1)|1097, TBL(1)|1099, TBL(1)|1100, TBL(1)|1105, TBL(1)|1112, TBL(1)|1114,
++/*   2f60 */  TBL(1)|1130, TBL(1)|1131, TBL(1)|1133, TBL(1)|1134, TBL(1)|1136, TBL(1)|1137, TBL(1)|1146, TBL(1)|1147,
++/*   2f68 */  TBL(1)|1154, TBL(1)|1155, TBL(1)|1156, TBL(1)|1157, TBL(1)|1162, TBL(1)|1171, TBL(1)|1172, TBL(1)|1173,
++/*   2f70 */  TBL(1)|1182, TBL(1)|1198, TBL(1)|1199, TBL(1)|1207, TBL(1)|1211, TBL(1)|1213, TBL(1)|1221, TBL(1)|1230,
++/*   2f78 */  TBL(1)|1247, TBL(1)|1249, TBL(1)|1254, TBL(1)|1257, TBL(1)|1259, TBL(1)|1261, TBL(1)|1262, TBL(1)|1263,
++/*   2f80 */  TBL(1)|1269, TBL(1)|1270, TBL(1)|1277, TBL(1)|1279, TBL(1)|1281, TBL(1)|1282, TBL(1)|1285, TBL(1)|1287,
++/*   2f88 */  TBL(1)|1288, TBL(1)|1289, TBL(1)|1291, TBL(1)|1292, TBL(1)|1332, TBL(1)|1337, TBL(1)|1350, TBL(1)|1351,
++/*   2f90 */  TBL(1)|1353, TBL(1)|1364, TBL(1)|1366, TBL(1)|1368, TBL(1)|1370, TBL(1)|1385, TBL(1)|1386, TBL(1)|1388,
++/*   2f98 */  TBL(1)|1389, TBL(1)|1390, TBL(1)|1401, TBL(1)|1402, TBL(1)|1404, TBL(1)|1409, TBL(1)|1410, TBL(1)|1417,
++/*   2fa0 */  TBL(1)|1419, TBL(1)|1420, TBL(1)|1429, TBL(1)|1437, TBL(1)|1442, TBL(1)|1443, TBL(1)|1445, TBL(1)|1456,
++/*   2fa8 */  TBL(1)|1457, TBL(1)|1461, TBL(1)|1470, TBL(1)|1473, TBL(1)|1477, TBL(1)|1483, TBL(1)|1485, TBL(1)|1486,
++/*   2fb0 */  TBL(1)|1487, TBL(1)|1488, TBL(1)|1491, TBL(1)|1492, TBL(1)|1494, TBL(1)|1501, TBL(1)|1502, TBL(1)|1503,
++/*   2fb8 */  TBL(1)|1509, TBL(1)|1510, TBL(1)|1512, TBL(1)|1517, TBL(1)|1518, TBL(1)|1519, TBL(1)|1521, TBL(1)|1522,
++/*   2fc0 */  TBL(1)|1523, TBL(1)|1524, TBL(1)|1525, TBL(1)|1529, TBL(1)|1535, TBL(1)|1536, TBL(1)|1539, TBL(1)|1540,
++/*   2fc8 */  TBL(1)|1541, TBL(1)|1542, TBL(1)|1544, TBL(1)|1545, TBL(1)|1546, TBL(1)|1549, TBL(1)|1551, TBL(1)|1553,
++/*   2fd0 */  TBL(1)|1554, TBL(1)|1556, TBL(1)|1557, TBL(1)|1558, TBL(1)|1560, TBL(1)|1562, 0, 0,
+ /*   2fd8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2fe0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2fe8 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1550,8 +1557,8 @@ static const uint16_t UNWIF_compat_00_30 [256] = {
+ /*   3018 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   3020 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   3028 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   3030 */  0, 0, 0, 0, 0, 0, TBL(1)|395, 0,
+-/*   3038 */  TBL(1)|642, TBL(1)|643, TBL(1)|644, 0, 0, 0, 0, 0,
++/*   3030 */  0, 0, 0, 0, 0, 0, TBL(1)|440, 0,
++/*   3038 */  TBL(1)|687, TBL(1)|688, TBL(1)|689, 0, 0, 0, 0, 0,
+ /*   3040 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   3048 */  0, 0, 0, 0, TBL(2)|853, 0, TBL(2)|854, 0,
+ /*   3050 */  TBL(2)|855, 0, TBL(2)|856, 0, TBL(2)|857, 0, TBL(2)|858, 0,
+@@ -1585,20 +1592,20 @@ static const uint16_t UNWIF_compat_00_31 [256] = {
+ /*   3118 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   3120 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   3128 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   3130 */  0, TBL(1)|263, TBL(1)|264, TBL(1)|337, TBL(1)|265, TBL(1)|338, TBL(1)|339, TBL(1)|266,
+-/*   3138 */  TBL(1)|267, TBL(1)|268, TBL(1)|340, TBL(1)|341, TBL(1)|342, TBL(1)|343, TBL(1)|344, TBL(1)|345,
+-/*   3140 */  TBL(1)|284, TBL(1)|269, TBL(1)|270, TBL(1)|271, TBL(1)|289, TBL(1)|272, TBL(1)|273, TBL(1)|274,
+-/*   3148 */  TBL(1)|275, TBL(1)|276, TBL(1)|277, TBL(1)|278, TBL(1)|279, TBL(1)|280, TBL(1)|281, TBL(1)|308,
+-/*   3150 */  TBL(1)|309, TBL(1)|310, TBL(1)|311, TBL(1)|312, TBL(1)|313, TBL(1)|314, TBL(1)|315, TBL(1)|316,
+-/*   3158 */  TBL(1)|317, TBL(1)|318, TBL(1)|319, TBL(1)|320, TBL(1)|321, TBL(1)|322, TBL(1)|323, TBL(1)|324,
+-/*   3160 */  TBL(1)|325, TBL(1)|326, TBL(1)|327, TBL(1)|328, TBL(1)|307, TBL(1)|282, TBL(1)|283, TBL(1)|346,
+-/*   3168 */  TBL(1)|347, TBL(1)|348, TBL(1)|349, TBL(1)|350, TBL(1)|351, TBL(1)|352, TBL(1)|285, TBL(1)|353,
+-/*   3170 */  TBL(1)|354, TBL(1)|286, TBL(1)|287, TBL(1)|288, TBL(1)|290, TBL(1)|291, TBL(1)|292, TBL(1)|293,
+-/*   3178 */  TBL(1)|294, TBL(1)|295, TBL(1)|296, TBL(1)|297, TBL(1)|298, TBL(1)|299, TBL(1)|300, TBL(1)|301,
+-/*   3180 */  TBL(1)|302, TBL(1)|303, TBL(1)|355, TBL(1)|356, TBL(1)|304, TBL(1)|305, TBL(1)|306, TBL(1)|329,
+-/*   3188 */  TBL(1)|330, TBL(1)|331, TBL(1)|332, TBL(1)|333, TBL(1)|334, TBL(1)|335, TBL(1)|336, 0,
+-/*   3190 */  0, 0, TBL(1)|528, TBL(1)|551, TBL(1)|531, TBL(1)|703, TBL(1)|532, TBL(1)|538,
+-/*   3198 */  TBL(1)|533, TBL(1)|1093, TBL(1)|546, TBL(1)|535, TBL(1)|529, TBL(1)|736, TBL(1)|708, TBL(1)|556,
++/*   3130 */  0, TBL(1)|306, TBL(1)|307, TBL(1)|380, TBL(1)|308, TBL(1)|381, TBL(1)|382, TBL(1)|309,
++/*   3138 */  TBL(1)|310, TBL(1)|311, TBL(1)|383, TBL(1)|384, TBL(1)|385, TBL(1)|386, TBL(1)|387, TBL(1)|388,
++/*   3140 */  TBL(1)|327, TBL(1)|312, TBL(1)|313, TBL(1)|314, TBL(1)|332, TBL(1)|315, TBL(1)|316, TBL(1)|317,
++/*   3148 */  TBL(1)|318, TBL(1)|319, TBL(1)|320, TBL(1)|321, TBL(1)|322, TBL(1)|323, TBL(1)|324, TBL(1)|351,
++/*   3150 */  TBL(1)|352, TBL(1)|353, TBL(1)|354, TBL(1)|355, TBL(1)|356, TBL(1)|357, TBL(1)|358, TBL(1)|359,
++/*   3158 */  TBL(1)|360, TBL(1)|361, TBL(1)|362, TBL(1)|363, TBL(1)|364, TBL(1)|365, TBL(1)|366, TBL(1)|367,
++/*   3160 */  TBL(1)|368, TBL(1)|369, TBL(1)|370, TBL(1)|371, TBL(1)|350, TBL(1)|325, TBL(1)|326, TBL(1)|389,
++/*   3168 */  TBL(1)|390, TBL(1)|391, TBL(1)|392, TBL(1)|393, TBL(1)|394, TBL(1)|395, TBL(1)|328, TBL(1)|396,
++/*   3170 */  TBL(1)|397, TBL(1)|329, TBL(1)|330, TBL(1)|331, TBL(1)|333, TBL(1)|334, TBL(1)|335, TBL(1)|336,
++/*   3178 */  TBL(1)|337, TBL(1)|338, TBL(1)|339, TBL(1)|340, TBL(1)|341, TBL(1)|342, TBL(1)|343, TBL(1)|344,
++/*   3180 */  TBL(1)|345, TBL(1)|346, TBL(1)|398, TBL(1)|399, TBL(1)|347, TBL(1)|348, TBL(1)|349, TBL(1)|372,
++/*   3188 */  TBL(1)|373, TBL(1)|374, TBL(1)|375, TBL(1)|376, TBL(1)|377, TBL(1)|378, TBL(1)|379, 0,
++/*   3190 */  0, 0, TBL(1)|573, TBL(1)|596, TBL(1)|576, TBL(1)|748, TBL(1)|577, TBL(1)|583,
++/*   3198 */  TBL(1)|578, TBL(1)|1138, TBL(1)|591, TBL(1)|580, TBL(1)|574, TBL(1)|781, TBL(1)|753, TBL(1)|601,
+ /*   31a0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   31a8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   31b0 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1622,30 +1629,30 @@ static const uint16_t UNWIF_compat_00_32 [256] = {
+ /*   3228 */  TBL(3)|52, TBL(3)|61, TBL(3)|69, TBL(3)|74, TBL(3)|73, TBL(3)|71, TBL(3)|84, TBL(3)|66,
+ /*   3230 */  TBL(3)|68, TBL(3)|72, TBL(3)|70, TBL(3)|77, TBL(3)|63, TBL(3)|75, TBL(3)|82, TBL(3)|78,
+ /*   3238 */  TBL(3)|60, TBL(3)|55, TBL(3)|64, TBL(3)|67, TBL(3)|76, TBL(3)|56, TBL(3)|83, TBL(3)|62,
+-/*   3240 */  TBL(3)|79, TBL(3)|57, TBL(3)|80, TBL(3)|81, TBL(1)|684, TBL(1)|801, TBL(1)|906, TBL(1)|1170,
++/*   3240 */  TBL(3)|79, TBL(3)|57, TBL(3)|80, TBL(3)|81, TBL(1)|729, TBL(1)|846, TBL(1)|951, TBL(1)|1215,
+ /*   3248 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   3250 */  TBL(3)|238, TBL(2)|23, TBL(2)|24, TBL(2)|25, TBL(2)|26, TBL(2)|27, TBL(2)|28, TBL(2)|29,
+ /*   3258 */  TBL(2)|30, TBL(2)|31, TBL(2)|37, TBL(2)|38, TBL(2)|39, TBL(2)|40, TBL(2)|41, TBL(2)|42,
+-/*   3260 */  TBL(1)|263, TBL(1)|265, TBL(1)|266, TBL(1)|268, TBL(1)|269, TBL(1)|270, TBL(1)|272, TBL(1)|274,
+-/*   3268 */  TBL(1)|275, TBL(1)|277, TBL(1)|278, TBL(1)|279, TBL(1)|280, TBL(1)|281, TBL(2)|780, TBL(2)|781,
++/*   3260 */  TBL(1)|306, TBL(1)|308, TBL(1)|309, TBL(1)|311, TBL(1)|312, TBL(1)|313, TBL(1)|315, TBL(1)|317,
++/*   3268 */  TBL(1)|318, TBL(1)|320, TBL(1)|321, TBL(1)|322, TBL(1)|323, TBL(1)|324, TBL(2)|780, TBL(2)|781,
+ /*   3270 */  TBL(2)|782, TBL(2)|783, TBL(2)|784, TBL(2)|785, TBL(2)|786, TBL(2)|787, TBL(2)|789, TBL(2)|790,
+ /*   3278 */  TBL(2)|791, TBL(2)|792, TBL(2)|793, TBL(2)|794, TBL(5)|0, TBL(4)|73, TBL(2)|788, 0,
+-/*   3280 */  TBL(1)|528, TBL(1)|551, TBL(1)|531, TBL(1)|703, TBL(1)|552, TBL(1)|588, TBL(1)|530, TBL(1)|587,
+-/*   3288 */  TBL(1)|547, TBL(1)|642, TBL(1)|930, TBL(1)|1028, TBL(1)|982, TBL(1)|935, TBL(1)|1400, TBL(1)|707,
+-/*   3290 */  TBL(1)|916, TBL(1)|947, TBL(1)|931, TBL(1)|1139, TBL(1)|671, TBL(1)|1057, TBL(1)|1346, TBL(1)|1144,
+-/*   3298 */  TBL(1)|625, TBL(1)|1156, TBL(1)|1095, TBL(1)|742, TBL(1)|1380, TBL(1)|576, TBL(1)|651, TBL(1)|990,
+-/*   32a0 */  TBL(1)|1450, TBL(1)|561, TBL(1)|597, TBL(1)|967, TBL(1)|532, TBL(1)|538, TBL(1)|533, TBL(1)|791,
+-/*   32a8 */  TBL(1)|668, TBL(1)|640, TBL(1)|758, TBL(1)|755, TBL(1)|1115, TBL(1)|560, TBL(1)|1351, TBL(1)|647,
+-/*   32b0 */  TBL(1)|733, TBL(2)|43, TBL(2)|44, TBL(2)|45, TBL(2)|46, TBL(2)|52, TBL(2)|53, TBL(2)|54,
++/*   3280 */  TBL(1)|573, TBL(1)|596, TBL(1)|576, TBL(1)|748, TBL(1)|597, TBL(1)|633, TBL(1)|575, TBL(1)|632,
++/*   3288 */  TBL(1)|592, TBL(1)|687, TBL(1)|975, TBL(1)|1073, TBL(1)|1027, TBL(1)|980, TBL(1)|1445, TBL(1)|752,
++/*   3290 */  TBL(1)|961, TBL(1)|992, TBL(1)|976, TBL(1)|1184, TBL(1)|716, TBL(1)|1102, TBL(1)|1391, TBL(1)|1189,
++/*   3298 */  TBL(1)|670, TBL(1)|1201, TBL(1)|1140, TBL(1)|787, TBL(1)|1425, TBL(1)|621, TBL(1)|696, TBL(1)|1035,
++/*   32a0 */  TBL(1)|1495, TBL(1)|606, TBL(1)|642, TBL(1)|1012, TBL(1)|577, TBL(1)|583, TBL(1)|578, TBL(1)|836,
++/*   32a8 */  TBL(1)|713, TBL(1)|685, TBL(1)|803, TBL(1)|800, TBL(1)|1160, TBL(1)|605, TBL(1)|1396, TBL(1)|692,
++/*   32b0 */  TBL(1)|778, TBL(2)|43, TBL(2)|44, TBL(2)|45, TBL(2)|46, TBL(2)|52, TBL(2)|53, TBL(2)|54,
+ /*   32b8 */  TBL(2)|55, TBL(2)|56, TBL(2)|57, TBL(2)|58, TBL(2)|59, TBL(2)|60, TBL(2)|61, TBL(2)|67,
+ /*   32c0 */  TBL(2)|18, TBL(2)|33, TBL(2)|48, TBL(2)|63, TBL(2)|69, TBL(2)|74, TBL(2)|79, TBL(2)|84,
+-/*   32c8 */  TBL(2)|89, TBL(3)|115, TBL(3)|119, TBL(3)|123, TBL(2)|169, TBL(3)|575, TBL(2)|1075, TBL(3)|214,
+-/*   32d0 */  TBL(1)|403, TBL(1)|405, TBL(1)|407, TBL(1)|409, TBL(1)|411, TBL(1)|412, TBL(1)|413, TBL(1)|414,
+-/*   32d8 */  TBL(1)|415, TBL(1)|416, TBL(1)|417, TBL(1)|418, TBL(1)|419, TBL(1)|420, TBL(1)|421, TBL(1)|422,
+-/*   32e0 */  TBL(1)|423, TBL(1)|425, TBL(1)|426, TBL(1)|427, TBL(1)|428, TBL(1)|429, TBL(1)|430, TBL(1)|431,
+-/*   32e8 */  TBL(1)|432, TBL(1)|433, TBL(1)|434, TBL(1)|435, TBL(1)|436, TBL(1)|437, TBL(1)|438, TBL(1)|439,
+-/*   32f0 */  TBL(1)|440, TBL(1)|441, TBL(1)|442, TBL(1)|444, TBL(1)|446, TBL(1)|448, TBL(1)|449, TBL(1)|450,
+-/*   32f8 */  TBL(1)|451, TBL(1)|452, TBL(1)|453, TBL(1)|454, TBL(1)|455, TBL(1)|456, TBL(1)|457, TBL(2)|921
++/*   32c8 */  TBL(2)|89, TBL(3)|115, TBL(3)|119, TBL(3)|123, TBL(2)|169, TBL(3)|575, TBL(2)|1081, TBL(3)|214,
++/*   32d0 */  TBL(1)|448, TBL(1)|450, TBL(1)|452, TBL(1)|454, TBL(1)|456, TBL(1)|457, TBL(1)|458, TBL(1)|459,
++/*   32d8 */  TBL(1)|460, TBL(1)|461, TBL(1)|462, TBL(1)|463, TBL(1)|464, TBL(1)|465, TBL(1)|466, TBL(1)|467,
++/*   32e0 */  TBL(1)|468, TBL(1)|470, TBL(1)|471, TBL(1)|472, TBL(1)|473, TBL(1)|474, TBL(1)|475, TBL(1)|476,
++/*   32e8 */  TBL(1)|477, TBL(1)|478, TBL(1)|479, TBL(1)|480, TBL(1)|481, TBL(1)|482, TBL(1)|483, TBL(1)|484,
++/*   32f0 */  TBL(1)|485, TBL(1)|486, TBL(1)|487, TBL(1)|489, TBL(1)|491, TBL(1)|493, TBL(1)|494, TBL(1)|495,
++/*   32f8 */  TBL(1)|496, TBL(1)|497, TBL(1)|498, TBL(1)|499, TBL(1)|500, TBL(1)|501, TBL(1)|502, TBL(2)|921
+ };
+ 
+ static const uint16_t UNWIF_compat_00_33 [256] = {
+@@ -1663,20 +1670,20 @@ static const uint16_t UNWIF_compat_00_33 [256] = {
+ /*   3358 */  TBL(2)|3, TBL(2)|19, TBL(2)|34, TBL(2)|49, TBL(2)|64, TBL(2)|70, TBL(2)|75, TBL(2)|80,
+ /*   3360 */  TBL(2)|85, TBL(2)|90, TBL(3)|116, TBL(3)|120, TBL(3)|124, TBL(3)|127, TBL(3)|130, TBL(3)|133,
+ /*   3368 */  TBL(3)|136, TBL(3)|139, TBL(3)|142, TBL(3)|145, TBL(3)|156, TBL(3)|158, TBL(3)|160, TBL(3)|162,
+-/*   3370 */  TBL(3)|164, TBL(3)|579, TBL(2)|1071, TBL(2)|97, TBL(3)|557, TBL(2)|1188, TBL(2)|1211, TBL(2)|1073,
++/*   3370 */  TBL(3)|164, TBL(3)|579, TBL(2)|1077, TBL(2)|97, TBL(3)|557, TBL(2)|1194, TBL(2)|1217, TBL(2)|1079,
+ /*   3378 */  TBL(3)|564, TBL(3)|565, TBL(2)|173, TBL(2)|923, TBL(2)|925, TBL(2)|922, TBL(2)|924, TBL(4)|103,
+-/*   3380 */  TBL(2)|1205, TBL(2)|1172, TBL(2)|434, TBL(2)|1161, TBL(2)|1135, TBL(2)|192, TBL(2)|209, TBL(2)|151,
+-/*   3388 */  TBL(3)|561, TBL(4)|122, TBL(2)|1206, TBL(2)|1173, TBL(2)|435, TBL(2)|438, TBL(2)|1168, TBL(2)|1144,
+-/*   3390 */  TBL(2)|170, TBL(3)|582, TBL(3)|216, TBL(3)|210, TBL(3)|244, TBL(2)|439, TBL(2)|1169, TBL(2)|1072,
+-/*   3398 */  TBL(2)|1145, TBL(2)|1097, TBL(2)|1186, TBL(2)|440, TBL(2)|1170, TBL(2)|1063, TBL(2)|1146, TBL(3)|590,
+-/*   33a0 */  TBL(3)|562, TBL(2)|1159, TBL(3)|584, TBL(3)|591, TBL(3)|563, TBL(2)|1160, TBL(3)|585, TBL(3)|588,
++/*   3380 */  TBL(2)|1211, TBL(2)|1178, TBL(2)|434, TBL(2)|1167, TBL(2)|1141, TBL(2)|192, TBL(2)|209, TBL(2)|151,
++/*   3388 */  TBL(3)|561, TBL(4)|122, TBL(2)|1212, TBL(2)|1179, TBL(2)|435, TBL(2)|438, TBL(2)|1174, TBL(2)|1150,
++/*   3390 */  TBL(2)|170, TBL(3)|582, TBL(3)|216, TBL(3)|210, TBL(3)|244, TBL(2)|439, TBL(2)|1175, TBL(2)|1078,
++/*   3398 */  TBL(2)|1151, TBL(2)|1103, TBL(2)|1192, TBL(2)|440, TBL(2)|1176, TBL(2)|1069, TBL(2)|1152, TBL(3)|590,
++/*   33a0 */  TBL(3)|562, TBL(2)|1165, TBL(3)|584, TBL(3)|591, TBL(3)|563, TBL(2)|1166, TBL(3)|585, TBL(3)|588,
+ /*   33a8 */  TBL(4)|123, TBL(2)|251, TBL(3)|583, TBL(3)|217, TBL(3)|211, TBL(3)|612, TBL(5)|15, (uint16_t)-1 /*TBL(6)|22*/,
+-/*   33b0 */  TBL(2)|1212, TBL(2)|1187, TBL(2)|441, TBL(2)|1171, TBL(2)|1207, TBL(2)|1174, TBL(2)|436, TBL(2)|1162,
+-/*   33b8 */  TBL(2)|1136, TBL(2)|213, TBL(2)|1208, TBL(2)|1175, TBL(2)|437, TBL(2)|1163, TBL(2)|1137, TBL(2)|214,
+-/*   33c0 */  TBL(2)|1143, TBL(2)|218, TBL(4)|121, TBL(2)|117, TBL(2)|1061, TBL(2)|1062, TBL(4)|27, TBL(3)|198,
+-/*   33c8 */  TBL(2)|1064, TBL(2)|159, TBL(2)|1113, TBL(2)|160, TBL(2)|1130, TBL(2)|193, TBL(2)|194, TBL(2)|1147,
+-/*   33d0 */  TBL(2)|1156, TBL(2)|1157, TBL(3)|587, TBL(2)|1158, TBL(2)|1167, TBL(3)|589, TBL(3)|592, TBL(2)|247,
+-/*   33d8 */  TBL(4)|124, TBL(3)|236, TBL(2)|248, TBL(2)|1228, TBL(2)|271, TBL(2)|310, TBL(3)|257, TBL(3)|196,
++/*   33b0 */  TBL(2)|1218, TBL(2)|1193, TBL(2)|441, TBL(2)|1177, TBL(2)|1213, TBL(2)|1180, TBL(2)|436, TBL(2)|1168,
++/*   33b8 */  TBL(2)|1142, TBL(2)|213, TBL(2)|1214, TBL(2)|1181, TBL(2)|437, TBL(2)|1169, TBL(2)|1143, TBL(2)|214,
++/*   33c0 */  TBL(2)|1149, TBL(2)|218, TBL(4)|121, TBL(2)|117, TBL(2)|1067, TBL(2)|1068, TBL(4)|27, TBL(3)|198,
++/*   33c8 */  TBL(2)|1070, TBL(2)|159, TBL(2)|1119, TBL(2)|160, TBL(2)|1136, TBL(2)|193, TBL(2)|194, TBL(2)|1153,
++/*   33d0 */  TBL(2)|1162, TBL(2)|1163, TBL(3)|587, TBL(2)|1164, TBL(2)|1173, TBL(3)|589, TBL(3)|592, TBL(2)|247,
++/*   33d8 */  TBL(4)|124, TBL(3)|236, TBL(2)|248, TBL(2)|1234, TBL(2)|271, TBL(2)|310, TBL(3)|257, TBL(3)|196,
+ /*   33e0 */  TBL(2)|17, TBL(2)|32, TBL(2)|47, TBL(2)|62, TBL(2)|68, TBL(2)|73, TBL(2)|78, TBL(2)|83,
+ /*   33e8 */  TBL(2)|88, TBL(3)|114, TBL(3)|118, TBL(3)|122, TBL(3)|126, TBL(3)|129, TBL(3)|132, TBL(3)|135,
+ /*   33f0 */  TBL(3)|138, TBL(3)|141, TBL(3)|144, TBL(3)|155, TBL(3)|157, TBL(3)|159, TBL(3)|161, TBL(3)|163,
+@@ -1703,7 +1710,7 @@ static const uint16_t UNWIF_compat_00_a6 [256] = {
+ /*   a680 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a688 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a690 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   a698 */  0, 0, 0, 0, TBL(1)|177, TBL(1)|178, 0, 0,
++/*   a698 */  0, 0, 0, 0, TBL(1)|220, TBL(1)|221, 0, 0,
+ /*   a6a0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a6a8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a6b0 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1733,7 +1740,7 @@ static const uint16_t UNWIF_compat_00_a7 [256] = {
+ /*   a758 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a760 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a768 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   a770 */  TBL(1)|1519, 0, 0, 0, 0, 0, 0, 0,
++/*   a770 */  TBL(1)|1564, 0, 0, 0, 0, 0, 0, 0,
+ /*   a778 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a780 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a788 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1749,8 +1756,8 @@ static const uint16_t UNWIF_compat_00_a7 [256] = {
+ /*   a7d8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a7e0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a7e8 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   a7f0 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   a7f8 */  TBL(1)|69, TBL(1)|73, 0, 0, 0, 0, 0, 0
++/*   a7f0 */  0, 0, TBL(1)|27, TBL(1)|30, TBL(1)|41, 0, 0, 0,
++/*   a7f8 */  TBL(1)|71, TBL(1)|75, 0, 0, 0, 0, 0, 0
+ };
+ 
+ static const uint16_t UNWIF_compat_00_ab [256] = {
+@@ -1765,9 +1772,9 @@ static const uint16_t UNWIF_compat_00_ab [256] = {
+ /*   ab40 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   ab48 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   ab50 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   ab58 */  0, 0, 0, 0, TBL(1)|1518, TBL(1)|1520, TBL(1)|95, TBL(1)|1521,
++/*   ab58 */  0, 0, 0, 0, TBL(1)|1563, TBL(1)|1566, TBL(1)|109, TBL(1)|1567,
+ /*   ab60 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   ab68 */  0, TBL(1)|114, 0, 0, 0, 0, 0, 0,
++/*   ab68 */  0, TBL(1)|138, 0, 0, 0, 0, 0, 0,
+ /*   ab70 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   ab78 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   ab80 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1789,69 +1796,69 @@ static const uint16_t UNWIF_compat_00_ab [256] = {
+ };
+ 
+ static const uint16_t UNWIF_compat_00_f9 [256] = {
+-/*   f900 */  TBL(1)|1342, TBL(1)|927, TBL(1)|1365, TBL(1)|1352, TBL(1)|1014, TBL(1)|539, TBL(1)|664, TBL(1)|1515,
+-/*   f908 */  TBL(1)|1515, TBL(1)|739, TBL(1)|1400, TBL(1)|689, TBL(1)|738, TBL(1)|860, TBL(1)|1108, TBL(1)|1208,
+-/*   f910 */  TBL(1)|1286, TBL(1)|1301, TBL(1)|1314, TBL(1)|1383, TBL(1)|957, TBL(1)|992, TBL(1)|1035, TBL(1)|1073,
+-/*   f918 */  TBL(1)|1272, TBL(1)|1394, TBL(1)|1469, TBL(1)|548, TBL(1)|653, TBL(1)|962, TBL(1)|1044, TBL(1)|1285,
+-/*   f920 */  TBL(1)|1489, TBL(1)|781, TBL(1)|1022, TBL(1)|1281, TBL(1)|1318, TBL(1)|873, TBL(1)|1231, TBL(1)|1304,
+-/*   f928 */  TBL(1)|808, TBL(1)|932, TBL(1)|998, TBL(1)|1063, TBL(1)|1386, TBL(1)|564, TBL(1)|602, TBL(1)|629,
+-/*   f930 */  TBL(1)|899, TBL(1)|960, TBL(1)|1043, TBL(1)|1116, TBL(1)|1214, TBL(1)|1283, TBL(1)|1289, TBL(1)|1362,
+-/*   f938 */  TBL(1)|1436, TBL(1)|1481, TBL(1)|1488, TBL(1)|1131, TBL(1)|1147, TBL(1)|1193, TBL(1)|1265, TBL(1)|1407,
+-/*   f940 */  TBL(1)|1491, TBL(1)|1331, TBL(1)|722, TBL(1)|815, TBL(1)|1175, TBL(1)|1223, TBL(1)|1056, TBL(1)|1133,
+-/*   f948 */  TBL(1)|1350, TBL(1)|1434, TBL(1)|721, TBL(1)|772, TBL(1)|958, TBL(1)|1003, TBL(1)|1016, TBL(1)|1189,
+-/*   f950 */  TBL(1)|1199, TBL(1)|1418, TBL(1)|628, TBL(1)|1226, TBL(1)|605, TBL(1)|604, TBL(1)|1158, TBL(1)|1194,
+-/*   f958 */  TBL(1)|1271, TBL(1)|1420, TBL(1)|1338, TBL(1)|874, TBL(1)|957, TBL(1)|1334, TBL(1)|542, TBL(1)|761,
+-/*   f960 */  TBL(1)|837, TBL(1)|1068, TBL(1)|1100, TBL(1)|637, TBL(1)|1135, TBL(1)|568, TBL(1)|830, TBL(1)|534,
+-/*   f968 */  TBL(1)|987, TBL(1)|905, TBL(1)|1188, TBL(1)|658, TBL(1)|717, TBL(1)|1119, TBL(1)|1273, TBL(1)|1327,
+-/*   f970 */  TBL(1)|974, TBL(1)|1374, TBL(1)|985, TBL(1)|878, TBL(1)|1255, TBL(1)|886, TBL(1)|1099, TBL(1)|555,
+-/*   f978 */  TBL(1)|586, TBL(1)|603, TBL(1)|949, TBL(1)|1183, TBL(1)|1245, TBL(1)|1330, TBL(1)|1399, TBL(1)|631,
+-/*   f980 */  TBL(1)|676, TBL(1)|742, TBL(1)|812, TBL(1)|912, TBL(1)|1023, TBL(1)|1136, TBL(1)|1414, TBL(1)|1471,
+-/*   f988 */  TBL(1)|1492, TBL(1)|1498, TBL(1)|622, TBL(1)|925, TBL(1)|969, TBL(1)|1371, TBL(1)|799, TBL(1)|854,
+-/*   f990 */  TBL(1)|861, TBL(1)|897, TBL(1)|1019, TBL(1)|1038, TBL(1)|1082, TBL(1)|1155, TBL(1)|1196, TBL(1)|1221,
+-/*   f998 */  TBL(1)|1367, TBL(1)|1275, TBL(1)|1377, TBL(1)|1408, TBL(1)|612, TBL(1)|623, TBL(1)|681, TBL(1)|1034,
+-/*   f9a0 */  TBL(1)|1309, TBL(1)|1327, TBL(1)|807, TBL(1)|835, TBL(1)|884, TBL(1)|972, TBL(1)|1174, TBL(1)|1065,
+-/*   f9a8 */  TBL(1)|559, TBL(1)|704, TBL(1)|761, TBL(1)|786, TBL(1)|838, TBL(1)|1072, TBL(1)|1079, TBL(1)|1211,
+-/*   f9b0 */  TBL(1)|1219, TBL(1)|1401, TBL(1)|1433, TBL(1)|1437, TBL(1)|1452, TBL(1)|565, TBL(1)|1152, TBL(1)|1396,
+-/*   f9b8 */  TBL(1)|1427, TBL(1)|844, TBL(1)|550, TBL(1)|574, TBL(1)|762, TBL(1)|770, TBL(1)|908, TBL(1)|957,
+-/*   f9c0 */  TBL(1)|1041, TBL(1)|1107, TBL(1)|1278, TBL(1)|1382, TBL(1)|1513, TBL(1)|921, TBL(1)|1417, TBL(1)|621,
+-/*   f9c8 */  TBL(1)|940, TBL(1)|943, TBL(1)|996, TBL(1)|1010, TBL(1)|1075, TBL(1)|1098, TBL(1)|1130, TBL(1)|1187,
+-/*   f9d0 */  TBL(1)|1455, TBL(1)|588, TBL(1)|865, TBL(1)|1421, TBL(1)|570, TBL(1)|779, TBL(1)|1004, TBL(1)|1368,
+-/*   f9d8 */  TBL(1)|826, TBL(1)|846, TBL(1)|945, TBL(1)|1068, TBL(1)|1423, TBL(1)|614, TBL(1)|672, TBL(1)|774,
+-/*   f9e0 */  TBL(1)|917, TBL(1)|936, TBL(1)|952, TBL(1)|989, TBL(1)|1074, TBL(1)|1103, TBL(1)|1206, TBL(1)|1310,
+-/*   f9e8 */  TBL(1)|1313, TBL(1)|1398, TBL(1)|1430, TBL(1)|641, TBL(1)|1011, TBL(1)|673, TBL(1)|1042, TBL(1)|1083,
+-/*   f9f0 */  TBL(1)|1282, TBL(1)|1424, TBL(1)|1483, TBL(1)|1493, TBL(1)|942, TBL(1)|1002, TBL(1)|1233, TBL(1)|1166,
+-/*   f9f8 */  TBL(1)|1169, TBL(1)|1178, TBL(1)|1062, TBL(1)|1032, TBL(1)|1337, TBL(1)|557, TBL(1)|1259, TBL(1)|615
++/*   f900 */  TBL(1)|1387, TBL(1)|972, TBL(1)|1410, TBL(1)|1397, TBL(1)|1059, TBL(1)|584, TBL(1)|709, TBL(1)|1560,
++/*   f908 */  TBL(1)|1560, TBL(1)|784, TBL(1)|1445, TBL(1)|734, TBL(1)|783, TBL(1)|905, TBL(1)|1153, TBL(1)|1253,
++/*   f910 */  TBL(1)|1331, TBL(1)|1346, TBL(1)|1359, TBL(1)|1428, TBL(1)|1002, TBL(1)|1037, TBL(1)|1080, TBL(1)|1118,
++/*   f918 */  TBL(1)|1317, TBL(1)|1439, TBL(1)|1514, TBL(1)|593, TBL(1)|698, TBL(1)|1007, TBL(1)|1089, TBL(1)|1330,
++/*   f920 */  TBL(1)|1534, TBL(1)|826, TBL(1)|1067, TBL(1)|1326, TBL(1)|1363, TBL(1)|918, TBL(1)|1276, TBL(1)|1349,
++/*   f928 */  TBL(1)|853, TBL(1)|977, TBL(1)|1043, TBL(1)|1108, TBL(1)|1431, TBL(1)|609, TBL(1)|647, TBL(1)|674,
++/*   f930 */  TBL(1)|944, TBL(1)|1005, TBL(1)|1088, TBL(1)|1161, TBL(1)|1259, TBL(1)|1328, TBL(1)|1334, TBL(1)|1407,
++/*   f938 */  TBL(1)|1481, TBL(1)|1526, TBL(1)|1533, TBL(1)|1176, TBL(1)|1192, TBL(1)|1238, TBL(1)|1310, TBL(1)|1452,
++/*   f940 */  TBL(1)|1536, TBL(1)|1376, TBL(1)|767, TBL(1)|860, TBL(1)|1220, TBL(1)|1268, TBL(1)|1101, TBL(1)|1178,
++/*   f948 */  TBL(1)|1395, TBL(1)|1479, TBL(1)|766, TBL(1)|817, TBL(1)|1003, TBL(1)|1048, TBL(1)|1061, TBL(1)|1234,
++/*   f950 */  TBL(1)|1244, TBL(1)|1463, TBL(1)|673, TBL(1)|1271, TBL(1)|650, TBL(1)|649, TBL(1)|1203, TBL(1)|1239,
++/*   f958 */  TBL(1)|1316, TBL(1)|1465, TBL(1)|1383, TBL(1)|919, TBL(1)|1002, TBL(1)|1379, TBL(1)|587, TBL(1)|806,
++/*   f960 */  TBL(1)|882, TBL(1)|1113, TBL(1)|1145, TBL(1)|682, TBL(1)|1180, TBL(1)|613, TBL(1)|875, TBL(1)|579,
++/*   f968 */  TBL(1)|1032, TBL(1)|950, TBL(1)|1233, TBL(1)|703, TBL(1)|762, TBL(1)|1164, TBL(1)|1318, TBL(1)|1372,
++/*   f970 */  TBL(1)|1019, TBL(1)|1419, TBL(1)|1030, TBL(1)|923, TBL(1)|1300, TBL(1)|931, TBL(1)|1144, TBL(1)|600,
++/*   f978 */  TBL(1)|631, TBL(1)|648, TBL(1)|994, TBL(1)|1228, TBL(1)|1290, TBL(1)|1375, TBL(1)|1444, TBL(1)|676,
++/*   f980 */  TBL(1)|721, TBL(1)|787, TBL(1)|857, TBL(1)|957, TBL(1)|1068, TBL(1)|1181, TBL(1)|1459, TBL(1)|1516,
++/*   f988 */  TBL(1)|1537, TBL(1)|1543, TBL(1)|667, TBL(1)|970, TBL(1)|1014, TBL(1)|1416, TBL(1)|844, TBL(1)|899,
++/*   f990 */  TBL(1)|906, TBL(1)|942, TBL(1)|1064, TBL(1)|1083, TBL(1)|1127, TBL(1)|1200, TBL(1)|1241, TBL(1)|1266,
++/*   f998 */  TBL(1)|1412, TBL(1)|1320, TBL(1)|1422, TBL(1)|1453, TBL(1)|657, TBL(1)|668, TBL(1)|726, TBL(1)|1079,
++/*   f9a0 */  TBL(1)|1354, TBL(1)|1372, TBL(1)|852, TBL(1)|880, TBL(1)|929, TBL(1)|1017, TBL(1)|1219, TBL(1)|1110,
++/*   f9a8 */  TBL(1)|604, TBL(1)|749, TBL(1)|806, TBL(1)|831, TBL(1)|883, TBL(1)|1117, TBL(1)|1124, TBL(1)|1256,
++/*   f9b0 */  TBL(1)|1264, TBL(1)|1446, TBL(1)|1478, TBL(1)|1482, TBL(1)|1497, TBL(1)|610, TBL(1)|1197, TBL(1)|1441,
++/*   f9b8 */  TBL(1)|1472, TBL(1)|889, TBL(1)|595, TBL(1)|619, TBL(1)|807, TBL(1)|815, TBL(1)|953, TBL(1)|1002,
++/*   f9c0 */  TBL(1)|1086, TBL(1)|1152, TBL(1)|1323, TBL(1)|1427, TBL(1)|1558, TBL(1)|966, TBL(1)|1462, TBL(1)|666,
++/*   f9c8 */  TBL(1)|985, TBL(1)|988, TBL(1)|1041, TBL(1)|1055, TBL(1)|1120, TBL(1)|1143, TBL(1)|1175, TBL(1)|1232,
++/*   f9d0 */  TBL(1)|1500, TBL(1)|633, TBL(1)|910, TBL(1)|1466, TBL(1)|615, TBL(1)|824, TBL(1)|1049, TBL(1)|1413,
++/*   f9d8 */  TBL(1)|871, TBL(1)|891, TBL(1)|990, TBL(1)|1113, TBL(1)|1468, TBL(1)|659, TBL(1)|717, TBL(1)|819,
++/*   f9e0 */  TBL(1)|962, TBL(1)|981, TBL(1)|997, TBL(1)|1034, TBL(1)|1119, TBL(1)|1148, TBL(1)|1251, TBL(1)|1355,
++/*   f9e8 */  TBL(1)|1358, TBL(1)|1443, TBL(1)|1475, TBL(1)|686, TBL(1)|1056, TBL(1)|718, TBL(1)|1087, TBL(1)|1128,
++/*   f9f0 */  TBL(1)|1327, TBL(1)|1469, TBL(1)|1528, TBL(1)|1538, TBL(1)|987, TBL(1)|1047, TBL(1)|1278, TBL(1)|1211,
++/*   f9f8 */  TBL(1)|1214, TBL(1)|1223, TBL(1)|1107, TBL(1)|1077, TBL(1)|1382, TBL(1)|602, TBL(1)|1304, TBL(1)|660
+ };
+ 
+ static const uint16_t UNWIF_compat_00_fa [256] = {
+-/*   fa00 */  TBL(1)|611, TBL(1)|803, TBL(1)|875, TBL(1)|1181, TBL(1)|757, TBL(1)|993, TBL(1)|924, TBL(1)|1370,
+-/*   fa08 */  TBL(1)|1306, TBL(1)|1419, TBL(1)|1321, TBL(1)|810, TBL(1)|578, TBL(1)|695, 0, 0,
+-/*   fa10 */  TBL(1)|716, 0, TBL(1)|920, 0, 0, TBL(1)|606, TBL(1)|1064, TBL(1)|1113,
+-/*   fa18 */  TBL(1)|1138, TBL(1)|1145, TBL(1)|1146, TBL(1)|1151, TBL(1)|1439, TBL(1)|1179, TBL(1)|1212, 0,
+-/*   fa20 */  TBL(1)|1284, 0, TBL(1)|1333, 0, 0, TBL(1)|1378, TBL(1)|1389, 0,
+-/*   fa28 */  0, 0, TBL(1)|1460, TBL(1)|1461, TBL(1)|1462, TBL(1)|1487, TBL(1)|1387, TBL(1)|1426,
+-/*   fa30 */  TBL(1)|566, TBL(1)|575, TBL(1)|580, TBL(1)|627, TBL(1)|630, TBL(1)|646, TBL(1)|691, TBL(1)|698,
+-/*   fa38 */  TBL(1)|700, TBL(1)|715, TBL(1)|718, TBL(1)|773, TBL(1)|775, TBL(1)|841, TBL(1)|851, TBL(1)|853,
+-/*   fa40 */  TBL(1)|859, TBL(1)|902, TBL(1)|914, TBL(1)|922, TBL(1)|950, TBL(1)|999, TBL(1)|1006, TBL(1)|1018,
+-/*   fa48 */  TBL(1)|1039, TBL(1)|1047, TBL(1)|1076, TBL(1)|1132, TBL(1)|1139, TBL(1)|1141, TBL(1)|1140, TBL(1)|1142,
+-/*   fa50 */  TBL(1)|1143, TBL(1)|1144, TBL(1)|1149, TBL(1)|1150, TBL(1)|1159, TBL(1)|1164, TBL(1)|1171, TBL(1)|1196,
+-/*   fa58 */  TBL(1)|1198, TBL(1)|1200, TBL(1)|1205, TBL(1)|1215, TBL(1)|1235, TBL(1)|1248, TBL(1)|1248, TBL(1)|1274,
+-/*   fa60 */  TBL(1)|1316, TBL(1)|1322, TBL(1)|1335, TBL(1)|1336, TBL(1)|1353, TBL(1)|1354, TBL(1)|1376, TBL(1)|1378,
+-/*   fa68 */  TBL(1)|1431, TBL(1)|1448, TBL(1)|1454, TBL(1)|839, TBL(2)|969, TBL(1)|1241, 0, 0,
+-/*   fa70 */  TBL(1)|536, TBL(1)|601, TBL(1)|585, TBL(1)|563, TBL(1)|579, TBL(1)|590, TBL(1)|626, TBL(1)|633,
+-/*   fa78 */  TBL(1)|691, TBL(1)|686, TBL(1)|690, TBL(1)|697, TBL(1)|716, TBL(1)|720, TBL(1)|737, TBL(1)|740,
+-/*   fa80 */  TBL(1)|747, TBL(1)|751, TBL(1)|809, TBL(1)|811, TBL(1)|823, TBL(1)|831, TBL(1)|843, TBL(1)|849,
+-/*   fa88 */  TBL(1)|845, TBL(1)|853, TBL(1)|850, TBL(1)|859, TBL(1)|866, TBL(1)|888, TBL(1)|891, TBL(1)|893,
+-/*   fa90 */  TBL(1)|903, TBL(1)|920, TBL(1)|932, TBL(1)|933, TBL(1)|938, TBL(1)|970, TBL(1)|974, TBL(1)|996,
+-/*   fa98 */  TBL(1)|1015, TBL(1)|1013, TBL(1)|1018, TBL(1)|1025, TBL(1)|1039, TBL(1)|1125, TBL(1)|1048, TBL(1)|1061,
+-/*   faa0 */  TBL(1)|1064, TBL(1)|1080, TBL(1)|1087, TBL(1)|1096, TBL(1)|1105, TBL(1)|1106, TBL(1)|1113, TBL(1)|1114,
+-/*   faa8 */  TBL(1)|1118, TBL(1)|1123, TBL(1)|1122, TBL(1)|1134, TBL(1)|1165, TBL(1)|1171, TBL(1)|1177, TBL(1)|1191,
+-/*   fab0 */  TBL(1)|1196, TBL(1)|1203, TBL(1)|1215, TBL(1)|1260, TBL(1)|1270, TBL(1)|1299, TBL(1)|1317, TBL(1)|1320,
+-/*   fab8 */  TBL(1)|1322, TBL(1)|1328, TBL(1)|1333, TBL(1)|1329, TBL(1)|1335, TBL(1)|1334, TBL(1)|1332, TBL(1)|1336,
+-/*   fac0 */  TBL(1)|1339, TBL(1)|1354, TBL(1)|1369, TBL(1)|1381, TBL(1)|1395, TBL(1)|1403, TBL(1)|1422, TBL(1)|1431,
+-/*   fac8 */  TBL(1)|1439, TBL(1)|1444, TBL(1)|1448, TBL(1)|1451, TBL(1)|1454, TBL(1)|1475, TBL(1)|1515, TBL(2)|948,
+-/*   fad0 */  TBL(2)|947, TBL(2)|957, TBL(1)|482, TBL(1)|492, TBL(1)|493, TBL(2)|983, TBL(2)|992, TBL(2)|1016,
+-/*   fad8 */  TBL(1)|1510, TBL(1)|1514, 0, 0, 0, 0, 0, 0,
++/*   fa00 */  TBL(1)|656, TBL(1)|848, TBL(1)|920, TBL(1)|1226, TBL(1)|802, TBL(1)|1038, TBL(1)|969, TBL(1)|1415,
++/*   fa08 */  TBL(1)|1351, TBL(1)|1464, TBL(1)|1366, TBL(1)|855, TBL(1)|623, TBL(1)|740, 0, 0,
++/*   fa10 */  TBL(1)|761, 0, TBL(1)|965, 0, 0, TBL(1)|651, TBL(1)|1109, TBL(1)|1158,
++/*   fa18 */  TBL(1)|1183, TBL(1)|1190, TBL(1)|1191, TBL(1)|1196, TBL(1)|1484, TBL(1)|1224, TBL(1)|1257, 0,
++/*   fa20 */  TBL(1)|1329, 0, TBL(1)|1378, 0, 0, TBL(1)|1423, TBL(1)|1434, 0,
++/*   fa28 */  0, 0, TBL(1)|1505, TBL(1)|1506, TBL(1)|1507, TBL(1)|1532, TBL(1)|1432, TBL(1)|1471,
++/*   fa30 */  TBL(1)|611, TBL(1)|620, TBL(1)|625, TBL(1)|672, TBL(1)|675, TBL(1)|691, TBL(1)|736, TBL(1)|743,
++/*   fa38 */  TBL(1)|745, TBL(1)|760, TBL(1)|763, TBL(1)|818, TBL(1)|820, TBL(1)|886, TBL(1)|896, TBL(1)|898,
++/*   fa40 */  TBL(1)|904, TBL(1)|947, TBL(1)|959, TBL(1)|967, TBL(1)|995, TBL(1)|1044, TBL(1)|1051, TBL(1)|1063,
++/*   fa48 */  TBL(1)|1084, TBL(1)|1092, TBL(1)|1121, TBL(1)|1177, TBL(1)|1184, TBL(1)|1186, TBL(1)|1185, TBL(1)|1187,
++/*   fa50 */  TBL(1)|1188, TBL(1)|1189, TBL(1)|1194, TBL(1)|1195, TBL(1)|1204, TBL(1)|1209, TBL(1)|1216, TBL(1)|1241,
++/*   fa58 */  TBL(1)|1243, TBL(1)|1245, TBL(1)|1250, TBL(1)|1260, TBL(1)|1280, TBL(1)|1293, TBL(1)|1293, TBL(1)|1319,
++/*   fa60 */  TBL(1)|1361, TBL(1)|1367, TBL(1)|1380, TBL(1)|1381, TBL(1)|1398, TBL(1)|1399, TBL(1)|1421, TBL(1)|1423,
++/*   fa68 */  TBL(1)|1476, TBL(1)|1493, TBL(1)|1499, TBL(1)|884, TBL(2)|975, TBL(1)|1286, 0, 0,
++/*   fa70 */  TBL(1)|581, TBL(1)|646, TBL(1)|630, TBL(1)|608, TBL(1)|624, TBL(1)|635, TBL(1)|671, TBL(1)|678,
++/*   fa78 */  TBL(1)|736, TBL(1)|731, TBL(1)|735, TBL(1)|742, TBL(1)|761, TBL(1)|765, TBL(1)|782, TBL(1)|785,
++/*   fa80 */  TBL(1)|792, TBL(1)|796, TBL(1)|854, TBL(1)|856, TBL(1)|868, TBL(1)|876, TBL(1)|888, TBL(1)|894,
++/*   fa88 */  TBL(1)|890, TBL(1)|898, TBL(1)|895, TBL(1)|904, TBL(1)|911, TBL(1)|933, TBL(1)|936, TBL(1)|938,
++/*   fa90 */  TBL(1)|948, TBL(1)|965, TBL(1)|977, TBL(1)|978, TBL(1)|983, TBL(1)|1015, TBL(1)|1019, TBL(1)|1041,
++/*   fa98 */  TBL(1)|1060, TBL(1)|1058, TBL(1)|1063, TBL(1)|1070, TBL(1)|1084, TBL(1)|1170, TBL(1)|1093, TBL(1)|1106,
++/*   faa0 */  TBL(1)|1109, TBL(1)|1125, TBL(1)|1132, TBL(1)|1141, TBL(1)|1150, TBL(1)|1151, TBL(1)|1158, TBL(1)|1159,
++/*   faa8 */  TBL(1)|1163, TBL(1)|1168, TBL(1)|1167, TBL(1)|1179, TBL(1)|1210, TBL(1)|1216, TBL(1)|1222, TBL(1)|1236,
++/*   fab0 */  TBL(1)|1241, TBL(1)|1248, TBL(1)|1260, TBL(1)|1305, TBL(1)|1315, TBL(1)|1344, TBL(1)|1362, TBL(1)|1365,
++/*   fab8 */  TBL(1)|1367, TBL(1)|1373, TBL(1)|1378, TBL(1)|1374, TBL(1)|1380, TBL(1)|1379, TBL(1)|1377, TBL(1)|1381,
++/*   fac0 */  TBL(1)|1384, TBL(1)|1399, TBL(1)|1414, TBL(1)|1426, TBL(1)|1440, TBL(1)|1448, TBL(1)|1467, TBL(1)|1476,
++/*   fac8 */  TBL(1)|1484, TBL(1)|1489, TBL(1)|1493, TBL(1)|1496, TBL(1)|1499, TBL(1)|1520, TBL(1)|1560, TBL(2)|954,
++/*   fad0 */  TBL(2)|953, TBL(2)|963, TBL(1)|527, TBL(1)|537, TBL(1)|538, TBL(2)|989, TBL(2)|998, TBL(2)|1022,
++/*   fad8 */  TBL(1)|1555, TBL(1)|1559, 0, 0, 0, 0, 0, 0,
+ /*   fae0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   fae8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   faf0 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1859,38 +1866,38 @@ static const uint16_t UNWIF_compat_00_fa [256] = {
+ };
+ 
+ static const uint16_t UNWIF_compat_00_fb [256] = {
+-/*   fb00 */  TBL(2)|1094, TBL(2)|1095, TBL(2)|1096, TBL(3)|576, TBL(3)|577, TBL(2)|1229, TBL(2)|1229, 0,
++/*   fb00 */  TBL(2)|1100, TBL(2)|1101, TBL(2)|1102, TBL(3)|576, TBL(3)|577, TBL(2)|1235, TBL(2)|1235, 0,
+ /*   fb08 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   fb10 */  0, 0, 0, TBL(2)|518, TBL(2)|515, TBL(2)|516, TBL(2)|519, TBL(2)|517,
+ /*   fb18 */  0, 0, 0, 0, 0, TBL(2)|533, 0, TBL(2)|552,
+-/*   fb20 */  TBL(1)|187, TBL(1)|179, TBL(1)|182, TBL(1)|183, TBL(1)|184, TBL(1)|185, TBL(1)|186, TBL(1)|188,
+-/*   fb28 */  TBL(1)|189, TBL(1)|3, TBL(2)|549, TBL(2)|550, TBL(3)|374, TBL(3)|375, TBL(2)|520, TBL(2)|521,
++/*   fb20 */  TBL(1)|230, TBL(1)|222, TBL(1)|225, TBL(1)|226, TBL(1)|227, TBL(1)|228, TBL(1)|229, TBL(1)|231,
++/*   fb28 */  TBL(1)|232, TBL(1)|3, TBL(2)|549, TBL(2)|550, TBL(3)|374, TBL(3)|375, TBL(2)|520, TBL(2)|521,
+ /*   fb30 */  TBL(2)|522, TBL(2)|524, TBL(2)|526, TBL(2)|527, TBL(2)|528, TBL(2)|530, TBL(2)|531, 0,
+ /*   fb38 */  TBL(2)|532, TBL(2)|534, TBL(2)|535, TBL(2)|536, TBL(2)|538, 0, TBL(2)|539, 0,
+ /*   fb40 */  TBL(2)|540, TBL(2)|541, 0, TBL(2)|542, TBL(2)|543, 0, TBL(2)|545, TBL(2)|546,
+ /*   fb48 */  TBL(2)|547, TBL(2)|548, TBL(2)|551, TBL(2)|529, TBL(2)|525, TBL(2)|537, TBL(2)|544, TBL(2)|523,
+-/*   fb50 */  TBL(1)|223, TBL(1)|223, TBL(1)|226, TBL(1)|226, TBL(1)|226, TBL(1)|226, TBL(1)|227, TBL(1)|227,
+-/*   fb58 */  TBL(1)|227, TBL(1)|227, TBL(1)|229, TBL(1)|229, TBL(1)|229, TBL(1)|229, TBL(1)|225, TBL(1)|225,
+-/*   fb60 */  TBL(1)|225, TBL(1)|225, TBL(1)|228, TBL(1)|228, TBL(1)|228, TBL(1)|228, TBL(1)|224, TBL(1)|224,
+-/*   fb68 */  TBL(1)|224, TBL(1)|224, TBL(1)|241, TBL(1)|241, TBL(1)|241, TBL(1)|241, TBL(1)|242, TBL(1)|242,
+-/*   fb70 */  TBL(1)|242, TBL(1)|242, TBL(1)|231, TBL(1)|231, TBL(1)|231, TBL(1)|231, TBL(1)|230, TBL(1)|230,
+-/*   fb78 */  TBL(1)|230, TBL(1)|230, TBL(1)|232, TBL(1)|232, TBL(1)|232, TBL(1)|232, TBL(1)|233, TBL(1)|233,
+-/*   fb80 */  TBL(1)|233, TBL(1)|233, TBL(1)|236, TBL(1)|236, TBL(1)|235, TBL(1)|235, TBL(1)|237, TBL(1)|237,
+-/*   fb88 */  TBL(1)|234, TBL(1)|234, TBL(1)|239, TBL(1)|239, TBL(1)|238, TBL(1)|238, TBL(1)|243, TBL(1)|243,
+-/*   fb90 */  TBL(1)|243, TBL(1)|243, TBL(1)|245, TBL(1)|245, TBL(1)|245, TBL(1)|245, TBL(1)|247, TBL(1)|247,
+-/*   fb98 */  TBL(1)|247, TBL(1)|247, TBL(1)|246, TBL(1)|246, TBL(1)|246, TBL(1)|246, TBL(1)|248, TBL(1)|248,
+-/*   fba0 */  TBL(1)|249, TBL(1)|249, TBL(1)|249, TBL(1)|249, TBL(2)|715, TBL(2)|715, TBL(1)|251, TBL(1)|251,
+-/*   fba8 */  TBL(1)|251, TBL(1)|251, TBL(1)|250, TBL(1)|250, TBL(1)|250, TBL(1)|250, TBL(1)|260, TBL(1)|260,
++/*   fb50 */  TBL(1)|266, TBL(1)|266, TBL(1)|269, TBL(1)|269, TBL(1)|269, TBL(1)|269, TBL(1)|270, TBL(1)|270,
++/*   fb58 */  TBL(1)|270, TBL(1)|270, TBL(1)|272, TBL(1)|272, TBL(1)|272, TBL(1)|272, TBL(1)|268, TBL(1)|268,
++/*   fb60 */  TBL(1)|268, TBL(1)|268, TBL(1)|271, TBL(1)|271, TBL(1)|271, TBL(1)|271, TBL(1)|267, TBL(1)|267,
++/*   fb68 */  TBL(1)|267, TBL(1)|267, TBL(1)|284, TBL(1)|284, TBL(1)|284, TBL(1)|284, TBL(1)|285, TBL(1)|285,
++/*   fb70 */  TBL(1)|285, TBL(1)|285, TBL(1)|274, TBL(1)|274, TBL(1)|274, TBL(1)|274, TBL(1)|273, TBL(1)|273,
++/*   fb78 */  TBL(1)|273, TBL(1)|273, TBL(1)|275, TBL(1)|275, TBL(1)|275, TBL(1)|275, TBL(1)|276, TBL(1)|276,
++/*   fb80 */  TBL(1)|276, TBL(1)|276, TBL(1)|279, TBL(1)|279, TBL(1)|278, TBL(1)|278, TBL(1)|280, TBL(1)|280,
++/*   fb88 */  TBL(1)|277, TBL(1)|277, TBL(1)|282, TBL(1)|282, TBL(1)|281, TBL(1)|281, TBL(1)|286, TBL(1)|286,
++/*   fb90 */  TBL(1)|286, TBL(1)|286, TBL(1)|288, TBL(1)|288, TBL(1)|288, TBL(1)|288, TBL(1)|290, TBL(1)|290,
++/*   fb98 */  TBL(1)|290, TBL(1)|290, TBL(1)|289, TBL(1)|289, TBL(1)|289, TBL(1)|289, TBL(1)|291, TBL(1)|291,
++/*   fba0 */  TBL(1)|292, TBL(1)|292, TBL(1)|292, TBL(1)|292, TBL(2)|715, TBL(2)|715, TBL(1)|294, TBL(1)|294,
++/*   fba8 */  TBL(1)|294, TBL(1)|294, TBL(1)|293, TBL(1)|293, TBL(1)|293, TBL(1)|293, TBL(1)|303, TBL(1)|303,
+ /*   fbb0 */  TBL(2)|714, TBL(2)|714, 0, 0, 0, 0, 0, 0,
+ /*   fbb8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   fbc0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   fbc8 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   fbd0 */  0, 0, 0, TBL(1)|244, TBL(1)|244, TBL(1)|244, TBL(1)|244, TBL(1)|254,
+-/*   fbd8 */  TBL(1)|254, TBL(1)|253, TBL(1)|253, TBL(1)|255, TBL(1)|255, TBL(2)|713, TBL(1)|257, TBL(1)|257,
+-/*   fbe0 */  TBL(1)|252, TBL(1)|252, TBL(1)|256, TBL(1)|256, TBL(1)|259, TBL(1)|259, TBL(1)|259, TBL(1)|259,
+-/*   fbe8 */  TBL(1)|219, TBL(1)|219, TBL(3)|479, TBL(3)|479, TBL(3)|495, TBL(3)|495, TBL(3)|488, TBL(3)|488,
++/*   fbd0 */  0, 0, 0, TBL(1)|287, TBL(1)|287, TBL(1)|287, TBL(1)|287, TBL(1)|297,
++/*   fbd8 */  TBL(1)|297, TBL(1)|296, TBL(1)|296, TBL(1)|298, TBL(1)|298, TBL(2)|713, TBL(1)|300, TBL(1)|300,
++/*   fbe0 */  TBL(1)|295, TBL(1)|295, TBL(1)|299, TBL(1)|299, TBL(1)|302, TBL(1)|302, TBL(1)|302, TBL(1)|302,
++/*   fbe8 */  TBL(1)|262, TBL(1)|262, TBL(3)|479, TBL(3)|479, TBL(3)|495, TBL(3)|495, TBL(3)|488, TBL(3)|488,
+ /*   fbf0 */  TBL(3)|492, TBL(3)|492, TBL(3)|491, TBL(3)|491, TBL(3)|493, TBL(3)|493, TBL(3)|494, TBL(3)|494,
+-/*   fbf8 */  TBL(3)|494, TBL(3)|489, TBL(3)|489, TBL(3)|489, TBL(1)|258, TBL(1)|258, TBL(1)|258, TBL(1)|258
++/*   fbf8 */  TBL(3)|494, TBL(3)|489, TBL(3)|489, TBL(3)|489, TBL(1)|301, TBL(1)|301, TBL(1)|301, TBL(1)|301
+ };
+ 
+ static const uint16_t UNWIF_compat_00_fc [256] = {
+@@ -1966,35 +1973,35 @@ static const uint16_t UNWIF_compat_00_fd [256] = {
+ static const uint16_t UNWIF_compat_00_fe [256] = {
+ /*   fe00 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   fe08 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   fe10 */  TBL(1)|4, TBL(1)|383, TBL(1)|384, TBL(1)|18, TBL(1)|19, TBL(1)|53, TBL(1)|23, TBL(1)|398,
+-/*   fe18 */  TBL(1)|399, TBL(3)|111, 0, 0, 0, 0, 0, 0,
++/*   fe10 */  TBL(1)|4, TBL(1)|428, TBL(1)|429, TBL(1)|18, TBL(1)|19, TBL(1)|53, TBL(1)|23, TBL(1)|443,
++/*   fe18 */  TBL(1)|444, TBL(3)|111, 0, 0, 0, 0, 0, 0,
+ /*   fe20 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   fe28 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   fe30 */  TBL(2)|0, TBL(1)|367, TBL(1)|366, TBL(1)|1524, TBL(1)|1524, TBL(1)|0, TBL(1)|1, TBL(1)|1552,
+-/*   fe38 */  TBL(1)|1554, TBL(1)|396, TBL(1)|397, TBL(1)|393, TBL(1)|394, TBL(1)|387, TBL(1)|388, TBL(1)|385,
+-/*   fe40 */  TBL(1)|386, TBL(1)|389, TBL(1)|390, TBL(1)|391, TBL(1)|392, 0, 0, TBL(1)|51,
+-/*   fe48 */  TBL(1)|1522, TBL(2)|332, TBL(2)|332, TBL(2)|332, TBL(2)|332, TBL(1)|1524, TBL(1)|1524, TBL(1)|1524,
+-/*   fe50 */  TBL(1)|4, TBL(1)|383, TBL(1)|6, 0, TBL(1)|19, TBL(1)|18, TBL(1)|23, TBL(1)|53,
+-/*   fe58 */  TBL(1)|367, TBL(1)|0, TBL(1)|1, TBL(1)|1552, TBL(1)|1554, TBL(1)|396, TBL(1)|397, TBL(1)|55,
++/*   fe30 */  TBL(2)|0, TBL(1)|411, TBL(1)|410, TBL(1)|1572, TBL(1)|1572, TBL(1)|0, TBL(1)|1, TBL(1)|1600,
++/*   fe38 */  TBL(1)|1602, TBL(1)|441, TBL(1)|442, TBL(1)|438, TBL(1)|439, TBL(1)|432, TBL(1)|433, TBL(1)|430,
++/*   fe40 */  TBL(1)|431, TBL(1)|434, TBL(1)|435, TBL(1)|436, TBL(1)|437, 0, 0, TBL(1)|51,
++/*   fe48 */  TBL(1)|1570, TBL(2)|332, TBL(2)|332, TBL(2)|332, TBL(2)|332, TBL(1)|1572, TBL(1)|1572, TBL(1)|1572,
++/*   fe50 */  TBL(1)|4, TBL(1)|428, TBL(1)|6, 0, TBL(1)|19, TBL(1)|18, TBL(1)|23, TBL(1)|53,
++/*   fe58 */  TBL(1)|411, TBL(1)|0, TBL(1)|1, TBL(1)|1600, TBL(1)|1602, TBL(1)|441, TBL(1)|442, TBL(1)|55,
+ /*   fe60 */  TBL(1)|58, TBL(1)|2, TBL(1)|3, TBL(1)|5, TBL(1)|20, TBL(1)|22, TBL(1)|21, 0,
+ /*   fe68 */  TBL(1)|60, TBL(1)|56, TBL(1)|57, TBL(1)|24, 0, 0, 0, 0,
+ /*   fe70 */  TBL(2)|345, TBL(2)|643, TBL(2)|346, 0, TBL(2)|347, 0, TBL(2)|348, TBL(2)|644,
+ /*   fe78 */  TBL(2)|349, TBL(2)|645, TBL(2)|350, TBL(2)|646, TBL(2)|351, TBL(2)|647, TBL(2)|352, TBL(2)|648,
+-/*   fe80 */  TBL(1)|190, TBL(2)|554, TBL(2)|554, TBL(2)|555, TBL(2)|555, TBL(2)|697, TBL(2)|697, TBL(2)|556,
+-/*   fe88 */  TBL(2)|556, TBL(2)|710, TBL(2)|710, TBL(2)|710, TBL(2)|710, TBL(1)|191, TBL(1)|191, TBL(1)|192,
+-/*   fe90 */  TBL(1)|192, TBL(1)|192, TBL(1)|192, TBL(1)|193, TBL(1)|193, TBL(1)|194, TBL(1)|194, TBL(1)|194,
+-/*   fe98 */  TBL(1)|194, TBL(1)|195, TBL(1)|195, TBL(1)|195, TBL(1)|195, TBL(1)|196, TBL(1)|196, TBL(1)|196,
+-/*   fea0 */  TBL(1)|196, TBL(1)|197, TBL(1)|197, TBL(1)|197, TBL(1)|197, TBL(1)|198, TBL(1)|198, TBL(1)|198,
+-/*   fea8 */  TBL(1)|198, TBL(1)|199, TBL(1)|199, TBL(1)|200, TBL(1)|200, TBL(1)|201, TBL(1)|201, TBL(1)|202,
+-/*   feb0 */  TBL(1)|202, TBL(1)|203, TBL(1)|203, TBL(1)|203, TBL(1)|203, TBL(1)|204, TBL(1)|204, TBL(1)|204,
+-/*   feb8 */  TBL(1)|204, TBL(1)|205, TBL(1)|205, TBL(1)|205, TBL(1)|205, TBL(1)|206, TBL(1)|206, TBL(1)|206,
+-/*   fec0 */  TBL(1)|206, TBL(1)|207, TBL(1)|207, TBL(1)|207, TBL(1)|207, TBL(1)|208, TBL(1)|208, TBL(1)|208,
+-/*   fec8 */  TBL(1)|208, TBL(1)|209, TBL(1)|209, TBL(1)|209, TBL(1)|209, TBL(1)|210, TBL(1)|210, TBL(1)|210,
+-/*   fed0 */  TBL(1)|210, TBL(1)|211, TBL(1)|211, TBL(1)|211, TBL(1)|211, TBL(1)|212, TBL(1)|212, TBL(1)|212,
+-/*   fed8 */  TBL(1)|212, TBL(1)|213, TBL(1)|213, TBL(1)|213, TBL(1)|213, TBL(1)|214, TBL(1)|214, TBL(1)|214,
+-/*   fee0 */  TBL(1)|214, TBL(1)|215, TBL(1)|215, TBL(1)|215, TBL(1)|215, TBL(1)|216, TBL(1)|216, TBL(1)|216,
+-/*   fee8 */  TBL(1)|216, TBL(1)|217, TBL(1)|217, TBL(1)|217, TBL(1)|217, TBL(1)|218, TBL(1)|218, TBL(1)|219,
+-/*   fef0 */  TBL(1)|219, TBL(1)|220, TBL(1)|220, TBL(1)|220, TBL(1)|220, TBL(3)|441, TBL(3)|441, TBL(3)|442,
++/*   fe80 */  TBL(1)|233, TBL(2)|554, TBL(2)|554, TBL(2)|555, TBL(2)|555, TBL(2)|697, TBL(2)|697, TBL(2)|556,
++/*   fe88 */  TBL(2)|556, TBL(2)|710, TBL(2)|710, TBL(2)|710, TBL(2)|710, TBL(1)|234, TBL(1)|234, TBL(1)|235,
++/*   fe90 */  TBL(1)|235, TBL(1)|235, TBL(1)|235, TBL(1)|236, TBL(1)|236, TBL(1)|237, TBL(1)|237, TBL(1)|237,
++/*   fe98 */  TBL(1)|237, TBL(1)|238, TBL(1)|238, TBL(1)|238, TBL(1)|238, TBL(1)|239, TBL(1)|239, TBL(1)|239,
++/*   fea0 */  TBL(1)|239, TBL(1)|240, TBL(1)|240, TBL(1)|240, TBL(1)|240, TBL(1)|241, TBL(1)|241, TBL(1)|241,
++/*   fea8 */  TBL(1)|241, TBL(1)|242, TBL(1)|242, TBL(1)|243, TBL(1)|243, TBL(1)|244, TBL(1)|244, TBL(1)|245,
++/*   feb0 */  TBL(1)|245, TBL(1)|246, TBL(1)|246, TBL(1)|246, TBL(1)|246, TBL(1)|247, TBL(1)|247, TBL(1)|247,
++/*   feb8 */  TBL(1)|247, TBL(1)|248, TBL(1)|248, TBL(1)|248, TBL(1)|248, TBL(1)|249, TBL(1)|249, TBL(1)|249,
++/*   fec0 */  TBL(1)|249, TBL(1)|250, TBL(1)|250, TBL(1)|250, TBL(1)|250, TBL(1)|251, TBL(1)|251, TBL(1)|251,
++/*   fec8 */  TBL(1)|251, TBL(1)|252, TBL(1)|252, TBL(1)|252, TBL(1)|252, TBL(1)|253, TBL(1)|253, TBL(1)|253,
++/*   fed0 */  TBL(1)|253, TBL(1)|254, TBL(1)|254, TBL(1)|254, TBL(1)|254, TBL(1)|255, TBL(1)|255, TBL(1)|255,
++/*   fed8 */  TBL(1)|255, TBL(1)|256, TBL(1)|256, TBL(1)|256, TBL(1)|256, TBL(1)|257, TBL(1)|257, TBL(1)|257,
++/*   fee0 */  TBL(1)|257, TBL(1)|258, TBL(1)|258, TBL(1)|258, TBL(1)|258, TBL(1)|259, TBL(1)|259, TBL(1)|259,
++/*   fee8 */  TBL(1)|259, TBL(1)|260, TBL(1)|260, TBL(1)|260, TBL(1)|260, TBL(1)|261, TBL(1)|261, TBL(1)|262,
++/*   fef0 */  TBL(1)|262, TBL(1)|263, TBL(1)|263, TBL(1)|263, TBL(1)|263, TBL(3)|441, TBL(3)|441, TBL(3)|442,
+ /*   fef8 */  TBL(3)|442, TBL(3)|443, TBL(3)|443, TBL(2)|667, TBL(2)|667, 0, 0, 0
+ };
+ 
+@@ -2006,33 +2013,68 @@ static const uint16_t UNWIF_compat_00_ff [256] = {
+ /*   ff20 */  TBL(1)|24, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31,
+ /*   ff28 */  TBL(1)|32, TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36, TBL(1)|37, TBL(1)|38, TBL(1)|39,
+ /*   ff30 */  TBL(1)|40, TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47,
+-/*   ff38 */  TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|51, TBL(1)|60, TBL(1)|1522, TBL(1)|1523, TBL(1)|1524,
+-/*   ff40 */  TBL(1)|1525, TBL(1)|1526, TBL(1)|1527, TBL(1)|1528, TBL(1)|1529, TBL(1)|1530, TBL(1)|1531, TBL(1)|1532,
+-/*   ff48 */  TBL(1)|1533, TBL(1)|1534, TBL(1)|1535, TBL(1)|1536, TBL(1)|1537, TBL(1)|1538, TBL(1)|1539, TBL(1)|1540,
+-/*   ff50 */  TBL(1)|1541, TBL(1)|1542, TBL(1)|1543, TBL(1)|1544, TBL(1)|1545, TBL(1)|1546, TBL(1)|1547, TBL(1)|1548,
+-/*   ff58 */  TBL(1)|1549, TBL(1)|1550, TBL(1)|1551, TBL(1)|1552, TBL(1)|1553, TBL(1)|1554, TBL(1)|1555, TBL(1)|380,
+-/*   ff60 */  TBL(1)|381, TBL(1)|384, TBL(1)|389, TBL(1)|390, TBL(1)|383, TBL(1)|459, TBL(1)|457, TBL(1)|402,
+-/*   ff68 */  TBL(1)|404, TBL(1)|406, TBL(1)|408, TBL(1)|410, TBL(1)|443, TBL(1)|445, TBL(1)|447, TBL(1)|424,
+-/*   ff70 */  TBL(1)|460, TBL(1)|403, TBL(1)|405, TBL(1)|407, TBL(1)|409, TBL(1)|411, TBL(1)|412, TBL(1)|413,
+-/*   ff78 */  TBL(1)|414, TBL(1)|415, TBL(1)|416, TBL(1)|417, TBL(1)|418, TBL(1)|419, TBL(1)|420, TBL(1)|421,
+-/*   ff80 */  TBL(1)|422, TBL(1)|423, TBL(1)|425, TBL(1)|426, TBL(1)|427, TBL(1)|428, TBL(1)|429, TBL(1)|430,
+-/*   ff88 */  TBL(1)|431, TBL(1)|432, TBL(1)|433, TBL(1)|434, TBL(1)|435, TBL(1)|436, TBL(1)|437, TBL(1)|438,
+-/*   ff90 */  TBL(1)|439, TBL(1)|440, TBL(1)|441, TBL(1)|442, TBL(1)|444, TBL(1)|446, TBL(1)|448, TBL(1)|449,
+-/*   ff98 */  TBL(1)|450, TBL(1)|451, TBL(1)|452, TBL(1)|453, TBL(1)|454, TBL(1)|458, TBL(1)|400, TBL(1)|401,
+-/*   ffa0 */  TBL(1)|307, TBL(1)|263, TBL(1)|264, TBL(1)|337, TBL(1)|265, TBL(1)|338, TBL(1)|339, TBL(1)|266,
+-/*   ffa8 */  TBL(1)|267, TBL(1)|268, TBL(1)|340, TBL(1)|341, TBL(1)|342, TBL(1)|343, TBL(1)|344, TBL(1)|345,
+-/*   ffb0 */  TBL(1)|284, TBL(1)|269, TBL(1)|270, TBL(1)|271, TBL(1)|289, TBL(1)|272, TBL(1)|273, TBL(1)|274,
+-/*   ffb8 */  TBL(1)|275, TBL(1)|276, TBL(1)|277, TBL(1)|278, TBL(1)|279, TBL(1)|280, TBL(1)|281, 0,
+-/*   ffc0 */  0, 0, TBL(1)|308, TBL(1)|309, TBL(1)|310, TBL(1)|311, TBL(1)|312, TBL(1)|313,
+-/*   ffc8 */  0, 0, TBL(1)|314, TBL(1)|315, TBL(1)|316, TBL(1)|317, TBL(1)|318, TBL(1)|319,
+-/*   ffd0 */  0, 0, TBL(1)|320, TBL(1)|321, TBL(1)|322, TBL(1)|323, TBL(1)|324, TBL(1)|325,
+-/*   ffd8 */  0, 0, TBL(1)|326, TBL(1)|327, TBL(1)|328, 0, 0, 0,
+-/*   ffe0 */  TBL(1)|61, TBL(1)|62, TBL(1)|65, TBL(2)|331, TBL(1)|64, TBL(1)|63, TBL(1)|368, 0,
+-/*   ffe8 */  TBL(1)|377, TBL(1)|369, TBL(1)|370, TBL(1)|371, TBL(1)|372, TBL(1)|378, TBL(1)|379, 0,
++/*   ff38 */  TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|51, TBL(1)|60, TBL(1)|1570, TBL(1)|1571, TBL(1)|1572,
++/*   ff40 */  TBL(1)|1573, TBL(1)|1574, TBL(1)|1575, TBL(1)|1576, TBL(1)|1577, TBL(1)|1578, TBL(1)|1579, TBL(1)|1580,
++/*   ff48 */  TBL(1)|1581, TBL(1)|1582, TBL(1)|1583, TBL(1)|1584, TBL(1)|1585, TBL(1)|1586, TBL(1)|1587, TBL(1)|1588,
++/*   ff50 */  TBL(1)|1589, TBL(1)|1590, TBL(1)|1591, TBL(1)|1592, TBL(1)|1593, TBL(1)|1594, TBL(1)|1595, TBL(1)|1596,
++/*   ff58 */  TBL(1)|1597, TBL(1)|1598, TBL(1)|1599, TBL(1)|1600, TBL(1)|1601, TBL(1)|1602, TBL(1)|1603, TBL(1)|424,
++/*   ff60 */  TBL(1)|425, TBL(1)|429, TBL(1)|434, TBL(1)|435, TBL(1)|428, TBL(1)|504, TBL(1)|502, TBL(1)|447,
++/*   ff68 */  TBL(1)|449, TBL(1)|451, TBL(1)|453, TBL(1)|455, TBL(1)|488, TBL(1)|490, TBL(1)|492, TBL(1)|469,
++/*   ff70 */  TBL(1)|505, TBL(1)|448, TBL(1)|450, TBL(1)|452, TBL(1)|454, TBL(1)|456, TBL(1)|457, TBL(1)|458,
++/*   ff78 */  TBL(1)|459, TBL(1)|460, TBL(1)|461, TBL(1)|462, TBL(1)|463, TBL(1)|464, TBL(1)|465, TBL(1)|466,
++/*   ff80 */  TBL(1)|467, TBL(1)|468, TBL(1)|470, TBL(1)|471, TBL(1)|472, TBL(1)|473, TBL(1)|474, TBL(1)|475,
++/*   ff88 */  TBL(1)|476, TBL(1)|477, TBL(1)|478, TBL(1)|479, TBL(1)|480, TBL(1)|481, TBL(1)|482, TBL(1)|483,
++/*   ff90 */  TBL(1)|484, TBL(1)|485, TBL(1)|486, TBL(1)|487, TBL(1)|489, TBL(1)|491, TBL(1)|493, TBL(1)|494,
++/*   ff98 */  TBL(1)|495, TBL(1)|496, TBL(1)|497, TBL(1)|498, TBL(1)|499, TBL(1)|503, TBL(1)|445, TBL(1)|446,
++/*   ffa0 */  TBL(1)|350, TBL(1)|306, TBL(1)|307, TBL(1)|380, TBL(1)|308, TBL(1)|381, TBL(1)|382, TBL(1)|309,
++/*   ffa8 */  TBL(1)|310, TBL(1)|311, TBL(1)|383, TBL(1)|384, TBL(1)|385, TBL(1)|386, TBL(1)|387, TBL(1)|388,
++/*   ffb0 */  TBL(1)|327, TBL(1)|312, TBL(1)|313, TBL(1)|314, TBL(1)|332, TBL(1)|315, TBL(1)|316, TBL(1)|317,
++/*   ffb8 */  TBL(1)|318, TBL(1)|319, TBL(1)|320, TBL(1)|321, TBL(1)|322, TBL(1)|323, TBL(1)|324, 0,
++/*   ffc0 */  0, 0, TBL(1)|351, TBL(1)|352, TBL(1)|353, TBL(1)|354, TBL(1)|355, TBL(1)|356,
++/*   ffc8 */  0, 0, TBL(1)|357, TBL(1)|358, TBL(1)|359, TBL(1)|360, TBL(1)|361, TBL(1)|362,
++/*   ffd0 */  0, 0, TBL(1)|363, TBL(1)|364, TBL(1)|365, TBL(1)|366, TBL(1)|367, TBL(1)|368,
++/*   ffd8 */  0, 0, TBL(1)|369, TBL(1)|370, TBL(1)|371, 0, 0, 0,
++/*   ffe0 */  TBL(1)|61, TBL(1)|62, TBL(1)|65, TBL(2)|331, TBL(1)|64, TBL(1)|63, TBL(1)|412, 0,
++/*   ffe8 */  TBL(1)|421, TBL(1)|413, TBL(1)|414, TBL(1)|415, TBL(1)|416, TBL(1)|422, TBL(1)|423, 0,
+ /*   fff0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   fff8 */  0, 0, 0, 0, 0, 0, 0, 0
+ };
+ 
++static const uint16_t UNWIF_compat_01_07 [256] = {
++/* 010700 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010708 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010710 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010718 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010720 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010728 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010730 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010738 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010740 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010748 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010750 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010758 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010760 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010768 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010770 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010778 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010780 */  0, TBL(1)|163, TBL(1)|164, TBL(1)|68, TBL(1)|146, TBL(1)|87, 0, TBL(1)|153,
++/* 010788 */  TBL(1)|1568, TBL(1)|155, TBL(1)|154, TBL(1)|90, TBL(1)|91, TBL(1)|408, TBL(1)|92, TBL(1)|96,
++/* 010790 */  TBL(1)|159, TBL(1)|102, TBL(1)|100, TBL(1)|98, TBL(1)|147, TBL(1)|72, TBL(1)|148, TBL(1)|105,
++/* 010798 */  TBL(1)|132, TBL(1)|160, TBL(1)|161, TBL(1)|110, TBL(2)|926, TBL(1)|1565, TBL(1)|112, TBL(2)|927,
++/* 0107a0 */  TBL(1)|139, TBL(2)|928, TBL(1)|70, TBL(1)|120, TBL(1)|121, TBL(1)|1590, TBL(1)|124, TBL(2)|929,
++/* 0107a8 */  TBL(1)|126, TBL(1)|127, TBL(1)|128, TBL(1)|158, TBL(1)|156, TBL(1)|1569, TBL(1)|157, TBL(1)|133,
++/* 0107b0 */  TBL(1)|426, 0, TBL(1)|140, TBL(1)|151, TBL(1)|152, TBL(1)|145, TBL(1)|79, TBL(1)|80,
++/* 0107b8 */  TBL(1)|81, TBL(2)|930, TBL(2)|931, 0, 0, 0, 0, 0,
++/* 0107c0 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 0107c8 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 0107d0 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 0107d8 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 0107e0 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 0107e8 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 0107f0 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 0107f8 */  0, 0, 0, 0, 0, 0, 0, 0
++};
++
+ static const uint16_t UNWIF_compat_01_10 [256] = {
+ /* 011000 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 011008 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -2282,134 +2324,134 @@ static const uint16_t UNWIF_compat_01_d4 [256] = {
+ /* 01d400 */  TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32,
+ /* 01d408 */  TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36, TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40,
+ /* 01d410 */  TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48,
+-/* 01d418 */  TBL(1)|49, TBL(1)|50, TBL(1)|1526, TBL(1)|1527, TBL(1)|1528, TBL(1)|1529, TBL(1)|1530, TBL(1)|1531,
+-/* 01d420 */  TBL(1)|1532, TBL(1)|1533, TBL(1)|1534, TBL(1)|1535, TBL(1)|1536, TBL(1)|1537, TBL(1)|1538, TBL(1)|1539,
+-/* 01d428 */  TBL(1)|1540, TBL(1)|1541, TBL(1)|1542, TBL(1)|1543, TBL(1)|1544, TBL(1)|1545, TBL(1)|1546, TBL(1)|1547,
+-/* 01d430 */  TBL(1)|1548, TBL(1)|1549, TBL(1)|1550, TBL(1)|1551, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28,
++/* 01d418 */  TBL(1)|49, TBL(1)|50, TBL(1)|1574, TBL(1)|1575, TBL(1)|1576, TBL(1)|1577, TBL(1)|1578, TBL(1)|1579,
++/* 01d420 */  TBL(1)|1580, TBL(1)|1581, TBL(1)|1582, TBL(1)|1583, TBL(1)|1584, TBL(1)|1585, TBL(1)|1586, TBL(1)|1587,
++/* 01d428 */  TBL(1)|1588, TBL(1)|1589, TBL(1)|1590, TBL(1)|1591, TBL(1)|1592, TBL(1)|1593, TBL(1)|1594, TBL(1)|1595,
++/* 01d430 */  TBL(1)|1596, TBL(1)|1597, TBL(1)|1598, TBL(1)|1599, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28,
+ /* 01d438 */  TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32, TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36,
+ /* 01d440 */  TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40, TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44,
+-/* 01d448 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1526, TBL(1)|1527,
+-/* 01d450 */  TBL(1)|1528, TBL(1)|1529, TBL(1)|1530, TBL(1)|1531, TBL(1)|1532, 0, TBL(1)|1534, TBL(1)|1535,
+-/* 01d458 */  TBL(1)|1536, TBL(1)|1537, TBL(1)|1538, TBL(1)|1539, TBL(1)|1540, TBL(1)|1541, TBL(1)|1542, TBL(1)|1543,
+-/* 01d460 */  TBL(1)|1544, TBL(1)|1545, TBL(1)|1546, TBL(1)|1547, TBL(1)|1548, TBL(1)|1549, TBL(1)|1550, TBL(1)|1551,
++/* 01d448 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1574, TBL(1)|1575,
++/* 01d450 */  TBL(1)|1576, TBL(1)|1577, TBL(1)|1578, TBL(1)|1579, TBL(1)|1580, 0, TBL(1)|1582, TBL(1)|1583,
++/* 01d458 */  TBL(1)|1584, TBL(1)|1585, TBL(1)|1586, TBL(1)|1587, TBL(1)|1588, TBL(1)|1589, TBL(1)|1590, TBL(1)|1591,
++/* 01d460 */  TBL(1)|1592, TBL(1)|1593, TBL(1)|1594, TBL(1)|1595, TBL(1)|1596, TBL(1)|1597, TBL(1)|1598, TBL(1)|1599,
+ /* 01d468 */  TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32,
+ /* 01d470 */  TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36, TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40,
+ /* 01d478 */  TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48,
+-/* 01d480 */  TBL(1)|49, TBL(1)|50, TBL(1)|1526, TBL(1)|1527, TBL(1)|1528, TBL(1)|1529, TBL(1)|1530, TBL(1)|1531,
+-/* 01d488 */  TBL(1)|1532, TBL(1)|1533, TBL(1)|1534, TBL(1)|1535, TBL(1)|1536, TBL(1)|1537, TBL(1)|1538, TBL(1)|1539,
+-/* 01d490 */  TBL(1)|1540, TBL(1)|1541, TBL(1)|1542, TBL(1)|1543, TBL(1)|1544, TBL(1)|1545, TBL(1)|1546, TBL(1)|1547,
+-/* 01d498 */  TBL(1)|1548, TBL(1)|1549, TBL(1)|1550, TBL(1)|1551, TBL(1)|25, 0, TBL(1)|27, TBL(1)|28,
++/* 01d480 */  TBL(1)|49, TBL(1)|50, TBL(1)|1574, TBL(1)|1575, TBL(1)|1576, TBL(1)|1577, TBL(1)|1578, TBL(1)|1579,
++/* 01d488 */  TBL(1)|1580, TBL(1)|1581, TBL(1)|1582, TBL(1)|1583, TBL(1)|1584, TBL(1)|1585, TBL(1)|1586, TBL(1)|1587,
++/* 01d490 */  TBL(1)|1588, TBL(1)|1589, TBL(1)|1590, TBL(1)|1591, TBL(1)|1592, TBL(1)|1593, TBL(1)|1594, TBL(1)|1595,
++/* 01d498 */  TBL(1)|1596, TBL(1)|1597, TBL(1)|1598, TBL(1)|1599, TBL(1)|25, 0, TBL(1)|27, TBL(1)|28,
+ /* 01d4a0 */  0, 0, TBL(1)|31, 0, 0, TBL(1)|34, TBL(1)|35, 0,
+ /* 01d4a8 */  0, TBL(1)|38, TBL(1)|39, TBL(1)|40, TBL(1)|41, 0, TBL(1)|43, TBL(1)|44,
+-/* 01d4b0 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1526, TBL(1)|1527,
+-/* 01d4b8 */  TBL(1)|1528, TBL(1)|1529, 0, TBL(1)|1531, 0, TBL(1)|1533, TBL(1)|1534, TBL(1)|1535,
+-/* 01d4c0 */  TBL(1)|1536, TBL(1)|1537, TBL(1)|1538, TBL(1)|1539, 0, TBL(1)|1541, TBL(1)|1542, TBL(1)|1543,
+-/* 01d4c8 */  TBL(1)|1544, TBL(1)|1545, TBL(1)|1546, TBL(1)|1547, TBL(1)|1548, TBL(1)|1549, TBL(1)|1550, TBL(1)|1551,
++/* 01d4b0 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1574, TBL(1)|1575,
++/* 01d4b8 */  TBL(1)|1576, TBL(1)|1577, 0, TBL(1)|1579, 0, TBL(1)|1581, TBL(1)|1582, TBL(1)|1583,
++/* 01d4c0 */  TBL(1)|1584, TBL(1)|1585, TBL(1)|1586, TBL(1)|1587, 0, TBL(1)|1589, TBL(1)|1590, TBL(1)|1591,
++/* 01d4c8 */  TBL(1)|1592, TBL(1)|1593, TBL(1)|1594, TBL(1)|1595, TBL(1)|1596, TBL(1)|1597, TBL(1)|1598, TBL(1)|1599,
+ /* 01d4d0 */  TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32,
+ /* 01d4d8 */  TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36, TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40,
+ /* 01d4e0 */  TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48,
+-/* 01d4e8 */  TBL(1)|49, TBL(1)|50, TBL(1)|1526, TBL(1)|1527, TBL(1)|1528, TBL(1)|1529, TBL(1)|1530, TBL(1)|1531,
+-/* 01d4f0 */  TBL(1)|1532, TBL(1)|1533, TBL(1)|1534, TBL(1)|1535, TBL(1)|1536, TBL(1)|1537, TBL(1)|1538, TBL(1)|1539,
+-/* 01d4f8 */  TBL(1)|1540, TBL(1)|1541, TBL(1)|1542, TBL(1)|1543, TBL(1)|1544, TBL(1)|1545, TBL(1)|1546, TBL(1)|1547
++/* 01d4e8 */  TBL(1)|49, TBL(1)|50, TBL(1)|1574, TBL(1)|1575, TBL(1)|1576, TBL(1)|1577, TBL(1)|1578, TBL(1)|1579,
++/* 01d4f0 */  TBL(1)|1580, TBL(1)|1581, TBL(1)|1582, TBL(1)|1583, TBL(1)|1584, TBL(1)|1585, TBL(1)|1586, TBL(1)|1587,
++/* 01d4f8 */  TBL(1)|1588, TBL(1)|1589, TBL(1)|1590, TBL(1)|1591, TBL(1)|1592, TBL(1)|1593, TBL(1)|1594, TBL(1)|1595
+ };
+ 
+ static const uint16_t UNWIF_compat_01_d5 [256] = {
+-/* 01d500 */  TBL(1)|1548, TBL(1)|1549, TBL(1)|1550, TBL(1)|1551, TBL(1)|25, TBL(1)|26, 0, TBL(1)|28,
++/* 01d500 */  TBL(1)|1596, TBL(1)|1597, TBL(1)|1598, TBL(1)|1599, TBL(1)|25, TBL(1)|26, 0, TBL(1)|28,
+ /* 01d508 */  TBL(1)|29, TBL(1)|30, TBL(1)|31, 0, 0, TBL(1)|34, TBL(1)|35, TBL(1)|36,
+ /* 01d510 */  TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40, TBL(1)|41, 0, TBL(1)|43, TBL(1)|44,
+-/* 01d518 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, 0, TBL(1)|1526, TBL(1)|1527,
+-/* 01d520 */  TBL(1)|1528, TBL(1)|1529, TBL(1)|1530, TBL(1)|1531, TBL(1)|1532, TBL(1)|1533, TBL(1)|1534, TBL(1)|1535,
+-/* 01d528 */  TBL(1)|1536, TBL(1)|1537, TBL(1)|1538, TBL(1)|1539, TBL(1)|1540, TBL(1)|1541, TBL(1)|1542, TBL(1)|1543,
+-/* 01d530 */  TBL(1)|1544, TBL(1)|1545, TBL(1)|1546, TBL(1)|1547, TBL(1)|1548, TBL(1)|1549, TBL(1)|1550, TBL(1)|1551,
++/* 01d518 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, 0, TBL(1)|1574, TBL(1)|1575,
++/* 01d520 */  TBL(1)|1576, TBL(1)|1577, TBL(1)|1578, TBL(1)|1579, TBL(1)|1580, TBL(1)|1581, TBL(1)|1582, TBL(1)|1583,
++/* 01d528 */  TBL(1)|1584, TBL(1)|1585, TBL(1)|1586, TBL(1)|1587, TBL(1)|1588, TBL(1)|1589, TBL(1)|1590, TBL(1)|1591,
++/* 01d530 */  TBL(1)|1592, TBL(1)|1593, TBL(1)|1594, TBL(1)|1595, TBL(1)|1596, TBL(1)|1597, TBL(1)|1598, TBL(1)|1599,
+ /* 01d538 */  TBL(1)|25, TBL(1)|26, 0, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31, 0,
+ /* 01d540 */  TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36, TBL(1)|37, 0, TBL(1)|39, 0,
+ /* 01d548 */  0, 0, TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48,
+-/* 01d550 */  TBL(1)|49, 0, TBL(1)|1526, TBL(1)|1527, TBL(1)|1528, TBL(1)|1529, TBL(1)|1530, TBL(1)|1531,
+-/* 01d558 */  TBL(1)|1532, TBL(1)|1533, TBL(1)|1534, TBL(1)|1535, TBL(1)|1536, TBL(1)|1537, TBL(1)|1538, TBL(1)|1539,
+-/* 01d560 */  TBL(1)|1540, TBL(1)|1541, TBL(1)|1542, TBL(1)|1543, TBL(1)|1544, TBL(1)|1545, TBL(1)|1546, TBL(1)|1547,
+-/* 01d568 */  TBL(1)|1548, TBL(1)|1549, TBL(1)|1550, TBL(1)|1551, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28,
++/* 01d550 */  TBL(1)|49, 0, TBL(1)|1574, TBL(1)|1575, TBL(1)|1576, TBL(1)|1577, TBL(1)|1578, TBL(1)|1579,
++/* 01d558 */  TBL(1)|1580, TBL(1)|1581, TBL(1)|1582, TBL(1)|1583, TBL(1)|1584, TBL(1)|1585, TBL(1)|1586, TBL(1)|1587,
++/* 01d560 */  TBL(1)|1588, TBL(1)|1589, TBL(1)|1590, TBL(1)|1591, TBL(1)|1592, TBL(1)|1593, TBL(1)|1594, TBL(1)|1595,
++/* 01d568 */  TBL(1)|1596, TBL(1)|1597, TBL(1)|1598, TBL(1)|1599, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28,
+ /* 01d570 */  TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32, TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36,
+ /* 01d578 */  TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40, TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44,
+-/* 01d580 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1526, TBL(1)|1527,
+-/* 01d588 */  TBL(1)|1528, TBL(1)|1529, TBL(1)|1530, TBL(1)|1531, TBL(1)|1532, TBL(1)|1533, TBL(1)|1534, TBL(1)|1535,
+-/* 01d590 */  TBL(1)|1536, TBL(1)|1537, TBL(1)|1538, TBL(1)|1539, TBL(1)|1540, TBL(1)|1541, TBL(1)|1542, TBL(1)|1543,
+-/* 01d598 */  TBL(1)|1544, TBL(1)|1545, TBL(1)|1546, TBL(1)|1547, TBL(1)|1548, TBL(1)|1549, TBL(1)|1550, TBL(1)|1551,
++/* 01d580 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1574, TBL(1)|1575,
++/* 01d588 */  TBL(1)|1576, TBL(1)|1577, TBL(1)|1578, TBL(1)|1579, TBL(1)|1580, TBL(1)|1581, TBL(1)|1582, TBL(1)|1583,
++/* 01d590 */  TBL(1)|1584, TBL(1)|1585, TBL(1)|1586, TBL(1)|1587, TBL(1)|1588, TBL(1)|1589, TBL(1)|1590, TBL(1)|1591,
++/* 01d598 */  TBL(1)|1592, TBL(1)|1593, TBL(1)|1594, TBL(1)|1595, TBL(1)|1596, TBL(1)|1597, TBL(1)|1598, TBL(1)|1599,
+ /* 01d5a0 */  TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32,
+ /* 01d5a8 */  TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36, TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40,
+ /* 01d5b0 */  TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48,
+-/* 01d5b8 */  TBL(1)|49, TBL(1)|50, TBL(1)|1526, TBL(1)|1527, TBL(1)|1528, TBL(1)|1529, TBL(1)|1530, TBL(1)|1531,
+-/* 01d5c0 */  TBL(1)|1532, TBL(1)|1533, TBL(1)|1534, TBL(1)|1535, TBL(1)|1536, TBL(1)|1537, TBL(1)|1538, TBL(1)|1539,
+-/* 01d5c8 */  TBL(1)|1540, TBL(1)|1541, TBL(1)|1542, TBL(1)|1543, TBL(1)|1544, TBL(1)|1545, TBL(1)|1546, TBL(1)|1547,
+-/* 01d5d0 */  TBL(1)|1548, TBL(1)|1549, TBL(1)|1550, TBL(1)|1551, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28,
++/* 01d5b8 */  TBL(1)|49, TBL(1)|50, TBL(1)|1574, TBL(1)|1575, TBL(1)|1576, TBL(1)|1577, TBL(1)|1578, TBL(1)|1579,
++/* 01d5c0 */  TBL(1)|1580, TBL(1)|1581, TBL(1)|1582, TBL(1)|1583, TBL(1)|1584, TBL(1)|1585, TBL(1)|1586, TBL(1)|1587,
++/* 01d5c8 */  TBL(1)|1588, TBL(1)|1589, TBL(1)|1590, TBL(1)|1591, TBL(1)|1592, TBL(1)|1593, TBL(1)|1594, TBL(1)|1595,
++/* 01d5d0 */  TBL(1)|1596, TBL(1)|1597, TBL(1)|1598, TBL(1)|1599, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28,
+ /* 01d5d8 */  TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32, TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36,
+ /* 01d5e0 */  TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40, TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44,
+-/* 01d5e8 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1526, TBL(1)|1527,
+-/* 01d5f0 */  TBL(1)|1528, TBL(1)|1529, TBL(1)|1530, TBL(1)|1531, TBL(1)|1532, TBL(1)|1533, TBL(1)|1534, TBL(1)|1535,
+-/* 01d5f8 */  TBL(1)|1536, TBL(1)|1537, TBL(1)|1538, TBL(1)|1539, TBL(1)|1540, TBL(1)|1541, TBL(1)|1542, TBL(1)|1543
++/* 01d5e8 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1574, TBL(1)|1575,
++/* 01d5f0 */  TBL(1)|1576, TBL(1)|1577, TBL(1)|1578, TBL(1)|1579, TBL(1)|1580, TBL(1)|1581, TBL(1)|1582, TBL(1)|1583,
++/* 01d5f8 */  TBL(1)|1584, TBL(1)|1585, TBL(1)|1586, TBL(1)|1587, TBL(1)|1588, TBL(1)|1589, TBL(1)|1590, TBL(1)|1591
+ };
+ 
+ static const uint16_t UNWIF_compat_01_d6 [256] = {
+-/* 01d600 */  TBL(1)|1544, TBL(1)|1545, TBL(1)|1546, TBL(1)|1547, TBL(1)|1548, TBL(1)|1549, TBL(1)|1550, TBL(1)|1551,
++/* 01d600 */  TBL(1)|1592, TBL(1)|1593, TBL(1)|1594, TBL(1)|1595, TBL(1)|1596, TBL(1)|1597, TBL(1)|1598, TBL(1)|1599,
+ /* 01d608 */  TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32,
+ /* 01d610 */  TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36, TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40,
+ /* 01d618 */  TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48,
+-/* 01d620 */  TBL(1)|49, TBL(1)|50, TBL(1)|1526, TBL(1)|1527, TBL(1)|1528, TBL(1)|1529, TBL(1)|1530, TBL(1)|1531,
+-/* 01d628 */  TBL(1)|1532, TBL(1)|1533, TBL(1)|1534, TBL(1)|1535, TBL(1)|1536, TBL(1)|1537, TBL(1)|1538, TBL(1)|1539,
+-/* 01d630 */  TBL(1)|1540, TBL(1)|1541, TBL(1)|1542, TBL(1)|1543, TBL(1)|1544, TBL(1)|1545, TBL(1)|1546, TBL(1)|1547,
+-/* 01d638 */  TBL(1)|1548, TBL(1)|1549, TBL(1)|1550, TBL(1)|1551, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28,
++/* 01d620 */  TBL(1)|49, TBL(1)|50, TBL(1)|1574, TBL(1)|1575, TBL(1)|1576, TBL(1)|1577, TBL(1)|1578, TBL(1)|1579,
++/* 01d628 */  TBL(1)|1580, TBL(1)|1581, TBL(1)|1582, TBL(1)|1583, TBL(1)|1584, TBL(1)|1585, TBL(1)|1586, TBL(1)|1587,
++/* 01d630 */  TBL(1)|1588, TBL(1)|1589, TBL(1)|1590, TBL(1)|1591, TBL(1)|1592, TBL(1)|1593, TBL(1)|1594, TBL(1)|1595,
++/* 01d638 */  TBL(1)|1596, TBL(1)|1597, TBL(1)|1598, TBL(1)|1599, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28,
+ /* 01d640 */  TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32, TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36,
+ /* 01d648 */  TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40, TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44,
+-/* 01d650 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1526, TBL(1)|1527,
+-/* 01d658 */  TBL(1)|1528, TBL(1)|1529, TBL(1)|1530, TBL(1)|1531, TBL(1)|1532, TBL(1)|1533, TBL(1)|1534, TBL(1)|1535,
+-/* 01d660 */  TBL(1)|1536, TBL(1)|1537, TBL(1)|1538, TBL(1)|1539, TBL(1)|1540, TBL(1)|1541, TBL(1)|1542, TBL(1)|1543,
+-/* 01d668 */  TBL(1)|1544, TBL(1)|1545, TBL(1)|1546, TBL(1)|1547, TBL(1)|1548, TBL(1)|1549, TBL(1)|1550, TBL(1)|1551,
++/* 01d650 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1574, TBL(1)|1575,
++/* 01d658 */  TBL(1)|1576, TBL(1)|1577, TBL(1)|1578, TBL(1)|1579, TBL(1)|1580, TBL(1)|1581, TBL(1)|1582, TBL(1)|1583,
++/* 01d660 */  TBL(1)|1584, TBL(1)|1585, TBL(1)|1586, TBL(1)|1587, TBL(1)|1588, TBL(1)|1589, TBL(1)|1590, TBL(1)|1591,
++/* 01d668 */  TBL(1)|1592, TBL(1)|1593, TBL(1)|1594, TBL(1)|1595, TBL(1)|1596, TBL(1)|1597, TBL(1)|1598, TBL(1)|1599,
+ /* 01d670 */  TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32,
+ /* 01d678 */  TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36, TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40,
+ /* 01d680 */  TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48,
+-/* 01d688 */  TBL(1)|49, TBL(1)|50, TBL(1)|1526, TBL(1)|1527, TBL(1)|1528, TBL(1)|1529, TBL(1)|1530, TBL(1)|1531,
+-/* 01d690 */  TBL(1)|1532, TBL(1)|1533, TBL(1)|1534, TBL(1)|1535, TBL(1)|1536, TBL(1)|1537, TBL(1)|1538, TBL(1)|1539,
+-/* 01d698 */  TBL(1)|1540, TBL(1)|1541, TBL(1)|1542, TBL(1)|1543, TBL(1)|1544, TBL(1)|1545, TBL(1)|1546, TBL(1)|1547,
+-/* 01d6a0 */  TBL(1)|1548, TBL(1)|1549, TBL(1)|1550, TBL(1)|1551, TBL(1)|71, TBL(1)|78, 0, 0,
+-/* 01d6a8 */  TBL(1)|125, TBL(1)|126, TBL(1)|127, TBL(1)|128, TBL(1)|129, TBL(1)|130, TBL(1)|131, TBL(1)|132,
+-/* 01d6b0 */  TBL(1)|133, TBL(1)|134, TBL(1)|135, TBL(1)|136, TBL(1)|137, TBL(1)|138, TBL(1)|139, TBL(1)|140,
+-/* 01d6b8 */  TBL(1)|141, TBL(1)|132, TBL(1)|142, TBL(1)|143, TBL(1)|144, TBL(1)|145, TBL(1)|146, TBL(1)|147,
+-/* 01d6c0 */  TBL(1)|148, TBL(1)|374, TBL(1)|149, TBL(1)|150, TBL(1)|151, TBL(1)|152, TBL(1)|153, TBL(1)|154,
+-/* 01d6c8 */  TBL(1)|155, TBL(1)|156, TBL(1)|157, TBL(1)|158, TBL(1)|159, TBL(1)|160, TBL(1)|161, TBL(1)|162,
+-/* 01d6d0 */  TBL(1)|163, TBL(1)|164, TBL(1)|165, TBL(1)|166, TBL(1)|167, TBL(1)|168, TBL(1)|169, TBL(1)|170,
+-/* 01d6d8 */  TBL(1)|171, TBL(1)|172, TBL(1)|173, TBL(1)|373, TBL(1)|153, TBL(1)|156, TBL(1)|158, TBL(1)|170,
+-/* 01d6e0 */  TBL(1)|165, TBL(1)|164, TBL(1)|125, TBL(1)|126, TBL(1)|127, TBL(1)|128, TBL(1)|129, TBL(1)|130,
+-/* 01d6e8 */  TBL(1)|131, TBL(1)|132, TBL(1)|133, TBL(1)|134, TBL(1)|135, TBL(1)|136, TBL(1)|137, TBL(1)|138,
+-/* 01d6f0 */  TBL(1)|139, TBL(1)|140, TBL(1)|141, TBL(1)|132, TBL(1)|142, TBL(1)|143, TBL(1)|144, TBL(1)|145,
+-/* 01d6f8 */  TBL(1)|146, TBL(1)|147, TBL(1)|148, TBL(1)|374, TBL(1)|149, TBL(1)|150, TBL(1)|151, TBL(1)|152
++/* 01d688 */  TBL(1)|49, TBL(1)|50, TBL(1)|1574, TBL(1)|1575, TBL(1)|1576, TBL(1)|1577, TBL(1)|1578, TBL(1)|1579,
++/* 01d690 */  TBL(1)|1580, TBL(1)|1581, TBL(1)|1582, TBL(1)|1583, TBL(1)|1584, TBL(1)|1585, TBL(1)|1586, TBL(1)|1587,
++/* 01d698 */  TBL(1)|1588, TBL(1)|1589, TBL(1)|1590, TBL(1)|1591, TBL(1)|1592, TBL(1)|1593, TBL(1)|1594, TBL(1)|1595,
++/* 01d6a0 */  TBL(1)|1596, TBL(1)|1597, TBL(1)|1598, TBL(1)|1599, TBL(1)|73, TBL(1)|83, 0, 0,
++/* 01d6a8 */  TBL(1)|168, TBL(1)|169, TBL(1)|170, TBL(1)|171, TBL(1)|172, TBL(1)|173, TBL(1)|174, TBL(1)|175,
++/* 01d6b0 */  TBL(1)|176, TBL(1)|177, TBL(1)|178, TBL(1)|179, TBL(1)|180, TBL(1)|181, TBL(1)|182, TBL(1)|183,
++/* 01d6b8 */  TBL(1)|184, TBL(1)|175, TBL(1)|185, TBL(1)|186, TBL(1)|187, TBL(1)|188, TBL(1)|189, TBL(1)|190,
++/* 01d6c0 */  TBL(1)|191, TBL(1)|418, TBL(1)|192, TBL(1)|193, TBL(1)|194, TBL(1)|195, TBL(1)|196, TBL(1)|197,
++/* 01d6c8 */  TBL(1)|198, TBL(1)|199, TBL(1)|200, TBL(1)|201, TBL(1)|202, TBL(1)|203, TBL(1)|204, TBL(1)|205,
++/* 01d6d0 */  TBL(1)|206, TBL(1)|207, TBL(1)|208, TBL(1)|209, TBL(1)|210, TBL(1)|211, TBL(1)|212, TBL(1)|213,
++/* 01d6d8 */  TBL(1)|214, TBL(1)|215, TBL(1)|216, TBL(1)|417, TBL(1)|196, TBL(1)|199, TBL(1)|201, TBL(1)|213,
++/* 01d6e0 */  TBL(1)|208, TBL(1)|207, TBL(1)|168, TBL(1)|169, TBL(1)|170, TBL(1)|171, TBL(1)|172, TBL(1)|173,
++/* 01d6e8 */  TBL(1)|174, TBL(1)|175, TBL(1)|176, TBL(1)|177, TBL(1)|178, TBL(1)|179, TBL(1)|180, TBL(1)|181,
++/* 01d6f0 */  TBL(1)|182, TBL(1)|183, TBL(1)|184, TBL(1)|175, TBL(1)|185, TBL(1)|186, TBL(1)|187, TBL(1)|188,
++/* 01d6f8 */  TBL(1)|189, TBL(1)|190, TBL(1)|191, TBL(1)|418, TBL(1)|192, TBL(1)|193, TBL(1)|194, TBL(1)|195
+ };
+ 
+ static const uint16_t UNWIF_compat_01_d7 [256] = {
+-/* 01d700 */  TBL(1)|153, TBL(1)|154, TBL(1)|155, TBL(1)|156, TBL(1)|157, TBL(1)|158, TBL(1)|159, TBL(1)|160,
+-/* 01d708 */  TBL(1)|161, TBL(1)|162, TBL(1)|163, TBL(1)|164, TBL(1)|165, TBL(1)|166, TBL(1)|167, TBL(1)|168,
+-/* 01d710 */  TBL(1)|169, TBL(1)|170, TBL(1)|171, TBL(1)|172, TBL(1)|173, TBL(1)|373, TBL(1)|153, TBL(1)|156,
+-/* 01d718 */  TBL(1)|158, TBL(1)|170, TBL(1)|165, TBL(1)|164, TBL(1)|125, TBL(1)|126, TBL(1)|127, TBL(1)|128,
+-/* 01d720 */  TBL(1)|129, TBL(1)|130, TBL(1)|131, TBL(1)|132, TBL(1)|133, TBL(1)|134, TBL(1)|135, TBL(1)|136,
+-/* 01d728 */  TBL(1)|137, TBL(1)|138, TBL(1)|139, TBL(1)|140, TBL(1)|141, TBL(1)|132, TBL(1)|142, TBL(1)|143,
+-/* 01d730 */  TBL(1)|144, TBL(1)|145, TBL(1)|146, TBL(1)|147, TBL(1)|148, TBL(1)|374, TBL(1)|149, TBL(1)|150,
+-/* 01d738 */  TBL(1)|151, TBL(1)|152, TBL(1)|153, TBL(1)|154, TBL(1)|155, TBL(1)|156, TBL(1)|157, TBL(1)|158,
+-/* 01d740 */  TBL(1)|159, TBL(1)|160, TBL(1)|161, TBL(1)|162, TBL(1)|163, TBL(1)|164, TBL(1)|165, TBL(1)|166,
+-/* 01d748 */  TBL(1)|167, TBL(1)|168, TBL(1)|169, TBL(1)|170, TBL(1)|171, TBL(1)|172, TBL(1)|173, TBL(1)|373,
+-/* 01d750 */  TBL(1)|153, TBL(1)|156, TBL(1)|158, TBL(1)|170, TBL(1)|165, TBL(1)|164, TBL(1)|125, TBL(1)|126,
+-/* 01d758 */  TBL(1)|127, TBL(1)|128, TBL(1)|129, TBL(1)|130, TBL(1)|131, TBL(1)|132, TBL(1)|133, TBL(1)|134,
+-/* 01d760 */  TBL(1)|135, TBL(1)|136, TBL(1)|137, TBL(1)|138, TBL(1)|139, TBL(1)|140, TBL(1)|141, TBL(1)|132,
+-/* 01d768 */  TBL(1)|142, TBL(1)|143, TBL(1)|144, TBL(1)|145, TBL(1)|146, TBL(1)|147, TBL(1)|148, TBL(1)|374,
+-/* 01d770 */  TBL(1)|149, TBL(1)|150, TBL(1)|151, TBL(1)|152, TBL(1)|153, TBL(1)|154, TBL(1)|155, TBL(1)|156,
+-/* 01d778 */  TBL(1)|157, TBL(1)|158, TBL(1)|159, TBL(1)|160, TBL(1)|161, TBL(1)|162, TBL(1)|163, TBL(1)|164,
+-/* 01d780 */  TBL(1)|165, TBL(1)|166, TBL(1)|167, TBL(1)|168, TBL(1)|169, TBL(1)|170, TBL(1)|171, TBL(1)|172,
+-/* 01d788 */  TBL(1)|173, TBL(1)|373, TBL(1)|153, TBL(1)|156, TBL(1)|158, TBL(1)|170, TBL(1)|165, TBL(1)|164,
+-/* 01d790 */  TBL(1)|125, TBL(1)|126, TBL(1)|127, TBL(1)|128, TBL(1)|129, TBL(1)|130, TBL(1)|131, TBL(1)|132,
+-/* 01d798 */  TBL(1)|133, TBL(1)|134, TBL(1)|135, TBL(1)|136, TBL(1)|137, TBL(1)|138, TBL(1)|139, TBL(1)|140,
+-/* 01d7a0 */  TBL(1)|141, TBL(1)|132, TBL(1)|142, TBL(1)|143, TBL(1)|144, TBL(1)|145, TBL(1)|146, TBL(1)|147,
+-/* 01d7a8 */  TBL(1)|148, TBL(1)|374, TBL(1)|149, TBL(1)|150, TBL(1)|151, TBL(1)|152, TBL(1)|153, TBL(1)|154,
+-/* 01d7b0 */  TBL(1)|155, TBL(1)|156, TBL(1)|157, TBL(1)|158, TBL(1)|159, TBL(1)|160, TBL(1)|161, TBL(1)|162,
+-/* 01d7b8 */  TBL(1)|163, TBL(1)|164, TBL(1)|165, TBL(1)|166, TBL(1)|167, TBL(1)|168, TBL(1)|169, TBL(1)|170,
+-/* 01d7c0 */  TBL(1)|171, TBL(1)|172, TBL(1)|173, TBL(1)|373, TBL(1)|153, TBL(1)|156, TBL(1)|158, TBL(1)|170,
+-/* 01d7c8 */  TBL(1)|165, TBL(1)|164, TBL(1)|174, TBL(1)|175, 0, 0, TBL(1)|8, TBL(1)|9,
++/* 01d700 */  TBL(1)|196, TBL(1)|197, TBL(1)|198, TBL(1)|199, TBL(1)|200, TBL(1)|201, TBL(1)|202, TBL(1)|203,
++/* 01d708 */  TBL(1)|204, TBL(1)|205, TBL(1)|206, TBL(1)|207, TBL(1)|208, TBL(1)|209, TBL(1)|210, TBL(1)|211,
++/* 01d710 */  TBL(1)|212, TBL(1)|213, TBL(1)|214, TBL(1)|215, TBL(1)|216, TBL(1)|417, TBL(1)|196, TBL(1)|199,
++/* 01d718 */  TBL(1)|201, TBL(1)|213, TBL(1)|208, TBL(1)|207, TBL(1)|168, TBL(1)|169, TBL(1)|170, TBL(1)|171,
++/* 01d720 */  TBL(1)|172, TBL(1)|173, TBL(1)|174, TBL(1)|175, TBL(1)|176, TBL(1)|177, TBL(1)|178, TBL(1)|179,
++/* 01d728 */  TBL(1)|180, TBL(1)|181, TBL(1)|182, TBL(1)|183, TBL(1)|184, TBL(1)|175, TBL(1)|185, TBL(1)|186,
++/* 01d730 */  TBL(1)|187, TBL(1)|188, TBL(1)|189, TBL(1)|190, TBL(1)|191, TBL(1)|418, TBL(1)|192, TBL(1)|193,
++/* 01d738 */  TBL(1)|194, TBL(1)|195, TBL(1)|196, TBL(1)|197, TBL(1)|198, TBL(1)|199, TBL(1)|200, TBL(1)|201,
++/* 01d740 */  TBL(1)|202, TBL(1)|203, TBL(1)|204, TBL(1)|205, TBL(1)|206, TBL(1)|207, TBL(1)|208, TBL(1)|209,
++/* 01d748 */  TBL(1)|210, TBL(1)|211, TBL(1)|212, TBL(1)|213, TBL(1)|214, TBL(1)|215, TBL(1)|216, TBL(1)|417,
++/* 01d750 */  TBL(1)|196, TBL(1)|199, TBL(1)|201, TBL(1)|213, TBL(1)|208, TBL(1)|207, TBL(1)|168, TBL(1)|169,
++/* 01d758 */  TBL(1)|170, TBL(1)|171, TBL(1)|172, TBL(1)|173, TBL(1)|174, TBL(1)|175, TBL(1)|176, TBL(1)|177,
++/* 01d760 */  TBL(1)|178, TBL(1)|179, TBL(1)|180, TBL(1)|181, TBL(1)|182, TBL(1)|183, TBL(1)|184, TBL(1)|175,
++/* 01d768 */  TBL(1)|185, TBL(1)|186, TBL(1)|187, TBL(1)|188, TBL(1)|189, TBL(1)|190, TBL(1)|191, TBL(1)|418,
++/* 01d770 */  TBL(1)|192, TBL(1)|193, TBL(1)|194, TBL(1)|195, TBL(1)|196, TBL(1)|197, TBL(1)|198, TBL(1)|199,
++/* 01d778 */  TBL(1)|200, TBL(1)|201, TBL(1)|202, TBL(1)|203, TBL(1)|204, TBL(1)|205, TBL(1)|206, TBL(1)|207,
++/* 01d780 */  TBL(1)|208, TBL(1)|209, TBL(1)|210, TBL(1)|211, TBL(1)|212, TBL(1)|213, TBL(1)|214, TBL(1)|215,
++/* 01d788 */  TBL(1)|216, TBL(1)|417, TBL(1)|196, TBL(1)|199, TBL(1)|201, TBL(1)|213, TBL(1)|208, TBL(1)|207,
++/* 01d790 */  TBL(1)|168, TBL(1)|169, TBL(1)|170, TBL(1)|171, TBL(1)|172, TBL(1)|173, TBL(1)|174, TBL(1)|175,
++/* 01d798 */  TBL(1)|176, TBL(1)|177, TBL(1)|178, TBL(1)|179, TBL(1)|180, TBL(1)|181, TBL(1)|182, TBL(1)|183,
++/* 01d7a0 */  TBL(1)|184, TBL(1)|175, TBL(1)|185, TBL(1)|186, TBL(1)|187, TBL(1)|188, TBL(1)|189, TBL(1)|190,
++/* 01d7a8 */  TBL(1)|191, TBL(1)|418, TBL(1)|192, TBL(1)|193, TBL(1)|194, TBL(1)|195, TBL(1)|196, TBL(1)|197,
++/* 01d7b0 */  TBL(1)|198, TBL(1)|199, TBL(1)|200, TBL(1)|201, TBL(1)|202, TBL(1)|203, TBL(1)|204, TBL(1)|205,
++/* 01d7b8 */  TBL(1)|206, TBL(1)|207, TBL(1)|208, TBL(1)|209, TBL(1)|210, TBL(1)|211, TBL(1)|212, TBL(1)|213,
++/* 01d7c0 */  TBL(1)|214, TBL(1)|215, TBL(1)|216, TBL(1)|417, TBL(1)|196, TBL(1)|199, TBL(1)|201, TBL(1)|213,
++/* 01d7c8 */  TBL(1)|208, TBL(1)|207, TBL(1)|217, TBL(1)|218, 0, 0, TBL(1)|8, TBL(1)|9,
+ /* 01d7d0 */  TBL(1)|10, TBL(1)|11, TBL(1)|12, TBL(1)|13, TBL(1)|14, TBL(1)|15, TBL(1)|16, TBL(1)|17,
+ /* 01d7d8 */  TBL(1)|8, TBL(1)|9, TBL(1)|10, TBL(1)|11, TBL(1)|12, TBL(1)|13, TBL(1)|14, TBL(1)|15,
+ /* 01d7e0 */  TBL(1)|16, TBL(1)|17, TBL(1)|8, TBL(1)|9, TBL(1)|10, TBL(1)|11, TBL(1)|12, TBL(1)|13,
+@@ -2419,30 +2461,30 @@ static const uint16_t UNWIF_compat_01_d7 [256] = {
+ };
+ 
+ static const uint16_t UNWIF_compat_01_ee [256] = {
+-/* 01ee00 */  TBL(1)|191, TBL(1)|192, TBL(1)|196, TBL(1)|199, 0, TBL(1)|218, TBL(1)|202, TBL(1)|197,
+-/* 01ee08 */  TBL(1)|207, TBL(1)|220, TBL(1)|213, TBL(1)|214, TBL(1)|215, TBL(1)|216, TBL(1)|203, TBL(1)|209,
+-/* 01ee10 */  TBL(1)|211, TBL(1)|205, TBL(1)|212, TBL(1)|201, TBL(1)|204, TBL(1)|194, TBL(1)|195, TBL(1)|198,
+-/* 01ee18 */  TBL(1)|200, TBL(1)|206, TBL(1)|208, TBL(1)|210, TBL(1)|221, TBL(1)|248, TBL(1)|240, TBL(1)|222,
+-/* 01ee20 */  0, TBL(1)|192, TBL(1)|196, 0, TBL(1)|217, 0, 0, TBL(1)|197,
+-/* 01ee28 */  0, TBL(1)|220, TBL(1)|213, TBL(1)|214, TBL(1)|215, TBL(1)|216, TBL(1)|203, TBL(1)|209,
+-/* 01ee30 */  TBL(1)|211, TBL(1)|205, TBL(1)|212, 0, TBL(1)|204, TBL(1)|194, TBL(1)|195, TBL(1)|198,
+-/* 01ee38 */  0, TBL(1)|206, 0, TBL(1)|210, 0, 0, 0, 0,
+-/* 01ee40 */  0, 0, TBL(1)|196, 0, 0, 0, 0, TBL(1)|197,
+-/* 01ee48 */  0, TBL(1)|220, 0, TBL(1)|214, 0, TBL(1)|216, TBL(1)|203, TBL(1)|209,
+-/* 01ee50 */  0, TBL(1)|205, TBL(1)|212, 0, TBL(1)|204, 0, 0, TBL(1)|198,
+-/* 01ee58 */  0, TBL(1)|206, 0, TBL(1)|210, 0, TBL(1)|248, 0, TBL(1)|222,
+-/* 01ee60 */  0, TBL(1)|192, TBL(1)|196, 0, TBL(1)|217, 0, 0, TBL(1)|197,
+-/* 01ee68 */  TBL(1)|207, TBL(1)|220, TBL(1)|213, 0, TBL(1)|215, TBL(1)|216, TBL(1)|203, TBL(1)|209,
+-/* 01ee70 */  TBL(1)|211, TBL(1)|205, TBL(1)|212, 0, TBL(1)|204, TBL(1)|194, TBL(1)|195, TBL(1)|198,
+-/* 01ee78 */  0, TBL(1)|206, TBL(1)|208, TBL(1)|210, TBL(1)|221, 0, TBL(1)|240, 0,
+-/* 01ee80 */  TBL(1)|191, TBL(1)|192, TBL(1)|196, TBL(1)|199, TBL(1)|217, TBL(1)|218, TBL(1)|202, TBL(1)|197,
+-/* 01ee88 */  TBL(1)|207, TBL(1)|220, 0, TBL(1)|214, TBL(1)|215, TBL(1)|216, TBL(1)|203, TBL(1)|209,
+-/* 01ee90 */  TBL(1)|211, TBL(1)|205, TBL(1)|212, TBL(1)|201, TBL(1)|204, TBL(1)|194, TBL(1)|195, TBL(1)|198,
+-/* 01ee98 */  TBL(1)|200, TBL(1)|206, TBL(1)|208, TBL(1)|210, 0, 0, 0, 0,
+-/* 01eea0 */  0, TBL(1)|192, TBL(1)|196, TBL(1)|199, 0, TBL(1)|218, TBL(1)|202, TBL(1)|197,
+-/* 01eea8 */  TBL(1)|207, TBL(1)|220, 0, TBL(1)|214, TBL(1)|215, TBL(1)|216, TBL(1)|203, TBL(1)|209,
+-/* 01eeb0 */  TBL(1)|211, TBL(1)|205, TBL(1)|212, TBL(1)|201, TBL(1)|204, TBL(1)|194, TBL(1)|195, TBL(1)|198,
+-/* 01eeb8 */  TBL(1)|200, TBL(1)|206, TBL(1)|208, TBL(1)|210, 0, 0, 0, 0,
++/* 01ee00 */  TBL(1)|234, TBL(1)|235, TBL(1)|239, TBL(1)|242, 0, TBL(1)|261, TBL(1)|245, TBL(1)|240,
++/* 01ee08 */  TBL(1)|250, TBL(1)|263, TBL(1)|256, TBL(1)|257, TBL(1)|258, TBL(1)|259, TBL(1)|246, TBL(1)|252,
++/* 01ee10 */  TBL(1)|254, TBL(1)|248, TBL(1)|255, TBL(1)|244, TBL(1)|247, TBL(1)|237, TBL(1)|238, TBL(1)|241,
++/* 01ee18 */  TBL(1)|243, TBL(1)|249, TBL(1)|251, TBL(1)|253, TBL(1)|264, TBL(1)|291, TBL(1)|283, TBL(1)|265,
++/* 01ee20 */  0, TBL(1)|235, TBL(1)|239, 0, TBL(1)|260, 0, 0, TBL(1)|240,
++/* 01ee28 */  0, TBL(1)|263, TBL(1)|256, TBL(1)|257, TBL(1)|258, TBL(1)|259, TBL(1)|246, TBL(1)|252,
++/* 01ee30 */  TBL(1)|254, TBL(1)|248, TBL(1)|255, 0, TBL(1)|247, TBL(1)|237, TBL(1)|238, TBL(1)|241,
++/* 01ee38 */  0, TBL(1)|249, 0, TBL(1)|253, 0, 0, 0, 0,
++/* 01ee40 */  0, 0, TBL(1)|239, 0, 0, 0, 0, TBL(1)|240,
++/* 01ee48 */  0, TBL(1)|263, 0, TBL(1)|257, 0, TBL(1)|259, TBL(1)|246, TBL(1)|252,
++/* 01ee50 */  0, TBL(1)|248, TBL(1)|255, 0, TBL(1)|247, 0, 0, TBL(1)|241,
++/* 01ee58 */  0, TBL(1)|249, 0, TBL(1)|253, 0, TBL(1)|291, 0, TBL(1)|265,
++/* 01ee60 */  0, TBL(1)|235, TBL(1)|239, 0, TBL(1)|260, 0, 0, TBL(1)|240,
++/* 01ee68 */  TBL(1)|250, TBL(1)|263, TBL(1)|256, 0, TBL(1)|258, TBL(1)|259, TBL(1)|246, TBL(1)|252,
++/* 01ee70 */  TBL(1)|254, TBL(1)|248, TBL(1)|255, 0, TBL(1)|247, TBL(1)|237, TBL(1)|238, TBL(1)|241,
++/* 01ee78 */  0, TBL(1)|249, TBL(1)|251, TBL(1)|253, TBL(1)|264, 0, TBL(1)|283, 0,
++/* 01ee80 */  TBL(1)|234, TBL(1)|235, TBL(1)|239, TBL(1)|242, TBL(1)|260, TBL(1)|261, TBL(1)|245, TBL(1)|240,
++/* 01ee88 */  TBL(1)|250, TBL(1)|263, 0, TBL(1)|257, TBL(1)|258, TBL(1)|259, TBL(1)|246, TBL(1)|252,
++/* 01ee90 */  TBL(1)|254, TBL(1)|248, TBL(1)|255, TBL(1)|244, TBL(1)|247, TBL(1)|237, TBL(1)|238, TBL(1)|241,
++/* 01ee98 */  TBL(1)|243, TBL(1)|249, TBL(1)|251, TBL(1)|253, 0, 0, 0, 0,
++/* 01eea0 */  0, TBL(1)|235, TBL(1)|239, TBL(1)|242, 0, TBL(1)|261, TBL(1)|245, TBL(1)|240,
++/* 01eea8 */  TBL(1)|250, TBL(1)|263, 0, TBL(1)|257, TBL(1)|258, TBL(1)|259, TBL(1)|246, TBL(1)|252,
++/* 01eeb0 */  TBL(1)|254, TBL(1)|248, TBL(1)|255, TBL(1)|244, TBL(1)|247, TBL(1)|237, TBL(1)|238, TBL(1)|241,
++/* 01eeb8 */  TBL(1)|243, TBL(1)|249, TBL(1)|251, TBL(1)|253, 0, 0, 0, 0,
+ /* 01eec0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 01eec8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 01eed0 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -2489,17 +2531,17 @@ static const uint16_t UNWIF_compat_01_f1 [256] = {
+ };
+ 
+ static const uint16_t UNWIF_compat_01_f2 [256] = {
+-/* 01f200 */  TBL(2)|876, TBL(2)|888, TBL(1)|417, 0, 0, 0, 0, 0,
++/* 01f200 */  TBL(2)|876, TBL(2)|888, TBL(1)|462, 0, 0, 0, 0, 0,
+ /* 01f208 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/* 01f210 */  TBL(1)|868, TBL(1)|754, TBL(1)|661, TBL(2)|898, TBL(1)|551, TBL(1)|732, TBL(1)|1324, TBL(1)|736,
+-/* 01f218 */  TBL(1)|554, TBL(1)|918, TBL(1)|1036, TBL(1)|908, TBL(1)|618, TBL(1)|827, TBL(1)|592, TBL(1)|910,
+-/* 01f220 */  TBL(1)|613, TBL(1)|1190, TBL(1)|1089, TBL(1)|1347, TBL(1)|725, TBL(1)|675, TBL(1)|1017, TBL(1)|871,
+-/* 01f228 */  TBL(1)|882, TBL(1)|528, TBL(1)|531, TBL(1)|1379, TBL(1)|791, TBL(1)|538, TBL(1)|668, TBL(1)|879,
+-/* 01f230 */  TBL(1)|1357, TBL(1)|869, TBL(1)|1148, TBL(1)|1163, TBL(1)|670, TBL(1)|1009, TBL(1)|931, TBL(1)|930,
+-/* 01f238 */  TBL(1)|1094, TBL(1)|619, TBL(1)|694, TBL(1)|1393, 0, 0, 0, 0,
++/* 01f210 */  TBL(1)|913, TBL(1)|799, TBL(1)|706, TBL(2)|898, TBL(1)|596, TBL(1)|777, TBL(1)|1369, TBL(1)|781,
++/* 01f218 */  TBL(1)|599, TBL(1)|963, TBL(1)|1081, TBL(1)|953, TBL(1)|663, TBL(1)|872, TBL(1)|637, TBL(1)|955,
++/* 01f220 */  TBL(1)|658, TBL(1)|1235, TBL(1)|1134, TBL(1)|1392, TBL(1)|770, TBL(1)|720, TBL(1)|1062, TBL(1)|916,
++/* 01f228 */  TBL(1)|927, TBL(1)|573, TBL(1)|576, TBL(1)|1424, TBL(1)|836, TBL(1)|583, TBL(1)|713, TBL(1)|924,
++/* 01f230 */  TBL(1)|1402, TBL(1)|914, TBL(1)|1193, TBL(1)|1208, TBL(1)|715, TBL(1)|1054, TBL(1)|976, TBL(1)|975,
++/* 01f238 */  TBL(1)|1139, TBL(1)|664, TBL(1)|739, TBL(1)|1438, 0, 0, 0, 0,
+ /* 01f240 */  TBL(3)|511, TBL(3)|505, TBL(3)|506, TBL(3)|508, TBL(3)|512, TBL(3)|509, TBL(3)|513, TBL(3)|507,
+ /* 01f248 */  TBL(3)|510, 0, 0, 0, 0, 0, 0, 0,
+-/* 01f250 */  TBL(1)|828, TBL(1)|666, 0, 0, 0, 0, 0, 0,
++/* 01f250 */  TBL(1)|873, TBL(1)|711, 0, 0, 0, 0, 0, 0,
+ /* 01f258 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 01f260 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 01f268 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -2559,80 +2601,80 @@ static const uint16_t UNWIF_compat_01_fb [256] = {
+ };
+ 
+ static const uint16_t UNWIF_compat_02_f8 [256] = {
+-/* 02f800 */  TBL(1)|543, TBL(1)|541, TBL(1)|545, TBL(2)|926, TBL(1)|562, TBL(1)|566, TBL(1)|567, TBL(1)|569,
+-/* 02f808 */  TBL(1)|571, TBL(1)|572, TBL(1)|575, TBL(1)|573, TBL(1)|461, TBL(2)|930, TBL(1)|580, TBL(1)|581,
+-/* 02f810 */  TBL(1)|582, TBL(1)|589, TBL(2)|927, TBL(1)|462, TBL(1)|584, TBL(1)|592, TBL(2)|929, TBL(1)|596,
+-/* 02f818 */  TBL(1)|598, TBL(1)|558, TBL(1)|600, TBL(1)|601, TBL(2)|1024, TBL(1)|608, TBL(1)|610, TBL(1)|464,
+-/* 02f820 */  TBL(1)|616, TBL(1)|617, TBL(1)|619, TBL(1)|620, TBL(1)|465, TBL(1)|626, TBL(1)|627, TBL(1)|630,
+-/* 02f828 */  TBL(1)|633, TBL(1)|634, TBL(1)|635, TBL(1)|637, TBL(1)|645, TBL(1)|646, TBL(1)|648, TBL(1)|652,
+-/* 02f830 */  TBL(1)|654, TBL(1)|655, TBL(1)|655, TBL(1)|655, TBL(2)|933, TBL(1)|1029, TBL(1)|660, TBL(1)|662,
+-/* 02f838 */  TBL(2)|934, TBL(1)|665, TBL(1)|667, TBL(1)|669, TBL(1)|679, TBL(1)|674, TBL(1)|677, TBL(1)|678,
+-/* 02f840 */  TBL(1)|680, TBL(1)|682, TBL(1)|683, TBL(1)|685, TBL(1)|687, TBL(1)|688, TBL(1)|688, TBL(1)|690,
+-/* 02f848 */  TBL(1)|692, TBL(1)|693, TBL(1)|696, TBL(1)|705, TBL(1)|698, TBL(1)|706, TBL(1)|699, TBL(1)|701,
+-/* 02f850 */  TBL(1)|611, TBL(1)|724, TBL(1)|710, TBL(1)|711, TBL(1)|712, TBL(1)|709, TBL(1)|714, TBL(1)|713,
+-/* 02f858 */  TBL(1)|719, TBL(2)|935, TBL(1)|726, TBL(1)|727, TBL(1)|729, TBL(1)|732, TBL(1)|734, TBL(1)|741,
+-/* 02f860 */  TBL(2)|936, TBL(2)|937, TBL(1)|744, TBL(1)|745, TBL(1)|746, TBL(1)|743, TBL(1)|748, TBL(1)|466,
+-/* 02f868 */  TBL(1)|467, TBL(1)|750, TBL(1)|752, TBL(1)|752, TBL(2)|938, TBL(1)|759, TBL(1)|760, TBL(1)|761,
+-/* 02f870 */  TBL(1)|763, TBL(2)|939, TBL(1)|765, TBL(1)|766, TBL(1)|820, TBL(1)|768, TBL(1)|468, TBL(1)|771,
+-/* 02f878 */  TBL(1)|775, TBL(1)|778, TBL(1)|777, TBL(2)|941, TBL(1)|780, TBL(2)|942, TBL(1)|783, TBL(1)|782,
+-/* 02f880 */  TBL(1)|784, TBL(1)|788, TBL(1)|789, TBL(1)|469, TBL(1)|793, TBL(1)|795, TBL(1)|796, TBL(1)|797,
+-/* 02f888 */  TBL(1)|470, TBL(2)|943, TBL(1)|471, TBL(1)|804, TBL(1)|805, TBL(1)|806, TBL(1)|808, TBL(2)|1034,
+-/* 02f890 */  TBL(1)|814, TBL(2)|945, TBL(2)|945, TBL(1)|1238, TBL(1)|818, TBL(1)|818, TBL(1)|472, TBL(2)|952,
+-/* 02f898 */  TBL(2)|994, TBL(1)|822, TBL(1)|824, TBL(1)|473, TBL(1)|829, TBL(1)|833, TBL(1)|834, TBL(1)|836,
+-/* 02f8a0 */  TBL(1)|840, TBL(1)|475, TBL(1)|474, TBL(1)|841, TBL(2)|946, TBL(1)|842, TBL(1)|847, TBL(1)|848,
+-/* 02f8a8 */  TBL(1)|849, TBL(1)|848, TBL(1)|852, TBL(1)|853, TBL(1)|857, TBL(1)|855, TBL(1)|856, TBL(1)|858,
+-/* 02f8b0 */  TBL(1)|859, TBL(1)|860, TBL(1)|863, TBL(1)|864, TBL(1)|870, TBL(1)|872, TBL(1)|876, TBL(1)|881,
+-/* 02f8b8 */  TBL(2)|949, TBL(1)|880, TBL(1)|877, TBL(1)|883, TBL(1)|885, TBL(1)|890, TBL(2)|950, TBL(1)|892,
+-/* 02f8c0 */  TBL(1)|889, TBL(1)|887, TBL(1)|476, TBL(1)|894, TBL(1)|896, TBL(1)|898, TBL(1)|895, TBL(1)|477,
+-/* 02f8c8 */  TBL(1)|902, TBL(1)|904, TBL(2)|951, TBL(1)|915, TBL(1)|928, TBL(1)|919, TBL(1)|480, TBL(1)|922,
+-/* 02f8d0 */  TBL(1)|479, TBL(1)|478, TBL(1)|593, TBL(1)|594, TBL(1)|929, TBL(1)|923, TBL(1)|1227, TBL(1)|505,
+-/* 02f8d8 */  TBL(1)|932, TBL(1)|933, TBL(1)|934, TBL(1)|939, TBL(1)|937, TBL(2)|956, TBL(1)|481, TBL(1)|944,
+-/* 02f8e0 */  TBL(1)|941, TBL(1)|948, TBL(1)|950, TBL(2)|958, TBL(1)|951, TBL(1)|946, TBL(1)|953, TBL(1)|482,
+-/* 02f8e8 */  TBL(1)|954, TBL(1)|955, TBL(1)|956, TBL(1)|959, TBL(2)|959, TBL(1)|961, TBL(1)|483, TBL(1)|964,
+-/* 02f8f0 */  TBL(2)|960, TBL(1)|965, TBL(1)|484, TBL(1)|968, TBL(1)|971, TBL(1)|974, TBL(1)|975, TBL(2)|961,
+-/* 02f8f8 */  TBL(2)|940, TBL(2)|962, TBL(1)|983, TBL(2)|963, TBL(1)|986, TBL(1)|988, TBL(1)|984, TBL(1)|991
++/* 02f800 */  TBL(1)|588, TBL(1)|586, TBL(1)|590, TBL(2)|932, TBL(1)|607, TBL(1)|611, TBL(1)|612, TBL(1)|614,
++/* 02f808 */  TBL(1)|616, TBL(1)|617, TBL(1)|620, TBL(1)|618, TBL(1)|506, TBL(2)|936, TBL(1)|625, TBL(1)|626,
++/* 02f810 */  TBL(1)|627, TBL(1)|634, TBL(2)|933, TBL(1)|507, TBL(1)|629, TBL(1)|637, TBL(2)|935, TBL(1)|641,
++/* 02f818 */  TBL(1)|643, TBL(1)|603, TBL(1)|645, TBL(1)|646, TBL(2)|1030, TBL(1)|653, TBL(1)|655, TBL(1)|509,
++/* 02f820 */  TBL(1)|661, TBL(1)|662, TBL(1)|664, TBL(1)|665, TBL(1)|510, TBL(1)|671, TBL(1)|672, TBL(1)|675,
++/* 02f828 */  TBL(1)|678, TBL(1)|679, TBL(1)|680, TBL(1)|682, TBL(1)|690, TBL(1)|691, TBL(1)|693, TBL(1)|697,
++/* 02f830 */  TBL(1)|699, TBL(1)|700, TBL(1)|700, TBL(1)|700, TBL(2)|939, TBL(1)|1074, TBL(1)|705, TBL(1)|707,
++/* 02f838 */  TBL(2)|940, TBL(1)|710, TBL(1)|712, TBL(1)|714, TBL(1)|724, TBL(1)|719, TBL(1)|722, TBL(1)|723,
++/* 02f840 */  TBL(1)|725, TBL(1)|727, TBL(1)|728, TBL(1)|730, TBL(1)|732, TBL(1)|733, TBL(1)|733, TBL(1)|735,
++/* 02f848 */  TBL(1)|737, TBL(1)|738, TBL(1)|741, TBL(1)|750, TBL(1)|743, TBL(1)|751, TBL(1)|744, TBL(1)|746,
++/* 02f850 */  TBL(1)|656, TBL(1)|769, TBL(1)|755, TBL(1)|756, TBL(1)|757, TBL(1)|754, TBL(1)|759, TBL(1)|758,
++/* 02f858 */  TBL(1)|764, TBL(2)|941, TBL(1)|771, TBL(1)|772, TBL(1)|774, TBL(1)|777, TBL(1)|779, TBL(1)|786,
++/* 02f860 */  TBL(2)|942, TBL(2)|943, TBL(1)|789, TBL(1)|790, TBL(1)|791, TBL(1)|788, TBL(1)|793, TBL(1)|511,
++/* 02f868 */  TBL(1)|512, TBL(1)|795, TBL(1)|797, TBL(1)|797, TBL(2)|944, TBL(1)|804, TBL(1)|805, TBL(1)|806,
++/* 02f870 */  TBL(1)|808, TBL(2)|945, TBL(1)|810, TBL(1)|811, TBL(1)|865, TBL(1)|813, TBL(1)|513, TBL(1)|816,
++/* 02f878 */  TBL(1)|820, TBL(1)|823, TBL(1)|822, TBL(2)|947, TBL(1)|825, TBL(2)|948, TBL(1)|828, TBL(1)|827,
++/* 02f880 */  TBL(1)|829, TBL(1)|833, TBL(1)|834, TBL(1)|514, TBL(1)|838, TBL(1)|840, TBL(1)|841, TBL(1)|842,
++/* 02f888 */  TBL(1)|515, TBL(2)|949, TBL(1)|516, TBL(1)|849, TBL(1)|850, TBL(1)|851, TBL(1)|853, TBL(2)|1040,
++/* 02f890 */  TBL(1)|859, TBL(2)|951, TBL(2)|951, TBL(1)|1283, TBL(1)|863, TBL(1)|863, TBL(1)|517, TBL(2)|958,
++/* 02f898 */  TBL(2)|1000, TBL(1)|867, TBL(1)|869, TBL(1)|518, TBL(1)|874, TBL(1)|878, TBL(1)|879, TBL(1)|881,
++/* 02f8a0 */  TBL(1)|885, TBL(1)|520, TBL(1)|519, TBL(1)|886, TBL(2)|952, TBL(1)|887, TBL(1)|892, TBL(1)|893,
++/* 02f8a8 */  TBL(1)|894, TBL(1)|893, TBL(1)|897, TBL(1)|898, TBL(1)|902, TBL(1)|900, TBL(1)|901, TBL(1)|903,
++/* 02f8b0 */  TBL(1)|904, TBL(1)|905, TBL(1)|908, TBL(1)|909, TBL(1)|915, TBL(1)|917, TBL(1)|921, TBL(1)|926,
++/* 02f8b8 */  TBL(2)|955, TBL(1)|925, TBL(1)|922, TBL(1)|928, TBL(1)|930, TBL(1)|935, TBL(2)|956, TBL(1)|937,
++/* 02f8c0 */  TBL(1)|934, TBL(1)|932, TBL(1)|521, TBL(1)|939, TBL(1)|941, TBL(1)|943, TBL(1)|940, TBL(1)|522,
++/* 02f8c8 */  TBL(1)|947, TBL(1)|949, TBL(2)|957, TBL(1)|960, TBL(1)|973, TBL(1)|964, TBL(1)|525, TBL(1)|967,
++/* 02f8d0 */  TBL(1)|524, TBL(1)|523, TBL(1)|638, TBL(1)|639, TBL(1)|974, TBL(1)|968, TBL(1)|1272, TBL(1)|550,
++/* 02f8d8 */  TBL(1)|977, TBL(1)|978, TBL(1)|979, TBL(1)|984, TBL(1)|982, TBL(2)|962, TBL(1)|526, TBL(1)|989,
++/* 02f8e0 */  TBL(1)|986, TBL(1)|993, TBL(1)|995, TBL(2)|964, TBL(1)|996, TBL(1)|991, TBL(1)|998, TBL(1)|527,
++/* 02f8e8 */  TBL(1)|999, TBL(1)|1000, TBL(1)|1001, TBL(1)|1004, TBL(2)|965, TBL(1)|1006, TBL(1)|528, TBL(1)|1009,
++/* 02f8f0 */  TBL(2)|966, TBL(1)|1010, TBL(1)|529, TBL(1)|1013, TBL(1)|1016, TBL(1)|1019, TBL(1)|1020, TBL(2)|967,
++/* 02f8f8 */  TBL(2)|946, TBL(2)|968, TBL(1)|1028, TBL(2)|969, TBL(1)|1031, TBL(1)|1033, TBL(1)|1029, TBL(1)|1036
+ };
+ 
+ static const uint16_t UNWIF_compat_02_f9 [256] = {
+-/* 02f900 */  TBL(1)|995, TBL(1)|999, TBL(1)|996, TBL(1)|997, TBL(1)|1000, TBL(1)|1001, TBL(2)|964, TBL(1)|994,
+-/* 02f908 */  TBL(1)|1007, TBL(1)|1008, TBL(1)|485, TBL(1)|1013, TBL(1)|1012, TBL(2)|965, TBL(1)|1005, TBL(1)|1020,
+-/* 02f910 */  TBL(2)|966, TBL(2)|967, TBL(1)|1021, TBL(1)|1026, TBL(1)|1025, TBL(1)|1024, TBL(1)|486, TBL(1)|1027,
+-/* 02f918 */  TBL(1)|1031, TBL(1)|1030, TBL(1)|1033, TBL(2)|928, TBL(1)|1037, TBL(2)|968, TBL(1)|1040, TBL(2)|970,
+-/* 02f920 */  TBL(1)|1045, TBL(1)|1048, TBL(1)|1053, TBL(2)|971, TBL(1)|1058, TBL(1)|1059, TBL(2)|972, TBL(2)|973,
+-/* 02f928 */  TBL(1)|1066, TBL(1)|1070, TBL(1)|487, TBL(1)|1071, TBL(1)|488, TBL(1)|488, TBL(1)|1077, TBL(1)|1078,
+-/* 02f930 */  TBL(1)|1080, TBL(1)|1081, TBL(1)|1084, TBL(1)|489, TBL(1)|1090, TBL(2)|974, TBL(1)|1097, TBL(2)|975,
+-/* 02f938 */  TBL(1)|1100, TBL(2)|944, TBL(1)|1104, TBL(2)|976, TBL(2)|977, TBL(2)|978, TBL(1)|490, TBL(1)|491,
+-/* 02f940 */  TBL(1)|1118, TBL(2)|980, TBL(2)|979, TBL(2)|981, TBL(2)|982, TBL(1)|1120, TBL(1)|1121, TBL(1)|1121,
+-/* 02f948 */  TBL(1)|1123, TBL(1)|493, TBL(1)|1124, TBL(1)|494, TBL(1)|495, TBL(2)|984, TBL(1)|1129, TBL(1)|1131,
+-/* 02f950 */  TBL(1)|1134, TBL(1)|496, TBL(2)|985, TBL(1)|1143, TBL(2)|986, TBL(2)|987, TBL(1)|1151, TBL(1)|1157,
+-/* 02f958 */  TBL(1)|497, TBL(1)|1159, TBL(1)|1160, TBL(1)|1161, TBL(2)|988, TBL(2)|989, TBL(2)|989, TBL(1)|1167,
+-/* 02f960 */  TBL(1)|498, TBL(2)|990, TBL(1)|1172, TBL(1)|1173, TBL(1)|499, TBL(2)|991, TBL(1)|1180, TBL(1)|500,
+-/* 02f968 */  TBL(1)|1184, TBL(1)|1182, TBL(1)|1186, TBL(2)|993, TBL(1)|1192, TBL(1)|501, TBL(1)|1195, TBL(1)|1197,
+-/* 02f970 */  TBL(1)|1201, TBL(1)|502, TBL(2)|995, TBL(2)|996, TBL(1)|503, TBL(2)|997, TBL(1)|1207, TBL(2)|998,
+-/* 02f978 */  TBL(1)|1210, TBL(1)|1213, TBL(1)|1215, TBL(2)|999, TBL(2)|1000, TBL(1)|1220, TBL(2)|1001, TBL(1)|1222,
+-/* 02f980 */  TBL(2)|953, TBL(1)|504, TBL(1)|1228, TBL(1)|1229, TBL(1)|506, TBL(1)|1230, TBL(1)|749, TBL(2)|1002,
+-/* 02f988 */  TBL(2)|1003, TBL(2)|954, TBL(2)|955, TBL(1)|1238, TBL(1)|1239, TBL(1)|1373, TBL(1)|507, TBL(1)|1250,
+-/* 02f990 */  TBL(1)|1249, TBL(1)|1251, TBL(1)|624, TBL(1)|1252, TBL(1)|1253, TBL(1)|1254, TBL(1)|1256, TBL(2)|1004,
+-/* 02f998 */  TBL(1)|1255, TBL(1)|1257, TBL(1)|1262, TBL(1)|1263, TBL(1)|1258, TBL(1)|1264, TBL(1)|1269, TBL(1)|1274,
+-/* 02f9a0 */  TBL(1)|1261, TBL(1)|1266, TBL(1)|1267, TBL(1)|1268, TBL(2)|1005, TBL(2)|1007, TBL(2)|1006, TBL(1)|508,
+-/* 02f9a8 */  TBL(1)|1276, TBL(1)|1277, TBL(1)|1279, TBL(2)|1011, TBL(1)|1280, TBL(2)|1008, TBL(1)|509, TBL(1)|510,
+-/* 02f9b0 */  TBL(2)|1009, TBL(2)|1010, TBL(1)|511, TBL(1)|1288, TBL(1)|1289, TBL(1)|1290, TBL(1)|1291, TBL(1)|1294,
+-/* 02f9b8 */  TBL(1)|1293, TBL(1)|1296, TBL(1)|1295, TBL(1)|1299, TBL(1)|1297, TBL(1)|1298, TBL(1)|1300, TBL(1)|512,
+-/* 02f9c0 */  TBL(1)|1302, TBL(1)|1303, TBL(1)|513, TBL(1)|1307, TBL(1)|1308, TBL(2)|1012, TBL(1)|1311, TBL(1)|1312,
+-/* 02f9c8 */  TBL(1)|514, TBL(1)|1315, TBL(1)|463, TBL(2)|1013, TBL(2)|1014, TBL(1)|515, TBL(1)|516, TBL(1)|1326,
+-/* 02f9d0 */  TBL(1)|1332, TBL(1)|1339, TBL(1)|1343, TBL(2)|1015, TBL(1)|1348, TBL(1)|1349, TBL(1)|1355, TBL(1)|1358,
+-/* 02f9d8 */  TBL(2)|1017, TBL(2)|931, TBL(1)|1361, TBL(1)|1360, TBL(1)|1363, TBL(2)|932, TBL(1)|1366, TBL(1)|1369,
+-/* 02f9e0 */  TBL(2)|1018, TBL(2)|1019, TBL(1)|1385, TBL(1)|1388, TBL(1)|1390, TBL(2)|1020, TBL(1)|1391, TBL(1)|1402,
+-/* 02f9e8 */  TBL(1)|1405, TBL(1)|1406, TBL(1)|1404, TBL(1)|1409, TBL(1)|1410, TBL(2)|1021, TBL(1)|1413, TBL(1)|517,
+-/* 02f9f0 */  TBL(1)|1415, TBL(2)|1022, TBL(1)|518, TBL(1)|1429, TBL(1)|785, TBL(1)|1435, TBL(2)|1023, TBL(2)|1025,
+-/* 02f9f8 */  TBL(1)|519, TBL(1)|520, TBL(1)|1445, TBL(2)|1026, TBL(1)|521, TBL(2)|1027, TBL(1)|1451, TBL(1)|1451
++/* 02f900 */  TBL(1)|1040, TBL(1)|1044, TBL(1)|1041, TBL(1)|1042, TBL(1)|1045, TBL(1)|1046, TBL(2)|970, TBL(1)|1039,
++/* 02f908 */  TBL(1)|1052, TBL(1)|1053, TBL(1)|530, TBL(1)|1058, TBL(1)|1057, TBL(2)|971, TBL(1)|1050, TBL(1)|1065,
++/* 02f910 */  TBL(2)|972, TBL(2)|973, TBL(1)|1066, TBL(1)|1071, TBL(1)|1070, TBL(1)|1069, TBL(1)|531, TBL(1)|1072,
++/* 02f918 */  TBL(1)|1076, TBL(1)|1075, TBL(1)|1078, TBL(2)|934, TBL(1)|1082, TBL(2)|974, TBL(1)|1085, TBL(2)|976,
++/* 02f920 */  TBL(1)|1090, TBL(1)|1093, TBL(1)|1098, TBL(2)|977, TBL(1)|1103, TBL(1)|1104, TBL(2)|978, TBL(2)|979,
++/* 02f928 */  TBL(1)|1111, TBL(1)|1115, TBL(1)|532, TBL(1)|1116, TBL(1)|533, TBL(1)|533, TBL(1)|1122, TBL(1)|1123,
++/* 02f930 */  TBL(1)|1125, TBL(1)|1126, TBL(1)|1129, TBL(1)|534, TBL(1)|1135, TBL(2)|980, TBL(1)|1142, TBL(2)|981,
++/* 02f938 */  TBL(1)|1145, TBL(2)|950, TBL(1)|1149, TBL(2)|982, TBL(2)|983, TBL(2)|984, TBL(1)|535, TBL(1)|536,
++/* 02f940 */  TBL(1)|1163, TBL(2)|986, TBL(2)|985, TBL(2)|987, TBL(2)|988, TBL(1)|1165, TBL(1)|1166, TBL(1)|1166,
++/* 02f948 */  TBL(1)|1168, TBL(1)|538, TBL(1)|1169, TBL(1)|539, TBL(1)|540, TBL(2)|990, TBL(1)|1174, TBL(1)|1176,
++/* 02f950 */  TBL(1)|1179, TBL(1)|541, TBL(2)|991, TBL(1)|1188, TBL(2)|992, TBL(2)|993, TBL(1)|1196, TBL(1)|1202,
++/* 02f958 */  TBL(1)|542, TBL(1)|1204, TBL(1)|1205, TBL(1)|1206, TBL(2)|994, TBL(2)|995, TBL(2)|995, TBL(1)|1212,
++/* 02f960 */  TBL(1)|543, TBL(2)|996, TBL(1)|1217, TBL(1)|1218, TBL(1)|544, TBL(2)|997, TBL(1)|1225, TBL(1)|545,
++/* 02f968 */  TBL(1)|1229, TBL(1)|1227, TBL(1)|1231, TBL(2)|999, TBL(1)|1237, TBL(1)|546, TBL(1)|1240, TBL(1)|1242,
++/* 02f970 */  TBL(1)|1246, TBL(1)|547, TBL(2)|1001, TBL(2)|1002, TBL(1)|548, TBL(2)|1003, TBL(1)|1252, TBL(2)|1004,
++/* 02f978 */  TBL(1)|1255, TBL(1)|1258, TBL(1)|1260, TBL(2)|1005, TBL(2)|1006, TBL(1)|1265, TBL(2)|1007, TBL(1)|1267,
++/* 02f980 */  TBL(2)|959, TBL(1)|549, TBL(1)|1273, TBL(1)|1274, TBL(1)|551, TBL(1)|1275, TBL(1)|794, TBL(2)|1008,
++/* 02f988 */  TBL(2)|1009, TBL(2)|960, TBL(2)|961, TBL(1)|1283, TBL(1)|1284, TBL(1)|1418, TBL(1)|552, TBL(1)|1295,
++/* 02f990 */  TBL(1)|1294, TBL(1)|1296, TBL(1)|669, TBL(1)|1297, TBL(1)|1298, TBL(1)|1299, TBL(1)|1301, TBL(2)|1010,
++/* 02f998 */  TBL(1)|1300, TBL(1)|1302, TBL(1)|1307, TBL(1)|1308, TBL(1)|1303, TBL(1)|1309, TBL(1)|1314, TBL(1)|1319,
++/* 02f9a0 */  TBL(1)|1306, TBL(1)|1311, TBL(1)|1312, TBL(1)|1313, TBL(2)|1011, TBL(2)|1013, TBL(2)|1012, TBL(1)|553,
++/* 02f9a8 */  TBL(1)|1321, TBL(1)|1322, TBL(1)|1324, TBL(2)|1017, TBL(1)|1325, TBL(2)|1014, TBL(1)|554, TBL(1)|555,
++/* 02f9b0 */  TBL(2)|1015, TBL(2)|1016, TBL(1)|556, TBL(1)|1333, TBL(1)|1334, TBL(1)|1335, TBL(1)|1336, TBL(1)|1339,
++/* 02f9b8 */  TBL(1)|1338, TBL(1)|1341, TBL(1)|1340, TBL(1)|1344, TBL(1)|1342, TBL(1)|1343, TBL(1)|1345, TBL(1)|557,
++/* 02f9c0 */  TBL(1)|1347, TBL(1)|1348, TBL(1)|558, TBL(1)|1352, TBL(1)|1353, TBL(2)|1018, TBL(1)|1356, TBL(1)|1357,
++/* 02f9c8 */  TBL(1)|559, TBL(1)|1360, TBL(1)|508, TBL(2)|1019, TBL(2)|1020, TBL(1)|560, TBL(1)|561, TBL(1)|1371,
++/* 02f9d0 */  TBL(1)|1377, TBL(1)|1384, TBL(1)|1388, TBL(2)|1021, TBL(1)|1393, TBL(1)|1394, TBL(1)|1400, TBL(1)|1403,
++/* 02f9d8 */  TBL(2)|1023, TBL(2)|937, TBL(1)|1406, TBL(1)|1405, TBL(1)|1408, TBL(2)|938, TBL(1)|1411, TBL(1)|1414,
++/* 02f9e0 */  TBL(2)|1024, TBL(2)|1025, TBL(1)|1430, TBL(1)|1433, TBL(1)|1435, TBL(2)|1026, TBL(1)|1436, TBL(1)|1447,
++/* 02f9e8 */  TBL(1)|1450, TBL(1)|1451, TBL(1)|1449, TBL(1)|1454, TBL(1)|1455, TBL(2)|1027, TBL(1)|1458, TBL(1)|562,
++/* 02f9f0 */  TBL(1)|1460, TBL(2)|1028, TBL(1)|563, TBL(1)|1474, TBL(1)|830, TBL(1)|1480, TBL(2)|1029, TBL(2)|1031,
++/* 02f9f8 */  TBL(1)|564, TBL(1)|565, TBL(1)|1490, TBL(2)|1032, TBL(1)|566, TBL(2)|1033, TBL(1)|1496, TBL(1)|1496
+ };
+ 
+ static const uint16_t UNWIF_compat_02_fa [256] = {
+-/* 02fa00 */  TBL(1)|1453, TBL(2)|1028, TBL(1)|1459, TBL(1)|522, TBL(1)|1463, TBL(1)|1466, TBL(1)|1468, TBL(1)|1470,
+-/* 02fa08 */  TBL(1)|523, TBL(2)|1029, TBL(1)|1475, TBL(1)|1482, TBL(1)|1485, TBL(1)|524, TBL(1)|525, TBL(1)|1486,
+-/* 02fa10 */  TBL(2)|1030, TBL(1)|526, TBL(2)|1031, TBL(2)|1032, TBL(2)|1033, TBL(1)|1495, TBL(1)|527, TBL(1)|1500,
+-/* 02fa18 */  TBL(1)|1502, TBL(1)|1503, TBL(1)|1505, TBL(1)|1507, TBL(1)|1509, TBL(2)|1035, 0, 0,
++/* 02fa00 */  TBL(1)|1498, TBL(2)|1034, TBL(1)|1504, TBL(1)|567, TBL(1)|1508, TBL(1)|1511, TBL(1)|1513, TBL(1)|1515,
++/* 02fa08 */  TBL(1)|568, TBL(2)|1035, TBL(1)|1520, TBL(1)|1527, TBL(1)|1530, TBL(1)|569, TBL(1)|570, TBL(1)|1531,
++/* 02fa10 */  TBL(2)|1036, TBL(1)|571, TBL(2)|1037, TBL(2)|1038, TBL(2)|1039, TBL(1)|1540, TBL(1)|572, TBL(1)|1545,
++/* 02fa18 */  TBL(1)|1547, TBL(1)|1548, TBL(1)|1550, TBL(1)|1552, TBL(1)|1554, TBL(2)|1041, 0, 0,
+ /* 02fa20 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 02fa28 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 02fa30 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -2738,7 +2780,7 @@ UNWIF_compat_00_ff
+ };
+ 
+ static const uint16_t* UNWIF_compat_01 [256] = {
+-NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
++NULL,NULL,NULL,NULL,NULL,NULL,NULL,UNWIF_compat_01_07,
+ NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+ UNWIF_compat_01_10,
+ UNWIF_compat_01_11,
+diff --git a/src/extwchar/unw16ifexc.h b/src/extwchar/unw16ifexc.h
+index c85d9c8a..c756a2ab 100644
+--- a/src/extwchar/unw16ifexc.h
++++ b/src/extwchar/unw16ifexc.h
+@@ -3,7 +3,7 @@
+  * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+  * This file is auto-generated by Unicode-Normalize 1.27
+  * mkheader -uni -ind -std
+- * for Unicode 13.0.0 UTF-16
++ * for Unicode 14.0.0 UTF-16
+  * Any changes here will be lost!
+  */
+ /* Composite exclusions */
+diff --git a/src/extwchar/unwifcan.h b/src/extwchar/unwifcan.h
+index 035c261c..198b618d 100644
+--- a/src/extwchar/unwifcan.h
++++ b/src/extwchar/unwifcan.h
+@@ -2,7 +2,7 @@
+  * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+  * This file is auto-generated by Unicode-Normalize 1.27
+  * mkheader -uni -ind -std
+- * for Unicode 13.0.0 UTF-32
++ * for Unicode 14.0.0 UTF-32
+  * Any changes here will be lost!
+  */
+ /* Canonical Decomposition */
+diff --git a/src/extwchar/unwifcmb.h b/src/extwchar/unwifcmb.h
+index 40684c3f..9795f23f 100644
+--- a/src/extwchar/unwifcmb.h
++++ b/src/extwchar/unwifcmb.h
+@@ -2,7 +2,7 @@
+  * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+  * This file is auto-generated by Unicode-Normalize 1.27
+  * mkheader -uni -ind -std
+- * for Unicode 13.0.0 UTF-32
++ * for Unicode 14.0.0 UTF-32
+  * Any changes here will be lost!
+  */
+ /* CombiningClass */
+@@ -202,14 +202,14 @@ static const uint8_t UNWIF_combin_00_08 [256] = {
+ /*   0880 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0888 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0890 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   0898 */  0, 0, 0, 0, 0, 0, 0, 0,
++/*   0898 */  230, 220, 220, 220, 230, 230, 230, 230,
+ /*   08a0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   08a8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   08b0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   08b8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   08c0 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   08c8 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   08d0 */  0, 0, 0, 220, 230, 230, 230, 230,
++/*   08c8 */  0, 0, 230, 230, 230, 230, 230, 220,
++/*   08d0 */  220, 220, 220, 220, 230, 230, 230, 230,
+ /*   08d8 */  230, 230, 230, 230, 230, 230, 230, 230,
+ /*   08e0 */  230, 230, 0, 220, 230, 230, 220, 230,
+ /*   08e8 */  230, 220, 230, 230, 230, 220, 220, 220,
+@@ -330,7 +330,7 @@ static const uint8_t UNWIF_combin_00_0c [256] = {
+ /*   0c20 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0c28 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0c30 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   0c38 */  0, 0, 0, 0, 0, 0, 0, 0,
++/*   0c38 */  0, 0, 0, 0, 7, 0, 0, 0,
+ /*   0c40 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0c48 */  0, 0, 0, 0, 0, 9, 0, 0,
+ /*   0c50 */  0, 0, 0, 0, 0, 84, 91, 0,
+@@ -535,7 +535,7 @@ static const uint8_t UNWIF_combin_00_13 [256] = {
+ static const uint8_t UNWIF_combin_00_17 [256] = {
+ /*   1700 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1708 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   1710 */  0, 0, 0, 0, 9, 0, 0, 0,
++/*   1710 */  0, 0, 0, 0, 9, 9, 0, 0,
+ /*   1718 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1720 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1728 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -662,8 +662,8 @@ static const uint8_t UNWIF_combin_00_1a [256] = {
+ /*   1aa8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1ab0 */  230, 230, 230, 230, 230, 220, 220, 220,
+ /*   1ab8 */  220, 220, 220, 230, 230, 220, 0, 220,
+-/*   1ac0 */  220, 0, 0, 0, 0, 0, 0, 0,
+-/*   1ac8 */  0, 0, 0, 0, 0, 0, 0, 0,
++/*   1ac0 */  220, 230, 230, 220, 220, 230, 230, 230,
++/*   1ac8 */  230, 230, 220, 230, 230, 230, 230, 0,
+ /*   1ad0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1ad8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1ae0 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -774,7 +774,7 @@ static const uint8_t UNWIF_combin_00_1d [256] = {
+ /*   1de0 */  230, 230, 230, 230, 230, 230, 230, 230,
+ /*   1de8 */  230, 230, 230, 230, 230, 230, 230, 230,
+ /*   1df0 */  230, 230, 230, 230, 230, 230, 232, 228,
+-/*   1df8 */  228, 220, 0, 230, 233, 220, 230, 220
++/*   1df8 */  228, 220, 218, 230, 233, 220, 230, 220
+ };
+ 
+ static const uint8_t UNWIF_combin_00_20 [256] = {
+@@ -1389,7 +1389,7 @@ static const uint8_t UNWIF_combin_01_0f [256] = {
+ /* 010f68 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 010f70 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 010f78 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/* 010f80 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010f80 */  0, 0, 230, 220, 230, 220, 0, 0,
+ /* 010f88 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 010f90 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 010f98 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1422,7 +1422,7 @@ static const uint8_t UNWIF_combin_01_10 [256] = {
+ /* 011058 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 011060 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 011068 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/* 011070 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 011070 */  9, 0, 0, 0, 0, 0, 0, 0,
+ /* 011078 */  0, 0, 0, 0, 0, 0, 0, 9,
+ /* 011080 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 011088 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -2164,7 +2164,7 @@ static const uint8_t UNWIF_combin_01_e2 [256] = {
+ /* 01e290 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 01e298 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 01e2a0 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/* 01e2a8 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 01e2a8 */  0, 0, 0, 0, 0, 0, 230, 0,
+ /* 01e2b0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 01e2b8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 01e2c0 */  0, 0, 0, 0, 0, 0, 0, 0,
+diff --git a/src/extwchar/unwifcmp.h b/src/extwchar/unwifcmp.h
+index e0d4ca84..bd372f3e 100644
+--- a/src/extwchar/unwifcmp.h
++++ b/src/extwchar/unwifcmp.h
+@@ -2,7 +2,7 @@
+  * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+  * This file is auto-generated by Unicode-Normalize 1.27
+  * mkheader -uni -ind -std
+- * for Unicode 13.0.0 UTF-32
++ * for Unicode 14.0.0 UTF-32
+  * Any changes here will be lost!
+  */
+ /* Composition */
+diff --git a/src/extwchar/unwifcpt.h b/src/extwchar/unwifcpt.h
+index 477617ec..e3649308 100644
+--- a/src/extwchar/unwifcpt.h
++++ b/src/extwchar/unwifcpt.h
+@@ -2,7 +2,7 @@
+  * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+  * This file is auto-generated by Unicode-Normalize 1.27
+  * mkheader -uni -ind -std
+- * for Unicode 13.0.0 UTF-32
++ * for Unicode 14.0.0 UTF-32
+  * Any changes here will be lost!
+  */
+ /* Compat. Decomposition */
+@@ -12,9 +12,9 @@
+ 
+ #undef NORMALIZE_IND_TBL
+ #define NORMALIZE_IND_TBL
+-/* tbl sizes: (1666,1193,638,109,16,14,1,1,,,,,,,,,,1) */
++/* tbl sizes: (1720,1193,638,109,16,14,1,1,,,,,,,,,,1) */
+ /* l: 1-18 */
+-/* max size: 1666 0x682 */
++/* max size: 1720 0x6b8 */
+ #define UNWIF_compat_MAXLEN  5
+ #define TBL(i)               ((i-1) << 11)
+ /* value = (const wchar_t*)&UNWIF_compat_tbl[LEN-1][IDX] */
+@@ -23,7 +23,7 @@
+ #define UNWIF_compat_PLANE_T uint16_t
+ 
+ /* the values */
+-static const wchar_t UNWIF_compat_tbl_1 [1666][1] = {
++static const wchar_t UNWIF_compat_tbl_1 [1720][1] = {
+  /*   0 */  {L'('}, {L')'}, {L'*'}, {L'+'}, {L','}, {L'-'}, {L'.'}, {L'/'},
+  /*   8 */  {L'0'}, {L'1'}, {L'2'}, {L'3'}, {L'4'}, {L'5'}, {L'6'}, {L'7'},
+  /*  16 */  {L'8'}, {L'9'}, {L':'}, {L';'}, {L'<'}, {L'='}, {L'>'}, {L'?'},
+@@ -32,207 +32,213 @@ static const wchar_t UNWIF_compat_tbl_1 [1666][1] = {
+  /*  40 */  {L'P'}, {L'Q'}, {L'R'}, {L'S'}, {L'T'}, {L'U'}, {L'V'}, {L'W'},
+  /*  48 */  {L'X'}, {L'Y'}, {L'Z'}, {L'['}, {L'\x0020'}, {L'\x0021'}, {L'\x0022'}, {L'\x0023'},
+  /*  56 */  {L'\x0024'}, {L'\x0025'}, {L'\x0026'}, {L'\x0027'}, {L'\x005c'}, {L'\x00a2'}, {L'\x00a3'}, {L'\x00a5'},
+- /*  64 */  {L'\x00a6'}, {L'\x00ac'}, {L'\x00b7'}, {L'\x00c6'}, {L'\x00f0'}, {L'\x0126'}, {L'\x0127'}, {L'\x0131'},
+- /*  72 */  {L'\x014b'}, {L'\x0153'}, {L'\x018e'}, {L'\x0190'}, {L'\x01ab'}, {L'\x0222'}, {L'\x0237'}, {L'\x0250'},
+- /*  80 */  {L'\x0251'}, {L'\x0252'}, {L'\x0254'}, {L'\x0255'}, {L'\x0259'}, {L'\x025b'}, {L'\x025c'}, {L'\x025f'},
+- /*  88 */  {L'\x0261'}, {L'\x0263'}, {L'\x0265'}, {L'\x0266'}, {L'\x0268'}, {L'\x0269'}, {L'\x026a'}, {L'\x026b'},
+- /*  96 */  {L'\x026d'}, {L'\x026f'}, {L'\x0270'}, {L'\x0271'}, {L'\x0272'}, {L'\x0273'}, {L'\x0274'}, {L'\x0275'},
+- /* 104 */  {L'\x0278'}, {L'\x0279'}, {L'\x027b'}, {L'\x0281'}, {L'\x0282'}, {L'\x0283'}, {L'\x0289'}, {L'\x028a'},
+- /* 112 */  {L'\x028b'}, {L'\x028c'}, {L'\x028d'}, {L'\x0290'}, {L'\x0291'}, {L'\x0292'}, {L'\x0295'}, {L'\x029d'},
+- /* 120 */  {L'\x029f'}, {L'\x02b9'}, {L'\x0300'}, {L'\x0301'}, {L'\x0313'}, {L'\x0391'}, {L'\x0392'}, {L'\x0393'},
+- /* 128 */  {L'\x0394'}, {L'\x0395'}, {L'\x0396'}, {L'\x0397'}, {L'\x0398'}, {L'\x0399'}, {L'\x039a'}, {L'\x039b'},
+- /* 136 */  {L'\x039c'}, {L'\x039d'}, {L'\x039e'}, {L'\x039f'}, {L'\x03a0'}, {L'\x03a1'}, {L'\x03a3'}, {L'\x03a4'},
+- /* 144 */  {L'\x03a5'}, {L'\x03a6'}, {L'\x03a7'}, {L'\x03a8'}, {L'\x03a9'}, {L'\x03b1'}, {L'\x03b2'}, {L'\x03b3'},
+- /* 152 */  {L'\x03b4'}, {L'\x03b5'}, {L'\x03b6'}, {L'\x03b7'}, {L'\x03b8'}, {L'\x03b9'}, {L'\x03ba'}, {L'\x03bb'},
+- /* 160 */  {L'\x03bc'}, {L'\x03bd'}, {L'\x03be'}, {L'\x03bf'}, {L'\x03c0'}, {L'\x03c1'}, {L'\x03c2'}, {L'\x03c3'},
+- /* 168 */  {L'\x03c4'}, {L'\x03c5'}, {L'\x03c6'}, {L'\x03c7'}, {L'\x03c8'}, {L'\x03c9'}, {L'\x03dc'}, {L'\x03dd'},
+- /* 176 */  {L'\x043d'}, {L'\x044a'}, {L'\x044c'}, {L'\x05d0'}, {L'\x05d1'}, {L'\x05d2'}, {L'\x05d3'}, {L'\x05d4'},
+- /* 184 */  {L'\x05db'}, {L'\x05dc'}, {L'\x05dd'}, {L'\x05e2'}, {L'\x05e8'}, {L'\x05ea'}, {L'\x0621'}, {L'\x0627'},
+- /* 192 */  {L'\x0628'}, {L'\x0629'}, {L'\x062a'}, {L'\x062b'}, {L'\x062c'}, {L'\x062d'}, {L'\x062e'}, {L'\x062f'},
+- /* 200 */  {L'\x0630'}, {L'\x0631'}, {L'\x0632'}, {L'\x0633'}, {L'\x0634'}, {L'\x0635'}, {L'\x0636'}, {L'\x0637'},
+- /* 208 */  {L'\x0638'}, {L'\x0639'}, {L'\x063a'}, {L'\x0641'}, {L'\x0642'}, {L'\x0643'}, {L'\x0644'}, {L'\x0645'},
+- /* 216 */  {L'\x0646'}, {L'\x0647'}, {L'\x0648'}, {L'\x0649'}, {L'\x064a'}, {L'\x066e'}, {L'\x066f'}, {L'\x0671'},
+- /* 224 */  {L'\x0679'}, {L'\x067a'}, {L'\x067b'}, {L'\x067e'}, {L'\x067f'}, {L'\x0680'}, {L'\x0683'}, {L'\x0684'},
+- /* 232 */  {L'\x0686'}, {L'\x0687'}, {L'\x0688'}, {L'\x068c'}, {L'\x068d'}, {L'\x068e'}, {L'\x0691'}, {L'\x0698'},
+- /* 240 */  {L'\x06a1'}, {L'\x06a4'}, {L'\x06a6'}, {L'\x06a9'}, {L'\x06ad'}, {L'\x06af'}, {L'\x06b1'}, {L'\x06b3'},
+- /* 248 */  {L'\x06ba'}, {L'\x06bb'}, {L'\x06be'}, {L'\x06c1'}, {L'\x06c5'}, {L'\x06c6'}, {L'\x06c7'}, {L'\x06c8'},
+- /* 256 */  {L'\x06c9'}, {L'\x06cb'}, {L'\x06cc'}, {L'\x06d0'}, {L'\x06d2'}, {L'\x0f0b'}, {L'\x10dc'}, {L'\x1100'},
+- /* 264 */  {L'\x1101'}, {L'\x1102'}, {L'\x1103'}, {L'\x1104'}, {L'\x1105'}, {L'\x1106'}, {L'\x1107'}, {L'\x1108'},
+- /* 272 */  {L'\x1109'}, {L'\x110a'}, {L'\x110b'}, {L'\x110c'}, {L'\x110d'}, {L'\x110e'}, {L'\x110f'}, {L'\x1110'},
+- /* 280 */  {L'\x1111'}, {L'\x1112'}, {L'\x1114'}, {L'\x1115'}, {L'\x111a'}, {L'\x111c'}, {L'\x111d'}, {L'\x111e'},
+- /* 288 */  {L'\x1120'}, {L'\x1121'}, {L'\x1122'}, {L'\x1123'}, {L'\x1127'}, {L'\x1129'}, {L'\x112b'}, {L'\x112c'},
+- /* 296 */  {L'\x112d'}, {L'\x112e'}, {L'\x112f'}, {L'\x1132'}, {L'\x1136'}, {L'\x1140'}, {L'\x1147'}, {L'\x114c'},
+- /* 304 */  {L'\x1157'}, {L'\x1158'}, {L'\x1159'}, {L'\x1160'}, {L'\x1161'}, {L'\x1162'}, {L'\x1163'}, {L'\x1164'},
+- /* 312 */  {L'\x1165'}, {L'\x1166'}, {L'\x1167'}, {L'\x1168'}, {L'\x1169'}, {L'\x116a'}, {L'\x116b'}, {L'\x116c'},
+- /* 320 */  {L'\x116d'}, {L'\x116e'}, {L'\x116f'}, {L'\x1170'}, {L'\x1171'}, {L'\x1172'}, {L'\x1173'}, {L'\x1174'},
+- /* 328 */  {L'\x1175'}, {L'\x1184'}, {L'\x1185'}, {L'\x1188'}, {L'\x1191'}, {L'\x1192'}, {L'\x1194'}, {L'\x119e'},
+- /* 336 */  {L'\x11a1'}, {L'\x11aa'}, {L'\x11ac'}, {L'\x11ad'}, {L'\x11b0'}, {L'\x11b1'}, {L'\x11b2'}, {L'\x11b3'},
+- /* 344 */  {L'\x11b4'}, {L'\x11b5'}, {L'\x11c7'}, {L'\x11c8'}, {L'\x11cc'}, {L'\x11ce'}, {L'\x11d3'}, {L'\x11d7'},
+- /* 352 */  {L'\x11d9'}, {L'\x11dd'}, {L'\x11df'}, {L'\x11f1'}, {L'\x11f2'}, {L'\x1d02'}, {L'\x1d16'}, {L'\x1d17'},
+- /* 360 */  {L'\x1d1c'}, {L'\x1d1d'}, {L'\x1d25'}, {L'\x1d7b'}, {L'\x1d85'}, {L'\x2010'}, {L'\x20122'}, {L'\x2013'},
+- /* 368 */  {L'\x2014'}, {L'\x2051c'}, {L'\x20525'}, {L'\x2054b'}, {L'\x2063a'}, {L'\x20804'}, {L'\x208de'}, {L'\x20a2c'},
+- /* 376 */  {L'\x20a9'}, {L'\x20b63'}, {L'\x214e4'}, {L'\x216a8'}, {L'\x216ea'}, {L'\x2190'}, {L'\x2191'}, {L'\x2192'},
+- /* 384 */  {L'\x2193'}, {L'\x219c8'}, {L'\x21b18'}, {L'\x21d0b'}, {L'\x21de4'}, {L'\x21de6'}, {L'\x2202'}, {L'\x2207'},
+- /* 392 */  {L'\x2211'}, {L'\x2212'}, {L'\x22183'}, {L'\x2219f'}, {L'\x22331'}, {L'\x226d4'}, {L'\x22844'}, {L'\x2284a'},
+- /* 400 */  {L'\x22b0c'}, {L'\x22bf1'}, {L'\x2300a'}, {L'\x232b8'}, {L'\x2335f'}, {L'\x23393'}, {L'\x2339c'}, {L'\x233c3'},
+- /* 408 */  {L'\x233d5'}, {L'\x2346d'}, {L'\x236a3'}, {L'\x238a7'}, {L'\x23a8d'}, {L'\x23afa'}, {L'\x23cbc'}, {L'\x23d1e'},
+- /* 416 */  {L'\x23ed1'}, {L'\x23f5e'}, {L'\x23f8e'}, {L'\x24263'}, {L'\x242ee'}, {L'\x243ab'}, {L'\x24608'}, {L'\x24735'},
+- /* 424 */  {L'\x24814'}, {L'\x24c36'}, {L'\x24c92'}, {L'\x24fa1'}, {L'\x24fb8'}, {L'\x2502'}, {L'\x25044'}, {L'\x250f2'},
+- /* 432 */  {L'\x250f3'}, {L'\x25119'}, {L'\x25133'}, {L'\x25249'}, {L'\x2541d'}, {L'\x25626'}, {L'\x2569a'}, {L'\x256c5'},
+- /* 440 */  {L'\x2597c'}, {L'\x25a0'}, {L'\x25aa7'}, {L'\x25bab'}, {L'\x25c80'}, {L'\x25cb'}, {L'\x25cd0'}, {L'\x25f86'},
+- /* 448 */  {L'\x261da'}, {L'\x26228'}, {L'\x26247'}, {L'\x262d9'}, {L'\x2633e'}, {L'\x264da'}, {L'\x26523'}, {L'\x265a8'},
+- /* 456 */  {L'\x267a7'}, {L'\x267b5'}, {L'\x26b3c'}, {L'\x26c36'}, {L'\x26cd5'}, {L'\x26d6b'}, {L'\x26f2c'}, {L'\x26fb1'},
+- /* 464 */  {L'\x270d2'}, {L'\x273ca'}, {L'\x27667'}, {L'\x278ae'}, {L'\x27966'}, {L'\x27ca8'}, {L'\x27ed3'}, {L'\x27f2f'},
+- /* 472 */  {L'\x285d2'}, {L'\x285ed'}, {L'\x2872e'}, {L'\x28bfa'}, {L'\x28d77'}, {L'\x29145'}, {L'\x291df'}, {L'\x2921a'},
+- /* 480 */  {L'\x2940a'}, {L'\x29496'}, {L'\x295b6'}, {L'\x2985'}, {L'\x2986'}, {L'\x29b30'}, {L'\x2a0ce'}, {L'\x2a105'},
+- /* 488 */  {L'\x2a20e'}, {L'\x2a291'}, {L'\x2a392'}, {L'\x2a600'}, {L'\x2d61'}, {L'\x3001'}, {L'\x3002'}, {L'\x3008'},
+- /* 496 */  {L'\x3009'}, {L'\x300a'}, {L'\x300b'}, {L'\x300c'}, {L'\x300d'}, {L'\x300e'}, {L'\x300f'}, {L'\x3010'},
+- /* 504 */  {L'\x3011'}, {L'\x3012'}, {L'\x3014'}, {L'\x3015'}, {L'\x3016'}, {L'\x3017'}, {L'\x3099'}, {L'\x309a'},
+- /* 512 */  {L'\x30a1'}, {L'\x30a2'}, {L'\x30a3'}, {L'\x30a4'}, {L'\x30a5'}, {L'\x30a6'}, {L'\x30a7'}, {L'\x30a8'},
+- /* 520 */  {L'\x30a9'}, {L'\x30aa'}, {L'\x30ab'}, {L'\x30ad'}, {L'\x30af'}, {L'\x30b1'}, {L'\x30b3'}, {L'\x30b5'},
+- /* 528 */  {L'\x30b7'}, {L'\x30b9'}, {L'\x30bb'}, {L'\x30bd'}, {L'\x30bf'}, {L'\x30c1'}, {L'\x30c3'}, {L'\x30c4'},
+- /* 536 */  {L'\x30c6'}, {L'\x30c8'}, {L'\x30ca'}, {L'\x30cb'}, {L'\x30cc'}, {L'\x30cd'}, {L'\x30ce'}, {L'\x30cf'},
+- /* 544 */  {L'\x30d2'}, {L'\x30d5'}, {L'\x30d8'}, {L'\x30db'}, {L'\x30de'}, {L'\x30df'}, {L'\x30e0'}, {L'\x30e1'},
+- /* 552 */  {L'\x30e2'}, {L'\x30e3'}, {L'\x30e4'}, {L'\x30e5'}, {L'\x30e6'}, {L'\x30e7'}, {L'\x30e8'}, {L'\x30e9'},
+- /* 560 */  {L'\x30ea'}, {L'\x30eb'}, {L'\x30ec'}, {L'\x30ed'}, {L'\x30ef'}, {L'\x30f0'}, {L'\x30f1'}, {L'\x30f2'},
+- /* 568 */  {L'\x30f3'}, {L'\x30fb'}, {L'\x30fc'}, {L'\x349e'}, {L'\x34b9'}, {L'\x34bb'}, {L'\x34df'}, {L'\x3515'},
+- /* 576 */  {L'\x36ee'}, {L'\x36fc'}, {L'\x3781'}, {L'\x382f'}, {L'\x3862'}, {L'\x387c'}, {L'\x38c7'}, {L'\x38e3'},
+- /* 584 */  {L'\x391c'}, {L'\x393a'}, {L'\x3a2e'}, {L'\x3a6c'}, {L'\x3ae4'}, {L'\x3b08'}, {L'\x3b19'}, {L'\x3b49'},
+- /* 592 */  {L'\x3b9d'}, {L'\x3c18'}, {L'\x3c4e'}, {L'\x3d33'}, {L'\x3d96'}, {L'\x3eac'}, {L'\x3eb8'}, {L'\x3f1b'},
+- /* 600 */  {L'\x3ffc'}, {L'\x4008'}, {L'\x4018'}, {L'\x4039'}, {L'\x4046'}, {L'\x4096'}, {L'\x40e3'}, {L'\x412f'},
+- /* 608 */  {L'\x4202'}, {L'\x4227'}, {L'\x42a0'}, {L'\x4301'}, {L'\x4334'}, {L'\x4359'}, {L'\x43d5'}, {L'\x43d9'},
+- /* 616 */  {L'\x440b'}, {L'\x446b'}, {L'\x452b'}, {L'\x455d'}, {L'\x4561'}, {L'\x456b'}, {L'\x45d7'}, {L'\x45f9'},
+- /* 624 */  {L'\x4635'}, {L'\x46be'}, {L'\x46c7'}, {L'\x4995'}, {L'\x49e6'}, {L'\x4a6e'}, {L'\x4a76'}, {L'\x4ab2'},
+- /* 632 */  {L'\x4b33'}, {L'\x4bce'}, {L'\x4cce'}, {L'\x4ced'}, {L'\x4cf8'}, {L'\x4d56'}, {L'\x4e00'}, {L'\x4e01'},
+- /* 640 */  {L'\x4e03'}, {L'\x4e09'}, {L'\x4e0a'}, {L'\x4e0b'}, {L'\x4e0d'}, {L'\x4e19'}, {L'\x4e26'}, {L'\x4e28'},
+- /* 648 */  {L'\x4e2d'}, {L'\x4e32'}, {L'\x4e36'}, {L'\x4e38'}, {L'\x4e39'}, {L'\x4e3d'}, {L'\x4e3f'}, {L'\x4e41'},
+- /* 656 */  {L'\x4e59'}, {L'\x4e5d'}, {L'\x4e82'}, {L'\x4e85'}, {L'\x4e86'}, {L'\x4e8c'}, {L'\x4e94'}, {L'\x4ea0'},
+- /* 664 */  {L'\x4ea4'}, {L'\x4eae'}, {L'\x4eba'}, {L'\x4ec0'}, {L'\x4ecc'}, {L'\x4ee4'}, {L'\x4f01'}, {L'\x4f11'},
+- /* 672 */  {L'\x4f60'}, {L'\x4f80'}, {L'\x4f86'}, {L'\x4f8b'}, {L'\x4fae'}, {L'\x4fbb'}, {L'\x4fbf'}, {L'\x5002'},
+- /* 680 */  {L'\x502b'}, {L'\x507a'}, {L'\x5099'}, {L'\x50cf'}, {L'\x50da'}, {L'\x50e7'}, {L'\x512a'}, {L'\x513f'},
+- /* 688 */  {L'\x5140'}, {L'\x5145'}, {L'\x514d'}, {L'\x5154'}, {L'\x5164'}, {L'\x5165'}, {L'\x5167'}, {L'\x5168'},
+- /* 696 */  {L'\x5169'}, {L'\x516b'}, {L'\x516d'}, {L'\x5177'}, {L'\x5180'}, {L'\x5182'}, {L'\x518d'}, {L'\x5192'},
+- /* 704 */  {L'\x5195'}, {L'\x5196'}, {L'\x5197'}, {L'\x5199'}, {L'\x51a4'}, {L'\x51ab'}, {L'\x51ac'}, {L'\x51b5'},
+- /* 712 */  {L'\x51b7'}, {L'\x51c9'}, {L'\x51cc'}, {L'\x51dc'}, {L'\x51de'}, {L'\x51e0'}, {L'\x51f5'}, {L'\x5200'},
+- /* 720 */  {L'\x5203'}, {L'\x5207'}, {L'\x5217'}, {L'\x521d'}, {L'\x5229'}, {L'\x523a'}, {L'\x523b'}, {L'\x5246'},
+- /* 728 */  {L'\x524d'}, {L'\x5272'}, {L'\x5277'}, {L'\x5289'}, {L'\x529b'}, {L'\x52a3'}, {L'\x52b3'}, {L'\x52b4'},
+- /* 736 */  {L'\x52c7'}, {L'\x52c9'}, {L'\x52d2'}, {L'\x52de'}, {L'\x52e4'}, {L'\x52f5'}, {L'\x52f9'}, {L'\x52fa'},
+- /* 744 */  {L'\x5305'}, {L'\x5306'}, {L'\x5315'}, {L'\x5317'}, {L'\x531a'}, {L'\x5338'}, {L'\x533b'}, {L'\x533f'},
+- /* 752 */  {L'\x5341'}, {L'\x5344'}, {L'\x5345'}, {L'\x5349'}, {L'\x5351'}, {L'\x5354'}, {L'\x535a'}, {L'\x535c'},
+- /* 760 */  {L'\x5369'}, {L'\x5370'}, {L'\x5373'}, {L'\x5375'}, {L'\x537d'}, {L'\x537f'}, {L'\x5382'}, {L'\x53b6'},
+- /* 768 */  {L'\x53c3'}, {L'\x53c8'}, {L'\x53ca'}, {L'\x53cc'}, {L'\x53df'}, {L'\x53e3'}, {L'\x53e5'}, {L'\x53eb'},
+- /* 776 */  {L'\x53ef'}, {L'\x53f1'}, {L'\x53f3'}, {L'\x5406'}, {L'\x5408'}, {L'\x540d'}, {L'\x540f'}, {L'\x541d'},
+- /* 784 */  {L'\x5438'}, {L'\x5439'}, {L'\x5442'}, {L'\x5448'}, {L'\x5468'}, {L'\x549e'}, {L'\x54a2'}, {L'\x54bd'},
+- /* 792 */  {L'\x54f6'}, {L'\x5510'}, {L'\x554f'}, {L'\x5553'}, {L'\x5555'}, {L'\x5563'}, {L'\x5584'}, {L'\x5587'},
+- /* 800 */  {L'\x5599'}, {L'\x559d'}, {L'\x55ab'}, {L'\x55b3'}, {L'\x55b6'}, {L'\x55c0'}, {L'\x55c2'}, {L'\x55e2'},
+- /* 808 */  {L'\x5606'}, {L'\x5651'}, {L'\x5668'}, {L'\x5674'}, {L'\x56d7'}, {L'\x56db'}, {L'\x56f9'}, {L'\x5716'},
+- /* 816 */  {L'\x5717'}, {L'\x571f'}, {L'\x5730'}, {L'\x578b'}, {L'\x57ce'}, {L'\x57f4'}, {L'\x580d'}, {L'\x5831'},
+- /* 824 */  {L'\x5832'}, {L'\x5840'}, {L'\x585a'}, {L'\x585e'}, {L'\x58a8'}, {L'\x58ac'}, {L'\x58b3'}, {L'\x58d8'},
+- /* 832 */  {L'\x58df'}, {L'\x58eb'}, {L'\x58ee'}, {L'\x58f0'}, {L'\x58f2'}, {L'\x58f7'}, {L'\x5902'}, {L'\x5906'},
+- /* 840 */  {L'\x590a'}, {L'\x5915'}, {L'\x591a'}, {L'\x591c'}, {L'\x5922'}, {L'\x5927'}, {L'\x5929'}, {L'\x5944'},
+- /* 848 */  {L'\x5948'}, {L'\x5951'}, {L'\x5954'}, {L'\x5962'}, {L'\x5973'}, {L'\x59d8'}, {L'\x59ec'}, {L'\x5a1b'},
+- /* 856 */  {L'\x5a27'}, {L'\x5a62'}, {L'\x5a66'}, {L'\x5ab5'}, {L'\x5b08'}, {L'\x5b28'}, {L'\x5b3e'}, {L'\x5b50'},
+- /* 864 */  {L'\x5b57'}, {L'\x5b66'}, {L'\x5b80'}, {L'\x5b85'}, {L'\x5b97'}, {L'\x5bc3'}, {L'\x5bd8'}, {L'\x5be7'},
+- /* 872 */  {L'\x5bee'}, {L'\x5bf3'}, {L'\x5bf8'}, {L'\x5bff'}, {L'\x5c06'}, {L'\x5c0f'}, {L'\x5c22'}, {L'\x5c38'},
+- /* 880 */  {L'\x5c3f'}, {L'\x5c60'}, {L'\x5c62'}, {L'\x5c64'}, {L'\x5c65'}, {L'\x5c6e'}, {L'\x5c71'}, {L'\x5c8d'},
+- /* 888 */  {L'\x5cc0'}, {L'\x5d19'}, {L'\x5d43'}, {L'\x5d50'}, {L'\x5d6b'}, {L'\x5d6e'}, {L'\x5d7c'}, {L'\x5db2'},
+- /* 896 */  {L'\x5dba'}, {L'\x5ddb'}, {L'\x5de1'}, {L'\x5de2'}, {L'\x5de5'}, {L'\x5de6'}, {L'\x5df1'}, {L'\x5dfd'},
+- /* 904 */  {L'\x5dfe'}, {L'\x5e28'}, {L'\x5e3d'}, {L'\x5e69'}, {L'\x5e72'}, {L'\x5e74'}, {L'\x5e7a'}, {L'\x5e7c'},
+- /* 912 */  {L'\x5e7f'}, {L'\x5ea6'}, {L'\x5eb0'}, {L'\x5eb3'}, {L'\x5eb6'}, {L'\x5ec9'}, {L'\x5eca'}, {L'\x5ed2'},
+- /* 920 */  {L'\x5ed3'}, {L'\x5ed9'}, {L'\x5eec'}, {L'\x5ef4'}, {L'\x5efe'}, {L'\x5f04'}, {L'\x5f0b'}, {L'\x5f13'},
+- /* 928 */  {L'\x5f22'}, {L'\x5f50'}, {L'\x5f53'}, {L'\x5f61'}, {L'\x5f62'}, {L'\x5f69'}, {L'\x5f6b'}, {L'\x5f73'},
+- /* 936 */  {L'\x5f8b'}, {L'\x5f8c'}, {L'\x5f97'}, {L'\x5f9a'}, {L'\x5fa9'}, {L'\x5fad'}, {L'\x5fc3'}, {L'\x5fcd'},
+- /* 944 */  {L'\x5fd7'}, {L'\x5ff5'}, {L'\x5ff9'}, {L'\x6012'}, {L'\x601c'}, {L'\x6075'}, {L'\x6081'}, {L'\x6094'},
+- /* 952 */  {L'\x60c7'}, {L'\x60d8'}, {L'\x60e1'}, {L'\x6108'}, {L'\x6144'}, {L'\x6148'}, {L'\x614c'}, {L'\x614e'},
+- /* 960 */  {L'\x6160'}, {L'\x6168'}, {L'\x617a'}, {L'\x618e'}, {L'\x6190'}, {L'\x61a4'}, {L'\x61af'}, {L'\x61b2'},
+- /* 968 */  {L'\x61de'}, {L'\x61f2'}, {L'\x61f6'}, {L'\x6200'}, {L'\x6208'}, {L'\x6210'}, {L'\x621b'}, {L'\x622e'},
+- /* 976 */  {L'\x6234'}, {L'\x6236'}, {L'\x624b'}, {L'\x6253'}, {L'\x625d'}, {L'\x6295'}, {L'\x62b1'}, {L'\x62c9'},
+- /* 984 */  {L'\x62cf'}, {L'\x62d3'}, {L'\x62d4'}, {L'\x62fc'}, {L'\x62fe'}, {L'\x6307'}, {L'\x633d'}, {L'\x6350'},
+- /* 992 */  {L'\x6355'}, {L'\x6368'}, {L'\x637b'}, {L'\x6383'}, {L'\x63a0'}, {L'\x63a9'}, {L'\x63c4'}, {L'\x63c5'},
+- /* 1000 */  {L'\x63e4'}, {L'\x641c'}, {L'\x6422'}, {L'\x6452'}, {L'\x6469'}, {L'\x6477'}, {L'\x647e'}, {L'\x649a'},
+- /* 1008 */  {L'\x649d'}, {L'\x64c4'}, {L'\x652f'}, {L'\x6534'}, {L'\x654f'}, {L'\x6556'}, {L'\x656c'}, {L'\x6578'},
+- /* 1016 */  {L'\x6587'}, {L'\x6597'}, {L'\x6599'}, {L'\x65a4'}, {L'\x65b0'}, {L'\x65b9'}, {L'\x65c5'}, {L'\x65e0'},
+- /* 1024 */  {L'\x65e2'}, {L'\x65e3'}, {L'\x65e5'}, {L'\x6613'}, {L'\x6620'}, {L'\x6649'}, {L'\x6674'}, {L'\x6688'},
+- /* 1032 */  {L'\x6691'}, {L'\x669c'}, {L'\x66b4'}, {L'\x66c6'}, {L'\x66f0'}, {L'\x66f4'}, {L'\x66f8'}, {L'\x6700'},
+- /* 1040 */  {L'\x6708'}, {L'\x6709'}, {L'\x6717'}, {L'\x671b'}, {L'\x6721'}, {L'\x6728'}, {L'\x674e'}, {L'\x6753'},
+- /* 1048 */  {L'\x6756'}, {L'\x675e'}, {L'\x677b'}, {L'\x6785'}, {L'\x6797'}, {L'\x67f3'}, {L'\x67fa'}, {L'\x6817'},
+- /* 1056 */  {L'\x681f'}, {L'\x682a'}, {L'\x6852'}, {L'\x6881'}, {L'\x6885'}, {L'\x688e'}, {L'\x68a8'}, {L'\x6914'},
+- /* 1064 */  {L'\x6942'}, {L'\x69a3'}, {L'\x69ea'}, {L'\x6a02'}, {L'\x6a13'}, {L'\x6aa8'}, {L'\x6ad3'}, {L'\x6adb'},
+- /* 1072 */  {L'\x6b04'}, {L'\x6b20'}, {L'\x6b21'}, {L'\x6b54'}, {L'\x6b62'}, {L'\x6b63'}, {L'\x6b72'}, {L'\x6b77'},
+- /* 1080 */  {L'\x6b79'}, {L'\x6b9f'}, {L'\x6bae'}, {L'\x6bb3'}, {L'\x6bba'}, {L'\x6bbb'}, {L'\x6bcb'}, {L'\x6bcd'},
+- /* 1088 */  {L'\x6bd4'}, {L'\x6bdb'}, {L'\x6c0f'}, {L'\x6c14'}, {L'\x6c34'}, {L'\x6c4e'}, {L'\x6c67'}, {L'\x6c88'},
+- /* 1096 */  {L'\x6cbf'}, {L'\x6ccc'}, {L'\x6ccd'}, {L'\x6ce5'}, {L'\x6ce8'}, {L'\x6d16'}, {L'\x6d1b'}, {L'\x6d1e'},
+- /* 1104 */  {L'\x6d34'}, {L'\x6d3e'}, {L'\x6d41'}, {L'\x6d69'}, {L'\x6d6a'}, {L'\x6d77'}, {L'\x6d78'}, {L'\x6d85'},
+- /* 1112 */  {L'\x6dcb'}, {L'\x6dda'}, {L'\x6dea'}, {L'\x6df9'}, {L'\x6e1a'}, {L'\x6e2f'}, {L'\x6e6e'}, {L'\x6e80'},
+- /* 1120 */  {L'\x6e9c'}, {L'\x6eba'}, {L'\x6ec7'}, {L'\x6ecb'}, {L'\x6ed1'}, {L'\x6edb'}, {L'\x6f0f'}, {L'\x6f14'},
+- /* 1128 */  {L'\x6f22'}, {L'\x6f23'}, {L'\x6f6e'}, {L'\x6fc6'}, {L'\x6feb'}, {L'\x6ffe'}, {L'\x701b'}, {L'\x701e'},
+- /* 1136 */  {L'\x7039'}, {L'\x704a'}, {L'\x706b'}, {L'\x7070'}, {L'\x7077'}, {L'\x707d'}, {L'\x7099'}, {L'\x70ad'},
+- /* 1144 */  {L'\x70c8'}, {L'\x70d9'}, {L'\x7121'}, {L'\x7145'}, {L'\x7149'}, {L'\x716e'}, {L'\x719c'}, {L'\x71ce'},
+- /* 1152 */  {L'\x71d0'}, {L'\x7210'}, {L'\x721b'}, {L'\x7228'}, {L'\x722a'}, {L'\x722b'}, {L'\x7235'}, {L'\x7236'},
+- /* 1160 */  {L'\x723b'}, {L'\x723f'}, {L'\x7247'}, {L'\x7250'}, {L'\x7259'}, {L'\x725b'}, {L'\x7262'}, {L'\x7279'},
+- /* 1168 */  {L'\x7280'}, {L'\x7295'}, {L'\x72ac'}, {L'\x72af'}, {L'\x72c0'}, {L'\x72fc'}, {L'\x732a'}, {L'\x7375'},
+- /* 1176 */  {L'\x737a'}, {L'\x7384'}, {L'\x7387'}, {L'\x7389'}, {L'\x738b'}, {L'\x73a5'}, {L'\x73b2'}, {L'\x73de'},
+- /* 1184 */  {L'\x7406'}, {L'\x7409'}, {L'\x7422'}, {L'\x7447'}, {L'\x745c'}, {L'\x7469'}, {L'\x7471'}, {L'\x7485'},
+- /* 1192 */  {L'\x7489'}, {L'\x7498'}, {L'\x74ca'}, {L'\x74dc'}, {L'\x74e6'}, {L'\x7506'}, {L'\x7518'}, {L'\x751f'},
+- /* 1200 */  {L'\x7524'}, {L'\x7528'}, {L'\x7530'}, {L'\x7532'}, {L'\x7533'}, {L'\x7537'}, {L'\x753b'}, {L'\x753e'},
+- /* 1208 */  {L'\x7559'}, {L'\x7565'}, {L'\x7570'}, {L'\x758b'}, {L'\x7592'}, {L'\x75e2'}, {L'\x7610'}, {L'\x761d'},
+- /* 1216 */  {L'\x761f'}, {L'\x7642'}, {L'\x7669'}, {L'\x7676'}, {L'\x767d'}, {L'\x76ae'}, {L'\x76bf'}, {L'\x76ca'},
+- /* 1224 */  {L'\x76db'}, {L'\x76e3'}, {L'\x76e7'}, {L'\x76ee'}, {L'\x76f4'}, {L'\x7701'}, {L'\x771e'}, {L'\x771f'},
+- /* 1232 */  {L'\x7740'}, {L'\x774a'}, {L'\x778b'}, {L'\x77a7'}, {L'\x77db'}, {L'\x77e2'}, {L'\x77f3'}, {L'\x784e'},
+- /* 1240 */  {L'\x786b'}, {L'\x788c'}, {L'\x7891'}, {L'\x78ca'}, {L'\x78cc'}, {L'\x78fb'}, {L'\x792a'}, {L'\x793a'},
+- /* 1248 */  {L'\x793c'}, {L'\x793e'}, {L'\x7948'}, {L'\x7949'}, {L'\x7950'}, {L'\x7956'}, {L'\x795d'}, {L'\x795e'},
+- /* 1256 */  {L'\x7965'}, {L'\x797f'}, {L'\x7981'}, {L'\x798d'}, {L'\x798e'}, {L'\x798f'}, {L'\x79ae'}, {L'\x79b8'},
+- /* 1264 */  {L'\x79be'}, {L'\x79ca'}, {L'\x79d8'}, {L'\x79eb'}, {L'\x7a1c'}, {L'\x7a40'}, {L'\x7a4a'}, {L'\x7a4f'},
+- /* 1272 */  {L'\x7a74'}, {L'\x7a7a'}, {L'\x7a81'}, {L'\x7ab1'}, {L'\x7acb'}, {L'\x7aee'}, {L'\x7af9'}, {L'\x7b20'},
+- /* 1280 */  {L'\x7b8f'}, {L'\x7bc0'}, {L'\x7bc6'}, {L'\x7bc9'}, {L'\x7c3e'}, {L'\x7c60'}, {L'\x7c73'}, {L'\x7c7b'},
+- /* 1288 */  {L'\x7c92'}, {L'\x7cbe'}, {L'\x7cd2'}, {L'\x7cd6'}, {L'\x7ce3'}, {L'\x7ce7'}, {L'\x7ce8'}, {L'\x7cf8'},
+- /* 1296 */  {L'\x7d00'}, {L'\x7d10'}, {L'\x7d22'}, {L'\x7d2f'}, {L'\x7d42'}, {L'\x7d5b'}, {L'\x7d63'}, {L'\x7da0'},
+- /* 1304 */  {L'\x7dbe'}, {L'\x7dc7'}, {L'\x7df4'}, {L'\x7e02'}, {L'\x7e09'}, {L'\x7e37'}, {L'\x7e41'}, {L'\x7e45'},
+- /* 1312 */  {L'\x7f36'}, {L'\x7f3e'}, {L'\x7f51'}, {L'\x7f72'}, {L'\x7f79'}, {L'\x7f7a'}, {L'\x7f85'}, {L'\x7f8a'},
+- /* 1320 */  {L'\x7f95'}, {L'\x7f9a'}, {L'\x7fbd'}, {L'\x7ffa'}, {L'\x8001'}, {L'\x8005'}, {L'\x800c'}, {L'\x8012'},
+- /* 1328 */  {L'\x8033'}, {L'\x8046'}, {L'\x8060'}, {L'\x806f'}, {L'\x8070'}, {L'\x807e'}, {L'\x807f'}, {L'\x8089'},
+- /* 1336 */  {L'\x808b'}, {L'\x80ad'}, {L'\x80b2'}, {L'\x8103'}, {L'\x813e'}, {L'\x81d8'}, {L'\x81e3'}, {L'\x81e8'},
+- /* 1344 */  {L'\x81ea'}, {L'\x81ed'}, {L'\x81f3'}, {L'\x81fc'}, {L'\x8201'}, {L'\x8204'}, {L'\x820c'}, {L'\x8218'},
+- /* 1352 */  {L'\x821b'}, {L'\x821f'}, {L'\x826e'}, {L'\x826f'}, {L'\x8272'}, {L'\x8278'}, {L'\x8279'}, {L'\x828b'},
+- /* 1360 */  {L'\x8291'}, {L'\x829d'}, {L'\x82b1'}, {L'\x82b3'}, {L'\x82bd'}, {L'\x82e5'}, {L'\x82e6'}, {L'\x831d'},
+- /* 1368 */  {L'\x8323'}, {L'\x8336'}, {L'\x8352'}, {L'\x8353'}, {L'\x8363'}, {L'\x83ad'}, {L'\x83bd'}, {L'\x83c9'},
+- /* 1376 */  {L'\x83ca'}, {L'\x83cc'}, {L'\x83dc'}, {L'\x83e7'}, {L'\x83ef'}, {L'\x83f1'}, {L'\x843d'}, {L'\x8449'},
+- /* 1384 */  {L'\x8457'}, {L'\x84ee'}, {L'\x84f1'}, {L'\x84f3'}, {L'\x84fc'}, {L'\x8516'}, {L'\x8564'}, {L'\x85cd'},
+- /* 1392 */  {L'\x85fa'}, {L'\x8606'}, {L'\x8612'}, {L'\x862d'}, {L'\x863f'}, {L'\x864d'}, {L'\x8650'}, {L'\x865c'},
+- /* 1400 */  {L'\x8667'}, {L'\x8669'}, {L'\x866b'}, {L'\x8688'}, {L'\x86a9'}, {L'\x86e2'}, {L'\x870e'}, {L'\x8728'},
+- /* 1408 */  {L'\x876b'}, {L'\x8779'}, {L'\x8786'}, {L'\x87ba'}, {L'\x87e1'}, {L'\x8801'}, {L'\x881f'}, {L'\x8840'},
+- /* 1416 */  {L'\x884c'}, {L'\x8860'}, {L'\x8863'}, {L'\x88c2'}, {L'\x88cf'}, {L'\x88d7'}, {L'\x88de'}, {L'\x88e1'},
+- /* 1424 */  {L'\x88f8'}, {L'\x88fa'}, {L'\x8910'}, {L'\x8941'}, {L'\x8964'}, {L'\x897e'}, {L'\x8986'}, {L'\x898b'},
+- /* 1432 */  {L'\x8996'}, {L'\x89d2'}, {L'\x89e3'}, {L'\x8a00'}, {L'\x8aa0'}, {L'\x8aaa'}, {L'\x8abf'}, {L'\x8acb'},
+- /* 1440 */  {L'\x8ad2'}, {L'\x8ad6'}, {L'\x8aed'}, {L'\x8af8'}, {L'\x8afe'}, {L'\x8b01'}, {L'\x8b39'}, {L'\x8b58'},
+- /* 1448 */  {L'\x8b80'}, {L'\x8b8a'}, {L'\x8c37'}, {L'\x8c46'}, {L'\x8c48'}, {L'\x8c55'}, {L'\x8c78'}, {L'\x8c9d'},
+- /* 1456 */  {L'\x8ca1'}, {L'\x8ca9'}, {L'\x8cab'}, {L'\x8cc1'}, {L'\x8cc2'}, {L'\x8cc7'}, {L'\x8cc8'}, {L'\x8cd3'},
+- /* 1464 */  {L'\x8d08'}, {L'\x8d1b'}, {L'\x8d64'}, {L'\x8d70'}, {L'\x8d77'}, {L'\x8db3'}, {L'\x8dbc'}, {L'\x8dcb'},
+- /* 1472 */  {L'\x8def'}, {L'\x8df0'}, {L'\x8eab'}, {L'\x8eca'}, {L'\x8ed4'}, {L'\x8f26'}, {L'\x8f2a'}, {L'\x8f38'},
+- /* 1480 */  {L'\x8f3b'}, {L'\x8f62'}, {L'\x8f9b'}, {L'\x8f9e'}, {L'\x8fb0'}, {L'\x8fb5'}, {L'\x8fb6'}, {L'\x9023'},
+- /* 1488 */  {L'\x9038'}, {L'\x904a'}, {L'\x9069'}, {L'\x9072'}, {L'\x907c'}, {L'\x908f'}, {L'\x9091'}, {L'\x9094'},
+- /* 1496 */  {L'\x90ce'}, {L'\x90de'}, {L'\x90f1'}, {L'\x90fd'}, {L'\x9111'}, {L'\x911b'}, {L'\x9149'}, {L'\x914d'},
+- /* 1504 */  {L'\x916a'}, {L'\x9199'}, {L'\x91b4'}, {L'\x91c6'}, {L'\x91cc'}, {L'\x91cf'}, {L'\x91d1'}, {L'\x9234'},
+- /* 1512 */  {L'\x9238'}, {L'\x9276'}, {L'\x927c'}, {L'\x92d7'}, {L'\x92d8'}, {L'\x9304'}, {L'\x934a'}, {L'\x93f9'},
+- /* 1520 */  {L'\x9415'}, {L'\x9577'}, {L'\x9580'}, {L'\x958b'}, {L'\x95ad'}, {L'\x95b7'}, {L'\x961c'}, {L'\x962e'},
+- /* 1528 */  {L'\x964b'}, {L'\x964d'}, {L'\x9675'}, {L'\x9678'}, {L'\x967c'}, {L'\x9686'}, {L'\x96a3'}, {L'\x96b6'},
+- /* 1536 */  {L'\x96b7'}, {L'\x96b8'}, {L'\x96b9'}, {L'\x96c3'}, {L'\x96e2'}, {L'\x96e3'}, {L'\x96e8'}, {L'\x96f6'},
+- /* 1544 */  {L'\x96f7'}, {L'\x9723'}, {L'\x9732'}, {L'\x9748'}, {L'\x9751'}, {L'\x9756'}, {L'\x975e'}, {L'\x9762'},
+- /* 1552 */  {L'\x9769'}, {L'\x97cb'}, {L'\x97db'}, {L'\x97e0'}, {L'\x97ed'}, {L'\x97f3'}, {L'\x97ff'}, {L'\x9801'},
+- /* 1560 */  {L'\x9805'}, {L'\x980b'}, {L'\x9818'}, {L'\x9829'}, {L'\x983b'}, {L'\x985e'}, {L'\x98a8'}, {L'\x98db'},
+- /* 1568 */  {L'\x98df'}, {L'\x98e2'}, {L'\x98ef'}, {L'\x98fc'}, {L'\x9928'}, {L'\x9929'}, {L'\x9996'}, {L'\x9999'},
+- /* 1576 */  {L'\x99a7'}, {L'\x99ac'}, {L'\x99c2'}, {L'\x99f1'}, {L'\x99fe'}, {L'\x9a6a'}, {L'\x9aa8'}, {L'\x9ad8'},
+- /* 1584 */  {L'\x9adf'}, {L'\x9b12'}, {L'\x9b25'}, {L'\x9b2f'}, {L'\x9b32'}, {L'\x9b3c'}, {L'\x9b5a'}, {L'\x9b6f'},
+- /* 1592 */  {L'\x9c40'}, {L'\x9c57'}, {L'\x9ce5'}, {L'\x9cfd'}, {L'\x9d67'}, {L'\x9db4'}, {L'\x9dfa'}, {L'\x9e1e'},
+- /* 1600 */  {L'\x9e75'}, {L'\x9e7f'}, {L'\x9e97'}, {L'\x9e9f'}, {L'\x9ea5'}, {L'\x9ebb'}, {L'\x9ec3'}, {L'\x9ecd'},
+- /* 1608 */  {L'\x9ece'}, {L'\x9ed1'}, {L'\x9ef9'}, {L'\x9efd'}, {L'\x9efe'}, {L'\x9f05'}, {L'\x9f0e'}, {L'\x9f0f'},
+- /* 1616 */  {L'\x9f13'}, {L'\x9f16'}, {L'\x9f20'}, {L'\x9f3b'}, {L'\x9f43'}, {L'\x9f4a'}, {L'\x9f52'}, {L'\x9f8d'},
+- /* 1624 */  {L'\x9f8e'}, {L'\x9f9c'}, {L'\x9f9f'}, {L'\x9fa0'}, {L'\xa727'}, {L'\xa76f'}, {L'\xab37'}, {L'\xab52'},
+- /* 1632 */  {L']'}, {L'^'}, {L'_'}, {L'`'}, {L'a'}, {L'b'}, {L'c'}, {L'd'},
+- /* 1640 */  {L'e'}, {L'f'}, {L'g'}, {L'h'}, {L'i'}, {L'j'}, {L'k'}, {L'l'},
+- /* 1648 */  {L'm'}, {L'n'}, {L'o'}, {L'p'}, {L'q'}, {L'r'}, {L's'}, {L't'},
+- /* 1656 */  {L'u'}, {L'v'}, {L'w'}, {L'x'}, {L'y'}, {L'z'}, {L'{'}, {L'|'},
+- /* 1664 */  {L'}'}, {L'~'}};
++ /*  64 */  {L'\x00a6'}, {L'\x00ac'}, {L'\x00b7'}, {L'\x00c6'}, {L'\x00e6'}, {L'\x00f0'}, {L'\x00f8'}, {L'\x0126'},
++ /*  72 */  {L'\x0127'}, {L'\x0131'}, {L'\x014b'}, {L'\x0153'}, {L'\x018e'}, {L'\x0190'}, {L'\x01ab'}, {L'\x01c0'},
++ /*  80 */  {L'\x01c1'}, {L'\x01c2'}, {L'\x0222'}, {L'\x0237'}, {L'\x0250'}, {L'\x0251'}, {L'\x0252'}, {L'\x0253'},
++ /*  88 */  {L'\x0254'}, {L'\x0255'}, {L'\x0256'}, {L'\x0257'}, {L'\x0258'}, {L'\x0259'}, {L'\x025b'}, {L'\x025c'},
++ /*  96 */  {L'\x025e'}, {L'\x025f'}, {L'\x0260'}, {L'\x0261'}, {L'\x0262'}, {L'\x0263'}, {L'\x0264'}, {L'\x0265'},
++ /* 104 */  {L'\x0266'}, {L'\x0267'}, {L'\x0268'}, {L'\x0269'}, {L'\x026a'}, {L'\x026b'}, {L'\x026c'}, {L'\x026d'},
++ /* 112 */  {L'\x026e'}, {L'\x026f'}, {L'\x0270'}, {L'\x0271'}, {L'\x0272'}, {L'\x0273'}, {L'\x0274'}, {L'\x0275'},
++ /* 120 */  {L'\x0276'}, {L'\x0277'}, {L'\x0278'}, {L'\x0279'}, {L'\x027a'}, {L'\x027b'}, {L'\x027d'}, {L'\x027e'},
++ /* 128 */  {L'\x0280'}, {L'\x0281'}, {L'\x0282'}, {L'\x0283'}, {L'\x0284'}, {L'\x0288'}, {L'\x0289'}, {L'\x028a'},
++ /* 136 */  {L'\x028b'}, {L'\x028c'}, {L'\x028d'}, {L'\x028e'}, {L'\x028f'}, {L'\x0290'}, {L'\x0291'}, {L'\x0292'},
++ /* 144 */  {L'\x0295'}, {L'\x0298'}, {L'\x0299'}, {L'\x029b'}, {L'\x029c'}, {L'\x029d'}, {L'\x029f'}, {L'\x02a1'},
++ /* 152 */  {L'\x02a2'}, {L'\x02a3'}, {L'\x02a4'}, {L'\x02a5'}, {L'\x02a6'}, {L'\x02a7'}, {L'\x02a8'}, {L'\x02a9'},
++ /* 160 */  {L'\x02aa'}, {L'\x02ab'}, {L'\x02b9'}, {L'\x02d0'}, {L'\x02d1'}, {L'\x0300'}, {L'\x0301'}, {L'\x0313'},
++ /* 168 */  {L'\x0391'}, {L'\x0392'}, {L'\x0393'}, {L'\x0394'}, {L'\x0395'}, {L'\x0396'}, {L'\x0397'}, {L'\x0398'},
++ /* 176 */  {L'\x0399'}, {L'\x039a'}, {L'\x039b'}, {L'\x039c'}, {L'\x039d'}, {L'\x039e'}, {L'\x039f'}, {L'\x03a0'},
++ /* 184 */  {L'\x03a1'}, {L'\x03a3'}, {L'\x03a4'}, {L'\x03a5'}, {L'\x03a6'}, {L'\x03a7'}, {L'\x03a8'}, {L'\x03a9'},
++ /* 192 */  {L'\x03b1'}, {L'\x03b2'}, {L'\x03b3'}, {L'\x03b4'}, {L'\x03b5'}, {L'\x03b6'}, {L'\x03b7'}, {L'\x03b8'},
++ /* 200 */  {L'\x03b9'}, {L'\x03ba'}, {L'\x03bb'}, {L'\x03bc'}, {L'\x03bd'}, {L'\x03be'}, {L'\x03bf'}, {L'\x03c0'},
++ /* 208 */  {L'\x03c1'}, {L'\x03c2'}, {L'\x03c3'}, {L'\x03c4'}, {L'\x03c5'}, {L'\x03c6'}, {L'\x03c7'}, {L'\x03c8'},
++ /* 216 */  {L'\x03c9'}, {L'\x03dc'}, {L'\x03dd'}, {L'\x043d'}, {L'\x044a'}, {L'\x044c'}, {L'\x05d0'}, {L'\x05d1'},
++ /* 224 */  {L'\x05d2'}, {L'\x05d3'}, {L'\x05d4'}, {L'\x05db'}, {L'\x05dc'}, {L'\x05dd'}, {L'\x05e2'}, {L'\x05e8'},
++ /* 232 */  {L'\x05ea'}, {L'\x0621'}, {L'\x0627'}, {L'\x0628'}, {L'\x0629'}, {L'\x062a'}, {L'\x062b'}, {L'\x062c'},
++ /* 240 */  {L'\x062d'}, {L'\x062e'}, {L'\x062f'}, {L'\x0630'}, {L'\x0631'}, {L'\x0632'}, {L'\x0633'}, {L'\x0634'},
++ /* 248 */  {L'\x0635'}, {L'\x0636'}, {L'\x0637'}, {L'\x0638'}, {L'\x0639'}, {L'\x063a'}, {L'\x0641'}, {L'\x0642'},
++ /* 256 */  {L'\x0643'}, {L'\x0644'}, {L'\x0645'}, {L'\x0646'}, {L'\x0647'}, {L'\x0648'}, {L'\x0649'}, {L'\x064a'},
++ /* 264 */  {L'\x066e'}, {L'\x066f'}, {L'\x0671'}, {L'\x0679'}, {L'\x067a'}, {L'\x067b'}, {L'\x067e'}, {L'\x067f'},
++ /* 272 */  {L'\x0680'}, {L'\x0683'}, {L'\x0684'}, {L'\x0686'}, {L'\x0687'}, {L'\x0688'}, {L'\x068c'}, {L'\x068d'},
++ /* 280 */  {L'\x068e'}, {L'\x0691'}, {L'\x0698'}, {L'\x06a1'}, {L'\x06a4'}, {L'\x06a6'}, {L'\x06a9'}, {L'\x06ad'},
++ /* 288 */  {L'\x06af'}, {L'\x06b1'}, {L'\x06b3'}, {L'\x06ba'}, {L'\x06bb'}, {L'\x06be'}, {L'\x06c1'}, {L'\x06c5'},
++ /* 296 */  {L'\x06c6'}, {L'\x06c7'}, {L'\x06c8'}, {L'\x06c9'}, {L'\x06cb'}, {L'\x06cc'}, {L'\x06d0'}, {L'\x06d2'},
++ /* 304 */  {L'\x0f0b'}, {L'\x10dc'}, {L'\x1100'}, {L'\x1101'}, {L'\x1102'}, {L'\x1103'}, {L'\x1104'}, {L'\x1105'},
++ /* 312 */  {L'\x1106'}, {L'\x1107'}, {L'\x1108'}, {L'\x1109'}, {L'\x110a'}, {L'\x110b'}, {L'\x110c'}, {L'\x110d'},
++ /* 320 */  {L'\x110e'}, {L'\x110f'}, {L'\x1110'}, {L'\x1111'}, {L'\x1112'}, {L'\x1114'}, {L'\x1115'}, {L'\x111a'},
++ /* 328 */  {L'\x111c'}, {L'\x111d'}, {L'\x111e'}, {L'\x1120'}, {L'\x1121'}, {L'\x1122'}, {L'\x1123'}, {L'\x1127'},
++ /* 336 */  {L'\x1129'}, {L'\x112b'}, {L'\x112c'}, {L'\x112d'}, {L'\x112e'}, {L'\x112f'}, {L'\x1132'}, {L'\x1136'},
++ /* 344 */  {L'\x1140'}, {L'\x1147'}, {L'\x114c'}, {L'\x1157'}, {L'\x1158'}, {L'\x1159'}, {L'\x1160'}, {L'\x1161'},
++ /* 352 */  {L'\x1162'}, {L'\x1163'}, {L'\x1164'}, {L'\x1165'}, {L'\x1166'}, {L'\x1167'}, {L'\x1168'}, {L'\x1169'},
++ /* 360 */  {L'\x116a'}, {L'\x116b'}, {L'\x116c'}, {L'\x116d'}, {L'\x116e'}, {L'\x116f'}, {L'\x1170'}, {L'\x1171'},
++ /* 368 */  {L'\x1172'}, {L'\x1173'}, {L'\x1174'}, {L'\x1175'}, {L'\x1184'}, {L'\x1185'}, {L'\x1188'}, {L'\x1191'},
++ /* 376 */  {L'\x1192'}, {L'\x1194'}, {L'\x119e'}, {L'\x11a1'}, {L'\x11aa'}, {L'\x11ac'}, {L'\x11ad'}, {L'\x11b0'},
++ /* 384 */  {L'\x11b1'}, {L'\x11b2'}, {L'\x11b3'}, {L'\x11b4'}, {L'\x11b5'}, {L'\x11c7'}, {L'\x11c8'}, {L'\x11cc'},
++ /* 392 */  {L'\x11ce'}, {L'\x11d3'}, {L'\x11d7'}, {L'\x11d9'}, {L'\x11dd'}, {L'\x11df'}, {L'\x11f1'}, {L'\x11f2'},
++ /* 400 */  {L'\x1d02'}, {L'\x1d16'}, {L'\x1d17'}, {L'\x1d1c'}, {L'\x1d1d'}, {L'\x1d25'}, {L'\x1d7b'}, {L'\x1d85'},
++ /* 408 */  {L'\x1d91'}, {L'\x1df04'}, {L'\x1df05'}, {L'\x1df06'}, {L'\x1df08'}, {L'\x1df0a'}, {L'\x1df1e'}, {L'\x2010'},
++ /* 416 */  {L'\x20122'}, {L'\x2013'}, {L'\x2014'}, {L'\x2051c'}, {L'\x20525'}, {L'\x2054b'}, {L'\x2063a'}, {L'\x20804'},
++ /* 424 */  {L'\x208de'}, {L'\x20a2c'}, {L'\x20a9'}, {L'\x20b63'}, {L'\x214e4'}, {L'\x216a8'}, {L'\x216ea'}, {L'\x2190'},
++ /* 432 */  {L'\x2191'}, {L'\x2192'}, {L'\x2193'}, {L'\x219c8'}, {L'\x21b18'}, {L'\x21d0b'}, {L'\x21de4'}, {L'\x21de6'},
++ /* 440 */  {L'\x2202'}, {L'\x2207'}, {L'\x2211'}, {L'\x2212'}, {L'\x22183'}, {L'\x2219f'}, {L'\x22331'}, {L'\x226d4'},
++ /* 448 */  {L'\x22844'}, {L'\x2284a'}, {L'\x22b0c'}, {L'\x22bf1'}, {L'\x2300a'}, {L'\x232b8'}, {L'\x2335f'}, {L'\x23393'},
++ /* 456 */  {L'\x2339c'}, {L'\x233c3'}, {L'\x233d5'}, {L'\x2346d'}, {L'\x236a3'}, {L'\x238a7'}, {L'\x23a8d'}, {L'\x23afa'},
++ /* 464 */  {L'\x23cbc'}, {L'\x23d1e'}, {L'\x23ed1'}, {L'\x23f5e'}, {L'\x23f8e'}, {L'\x24263'}, {L'\x242ee'}, {L'\x243ab'},
++ /* 472 */  {L'\x24608'}, {L'\x24735'}, {L'\x24814'}, {L'\x24c36'}, {L'\x24c92'}, {L'\x24fa1'}, {L'\x24fb8'}, {L'\x2502'},
++ /* 480 */  {L'\x25044'}, {L'\x250f2'}, {L'\x250f3'}, {L'\x25119'}, {L'\x25133'}, {L'\x25249'}, {L'\x2541d'}, {L'\x25626'},
++ /* 488 */  {L'\x2569a'}, {L'\x256c5'}, {L'\x2597c'}, {L'\x25a0'}, {L'\x25aa7'}, {L'\x25bab'}, {L'\x25c80'}, {L'\x25cb'},
++ /* 496 */  {L'\x25cd0'}, {L'\x25f86'}, {L'\x261da'}, {L'\x26228'}, {L'\x26247'}, {L'\x262d9'}, {L'\x2633e'}, {L'\x264da'},
++ /* 504 */  {L'\x26523'}, {L'\x265a8'}, {L'\x267a7'}, {L'\x267b5'}, {L'\x26b3c'}, {L'\x26c36'}, {L'\x26cd5'}, {L'\x26d6b'},
++ /* 512 */  {L'\x26f2c'}, {L'\x26fb1'}, {L'\x270d2'}, {L'\x273ca'}, {L'\x27667'}, {L'\x278ae'}, {L'\x27966'}, {L'\x27ca8'},
++ /* 520 */  {L'\x27ed3'}, {L'\x27f2f'}, {L'\x285d2'}, {L'\x285ed'}, {L'\x2872e'}, {L'\x28bfa'}, {L'\x28d77'}, {L'\x29145'},
++ /* 528 */  {L'\x291df'}, {L'\x2921a'}, {L'\x2940a'}, {L'\x29496'}, {L'\x295b6'}, {L'\x2985'}, {L'\x2986'}, {L'\x29b30'},
++ /* 536 */  {L'\x2a0ce'}, {L'\x2a105'}, {L'\x2a20e'}, {L'\x2a291'}, {L'\x2a392'}, {L'\x2a600'}, {L'\x2c71'}, {L'\x2d61'},
++ /* 544 */  {L'\x3001'}, {L'\x3002'}, {L'\x3008'}, {L'\x3009'}, {L'\x300a'}, {L'\x300b'}, {L'\x300c'}, {L'\x300d'},
++ /* 552 */  {L'\x300e'}, {L'\x300f'}, {L'\x3010'}, {L'\x3011'}, {L'\x3012'}, {L'\x3014'}, {L'\x3015'}, {L'\x3016'},
++ /* 560 */  {L'\x3017'}, {L'\x3099'}, {L'\x309a'}, {L'\x30a1'}, {L'\x30a2'}, {L'\x30a3'}, {L'\x30a4'}, {L'\x30a5'},
++ /* 568 */  {L'\x30a6'}, {L'\x30a7'}, {L'\x30a8'}, {L'\x30a9'}, {L'\x30aa'}, {L'\x30ab'}, {L'\x30ad'}, {L'\x30af'},
++ /* 576 */  {L'\x30b1'}, {L'\x30b3'}, {L'\x30b5'}, {L'\x30b7'}, {L'\x30b9'}, {L'\x30bb'}, {L'\x30bd'}, {L'\x30bf'},
++ /* 584 */  {L'\x30c1'}, {L'\x30c3'}, {L'\x30c4'}, {L'\x30c6'}, {L'\x30c8'}, {L'\x30ca'}, {L'\x30cb'}, {L'\x30cc'},
++ /* 592 */  {L'\x30cd'}, {L'\x30ce'}, {L'\x30cf'}, {L'\x30d2'}, {L'\x30d5'}, {L'\x30d8'}, {L'\x30db'}, {L'\x30de'},
++ /* 600 */  {L'\x30df'}, {L'\x30e0'}, {L'\x30e1'}, {L'\x30e2'}, {L'\x30e3'}, {L'\x30e4'}, {L'\x30e5'}, {L'\x30e6'},
++ /* 608 */  {L'\x30e7'}, {L'\x30e8'}, {L'\x30e9'}, {L'\x30ea'}, {L'\x30eb'}, {L'\x30ec'}, {L'\x30ed'}, {L'\x30ef'},
++ /* 616 */  {L'\x30f0'}, {L'\x30f1'}, {L'\x30f2'}, {L'\x30f3'}, {L'\x30fb'}, {L'\x30fc'}, {L'\x349e'}, {L'\x34b9'},
++ /* 624 */  {L'\x34bb'}, {L'\x34df'}, {L'\x3515'}, {L'\x36ee'}, {L'\x36fc'}, {L'\x3781'}, {L'\x382f'}, {L'\x3862'},
++ /* 632 */  {L'\x387c'}, {L'\x38c7'}, {L'\x38e3'}, {L'\x391c'}, {L'\x393a'}, {L'\x3a2e'}, {L'\x3a6c'}, {L'\x3ae4'},
++ /* 640 */  {L'\x3b08'}, {L'\x3b19'}, {L'\x3b49'}, {L'\x3b9d'}, {L'\x3c18'}, {L'\x3c4e'}, {L'\x3d33'}, {L'\x3d96'},
++ /* 648 */  {L'\x3eac'}, {L'\x3eb8'}, {L'\x3f1b'}, {L'\x3ffc'}, {L'\x4008'}, {L'\x4018'}, {L'\x4039'}, {L'\x4046'},
++ /* 656 */  {L'\x4096'}, {L'\x40e3'}, {L'\x412f'}, {L'\x4202'}, {L'\x4227'}, {L'\x42a0'}, {L'\x4301'}, {L'\x4334'},
++ /* 664 */  {L'\x4359'}, {L'\x43d5'}, {L'\x43d9'}, {L'\x440b'}, {L'\x446b'}, {L'\x452b'}, {L'\x455d'}, {L'\x4561'},
++ /* 672 */  {L'\x456b'}, {L'\x45d7'}, {L'\x45f9'}, {L'\x4635'}, {L'\x46be'}, {L'\x46c7'}, {L'\x4995'}, {L'\x49e6'},
++ /* 680 */  {L'\x4a6e'}, {L'\x4a76'}, {L'\x4ab2'}, {L'\x4b33'}, {L'\x4bce'}, {L'\x4cce'}, {L'\x4ced'}, {L'\x4cf8'},
++ /* 688 */  {L'\x4d56'}, {L'\x4e00'}, {L'\x4e01'}, {L'\x4e03'}, {L'\x4e09'}, {L'\x4e0a'}, {L'\x4e0b'}, {L'\x4e0d'},
++ /* 696 */  {L'\x4e19'}, {L'\x4e26'}, {L'\x4e28'}, {L'\x4e2d'}, {L'\x4e32'}, {L'\x4e36'}, {L'\x4e38'}, {L'\x4e39'},
++ /* 704 */  {L'\x4e3d'}, {L'\x4e3f'}, {L'\x4e41'}, {L'\x4e59'}, {L'\x4e5d'}, {L'\x4e82'}, {L'\x4e85'}, {L'\x4e86'},
++ /* 712 */  {L'\x4e8c'}, {L'\x4e94'}, {L'\x4ea0'}, {L'\x4ea4'}, {L'\x4eae'}, {L'\x4eba'}, {L'\x4ec0'}, {L'\x4ecc'},
++ /* 720 */  {L'\x4ee4'}, {L'\x4f01'}, {L'\x4f11'}, {L'\x4f60'}, {L'\x4f80'}, {L'\x4f86'}, {L'\x4f8b'}, {L'\x4fae'},
++ /* 728 */  {L'\x4fbb'}, {L'\x4fbf'}, {L'\x5002'}, {L'\x502b'}, {L'\x507a'}, {L'\x5099'}, {L'\x50cf'}, {L'\x50da'},
++ /* 736 */  {L'\x50e7'}, {L'\x512a'}, {L'\x513f'}, {L'\x5140'}, {L'\x5145'}, {L'\x514d'}, {L'\x5154'}, {L'\x5164'},
++ /* 744 */  {L'\x5165'}, {L'\x5167'}, {L'\x5168'}, {L'\x5169'}, {L'\x516b'}, {L'\x516d'}, {L'\x5177'}, {L'\x5180'},
++ /* 752 */  {L'\x5182'}, {L'\x518d'}, {L'\x5192'}, {L'\x5195'}, {L'\x5196'}, {L'\x5197'}, {L'\x5199'}, {L'\x51a4'},
++ /* 760 */  {L'\x51ab'}, {L'\x51ac'}, {L'\x51b5'}, {L'\x51b7'}, {L'\x51c9'}, {L'\x51cc'}, {L'\x51dc'}, {L'\x51de'},
++ /* 768 */  {L'\x51e0'}, {L'\x51f5'}, {L'\x5200'}, {L'\x5203'}, {L'\x5207'}, {L'\x5217'}, {L'\x521d'}, {L'\x5229'},
++ /* 776 */  {L'\x523a'}, {L'\x523b'}, {L'\x5246'}, {L'\x524d'}, {L'\x5272'}, {L'\x5277'}, {L'\x5289'}, {L'\x529b'},
++ /* 784 */  {L'\x52a3'}, {L'\x52b3'}, {L'\x52b4'}, {L'\x52c7'}, {L'\x52c9'}, {L'\x52d2'}, {L'\x52de'}, {L'\x52e4'},
++ /* 792 */  {L'\x52f5'}, {L'\x52f9'}, {L'\x52fa'}, {L'\x5305'}, {L'\x5306'}, {L'\x5315'}, {L'\x5317'}, {L'\x531a'},
++ /* 800 */  {L'\x5338'}, {L'\x533b'}, {L'\x533f'}, {L'\x5341'}, {L'\x5344'}, {L'\x5345'}, {L'\x5349'}, {L'\x5351'},
++ /* 808 */  {L'\x5354'}, {L'\x535a'}, {L'\x535c'}, {L'\x5369'}, {L'\x5370'}, {L'\x5373'}, {L'\x5375'}, {L'\x537d'},
++ /* 816 */  {L'\x537f'}, {L'\x5382'}, {L'\x53b6'}, {L'\x53c3'}, {L'\x53c8'}, {L'\x53ca'}, {L'\x53cc'}, {L'\x53df'},
++ /* 824 */  {L'\x53e3'}, {L'\x53e5'}, {L'\x53eb'}, {L'\x53ef'}, {L'\x53f1'}, {L'\x53f3'}, {L'\x5406'}, {L'\x5408'},
++ /* 832 */  {L'\x540d'}, {L'\x540f'}, {L'\x541d'}, {L'\x5438'}, {L'\x5439'}, {L'\x5442'}, {L'\x5448'}, {L'\x5468'},
++ /* 840 */  {L'\x549e'}, {L'\x54a2'}, {L'\x54bd'}, {L'\x54f6'}, {L'\x5510'}, {L'\x554f'}, {L'\x5553'}, {L'\x5555'},
++ /* 848 */  {L'\x5563'}, {L'\x5584'}, {L'\x5587'}, {L'\x5599'}, {L'\x559d'}, {L'\x55ab'}, {L'\x55b3'}, {L'\x55b6'},
++ /* 856 */  {L'\x55c0'}, {L'\x55c2'}, {L'\x55e2'}, {L'\x5606'}, {L'\x5651'}, {L'\x5668'}, {L'\x5674'}, {L'\x56d7'},
++ /* 864 */  {L'\x56db'}, {L'\x56f9'}, {L'\x5716'}, {L'\x5717'}, {L'\x571f'}, {L'\x5730'}, {L'\x578b'}, {L'\x57ce'},
++ /* 872 */  {L'\x57f4'}, {L'\x580d'}, {L'\x5831'}, {L'\x5832'}, {L'\x5840'}, {L'\x585a'}, {L'\x585e'}, {L'\x58a8'},
++ /* 880 */  {L'\x58ac'}, {L'\x58b3'}, {L'\x58d8'}, {L'\x58df'}, {L'\x58eb'}, {L'\x58ee'}, {L'\x58f0'}, {L'\x58f2'},
++ /* 888 */  {L'\x58f7'}, {L'\x5902'}, {L'\x5906'}, {L'\x590a'}, {L'\x5915'}, {L'\x591a'}, {L'\x591c'}, {L'\x5922'},
++ /* 896 */  {L'\x5927'}, {L'\x5929'}, {L'\x5944'}, {L'\x5948'}, {L'\x5951'}, {L'\x5954'}, {L'\x5962'}, {L'\x5973'},
++ /* 904 */  {L'\x59d8'}, {L'\x59ec'}, {L'\x5a1b'}, {L'\x5a27'}, {L'\x5a62'}, {L'\x5a66'}, {L'\x5ab5'}, {L'\x5b08'},
++ /* 912 */  {L'\x5b28'}, {L'\x5b3e'}, {L'\x5b50'}, {L'\x5b57'}, {L'\x5b66'}, {L'\x5b80'}, {L'\x5b85'}, {L'\x5b97'},
++ /* 920 */  {L'\x5bc3'}, {L'\x5bd8'}, {L'\x5be7'}, {L'\x5bee'}, {L'\x5bf3'}, {L'\x5bf8'}, {L'\x5bff'}, {L'\x5c06'},
++ /* 928 */  {L'\x5c0f'}, {L'\x5c22'}, {L'\x5c38'}, {L'\x5c3f'}, {L'\x5c60'}, {L'\x5c62'}, {L'\x5c64'}, {L'\x5c65'},
++ /* 936 */  {L'\x5c6e'}, {L'\x5c71'}, {L'\x5c8d'}, {L'\x5cc0'}, {L'\x5d19'}, {L'\x5d43'}, {L'\x5d50'}, {L'\x5d6b'},
++ /* 944 */  {L'\x5d6e'}, {L'\x5d7c'}, {L'\x5db2'}, {L'\x5dba'}, {L'\x5ddb'}, {L'\x5de1'}, {L'\x5de2'}, {L'\x5de5'},
++ /* 952 */  {L'\x5de6'}, {L'\x5df1'}, {L'\x5dfd'}, {L'\x5dfe'}, {L'\x5e28'}, {L'\x5e3d'}, {L'\x5e69'}, {L'\x5e72'},
++ /* 960 */  {L'\x5e74'}, {L'\x5e7a'}, {L'\x5e7c'}, {L'\x5e7f'}, {L'\x5ea6'}, {L'\x5eb0'}, {L'\x5eb3'}, {L'\x5eb6'},
++ /* 968 */  {L'\x5ec9'}, {L'\x5eca'}, {L'\x5ed2'}, {L'\x5ed3'}, {L'\x5ed9'}, {L'\x5eec'}, {L'\x5ef4'}, {L'\x5efe'},
++ /* 976 */  {L'\x5f04'}, {L'\x5f0b'}, {L'\x5f13'}, {L'\x5f22'}, {L'\x5f50'}, {L'\x5f53'}, {L'\x5f61'}, {L'\x5f62'},
++ /* 984 */  {L'\x5f69'}, {L'\x5f6b'}, {L'\x5f73'}, {L'\x5f8b'}, {L'\x5f8c'}, {L'\x5f97'}, {L'\x5f9a'}, {L'\x5fa9'},
++ /* 992 */  {L'\x5fad'}, {L'\x5fc3'}, {L'\x5fcd'}, {L'\x5fd7'}, {L'\x5ff5'}, {L'\x5ff9'}, {L'\x6012'}, {L'\x601c'},
++ /* 1000 */  {L'\x6075'}, {L'\x6081'}, {L'\x6094'}, {L'\x60c7'}, {L'\x60d8'}, {L'\x60e1'}, {L'\x6108'}, {L'\x6144'},
++ /* 1008 */  {L'\x6148'}, {L'\x614c'}, {L'\x614e'}, {L'\x6160'}, {L'\x6168'}, {L'\x617a'}, {L'\x618e'}, {L'\x6190'},
++ /* 1016 */  {L'\x61a4'}, {L'\x61af'}, {L'\x61b2'}, {L'\x61de'}, {L'\x61f2'}, {L'\x61f6'}, {L'\x6200'}, {L'\x6208'},
++ /* 1024 */  {L'\x6210'}, {L'\x621b'}, {L'\x622e'}, {L'\x6234'}, {L'\x6236'}, {L'\x624b'}, {L'\x6253'}, {L'\x625d'},
++ /* 1032 */  {L'\x6295'}, {L'\x62b1'}, {L'\x62c9'}, {L'\x62cf'}, {L'\x62d3'}, {L'\x62d4'}, {L'\x62fc'}, {L'\x62fe'},
++ /* 1040 */  {L'\x6307'}, {L'\x633d'}, {L'\x6350'}, {L'\x6355'}, {L'\x6368'}, {L'\x637b'}, {L'\x6383'}, {L'\x63a0'},
++ /* 1048 */  {L'\x63a9'}, {L'\x63c4'}, {L'\x63c5'}, {L'\x63e4'}, {L'\x641c'}, {L'\x6422'}, {L'\x6452'}, {L'\x6469'},
++ /* 1056 */  {L'\x6477'}, {L'\x647e'}, {L'\x649a'}, {L'\x649d'}, {L'\x64c4'}, {L'\x652f'}, {L'\x6534'}, {L'\x654f'},
++ /* 1064 */  {L'\x6556'}, {L'\x656c'}, {L'\x6578'}, {L'\x6587'}, {L'\x6597'}, {L'\x6599'}, {L'\x65a4'}, {L'\x65b0'},
++ /* 1072 */  {L'\x65b9'}, {L'\x65c5'}, {L'\x65e0'}, {L'\x65e2'}, {L'\x65e3'}, {L'\x65e5'}, {L'\x6613'}, {L'\x6620'},
++ /* 1080 */  {L'\x6649'}, {L'\x6674'}, {L'\x6688'}, {L'\x6691'}, {L'\x669c'}, {L'\x66b4'}, {L'\x66c6'}, {L'\x66f0'},
++ /* 1088 */  {L'\x66f4'}, {L'\x66f8'}, {L'\x6700'}, {L'\x6708'}, {L'\x6709'}, {L'\x6717'}, {L'\x671b'}, {L'\x6721'},
++ /* 1096 */  {L'\x6728'}, {L'\x674e'}, {L'\x6753'}, {L'\x6756'}, {L'\x675e'}, {L'\x677b'}, {L'\x6785'}, {L'\x6797'},
++ /* 1104 */  {L'\x67f3'}, {L'\x67fa'}, {L'\x6817'}, {L'\x681f'}, {L'\x682a'}, {L'\x6852'}, {L'\x6881'}, {L'\x6885'},
++ /* 1112 */  {L'\x688e'}, {L'\x68a8'}, {L'\x6914'}, {L'\x6942'}, {L'\x69a3'}, {L'\x69ea'}, {L'\x6a02'}, {L'\x6a13'},
++ /* 1120 */  {L'\x6aa8'}, {L'\x6ad3'}, {L'\x6adb'}, {L'\x6b04'}, {L'\x6b20'}, {L'\x6b21'}, {L'\x6b54'}, {L'\x6b62'},
++ /* 1128 */  {L'\x6b63'}, {L'\x6b72'}, {L'\x6b77'}, {L'\x6b79'}, {L'\x6b9f'}, {L'\x6bae'}, {L'\x6bb3'}, {L'\x6bba'},
++ /* 1136 */  {L'\x6bbb'}, {L'\x6bcb'}, {L'\x6bcd'}, {L'\x6bd4'}, {L'\x6bdb'}, {L'\x6c0f'}, {L'\x6c14'}, {L'\x6c34'},
++ /* 1144 */  {L'\x6c4e'}, {L'\x6c67'}, {L'\x6c88'}, {L'\x6cbf'}, {L'\x6ccc'}, {L'\x6ccd'}, {L'\x6ce5'}, {L'\x6ce8'},
++ /* 1152 */  {L'\x6d16'}, {L'\x6d1b'}, {L'\x6d1e'}, {L'\x6d34'}, {L'\x6d3e'}, {L'\x6d41'}, {L'\x6d69'}, {L'\x6d6a'},
++ /* 1160 */  {L'\x6d77'}, {L'\x6d78'}, {L'\x6d85'}, {L'\x6dcb'}, {L'\x6dda'}, {L'\x6dea'}, {L'\x6df9'}, {L'\x6e1a'},
++ /* 1168 */  {L'\x6e2f'}, {L'\x6e6e'}, {L'\x6e80'}, {L'\x6e9c'}, {L'\x6eba'}, {L'\x6ec7'}, {L'\x6ecb'}, {L'\x6ed1'},
++ /* 1176 */  {L'\x6edb'}, {L'\x6f0f'}, {L'\x6f14'}, {L'\x6f22'}, {L'\x6f23'}, {L'\x6f6e'}, {L'\x6fc6'}, {L'\x6feb'},
++ /* 1184 */  {L'\x6ffe'}, {L'\x701b'}, {L'\x701e'}, {L'\x7039'}, {L'\x704a'}, {L'\x706b'}, {L'\x7070'}, {L'\x7077'},
++ /* 1192 */  {L'\x707d'}, {L'\x7099'}, {L'\x70ad'}, {L'\x70c8'}, {L'\x70d9'}, {L'\x7121'}, {L'\x7145'}, {L'\x7149'},
++ /* 1200 */  {L'\x716e'}, {L'\x719c'}, {L'\x71ce'}, {L'\x71d0'}, {L'\x7210'}, {L'\x721b'}, {L'\x7228'}, {L'\x722a'},
++ /* 1208 */  {L'\x722b'}, {L'\x7235'}, {L'\x7236'}, {L'\x723b'}, {L'\x723f'}, {L'\x7247'}, {L'\x7250'}, {L'\x7259'},
++ /* 1216 */  {L'\x725b'}, {L'\x7262'}, {L'\x7279'}, {L'\x7280'}, {L'\x7295'}, {L'\x72ac'}, {L'\x72af'}, {L'\x72c0'},
++ /* 1224 */  {L'\x72fc'}, {L'\x732a'}, {L'\x7375'}, {L'\x737a'}, {L'\x7384'}, {L'\x7387'}, {L'\x7389'}, {L'\x738b'},
++ /* 1232 */  {L'\x73a5'}, {L'\x73b2'}, {L'\x73de'}, {L'\x7406'}, {L'\x7409'}, {L'\x7422'}, {L'\x7447'}, {L'\x745c'},
++ /* 1240 */  {L'\x7469'}, {L'\x7471'}, {L'\x7485'}, {L'\x7489'}, {L'\x7498'}, {L'\x74ca'}, {L'\x74dc'}, {L'\x74e6'},
++ /* 1248 */  {L'\x7506'}, {L'\x7518'}, {L'\x751f'}, {L'\x7524'}, {L'\x7528'}, {L'\x7530'}, {L'\x7532'}, {L'\x7533'},
++ /* 1256 */  {L'\x7537'}, {L'\x753b'}, {L'\x753e'}, {L'\x7559'}, {L'\x7565'}, {L'\x7570'}, {L'\x758b'}, {L'\x7592'},
++ /* 1264 */  {L'\x75e2'}, {L'\x7610'}, {L'\x761d'}, {L'\x761f'}, {L'\x7642'}, {L'\x7669'}, {L'\x7676'}, {L'\x767d'},
++ /* 1272 */  {L'\x76ae'}, {L'\x76bf'}, {L'\x76ca'}, {L'\x76db'}, {L'\x76e3'}, {L'\x76e7'}, {L'\x76ee'}, {L'\x76f4'},
++ /* 1280 */  {L'\x7701'}, {L'\x771e'}, {L'\x771f'}, {L'\x7740'}, {L'\x774a'}, {L'\x778b'}, {L'\x77a7'}, {L'\x77db'},
++ /* 1288 */  {L'\x77e2'}, {L'\x77f3'}, {L'\x784e'}, {L'\x786b'}, {L'\x788c'}, {L'\x7891'}, {L'\x78ca'}, {L'\x78cc'},
++ /* 1296 */  {L'\x78fb'}, {L'\x792a'}, {L'\x793a'}, {L'\x793c'}, {L'\x793e'}, {L'\x7948'}, {L'\x7949'}, {L'\x7950'},
++ /* 1304 */  {L'\x7956'}, {L'\x795d'}, {L'\x795e'}, {L'\x7965'}, {L'\x797f'}, {L'\x7981'}, {L'\x798d'}, {L'\x798e'},
++ /* 1312 */  {L'\x798f'}, {L'\x79ae'}, {L'\x79b8'}, {L'\x79be'}, {L'\x79ca'}, {L'\x79d8'}, {L'\x79eb'}, {L'\x7a1c'},
++ /* 1320 */  {L'\x7a40'}, {L'\x7a4a'}, {L'\x7a4f'}, {L'\x7a74'}, {L'\x7a7a'}, {L'\x7a81'}, {L'\x7ab1'}, {L'\x7acb'},
++ /* 1328 */  {L'\x7aee'}, {L'\x7af9'}, {L'\x7b20'}, {L'\x7b8f'}, {L'\x7bc0'}, {L'\x7bc6'}, {L'\x7bc9'}, {L'\x7c3e'},
++ /* 1336 */  {L'\x7c60'}, {L'\x7c73'}, {L'\x7c7b'}, {L'\x7c92'}, {L'\x7cbe'}, {L'\x7cd2'}, {L'\x7cd6'}, {L'\x7ce3'},
++ /* 1344 */  {L'\x7ce7'}, {L'\x7ce8'}, {L'\x7cf8'}, {L'\x7d00'}, {L'\x7d10'}, {L'\x7d22'}, {L'\x7d2f'}, {L'\x7d42'},
++ /* 1352 */  {L'\x7d5b'}, {L'\x7d63'}, {L'\x7da0'}, {L'\x7dbe'}, {L'\x7dc7'}, {L'\x7df4'}, {L'\x7e02'}, {L'\x7e09'},
++ /* 1360 */  {L'\x7e37'}, {L'\x7e41'}, {L'\x7e45'}, {L'\x7f36'}, {L'\x7f3e'}, {L'\x7f51'}, {L'\x7f72'}, {L'\x7f79'},
++ /* 1368 */  {L'\x7f7a'}, {L'\x7f85'}, {L'\x7f8a'}, {L'\x7f95'}, {L'\x7f9a'}, {L'\x7fbd'}, {L'\x7ffa'}, {L'\x8001'},
++ /* 1376 */  {L'\x8005'}, {L'\x800c'}, {L'\x8012'}, {L'\x8033'}, {L'\x8046'}, {L'\x8060'}, {L'\x806f'}, {L'\x8070'},
++ /* 1384 */  {L'\x807e'}, {L'\x807f'}, {L'\x8089'}, {L'\x808b'}, {L'\x80ad'}, {L'\x80b2'}, {L'\x8103'}, {L'\x813e'},
++ /* 1392 */  {L'\x81d8'}, {L'\x81e3'}, {L'\x81e8'}, {L'\x81ea'}, {L'\x81ed'}, {L'\x81f3'}, {L'\x81fc'}, {L'\x8201'},
++ /* 1400 */  {L'\x8204'}, {L'\x820c'}, {L'\x8218'}, {L'\x821b'}, {L'\x821f'}, {L'\x826e'}, {L'\x826f'}, {L'\x8272'},
++ /* 1408 */  {L'\x8278'}, {L'\x8279'}, {L'\x828b'}, {L'\x8291'}, {L'\x829d'}, {L'\x82b1'}, {L'\x82b3'}, {L'\x82bd'},
++ /* 1416 */  {L'\x82e5'}, {L'\x82e6'}, {L'\x831d'}, {L'\x8323'}, {L'\x8336'}, {L'\x8352'}, {L'\x8353'}, {L'\x8363'},
++ /* 1424 */  {L'\x83ad'}, {L'\x83bd'}, {L'\x83c9'}, {L'\x83ca'}, {L'\x83cc'}, {L'\x83dc'}, {L'\x83e7'}, {L'\x83ef'},
++ /* 1432 */  {L'\x83f1'}, {L'\x843d'}, {L'\x8449'}, {L'\x8457'}, {L'\x84ee'}, {L'\x84f1'}, {L'\x84f3'}, {L'\x84fc'},
++ /* 1440 */  {L'\x8516'}, {L'\x8564'}, {L'\x85cd'}, {L'\x85fa'}, {L'\x8606'}, {L'\x8612'}, {L'\x862d'}, {L'\x863f'},
++ /* 1448 */  {L'\x864d'}, {L'\x8650'}, {L'\x865c'}, {L'\x8667'}, {L'\x8669'}, {L'\x866b'}, {L'\x8688'}, {L'\x86a9'},
++ /* 1456 */  {L'\x86e2'}, {L'\x870e'}, {L'\x8728'}, {L'\x876b'}, {L'\x8779'}, {L'\x8786'}, {L'\x87ba'}, {L'\x87e1'},
++ /* 1464 */  {L'\x8801'}, {L'\x881f'}, {L'\x8840'}, {L'\x884c'}, {L'\x8860'}, {L'\x8863'}, {L'\x88c2'}, {L'\x88cf'},
++ /* 1472 */  {L'\x88d7'}, {L'\x88de'}, {L'\x88e1'}, {L'\x88f8'}, {L'\x88fa'}, {L'\x8910'}, {L'\x8941'}, {L'\x8964'},
++ /* 1480 */  {L'\x897e'}, {L'\x8986'}, {L'\x898b'}, {L'\x8996'}, {L'\x89d2'}, {L'\x89e3'}, {L'\x8a00'}, {L'\x8aa0'},
++ /* 1488 */  {L'\x8aaa'}, {L'\x8abf'}, {L'\x8acb'}, {L'\x8ad2'}, {L'\x8ad6'}, {L'\x8aed'}, {L'\x8af8'}, {L'\x8afe'},
++ /* 1496 */  {L'\x8b01'}, {L'\x8b39'}, {L'\x8b58'}, {L'\x8b80'}, {L'\x8b8a'}, {L'\x8c37'}, {L'\x8c46'}, {L'\x8c48'},
++ /* 1504 */  {L'\x8c55'}, {L'\x8c78'}, {L'\x8c9d'}, {L'\x8ca1'}, {L'\x8ca9'}, {L'\x8cab'}, {L'\x8cc1'}, {L'\x8cc2'},
++ /* 1512 */  {L'\x8cc7'}, {L'\x8cc8'}, {L'\x8cd3'}, {L'\x8d08'}, {L'\x8d1b'}, {L'\x8d64'}, {L'\x8d70'}, {L'\x8d77'},
++ /* 1520 */  {L'\x8db3'}, {L'\x8dbc'}, {L'\x8dcb'}, {L'\x8def'}, {L'\x8df0'}, {L'\x8eab'}, {L'\x8eca'}, {L'\x8ed4'},
++ /* 1528 */  {L'\x8f26'}, {L'\x8f2a'}, {L'\x8f38'}, {L'\x8f3b'}, {L'\x8f62'}, {L'\x8f9b'}, {L'\x8f9e'}, {L'\x8fb0'},
++ /* 1536 */  {L'\x8fb5'}, {L'\x8fb6'}, {L'\x9023'}, {L'\x9038'}, {L'\x904a'}, {L'\x9069'}, {L'\x9072'}, {L'\x907c'},
++ /* 1544 */  {L'\x908f'}, {L'\x9091'}, {L'\x9094'}, {L'\x90ce'}, {L'\x90de'}, {L'\x90f1'}, {L'\x90fd'}, {L'\x9111'},
++ /* 1552 */  {L'\x911b'}, {L'\x9149'}, {L'\x914d'}, {L'\x916a'}, {L'\x9199'}, {L'\x91b4'}, {L'\x91c6'}, {L'\x91cc'},
++ /* 1560 */  {L'\x91cf'}, {L'\x91d1'}, {L'\x9234'}, {L'\x9238'}, {L'\x9276'}, {L'\x927c'}, {L'\x92d7'}, {L'\x92d8'},
++ /* 1568 */  {L'\x9304'}, {L'\x934a'}, {L'\x93f9'}, {L'\x9415'}, {L'\x9577'}, {L'\x9580'}, {L'\x958b'}, {L'\x95ad'},
++ /* 1576 */  {L'\x95b7'}, {L'\x961c'}, {L'\x962e'}, {L'\x964b'}, {L'\x964d'}, {L'\x9675'}, {L'\x9678'}, {L'\x967c'},
++ /* 1584 */  {L'\x9686'}, {L'\x96a3'}, {L'\x96b6'}, {L'\x96b7'}, {L'\x96b8'}, {L'\x96b9'}, {L'\x96c3'}, {L'\x96e2'},
++ /* 1592 */  {L'\x96e3'}, {L'\x96e8'}, {L'\x96f6'}, {L'\x96f7'}, {L'\x9723'}, {L'\x9732'}, {L'\x9748'}, {L'\x9751'},
++ /* 1600 */  {L'\x9756'}, {L'\x975e'}, {L'\x9762'}, {L'\x9769'}, {L'\x97cb'}, {L'\x97db'}, {L'\x97e0'}, {L'\x97ed'},
++ /* 1608 */  {L'\x97f3'}, {L'\x97ff'}, {L'\x9801'}, {L'\x9805'}, {L'\x980b'}, {L'\x9818'}, {L'\x9829'}, {L'\x983b'},
++ /* 1616 */  {L'\x985e'}, {L'\x98a8'}, {L'\x98db'}, {L'\x98df'}, {L'\x98e2'}, {L'\x98ef'}, {L'\x98fc'}, {L'\x9928'},
++ /* 1624 */  {L'\x9929'}, {L'\x9996'}, {L'\x9999'}, {L'\x99a7'}, {L'\x99ac'}, {L'\x99c2'}, {L'\x99f1'}, {L'\x99fe'},
++ /* 1632 */  {L'\x9a6a'}, {L'\x9aa8'}, {L'\x9ad8'}, {L'\x9adf'}, {L'\x9b12'}, {L'\x9b25'}, {L'\x9b2f'}, {L'\x9b32'},
++ /* 1640 */  {L'\x9b3c'}, {L'\x9b5a'}, {L'\x9b6f'}, {L'\x9c40'}, {L'\x9c57'}, {L'\x9ce5'}, {L'\x9cfd'}, {L'\x9d67'},
++ /* 1648 */  {L'\x9db4'}, {L'\x9dfa'}, {L'\x9e1e'}, {L'\x9e75'}, {L'\x9e7f'}, {L'\x9e97'}, {L'\x9e9f'}, {L'\x9ea5'},
++ /* 1656 */  {L'\x9ebb'}, {L'\x9ec3'}, {L'\x9ecd'}, {L'\x9ece'}, {L'\x9ed1'}, {L'\x9ef9'}, {L'\x9efd'}, {L'\x9efe'},
++ /* 1664 */  {L'\x9f05'}, {L'\x9f0e'}, {L'\x9f0f'}, {L'\x9f13'}, {L'\x9f16'}, {L'\x9f20'}, {L'\x9f3b'}, {L'\x9f43'},
++ /* 1672 */  {L'\x9f4a'}, {L'\x9f52'}, {L'\x9f8d'}, {L'\x9f8e'}, {L'\x9f9c'}, {L'\x9f9f'}, {L'\x9fa0'}, {L'\xa727'},
++ /* 1680 */  {L'\xa76f'}, {L'\xa78e'}, {L'\xab37'}, {L'\xab52'}, {L'\xab66'}, {L'\xab67'}, {L']'}, {L'^'},
++ /* 1688 */  {L'_'}, {L'`'}, {L'a'}, {L'b'}, {L'c'}, {L'd'}, {L'e'}, {L'f'},
++ /* 1696 */  {L'g'}, {L'h'}, {L'i'}, {L'j'}, {L'k'}, {L'l'}, {L'm'}, {L'n'},
++ /* 1704 */  {L'o'}, {L'p'}, {L'q'}, {L'r'}, {L's'}, {L't'}, {L'u'}, {L'v'},
++ /* 1712 */  {L'w'}, {L'x'}, {L'y'}, {L'z'}, {L'{'}, {L'|'}, {L'}'}, {L'~'}};
+ 
+ static const wchar_t UNWIF_compat_tbl_2 [1193][2] = {
+  /*   0 */  {L'.',L'.'}, {L'0',L','}, {L'0',L'.'}, {L'0',L'\x70b9'}, {L'1',L','}, {L'1',L'.'}, {L'1',L'0'}, {L'1',L'1'},
+@@ -543,9 +549,9 @@ static const uint16_t UNWIF_compat_00_00 [256] = {
+ /*   0090 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0098 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   00a0 */  TBL(1)|52, 0, 0, 0, 0, 0, 0, 0,
+-/*   00a8 */  TBL(2)|335, 0, TBL(1)|1636, 0, 0, 0, 0, TBL(2)|331,
+-/*   00b0 */  0, 0, TBL(1)|10, TBL(1)|11, TBL(2)|329, TBL(1)|160, 0, 0,
+-/*   00b8 */  TBL(2)|340, TBL(1)|9, TBL(1)|1650, 0, TBL(3)|148, TBL(3)|146, TBL(3)|174, 0,
++/*   00a8 */  TBL(2)|335, 0, TBL(1)|1690, 0, 0, 0, 0, TBL(2)|331,
++/*   00b0 */  0, 0, TBL(1)|10, TBL(1)|11, TBL(2)|329, TBL(1)|203, 0, 0,
++/*   00b8 */  TBL(2)|340, TBL(1)|9, TBL(1)|1704, 0, TBL(3)|148, TBL(3)|146, TBL(3)|174, 0,
+ /*   00c0 */  TBL(2)|98, TBL(2)|99, TBL(2)|100, TBL(2)|101, TBL(2)|105, TBL(2)|107, 0, TBL(2)|123,
+ /*   00c8 */  TBL(2)|133, TBL(2)|134, TBL(2)|135, TBL(2)|140, TBL(2)|176, TBL(2)|177, TBL(2)|178, TBL(2)|183,
+ /*   00d0 */  0, TBL(2)|222, TBL(2)|231, TBL(2)|232, TBL(2)|233, TBL(2)|234, TBL(2)|238, 0,
+@@ -572,7 +578,7 @@ static const uint16_t UNWIF_compat_00_01 [256] = {
+ /*   0160 */  TBL(2)|267, TBL(2)|1131, TBL(2)|277, TBL(2)|1142, TBL(2)|274, TBL(2)|1139, 0, 0,
+ /*   0168 */  TBL(2)|283, TBL(2)|1148, TBL(2)|284, TBL(2)|1149, TBL(2)|285, TBL(2)|1150, TBL(2)|288, TBL(2)|1153,
+ /*   0170 */  TBL(2)|289, TBL(2)|1154, TBL(2)|296, TBL(2)|1161, TBL(2)|306, TBL(2)|1169, TBL(2)|316, TBL(2)|1179,
+-/*   0178 */  TBL(2)|320, TBL(2)|323, TBL(2)|1187, TBL(2)|325, TBL(2)|1189, TBL(2)|326, TBL(2)|1190, TBL(1)|1654,
++/*   0178 */  TBL(2)|320, TBL(2)|323, TBL(2)|1187, TBL(2)|325, TBL(2)|1189, TBL(2)|326, TBL(2)|1190, TBL(1)|1708,
+ /*   0180 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0188 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0190 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -614,13 +620,13 @@ static const uint16_t UNWIF_compat_00_02 [256] = {
+ /*   0298 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   02a0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   02a8 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   02b0 */  TBL(1)|1643, TBL(1)|91, TBL(1)|1645, TBL(1)|1653, TBL(1)|105, TBL(1)|106, TBL(1)|107, TBL(1)|1658,
+-/*   02b8 */  TBL(1)|1660, 0, 0, 0, 0, 0, 0, 0,
++/*   02b0 */  TBL(1)|1697, TBL(1)|104, TBL(1)|1699, TBL(1)|1707, TBL(1)|123, TBL(1)|125, TBL(1)|129, TBL(1)|1712,
++/*   02b8 */  TBL(1)|1714, 0, 0, 0, 0, 0, 0, 0,
+ /*   02c0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   02c8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   02d0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   02d8 */  TBL(2)|333, TBL(2)|334, TBL(2)|336, TBL(2)|341, TBL(2)|330, TBL(2)|337, 0, 0,
+-/*   02e0 */  TBL(1)|89, TBL(1)|1647, TBL(1)|1654, TBL(1)|1659, TBL(1)|118, 0, 0, 0,
++/*   02e0 */  TBL(1)|101, TBL(1)|1701, TBL(1)|1708, TBL(1)|1713, TBL(1)|144, 0, 0, 0,
+ /*   02e8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   02f0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   02f8 */  0, 0, 0, 0, 0, 0, 0, 0
+@@ -635,13 +641,13 @@ static const uint16_t UNWIF_compat_00_03 [256] = {
+ /*   0328 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0330 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0338 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   0340 */  TBL(1)|122, TBL(1)|123, 0, TBL(1)|124, TBL(2)|368, 0, 0, 0,
++/*   0340 */  TBL(1)|165, TBL(1)|166, 0, TBL(1)|167, TBL(2)|368, 0, 0, 0,
+ /*   0348 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0350 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0358 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0360 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0368 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   0370 */  0, 0, 0, 0, TBL(1)|121, 0, 0, 0,
++/*   0370 */  0, 0, 0, 0, TBL(1)|162, 0, 0, 0,
+ /*   0378 */  0, 0, TBL(2)|344, 0, 0, 0, TBL(1)|19, 0,
+ /*   0380 */  0, 0, 0, 0, TBL(2)|329, TBL(3)|260, TBL(2)|370, TBL(1)|66,
+ /*   0388 */  TBL(2)|377, TBL(2)|381, TBL(2)|386, 0, TBL(2)|393, 0, TBL(2)|398, TBL(2)|404,
+@@ -653,12 +659,12 @@ static const uint16_t UNWIF_compat_00_03 [256] = {
+ /*   03b8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   03c0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   03c8 */  0, 0, TBL(2)|430, TBL(2)|452, TBL(2)|443, TBL(2)|449, TBL(2)|457, 0,
+-/*   03d0 */  TBL(1)|150, TBL(1)|156, TBL(1)|144, TBL(2)|398, TBL(2)|401, TBL(1)|170, TBL(1)|164, 0,
++/*   03d0 */  TBL(1)|193, TBL(1)|199, TBL(1)|187, TBL(2)|398, TBL(2)|401, TBL(1)|213, TBL(1)|207, 0,
+ /*   03d8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   03e0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   03e8 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   03f0 */  TBL(1)|158, TBL(1)|165, TBL(1)|166, 0, TBL(1)|132, TBL(1)|153, 0, 0,
+-/*   03f8 */  0, TBL(1)|142, 0, 0, 0, 0, 0, 0
++/*   03f0 */  TBL(1)|201, TBL(1)|208, TBL(1)|209, 0, TBL(1)|175, TBL(1)|196, 0, 0,
++/*   03f8 */  0, TBL(1)|185, 0, 0, 0, 0, 0, 0
+ };
+ 
+ static const uint16_t UNWIF_compat_00_04 [256] = {
+@@ -978,7 +984,7 @@ static const uint16_t UNWIF_compat_00_0e [256] = {
+ 
+ static const uint16_t UNWIF_compat_00_0f [256] = {
+ /*   0f00 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   0f08 */  0, 0, 0, 0, TBL(1)|261, 0, 0, 0,
++/*   0f08 */  0, 0, 0, 0, TBL(1)|304, 0, 0, 0,
+ /*   0f10 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0f18 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   0f20 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1043,7 +1049,7 @@ static const uint16_t UNWIF_compat_00_10 [256] = {
+ /*   10e0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   10e8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   10f0 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   10f8 */  0, 0, 0, 0, TBL(1)|262, 0, 0, 0
++/*   10f8 */  0, 0, 0, 0, TBL(1)|305, 0, 0, 0
+ };
+ 
+ static const uint16_t UNWIF_compat_00_1b [256] = {
+@@ -1088,24 +1094,24 @@ static const uint16_t UNWIF_compat_00_1d [256] = {
+ /*   1d18 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1d20 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1d28 */  0, 0, 0, 0, TBL(1)|25, TBL(1)|67, TBL(1)|26, 0,
+-/*   1d30 */  TBL(1)|28, TBL(1)|29, TBL(1)|74, TBL(1)|31, TBL(1)|32, TBL(1)|33, TBL(1)|34, TBL(1)|35,
+-/*   1d38 */  TBL(1)|36, TBL(1)|37, TBL(1)|38, 0, TBL(1)|39, TBL(1)|77, TBL(1)|40, TBL(1)|42,
+-/*   1d40 */  TBL(1)|44, TBL(1)|45, TBL(1)|47, TBL(1)|1636, TBL(1)|79, TBL(1)|80, TBL(1)|357, TBL(1)|1637,
+-/*   1d48 */  TBL(1)|1639, TBL(1)|1640, TBL(1)|84, TBL(1)|85, TBL(1)|86, TBL(1)|1642, 0, TBL(1)|1646,
+-/*   1d50 */  TBL(1)|1648, TBL(1)|72, TBL(1)|1650, TBL(1)|82, TBL(1)|358, TBL(1)|359, TBL(1)|1651, TBL(1)|1655,
+-/*   1d58 */  TBL(1)|1656, TBL(1)|361, TBL(1)|97, TBL(1)|1657, TBL(1)|362, TBL(1)|150, TBL(1)|151, TBL(1)|152,
+-/*   1d60 */  TBL(1)|170, TBL(1)|171, TBL(1)|1644, TBL(1)|1653, TBL(1)|1656, TBL(1)|1657, TBL(1)|150, TBL(1)|151,
+-/*   1d68 */  TBL(1)|165, TBL(1)|170, TBL(1)|171, 0, 0, 0, 0, 0,
++/*   1d30 */  TBL(1)|28, TBL(1)|29, TBL(1)|76, TBL(1)|31, TBL(1)|32, TBL(1)|33, TBL(1)|34, TBL(1)|35,
++/*   1d38 */  TBL(1)|36, TBL(1)|37, TBL(1)|38, 0, TBL(1)|39, TBL(1)|82, TBL(1)|40, TBL(1)|42,
++/*   1d40 */  TBL(1)|44, TBL(1)|45, TBL(1)|47, TBL(1)|1690, TBL(1)|84, TBL(1)|85, TBL(1)|400, TBL(1)|1691,
++/*   1d48 */  TBL(1)|1693, TBL(1)|1694, TBL(1)|93, TBL(1)|94, TBL(1)|95, TBL(1)|1696, 0, TBL(1)|1700,
++/*   1d50 */  TBL(1)|1702, TBL(1)|74, TBL(1)|1704, TBL(1)|88, TBL(1)|401, TBL(1)|402, TBL(1)|1705, TBL(1)|1709,
++/*   1d58 */  TBL(1)|1710, TBL(1)|404, TBL(1)|113, TBL(1)|1711, TBL(1)|405, TBL(1)|193, TBL(1)|194, TBL(1)|195,
++/*   1d60 */  TBL(1)|213, TBL(1)|214, TBL(1)|1698, TBL(1)|1707, TBL(1)|1710, TBL(1)|1711, TBL(1)|193, TBL(1)|194,
++/*   1d68 */  TBL(1)|208, TBL(1)|213, TBL(1)|214, 0, 0, 0, 0, 0,
+ /*   1d70 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   1d78 */  TBL(1)|176, 0, 0, 0, 0, 0, 0, 0,
++/*   1d78 */  TBL(1)|219, 0, 0, 0, 0, 0, 0, 0,
+ /*   1d80 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1d88 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1d90 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   1d98 */  0, 0, 0, TBL(1)|81, TBL(1)|1638, TBL(1)|83, TBL(1)|68, TBL(1)|86,
+-/*   1da0 */  TBL(1)|1641, TBL(1)|87, TBL(1)|88, TBL(1)|90, TBL(1)|92, TBL(1)|93, TBL(1)|94, TBL(1)|363,
+-/*   1da8 */  TBL(1)|119, TBL(1)|96, TBL(1)|364, TBL(1)|120, TBL(1)|99, TBL(1)|98, TBL(1)|100, TBL(1)|101,
+-/*   1db0 */  TBL(1)|102, TBL(1)|103, TBL(1)|104, TBL(1)|108, TBL(1)|109, TBL(1)|76, TBL(1)|110, TBL(1)|111,
+-/*   1db8 */  TBL(1)|360, TBL(1)|112, TBL(1)|113, TBL(1)|1661, TBL(1)|115, TBL(1)|116, TBL(1)|117, TBL(1)|156,
++/*   1d98 */  0, 0, 0, TBL(1)|86, TBL(1)|1692, TBL(1)|89, TBL(1)|69, TBL(1)|95,
++/*   1da0 */  TBL(1)|1695, TBL(1)|97, TBL(1)|99, TBL(1)|103, TBL(1)|106, TBL(1)|107, TBL(1)|108, TBL(1)|406,
++/*   1da8 */  TBL(1)|149, TBL(1)|111, TBL(1)|407, TBL(1)|150, TBL(1)|115, TBL(1)|114, TBL(1)|116, TBL(1)|117,
++/*   1db0 */  TBL(1)|118, TBL(1)|119, TBL(1)|122, TBL(1)|130, TBL(1)|131, TBL(1)|78, TBL(1)|134, TBL(1)|135,
++/*   1db8 */  TBL(1)|403, TBL(1)|136, TBL(1)|137, TBL(1)|1715, TBL(1)|141, TBL(1)|142, TBL(1)|143, TBL(1)|199,
+ /*   1dc0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1dc8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   1dd0 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1175,13 +1181,13 @@ static const uint16_t UNWIF_compat_00_1f [256] = {
+ /*   1fa0 */  TBL(3)|368, TBL(3)|372, TBL(4)|59, TBL(4)|62, TBL(4)|60, TBL(4)|63, TBL(4)|61, TBL(4)|64,
+ /*   1fa8 */  TBL(3)|310, TBL(3)|314, TBL(4)|41, TBL(4)|44, TBL(4)|42, TBL(4)|45, TBL(4)|43, TBL(4)|46,
+ /*   1fb0 */  TBL(2)|411, TBL(2)|410, TBL(3)|315, TBL(2)|415, TBL(3)|316, 0, TBL(2)|414, TBL(3)|325,
+-/*   1fb8 */  TBL(2)|372, TBL(2)|371, TBL(2)|369, TBL(2)|370, TBL(2)|375, TBL(2)|338, TBL(1)|157, TBL(2)|338,
++/*   1fb8 */  TBL(2)|372, TBL(2)|371, TBL(2)|369, TBL(2)|370, TBL(2)|375, TBL(2)|338, TBL(1)|200, TBL(2)|338,
+ /*   1fc0 */  TBL(2)|343, TBL(3)|261, TBL(3)|330, TBL(2)|425, TBL(3)|331, 0, TBL(2)|424, TBL(3)|340,
+ /*   1fc8 */  TBL(2)|376, TBL(2)|377, TBL(2)|380, TBL(2)|381, TBL(2)|384, TBL(3)|262, TBL(3)|263, TBL(3)|264,
+ /*   1fd0 */  TBL(2)|429, TBL(2)|428, TBL(3)|341, TBL(3)|342, 0, 0, TBL(2)|433, TBL(3)|343,
+ /*   1fd8 */  TBL(2)|388, TBL(2)|387, TBL(2)|385, TBL(2)|386, 0, TBL(3)|265, TBL(3)|266, TBL(3)|267,
+ /*   1fe0 */  TBL(2)|451, TBL(2)|450, TBL(3)|354, TBL(3)|355, TBL(2)|446, TBL(2)|447, TBL(2)|455, TBL(3)|356,
+-/*   1fe8 */  TBL(2)|400, TBL(2)|399, TBL(2)|397, TBL(2)|398, TBL(2)|396, TBL(3)|259, TBL(3)|260, TBL(1)|1635,
++/*   1fe8 */  TBL(2)|400, TBL(2)|399, TBL(2)|397, TBL(2)|398, TBL(2)|396, TBL(3)|259, TBL(3)|260, TBL(1)|1689,
+ /*   1ff0 */  0, 0, TBL(3)|363, TBL(2)|461, TBL(3)|364, 0, TBL(2)|460, TBL(3)|373,
+ /*   1ff8 */  TBL(2)|392, TBL(2)|393, TBL(2)|403, TBL(2)|404, TBL(2)|407, TBL(2)|329, TBL(2)|339, 0
+ };
+@@ -1189,7 +1195,7 @@ static const uint16_t UNWIF_compat_00_1f [256] = {
+ static const uint16_t UNWIF_compat_00_20 [256] = {
+ /*   2000 */  TBL(1)|52, TBL(1)|52, TBL(1)|52, TBL(1)|52, TBL(1)|52, TBL(1)|52, TBL(1)|52, TBL(1)|52,
+ /*   2008 */  TBL(1)|52, TBL(1)|52, TBL(1)|52, 0, 0, 0, 0, 0,
+-/*   2010 */  0, TBL(1)|365, 0, 0, 0, 0, 0, TBL(2)|342,
++/*   2010 */  0, TBL(1)|415, 0, 0, 0, 0, 0, TBL(2)|342,
+ /*   2018 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2020 */  0, 0, 0, 0, TBL(1)|6, TBL(2)|0, TBL(3)|111, 0,
+ /*   2028 */  0, 0, 0, 0, 0, 0, 0, TBL(1)|52,
+@@ -1201,12 +1207,12 @@ static const uint16_t UNWIF_compat_00_20 [256] = {
+ /*   2058 */  0, 0, 0, 0, 0, 0, 0, TBL(1)|52,
+ /*   2060 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2068 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   2070 */  TBL(1)|8, TBL(1)|1644, 0, 0, TBL(1)|12, TBL(1)|13, TBL(1)|14, TBL(1)|15,
+-/*   2078 */  TBL(1)|16, TBL(1)|17, TBL(1)|3, TBL(1)|393, TBL(1)|21, TBL(1)|0, TBL(1)|1, TBL(1)|1649,
++/*   2070 */  TBL(1)|8, TBL(1)|1698, 0, 0, TBL(1)|12, TBL(1)|13, TBL(1)|14, TBL(1)|15,
++/*   2078 */  TBL(1)|16, TBL(1)|17, TBL(1)|3, TBL(1)|443, TBL(1)|21, TBL(1)|0, TBL(1)|1, TBL(1)|1703,
+ /*   2080 */  TBL(1)|8, TBL(1)|9, TBL(1)|10, TBL(1)|11, TBL(1)|12, TBL(1)|13, TBL(1)|14, TBL(1)|15,
+-/*   2088 */  TBL(1)|16, TBL(1)|17, TBL(1)|3, TBL(1)|393, TBL(1)|21, TBL(1)|0, TBL(1)|1, 0,
+-/*   2090 */  TBL(1)|1636, TBL(1)|1640, TBL(1)|1650, TBL(1)|1659, TBL(1)|84, TBL(1)|1643, TBL(1)|1646, TBL(1)|1647,
+-/*   2098 */  TBL(1)|1648, TBL(1)|1649, TBL(1)|1651, TBL(1)|1654, TBL(1)|1655, 0, 0, 0,
++/*   2088 */  TBL(1)|16, TBL(1)|17, TBL(1)|3, TBL(1)|443, TBL(1)|21, TBL(1)|0, TBL(1)|1, 0,
++/*   2090 */  TBL(1)|1690, TBL(1)|1694, TBL(1)|1704, TBL(1)|1713, TBL(1)|93, TBL(1)|1697, TBL(1)|1700, TBL(1)|1701,
++/*   2098 */  TBL(1)|1702, TBL(1)|1703, TBL(1)|1705, TBL(1)|1708, TBL(1)|1709, 0, 0, 0,
+ /*   20a0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   20a8 */  TBL(2)|260, 0, 0, 0, 0, 0, 0, 0,
+ /*   20b0 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1222,22 +1228,22 @@ static const uint16_t UNWIF_compat_00_20 [256] = {
+ };
+ 
+ static const uint16_t UNWIF_compat_00_21 [256] = {
+-/*   2100 */  TBL(3)|551, TBL(3)|552, TBL(1)|27, TBL(2)|357, 0, TBL(3)|567, TBL(3)|568, TBL(1)|75,
+-/*   2108 */  0, TBL(2)|358, TBL(1)|1642, TBL(1)|32, TBL(1)|32, TBL(1)|32, TBL(1)|1643, TBL(1)|70,
+-/*   2110 */  TBL(1)|33, TBL(1)|33, TBL(1)|36, TBL(1)|1647, 0, TBL(1)|38, TBL(2)|230, 0,
++/*   2100 */  TBL(3)|551, TBL(3)|552, TBL(1)|27, TBL(2)|357, 0, TBL(3)|567, TBL(3)|568, TBL(1)|77,
++/*   2108 */  0, TBL(2)|358, TBL(1)|1696, TBL(1)|32, TBL(1)|32, TBL(1)|32, TBL(1)|1697, TBL(1)|72,
++/*   2110 */  TBL(1)|33, TBL(1)|33, TBL(1)|36, TBL(1)|1701, 0, TBL(1)|38, TBL(2)|230, 0,
+ /*   2118 */  0, TBL(1)|40, TBL(1)|41, TBL(1)|42, TBL(1)|42, TBL(1)|42, 0, 0,
+-/*   2120 */  TBL(2)|262, TBL(3)|243, TBL(2)|272, 0, TBL(1)|50, 0, TBL(1)|148, 0,
+-/*   2128 */  TBL(1)|50, 0, TBL(1)|35, TBL(2)|107, TBL(1)|26, TBL(1)|27, 0, TBL(1)|1640,
+-/*   2130 */  TBL(1)|29, TBL(1)|30, 0, TBL(1)|37, TBL(1)|1650, TBL(1)|179, TBL(1)|180, TBL(1)|181,
+-/*   2138 */  TBL(1)|182, TBL(1)|1644, 0, TBL(3)|209, TBL(1)|164, TBL(1)|151, TBL(1)|127, TBL(1)|140,
+-/*   2140 */  TBL(1)|392, 0, 0, 0, 0, TBL(1)|28, TBL(1)|1639, TBL(1)|1640,
+-/*   2148 */  TBL(1)|1644, TBL(1)|1645, 0, 0, 0, 0, 0, 0,
++/*   2120 */  TBL(2)|262, TBL(3)|243, TBL(2)|272, 0, TBL(1)|50, 0, TBL(1)|191, 0,
++/*   2128 */  TBL(1)|50, 0, TBL(1)|35, TBL(2)|107, TBL(1)|26, TBL(1)|27, 0, TBL(1)|1694,
++/*   2130 */  TBL(1)|29, TBL(1)|30, 0, TBL(1)|37, TBL(1)|1704, TBL(1)|222, TBL(1)|223, TBL(1)|224,
++/*   2138 */  TBL(1)|225, TBL(1)|1698, 0, TBL(3)|209, TBL(1)|207, TBL(1)|194, TBL(1)|170, TBL(1)|183,
++/*   2140 */  TBL(1)|442, 0, 0, 0, 0, TBL(1)|28, TBL(1)|1693, TBL(1)|1694,
++/*   2148 */  TBL(1)|1698, TBL(1)|1699, 0, 0, 0, 0, 0, 0,
+ /*   2150 */  TBL(3)|151, TBL(3)|153, TBL(4)|26, TBL(3)|147, TBL(3)|170, TBL(3)|149, TBL(3)|171, TBL(3)|175,
+ /*   2158 */  TBL(3)|177, TBL(3)|150, TBL(3)|178, TBL(3)|152, TBL(3)|176, TBL(3)|179, TBL(3)|180, TBL(2)|16,
+ /*   2160 */  TBL(1)|33, TBL(2)|171, TBL(3)|212, TBL(2)|174, TBL(1)|46, TBL(2)|299, TBL(3)|256, TBL(4)|28,
+ /*   2168 */  TBL(2)|175, TBL(1)|48, TBL(2)|311, TBL(3)|258, TBL(1)|36, TBL(1)|27, TBL(1)|28, TBL(1)|37,
+-/*   2170 */  TBL(1)|1644, TBL(2)|1035, TBL(3)|590, TBL(2)|1038, TBL(1)|1657, TBL(2)|1166, TBL(3)|636, TBL(4)|108,
+-/*   2178 */  TBL(2)|1039, TBL(1)|1659, TBL(2)|1176, TBL(3)|637, TBL(1)|1647, TBL(1)|1638, TBL(1)|1639, TBL(1)|1648,
++/*   2170 */  TBL(1)|1698, TBL(2)|1035, TBL(3)|590, TBL(2)|1038, TBL(1)|1711, TBL(2)|1166, TBL(3)|636, TBL(4)|108,
++/*   2178 */  TBL(2)|1039, TBL(1)|1713, TBL(2)|1176, TBL(3)|637, TBL(1)|1701, TBL(1)|1692, TBL(1)|1693, TBL(1)|1702,
+ /*   2180 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2188 */  0, TBL(3)|112, 0, 0, 0, 0, 0, 0,
+ /*   2190 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1297,7 +1303,7 @@ static const uint16_t UNWIF_compat_00_23 [256] = {
+ /*   2310 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2318 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2320 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   2328 */  0, TBL(1)|495, TBL(1)|496, 0, 0, 0, 0, 0,
++/*   2328 */  0, TBL(1)|546, TBL(1)|547, 0, 0, 0, 0, 0,
+ /*   2330 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2338 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2340 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1353,10 +1359,10 @@ static const uint16_t UNWIF_compat_00_24 [256] = {
+ /*   24b8 */  TBL(1)|27, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32, TBL(1)|33, TBL(1)|34,
+ /*   24c0 */  TBL(1)|35, TBL(1)|36, TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40, TBL(1)|41, TBL(1)|42,
+ /*   24c8 */  TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50,
+-/*   24d0 */  TBL(1)|1636, TBL(1)|1637, TBL(1)|1638, TBL(1)|1639, TBL(1)|1640, TBL(1)|1641, TBL(1)|1642, TBL(1)|1643,
+-/*   24d8 */  TBL(1)|1644, TBL(1)|1645, TBL(1)|1646, TBL(1)|1647, TBL(1)|1648, TBL(1)|1649, TBL(1)|1650, TBL(1)|1651,
+-/*   24e0 */  TBL(1)|1652, TBL(1)|1653, TBL(1)|1654, TBL(1)|1655, TBL(1)|1656, TBL(1)|1657, TBL(1)|1658, TBL(1)|1659,
+-/*   24e8 */  TBL(1)|1660, TBL(1)|1661, TBL(1)|8, 0, 0, 0, 0, 0,
++/*   24d0 */  TBL(1)|1690, TBL(1)|1691, TBL(1)|1692, TBL(1)|1693, TBL(1)|1694, TBL(1)|1695, TBL(1)|1696, TBL(1)|1697,
++/*   24d8 */  TBL(1)|1698, TBL(1)|1699, TBL(1)|1700, TBL(1)|1701, TBL(1)|1702, TBL(1)|1703, TBL(1)|1704, TBL(1)|1705,
++/*   24e0 */  TBL(1)|1706, TBL(1)|1707, TBL(1)|1708, TBL(1)|1709, TBL(1)|1710, TBL(1)|1711, TBL(1)|1712, TBL(1)|1713,
++/*   24e8 */  TBL(1)|1714, TBL(1)|1715, TBL(1)|8, 0, 0, 0, 0, 0,
+ /*   24f0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   24f8 */  0, 0, 0, 0, 0, 0, 0, 0
+ };
+@@ -1412,7 +1418,7 @@ static const uint16_t UNWIF_compat_00_2c [256] = {
+ /*   2c60 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2c68 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2c70 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   2c78 */  0, 0, 0, 0, TBL(1)|1645, TBL(1)|46, 0, 0,
++/*   2c78 */  0, 0, 0, 0, TBL(1)|1699, TBL(1)|46, 0, 0,
+ /*   2c80 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2c88 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2c90 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1445,7 +1451,7 @@ static const uint16_t UNWIF_compat_00_2d [256] = {
+ /*   2d50 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2d58 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2d60 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   2d68 */  0, 0, 0, 0, 0, 0, 0, TBL(1)|492,
++/*   2d68 */  0, 0, 0, 0, 0, 0, 0, TBL(1)|543,
+ /*   2d70 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2d78 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2d80 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1486,7 +1492,7 @@ static const uint16_t UNWIF_compat_00_2e [256] = {
+ /*   2e80 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2e88 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2e90 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   2e98 */  0, 0, 0, 0, 0, 0, 0, TBL(1)|1087,
++/*   2e98 */  0, 0, 0, 0, 0, 0, 0, TBL(1)|1138,
+ /*   2ea0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2ea8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2eb0 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1497,38 +1503,38 @@ static const uint16_t UNWIF_compat_00_2e [256] = {
+ /*   2ed8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2ee0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2ee8 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   2ef0 */  0, 0, 0, TBL(1)|1626, 0, 0, 0, 0,
++/*   2ef0 */  0, 0, 0, TBL(1)|1677, 0, 0, 0, 0,
+ /*   2ef8 */  0, 0, 0, 0, 0, 0, 0, 0
+ };
+ 
+ static const uint16_t UNWIF_compat_00_2f [256] = {
+-/*   2f00 */  TBL(1)|638, TBL(1)|647, TBL(1)|650, TBL(1)|654, TBL(1)|656, TBL(1)|659, TBL(1)|661, TBL(1)|663,
+-/*   2f08 */  TBL(1)|666, TBL(1)|687, TBL(1)|693, TBL(1)|697, TBL(1)|701, TBL(1)|705, TBL(1)|709, TBL(1)|717,
+-/*   2f10 */  TBL(1)|718, TBL(1)|719, TBL(1)|732, TBL(1)|742, TBL(1)|746, TBL(1)|748, TBL(1)|749, TBL(1)|752,
+-/*   2f18 */  TBL(1)|759, TBL(1)|760, TBL(1)|766, TBL(1)|767, TBL(1)|769, TBL(1)|773, TBL(1)|812, TBL(1)|817,
+-/*   2f20 */  TBL(1)|833, TBL(1)|838, TBL(1)|840, TBL(1)|841, TBL(1)|845, TBL(1)|852, TBL(1)|863, TBL(1)|866,
+-/*   2f28 */  TBL(1)|874, TBL(1)|877, TBL(1)|878, TBL(1)|879, TBL(1)|885, TBL(1)|886, TBL(1)|897, TBL(1)|900,
+-/*   2f30 */  TBL(1)|902, TBL(1)|904, TBL(1)|908, TBL(1)|910, TBL(1)|912, TBL(1)|923, TBL(1)|924, TBL(1)|926,
+-/*   2f38 */  TBL(1)|927, TBL(1)|929, TBL(1)|931, TBL(1)|935, TBL(1)|942, TBL(1)|972, TBL(1)|977, TBL(1)|978,
+-/*   2f40 */  TBL(1)|1010, TBL(1)|1011, TBL(1)|1016, TBL(1)|1017, TBL(1)|1019, TBL(1)|1021, TBL(1)|1023, TBL(1)|1026,
+-/*   2f48 */  TBL(1)|1036, TBL(1)|1040, TBL(1)|1045, TBL(1)|1073, TBL(1)|1076, TBL(1)|1080, TBL(1)|1083, TBL(1)|1086,
+-/*   2f50 */  TBL(1)|1088, TBL(1)|1089, TBL(1)|1090, TBL(1)|1091, TBL(1)|1092, TBL(1)|1138, TBL(1)|1156, TBL(1)|1159,
+-/*   2f58 */  TBL(1)|1160, TBL(1)|1161, TBL(1)|1162, TBL(1)|1164, TBL(1)|1165, TBL(1)|1170, TBL(1)|1177, TBL(1)|1179,
+-/*   2f60 */  TBL(1)|1195, TBL(1)|1196, TBL(1)|1198, TBL(1)|1199, TBL(1)|1201, TBL(1)|1202, TBL(1)|1211, TBL(1)|1212,
+-/*   2f68 */  TBL(1)|1219, TBL(1)|1220, TBL(1)|1221, TBL(1)|1222, TBL(1)|1227, TBL(1)|1236, TBL(1)|1237, TBL(1)|1238,
+-/*   2f70 */  TBL(1)|1247, TBL(1)|1263, TBL(1)|1264, TBL(1)|1272, TBL(1)|1276, TBL(1)|1278, TBL(1)|1286, TBL(1)|1295,
+-/*   2f78 */  TBL(1)|1312, TBL(1)|1314, TBL(1)|1319, TBL(1)|1322, TBL(1)|1324, TBL(1)|1326, TBL(1)|1327, TBL(1)|1328,
+-/*   2f80 */  TBL(1)|1334, TBL(1)|1335, TBL(1)|1342, TBL(1)|1344, TBL(1)|1346, TBL(1)|1347, TBL(1)|1350, TBL(1)|1352,
+-/*   2f88 */  TBL(1)|1353, TBL(1)|1354, TBL(1)|1356, TBL(1)|1357, TBL(1)|1397, TBL(1)|1402, TBL(1)|1415, TBL(1)|1416,
+-/*   2f90 */  TBL(1)|1418, TBL(1)|1429, TBL(1)|1431, TBL(1)|1433, TBL(1)|1435, TBL(1)|1450, TBL(1)|1451, TBL(1)|1453,
+-/*   2f98 */  TBL(1)|1454, TBL(1)|1455, TBL(1)|1466, TBL(1)|1467, TBL(1)|1469, TBL(1)|1474, TBL(1)|1475, TBL(1)|1482,
+-/*   2fa0 */  TBL(1)|1484, TBL(1)|1485, TBL(1)|1494, TBL(1)|1502, TBL(1)|1507, TBL(1)|1508, TBL(1)|1510, TBL(1)|1521,
+-/*   2fa8 */  TBL(1)|1522, TBL(1)|1526, TBL(1)|1535, TBL(1)|1538, TBL(1)|1542, TBL(1)|1548, TBL(1)|1550, TBL(1)|1551,
+-/*   2fb0 */  TBL(1)|1552, TBL(1)|1553, TBL(1)|1556, TBL(1)|1557, TBL(1)|1559, TBL(1)|1566, TBL(1)|1567, TBL(1)|1568,
+-/*   2fb8 */  TBL(1)|1574, TBL(1)|1575, TBL(1)|1577, TBL(1)|1582, TBL(1)|1583, TBL(1)|1584, TBL(1)|1586, TBL(1)|1587,
+-/*   2fc0 */  TBL(1)|1588, TBL(1)|1589, TBL(1)|1590, TBL(1)|1594, TBL(1)|1600, TBL(1)|1601, TBL(1)|1604, TBL(1)|1605,
+-/*   2fc8 */  TBL(1)|1606, TBL(1)|1607, TBL(1)|1609, TBL(1)|1610, TBL(1)|1611, TBL(1)|1614, TBL(1)|1616, TBL(1)|1618,
+-/*   2fd0 */  TBL(1)|1619, TBL(1)|1621, TBL(1)|1622, TBL(1)|1623, TBL(1)|1625, TBL(1)|1627, 0, 0,
++/*   2f00 */  TBL(1)|689, TBL(1)|698, TBL(1)|701, TBL(1)|705, TBL(1)|707, TBL(1)|710, TBL(1)|712, TBL(1)|714,
++/*   2f08 */  TBL(1)|717, TBL(1)|738, TBL(1)|744, TBL(1)|748, TBL(1)|752, TBL(1)|756, TBL(1)|760, TBL(1)|768,
++/*   2f10 */  TBL(1)|769, TBL(1)|770, TBL(1)|783, TBL(1)|793, TBL(1)|797, TBL(1)|799, TBL(1)|800, TBL(1)|803,
++/*   2f18 */  TBL(1)|810, TBL(1)|811, TBL(1)|817, TBL(1)|818, TBL(1)|820, TBL(1)|824, TBL(1)|863, TBL(1)|868,
++/*   2f20 */  TBL(1)|884, TBL(1)|889, TBL(1)|891, TBL(1)|892, TBL(1)|896, TBL(1)|903, TBL(1)|914, TBL(1)|917,
++/*   2f28 */  TBL(1)|925, TBL(1)|928, TBL(1)|929, TBL(1)|930, TBL(1)|936, TBL(1)|937, TBL(1)|948, TBL(1)|951,
++/*   2f30 */  TBL(1)|953, TBL(1)|955, TBL(1)|959, TBL(1)|961, TBL(1)|963, TBL(1)|974, TBL(1)|975, TBL(1)|977,
++/*   2f38 */  TBL(1)|978, TBL(1)|980, TBL(1)|982, TBL(1)|986, TBL(1)|993, TBL(1)|1023, TBL(1)|1028, TBL(1)|1029,
++/*   2f40 */  TBL(1)|1061, TBL(1)|1062, TBL(1)|1067, TBL(1)|1068, TBL(1)|1070, TBL(1)|1072, TBL(1)|1074, TBL(1)|1077,
++/*   2f48 */  TBL(1)|1087, TBL(1)|1091, TBL(1)|1096, TBL(1)|1124, TBL(1)|1127, TBL(1)|1131, TBL(1)|1134, TBL(1)|1137,
++/*   2f50 */  TBL(1)|1139, TBL(1)|1140, TBL(1)|1141, TBL(1)|1142, TBL(1)|1143, TBL(1)|1189, TBL(1)|1207, TBL(1)|1210,
++/*   2f58 */  TBL(1)|1211, TBL(1)|1212, TBL(1)|1213, TBL(1)|1215, TBL(1)|1216, TBL(1)|1221, TBL(1)|1228, TBL(1)|1230,
++/*   2f60 */  TBL(1)|1246, TBL(1)|1247, TBL(1)|1249, TBL(1)|1250, TBL(1)|1252, TBL(1)|1253, TBL(1)|1262, TBL(1)|1263,
++/*   2f68 */  TBL(1)|1270, TBL(1)|1271, TBL(1)|1272, TBL(1)|1273, TBL(1)|1278, TBL(1)|1287, TBL(1)|1288, TBL(1)|1289,
++/*   2f70 */  TBL(1)|1298, TBL(1)|1314, TBL(1)|1315, TBL(1)|1323, TBL(1)|1327, TBL(1)|1329, TBL(1)|1337, TBL(1)|1346,
++/*   2f78 */  TBL(1)|1363, TBL(1)|1365, TBL(1)|1370, TBL(1)|1373, TBL(1)|1375, TBL(1)|1377, TBL(1)|1378, TBL(1)|1379,
++/*   2f80 */  TBL(1)|1385, TBL(1)|1386, TBL(1)|1393, TBL(1)|1395, TBL(1)|1397, TBL(1)|1398, TBL(1)|1401, TBL(1)|1403,
++/*   2f88 */  TBL(1)|1404, TBL(1)|1405, TBL(1)|1407, TBL(1)|1408, TBL(1)|1448, TBL(1)|1453, TBL(1)|1466, TBL(1)|1467,
++/*   2f90 */  TBL(1)|1469, TBL(1)|1480, TBL(1)|1482, TBL(1)|1484, TBL(1)|1486, TBL(1)|1501, TBL(1)|1502, TBL(1)|1504,
++/*   2f98 */  TBL(1)|1505, TBL(1)|1506, TBL(1)|1517, TBL(1)|1518, TBL(1)|1520, TBL(1)|1525, TBL(1)|1526, TBL(1)|1533,
++/*   2fa0 */  TBL(1)|1535, TBL(1)|1536, TBL(1)|1545, TBL(1)|1553, TBL(1)|1558, TBL(1)|1559, TBL(1)|1561, TBL(1)|1572,
++/*   2fa8 */  TBL(1)|1573, TBL(1)|1577, TBL(1)|1586, TBL(1)|1589, TBL(1)|1593, TBL(1)|1599, TBL(1)|1601, TBL(1)|1602,
++/*   2fb0 */  TBL(1)|1603, TBL(1)|1604, TBL(1)|1607, TBL(1)|1608, TBL(1)|1610, TBL(1)|1617, TBL(1)|1618, TBL(1)|1619,
++/*   2fb8 */  TBL(1)|1625, TBL(1)|1626, TBL(1)|1628, TBL(1)|1633, TBL(1)|1634, TBL(1)|1635, TBL(1)|1637, TBL(1)|1638,
++/*   2fc0 */  TBL(1)|1639, TBL(1)|1640, TBL(1)|1641, TBL(1)|1645, TBL(1)|1651, TBL(1)|1652, TBL(1)|1655, TBL(1)|1656,
++/*   2fc8 */  TBL(1)|1657, TBL(1)|1658, TBL(1)|1660, TBL(1)|1661, TBL(1)|1662, TBL(1)|1665, TBL(1)|1667, TBL(1)|1669,
++/*   2fd0 */  TBL(1)|1670, TBL(1)|1672, TBL(1)|1673, TBL(1)|1674, TBL(1)|1676, TBL(1)|1678, 0, 0,
+ /*   2fd8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2fe0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   2fe8 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1543,8 +1549,8 @@ static const uint16_t UNWIF_compat_00_30 [256] = {
+ /*   3018 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   3020 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   3028 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   3030 */  0, 0, 0, 0, 0, 0, TBL(1)|505, 0,
+-/*   3038 */  TBL(1)|752, TBL(1)|753, TBL(1)|754, 0, 0, 0, 0, 0,
++/*   3030 */  0, 0, 0, 0, 0, 0, TBL(1)|556, 0,
++/*   3038 */  TBL(1)|803, TBL(1)|804, TBL(1)|805, 0, 0, 0, 0, 0,
+ /*   3040 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   3048 */  0, 0, 0, 0, TBL(2)|870, 0, TBL(2)|871, 0,
+ /*   3050 */  TBL(2)|872, 0, TBL(2)|873, 0, TBL(2)|874, 0, TBL(2)|875, 0,
+@@ -1578,20 +1584,20 @@ static const uint16_t UNWIF_compat_00_31 [256] = {
+ /*   3118 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   3120 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   3128 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   3130 */  0, TBL(1)|263, TBL(1)|264, TBL(1)|337, TBL(1)|265, TBL(1)|338, TBL(1)|339, TBL(1)|266,
+-/*   3138 */  TBL(1)|267, TBL(1)|268, TBL(1)|340, TBL(1)|341, TBL(1)|342, TBL(1)|343, TBL(1)|344, TBL(1)|345,
+-/*   3140 */  TBL(1)|284, TBL(1)|269, TBL(1)|270, TBL(1)|271, TBL(1)|289, TBL(1)|272, TBL(1)|273, TBL(1)|274,
+-/*   3148 */  TBL(1)|275, TBL(1)|276, TBL(1)|277, TBL(1)|278, TBL(1)|279, TBL(1)|280, TBL(1)|281, TBL(1)|308,
+-/*   3150 */  TBL(1)|309, TBL(1)|310, TBL(1)|311, TBL(1)|312, TBL(1)|313, TBL(1)|314, TBL(1)|315, TBL(1)|316,
+-/*   3158 */  TBL(1)|317, TBL(1)|318, TBL(1)|319, TBL(1)|320, TBL(1)|321, TBL(1)|322, TBL(1)|323, TBL(1)|324,
+-/*   3160 */  TBL(1)|325, TBL(1)|326, TBL(1)|327, TBL(1)|328, TBL(1)|307, TBL(1)|282, TBL(1)|283, TBL(1)|346,
+-/*   3168 */  TBL(1)|347, TBL(1)|348, TBL(1)|349, TBL(1)|350, TBL(1)|351, TBL(1)|352, TBL(1)|285, TBL(1)|353,
+-/*   3170 */  TBL(1)|354, TBL(1)|286, TBL(1)|287, TBL(1)|288, TBL(1)|290, TBL(1)|291, TBL(1)|292, TBL(1)|293,
+-/*   3178 */  TBL(1)|294, TBL(1)|295, TBL(1)|296, TBL(1)|297, TBL(1)|298, TBL(1)|299, TBL(1)|300, TBL(1)|301,
+-/*   3180 */  TBL(1)|302, TBL(1)|303, TBL(1)|355, TBL(1)|356, TBL(1)|304, TBL(1)|305, TBL(1)|306, TBL(1)|329,
+-/*   3188 */  TBL(1)|330, TBL(1)|331, TBL(1)|332, TBL(1)|333, TBL(1)|334, TBL(1)|335, TBL(1)|336, 0,
+-/*   3190 */  0, 0, TBL(1)|638, TBL(1)|661, TBL(1)|641, TBL(1)|813, TBL(1)|642, TBL(1)|648,
+-/*   3198 */  TBL(1)|643, TBL(1)|1203, TBL(1)|656, TBL(1)|645, TBL(1)|639, TBL(1)|846, TBL(1)|818, TBL(1)|666,
++/*   3130 */  0, TBL(1)|306, TBL(1)|307, TBL(1)|380, TBL(1)|308, TBL(1)|381, TBL(1)|382, TBL(1)|309,
++/*   3138 */  TBL(1)|310, TBL(1)|311, TBL(1)|383, TBL(1)|384, TBL(1)|385, TBL(1)|386, TBL(1)|387, TBL(1)|388,
++/*   3140 */  TBL(1)|327, TBL(1)|312, TBL(1)|313, TBL(1)|314, TBL(1)|332, TBL(1)|315, TBL(1)|316, TBL(1)|317,
++/*   3148 */  TBL(1)|318, TBL(1)|319, TBL(1)|320, TBL(1)|321, TBL(1)|322, TBL(1)|323, TBL(1)|324, TBL(1)|351,
++/*   3150 */  TBL(1)|352, TBL(1)|353, TBL(1)|354, TBL(1)|355, TBL(1)|356, TBL(1)|357, TBL(1)|358, TBL(1)|359,
++/*   3158 */  TBL(1)|360, TBL(1)|361, TBL(1)|362, TBL(1)|363, TBL(1)|364, TBL(1)|365, TBL(1)|366, TBL(1)|367,
++/*   3160 */  TBL(1)|368, TBL(1)|369, TBL(1)|370, TBL(1)|371, TBL(1)|350, TBL(1)|325, TBL(1)|326, TBL(1)|389,
++/*   3168 */  TBL(1)|390, TBL(1)|391, TBL(1)|392, TBL(1)|393, TBL(1)|394, TBL(1)|395, TBL(1)|328, TBL(1)|396,
++/*   3170 */  TBL(1)|397, TBL(1)|329, TBL(1)|330, TBL(1)|331, TBL(1)|333, TBL(1)|334, TBL(1)|335, TBL(1)|336,
++/*   3178 */  TBL(1)|337, TBL(1)|338, TBL(1)|339, TBL(1)|340, TBL(1)|341, TBL(1)|342, TBL(1)|343, TBL(1)|344,
++/*   3180 */  TBL(1)|345, TBL(1)|346, TBL(1)|398, TBL(1)|399, TBL(1)|347, TBL(1)|348, TBL(1)|349, TBL(1)|372,
++/*   3188 */  TBL(1)|373, TBL(1)|374, TBL(1)|375, TBL(1)|376, TBL(1)|377, TBL(1)|378, TBL(1)|379, 0,
++/*   3190 */  0, 0, TBL(1)|689, TBL(1)|712, TBL(1)|692, TBL(1)|864, TBL(1)|693, TBL(1)|699,
++/*   3198 */  TBL(1)|694, TBL(1)|1254, TBL(1)|707, TBL(1)|696, TBL(1)|690, TBL(1)|897, TBL(1)|869, TBL(1)|717,
+ /*   31a0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   31a8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   31b0 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1615,30 +1621,30 @@ static const uint16_t UNWIF_compat_00_32 [256] = {
+ /*   3228 */  TBL(3)|52, TBL(3)|61, TBL(3)|69, TBL(3)|74, TBL(3)|73, TBL(3)|71, TBL(3)|84, TBL(3)|66,
+ /*   3230 */  TBL(3)|68, TBL(3)|72, TBL(3)|70, TBL(3)|77, TBL(3)|63, TBL(3)|75, TBL(3)|82, TBL(3)|78,
+ /*   3238 */  TBL(3)|60, TBL(3)|55, TBL(3)|64, TBL(3)|67, TBL(3)|76, TBL(3)|56, TBL(3)|83, TBL(3)|62,
+-/*   3240 */  TBL(3)|79, TBL(3)|57, TBL(3)|80, TBL(3)|81, TBL(1)|794, TBL(1)|911, TBL(1)|1016, TBL(1)|1280,
++/*   3240 */  TBL(3)|79, TBL(3)|57, TBL(3)|80, TBL(3)|81, TBL(1)|845, TBL(1)|962, TBL(1)|1067, TBL(1)|1331,
+ /*   3248 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   3250 */  TBL(3)|238, TBL(2)|23, TBL(2)|24, TBL(2)|25, TBL(2)|26, TBL(2)|27, TBL(2)|28, TBL(2)|29,
+ /*   3258 */  TBL(2)|30, TBL(2)|31, TBL(2)|37, TBL(2)|38, TBL(2)|39, TBL(2)|40, TBL(2)|41, TBL(2)|42,
+-/*   3260 */  TBL(1)|263, TBL(1)|265, TBL(1)|266, TBL(1)|268, TBL(1)|269, TBL(1)|270, TBL(1)|272, TBL(1)|274,
+-/*   3268 */  TBL(1)|275, TBL(1)|277, TBL(1)|278, TBL(1)|279, TBL(1)|280, TBL(1)|281, TBL(2)|780, TBL(2)|781,
++/*   3260 */  TBL(1)|306, TBL(1)|308, TBL(1)|309, TBL(1)|311, TBL(1)|312, TBL(1)|313, TBL(1)|315, TBL(1)|317,
++/*   3268 */  TBL(1)|318, TBL(1)|320, TBL(1)|321, TBL(1)|322, TBL(1)|323, TBL(1)|324, TBL(2)|780, TBL(2)|781,
+ /*   3270 */  TBL(2)|782, TBL(2)|783, TBL(2)|784, TBL(2)|785, TBL(2)|786, TBL(2)|790, TBL(2)|792, TBL(2)|793,
+ /*   3278 */  TBL(2)|794, TBL(2)|795, TBL(2)|796, TBL(2)|797, TBL(5)|0, TBL(4)|73, TBL(2)|791, 0,
+-/*   3280 */  TBL(1)|638, TBL(1)|661, TBL(1)|641, TBL(1)|813, TBL(1)|662, TBL(1)|698, TBL(1)|640, TBL(1)|697,
+-/*   3288 */  TBL(1)|657, TBL(1)|752, TBL(1)|1040, TBL(1)|1138, TBL(1)|1092, TBL(1)|1045, TBL(1)|1510, TBL(1)|817,
+-/*   3290 */  TBL(1)|1026, TBL(1)|1057, TBL(1)|1041, TBL(1)|1249, TBL(1)|781, TBL(1)|1167, TBL(1)|1456, TBL(1)|1254,
+-/*   3298 */  TBL(1)|735, TBL(1)|1266, TBL(1)|1205, TBL(1)|852, TBL(1)|1490, TBL(1)|686, TBL(1)|761, TBL(1)|1100,
+-/*   32a0 */  TBL(1)|1560, TBL(1)|671, TBL(1)|707, TBL(1)|1077, TBL(1)|642, TBL(1)|648, TBL(1)|643, TBL(1)|901,
+-/*   32a8 */  TBL(1)|778, TBL(1)|750, TBL(1)|868, TBL(1)|865, TBL(1)|1225, TBL(1)|670, TBL(1)|1461, TBL(1)|757,
+-/*   32b0 */  TBL(1)|843, TBL(2)|43, TBL(2)|44, TBL(2)|45, TBL(2)|46, TBL(2)|52, TBL(2)|53, TBL(2)|54,
++/*   3280 */  TBL(1)|689, TBL(1)|712, TBL(1)|692, TBL(1)|864, TBL(1)|713, TBL(1)|749, TBL(1)|691, TBL(1)|748,
++/*   3288 */  TBL(1)|708, TBL(1)|803, TBL(1)|1091, TBL(1)|1189, TBL(1)|1143, TBL(1)|1096, TBL(1)|1561, TBL(1)|868,
++/*   3290 */  TBL(1)|1077, TBL(1)|1108, TBL(1)|1092, TBL(1)|1300, TBL(1)|832, TBL(1)|1218, TBL(1)|1507, TBL(1)|1305,
++/*   3298 */  TBL(1)|786, TBL(1)|1317, TBL(1)|1256, TBL(1)|903, TBL(1)|1541, TBL(1)|737, TBL(1)|812, TBL(1)|1151,
++/*   32a0 */  TBL(1)|1611, TBL(1)|722, TBL(1)|758, TBL(1)|1128, TBL(1)|693, TBL(1)|699, TBL(1)|694, TBL(1)|952,
++/*   32a8 */  TBL(1)|829, TBL(1)|801, TBL(1)|919, TBL(1)|916, TBL(1)|1276, TBL(1)|721, TBL(1)|1512, TBL(1)|808,
++/*   32b0 */  TBL(1)|894, TBL(2)|43, TBL(2)|44, TBL(2)|45, TBL(2)|46, TBL(2)|52, TBL(2)|53, TBL(2)|54,
+ /*   32b8 */  TBL(2)|55, TBL(2)|56, TBL(2)|57, TBL(2)|58, TBL(2)|59, TBL(2)|60, TBL(2)|61, TBL(2)|67,
+ /*   32c0 */  TBL(2)|18, TBL(2)|33, TBL(2)|48, TBL(2)|63, TBL(2)|69, TBL(2)|74, TBL(2)|79, TBL(2)|84,
+ /*   32c8 */  TBL(2)|89, TBL(3)|115, TBL(3)|119, TBL(3)|123, TBL(2)|169, TBL(3)|584, TBL(2)|982, TBL(3)|214,
+-/*   32d0 */  TBL(1)|513, TBL(1)|515, TBL(1)|517, TBL(1)|519, TBL(1)|521, TBL(1)|522, TBL(1)|523, TBL(1)|524,
+-/*   32d8 */  TBL(1)|525, TBL(1)|526, TBL(1)|527, TBL(1)|528, TBL(1)|529, TBL(1)|530, TBL(1)|531, TBL(1)|532,
+-/*   32e0 */  TBL(1)|533, TBL(1)|535, TBL(1)|536, TBL(1)|537, TBL(1)|538, TBL(1)|539, TBL(1)|540, TBL(1)|541,
+-/*   32e8 */  TBL(1)|542, TBL(1)|543, TBL(1)|544, TBL(1)|545, TBL(1)|546, TBL(1)|547, TBL(1)|548, TBL(1)|549,
+-/*   32f0 */  TBL(1)|550, TBL(1)|551, TBL(1)|552, TBL(1)|554, TBL(1)|556, TBL(1)|558, TBL(1)|559, TBL(1)|560,
+-/*   32f8 */  TBL(1)|561, TBL(1)|562, TBL(1)|563, TBL(1)|564, TBL(1)|565, TBL(1)|566, TBL(1)|567, TBL(2)|938
++/*   32d0 */  TBL(1)|564, TBL(1)|566, TBL(1)|568, TBL(1)|570, TBL(1)|572, TBL(1)|573, TBL(1)|574, TBL(1)|575,
++/*   32d8 */  TBL(1)|576, TBL(1)|577, TBL(1)|578, TBL(1)|579, TBL(1)|580, TBL(1)|581, TBL(1)|582, TBL(1)|583,
++/*   32e0 */  TBL(1)|584, TBL(1)|586, TBL(1)|587, TBL(1)|588, TBL(1)|589, TBL(1)|590, TBL(1)|591, TBL(1)|592,
++/*   32e8 */  TBL(1)|593, TBL(1)|594, TBL(1)|595, TBL(1)|596, TBL(1)|597, TBL(1)|598, TBL(1)|599, TBL(1)|600,
++/*   32f0 */  TBL(1)|601, TBL(1)|602, TBL(1)|603, TBL(1)|605, TBL(1)|607, TBL(1)|609, TBL(1)|610, TBL(1)|611,
++/*   32f8 */  TBL(1)|612, TBL(1)|613, TBL(1)|614, TBL(1)|615, TBL(1)|616, TBL(1)|617, TBL(1)|618, TBL(2)|938
+ };
+ 
+ static const uint16_t UNWIF_compat_00_33 [256] = {
+@@ -1696,7 +1702,7 @@ static const uint16_t UNWIF_compat_00_a6 [256] = {
+ /*   a680 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a688 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a690 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   a698 */  0, 0, 0, 0, TBL(1)|177, TBL(1)|178, 0, 0,
++/*   a698 */  0, 0, 0, 0, TBL(1)|220, TBL(1)|221, 0, 0,
+ /*   a6a0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a6a8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a6b0 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1726,7 +1732,7 @@ static const uint16_t UNWIF_compat_00_a7 [256] = {
+ /*   a758 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a760 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a768 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   a770 */  TBL(1)|1629, 0, 0, 0, 0, 0, 0, 0,
++/*   a770 */  TBL(1)|1680, 0, 0, 0, 0, 0, 0, 0,
+ /*   a778 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a780 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a788 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1742,8 +1748,8 @@ static const uint16_t UNWIF_compat_00_a7 [256] = {
+ /*   a7d8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a7e0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   a7e8 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   a7f0 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   a7f8 */  TBL(1)|69, TBL(1)|73, 0, 0, 0, 0, 0, 0
++/*   a7f0 */  0, 0, TBL(1)|27, TBL(1)|30, TBL(1)|41, 0, 0, 0,
++/*   a7f8 */  TBL(1)|71, TBL(1)|75, 0, 0, 0, 0, 0, 0
+ };
+ 
+ static const uint16_t UNWIF_compat_00_ab [256] = {
+@@ -1758,9 +1764,9 @@ static const uint16_t UNWIF_compat_00_ab [256] = {
+ /*   ab40 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   ab48 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   ab50 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   ab58 */  0, 0, 0, 0, TBL(1)|1628, TBL(1)|1630, TBL(1)|95, TBL(1)|1631,
++/*   ab58 */  0, 0, 0, 0, TBL(1)|1679, TBL(1)|1682, TBL(1)|109, TBL(1)|1683,
+ /*   ab60 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   ab68 */  0, TBL(1)|114, 0, 0, 0, 0, 0, 0,
++/*   ab68 */  0, TBL(1)|138, 0, 0, 0, 0, 0, 0,
+ /*   ab70 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   ab78 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   ab80 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1782,69 +1788,69 @@ static const uint16_t UNWIF_compat_00_ab [256] = {
+ };
+ 
+ static const uint16_t UNWIF_compat_00_f9 [256] = {
+-/*   f900 */  TBL(1)|1452, TBL(1)|1037, TBL(1)|1475, TBL(1)|1462, TBL(1)|1124, TBL(1)|649, TBL(1)|774, TBL(1)|1625,
+-/*   f908 */  TBL(1)|1625, TBL(1)|849, TBL(1)|1510, TBL(1)|799, TBL(1)|848, TBL(1)|970, TBL(1)|1218, TBL(1)|1318,
+-/*   f910 */  TBL(1)|1396, TBL(1)|1411, TBL(1)|1424, TBL(1)|1493, TBL(1)|1067, TBL(1)|1102, TBL(1)|1145, TBL(1)|1183,
+-/*   f918 */  TBL(1)|1382, TBL(1)|1504, TBL(1)|1579, TBL(1)|658, TBL(1)|763, TBL(1)|1072, TBL(1)|1154, TBL(1)|1395,
+-/*   f920 */  TBL(1)|1599, TBL(1)|891, TBL(1)|1132, TBL(1)|1391, TBL(1)|1428, TBL(1)|983, TBL(1)|1341, TBL(1)|1414,
+-/*   f928 */  TBL(1)|918, TBL(1)|1042, TBL(1)|1108, TBL(1)|1173, TBL(1)|1496, TBL(1)|674, TBL(1)|712, TBL(1)|739,
+-/*   f930 */  TBL(1)|1009, TBL(1)|1070, TBL(1)|1153, TBL(1)|1226, TBL(1)|1324, TBL(1)|1393, TBL(1)|1399, TBL(1)|1472,
+-/*   f938 */  TBL(1)|1546, TBL(1)|1591, TBL(1)|1598, TBL(1)|1241, TBL(1)|1257, TBL(1)|1303, TBL(1)|1375, TBL(1)|1517,
+-/*   f940 */  TBL(1)|1601, TBL(1)|1441, TBL(1)|832, TBL(1)|925, TBL(1)|1285, TBL(1)|1333, TBL(1)|1166, TBL(1)|1243,
+-/*   f948 */  TBL(1)|1460, TBL(1)|1544, TBL(1)|831, TBL(1)|882, TBL(1)|1068, TBL(1)|1113, TBL(1)|1126, TBL(1)|1299,
+-/*   f950 */  TBL(1)|1309, TBL(1)|1528, TBL(1)|738, TBL(1)|1336, TBL(1)|715, TBL(1)|714, TBL(1)|1268, TBL(1)|1304,
+-/*   f958 */  TBL(1)|1381, TBL(1)|1530, TBL(1)|1448, TBL(1)|984, TBL(1)|1067, TBL(1)|1444, TBL(1)|652, TBL(1)|871,
+-/*   f960 */  TBL(1)|947, TBL(1)|1178, TBL(1)|1210, TBL(1)|747, TBL(1)|1245, TBL(1)|678, TBL(1)|940, TBL(1)|644,
+-/*   f968 */  TBL(1)|1097, TBL(1)|1015, TBL(1)|1298, TBL(1)|768, TBL(1)|827, TBL(1)|1229, TBL(1)|1383, TBL(1)|1437,
+-/*   f970 */  TBL(1)|1084, TBL(1)|1484, TBL(1)|1095, TBL(1)|988, TBL(1)|1365, TBL(1)|996, TBL(1)|1209, TBL(1)|665,
+-/*   f978 */  TBL(1)|696, TBL(1)|713, TBL(1)|1059, TBL(1)|1293, TBL(1)|1355, TBL(1)|1440, TBL(1)|1509, TBL(1)|741,
+-/*   f980 */  TBL(1)|786, TBL(1)|852, TBL(1)|922, TBL(1)|1022, TBL(1)|1133, TBL(1)|1246, TBL(1)|1524, TBL(1)|1581,
+-/*   f988 */  TBL(1)|1602, TBL(1)|1608, TBL(1)|732, TBL(1)|1035, TBL(1)|1079, TBL(1)|1481, TBL(1)|909, TBL(1)|964,
+-/*   f990 */  TBL(1)|971, TBL(1)|1007, TBL(1)|1129, TBL(1)|1148, TBL(1)|1192, TBL(1)|1265, TBL(1)|1306, TBL(1)|1331,
+-/*   f998 */  TBL(1)|1477, TBL(1)|1385, TBL(1)|1487, TBL(1)|1518, TBL(1)|722, TBL(1)|733, TBL(1)|791, TBL(1)|1144,
+-/*   f9a0 */  TBL(1)|1419, TBL(1)|1437, TBL(1)|917, TBL(1)|945, TBL(1)|994, TBL(1)|1082, TBL(1)|1284, TBL(1)|1175,
+-/*   f9a8 */  TBL(1)|669, TBL(1)|814, TBL(1)|871, TBL(1)|896, TBL(1)|948, TBL(1)|1182, TBL(1)|1189, TBL(1)|1321,
+-/*   f9b0 */  TBL(1)|1329, TBL(1)|1511, TBL(1)|1543, TBL(1)|1547, TBL(1)|1562, TBL(1)|675, TBL(1)|1262, TBL(1)|1506,
+-/*   f9b8 */  TBL(1)|1537, TBL(1)|954, TBL(1)|660, TBL(1)|684, TBL(1)|872, TBL(1)|880, TBL(1)|1018, TBL(1)|1067,
+-/*   f9c0 */  TBL(1)|1151, TBL(1)|1217, TBL(1)|1388, TBL(1)|1492, TBL(1)|1623, TBL(1)|1031, TBL(1)|1527, TBL(1)|731,
+-/*   f9c8 */  TBL(1)|1050, TBL(1)|1053, TBL(1)|1106, TBL(1)|1120, TBL(1)|1185, TBL(1)|1208, TBL(1)|1240, TBL(1)|1297,
+-/*   f9d0 */  TBL(1)|1565, TBL(1)|698, TBL(1)|975, TBL(1)|1531, TBL(1)|680, TBL(1)|889, TBL(1)|1114, TBL(1)|1478,
+-/*   f9d8 */  TBL(1)|936, TBL(1)|956, TBL(1)|1055, TBL(1)|1178, TBL(1)|1533, TBL(1)|724, TBL(1)|782, TBL(1)|884,
+-/*   f9e0 */  TBL(1)|1027, TBL(1)|1046, TBL(1)|1062, TBL(1)|1099, TBL(1)|1184, TBL(1)|1213, TBL(1)|1316, TBL(1)|1420,
+-/*   f9e8 */  TBL(1)|1423, TBL(1)|1508, TBL(1)|1540, TBL(1)|751, TBL(1)|1121, TBL(1)|783, TBL(1)|1152, TBL(1)|1193,
+-/*   f9f0 */  TBL(1)|1392, TBL(1)|1534, TBL(1)|1593, TBL(1)|1603, TBL(1)|1052, TBL(1)|1112, TBL(1)|1343, TBL(1)|1276,
+-/*   f9f8 */  TBL(1)|1279, TBL(1)|1288, TBL(1)|1172, TBL(1)|1142, TBL(1)|1447, TBL(1)|667, TBL(1)|1369, TBL(1)|725
++/*   f900 */  TBL(1)|1503, TBL(1)|1088, TBL(1)|1526, TBL(1)|1513, TBL(1)|1175, TBL(1)|700, TBL(1)|825, TBL(1)|1676,
++/*   f908 */  TBL(1)|1676, TBL(1)|900, TBL(1)|1561, TBL(1)|850, TBL(1)|899, TBL(1)|1021, TBL(1)|1269, TBL(1)|1369,
++/*   f910 */  TBL(1)|1447, TBL(1)|1462, TBL(1)|1475, TBL(1)|1544, TBL(1)|1118, TBL(1)|1153, TBL(1)|1196, TBL(1)|1234,
++/*   f918 */  TBL(1)|1433, TBL(1)|1555, TBL(1)|1630, TBL(1)|709, TBL(1)|814, TBL(1)|1123, TBL(1)|1205, TBL(1)|1446,
++/*   f920 */  TBL(1)|1650, TBL(1)|942, TBL(1)|1183, TBL(1)|1442, TBL(1)|1479, TBL(1)|1034, TBL(1)|1392, TBL(1)|1465,
++/*   f928 */  TBL(1)|969, TBL(1)|1093, TBL(1)|1159, TBL(1)|1224, TBL(1)|1547, TBL(1)|725, TBL(1)|763, TBL(1)|790,
++/*   f930 */  TBL(1)|1060, TBL(1)|1121, TBL(1)|1204, TBL(1)|1277, TBL(1)|1375, TBL(1)|1444, TBL(1)|1450, TBL(1)|1523,
++/*   f938 */  TBL(1)|1597, TBL(1)|1642, TBL(1)|1649, TBL(1)|1292, TBL(1)|1308, TBL(1)|1354, TBL(1)|1426, TBL(1)|1568,
++/*   f940 */  TBL(1)|1652, TBL(1)|1492, TBL(1)|883, TBL(1)|976, TBL(1)|1336, TBL(1)|1384, TBL(1)|1217, TBL(1)|1294,
++/*   f948 */  TBL(1)|1511, TBL(1)|1595, TBL(1)|882, TBL(1)|933, TBL(1)|1119, TBL(1)|1164, TBL(1)|1177, TBL(1)|1350,
++/*   f950 */  TBL(1)|1360, TBL(1)|1579, TBL(1)|789, TBL(1)|1387, TBL(1)|766, TBL(1)|765, TBL(1)|1319, TBL(1)|1355,
++/*   f958 */  TBL(1)|1432, TBL(1)|1581, TBL(1)|1499, TBL(1)|1035, TBL(1)|1118, TBL(1)|1495, TBL(1)|703, TBL(1)|922,
++/*   f960 */  TBL(1)|998, TBL(1)|1229, TBL(1)|1261, TBL(1)|798, TBL(1)|1296, TBL(1)|729, TBL(1)|991, TBL(1)|695,
++/*   f968 */  TBL(1)|1148, TBL(1)|1066, TBL(1)|1349, TBL(1)|819, TBL(1)|878, TBL(1)|1280, TBL(1)|1434, TBL(1)|1488,
++/*   f970 */  TBL(1)|1135, TBL(1)|1535, TBL(1)|1146, TBL(1)|1039, TBL(1)|1416, TBL(1)|1047, TBL(1)|1260, TBL(1)|716,
++/*   f978 */  TBL(1)|747, TBL(1)|764, TBL(1)|1110, TBL(1)|1344, TBL(1)|1406, TBL(1)|1491, TBL(1)|1560, TBL(1)|792,
++/*   f980 */  TBL(1)|837, TBL(1)|903, TBL(1)|973, TBL(1)|1073, TBL(1)|1184, TBL(1)|1297, TBL(1)|1575, TBL(1)|1632,
++/*   f988 */  TBL(1)|1653, TBL(1)|1659, TBL(1)|783, TBL(1)|1086, TBL(1)|1130, TBL(1)|1532, TBL(1)|960, TBL(1)|1015,
++/*   f990 */  TBL(1)|1022, TBL(1)|1058, TBL(1)|1180, TBL(1)|1199, TBL(1)|1243, TBL(1)|1316, TBL(1)|1357, TBL(1)|1382,
++/*   f998 */  TBL(1)|1528, TBL(1)|1436, TBL(1)|1538, TBL(1)|1569, TBL(1)|773, TBL(1)|784, TBL(1)|842, TBL(1)|1195,
++/*   f9a0 */  TBL(1)|1470, TBL(1)|1488, TBL(1)|968, TBL(1)|996, TBL(1)|1045, TBL(1)|1133, TBL(1)|1335, TBL(1)|1226,
++/*   f9a8 */  TBL(1)|720, TBL(1)|865, TBL(1)|922, TBL(1)|947, TBL(1)|999, TBL(1)|1233, TBL(1)|1240, TBL(1)|1372,
++/*   f9b0 */  TBL(1)|1380, TBL(1)|1562, TBL(1)|1594, TBL(1)|1598, TBL(1)|1613, TBL(1)|726, TBL(1)|1313, TBL(1)|1557,
++/*   f9b8 */  TBL(1)|1588, TBL(1)|1005, TBL(1)|711, TBL(1)|735, TBL(1)|923, TBL(1)|931, TBL(1)|1069, TBL(1)|1118,
++/*   f9c0 */  TBL(1)|1202, TBL(1)|1268, TBL(1)|1439, TBL(1)|1543, TBL(1)|1674, TBL(1)|1082, TBL(1)|1578, TBL(1)|782,
++/*   f9c8 */  TBL(1)|1101, TBL(1)|1104, TBL(1)|1157, TBL(1)|1171, TBL(1)|1236, TBL(1)|1259, TBL(1)|1291, TBL(1)|1348,
++/*   f9d0 */  TBL(1)|1616, TBL(1)|749, TBL(1)|1026, TBL(1)|1582, TBL(1)|731, TBL(1)|940, TBL(1)|1165, TBL(1)|1529,
++/*   f9d8 */  TBL(1)|987, TBL(1)|1007, TBL(1)|1106, TBL(1)|1229, TBL(1)|1584, TBL(1)|775, TBL(1)|833, TBL(1)|935,
++/*   f9e0 */  TBL(1)|1078, TBL(1)|1097, TBL(1)|1113, TBL(1)|1150, TBL(1)|1235, TBL(1)|1264, TBL(1)|1367, TBL(1)|1471,
++/*   f9e8 */  TBL(1)|1474, TBL(1)|1559, TBL(1)|1591, TBL(1)|802, TBL(1)|1172, TBL(1)|834, TBL(1)|1203, TBL(1)|1244,
++/*   f9f0 */  TBL(1)|1443, TBL(1)|1585, TBL(1)|1644, TBL(1)|1654, TBL(1)|1103, TBL(1)|1163, TBL(1)|1394, TBL(1)|1327,
++/*   f9f8 */  TBL(1)|1330, TBL(1)|1339, TBL(1)|1223, TBL(1)|1193, TBL(1)|1498, TBL(1)|718, TBL(1)|1420, TBL(1)|776
+ };
+ 
+ static const uint16_t UNWIF_compat_00_fa [256] = {
+-/*   fa00 */  TBL(1)|721, TBL(1)|913, TBL(1)|985, TBL(1)|1291, TBL(1)|867, TBL(1)|1103, TBL(1)|1034, TBL(1)|1480,
+-/*   fa08 */  TBL(1)|1416, TBL(1)|1529, TBL(1)|1431, TBL(1)|920, TBL(1)|688, TBL(1)|805, 0, 0,
+-/*   fa10 */  TBL(1)|826, 0, TBL(1)|1030, 0, 0, TBL(1)|716, TBL(1)|1174, TBL(1)|1223,
+-/*   fa18 */  TBL(1)|1248, TBL(1)|1255, TBL(1)|1256, TBL(1)|1261, TBL(1)|1549, TBL(1)|1289, TBL(1)|1322, 0,
+-/*   fa20 */  TBL(1)|1394, 0, TBL(1)|1443, 0, 0, TBL(1)|1488, TBL(1)|1499, 0,
+-/*   fa28 */  0, 0, TBL(1)|1570, TBL(1)|1571, TBL(1)|1572, TBL(1)|1597, TBL(1)|1497, TBL(1)|1536,
+-/*   fa30 */  TBL(1)|676, TBL(1)|685, TBL(1)|690, TBL(1)|737, TBL(1)|740, TBL(1)|756, TBL(1)|801, TBL(1)|808,
+-/*   fa38 */  TBL(1)|810, TBL(1)|825, TBL(1)|828, TBL(1)|883, TBL(1)|885, TBL(1)|951, TBL(1)|961, TBL(1)|963,
+-/*   fa40 */  TBL(1)|969, TBL(1)|1012, TBL(1)|1024, TBL(1)|1032, TBL(1)|1060, TBL(1)|1109, TBL(1)|1116, TBL(1)|1128,
+-/*   fa48 */  TBL(1)|1149, TBL(1)|1157, TBL(1)|1186, TBL(1)|1242, TBL(1)|1249, TBL(1)|1251, TBL(1)|1250, TBL(1)|1252,
+-/*   fa50 */  TBL(1)|1253, TBL(1)|1254, TBL(1)|1259, TBL(1)|1260, TBL(1)|1269, TBL(1)|1274, TBL(1)|1281, TBL(1)|1306,
+-/*   fa58 */  TBL(1)|1308, TBL(1)|1310, TBL(1)|1315, TBL(1)|1325, TBL(1)|1345, TBL(1)|1358, TBL(1)|1358, TBL(1)|1384,
+-/*   fa60 */  TBL(1)|1426, TBL(1)|1432, TBL(1)|1445, TBL(1)|1446, TBL(1)|1463, TBL(1)|1464, TBL(1)|1486, TBL(1)|1488,
+-/*   fa68 */  TBL(1)|1541, TBL(1)|1558, TBL(1)|1564, TBL(1)|949, TBL(1)|420, TBL(1)|1351, 0, 0,
+-/*   fa70 */  TBL(1)|646, TBL(1)|711, TBL(1)|695, TBL(1)|673, TBL(1)|689, TBL(1)|700, TBL(1)|736, TBL(1)|743,
+-/*   fa78 */  TBL(1)|801, TBL(1)|796, TBL(1)|800, TBL(1)|807, TBL(1)|826, TBL(1)|830, TBL(1)|847, TBL(1)|850,
+-/*   fa80 */  TBL(1)|857, TBL(1)|861, TBL(1)|919, TBL(1)|921, TBL(1)|933, TBL(1)|941, TBL(1)|953, TBL(1)|959,
+-/*   fa88 */  TBL(1)|955, TBL(1)|963, TBL(1)|960, TBL(1)|969, TBL(1)|976, TBL(1)|998, TBL(1)|1001, TBL(1)|1003,
+-/*   fa90 */  TBL(1)|1013, TBL(1)|1030, TBL(1)|1042, TBL(1)|1043, TBL(1)|1048, TBL(1)|1080, TBL(1)|1084, TBL(1)|1106,
+-/*   fa98 */  TBL(1)|1125, TBL(1)|1123, TBL(1)|1128, TBL(1)|1135, TBL(1)|1149, TBL(1)|1235, TBL(1)|1158, TBL(1)|1171,
+-/*   faa0 */  TBL(1)|1174, TBL(1)|1190, TBL(1)|1197, TBL(1)|1206, TBL(1)|1215, TBL(1)|1216, TBL(1)|1223, TBL(1)|1224,
+-/*   faa8 */  TBL(1)|1228, TBL(1)|1233, TBL(1)|1232, TBL(1)|1244, TBL(1)|1275, TBL(1)|1281, TBL(1)|1287, TBL(1)|1301,
+-/*   fab0 */  TBL(1)|1306, TBL(1)|1313, TBL(1)|1325, TBL(1)|1370, TBL(1)|1380, TBL(1)|1409, TBL(1)|1427, TBL(1)|1430,
+-/*   fab8 */  TBL(1)|1432, TBL(1)|1438, TBL(1)|1443, TBL(1)|1439, TBL(1)|1445, TBL(1)|1444, TBL(1)|1442, TBL(1)|1446,
+-/*   fac0 */  TBL(1)|1449, TBL(1)|1464, TBL(1)|1479, TBL(1)|1491, TBL(1)|1505, TBL(1)|1513, TBL(1)|1532, TBL(1)|1541,
+-/*   fac8 */  TBL(1)|1549, TBL(1)|1554, TBL(1)|1558, TBL(1)|1561, TBL(1)|1564, TBL(1)|1585, TBL(1)|1625, TBL(1)|399,
+-/*   fad0 */  TBL(1)|398, TBL(1)|408, TBL(1)|592, TBL(1)|602, TBL(1)|603, TBL(1)|435, TBL(1)|446, TBL(1)|470,
+-/*   fad8 */  TBL(1)|1620, TBL(1)|1624, 0, 0, 0, 0, 0, 0,
++/*   fa00 */  TBL(1)|772, TBL(1)|964, TBL(1)|1036, TBL(1)|1342, TBL(1)|918, TBL(1)|1154, TBL(1)|1085, TBL(1)|1531,
++/*   fa08 */  TBL(1)|1467, TBL(1)|1580, TBL(1)|1482, TBL(1)|971, TBL(1)|739, TBL(1)|856, 0, 0,
++/*   fa10 */  TBL(1)|877, 0, TBL(1)|1081, 0, 0, TBL(1)|767, TBL(1)|1225, TBL(1)|1274,
++/*   fa18 */  TBL(1)|1299, TBL(1)|1306, TBL(1)|1307, TBL(1)|1312, TBL(1)|1600, TBL(1)|1340, TBL(1)|1373, 0,
++/*   fa20 */  TBL(1)|1445, 0, TBL(1)|1494, 0, 0, TBL(1)|1539, TBL(1)|1550, 0,
++/*   fa28 */  0, 0, TBL(1)|1621, TBL(1)|1622, TBL(1)|1623, TBL(1)|1648, TBL(1)|1548, TBL(1)|1587,
++/*   fa30 */  TBL(1)|727, TBL(1)|736, TBL(1)|741, TBL(1)|788, TBL(1)|791, TBL(1)|807, TBL(1)|852, TBL(1)|859,
++/*   fa38 */  TBL(1)|861, TBL(1)|876, TBL(1)|879, TBL(1)|934, TBL(1)|936, TBL(1)|1002, TBL(1)|1012, TBL(1)|1014,
++/*   fa40 */  TBL(1)|1020, TBL(1)|1063, TBL(1)|1075, TBL(1)|1083, TBL(1)|1111, TBL(1)|1160, TBL(1)|1167, TBL(1)|1179,
++/*   fa48 */  TBL(1)|1200, TBL(1)|1208, TBL(1)|1237, TBL(1)|1293, TBL(1)|1300, TBL(1)|1302, TBL(1)|1301, TBL(1)|1303,
++/*   fa50 */  TBL(1)|1304, TBL(1)|1305, TBL(1)|1310, TBL(1)|1311, TBL(1)|1320, TBL(1)|1325, TBL(1)|1332, TBL(1)|1357,
++/*   fa58 */  TBL(1)|1359, TBL(1)|1361, TBL(1)|1366, TBL(1)|1376, TBL(1)|1396, TBL(1)|1409, TBL(1)|1409, TBL(1)|1435,
++/*   fa60 */  TBL(1)|1477, TBL(1)|1483, TBL(1)|1496, TBL(1)|1497, TBL(1)|1514, TBL(1)|1515, TBL(1)|1537, TBL(1)|1539,
++/*   fa68 */  TBL(1)|1592, TBL(1)|1609, TBL(1)|1615, TBL(1)|1000, TBL(1)|470, TBL(1)|1402, 0, 0,
++/*   fa70 */  TBL(1)|697, TBL(1)|762, TBL(1)|746, TBL(1)|724, TBL(1)|740, TBL(1)|751, TBL(1)|787, TBL(1)|794,
++/*   fa78 */  TBL(1)|852, TBL(1)|847, TBL(1)|851, TBL(1)|858, TBL(1)|877, TBL(1)|881, TBL(1)|898, TBL(1)|901,
++/*   fa80 */  TBL(1)|908, TBL(1)|912, TBL(1)|970, TBL(1)|972, TBL(1)|984, TBL(1)|992, TBL(1)|1004, TBL(1)|1010,
++/*   fa88 */  TBL(1)|1006, TBL(1)|1014, TBL(1)|1011, TBL(1)|1020, TBL(1)|1027, TBL(1)|1049, TBL(1)|1052, TBL(1)|1054,
++/*   fa90 */  TBL(1)|1064, TBL(1)|1081, TBL(1)|1093, TBL(1)|1094, TBL(1)|1099, TBL(1)|1131, TBL(1)|1135, TBL(1)|1157,
++/*   fa98 */  TBL(1)|1176, TBL(1)|1174, TBL(1)|1179, TBL(1)|1186, TBL(1)|1200, TBL(1)|1286, TBL(1)|1209, TBL(1)|1222,
++/*   faa0 */  TBL(1)|1225, TBL(1)|1241, TBL(1)|1248, TBL(1)|1257, TBL(1)|1266, TBL(1)|1267, TBL(1)|1274, TBL(1)|1275,
++/*   faa8 */  TBL(1)|1279, TBL(1)|1284, TBL(1)|1283, TBL(1)|1295, TBL(1)|1326, TBL(1)|1332, TBL(1)|1338, TBL(1)|1352,
++/*   fab0 */  TBL(1)|1357, TBL(1)|1364, TBL(1)|1376, TBL(1)|1421, TBL(1)|1431, TBL(1)|1460, TBL(1)|1478, TBL(1)|1481,
++/*   fab8 */  TBL(1)|1483, TBL(1)|1489, TBL(1)|1494, TBL(1)|1490, TBL(1)|1496, TBL(1)|1495, TBL(1)|1493, TBL(1)|1497,
++/*   fac0 */  TBL(1)|1500, TBL(1)|1515, TBL(1)|1530, TBL(1)|1542, TBL(1)|1556, TBL(1)|1564, TBL(1)|1583, TBL(1)|1592,
++/*   fac8 */  TBL(1)|1600, TBL(1)|1605, TBL(1)|1609, TBL(1)|1612, TBL(1)|1615, TBL(1)|1636, TBL(1)|1676, TBL(1)|449,
++/*   fad0 */  TBL(1)|448, TBL(1)|458, TBL(1)|643, TBL(1)|653, TBL(1)|654, TBL(1)|485, TBL(1)|496, TBL(1)|520,
++/*   fad8 */  TBL(1)|1671, TBL(1)|1675, 0, 0, 0, 0, 0, 0,
+ /*   fae0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   fae8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   faf0 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -1856,34 +1862,34 @@ static const uint16_t UNWIF_compat_00_fb [256] = {
+ /*   fb08 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   fb10 */  0, 0, 0, TBL(2)|518, TBL(2)|515, TBL(2)|516, TBL(2)|519, TBL(2)|517,
+ /*   fb18 */  0, 0, 0, 0, 0, TBL(2)|533, 0, TBL(2)|552,
+-/*   fb20 */  TBL(1)|187, TBL(1)|179, TBL(1)|182, TBL(1)|183, TBL(1)|184, TBL(1)|185, TBL(1)|186, TBL(1)|188,
+-/*   fb28 */  TBL(1)|189, TBL(1)|3, TBL(2)|549, TBL(2)|550, TBL(3)|374, TBL(3)|375, TBL(2)|520, TBL(2)|521,
++/*   fb20 */  TBL(1)|230, TBL(1)|222, TBL(1)|225, TBL(1)|226, TBL(1)|227, TBL(1)|228, TBL(1)|229, TBL(1)|231,
++/*   fb28 */  TBL(1)|232, TBL(1)|3, TBL(2)|549, TBL(2)|550, TBL(3)|374, TBL(3)|375, TBL(2)|520, TBL(2)|521,
+ /*   fb30 */  TBL(2)|522, TBL(2)|524, TBL(2)|526, TBL(2)|527, TBL(2)|528, TBL(2)|530, TBL(2)|531, 0,
+ /*   fb38 */  TBL(2)|532, TBL(2)|534, TBL(2)|535, TBL(2)|536, TBL(2)|538, 0, TBL(2)|539, 0,
+ /*   fb40 */  TBL(2)|540, TBL(2)|541, 0, TBL(2)|542, TBL(2)|543, 0, TBL(2)|545, TBL(2)|546,
+ /*   fb48 */  TBL(2)|547, TBL(2)|548, TBL(2)|551, TBL(2)|529, TBL(2)|525, TBL(2)|537, TBL(2)|544, TBL(2)|523,
+-/*   fb50 */  TBL(1)|223, TBL(1)|223, TBL(1)|226, TBL(1)|226, TBL(1)|226, TBL(1)|226, TBL(1)|227, TBL(1)|227,
+-/*   fb58 */  TBL(1)|227, TBL(1)|227, TBL(1)|229, TBL(1)|229, TBL(1)|229, TBL(1)|229, TBL(1)|225, TBL(1)|225,
+-/*   fb60 */  TBL(1)|225, TBL(1)|225, TBL(1)|228, TBL(1)|228, TBL(1)|228, TBL(1)|228, TBL(1)|224, TBL(1)|224,
+-/*   fb68 */  TBL(1)|224, TBL(1)|224, TBL(1)|241, TBL(1)|241, TBL(1)|241, TBL(1)|241, TBL(1)|242, TBL(1)|242,
+-/*   fb70 */  TBL(1)|242, TBL(1)|242, TBL(1)|231, TBL(1)|231, TBL(1)|231, TBL(1)|231, TBL(1)|230, TBL(1)|230,
+-/*   fb78 */  TBL(1)|230, TBL(1)|230, TBL(1)|232, TBL(1)|232, TBL(1)|232, TBL(1)|232, TBL(1)|233, TBL(1)|233,
+-/*   fb80 */  TBL(1)|233, TBL(1)|233, TBL(1)|236, TBL(1)|236, TBL(1)|235, TBL(1)|235, TBL(1)|237, TBL(1)|237,
+-/*   fb88 */  TBL(1)|234, TBL(1)|234, TBL(1)|239, TBL(1)|239, TBL(1)|238, TBL(1)|238, TBL(1)|243, TBL(1)|243,
+-/*   fb90 */  TBL(1)|243, TBL(1)|243, TBL(1)|245, TBL(1)|245, TBL(1)|245, TBL(1)|245, TBL(1)|247, TBL(1)|247,
+-/*   fb98 */  TBL(1)|247, TBL(1)|247, TBL(1)|246, TBL(1)|246, TBL(1)|246, TBL(1)|246, TBL(1)|248, TBL(1)|248,
+-/*   fba0 */  TBL(1)|249, TBL(1)|249, TBL(1)|249, TBL(1)|249, TBL(2)|715, TBL(2)|715, TBL(1)|251, TBL(1)|251,
+-/*   fba8 */  TBL(1)|251, TBL(1)|251, TBL(1)|250, TBL(1)|250, TBL(1)|250, TBL(1)|250, TBL(1)|260, TBL(1)|260,
++/*   fb50 */  TBL(1)|266, TBL(1)|266, TBL(1)|269, TBL(1)|269, TBL(1)|269, TBL(1)|269, TBL(1)|270, TBL(1)|270,
++/*   fb58 */  TBL(1)|270, TBL(1)|270, TBL(1)|272, TBL(1)|272, TBL(1)|272, TBL(1)|272, TBL(1)|268, TBL(1)|268,
++/*   fb60 */  TBL(1)|268, TBL(1)|268, TBL(1)|271, TBL(1)|271, TBL(1)|271, TBL(1)|271, TBL(1)|267, TBL(1)|267,
++/*   fb68 */  TBL(1)|267, TBL(1)|267, TBL(1)|284, TBL(1)|284, TBL(1)|284, TBL(1)|284, TBL(1)|285, TBL(1)|285,
++/*   fb70 */  TBL(1)|285, TBL(1)|285, TBL(1)|274, TBL(1)|274, TBL(1)|274, TBL(1)|274, TBL(1)|273, TBL(1)|273,
++/*   fb78 */  TBL(1)|273, TBL(1)|273, TBL(1)|275, TBL(1)|275, TBL(1)|275, TBL(1)|275, TBL(1)|276, TBL(1)|276,
++/*   fb80 */  TBL(1)|276, TBL(1)|276, TBL(1)|279, TBL(1)|279, TBL(1)|278, TBL(1)|278, TBL(1)|280, TBL(1)|280,
++/*   fb88 */  TBL(1)|277, TBL(1)|277, TBL(1)|282, TBL(1)|282, TBL(1)|281, TBL(1)|281, TBL(1)|286, TBL(1)|286,
++/*   fb90 */  TBL(1)|286, TBL(1)|286, TBL(1)|288, TBL(1)|288, TBL(1)|288, TBL(1)|288, TBL(1)|290, TBL(1)|290,
++/*   fb98 */  TBL(1)|290, TBL(1)|290, TBL(1)|289, TBL(1)|289, TBL(1)|289, TBL(1)|289, TBL(1)|291, TBL(1)|291,
++/*   fba0 */  TBL(1)|292, TBL(1)|292, TBL(1)|292, TBL(1)|292, TBL(2)|715, TBL(2)|715, TBL(1)|294, TBL(1)|294,
++/*   fba8 */  TBL(1)|294, TBL(1)|294, TBL(1)|293, TBL(1)|293, TBL(1)|293, TBL(1)|293, TBL(1)|303, TBL(1)|303,
+ /*   fbb0 */  TBL(2)|714, TBL(2)|714, 0, 0, 0, 0, 0, 0,
+ /*   fbb8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   fbc0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   fbc8 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   fbd0 */  0, 0, 0, TBL(1)|244, TBL(1)|244, TBL(1)|244, TBL(1)|244, TBL(1)|254,
+-/*   fbd8 */  TBL(1)|254, TBL(1)|253, TBL(1)|253, TBL(1)|255, TBL(1)|255, TBL(2)|713, TBL(1)|257, TBL(1)|257,
+-/*   fbe0 */  TBL(1)|252, TBL(1)|252, TBL(1)|256, TBL(1)|256, TBL(1)|259, TBL(1)|259, TBL(1)|259, TBL(1)|259,
+-/*   fbe8 */  TBL(1)|219, TBL(1)|219, TBL(3)|479, TBL(3)|479, TBL(3)|495, TBL(3)|495, TBL(3)|488, TBL(3)|488,
++/*   fbd0 */  0, 0, 0, TBL(1)|287, TBL(1)|287, TBL(1)|287, TBL(1)|287, TBL(1)|297,
++/*   fbd8 */  TBL(1)|297, TBL(1)|296, TBL(1)|296, TBL(1)|298, TBL(1)|298, TBL(2)|713, TBL(1)|300, TBL(1)|300,
++/*   fbe0 */  TBL(1)|295, TBL(1)|295, TBL(1)|299, TBL(1)|299, TBL(1)|302, TBL(1)|302, TBL(1)|302, TBL(1)|302,
++/*   fbe8 */  TBL(1)|262, TBL(1)|262, TBL(3)|479, TBL(3)|479, TBL(3)|495, TBL(3)|495, TBL(3)|488, TBL(3)|488,
+ /*   fbf0 */  TBL(3)|492, TBL(3)|492, TBL(3)|491, TBL(3)|491, TBL(3)|493, TBL(3)|493, TBL(3)|494, TBL(3)|494,
+-/*   fbf8 */  TBL(3)|494, TBL(3)|489, TBL(3)|489, TBL(3)|489, TBL(1)|258, TBL(1)|258, TBL(1)|258, TBL(1)|258
++/*   fbf8 */  TBL(3)|494, TBL(3)|489, TBL(3)|489, TBL(3)|489, TBL(1)|301, TBL(1)|301, TBL(1)|301, TBL(1)|301
+ };
+ 
+ static const uint16_t UNWIF_compat_00_fc [256] = {
+@@ -1959,35 +1965,35 @@ static const uint16_t UNWIF_compat_00_fd [256] = {
+ static const uint16_t UNWIF_compat_00_fe [256] = {
+ /*   fe00 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   fe08 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   fe10 */  TBL(1)|4, TBL(1)|493, TBL(1)|494, TBL(1)|18, TBL(1)|19, TBL(1)|53, TBL(1)|23, TBL(1)|508,
+-/*   fe18 */  TBL(1)|509, TBL(3)|111, 0, 0, 0, 0, 0, 0,
++/*   fe10 */  TBL(1)|4, TBL(1)|544, TBL(1)|545, TBL(1)|18, TBL(1)|19, TBL(1)|53, TBL(1)|23, TBL(1)|559,
++/*   fe18 */  TBL(1)|560, TBL(3)|111, 0, 0, 0, 0, 0, 0,
+ /*   fe20 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   fe28 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/*   fe30 */  TBL(2)|0, TBL(1)|368, TBL(1)|367, TBL(1)|1634, TBL(1)|1634, TBL(1)|0, TBL(1)|1, TBL(1)|1662,
+-/*   fe38 */  TBL(1)|1664, TBL(1)|506, TBL(1)|507, TBL(1)|503, TBL(1)|504, TBL(1)|497, TBL(1)|498, TBL(1)|495,
+-/*   fe40 */  TBL(1)|496, TBL(1)|499, TBL(1)|500, TBL(1)|501, TBL(1)|502, 0, 0, TBL(1)|51,
+-/*   fe48 */  TBL(1)|1632, TBL(2)|332, TBL(2)|332, TBL(2)|332, TBL(2)|332, TBL(1)|1634, TBL(1)|1634, TBL(1)|1634,
+-/*   fe50 */  TBL(1)|4, TBL(1)|493, TBL(1)|6, 0, TBL(1)|19, TBL(1)|18, TBL(1)|23, TBL(1)|53,
+-/*   fe58 */  TBL(1)|368, TBL(1)|0, TBL(1)|1, TBL(1)|1662, TBL(1)|1664, TBL(1)|506, TBL(1)|507, TBL(1)|55,
++/*   fe30 */  TBL(2)|0, TBL(1)|418, TBL(1)|417, TBL(1)|1688, TBL(1)|1688, TBL(1)|0, TBL(1)|1, TBL(1)|1716,
++/*   fe38 */  TBL(1)|1718, TBL(1)|557, TBL(1)|558, TBL(1)|554, TBL(1)|555, TBL(1)|548, TBL(1)|549, TBL(1)|546,
++/*   fe40 */  TBL(1)|547, TBL(1)|550, TBL(1)|551, TBL(1)|552, TBL(1)|553, 0, 0, TBL(1)|51,
++/*   fe48 */  TBL(1)|1686, TBL(2)|332, TBL(2)|332, TBL(2)|332, TBL(2)|332, TBL(1)|1688, TBL(1)|1688, TBL(1)|1688,
++/*   fe50 */  TBL(1)|4, TBL(1)|544, TBL(1)|6, 0, TBL(1)|19, TBL(1)|18, TBL(1)|23, TBL(1)|53,
++/*   fe58 */  TBL(1)|418, TBL(1)|0, TBL(1)|1, TBL(1)|1716, TBL(1)|1718, TBL(1)|557, TBL(1)|558, TBL(1)|55,
+ /*   fe60 */  TBL(1)|58, TBL(1)|2, TBL(1)|3, TBL(1)|5, TBL(1)|20, TBL(1)|22, TBL(1)|21, 0,
+ /*   fe68 */  TBL(1)|60, TBL(1)|56, TBL(1)|57, TBL(1)|24, 0, 0, 0, 0,
+ /*   fe70 */  TBL(2)|345, TBL(2)|643, TBL(2)|346, 0, TBL(2)|347, 0, TBL(2)|348, TBL(2)|644,
+ /*   fe78 */  TBL(2)|349, TBL(2)|645, TBL(2)|350, TBL(2)|646, TBL(2)|351, TBL(2)|647, TBL(2)|352, TBL(2)|648,
+-/*   fe80 */  TBL(1)|190, TBL(2)|554, TBL(2)|554, TBL(2)|555, TBL(2)|555, TBL(2)|697, TBL(2)|697, TBL(2)|556,
+-/*   fe88 */  TBL(2)|556, TBL(2)|710, TBL(2)|710, TBL(2)|710, TBL(2)|710, TBL(1)|191, TBL(1)|191, TBL(1)|192,
+-/*   fe90 */  TBL(1)|192, TBL(1)|192, TBL(1)|192, TBL(1)|193, TBL(1)|193, TBL(1)|194, TBL(1)|194, TBL(1)|194,
+-/*   fe98 */  TBL(1)|194, TBL(1)|195, TBL(1)|195, TBL(1)|195, TBL(1)|195, TBL(1)|196, TBL(1)|196, TBL(1)|196,
+-/*   fea0 */  TBL(1)|196, TBL(1)|197, TBL(1)|197, TBL(1)|197, TBL(1)|197, TBL(1)|198, TBL(1)|198, TBL(1)|198,
+-/*   fea8 */  TBL(1)|198, TBL(1)|199, TBL(1)|199, TBL(1)|200, TBL(1)|200, TBL(1)|201, TBL(1)|201, TBL(1)|202,
+-/*   feb0 */  TBL(1)|202, TBL(1)|203, TBL(1)|203, TBL(1)|203, TBL(1)|203, TBL(1)|204, TBL(1)|204, TBL(1)|204,
+-/*   feb8 */  TBL(1)|204, TBL(1)|205, TBL(1)|205, TBL(1)|205, TBL(1)|205, TBL(1)|206, TBL(1)|206, TBL(1)|206,
+-/*   fec0 */  TBL(1)|206, TBL(1)|207, TBL(1)|207, TBL(1)|207, TBL(1)|207, TBL(1)|208, TBL(1)|208, TBL(1)|208,
+-/*   fec8 */  TBL(1)|208, TBL(1)|209, TBL(1)|209, TBL(1)|209, TBL(1)|209, TBL(1)|210, TBL(1)|210, TBL(1)|210,
+-/*   fed0 */  TBL(1)|210, TBL(1)|211, TBL(1)|211, TBL(1)|211, TBL(1)|211, TBL(1)|212, TBL(1)|212, TBL(1)|212,
+-/*   fed8 */  TBL(1)|212, TBL(1)|213, TBL(1)|213, TBL(1)|213, TBL(1)|213, TBL(1)|214, TBL(1)|214, TBL(1)|214,
+-/*   fee0 */  TBL(1)|214, TBL(1)|215, TBL(1)|215, TBL(1)|215, TBL(1)|215, TBL(1)|216, TBL(1)|216, TBL(1)|216,
+-/*   fee8 */  TBL(1)|216, TBL(1)|217, TBL(1)|217, TBL(1)|217, TBL(1)|217, TBL(1)|218, TBL(1)|218, TBL(1)|219,
+-/*   fef0 */  TBL(1)|219, TBL(1)|220, TBL(1)|220, TBL(1)|220, TBL(1)|220, TBL(3)|441, TBL(3)|441, TBL(3)|442,
++/*   fe80 */  TBL(1)|233, TBL(2)|554, TBL(2)|554, TBL(2)|555, TBL(2)|555, TBL(2)|697, TBL(2)|697, TBL(2)|556,
++/*   fe88 */  TBL(2)|556, TBL(2)|710, TBL(2)|710, TBL(2)|710, TBL(2)|710, TBL(1)|234, TBL(1)|234, TBL(1)|235,
++/*   fe90 */  TBL(1)|235, TBL(1)|235, TBL(1)|235, TBL(1)|236, TBL(1)|236, TBL(1)|237, TBL(1)|237, TBL(1)|237,
++/*   fe98 */  TBL(1)|237, TBL(1)|238, TBL(1)|238, TBL(1)|238, TBL(1)|238, TBL(1)|239, TBL(1)|239, TBL(1)|239,
++/*   fea0 */  TBL(1)|239, TBL(1)|240, TBL(1)|240, TBL(1)|240, TBL(1)|240, TBL(1)|241, TBL(1)|241, TBL(1)|241,
++/*   fea8 */  TBL(1)|241, TBL(1)|242, TBL(1)|242, TBL(1)|243, TBL(1)|243, TBL(1)|244, TBL(1)|244, TBL(1)|245,
++/*   feb0 */  TBL(1)|245, TBL(1)|246, TBL(1)|246, TBL(1)|246, TBL(1)|246, TBL(1)|247, TBL(1)|247, TBL(1)|247,
++/*   feb8 */  TBL(1)|247, TBL(1)|248, TBL(1)|248, TBL(1)|248, TBL(1)|248, TBL(1)|249, TBL(1)|249, TBL(1)|249,
++/*   fec0 */  TBL(1)|249, TBL(1)|250, TBL(1)|250, TBL(1)|250, TBL(1)|250, TBL(1)|251, TBL(1)|251, TBL(1)|251,
++/*   fec8 */  TBL(1)|251, TBL(1)|252, TBL(1)|252, TBL(1)|252, TBL(1)|252, TBL(1)|253, TBL(1)|253, TBL(1)|253,
++/*   fed0 */  TBL(1)|253, TBL(1)|254, TBL(1)|254, TBL(1)|254, TBL(1)|254, TBL(1)|255, TBL(1)|255, TBL(1)|255,
++/*   fed8 */  TBL(1)|255, TBL(1)|256, TBL(1)|256, TBL(1)|256, TBL(1)|256, TBL(1)|257, TBL(1)|257, TBL(1)|257,
++/*   fee0 */  TBL(1)|257, TBL(1)|258, TBL(1)|258, TBL(1)|258, TBL(1)|258, TBL(1)|259, TBL(1)|259, TBL(1)|259,
++/*   fee8 */  TBL(1)|259, TBL(1)|260, TBL(1)|260, TBL(1)|260, TBL(1)|260, TBL(1)|261, TBL(1)|261, TBL(1)|262,
++/*   fef0 */  TBL(1)|262, TBL(1)|263, TBL(1)|263, TBL(1)|263, TBL(1)|263, TBL(3)|441, TBL(3)|441, TBL(3)|442,
+ /*   fef8 */  TBL(3)|442, TBL(3)|443, TBL(3)|443, TBL(2)|667, TBL(2)|667, 0, 0, 0
+ };
+ 
+@@ -1999,33 +2005,68 @@ static const uint16_t UNWIF_compat_00_ff [256] = {
+ /*   ff20 */  TBL(1)|24, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31,
+ /*   ff28 */  TBL(1)|32, TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36, TBL(1)|37, TBL(1)|38, TBL(1)|39,
+ /*   ff30 */  TBL(1)|40, TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47,
+-/*   ff38 */  TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|51, TBL(1)|60, TBL(1)|1632, TBL(1)|1633, TBL(1)|1634,
+-/*   ff40 */  TBL(1)|1635, TBL(1)|1636, TBL(1)|1637, TBL(1)|1638, TBL(1)|1639, TBL(1)|1640, TBL(1)|1641, TBL(1)|1642,
+-/*   ff48 */  TBL(1)|1643, TBL(1)|1644, TBL(1)|1645, TBL(1)|1646, TBL(1)|1647, TBL(1)|1648, TBL(1)|1649, TBL(1)|1650,
+-/*   ff50 */  TBL(1)|1651, TBL(1)|1652, TBL(1)|1653, TBL(1)|1654, TBL(1)|1655, TBL(1)|1656, TBL(1)|1657, TBL(1)|1658,
+-/*   ff58 */  TBL(1)|1659, TBL(1)|1660, TBL(1)|1661, TBL(1)|1662, TBL(1)|1663, TBL(1)|1664, TBL(1)|1665, TBL(1)|483,
+-/*   ff60 */  TBL(1)|484, TBL(1)|494, TBL(1)|499, TBL(1)|500, TBL(1)|493, TBL(1)|569, TBL(1)|567, TBL(1)|512,
+-/*   ff68 */  TBL(1)|514, TBL(1)|516, TBL(1)|518, TBL(1)|520, TBL(1)|553, TBL(1)|555, TBL(1)|557, TBL(1)|534,
+-/*   ff70 */  TBL(1)|570, TBL(1)|513, TBL(1)|515, TBL(1)|517, TBL(1)|519, TBL(1)|521, TBL(1)|522, TBL(1)|523,
+-/*   ff78 */  TBL(1)|524, TBL(1)|525, TBL(1)|526, TBL(1)|527, TBL(1)|528, TBL(1)|529, TBL(1)|530, TBL(1)|531,
+-/*   ff80 */  TBL(1)|532, TBL(1)|533, TBL(1)|535, TBL(1)|536, TBL(1)|537, TBL(1)|538, TBL(1)|539, TBL(1)|540,
+-/*   ff88 */  TBL(1)|541, TBL(1)|542, TBL(1)|543, TBL(1)|544, TBL(1)|545, TBL(1)|546, TBL(1)|547, TBL(1)|548,
+-/*   ff90 */  TBL(1)|549, TBL(1)|550, TBL(1)|551, TBL(1)|552, TBL(1)|554, TBL(1)|556, TBL(1)|558, TBL(1)|559,
+-/*   ff98 */  TBL(1)|560, TBL(1)|561, TBL(1)|562, TBL(1)|563, TBL(1)|564, TBL(1)|568, TBL(1)|510, TBL(1)|511,
+-/*   ffa0 */  TBL(1)|307, TBL(1)|263, TBL(1)|264, TBL(1)|337, TBL(1)|265, TBL(1)|338, TBL(1)|339, TBL(1)|266,
+-/*   ffa8 */  TBL(1)|267, TBL(1)|268, TBL(1)|340, TBL(1)|341, TBL(1)|342, TBL(1)|343, TBL(1)|344, TBL(1)|345,
+-/*   ffb0 */  TBL(1)|284, TBL(1)|269, TBL(1)|270, TBL(1)|271, TBL(1)|289, TBL(1)|272, TBL(1)|273, TBL(1)|274,
+-/*   ffb8 */  TBL(1)|275, TBL(1)|276, TBL(1)|277, TBL(1)|278, TBL(1)|279, TBL(1)|280, TBL(1)|281, 0,
+-/*   ffc0 */  0, 0, TBL(1)|308, TBL(1)|309, TBL(1)|310, TBL(1)|311, TBL(1)|312, TBL(1)|313,
+-/*   ffc8 */  0, 0, TBL(1)|314, TBL(1)|315, TBL(1)|316, TBL(1)|317, TBL(1)|318, TBL(1)|319,
+-/*   ffd0 */  0, 0, TBL(1)|320, TBL(1)|321, TBL(1)|322, TBL(1)|323, TBL(1)|324, TBL(1)|325,
+-/*   ffd8 */  0, 0, TBL(1)|326, TBL(1)|327, TBL(1)|328, 0, 0, 0,
+-/*   ffe0 */  TBL(1)|61, TBL(1)|62, TBL(1)|65, TBL(2)|331, TBL(1)|64, TBL(1)|63, TBL(1)|376, 0,
+-/*   ffe8 */  TBL(1)|429, TBL(1)|381, TBL(1)|382, TBL(1)|383, TBL(1)|384, TBL(1)|441, TBL(1)|445, 0,
++/*   ff38 */  TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|51, TBL(1)|60, TBL(1)|1686, TBL(1)|1687, TBL(1)|1688,
++/*   ff40 */  TBL(1)|1689, TBL(1)|1690, TBL(1)|1691, TBL(1)|1692, TBL(1)|1693, TBL(1)|1694, TBL(1)|1695, TBL(1)|1696,
++/*   ff48 */  TBL(1)|1697, TBL(1)|1698, TBL(1)|1699, TBL(1)|1700, TBL(1)|1701, TBL(1)|1702, TBL(1)|1703, TBL(1)|1704,
++/*   ff50 */  TBL(1)|1705, TBL(1)|1706, TBL(1)|1707, TBL(1)|1708, TBL(1)|1709, TBL(1)|1710, TBL(1)|1711, TBL(1)|1712,
++/*   ff58 */  TBL(1)|1713, TBL(1)|1714, TBL(1)|1715, TBL(1)|1716, TBL(1)|1717, TBL(1)|1718, TBL(1)|1719, TBL(1)|533,
++/*   ff60 */  TBL(1)|534, TBL(1)|545, TBL(1)|550, TBL(1)|551, TBL(1)|544, TBL(1)|620, TBL(1)|618, TBL(1)|563,
++/*   ff68 */  TBL(1)|565, TBL(1)|567, TBL(1)|569, TBL(1)|571, TBL(1)|604, TBL(1)|606, TBL(1)|608, TBL(1)|585,
++/*   ff70 */  TBL(1)|621, TBL(1)|564, TBL(1)|566, TBL(1)|568, TBL(1)|570, TBL(1)|572, TBL(1)|573, TBL(1)|574,
++/*   ff78 */  TBL(1)|575, TBL(1)|576, TBL(1)|577, TBL(1)|578, TBL(1)|579, TBL(1)|580, TBL(1)|581, TBL(1)|582,
++/*   ff80 */  TBL(1)|583, TBL(1)|584, TBL(1)|586, TBL(1)|587, TBL(1)|588, TBL(1)|589, TBL(1)|590, TBL(1)|591,
++/*   ff88 */  TBL(1)|592, TBL(1)|593, TBL(1)|594, TBL(1)|595, TBL(1)|596, TBL(1)|597, TBL(1)|598, TBL(1)|599,
++/*   ff90 */  TBL(1)|600, TBL(1)|601, TBL(1)|602, TBL(1)|603, TBL(1)|605, TBL(1)|607, TBL(1)|609, TBL(1)|610,
++/*   ff98 */  TBL(1)|611, TBL(1)|612, TBL(1)|613, TBL(1)|614, TBL(1)|615, TBL(1)|619, TBL(1)|561, TBL(1)|562,
++/*   ffa0 */  TBL(1)|350, TBL(1)|306, TBL(1)|307, TBL(1)|380, TBL(1)|308, TBL(1)|381, TBL(1)|382, TBL(1)|309,
++/*   ffa8 */  TBL(1)|310, TBL(1)|311, TBL(1)|383, TBL(1)|384, TBL(1)|385, TBL(1)|386, TBL(1)|387, TBL(1)|388,
++/*   ffb0 */  TBL(1)|327, TBL(1)|312, TBL(1)|313, TBL(1)|314, TBL(1)|332, TBL(1)|315, TBL(1)|316, TBL(1)|317,
++/*   ffb8 */  TBL(1)|318, TBL(1)|319, TBL(1)|320, TBL(1)|321, TBL(1)|322, TBL(1)|323, TBL(1)|324, 0,
++/*   ffc0 */  0, 0, TBL(1)|351, TBL(1)|352, TBL(1)|353, TBL(1)|354, TBL(1)|355, TBL(1)|356,
++/*   ffc8 */  0, 0, TBL(1)|357, TBL(1)|358, TBL(1)|359, TBL(1)|360, TBL(1)|361, TBL(1)|362,
++/*   ffd0 */  0, 0, TBL(1)|363, TBL(1)|364, TBL(1)|365, TBL(1)|366, TBL(1)|367, TBL(1)|368,
++/*   ffd8 */  0, 0, TBL(1)|369, TBL(1)|370, TBL(1)|371, 0, 0, 0,
++/*   ffe0 */  TBL(1)|61, TBL(1)|62, TBL(1)|65, TBL(2)|331, TBL(1)|64, TBL(1)|63, TBL(1)|426, 0,
++/*   ffe8 */  TBL(1)|479, TBL(1)|431, TBL(1)|432, TBL(1)|433, TBL(1)|434, TBL(1)|491, TBL(1)|495, 0,
+ /*   fff0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /*   fff8 */  0, 0, 0, 0, 0, 0, 0, 0
+ };
+ 
++static const uint16_t UNWIF_compat_01_07 [256] = {
++/* 010700 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010708 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010710 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010718 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010720 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010728 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010730 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010738 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010740 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010748 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010750 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010758 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010760 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010768 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010770 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010778 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 010780 */  0, TBL(1)|163, TBL(1)|164, TBL(1)|68, TBL(1)|146, TBL(1)|87, 0, TBL(1)|153,
++/* 010788 */  TBL(1)|1684, TBL(1)|155, TBL(1)|154, TBL(1)|90, TBL(1)|91, TBL(1)|408, TBL(1)|92, TBL(1)|96,
++/* 010790 */  TBL(1)|159, TBL(1)|102, TBL(1)|100, TBL(1)|98, TBL(1)|147, TBL(1)|72, TBL(1)|148, TBL(1)|105,
++/* 010798 */  TBL(1)|132, TBL(1)|160, TBL(1)|161, TBL(1)|110, TBL(1)|409, TBL(1)|1681, TBL(1)|112, TBL(1)|410,
++/* 0107a0 */  TBL(1)|139, TBL(1)|411, TBL(1)|70, TBL(1)|120, TBL(1)|121, TBL(1)|1706, TBL(1)|124, TBL(1)|412,
++/* 0107a8 */  TBL(1)|126, TBL(1)|127, TBL(1)|128, TBL(1)|158, TBL(1)|156, TBL(1)|1685, TBL(1)|157, TBL(1)|133,
++/* 0107b0 */  TBL(1)|542, 0, TBL(1)|140, TBL(1)|151, TBL(1)|152, TBL(1)|145, TBL(1)|79, TBL(1)|80,
++/* 0107b8 */  TBL(1)|81, TBL(1)|413, TBL(1)|414, 0, 0, 0, 0, 0,
++/* 0107c0 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 0107c8 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 0107d0 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 0107d8 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 0107e0 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 0107e8 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 0107f0 */  0, 0, 0, 0, 0, 0, 0, 0,
++/* 0107f8 */  0, 0, 0, 0, 0, 0, 0, 0
++};
++
+ static const uint16_t UNWIF_compat_01_10 [256] = {
+ /* 011000 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 011008 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -2275,134 +2316,134 @@ static const uint16_t UNWIF_compat_01_d4 [256] = {
+ /* 01d400 */  TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32,
+ /* 01d408 */  TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36, TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40,
+ /* 01d410 */  TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48,
+-/* 01d418 */  TBL(1)|49, TBL(1)|50, TBL(1)|1636, TBL(1)|1637, TBL(1)|1638, TBL(1)|1639, TBL(1)|1640, TBL(1)|1641,
+-/* 01d420 */  TBL(1)|1642, TBL(1)|1643, TBL(1)|1644, TBL(1)|1645, TBL(1)|1646, TBL(1)|1647, TBL(1)|1648, TBL(1)|1649,
+-/* 01d428 */  TBL(1)|1650, TBL(1)|1651, TBL(1)|1652, TBL(1)|1653, TBL(1)|1654, TBL(1)|1655, TBL(1)|1656, TBL(1)|1657,
+-/* 01d430 */  TBL(1)|1658, TBL(1)|1659, TBL(1)|1660, TBL(1)|1661, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28,
++/* 01d418 */  TBL(1)|49, TBL(1)|50, TBL(1)|1690, TBL(1)|1691, TBL(1)|1692, TBL(1)|1693, TBL(1)|1694, TBL(1)|1695,
++/* 01d420 */  TBL(1)|1696, TBL(1)|1697, TBL(1)|1698, TBL(1)|1699, TBL(1)|1700, TBL(1)|1701, TBL(1)|1702, TBL(1)|1703,
++/* 01d428 */  TBL(1)|1704, TBL(1)|1705, TBL(1)|1706, TBL(1)|1707, TBL(1)|1708, TBL(1)|1709, TBL(1)|1710, TBL(1)|1711,
++/* 01d430 */  TBL(1)|1712, TBL(1)|1713, TBL(1)|1714, TBL(1)|1715, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28,
+ /* 01d438 */  TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32, TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36,
+ /* 01d440 */  TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40, TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44,
+-/* 01d448 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1636, TBL(1)|1637,
+-/* 01d450 */  TBL(1)|1638, TBL(1)|1639, TBL(1)|1640, TBL(1)|1641, TBL(1)|1642, 0, TBL(1)|1644, TBL(1)|1645,
+-/* 01d458 */  TBL(1)|1646, TBL(1)|1647, TBL(1)|1648, TBL(1)|1649, TBL(1)|1650, TBL(1)|1651, TBL(1)|1652, TBL(1)|1653,
+-/* 01d460 */  TBL(1)|1654, TBL(1)|1655, TBL(1)|1656, TBL(1)|1657, TBL(1)|1658, TBL(1)|1659, TBL(1)|1660, TBL(1)|1661,
++/* 01d448 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1690, TBL(1)|1691,
++/* 01d450 */  TBL(1)|1692, TBL(1)|1693, TBL(1)|1694, TBL(1)|1695, TBL(1)|1696, 0, TBL(1)|1698, TBL(1)|1699,
++/* 01d458 */  TBL(1)|1700, TBL(1)|1701, TBL(1)|1702, TBL(1)|1703, TBL(1)|1704, TBL(1)|1705, TBL(1)|1706, TBL(1)|1707,
++/* 01d460 */  TBL(1)|1708, TBL(1)|1709, TBL(1)|1710, TBL(1)|1711, TBL(1)|1712, TBL(1)|1713, TBL(1)|1714, TBL(1)|1715,
+ /* 01d468 */  TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32,
+ /* 01d470 */  TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36, TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40,
+ /* 01d478 */  TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48,
+-/* 01d480 */  TBL(1)|49, TBL(1)|50, TBL(1)|1636, TBL(1)|1637, TBL(1)|1638, TBL(1)|1639, TBL(1)|1640, TBL(1)|1641,
+-/* 01d488 */  TBL(1)|1642, TBL(1)|1643, TBL(1)|1644, TBL(1)|1645, TBL(1)|1646, TBL(1)|1647, TBL(1)|1648, TBL(1)|1649,
+-/* 01d490 */  TBL(1)|1650, TBL(1)|1651, TBL(1)|1652, TBL(1)|1653, TBL(1)|1654, TBL(1)|1655, TBL(1)|1656, TBL(1)|1657,
+-/* 01d498 */  TBL(1)|1658, TBL(1)|1659, TBL(1)|1660, TBL(1)|1661, TBL(1)|25, 0, TBL(1)|27, TBL(1)|28,
++/* 01d480 */  TBL(1)|49, TBL(1)|50, TBL(1)|1690, TBL(1)|1691, TBL(1)|1692, TBL(1)|1693, TBL(1)|1694, TBL(1)|1695,
++/* 01d488 */  TBL(1)|1696, TBL(1)|1697, TBL(1)|1698, TBL(1)|1699, TBL(1)|1700, TBL(1)|1701, TBL(1)|1702, TBL(1)|1703,
++/* 01d490 */  TBL(1)|1704, TBL(1)|1705, TBL(1)|1706, TBL(1)|1707, TBL(1)|1708, TBL(1)|1709, TBL(1)|1710, TBL(1)|1711,
++/* 01d498 */  TBL(1)|1712, TBL(1)|1713, TBL(1)|1714, TBL(1)|1715, TBL(1)|25, 0, TBL(1)|27, TBL(1)|28,
+ /* 01d4a0 */  0, 0, TBL(1)|31, 0, 0, TBL(1)|34, TBL(1)|35, 0,
+ /* 01d4a8 */  0, TBL(1)|38, TBL(1)|39, TBL(1)|40, TBL(1)|41, 0, TBL(1)|43, TBL(1)|44,
+-/* 01d4b0 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1636, TBL(1)|1637,
+-/* 01d4b8 */  TBL(1)|1638, TBL(1)|1639, 0, TBL(1)|1641, 0, TBL(1)|1643, TBL(1)|1644, TBL(1)|1645,
+-/* 01d4c0 */  TBL(1)|1646, TBL(1)|1647, TBL(1)|1648, TBL(1)|1649, 0, TBL(1)|1651, TBL(1)|1652, TBL(1)|1653,
+-/* 01d4c8 */  TBL(1)|1654, TBL(1)|1655, TBL(1)|1656, TBL(1)|1657, TBL(1)|1658, TBL(1)|1659, TBL(1)|1660, TBL(1)|1661,
++/* 01d4b0 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1690, TBL(1)|1691,
++/* 01d4b8 */  TBL(1)|1692, TBL(1)|1693, 0, TBL(1)|1695, 0, TBL(1)|1697, TBL(1)|1698, TBL(1)|1699,
++/* 01d4c0 */  TBL(1)|1700, TBL(1)|1701, TBL(1)|1702, TBL(1)|1703, 0, TBL(1)|1705, TBL(1)|1706, TBL(1)|1707,
++/* 01d4c8 */  TBL(1)|1708, TBL(1)|1709, TBL(1)|1710, TBL(1)|1711, TBL(1)|1712, TBL(1)|1713, TBL(1)|1714, TBL(1)|1715,
+ /* 01d4d0 */  TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32,
+ /* 01d4d8 */  TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36, TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40,
+ /* 01d4e0 */  TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48,
+-/* 01d4e8 */  TBL(1)|49, TBL(1)|50, TBL(1)|1636, TBL(1)|1637, TBL(1)|1638, TBL(1)|1639, TBL(1)|1640, TBL(1)|1641,
+-/* 01d4f0 */  TBL(1)|1642, TBL(1)|1643, TBL(1)|1644, TBL(1)|1645, TBL(1)|1646, TBL(1)|1647, TBL(1)|1648, TBL(1)|1649,
+-/* 01d4f8 */  TBL(1)|1650, TBL(1)|1651, TBL(1)|1652, TBL(1)|1653, TBL(1)|1654, TBL(1)|1655, TBL(1)|1656, TBL(1)|1657
++/* 01d4e8 */  TBL(1)|49, TBL(1)|50, TBL(1)|1690, TBL(1)|1691, TBL(1)|1692, TBL(1)|1693, TBL(1)|1694, TBL(1)|1695,
++/* 01d4f0 */  TBL(1)|1696, TBL(1)|1697, TBL(1)|1698, TBL(1)|1699, TBL(1)|1700, TBL(1)|1701, TBL(1)|1702, TBL(1)|1703,
++/* 01d4f8 */  TBL(1)|1704, TBL(1)|1705, TBL(1)|1706, TBL(1)|1707, TBL(1)|1708, TBL(1)|1709, TBL(1)|1710, TBL(1)|1711
+ };
+ 
+ static const uint16_t UNWIF_compat_01_d5 [256] = {
+-/* 01d500 */  TBL(1)|1658, TBL(1)|1659, TBL(1)|1660, TBL(1)|1661, TBL(1)|25, TBL(1)|26, 0, TBL(1)|28,
++/* 01d500 */  TBL(1)|1712, TBL(1)|1713, TBL(1)|1714, TBL(1)|1715, TBL(1)|25, TBL(1)|26, 0, TBL(1)|28,
+ /* 01d508 */  TBL(1)|29, TBL(1)|30, TBL(1)|31, 0, 0, TBL(1)|34, TBL(1)|35, TBL(1)|36,
+ /* 01d510 */  TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40, TBL(1)|41, 0, TBL(1)|43, TBL(1)|44,
+-/* 01d518 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, 0, TBL(1)|1636, TBL(1)|1637,
+-/* 01d520 */  TBL(1)|1638, TBL(1)|1639, TBL(1)|1640, TBL(1)|1641, TBL(1)|1642, TBL(1)|1643, TBL(1)|1644, TBL(1)|1645,
+-/* 01d528 */  TBL(1)|1646, TBL(1)|1647, TBL(1)|1648, TBL(1)|1649, TBL(1)|1650, TBL(1)|1651, TBL(1)|1652, TBL(1)|1653,
+-/* 01d530 */  TBL(1)|1654, TBL(1)|1655, TBL(1)|1656, TBL(1)|1657, TBL(1)|1658, TBL(1)|1659, TBL(1)|1660, TBL(1)|1661,
++/* 01d518 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, 0, TBL(1)|1690, TBL(1)|1691,
++/* 01d520 */  TBL(1)|1692, TBL(1)|1693, TBL(1)|1694, TBL(1)|1695, TBL(1)|1696, TBL(1)|1697, TBL(1)|1698, TBL(1)|1699,
++/* 01d528 */  TBL(1)|1700, TBL(1)|1701, TBL(1)|1702, TBL(1)|1703, TBL(1)|1704, TBL(1)|1705, TBL(1)|1706, TBL(1)|1707,
++/* 01d530 */  TBL(1)|1708, TBL(1)|1709, TBL(1)|1710, TBL(1)|1711, TBL(1)|1712, TBL(1)|1713, TBL(1)|1714, TBL(1)|1715,
+ /* 01d538 */  TBL(1)|25, TBL(1)|26, 0, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31, 0,
+ /* 01d540 */  TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36, TBL(1)|37, 0, TBL(1)|39, 0,
+ /* 01d548 */  0, 0, TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48,
+-/* 01d550 */  TBL(1)|49, 0, TBL(1)|1636, TBL(1)|1637, TBL(1)|1638, TBL(1)|1639, TBL(1)|1640, TBL(1)|1641,
+-/* 01d558 */  TBL(1)|1642, TBL(1)|1643, TBL(1)|1644, TBL(1)|1645, TBL(1)|1646, TBL(1)|1647, TBL(1)|1648, TBL(1)|1649,
+-/* 01d560 */  TBL(1)|1650, TBL(1)|1651, TBL(1)|1652, TBL(1)|1653, TBL(1)|1654, TBL(1)|1655, TBL(1)|1656, TBL(1)|1657,
+-/* 01d568 */  TBL(1)|1658, TBL(1)|1659, TBL(1)|1660, TBL(1)|1661, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28,
++/* 01d550 */  TBL(1)|49, 0, TBL(1)|1690, TBL(1)|1691, TBL(1)|1692, TBL(1)|1693, TBL(1)|1694, TBL(1)|1695,
++/* 01d558 */  TBL(1)|1696, TBL(1)|1697, TBL(1)|1698, TBL(1)|1699, TBL(1)|1700, TBL(1)|1701, TBL(1)|1702, TBL(1)|1703,
++/* 01d560 */  TBL(1)|1704, TBL(1)|1705, TBL(1)|1706, TBL(1)|1707, TBL(1)|1708, TBL(1)|1709, TBL(1)|1710, TBL(1)|1711,
++/* 01d568 */  TBL(1)|1712, TBL(1)|1713, TBL(1)|1714, TBL(1)|1715, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28,
+ /* 01d570 */  TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32, TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36,
+ /* 01d578 */  TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40, TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44,
+-/* 01d580 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1636, TBL(1)|1637,
+-/* 01d588 */  TBL(1)|1638, TBL(1)|1639, TBL(1)|1640, TBL(1)|1641, TBL(1)|1642, TBL(1)|1643, TBL(1)|1644, TBL(1)|1645,
+-/* 01d590 */  TBL(1)|1646, TBL(1)|1647, TBL(1)|1648, TBL(1)|1649, TBL(1)|1650, TBL(1)|1651, TBL(1)|1652, TBL(1)|1653,
+-/* 01d598 */  TBL(1)|1654, TBL(1)|1655, TBL(1)|1656, TBL(1)|1657, TBL(1)|1658, TBL(1)|1659, TBL(1)|1660, TBL(1)|1661,
++/* 01d580 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1690, TBL(1)|1691,
++/* 01d588 */  TBL(1)|1692, TBL(1)|1693, TBL(1)|1694, TBL(1)|1695, TBL(1)|1696, TBL(1)|1697, TBL(1)|1698, TBL(1)|1699,
++/* 01d590 */  TBL(1)|1700, TBL(1)|1701, TBL(1)|1702, TBL(1)|1703, TBL(1)|1704, TBL(1)|1705, TBL(1)|1706, TBL(1)|1707,
++/* 01d598 */  TBL(1)|1708, TBL(1)|1709, TBL(1)|1710, TBL(1)|1711, TBL(1)|1712, TBL(1)|1713, TBL(1)|1714, TBL(1)|1715,
+ /* 01d5a0 */  TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32,
+ /* 01d5a8 */  TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36, TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40,
+ /* 01d5b0 */  TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48,
+-/* 01d5b8 */  TBL(1)|49, TBL(1)|50, TBL(1)|1636, TBL(1)|1637, TBL(1)|1638, TBL(1)|1639, TBL(1)|1640, TBL(1)|1641,
+-/* 01d5c0 */  TBL(1)|1642, TBL(1)|1643, TBL(1)|1644, TBL(1)|1645, TBL(1)|1646, TBL(1)|1647, TBL(1)|1648, TBL(1)|1649,
+-/* 01d5c8 */  TBL(1)|1650, TBL(1)|1651, TBL(1)|1652, TBL(1)|1653, TBL(1)|1654, TBL(1)|1655, TBL(1)|1656, TBL(1)|1657,
+-/* 01d5d0 */  TBL(1)|1658, TBL(1)|1659, TBL(1)|1660, TBL(1)|1661, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28,
++/* 01d5b8 */  TBL(1)|49, TBL(1)|50, TBL(1)|1690, TBL(1)|1691, TBL(1)|1692, TBL(1)|1693, TBL(1)|1694, TBL(1)|1695,
++/* 01d5c0 */  TBL(1)|1696, TBL(1)|1697, TBL(1)|1698, TBL(1)|1699, TBL(1)|1700, TBL(1)|1701, TBL(1)|1702, TBL(1)|1703,
++/* 01d5c8 */  TBL(1)|1704, TBL(1)|1705, TBL(1)|1706, TBL(1)|1707, TBL(1)|1708, TBL(1)|1709, TBL(1)|1710, TBL(1)|1711,
++/* 01d5d0 */  TBL(1)|1712, TBL(1)|1713, TBL(1)|1714, TBL(1)|1715, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28,
+ /* 01d5d8 */  TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32, TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36,
+ /* 01d5e0 */  TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40, TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44,
+-/* 01d5e8 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1636, TBL(1)|1637,
+-/* 01d5f0 */  TBL(1)|1638, TBL(1)|1639, TBL(1)|1640, TBL(1)|1641, TBL(1)|1642, TBL(1)|1643, TBL(1)|1644, TBL(1)|1645,
+-/* 01d5f8 */  TBL(1)|1646, TBL(1)|1647, TBL(1)|1648, TBL(1)|1649, TBL(1)|1650, TBL(1)|1651, TBL(1)|1652, TBL(1)|1653
++/* 01d5e8 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1690, TBL(1)|1691,
++/* 01d5f0 */  TBL(1)|1692, TBL(1)|1693, TBL(1)|1694, TBL(1)|1695, TBL(1)|1696, TBL(1)|1697, TBL(1)|1698, TBL(1)|1699,
++/* 01d5f8 */  TBL(1)|1700, TBL(1)|1701, TBL(1)|1702, TBL(1)|1703, TBL(1)|1704, TBL(1)|1705, TBL(1)|1706, TBL(1)|1707
+ };
+ 
+ static const uint16_t UNWIF_compat_01_d6 [256] = {
+-/* 01d600 */  TBL(1)|1654, TBL(1)|1655, TBL(1)|1656, TBL(1)|1657, TBL(1)|1658, TBL(1)|1659, TBL(1)|1660, TBL(1)|1661,
++/* 01d600 */  TBL(1)|1708, TBL(1)|1709, TBL(1)|1710, TBL(1)|1711, TBL(1)|1712, TBL(1)|1713, TBL(1)|1714, TBL(1)|1715,
+ /* 01d608 */  TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32,
+ /* 01d610 */  TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36, TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40,
+ /* 01d618 */  TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48,
+-/* 01d620 */  TBL(1)|49, TBL(1)|50, TBL(1)|1636, TBL(1)|1637, TBL(1)|1638, TBL(1)|1639, TBL(1)|1640, TBL(1)|1641,
+-/* 01d628 */  TBL(1)|1642, TBL(1)|1643, TBL(1)|1644, TBL(1)|1645, TBL(1)|1646, TBL(1)|1647, TBL(1)|1648, TBL(1)|1649,
+-/* 01d630 */  TBL(1)|1650, TBL(1)|1651, TBL(1)|1652, TBL(1)|1653, TBL(1)|1654, TBL(1)|1655, TBL(1)|1656, TBL(1)|1657,
+-/* 01d638 */  TBL(1)|1658, TBL(1)|1659, TBL(1)|1660, TBL(1)|1661, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28,
++/* 01d620 */  TBL(1)|49, TBL(1)|50, TBL(1)|1690, TBL(1)|1691, TBL(1)|1692, TBL(1)|1693, TBL(1)|1694, TBL(1)|1695,
++/* 01d628 */  TBL(1)|1696, TBL(1)|1697, TBL(1)|1698, TBL(1)|1699, TBL(1)|1700, TBL(1)|1701, TBL(1)|1702, TBL(1)|1703,
++/* 01d630 */  TBL(1)|1704, TBL(1)|1705, TBL(1)|1706, TBL(1)|1707, TBL(1)|1708, TBL(1)|1709, TBL(1)|1710, TBL(1)|1711,
++/* 01d638 */  TBL(1)|1712, TBL(1)|1713, TBL(1)|1714, TBL(1)|1715, TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28,
+ /* 01d640 */  TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32, TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36,
+ /* 01d648 */  TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40, TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44,
+-/* 01d650 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1636, TBL(1)|1637,
+-/* 01d658 */  TBL(1)|1638, TBL(1)|1639, TBL(1)|1640, TBL(1)|1641, TBL(1)|1642, TBL(1)|1643, TBL(1)|1644, TBL(1)|1645,
+-/* 01d660 */  TBL(1)|1646, TBL(1)|1647, TBL(1)|1648, TBL(1)|1649, TBL(1)|1650, TBL(1)|1651, TBL(1)|1652, TBL(1)|1653,
+-/* 01d668 */  TBL(1)|1654, TBL(1)|1655, TBL(1)|1656, TBL(1)|1657, TBL(1)|1658, TBL(1)|1659, TBL(1)|1660, TBL(1)|1661,
++/* 01d650 */  TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48, TBL(1)|49, TBL(1)|50, TBL(1)|1690, TBL(1)|1691,
++/* 01d658 */  TBL(1)|1692, TBL(1)|1693, TBL(1)|1694, TBL(1)|1695, TBL(1)|1696, TBL(1)|1697, TBL(1)|1698, TBL(1)|1699,
++/* 01d660 */  TBL(1)|1700, TBL(1)|1701, TBL(1)|1702, TBL(1)|1703, TBL(1)|1704, TBL(1)|1705, TBL(1)|1706, TBL(1)|1707,
++/* 01d668 */  TBL(1)|1708, TBL(1)|1709, TBL(1)|1710, TBL(1)|1711, TBL(1)|1712, TBL(1)|1713, TBL(1)|1714, TBL(1)|1715,
+ /* 01d670 */  TBL(1)|25, TBL(1)|26, TBL(1)|27, TBL(1)|28, TBL(1)|29, TBL(1)|30, TBL(1)|31, TBL(1)|32,
+ /* 01d678 */  TBL(1)|33, TBL(1)|34, TBL(1)|35, TBL(1)|36, TBL(1)|37, TBL(1)|38, TBL(1)|39, TBL(1)|40,
+ /* 01d680 */  TBL(1)|41, TBL(1)|42, TBL(1)|43, TBL(1)|44, TBL(1)|45, TBL(1)|46, TBL(1)|47, TBL(1)|48,
+-/* 01d688 */  TBL(1)|49, TBL(1)|50, TBL(1)|1636, TBL(1)|1637, TBL(1)|1638, TBL(1)|1639, TBL(1)|1640, TBL(1)|1641,
+-/* 01d690 */  TBL(1)|1642, TBL(1)|1643, TBL(1)|1644, TBL(1)|1645, TBL(1)|1646, TBL(1)|1647, TBL(1)|1648, TBL(1)|1649,
+-/* 01d698 */  TBL(1)|1650, TBL(1)|1651, TBL(1)|1652, TBL(1)|1653, TBL(1)|1654, TBL(1)|1655, TBL(1)|1656, TBL(1)|1657,
+-/* 01d6a0 */  TBL(1)|1658, TBL(1)|1659, TBL(1)|1660, TBL(1)|1661, TBL(1)|71, TBL(1)|78, 0, 0,
+-/* 01d6a8 */  TBL(1)|125, TBL(1)|126, TBL(1)|127, TBL(1)|128, TBL(1)|129, TBL(1)|130, TBL(1)|131, TBL(1)|132,
+-/* 01d6b0 */  TBL(1)|133, TBL(1)|134, TBL(1)|135, TBL(1)|136, TBL(1)|137, TBL(1)|138, TBL(1)|139, TBL(1)|140,
+-/* 01d6b8 */  TBL(1)|141, TBL(1)|132, TBL(1)|142, TBL(1)|143, TBL(1)|144, TBL(1)|145, TBL(1)|146, TBL(1)|147,
+-/* 01d6c0 */  TBL(1)|148, TBL(1)|391, TBL(1)|149, TBL(1)|150, TBL(1)|151, TBL(1)|152, TBL(1)|153, TBL(1)|154,
+-/* 01d6c8 */  TBL(1)|155, TBL(1)|156, TBL(1)|157, TBL(1)|158, TBL(1)|159, TBL(1)|160, TBL(1)|161, TBL(1)|162,
+-/* 01d6d0 */  TBL(1)|163, TBL(1)|164, TBL(1)|165, TBL(1)|166, TBL(1)|167, TBL(1)|168, TBL(1)|169, TBL(1)|170,
+-/* 01d6d8 */  TBL(1)|171, TBL(1)|172, TBL(1)|173, TBL(1)|390, TBL(1)|153, TBL(1)|156, TBL(1)|158, TBL(1)|170,
+-/* 01d6e0 */  TBL(1)|165, TBL(1)|164, TBL(1)|125, TBL(1)|126, TBL(1)|127, TBL(1)|128, TBL(1)|129, TBL(1)|130,
+-/* 01d6e8 */  TBL(1)|131, TBL(1)|132, TBL(1)|133, TBL(1)|134, TBL(1)|135, TBL(1)|136, TBL(1)|137, TBL(1)|138,
+-/* 01d6f0 */  TBL(1)|139, TBL(1)|140, TBL(1)|141, TBL(1)|132, TBL(1)|142, TBL(1)|143, TBL(1)|144, TBL(1)|145,
+-/* 01d6f8 */  TBL(1)|146, TBL(1)|147, TBL(1)|148, TBL(1)|391, TBL(1)|149, TBL(1)|150, TBL(1)|151, TBL(1)|152
++/* 01d688 */  TBL(1)|49, TBL(1)|50, TBL(1)|1690, TBL(1)|1691, TBL(1)|1692, TBL(1)|1693, TBL(1)|1694, TBL(1)|1695,
++/* 01d690 */  TBL(1)|1696, TBL(1)|1697, TBL(1)|1698, TBL(1)|1699, TBL(1)|1700, TBL(1)|1701, TBL(1)|1702, TBL(1)|1703,
++/* 01d698 */  TBL(1)|1704, TBL(1)|1705, TBL(1)|1706, TBL(1)|1707, TBL(1)|1708, TBL(1)|1709, TBL(1)|1710, TBL(1)|1711,
++/* 01d6a0 */  TBL(1)|1712, TBL(1)|1713, TBL(1)|1714, TBL(1)|1715, TBL(1)|73, TBL(1)|83, 0, 0,
++/* 01d6a8 */  TBL(1)|168, TBL(1)|169, TBL(1)|170, TBL(1)|171, TBL(1)|172, TBL(1)|173, TBL(1)|174, TBL(1)|175,
++/* 01d6b0 */  TBL(1)|176, TBL(1)|177, TBL(1)|178, TBL(1)|179, TBL(1)|180, TBL(1)|181, TBL(1)|182, TBL(1)|183,
++/* 01d6b8 */  TBL(1)|184, TBL(1)|175, TBL(1)|185, TBL(1)|186, TBL(1)|187, TBL(1)|188, TBL(1)|189, TBL(1)|190,
++/* 01d6c0 */  TBL(1)|191, TBL(1)|441, TBL(1)|192, TBL(1)|193, TBL(1)|194, TBL(1)|195, TBL(1)|196, TBL(1)|197,
++/* 01d6c8 */  TBL(1)|198, TBL(1)|199, TBL(1)|200, TBL(1)|201, TBL(1)|202, TBL(1)|203, TBL(1)|204, TBL(1)|205,
++/* 01d6d0 */  TBL(1)|206, TBL(1)|207, TBL(1)|208, TBL(1)|209, TBL(1)|210, TBL(1)|211, TBL(1)|212, TBL(1)|213,
++/* 01d6d8 */  TBL(1)|214, TBL(1)|215, TBL(1)|216, TBL(1)|440, TBL(1)|196, TBL(1)|199, TBL(1)|201, TBL(1)|213,
++/* 01d6e0 */  TBL(1)|208, TBL(1)|207, TBL(1)|168, TBL(1)|169, TBL(1)|170, TBL(1)|171, TBL(1)|172, TBL(1)|173,
++/* 01d6e8 */  TBL(1)|174, TBL(1)|175, TBL(1)|176, TBL(1)|177, TBL(1)|178, TBL(1)|179, TBL(1)|180, TBL(1)|181,
++/* 01d6f0 */  TBL(1)|182, TBL(1)|183, TBL(1)|184, TBL(1)|175, TBL(1)|185, TBL(1)|186, TBL(1)|187, TBL(1)|188,
++/* 01d6f8 */  TBL(1)|189, TBL(1)|190, TBL(1)|191, TBL(1)|441, TBL(1)|192, TBL(1)|193, TBL(1)|194, TBL(1)|195
+ };
+ 
+ static const uint16_t UNWIF_compat_01_d7 [256] = {
+-/* 01d700 */  TBL(1)|153, TBL(1)|154, TBL(1)|155, TBL(1)|156, TBL(1)|157, TBL(1)|158, TBL(1)|159, TBL(1)|160,
+-/* 01d708 */  TBL(1)|161, TBL(1)|162, TBL(1)|163, TBL(1)|164, TBL(1)|165, TBL(1)|166, TBL(1)|167, TBL(1)|168,
+-/* 01d710 */  TBL(1)|169, TBL(1)|170, TBL(1)|171, TBL(1)|172, TBL(1)|173, TBL(1)|390, TBL(1)|153, TBL(1)|156,
+-/* 01d718 */  TBL(1)|158, TBL(1)|170, TBL(1)|165, TBL(1)|164, TBL(1)|125, TBL(1)|126, TBL(1)|127, TBL(1)|128,
+-/* 01d720 */  TBL(1)|129, TBL(1)|130, TBL(1)|131, TBL(1)|132, TBL(1)|133, TBL(1)|134, TBL(1)|135, TBL(1)|136,
+-/* 01d728 */  TBL(1)|137, TBL(1)|138, TBL(1)|139, TBL(1)|140, TBL(1)|141, TBL(1)|132, TBL(1)|142, TBL(1)|143,
+-/* 01d730 */  TBL(1)|144, TBL(1)|145, TBL(1)|146, TBL(1)|147, TBL(1)|148, TBL(1)|391, TBL(1)|149, TBL(1)|150,
+-/* 01d738 */  TBL(1)|151, TBL(1)|152, TBL(1)|153, TBL(1)|154, TBL(1)|155, TBL(1)|156, TBL(1)|157, TBL(1)|158,
+-/* 01d740 */  TBL(1)|159, TBL(1)|160, TBL(1)|161, TBL(1)|162, TBL(1)|163, TBL(1)|164, TBL(1)|165, TBL(1)|166,
+-/* 01d748 */  TBL(1)|167, TBL(1)|168, TBL(1)|169, TBL(1)|170, TBL(1)|171, TBL(1)|172, TBL(1)|173, TBL(1)|390,
+-/* 01d750 */  TBL(1)|153, TBL(1)|156, TBL(1)|158, TBL(1)|170, TBL(1)|165, TBL(1)|164, TBL(1)|125, TBL(1)|126,
+-/* 01d758 */  TBL(1)|127, TBL(1)|128, TBL(1)|129, TBL(1)|130, TBL(1)|131, TBL(1)|132, TBL(1)|133, TBL(1)|134,
+-/* 01d760 */  TBL(1)|135, TBL(1)|136, TBL(1)|137, TBL(1)|138, TBL(1)|139, TBL(1)|140, TBL(1)|141, TBL(1)|132,
+-/* 01d768 */  TBL(1)|142, TBL(1)|143, TBL(1)|144, TBL(1)|145, TBL(1)|146, TBL(1)|147, TBL(1)|148, TBL(1)|391,
+-/* 01d770 */  TBL(1)|149, TBL(1)|150, TBL(1)|151, TBL(1)|152, TBL(1)|153, TBL(1)|154, TBL(1)|155, TBL(1)|156,
+-/* 01d778 */  TBL(1)|157, TBL(1)|158, TBL(1)|159, TBL(1)|160, TBL(1)|161, TBL(1)|162, TBL(1)|163, TBL(1)|164,
+-/* 01d780 */  TBL(1)|165, TBL(1)|166, TBL(1)|167, TBL(1)|168, TBL(1)|169, TBL(1)|170, TBL(1)|171, TBL(1)|172,
+-/* 01d788 */  TBL(1)|173, TBL(1)|390, TBL(1)|153, TBL(1)|156, TBL(1)|158, TBL(1)|170, TBL(1)|165, TBL(1)|164,
+-/* 01d790 */  TBL(1)|125, TBL(1)|126, TBL(1)|127, TBL(1)|128, TBL(1)|129, TBL(1)|130, TBL(1)|131, TBL(1)|132,
+-/* 01d798 */  TBL(1)|133, TBL(1)|134, TBL(1)|135, TBL(1)|136, TBL(1)|137, TBL(1)|138, TBL(1)|139, TBL(1)|140,
+-/* 01d7a0 */  TBL(1)|141, TBL(1)|132, TBL(1)|142, TBL(1)|143, TBL(1)|144, TBL(1)|145, TBL(1)|146, TBL(1)|147,
+-/* 01d7a8 */  TBL(1)|148, TBL(1)|391, TBL(1)|149, TBL(1)|150, TBL(1)|151, TBL(1)|152, TBL(1)|153, TBL(1)|154,
+-/* 01d7b0 */  TBL(1)|155, TBL(1)|156, TBL(1)|157, TBL(1)|158, TBL(1)|159, TBL(1)|160, TBL(1)|161, TBL(1)|162,
+-/* 01d7b8 */  TBL(1)|163, TBL(1)|164, TBL(1)|165, TBL(1)|166, TBL(1)|167, TBL(1)|168, TBL(1)|169, TBL(1)|170,
+-/* 01d7c0 */  TBL(1)|171, TBL(1)|172, TBL(1)|173, TBL(1)|390, TBL(1)|153, TBL(1)|156, TBL(1)|158, TBL(1)|170,
+-/* 01d7c8 */  TBL(1)|165, TBL(1)|164, TBL(1)|174, TBL(1)|175, 0, 0, TBL(1)|8, TBL(1)|9,
++/* 01d700 */  TBL(1)|196, TBL(1)|197, TBL(1)|198, TBL(1)|199, TBL(1)|200, TBL(1)|201, TBL(1)|202, TBL(1)|203,
++/* 01d708 */  TBL(1)|204, TBL(1)|205, TBL(1)|206, TBL(1)|207, TBL(1)|208, TBL(1)|209, TBL(1)|210, TBL(1)|211,
++/* 01d710 */  TBL(1)|212, TBL(1)|213, TBL(1)|214, TBL(1)|215, TBL(1)|216, TBL(1)|440, TBL(1)|196, TBL(1)|199,
++/* 01d718 */  TBL(1)|201, TBL(1)|213, TBL(1)|208, TBL(1)|207, TBL(1)|168, TBL(1)|169, TBL(1)|170, TBL(1)|171,
++/* 01d720 */  TBL(1)|172, TBL(1)|173, TBL(1)|174, TBL(1)|175, TBL(1)|176, TBL(1)|177, TBL(1)|178, TBL(1)|179,
++/* 01d728 */  TBL(1)|180, TBL(1)|181, TBL(1)|182, TBL(1)|183, TBL(1)|184, TBL(1)|175, TBL(1)|185, TBL(1)|186,
++/* 01d730 */  TBL(1)|187, TBL(1)|188, TBL(1)|189, TBL(1)|190, TBL(1)|191, TBL(1)|441, TBL(1)|192, TBL(1)|193,
++/* 01d738 */  TBL(1)|194, TBL(1)|195, TBL(1)|196, TBL(1)|197, TBL(1)|198, TBL(1)|199, TBL(1)|200, TBL(1)|201,
++/* 01d740 */  TBL(1)|202, TBL(1)|203, TBL(1)|204, TBL(1)|205, TBL(1)|206, TBL(1)|207, TBL(1)|208, TBL(1)|209,
++/* 01d748 */  TBL(1)|210, TBL(1)|211, TBL(1)|212, TBL(1)|213, TBL(1)|214, TBL(1)|215, TBL(1)|216, TBL(1)|440,
++/* 01d750 */  TBL(1)|196, TBL(1)|199, TBL(1)|201, TBL(1)|213, TBL(1)|208, TBL(1)|207, TBL(1)|168, TBL(1)|169,
++/* 01d758 */  TBL(1)|170, TBL(1)|171, TBL(1)|172, TBL(1)|173, TBL(1)|174, TBL(1)|175, TBL(1)|176, TBL(1)|177,
++/* 01d760 */  TBL(1)|178, TBL(1)|179, TBL(1)|180, TBL(1)|181, TBL(1)|182, TBL(1)|183, TBL(1)|184, TBL(1)|175,
++/* 01d768 */  TBL(1)|185, TBL(1)|186, TBL(1)|187, TBL(1)|188, TBL(1)|189, TBL(1)|190, TBL(1)|191, TBL(1)|441,
++/* 01d770 */  TBL(1)|192, TBL(1)|193, TBL(1)|194, TBL(1)|195, TBL(1)|196, TBL(1)|197, TBL(1)|198, TBL(1)|199,
++/* 01d778 */  TBL(1)|200, TBL(1)|201, TBL(1)|202, TBL(1)|203, TBL(1)|204, TBL(1)|205, TBL(1)|206, TBL(1)|207,
++/* 01d780 */  TBL(1)|208, TBL(1)|209, TBL(1)|210, TBL(1)|211, TBL(1)|212, TBL(1)|213, TBL(1)|214, TBL(1)|215,
++/* 01d788 */  TBL(1)|216, TBL(1)|440, TBL(1)|196, TBL(1)|199, TBL(1)|201, TBL(1)|213, TBL(1)|208, TBL(1)|207,
++/* 01d790 */  TBL(1)|168, TBL(1)|169, TBL(1)|170, TBL(1)|171, TBL(1)|172, TBL(1)|173, TBL(1)|174, TBL(1)|175,
++/* 01d798 */  TBL(1)|176, TBL(1)|177, TBL(1)|178, TBL(1)|179, TBL(1)|180, TBL(1)|181, TBL(1)|182, TBL(1)|183,
++/* 01d7a0 */  TBL(1)|184, TBL(1)|175, TBL(1)|185, TBL(1)|186, TBL(1)|187, TBL(1)|188, TBL(1)|189, TBL(1)|190,
++/* 01d7a8 */  TBL(1)|191, TBL(1)|441, TBL(1)|192, TBL(1)|193, TBL(1)|194, TBL(1)|195, TBL(1)|196, TBL(1)|197,
++/* 01d7b0 */  TBL(1)|198, TBL(1)|199, TBL(1)|200, TBL(1)|201, TBL(1)|202, TBL(1)|203, TBL(1)|204, TBL(1)|205,
++/* 01d7b8 */  TBL(1)|206, TBL(1)|207, TBL(1)|208, TBL(1)|209, TBL(1)|210, TBL(1)|211, TBL(1)|212, TBL(1)|213,
++/* 01d7c0 */  TBL(1)|214, TBL(1)|215, TBL(1)|216, TBL(1)|440, TBL(1)|196, TBL(1)|199, TBL(1)|201, TBL(1)|213,
++/* 01d7c8 */  TBL(1)|208, TBL(1)|207, TBL(1)|217, TBL(1)|218, 0, 0, TBL(1)|8, TBL(1)|9,
+ /* 01d7d0 */  TBL(1)|10, TBL(1)|11, TBL(1)|12, TBL(1)|13, TBL(1)|14, TBL(1)|15, TBL(1)|16, TBL(1)|17,
+ /* 01d7d8 */  TBL(1)|8, TBL(1)|9, TBL(1)|10, TBL(1)|11, TBL(1)|12, TBL(1)|13, TBL(1)|14, TBL(1)|15,
+ /* 01d7e0 */  TBL(1)|16, TBL(1)|17, TBL(1)|8, TBL(1)|9, TBL(1)|10, TBL(1)|11, TBL(1)|12, TBL(1)|13,
+@@ -2412,30 +2453,30 @@ static const uint16_t UNWIF_compat_01_d7 [256] = {
+ };
+ 
+ static const uint16_t UNWIF_compat_01_ee [256] = {
+-/* 01ee00 */  TBL(1)|191, TBL(1)|192, TBL(1)|196, TBL(1)|199, 0, TBL(1)|218, TBL(1)|202, TBL(1)|197,
+-/* 01ee08 */  TBL(1)|207, TBL(1)|220, TBL(1)|213, TBL(1)|214, TBL(1)|215, TBL(1)|216, TBL(1)|203, TBL(1)|209,
+-/* 01ee10 */  TBL(1)|211, TBL(1)|205, TBL(1)|212, TBL(1)|201, TBL(1)|204, TBL(1)|194, TBL(1)|195, TBL(1)|198,
+-/* 01ee18 */  TBL(1)|200, TBL(1)|206, TBL(1)|208, TBL(1)|210, TBL(1)|221, TBL(1)|248, TBL(1)|240, TBL(1)|222,
+-/* 01ee20 */  0, TBL(1)|192, TBL(1)|196, 0, TBL(1)|217, 0, 0, TBL(1)|197,
+-/* 01ee28 */  0, TBL(1)|220, TBL(1)|213, TBL(1)|214, TBL(1)|215, TBL(1)|216, TBL(1)|203, TBL(1)|209,
+-/* 01ee30 */  TBL(1)|211, TBL(1)|205, TBL(1)|212, 0, TBL(1)|204, TBL(1)|194, TBL(1)|195, TBL(1)|198,
+-/* 01ee38 */  0, TBL(1)|206, 0, TBL(1)|210, 0, 0, 0, 0,
+-/* 01ee40 */  0, 0, TBL(1)|196, 0, 0, 0, 0, TBL(1)|197,
+-/* 01ee48 */  0, TBL(1)|220, 0, TBL(1)|214, 0, TBL(1)|216, TBL(1)|203, TBL(1)|209,
+-/* 01ee50 */  0, TBL(1)|205, TBL(1)|212, 0, TBL(1)|204, 0, 0, TBL(1)|198,
+-/* 01ee58 */  0, TBL(1)|206, 0, TBL(1)|210, 0, TBL(1)|248, 0, TBL(1)|222,
+-/* 01ee60 */  0, TBL(1)|192, TBL(1)|196, 0, TBL(1)|217, 0, 0, TBL(1)|197,
+-/* 01ee68 */  TBL(1)|207, TBL(1)|220, TBL(1)|213, 0, TBL(1)|215, TBL(1)|216, TBL(1)|203, TBL(1)|209,
+-/* 01ee70 */  TBL(1)|211, TBL(1)|205, TBL(1)|212, 0, TBL(1)|204, TBL(1)|194, TBL(1)|195, TBL(1)|198,
+-/* 01ee78 */  0, TBL(1)|206, TBL(1)|208, TBL(1)|210, TBL(1)|221, 0, TBL(1)|240, 0,
+-/* 01ee80 */  TBL(1)|191, TBL(1)|192, TBL(1)|196, TBL(1)|199, TBL(1)|217, TBL(1)|218, TBL(1)|202, TBL(1)|197,
+-/* 01ee88 */  TBL(1)|207, TBL(1)|220, 0, TBL(1)|214, TBL(1)|215, TBL(1)|216, TBL(1)|203, TBL(1)|209,
+-/* 01ee90 */  TBL(1)|211, TBL(1)|205, TBL(1)|212, TBL(1)|201, TBL(1)|204, TBL(1)|194, TBL(1)|195, TBL(1)|198,
+-/* 01ee98 */  TBL(1)|200, TBL(1)|206, TBL(1)|208, TBL(1)|210, 0, 0, 0, 0,
+-/* 01eea0 */  0, TBL(1)|192, TBL(1)|196, TBL(1)|199, 0, TBL(1)|218, TBL(1)|202, TBL(1)|197,
+-/* 01eea8 */  TBL(1)|207, TBL(1)|220, 0, TBL(1)|214, TBL(1)|215, TBL(1)|216, TBL(1)|203, TBL(1)|209,
+-/* 01eeb0 */  TBL(1)|211, TBL(1)|205, TBL(1)|212, TBL(1)|201, TBL(1)|204, TBL(1)|194, TBL(1)|195, TBL(1)|198,
+-/* 01eeb8 */  TBL(1)|200, TBL(1)|206, TBL(1)|208, TBL(1)|210, 0, 0, 0, 0,
++/* 01ee00 */  TBL(1)|234, TBL(1)|235, TBL(1)|239, TBL(1)|242, 0, TBL(1)|261, TBL(1)|245, TBL(1)|240,
++/* 01ee08 */  TBL(1)|250, TBL(1)|263, TBL(1)|256, TBL(1)|257, TBL(1)|258, TBL(1)|259, TBL(1)|246, TBL(1)|252,
++/* 01ee10 */  TBL(1)|254, TBL(1)|248, TBL(1)|255, TBL(1)|244, TBL(1)|247, TBL(1)|237, TBL(1)|238, TBL(1)|241,
++/* 01ee18 */  TBL(1)|243, TBL(1)|249, TBL(1)|251, TBL(1)|253, TBL(1)|264, TBL(1)|291, TBL(1)|283, TBL(1)|265,
++/* 01ee20 */  0, TBL(1)|235, TBL(1)|239, 0, TBL(1)|260, 0, 0, TBL(1)|240,
++/* 01ee28 */  0, TBL(1)|263, TBL(1)|256, TBL(1)|257, TBL(1)|258, TBL(1)|259, TBL(1)|246, TBL(1)|252,
++/* 01ee30 */  TBL(1)|254, TBL(1)|248, TBL(1)|255, 0, TBL(1)|247, TBL(1)|237, TBL(1)|238, TBL(1)|241,
++/* 01ee38 */  0, TBL(1)|249, 0, TBL(1)|253, 0, 0, 0, 0,
++/* 01ee40 */  0, 0, TBL(1)|239, 0, 0, 0, 0, TBL(1)|240,
++/* 01ee48 */  0, TBL(1)|263, 0, TBL(1)|257, 0, TBL(1)|259, TBL(1)|246, TBL(1)|252,
++/* 01ee50 */  0, TBL(1)|248, TBL(1)|255, 0, TBL(1)|247, 0, 0, TBL(1)|241,
++/* 01ee58 */  0, TBL(1)|249, 0, TBL(1)|253, 0, TBL(1)|291, 0, TBL(1)|265,
++/* 01ee60 */  0, TBL(1)|235, TBL(1)|239, 0, TBL(1)|260, 0, 0, TBL(1)|240,
++/* 01ee68 */  TBL(1)|250, TBL(1)|263, TBL(1)|256, 0, TBL(1)|258, TBL(1)|259, TBL(1)|246, TBL(1)|252,
++/* 01ee70 */  TBL(1)|254, TBL(1)|248, TBL(1)|255, 0, TBL(1)|247, TBL(1)|237, TBL(1)|238, TBL(1)|241,
++/* 01ee78 */  0, TBL(1)|249, TBL(1)|251, TBL(1)|253, TBL(1)|264, 0, TBL(1)|283, 0,
++/* 01ee80 */  TBL(1)|234, TBL(1)|235, TBL(1)|239, TBL(1)|242, TBL(1)|260, TBL(1)|261, TBL(1)|245, TBL(1)|240,
++/* 01ee88 */  TBL(1)|250, TBL(1)|263, 0, TBL(1)|257, TBL(1)|258, TBL(1)|259, TBL(1)|246, TBL(1)|252,
++/* 01ee90 */  TBL(1)|254, TBL(1)|248, TBL(1)|255, TBL(1)|244, TBL(1)|247, TBL(1)|237, TBL(1)|238, TBL(1)|241,
++/* 01ee98 */  TBL(1)|243, TBL(1)|249, TBL(1)|251, TBL(1)|253, 0, 0, 0, 0,
++/* 01eea0 */  0, TBL(1)|235, TBL(1)|239, TBL(1)|242, 0, TBL(1)|261, TBL(1)|245, TBL(1)|240,
++/* 01eea8 */  TBL(1)|250, TBL(1)|263, 0, TBL(1)|257, TBL(1)|258, TBL(1)|259, TBL(1)|246, TBL(1)|252,
++/* 01eeb0 */  TBL(1)|254, TBL(1)|248, TBL(1)|255, TBL(1)|244, TBL(1)|247, TBL(1)|237, TBL(1)|238, TBL(1)|241,
++/* 01eeb8 */  TBL(1)|243, TBL(1)|249, TBL(1)|251, TBL(1)|253, 0, 0, 0, 0,
+ /* 01eec0 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 01eec8 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 01eed0 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -2482,17 +2523,17 @@ static const uint16_t UNWIF_compat_01_f1 [256] = {
+ };
+ 
+ static const uint16_t UNWIF_compat_01_f2 [256] = {
+-/* 01f200 */  TBL(2)|893, TBL(2)|905, TBL(1)|527, 0, 0, 0, 0, 0,
++/* 01f200 */  TBL(2)|893, TBL(2)|905, TBL(1)|578, 0, 0, 0, 0, 0,
+ /* 01f208 */  0, 0, 0, 0, 0, 0, 0, 0,
+-/* 01f210 */  TBL(1)|978, TBL(1)|864, TBL(1)|771, TBL(2)|915, TBL(1)|661, TBL(1)|842, TBL(1)|1434, TBL(1)|846,
+-/* 01f218 */  TBL(1)|664, TBL(1)|1028, TBL(1)|1146, TBL(1)|1018, TBL(1)|728, TBL(1)|937, TBL(1)|702, TBL(1)|1020,
+-/* 01f220 */  TBL(1)|723, TBL(1)|1300, TBL(1)|1199, TBL(1)|1457, TBL(1)|835, TBL(1)|785, TBL(1)|1127, TBL(1)|981,
+-/* 01f228 */  TBL(1)|992, TBL(1)|638, TBL(1)|641, TBL(1)|1489, TBL(1)|901, TBL(1)|648, TBL(1)|778, TBL(1)|989,
+-/* 01f230 */  TBL(1)|1467, TBL(1)|979, TBL(1)|1258, TBL(1)|1273, TBL(1)|780, TBL(1)|1119, TBL(1)|1041, TBL(1)|1040,
+-/* 01f238 */  TBL(1)|1204, TBL(1)|729, TBL(1)|804, TBL(1)|1503, 0, 0, 0, 0,
++/* 01f210 */  TBL(1)|1029, TBL(1)|915, TBL(1)|822, TBL(2)|915, TBL(1)|712, TBL(1)|893, TBL(1)|1485, TBL(1)|897,
++/* 01f218 */  TBL(1)|715, TBL(1)|1079, TBL(1)|1197, TBL(1)|1069, TBL(1)|779, TBL(1)|988, TBL(1)|753, TBL(1)|1071,
++/* 01f220 */  TBL(1)|774, TBL(1)|1351, TBL(1)|1250, TBL(1)|1508, TBL(1)|886, TBL(1)|836, TBL(1)|1178, TBL(1)|1032,
++/* 01f228 */  TBL(1)|1043, TBL(1)|689, TBL(1)|692, TBL(1)|1540, TBL(1)|952, TBL(1)|699, TBL(1)|829, TBL(1)|1040,
++/* 01f230 */  TBL(1)|1518, TBL(1)|1030, TBL(1)|1309, TBL(1)|1324, TBL(1)|831, TBL(1)|1170, TBL(1)|1092, TBL(1)|1091,
++/* 01f238 */  TBL(1)|1255, TBL(1)|780, TBL(1)|855, TBL(1)|1554, 0, 0, 0, 0,
+ /* 01f240 */  TBL(3)|520, TBL(3)|514, TBL(3)|515, TBL(3)|517, TBL(3)|521, TBL(3)|518, TBL(3)|522, TBL(3)|516,
+ /* 01f248 */  TBL(3)|519, 0, 0, 0, 0, 0, 0, 0,
+-/* 01f250 */  TBL(1)|938, TBL(1)|776, 0, 0, 0, 0, 0, 0,
++/* 01f250 */  TBL(1)|989, TBL(1)|827, 0, 0, 0, 0, 0, 0,
+ /* 01f258 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 01f260 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 01f268 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -2552,80 +2593,80 @@ static const uint16_t UNWIF_compat_01_fb [256] = {
+ };
+ 
+ static const uint16_t UNWIF_compat_02_f8 [256] = {
+-/* 02f800 */  TBL(1)|653, TBL(1)|651, TBL(1)|655, TBL(1)|366, TBL(1)|672, TBL(1)|676, TBL(1)|677, TBL(1)|679,
+-/* 02f808 */  TBL(1)|681, TBL(1)|682, TBL(1)|685, TBL(1)|683, TBL(1)|571, TBL(1)|372, TBL(1)|690, TBL(1)|691,
+-/* 02f810 */  TBL(1)|692, TBL(1)|699, TBL(1)|369, TBL(1)|572, TBL(1)|694, TBL(1)|702, TBL(1)|371, TBL(1)|706,
+-/* 02f818 */  TBL(1)|708, TBL(1)|668, TBL(1)|710, TBL(1)|711, TBL(1)|478, TBL(1)|718, TBL(1)|720, TBL(1)|574,
+-/* 02f820 */  TBL(1)|726, TBL(1)|727, TBL(1)|729, TBL(1)|730, TBL(1)|575, TBL(1)|736, TBL(1)|737, TBL(1)|740,
+-/* 02f828 */  TBL(1)|743, TBL(1)|744, TBL(1)|745, TBL(1)|747, TBL(1)|755, TBL(1)|756, TBL(1)|758, TBL(1)|762,
+-/* 02f830 */  TBL(1)|764, TBL(1)|765, TBL(1)|765, TBL(1)|765, TBL(1)|375, TBL(1)|1139, TBL(1)|770, TBL(1)|772,
+-/* 02f838 */  TBL(1)|377, TBL(1)|775, TBL(1)|777, TBL(1)|779, TBL(1)|789, TBL(1)|784, TBL(1)|787, TBL(1)|788,
+-/* 02f840 */  TBL(1)|790, TBL(1)|792, TBL(1)|793, TBL(1)|795, TBL(1)|797, TBL(1)|798, TBL(1)|798, TBL(1)|800,
+-/* 02f848 */  TBL(1)|802, TBL(1)|803, TBL(1)|806, TBL(1)|815, TBL(1)|808, TBL(1)|816, TBL(1)|809, TBL(1)|811,
+-/* 02f850 */  TBL(1)|721, TBL(1)|834, TBL(1)|820, TBL(1)|821, TBL(1)|822, TBL(1)|819, TBL(1)|824, TBL(1)|823,
+-/* 02f858 */  TBL(1)|829, TBL(1)|378, TBL(1)|836, TBL(1)|837, TBL(1)|839, TBL(1)|842, TBL(1)|844, TBL(1)|851,
+-/* 02f860 */  TBL(1)|379, TBL(1)|380, TBL(1)|854, TBL(1)|855, TBL(1)|856, TBL(1)|853, TBL(1)|858, TBL(1)|576,
+-/* 02f868 */  TBL(1)|577, TBL(1)|860, TBL(1)|862, TBL(1)|862, TBL(1)|385, TBL(1)|869, TBL(1)|870, TBL(1)|871,
+-/* 02f870 */  TBL(1)|873, TBL(1)|386, TBL(1)|875, TBL(1)|876, TBL(1)|930, TBL(1)|878, TBL(1)|578, TBL(1)|881,
+-/* 02f878 */  TBL(1)|885, TBL(1)|888, TBL(1)|887, TBL(1)|388, TBL(1)|890, TBL(1)|389, TBL(1)|893, TBL(1)|892,
+-/* 02f880 */  TBL(1)|894, TBL(1)|898, TBL(1)|899, TBL(1)|579, TBL(1)|903, TBL(1)|905, TBL(1)|906, TBL(1)|907,
+-/* 02f888 */  TBL(1)|580, TBL(1)|394, TBL(1)|581, TBL(1)|914, TBL(1)|915, TBL(1)|916, TBL(1)|918, TBL(1)|490,
+-/* 02f890 */  TBL(1)|924, TBL(1)|396, TBL(1)|396, TBL(1)|1348, TBL(1)|928, TBL(1)|928, TBL(1)|582, TBL(1)|403,
+-/* 02f898 */  TBL(1)|448, TBL(1)|932, TBL(1)|934, TBL(1)|583, TBL(1)|939, TBL(1)|943, TBL(1)|944, TBL(1)|946,
+-/* 02f8a0 */  TBL(1)|950, TBL(1)|585, TBL(1)|584, TBL(1)|951, TBL(1)|397, TBL(1)|952, TBL(1)|957, TBL(1)|958,
+-/* 02f8a8 */  TBL(1)|959, TBL(1)|958, TBL(1)|962, TBL(1)|963, TBL(1)|967, TBL(1)|965, TBL(1)|966, TBL(1)|968,
+-/* 02f8b0 */  TBL(1)|969, TBL(1)|970, TBL(1)|973, TBL(1)|974, TBL(1)|980, TBL(1)|982, TBL(1)|986, TBL(1)|991,
+-/* 02f8b8 */  TBL(1)|400, TBL(1)|990, TBL(1)|987, TBL(1)|993, TBL(1)|995, TBL(1)|1000, TBL(1)|401, TBL(1)|1002,
+-/* 02f8c0 */  TBL(1)|999, TBL(1)|997, TBL(1)|586, TBL(1)|1004, TBL(1)|1006, TBL(1)|1008, TBL(1)|1005, TBL(1)|587,
+-/* 02f8c8 */  TBL(1)|1012, TBL(1)|1014, TBL(1)|402, TBL(1)|1025, TBL(1)|1038, TBL(1)|1029, TBL(1)|590, TBL(1)|1032,
+-/* 02f8d0 */  TBL(1)|589, TBL(1)|588, TBL(1)|703, TBL(1)|704, TBL(1)|1039, TBL(1)|1033, TBL(1)|1337, TBL(1)|615,
+-/* 02f8d8 */  TBL(1)|1042, TBL(1)|1043, TBL(1)|1044, TBL(1)|1049, TBL(1)|1047, TBL(1)|407, TBL(1)|591, TBL(1)|1054,
+-/* 02f8e0 */  TBL(1)|1051, TBL(1)|1058, TBL(1)|1060, TBL(1)|409, TBL(1)|1061, TBL(1)|1056, TBL(1)|1063, TBL(1)|592,
+-/* 02f8e8 */  TBL(1)|1064, TBL(1)|1065, TBL(1)|1066, TBL(1)|1069, TBL(1)|410, TBL(1)|1071, TBL(1)|593, TBL(1)|1074,
+-/* 02f8f0 */  TBL(1)|411, TBL(1)|1075, TBL(1)|594, TBL(1)|1078, TBL(1)|1081, TBL(1)|1084, TBL(1)|1085, TBL(1)|412,
+-/* 02f8f8 */  TBL(1)|387, TBL(1)|413, TBL(1)|1093, TBL(1)|414, TBL(1)|1096, TBL(1)|1098, TBL(1)|1094, TBL(1)|1101
++/* 02f800 */  TBL(1)|704, TBL(1)|702, TBL(1)|706, TBL(1)|416, TBL(1)|723, TBL(1)|727, TBL(1)|728, TBL(1)|730,
++/* 02f808 */  TBL(1)|732, TBL(1)|733, TBL(1)|736, TBL(1)|734, TBL(1)|622, TBL(1)|422, TBL(1)|741, TBL(1)|742,
++/* 02f810 */  TBL(1)|743, TBL(1)|750, TBL(1)|419, TBL(1)|623, TBL(1)|745, TBL(1)|753, TBL(1)|421, TBL(1)|757,
++/* 02f818 */  TBL(1)|759, TBL(1)|719, TBL(1)|761, TBL(1)|762, TBL(1)|528, TBL(1)|769, TBL(1)|771, TBL(1)|625,
++/* 02f820 */  TBL(1)|777, TBL(1)|778, TBL(1)|780, TBL(1)|781, TBL(1)|626, TBL(1)|787, TBL(1)|788, TBL(1)|791,
++/* 02f828 */  TBL(1)|794, TBL(1)|795, TBL(1)|796, TBL(1)|798, TBL(1)|806, TBL(1)|807, TBL(1)|809, TBL(1)|813,
++/* 02f830 */  TBL(1)|815, TBL(1)|816, TBL(1)|816, TBL(1)|816, TBL(1)|425, TBL(1)|1190, TBL(1)|821, TBL(1)|823,
++/* 02f838 */  TBL(1)|427, TBL(1)|826, TBL(1)|828, TBL(1)|830, TBL(1)|840, TBL(1)|835, TBL(1)|838, TBL(1)|839,
++/* 02f840 */  TBL(1)|841, TBL(1)|843, TBL(1)|844, TBL(1)|846, TBL(1)|848, TBL(1)|849, TBL(1)|849, TBL(1)|851,
++/* 02f848 */  TBL(1)|853, TBL(1)|854, TBL(1)|857, TBL(1)|866, TBL(1)|859, TBL(1)|867, TBL(1)|860, TBL(1)|862,
++/* 02f850 */  TBL(1)|772, TBL(1)|885, TBL(1)|871, TBL(1)|872, TBL(1)|873, TBL(1)|870, TBL(1)|875, TBL(1)|874,
++/* 02f858 */  TBL(1)|880, TBL(1)|428, TBL(1)|887, TBL(1)|888, TBL(1)|890, TBL(1)|893, TBL(1)|895, TBL(1)|902,
++/* 02f860 */  TBL(1)|429, TBL(1)|430, TBL(1)|905, TBL(1)|906, TBL(1)|907, TBL(1)|904, TBL(1)|909, TBL(1)|627,
++/* 02f868 */  TBL(1)|628, TBL(1)|911, TBL(1)|913, TBL(1)|913, TBL(1)|435, TBL(1)|920, TBL(1)|921, TBL(1)|922,
++/* 02f870 */  TBL(1)|924, TBL(1)|436, TBL(1)|926, TBL(1)|927, TBL(1)|981, TBL(1)|929, TBL(1)|629, TBL(1)|932,
++/* 02f878 */  TBL(1)|936, TBL(1)|939, TBL(1)|938, TBL(1)|438, TBL(1)|941, TBL(1)|439, TBL(1)|944, TBL(1)|943,
++/* 02f880 */  TBL(1)|945, TBL(1)|949, TBL(1)|950, TBL(1)|630, TBL(1)|954, TBL(1)|956, TBL(1)|957, TBL(1)|958,
++/* 02f888 */  TBL(1)|631, TBL(1)|444, TBL(1)|632, TBL(1)|965, TBL(1)|966, TBL(1)|967, TBL(1)|969, TBL(1)|540,
++/* 02f890 */  TBL(1)|975, TBL(1)|446, TBL(1)|446, TBL(1)|1399, TBL(1)|979, TBL(1)|979, TBL(1)|633, TBL(1)|453,
++/* 02f898 */  TBL(1)|498, TBL(1)|983, TBL(1)|985, TBL(1)|634, TBL(1)|990, TBL(1)|994, TBL(1)|995, TBL(1)|997,
++/* 02f8a0 */  TBL(1)|1001, TBL(1)|636, TBL(1)|635, TBL(1)|1002, TBL(1)|447, TBL(1)|1003, TBL(1)|1008, TBL(1)|1009,
++/* 02f8a8 */  TBL(1)|1010, TBL(1)|1009, TBL(1)|1013, TBL(1)|1014, TBL(1)|1018, TBL(1)|1016, TBL(1)|1017, TBL(1)|1019,
++/* 02f8b0 */  TBL(1)|1020, TBL(1)|1021, TBL(1)|1024, TBL(1)|1025, TBL(1)|1031, TBL(1)|1033, TBL(1)|1037, TBL(1)|1042,
++/* 02f8b8 */  TBL(1)|450, TBL(1)|1041, TBL(1)|1038, TBL(1)|1044, TBL(1)|1046, TBL(1)|1051, TBL(1)|451, TBL(1)|1053,
++/* 02f8c0 */  TBL(1)|1050, TBL(1)|1048, TBL(1)|637, TBL(1)|1055, TBL(1)|1057, TBL(1)|1059, TBL(1)|1056, TBL(1)|638,
++/* 02f8c8 */  TBL(1)|1063, TBL(1)|1065, TBL(1)|452, TBL(1)|1076, TBL(1)|1089, TBL(1)|1080, TBL(1)|641, TBL(1)|1083,
++/* 02f8d0 */  TBL(1)|640, TBL(1)|639, TBL(1)|754, TBL(1)|755, TBL(1)|1090, TBL(1)|1084, TBL(1)|1388, TBL(1)|666,
++/* 02f8d8 */  TBL(1)|1093, TBL(1)|1094, TBL(1)|1095, TBL(1)|1100, TBL(1)|1098, TBL(1)|457, TBL(1)|642, TBL(1)|1105,
++/* 02f8e0 */  TBL(1)|1102, TBL(1)|1109, TBL(1)|1111, TBL(1)|459, TBL(1)|1112, TBL(1)|1107, TBL(1)|1114, TBL(1)|643,
++/* 02f8e8 */  TBL(1)|1115, TBL(1)|1116, TBL(1)|1117, TBL(1)|1120, TBL(1)|460, TBL(1)|1122, TBL(1)|644, TBL(1)|1125,
++/* 02f8f0 */  TBL(1)|461, TBL(1)|1126, TBL(1)|645, TBL(1)|1129, TBL(1)|1132, TBL(1)|1135, TBL(1)|1136, TBL(1)|462,
++/* 02f8f8 */  TBL(1)|437, TBL(1)|463, TBL(1)|1144, TBL(1)|464, TBL(1)|1147, TBL(1)|1149, TBL(1)|1145, TBL(1)|1152
+ };
+ 
+ static const uint16_t UNWIF_compat_02_f9 [256] = {
+-/* 02f900 */  TBL(1)|1105, TBL(1)|1109, TBL(1)|1106, TBL(1)|1107, TBL(1)|1110, TBL(1)|1111, TBL(1)|415, TBL(1)|1104,
+-/* 02f908 */  TBL(1)|1117, TBL(1)|1118, TBL(1)|595, TBL(1)|1123, TBL(1)|1122, TBL(1)|416, TBL(1)|1115, TBL(1)|1130,
+-/* 02f910 */  TBL(1)|417, TBL(1)|418, TBL(1)|1131, TBL(1)|1136, TBL(1)|1135, TBL(1)|1134, TBL(1)|596, TBL(1)|1137,
+-/* 02f918 */  TBL(1)|1141, TBL(1)|1140, TBL(1)|1143, TBL(1)|370, TBL(1)|1147, TBL(1)|419, TBL(1)|1150, TBL(1)|421,
+-/* 02f920 */  TBL(1)|1155, TBL(1)|1158, TBL(1)|1163, TBL(1)|422, TBL(1)|1168, TBL(1)|1169, TBL(1)|423, TBL(1)|424,
+-/* 02f928 */  TBL(1)|1176, TBL(1)|1180, TBL(1)|597, TBL(1)|1181, TBL(1)|598, TBL(1)|598, TBL(1)|1187, TBL(1)|1188,
+-/* 02f930 */  TBL(1)|1190, TBL(1)|1191, TBL(1)|1194, TBL(1)|599, TBL(1)|1200, TBL(1)|425, TBL(1)|1207, TBL(1)|426,
+-/* 02f938 */  TBL(1)|1210, TBL(1)|395, TBL(1)|1214, TBL(1)|427, TBL(1)|428, TBL(1)|430, TBL(1)|600, TBL(1)|601,
+-/* 02f940 */  TBL(1)|1228, TBL(1)|432, TBL(1)|431, TBL(1)|433, TBL(1)|434, TBL(1)|1230, TBL(1)|1231, TBL(1)|1231,
+-/* 02f948 */  TBL(1)|1233, TBL(1)|603, TBL(1)|1234, TBL(1)|604, TBL(1)|605, TBL(1)|436, TBL(1)|1239, TBL(1)|1241,
+-/* 02f950 */  TBL(1)|1244, TBL(1)|606, TBL(1)|437, TBL(1)|1253, TBL(1)|438, TBL(1)|439, TBL(1)|1261, TBL(1)|1267,
+-/* 02f958 */  TBL(1)|607, TBL(1)|1269, TBL(1)|1270, TBL(1)|1271, TBL(1)|440, TBL(1)|442, TBL(1)|442, TBL(1)|1277,
+-/* 02f960 */  TBL(1)|608, TBL(1)|443, TBL(1)|1282, TBL(1)|1283, TBL(1)|609, TBL(1)|444, TBL(1)|1290, TBL(1)|610,
+-/* 02f968 */  TBL(1)|1294, TBL(1)|1292, TBL(1)|1296, TBL(1)|447, TBL(1)|1302, TBL(1)|611, TBL(1)|1305, TBL(1)|1307,
+-/* 02f970 */  TBL(1)|1311, TBL(1)|612, TBL(1)|449, TBL(1)|450, TBL(1)|613, TBL(1)|451, TBL(1)|1317, TBL(1)|452,
+-/* 02f978 */  TBL(1)|1320, TBL(1)|1323, TBL(1)|1325, TBL(1)|453, TBL(1)|454, TBL(1)|1330, TBL(1)|455, TBL(1)|1332,
+-/* 02f980 */  TBL(1)|404, TBL(1)|614, TBL(1)|1338, TBL(1)|1339, TBL(1)|616, TBL(1)|1340, TBL(1)|859, TBL(1)|456,
+-/* 02f988 */  TBL(1)|457, TBL(1)|405, TBL(1)|406, TBL(1)|1348, TBL(1)|1349, TBL(1)|1483, TBL(1)|617, TBL(1)|1360,
+-/* 02f990 */  TBL(1)|1359, TBL(1)|1361, TBL(1)|734, TBL(1)|1362, TBL(1)|1363, TBL(1)|1364, TBL(1)|1366, TBL(1)|458,
+-/* 02f998 */  TBL(1)|1365, TBL(1)|1367, TBL(1)|1372, TBL(1)|1373, TBL(1)|1368, TBL(1)|1374, TBL(1)|1379, TBL(1)|1384,
+-/* 02f9a0 */  TBL(1)|1371, TBL(1)|1376, TBL(1)|1377, TBL(1)|1378, TBL(1)|459, TBL(1)|461, TBL(1)|460, TBL(1)|618,
+-/* 02f9a8 */  TBL(1)|1386, TBL(1)|1387, TBL(1)|1389, TBL(1)|465, TBL(1)|1390, TBL(1)|462, TBL(1)|619, TBL(1)|620,
+-/* 02f9b0 */  TBL(1)|463, TBL(1)|464, TBL(1)|621, TBL(1)|1398, TBL(1)|1399, TBL(1)|1400, TBL(1)|1401, TBL(1)|1404,
+-/* 02f9b8 */  TBL(1)|1403, TBL(1)|1406, TBL(1)|1405, TBL(1)|1409, TBL(1)|1407, TBL(1)|1408, TBL(1)|1410, TBL(1)|622,
+-/* 02f9c0 */  TBL(1)|1412, TBL(1)|1413, TBL(1)|623, TBL(1)|1417, TBL(1)|1418, TBL(1)|466, TBL(1)|1421, TBL(1)|1422,
+-/* 02f9c8 */  TBL(1)|624, TBL(1)|1425, TBL(1)|573, TBL(1)|467, TBL(1)|468, TBL(1)|625, TBL(1)|626, TBL(1)|1436,
+-/* 02f9d0 */  TBL(1)|1442, TBL(1)|1449, TBL(1)|1453, TBL(1)|469, TBL(1)|1458, TBL(1)|1459, TBL(1)|1465, TBL(1)|1468,
+-/* 02f9d8 */  TBL(1)|471, TBL(1)|373, TBL(1)|1471, TBL(1)|1470, TBL(1)|1473, TBL(1)|374, TBL(1)|1476, TBL(1)|1479,
+-/* 02f9e0 */  TBL(1)|472, TBL(1)|473, TBL(1)|1495, TBL(1)|1498, TBL(1)|1500, TBL(1)|474, TBL(1)|1501, TBL(1)|1512,
+-/* 02f9e8 */  TBL(1)|1515, TBL(1)|1516, TBL(1)|1514, TBL(1)|1519, TBL(1)|1520, TBL(1)|475, TBL(1)|1523, TBL(1)|627,
+-/* 02f9f0 */  TBL(1)|1525, TBL(1)|476, TBL(1)|628, TBL(1)|1539, TBL(1)|895, TBL(1)|1545, TBL(1)|477, TBL(1)|479,
+-/* 02f9f8 */  TBL(1)|629, TBL(1)|630, TBL(1)|1555, TBL(1)|480, TBL(1)|631, TBL(1)|481, TBL(1)|1561, TBL(1)|1561
++/* 02f900 */  TBL(1)|1156, TBL(1)|1160, TBL(1)|1157, TBL(1)|1158, TBL(1)|1161, TBL(1)|1162, TBL(1)|465, TBL(1)|1155,
++/* 02f908 */  TBL(1)|1168, TBL(1)|1169, TBL(1)|646, TBL(1)|1174, TBL(1)|1173, TBL(1)|466, TBL(1)|1166, TBL(1)|1181,
++/* 02f910 */  TBL(1)|467, TBL(1)|468, TBL(1)|1182, TBL(1)|1187, TBL(1)|1186, TBL(1)|1185, TBL(1)|647, TBL(1)|1188,
++/* 02f918 */  TBL(1)|1192, TBL(1)|1191, TBL(1)|1194, TBL(1)|420, TBL(1)|1198, TBL(1)|469, TBL(1)|1201, TBL(1)|471,
++/* 02f920 */  TBL(1)|1206, TBL(1)|1209, TBL(1)|1214, TBL(1)|472, TBL(1)|1219, TBL(1)|1220, TBL(1)|473, TBL(1)|474,
++/* 02f928 */  TBL(1)|1227, TBL(1)|1231, TBL(1)|648, TBL(1)|1232, TBL(1)|649, TBL(1)|649, TBL(1)|1238, TBL(1)|1239,
++/* 02f930 */  TBL(1)|1241, TBL(1)|1242, TBL(1)|1245, TBL(1)|650, TBL(1)|1251, TBL(1)|475, TBL(1)|1258, TBL(1)|476,
++/* 02f938 */  TBL(1)|1261, TBL(1)|445, TBL(1)|1265, TBL(1)|477, TBL(1)|478, TBL(1)|480, TBL(1)|651, TBL(1)|652,
++/* 02f940 */  TBL(1)|1279, TBL(1)|482, TBL(1)|481, TBL(1)|483, TBL(1)|484, TBL(1)|1281, TBL(1)|1282, TBL(1)|1282,
++/* 02f948 */  TBL(1)|1284, TBL(1)|654, TBL(1)|1285, TBL(1)|655, TBL(1)|656, TBL(1)|486, TBL(1)|1290, TBL(1)|1292,
++/* 02f950 */  TBL(1)|1295, TBL(1)|657, TBL(1)|487, TBL(1)|1304, TBL(1)|488, TBL(1)|489, TBL(1)|1312, TBL(1)|1318,
++/* 02f958 */  TBL(1)|658, TBL(1)|1320, TBL(1)|1321, TBL(1)|1322, TBL(1)|490, TBL(1)|492, TBL(1)|492, TBL(1)|1328,
++/* 02f960 */  TBL(1)|659, TBL(1)|493, TBL(1)|1333, TBL(1)|1334, TBL(1)|660, TBL(1)|494, TBL(1)|1341, TBL(1)|661,
++/* 02f968 */  TBL(1)|1345, TBL(1)|1343, TBL(1)|1347, TBL(1)|497, TBL(1)|1353, TBL(1)|662, TBL(1)|1356, TBL(1)|1358,
++/* 02f970 */  TBL(1)|1362, TBL(1)|663, TBL(1)|499, TBL(1)|500, TBL(1)|664, TBL(1)|501, TBL(1)|1368, TBL(1)|502,
++/* 02f978 */  TBL(1)|1371, TBL(1)|1374, TBL(1)|1376, TBL(1)|503, TBL(1)|504, TBL(1)|1381, TBL(1)|505, TBL(1)|1383,
++/* 02f980 */  TBL(1)|454, TBL(1)|665, TBL(1)|1389, TBL(1)|1390, TBL(1)|667, TBL(1)|1391, TBL(1)|910, TBL(1)|506,
++/* 02f988 */  TBL(1)|507, TBL(1)|455, TBL(1)|456, TBL(1)|1399, TBL(1)|1400, TBL(1)|1534, TBL(1)|668, TBL(1)|1411,
++/* 02f990 */  TBL(1)|1410, TBL(1)|1412, TBL(1)|785, TBL(1)|1413, TBL(1)|1414, TBL(1)|1415, TBL(1)|1417, TBL(1)|508,
++/* 02f998 */  TBL(1)|1416, TBL(1)|1418, TBL(1)|1423, TBL(1)|1424, TBL(1)|1419, TBL(1)|1425, TBL(1)|1430, TBL(1)|1435,
++/* 02f9a0 */  TBL(1)|1422, TBL(1)|1427, TBL(1)|1428, TBL(1)|1429, TBL(1)|509, TBL(1)|511, TBL(1)|510, TBL(1)|669,
++/* 02f9a8 */  TBL(1)|1437, TBL(1)|1438, TBL(1)|1440, TBL(1)|515, TBL(1)|1441, TBL(1)|512, TBL(1)|670, TBL(1)|671,
++/* 02f9b0 */  TBL(1)|513, TBL(1)|514, TBL(1)|672, TBL(1)|1449, TBL(1)|1450, TBL(1)|1451, TBL(1)|1452, TBL(1)|1455,
++/* 02f9b8 */  TBL(1)|1454, TBL(1)|1457, TBL(1)|1456, TBL(1)|1460, TBL(1)|1458, TBL(1)|1459, TBL(1)|1461, TBL(1)|673,
++/* 02f9c0 */  TBL(1)|1463, TBL(1)|1464, TBL(1)|674, TBL(1)|1468, TBL(1)|1469, TBL(1)|516, TBL(1)|1472, TBL(1)|1473,
++/* 02f9c8 */  TBL(1)|675, TBL(1)|1476, TBL(1)|624, TBL(1)|517, TBL(1)|518, TBL(1)|676, TBL(1)|677, TBL(1)|1487,
++/* 02f9d0 */  TBL(1)|1493, TBL(1)|1500, TBL(1)|1504, TBL(1)|519, TBL(1)|1509, TBL(1)|1510, TBL(1)|1516, TBL(1)|1519,
++/* 02f9d8 */  TBL(1)|521, TBL(1)|423, TBL(1)|1522, TBL(1)|1521, TBL(1)|1524, TBL(1)|424, TBL(1)|1527, TBL(1)|1530,
++/* 02f9e0 */  TBL(1)|522, TBL(1)|523, TBL(1)|1546, TBL(1)|1549, TBL(1)|1551, TBL(1)|524, TBL(1)|1552, TBL(1)|1563,
++/* 02f9e8 */  TBL(1)|1566, TBL(1)|1567, TBL(1)|1565, TBL(1)|1570, TBL(1)|1571, TBL(1)|525, TBL(1)|1574, TBL(1)|678,
++/* 02f9f0 */  TBL(1)|1576, TBL(1)|526, TBL(1)|679, TBL(1)|1590, TBL(1)|946, TBL(1)|1596, TBL(1)|527, TBL(1)|529,
++/* 02f9f8 */  TBL(1)|680, TBL(1)|681, TBL(1)|1606, TBL(1)|530, TBL(1)|682, TBL(1)|531, TBL(1)|1612, TBL(1)|1612
+ };
+ 
+ static const uint16_t UNWIF_compat_02_fa [256] = {
+-/* 02fa00 */  TBL(1)|1563, TBL(1)|482, TBL(1)|1569, TBL(1)|632, TBL(1)|1573, TBL(1)|1576, TBL(1)|1578, TBL(1)|1580,
+-/* 02fa08 */  TBL(1)|633, TBL(1)|485, TBL(1)|1585, TBL(1)|1592, TBL(1)|1595, TBL(1)|634, TBL(1)|635, TBL(1)|1596,
+-/* 02fa10 */  TBL(1)|486, TBL(1)|636, TBL(1)|487, TBL(1)|488, TBL(1)|489, TBL(1)|1605, TBL(1)|637, TBL(1)|1610,
+-/* 02fa18 */  TBL(1)|1612, TBL(1)|1613, TBL(1)|1615, TBL(1)|1617, TBL(1)|1619, TBL(1)|491, 0, 0,
++/* 02fa00 */  TBL(1)|1614, TBL(1)|532, TBL(1)|1620, TBL(1)|683, TBL(1)|1624, TBL(1)|1627, TBL(1)|1629, TBL(1)|1631,
++/* 02fa08 */  TBL(1)|684, TBL(1)|535, TBL(1)|1636, TBL(1)|1643, TBL(1)|1646, TBL(1)|685, TBL(1)|686, TBL(1)|1647,
++/* 02fa10 */  TBL(1)|536, TBL(1)|687, TBL(1)|537, TBL(1)|538, TBL(1)|539, TBL(1)|1656, TBL(1)|688, TBL(1)|1661,
++/* 02fa18 */  TBL(1)|1663, TBL(1)|1664, TBL(1)|1666, TBL(1)|1668, TBL(1)|1670, TBL(1)|541, 0, 0,
+ /* 02fa20 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 02fa28 */  0, 0, 0, 0, 0, 0, 0, 0,
+ /* 02fa30 */  0, 0, 0, 0, 0, 0, 0, 0,
+@@ -2731,7 +2772,7 @@ UNWIF_compat_00_ff
+ };
+ 
+ static const uint16_t* UNWIF_compat_01 [256] = {
+-NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
++NULL,NULL,NULL,NULL,NULL,NULL,NULL,UNWIF_compat_01_07,
+ NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
+ UNWIF_compat_01_10,
+ UNWIF_compat_01_11,
+diff --git a/src/extwchar/unwifexc.h b/src/extwchar/unwifexc.h
+index 28789f02..ce1f7106 100644
+--- a/src/extwchar/unwifexc.h
++++ b/src/extwchar/unwifexc.h
+@@ -3,7 +3,7 @@
+  * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+  * This file is auto-generated by Unicode-Normalize 1.27
+  * mkheader -uni -ind -std
+- * for Unicode 13.0.0 UTF-32
++ * for Unicode 14.0.0 UTF-32
+  * Any changes here will be lost!
+  */
+ /* Composite exclusions */
+diff --git a/tests/CaseFolding.txt b/tests/CaseFolding.txt
+deleted file mode 100644
+index 033788b2..00000000
+--- a/tests/CaseFolding.txt
++++ /dev/null
+@@ -1,1584 +0,0 @@
+-# CaseFolding-13.0.0.txt
+-# Date: 2019-09-08, 23:30:59 GMT
+-# © 2019 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
+-#
+-# Unicode Character Database
+-#   For documentation, see http://www.unicode.org/reports/tr44/
+-#
+-# Case Folding Properties
+-#
+-# This file is a supplement to the UnicodeData file.
+-# It provides a case folding mapping generated from the Unicode Character Database.
+-# If all characters are mapped according to the full mapping below, then
+-# case differences (according to UnicodeData.txt and SpecialCasing.txt)
+-# are eliminated.
+-#
+-# The data supports both implementations that require simple case foldings
+-# (where string lengths don't change), and implementations that allow full case folding
+-# (where string lengths may grow). Note that where they can be supported, the
+-# full case foldings are superior: for example, they allow "MASSE" and "Maße" to match.
+-#
+-# All code points not listed in this file map to themselves.
+-#
+-# NOTE: case folding does not preserve normalization formats!
+-#
+-# For information on case folding, including how to have case folding
+-# preserve normalization formats, see Section 3.13 Default Case Algorithms in
+-# The Unicode Standard.
+-#
+-# ================================================================================
+-# Format
+-# ================================================================================
+-# The entries in this file are in the following machine-readable format:
+-#
+-# <code>; <status>; <mapping>; # <name>
+-#
+-# The status field is:
+-# C: common case folding, common mappings shared by both simple and full mappings.
+-# F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces.
+-# S: simple case folding, mappings to single characters where different from F.
+-# T: special case for uppercase I and dotted uppercase I
+-#    - For non-Turkic languages, this mapping is normally not used.
+-#    - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters.
+-#      Note that the Turkic mappings do not maintain canonical equivalence without additional processing.
+-#      See the discussions of case mapping in the Unicode Standard for more information.
+-#
+-# Usage:
+-#  A. To do a simple case folding, use the mappings with status C + S.
+-#  B. To do a full case folding, use the mappings with status C + F.
+-#
+-#    The mappings with status T can be used or omitted depending on the desired case-folding
+-#    behavior. (The default option is to exclude them.)
+-#
+-# =================================================================
+-
+-# Property: Case_Folding
+-
+-#  All code points not explicitly listed for Case_Folding
+-#  have the value C for the status field, and the code point itself for the mapping field.
+-
+-# =================================================================
+-0041; C; 0061; # LATIN CAPITAL LETTER A
+-0042; C; 0062; # LATIN CAPITAL LETTER B
+-0043; C; 0063; # LATIN CAPITAL LETTER C
+-0044; C; 0064; # LATIN CAPITAL LETTER D
+-0045; C; 0065; # LATIN CAPITAL LETTER E
+-0046; C; 0066; # LATIN CAPITAL LETTER F
+-0047; C; 0067; # LATIN CAPITAL LETTER G
+-0048; C; 0068; # LATIN CAPITAL LETTER H
+-0049; C; 0069; # LATIN CAPITAL LETTER I
+-0049; T; 0131; # LATIN CAPITAL LETTER I
+-004A; C; 006A; # LATIN CAPITAL LETTER J
+-004B; C; 006B; # LATIN CAPITAL LETTER K
+-004C; C; 006C; # LATIN CAPITAL LETTER L
+-004D; C; 006D; # LATIN CAPITAL LETTER M
+-004E; C; 006E; # LATIN CAPITAL LETTER N
+-004F; C; 006F; # LATIN CAPITAL LETTER O
+-0050; C; 0070; # LATIN CAPITAL LETTER P
+-0051; C; 0071; # LATIN CAPITAL LETTER Q
+-0052; C; 0072; # LATIN CAPITAL LETTER R
+-0053; C; 0073; # LATIN CAPITAL LETTER S
+-0054; C; 0074; # LATIN CAPITAL LETTER T
+-0055; C; 0075; # LATIN CAPITAL LETTER U
+-0056; C; 0076; # LATIN CAPITAL LETTER V
+-0057; C; 0077; # LATIN CAPITAL LETTER W
+-0058; C; 0078; # LATIN CAPITAL LETTER X
+-0059; C; 0079; # LATIN CAPITAL LETTER Y
+-005A; C; 007A; # LATIN CAPITAL LETTER Z
+-00B5; C; 03BC; # MICRO SIGN
+-00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE
+-00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE
+-00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+-00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE
+-00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS
+-00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE
+-00C6; C; 00E6; # LATIN CAPITAL LETTER AE
+-00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA
+-00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE
+-00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE
+-00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+-00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS
+-00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE
+-00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE
+-00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+-00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS
+-00D0; C; 00F0; # LATIN CAPITAL LETTER ETH
+-00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE
+-00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE
+-00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE
+-00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+-00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE
+-00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS
+-00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE
+-00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE
+-00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE
+-00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+-00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS
+-00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE
+-00DE; C; 00FE; # LATIN CAPITAL LETTER THORN
+-00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S
+-0100; C; 0101; # LATIN CAPITAL LETTER A WITH MACRON
+-0102; C; 0103; # LATIN CAPITAL LETTER A WITH BREVE
+-0104; C; 0105; # LATIN CAPITAL LETTER A WITH OGONEK
+-0106; C; 0107; # LATIN CAPITAL LETTER C WITH ACUTE
+-0108; C; 0109; # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+-010A; C; 010B; # LATIN CAPITAL LETTER C WITH DOT ABOVE
+-010C; C; 010D; # LATIN CAPITAL LETTER C WITH CARON
+-010E; C; 010F; # LATIN CAPITAL LETTER D WITH CARON
+-0110; C; 0111; # LATIN CAPITAL LETTER D WITH STROKE
+-0112; C; 0113; # LATIN CAPITAL LETTER E WITH MACRON
+-0114; C; 0115; # LATIN CAPITAL LETTER E WITH BREVE
+-0116; C; 0117; # LATIN CAPITAL LETTER E WITH DOT ABOVE
+-0118; C; 0119; # LATIN CAPITAL LETTER E WITH OGONEK
+-011A; C; 011B; # LATIN CAPITAL LETTER E WITH CARON
+-011C; C; 011D; # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+-011E; C; 011F; # LATIN CAPITAL LETTER G WITH BREVE
+-0120; C; 0121; # LATIN CAPITAL LETTER G WITH DOT ABOVE
+-0122; C; 0123; # LATIN CAPITAL LETTER G WITH CEDILLA
+-0124; C; 0125; # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+-0126; C; 0127; # LATIN CAPITAL LETTER H WITH STROKE
+-0128; C; 0129; # LATIN CAPITAL LETTER I WITH TILDE
+-012A; C; 012B; # LATIN CAPITAL LETTER I WITH MACRON
+-012C; C; 012D; # LATIN CAPITAL LETTER I WITH BREVE
+-012E; C; 012F; # LATIN CAPITAL LETTER I WITH OGONEK
+-0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+-0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+-0132; C; 0133; # LATIN CAPITAL LIGATURE IJ
+-0134; C; 0135; # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+-0136; C; 0137; # LATIN CAPITAL LETTER K WITH CEDILLA
+-0139; C; 013A; # LATIN CAPITAL LETTER L WITH ACUTE
+-013B; C; 013C; # LATIN CAPITAL LETTER L WITH CEDILLA
+-013D; C; 013E; # LATIN CAPITAL LETTER L WITH CARON
+-013F; C; 0140; # LATIN CAPITAL LETTER L WITH MIDDLE DOT
+-0141; C; 0142; # LATIN CAPITAL LETTER L WITH STROKE
+-0143; C; 0144; # LATIN CAPITAL LETTER N WITH ACUTE
+-0145; C; 0146; # LATIN CAPITAL LETTER N WITH CEDILLA
+-0147; C; 0148; # LATIN CAPITAL LETTER N WITH CARON
+-0149; F; 02BC 006E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+-014A; C; 014B; # LATIN CAPITAL LETTER ENG
+-014C; C; 014D; # LATIN CAPITAL LETTER O WITH MACRON
+-014E; C; 014F; # LATIN CAPITAL LETTER O WITH BREVE
+-0150; C; 0151; # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+-0152; C; 0153; # LATIN CAPITAL LIGATURE OE
+-0154; C; 0155; # LATIN CAPITAL LETTER R WITH ACUTE
+-0156; C; 0157; # LATIN CAPITAL LETTER R WITH CEDILLA
+-0158; C; 0159; # LATIN CAPITAL LETTER R WITH CARON
+-015A; C; 015B; # LATIN CAPITAL LETTER S WITH ACUTE
+-015C; C; 015D; # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+-015E; C; 015F; # LATIN CAPITAL LETTER S WITH CEDILLA
+-0160; C; 0161; # LATIN CAPITAL LETTER S WITH CARON
+-0162; C; 0163; # LATIN CAPITAL LETTER T WITH CEDILLA
+-0164; C; 0165; # LATIN CAPITAL LETTER T WITH CARON
+-0166; C; 0167; # LATIN CAPITAL LETTER T WITH STROKE
+-0168; C; 0169; # LATIN CAPITAL LETTER U WITH TILDE
+-016A; C; 016B; # LATIN CAPITAL LETTER U WITH MACRON
+-016C; C; 016D; # LATIN CAPITAL LETTER U WITH BREVE
+-016E; C; 016F; # LATIN CAPITAL LETTER U WITH RING ABOVE
+-0170; C; 0171; # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+-0172; C; 0173; # LATIN CAPITAL LETTER U WITH OGONEK
+-0174; C; 0175; # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+-0176; C; 0177; # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+-0178; C; 00FF; # LATIN CAPITAL LETTER Y WITH DIAERESIS
+-0179; C; 017A; # LATIN CAPITAL LETTER Z WITH ACUTE
+-017B; C; 017C; # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+-017D; C; 017E; # LATIN CAPITAL LETTER Z WITH CARON
+-017F; C; 0073; # LATIN SMALL LETTER LONG S
+-0181; C; 0253; # LATIN CAPITAL LETTER B WITH HOOK
+-0182; C; 0183; # LATIN CAPITAL LETTER B WITH TOPBAR
+-0184; C; 0185; # LATIN CAPITAL LETTER TONE SIX
+-0186; C; 0254; # LATIN CAPITAL LETTER OPEN O
+-0187; C; 0188; # LATIN CAPITAL LETTER C WITH HOOK
+-0189; C; 0256; # LATIN CAPITAL LETTER AFRICAN D
+-018A; C; 0257; # LATIN CAPITAL LETTER D WITH HOOK
+-018B; C; 018C; # LATIN CAPITAL LETTER D WITH TOPBAR
+-018E; C; 01DD; # LATIN CAPITAL LETTER REVERSED E
+-018F; C; 0259; # LATIN CAPITAL LETTER SCHWA
+-0190; C; 025B; # LATIN CAPITAL LETTER OPEN E
+-0191; C; 0192; # LATIN CAPITAL LETTER F WITH HOOK
+-0193; C; 0260; # LATIN CAPITAL LETTER G WITH HOOK
+-0194; C; 0263; # LATIN CAPITAL LETTER GAMMA
+-0196; C; 0269; # LATIN CAPITAL LETTER IOTA
+-0197; C; 0268; # LATIN CAPITAL LETTER I WITH STROKE
+-0198; C; 0199; # LATIN CAPITAL LETTER K WITH HOOK
+-019C; C; 026F; # LATIN CAPITAL LETTER TURNED M
+-019D; C; 0272; # LATIN CAPITAL LETTER N WITH LEFT HOOK
+-019F; C; 0275; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+-01A0; C; 01A1; # LATIN CAPITAL LETTER O WITH HORN
+-01A2; C; 01A3; # LATIN CAPITAL LETTER OI
+-01A4; C; 01A5; # LATIN CAPITAL LETTER P WITH HOOK
+-01A6; C; 0280; # LATIN LETTER YR
+-01A7; C; 01A8; # LATIN CAPITAL LETTER TONE TWO
+-01A9; C; 0283; # LATIN CAPITAL LETTER ESH
+-01AC; C; 01AD; # LATIN CAPITAL LETTER T WITH HOOK
+-01AE; C; 0288; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+-01AF; C; 01B0; # LATIN CAPITAL LETTER U WITH HORN
+-01B1; C; 028A; # LATIN CAPITAL LETTER UPSILON
+-01B2; C; 028B; # LATIN CAPITAL LETTER V WITH HOOK
+-01B3; C; 01B4; # LATIN CAPITAL LETTER Y WITH HOOK
+-01B5; C; 01B6; # LATIN CAPITAL LETTER Z WITH STROKE
+-01B7; C; 0292; # LATIN CAPITAL LETTER EZH
+-01B8; C; 01B9; # LATIN CAPITAL LETTER EZH REVERSED
+-01BC; C; 01BD; # LATIN CAPITAL LETTER TONE FIVE
+-01C4; C; 01C6; # LATIN CAPITAL LETTER DZ WITH CARON
+-01C5; C; 01C6; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+-01C7; C; 01C9; # LATIN CAPITAL LETTER LJ
+-01C8; C; 01C9; # LATIN CAPITAL LETTER L WITH SMALL LETTER J
+-01CA; C; 01CC; # LATIN CAPITAL LETTER NJ
+-01CB; C; 01CC; # LATIN CAPITAL LETTER N WITH SMALL LETTER J
+-01CD; C; 01CE; # LATIN CAPITAL LETTER A WITH CARON
+-01CF; C; 01D0; # LATIN CAPITAL LETTER I WITH CARON
+-01D1; C; 01D2; # LATIN CAPITAL LETTER O WITH CARON
+-01D3; C; 01D4; # LATIN CAPITAL LETTER U WITH CARON
+-01D5; C; 01D6; # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+-01D7; C; 01D8; # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+-01D9; C; 01DA; # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+-01DB; C; 01DC; # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+-01DE; C; 01DF; # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+-01E0; C; 01E1; # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+-01E2; C; 01E3; # LATIN CAPITAL LETTER AE WITH MACRON
+-01E4; C; 01E5; # LATIN CAPITAL LETTER G WITH STROKE
+-01E6; C; 01E7; # LATIN CAPITAL LETTER G WITH CARON
+-01E8; C; 01E9; # LATIN CAPITAL LETTER K WITH CARON
+-01EA; C; 01EB; # LATIN CAPITAL LETTER O WITH OGONEK
+-01EC; C; 01ED; # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+-01EE; C; 01EF; # LATIN CAPITAL LETTER EZH WITH CARON
+-01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON
+-01F1; C; 01F3; # LATIN CAPITAL LETTER DZ
+-01F2; C; 01F3; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+-01F4; C; 01F5; # LATIN CAPITAL LETTER G WITH ACUTE
+-01F6; C; 0195; # LATIN CAPITAL LETTER HWAIR
+-01F7; C; 01BF; # LATIN CAPITAL LETTER WYNN
+-01F8; C; 01F9; # LATIN CAPITAL LETTER N WITH GRAVE
+-01FA; C; 01FB; # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+-01FC; C; 01FD; # LATIN CAPITAL LETTER AE WITH ACUTE
+-01FE; C; 01FF; # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+-0200; C; 0201; # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+-0202; C; 0203; # LATIN CAPITAL LETTER A WITH INVERTED BREVE
+-0204; C; 0205; # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+-0206; C; 0207; # LATIN CAPITAL LETTER E WITH INVERTED BREVE
+-0208; C; 0209; # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+-020A; C; 020B; # LATIN CAPITAL LETTER I WITH INVERTED BREVE
+-020C; C; 020D; # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+-020E; C; 020F; # LATIN CAPITAL LETTER O WITH INVERTED BREVE
+-0210; C; 0211; # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+-0212; C; 0213; # LATIN CAPITAL LETTER R WITH INVERTED BREVE
+-0214; C; 0215; # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+-0216; C; 0217; # LATIN CAPITAL LETTER U WITH INVERTED BREVE
+-0218; C; 0219; # LATIN CAPITAL LETTER S WITH COMMA BELOW
+-021A; C; 021B; # LATIN CAPITAL LETTER T WITH COMMA BELOW
+-021C; C; 021D; # LATIN CAPITAL LETTER YOGH
+-021E; C; 021F; # LATIN CAPITAL LETTER H WITH CARON
+-0220; C; 019E; # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+-0222; C; 0223; # LATIN CAPITAL LETTER OU
+-0224; C; 0225; # LATIN CAPITAL LETTER Z WITH HOOK
+-0226; C; 0227; # LATIN CAPITAL LETTER A WITH DOT ABOVE
+-0228; C; 0229; # LATIN CAPITAL LETTER E WITH CEDILLA
+-022A; C; 022B; # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+-022C; C; 022D; # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+-022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE
+-0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+-0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON
+-023A; C; 2C65; # LATIN CAPITAL LETTER A WITH STROKE
+-023B; C; 023C; # LATIN CAPITAL LETTER C WITH STROKE
+-023D; C; 019A; # LATIN CAPITAL LETTER L WITH BAR
+-023E; C; 2C66; # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+-0241; C; 0242; # LATIN CAPITAL LETTER GLOTTAL STOP
+-0243; C; 0180; # LATIN CAPITAL LETTER B WITH STROKE
+-0244; C; 0289; # LATIN CAPITAL LETTER U BAR
+-0245; C; 028C; # LATIN CAPITAL LETTER TURNED V
+-0246; C; 0247; # LATIN CAPITAL LETTER E WITH STROKE
+-0248; C; 0249; # LATIN CAPITAL LETTER J WITH STROKE
+-024A; C; 024B; # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+-024C; C; 024D; # LATIN CAPITAL LETTER R WITH STROKE
+-024E; C; 024F; # LATIN CAPITAL LETTER Y WITH STROKE
+-0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI
+-0370; C; 0371; # GREEK CAPITAL LETTER HETA
+-0372; C; 0373; # GREEK CAPITAL LETTER ARCHAIC SAMPI
+-0376; C; 0377; # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+-037F; C; 03F3; # GREEK CAPITAL LETTER YOT
+-0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS
+-0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS
+-0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS
+-038A; C; 03AF; # GREEK CAPITAL LETTER IOTA WITH TONOS
+-038C; C; 03CC; # GREEK CAPITAL LETTER OMICRON WITH TONOS
+-038E; C; 03CD; # GREEK CAPITAL LETTER UPSILON WITH TONOS
+-038F; C; 03CE; # GREEK CAPITAL LETTER OMEGA WITH TONOS
+-0390; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+-0391; C; 03B1; # GREEK CAPITAL LETTER ALPHA
+-0392; C; 03B2; # GREEK CAPITAL LETTER BETA
+-0393; C; 03B3; # GREEK CAPITAL LETTER GAMMA
+-0394; C; 03B4; # GREEK CAPITAL LETTER DELTA
+-0395; C; 03B5; # GREEK CAPITAL LETTER EPSILON
+-0396; C; 03B6; # GREEK CAPITAL LETTER ZETA
+-0397; C; 03B7; # GREEK CAPITAL LETTER ETA
+-0398; C; 03B8; # GREEK CAPITAL LETTER THETA
+-0399; C; 03B9; # GREEK CAPITAL LETTER IOTA
+-039A; C; 03BA; # GREEK CAPITAL LETTER KAPPA
+-039B; C; 03BB; # GREEK CAPITAL LETTER LAMDA
+-039C; C; 03BC; # GREEK CAPITAL LETTER MU
+-039D; C; 03BD; # GREEK CAPITAL LETTER NU
+-039E; C; 03BE; # GREEK CAPITAL LETTER XI
+-039F; C; 03BF; # GREEK CAPITAL LETTER OMICRON
+-03A0; C; 03C0; # GREEK CAPITAL LETTER PI
+-03A1; C; 03C1; # GREEK CAPITAL LETTER RHO
+-03A3; C; 03C3; # GREEK CAPITAL LETTER SIGMA
+-03A4; C; 03C4; # GREEK CAPITAL LETTER TAU
+-03A5; C; 03C5; # GREEK CAPITAL LETTER UPSILON
+-03A6; C; 03C6; # GREEK CAPITAL LETTER PHI
+-03A7; C; 03C7; # GREEK CAPITAL LETTER CHI
+-03A8; C; 03C8; # GREEK CAPITAL LETTER PSI
+-03A9; C; 03C9; # GREEK CAPITAL LETTER OMEGA
+-03AA; C; 03CA; # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+-03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+-03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+-03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA
+-03CF; C; 03D7; # GREEK CAPITAL KAI SYMBOL
+-03D0; C; 03B2; # GREEK BETA SYMBOL
+-03D1; C; 03B8; # GREEK THETA SYMBOL
+-03D5; C; 03C6; # GREEK PHI SYMBOL
+-03D6; C; 03C0; # GREEK PI SYMBOL
+-03D8; C; 03D9; # GREEK LETTER ARCHAIC KOPPA
+-03DA; C; 03DB; # GREEK LETTER STIGMA
+-03DC; C; 03DD; # GREEK LETTER DIGAMMA
+-03DE; C; 03DF; # GREEK LETTER KOPPA
+-03E0; C; 03E1; # GREEK LETTER SAMPI
+-03E2; C; 03E3; # COPTIC CAPITAL LETTER SHEI
+-03E4; C; 03E5; # COPTIC CAPITAL LETTER FEI
+-03E6; C; 03E7; # COPTIC CAPITAL LETTER KHEI
+-03E8; C; 03E9; # COPTIC CAPITAL LETTER HORI
+-03EA; C; 03EB; # COPTIC CAPITAL LETTER GANGIA
+-03EC; C; 03ED; # COPTIC CAPITAL LETTER SHIMA
+-03EE; C; 03EF; # COPTIC CAPITAL LETTER DEI
+-03F0; C; 03BA; # GREEK KAPPA SYMBOL
+-03F1; C; 03C1; # GREEK RHO SYMBOL
+-03F4; C; 03B8; # GREEK CAPITAL THETA SYMBOL
+-03F5; C; 03B5; # GREEK LUNATE EPSILON SYMBOL
+-03F7; C; 03F8; # GREEK CAPITAL LETTER SHO
+-03F9; C; 03F2; # GREEK CAPITAL LUNATE SIGMA SYMBOL
+-03FA; C; 03FB; # GREEK CAPITAL LETTER SAN
+-03FD; C; 037B; # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+-03FE; C; 037C; # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+-03FF; C; 037D; # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+-0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE
+-0401; C; 0451; # CYRILLIC CAPITAL LETTER IO
+-0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE
+-0403; C; 0453; # CYRILLIC CAPITAL LETTER GJE
+-0404; C; 0454; # CYRILLIC CAPITAL LETTER UKRAINIAN IE
+-0405; C; 0455; # CYRILLIC CAPITAL LETTER DZE
+-0406; C; 0456; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+-0407; C; 0457; # CYRILLIC CAPITAL LETTER YI
+-0408; C; 0458; # CYRILLIC CAPITAL LETTER JE
+-0409; C; 0459; # CYRILLIC CAPITAL LETTER LJE
+-040A; C; 045A; # CYRILLIC CAPITAL LETTER NJE
+-040B; C; 045B; # CYRILLIC CAPITAL LETTER TSHE
+-040C; C; 045C; # CYRILLIC CAPITAL LETTER KJE
+-040D; C; 045D; # CYRILLIC CAPITAL LETTER I WITH GRAVE
+-040E; C; 045E; # CYRILLIC CAPITAL LETTER SHORT U
+-040F; C; 045F; # CYRILLIC CAPITAL LETTER DZHE
+-0410; C; 0430; # CYRILLIC CAPITAL LETTER A
+-0411; C; 0431; # CYRILLIC CAPITAL LETTER BE
+-0412; C; 0432; # CYRILLIC CAPITAL LETTER VE
+-0413; C; 0433; # CYRILLIC CAPITAL LETTER GHE
+-0414; C; 0434; # CYRILLIC CAPITAL LETTER DE
+-0415; C; 0435; # CYRILLIC CAPITAL LETTER IE
+-0416; C; 0436; # CYRILLIC CAPITAL LETTER ZHE
+-0417; C; 0437; # CYRILLIC CAPITAL LETTER ZE
+-0418; C; 0438; # CYRILLIC CAPITAL LETTER I
+-0419; C; 0439; # CYRILLIC CAPITAL LETTER SHORT I
+-041A; C; 043A; # CYRILLIC CAPITAL LETTER KA
+-041B; C; 043B; # CYRILLIC CAPITAL LETTER EL
+-041C; C; 043C; # CYRILLIC CAPITAL LETTER EM
+-041D; C; 043D; # CYRILLIC CAPITAL LETTER EN
+-041E; C; 043E; # CYRILLIC CAPITAL LETTER O
+-041F; C; 043F; # CYRILLIC CAPITAL LETTER PE
+-0420; C; 0440; # CYRILLIC CAPITAL LETTER ER
+-0421; C; 0441; # CYRILLIC CAPITAL LETTER ES
+-0422; C; 0442; # CYRILLIC CAPITAL LETTER TE
+-0423; C; 0443; # CYRILLIC CAPITAL LETTER U
+-0424; C; 0444; # CYRILLIC CAPITAL LETTER EF
+-0425; C; 0445; # CYRILLIC CAPITAL LETTER HA
+-0426; C; 0446; # CYRILLIC CAPITAL LETTER TSE
+-0427; C; 0447; # CYRILLIC CAPITAL LETTER CHE
+-0428; C; 0448; # CYRILLIC CAPITAL LETTER SHA
+-0429; C; 0449; # CYRILLIC CAPITAL LETTER SHCHA
+-042A; C; 044A; # CYRILLIC CAPITAL LETTER HARD SIGN
+-042B; C; 044B; # CYRILLIC CAPITAL LETTER YERU
+-042C; C; 044C; # CYRILLIC CAPITAL LETTER SOFT SIGN
+-042D; C; 044D; # CYRILLIC CAPITAL LETTER E
+-042E; C; 044E; # CYRILLIC CAPITAL LETTER YU
+-042F; C; 044F; # CYRILLIC CAPITAL LETTER YA
+-0460; C; 0461; # CYRILLIC CAPITAL LETTER OMEGA
+-0462; C; 0463; # CYRILLIC CAPITAL LETTER YAT
+-0464; C; 0465; # CYRILLIC CAPITAL LETTER IOTIFIED E
+-0466; C; 0467; # CYRILLIC CAPITAL LETTER LITTLE YUS
+-0468; C; 0469; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+-046A; C; 046B; # CYRILLIC CAPITAL LETTER BIG YUS
+-046C; C; 046D; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+-046E; C; 046F; # CYRILLIC CAPITAL LETTER KSI
+-0470; C; 0471; # CYRILLIC CAPITAL LETTER PSI
+-0472; C; 0473; # CYRILLIC CAPITAL LETTER FITA
+-0474; C; 0475; # CYRILLIC CAPITAL LETTER IZHITSA
+-0476; C; 0477; # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+-0478; C; 0479; # CYRILLIC CAPITAL LETTER UK
+-047A; C; 047B; # CYRILLIC CAPITAL LETTER ROUND OMEGA
+-047C; C; 047D; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+-047E; C; 047F; # CYRILLIC CAPITAL LETTER OT
+-0480; C; 0481; # CYRILLIC CAPITAL LETTER KOPPA
+-048A; C; 048B; # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+-048C; C; 048D; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+-048E; C; 048F; # CYRILLIC CAPITAL LETTER ER WITH TICK
+-0490; C; 0491; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+-0492; C; 0493; # CYRILLIC CAPITAL LETTER GHE WITH STROKE
+-0494; C; 0495; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+-0496; C; 0497; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+-0498; C; 0499; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+-049A; C; 049B; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+-049C; C; 049D; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+-049E; C; 049F; # CYRILLIC CAPITAL LETTER KA WITH STROKE
+-04A0; C; 04A1; # CYRILLIC CAPITAL LETTER BASHKIR KA
+-04A2; C; 04A3; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+-04A4; C; 04A5; # CYRILLIC CAPITAL LIGATURE EN GHE
+-04A6; C; 04A7; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+-04A8; C; 04A9; # CYRILLIC CAPITAL LETTER ABKHASIAN HA
+-04AA; C; 04AB; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+-04AC; C; 04AD; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+-04AE; C; 04AF; # CYRILLIC CAPITAL LETTER STRAIGHT U
+-04B0; C; 04B1; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+-04B2; C; 04B3; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+-04B4; C; 04B5; # CYRILLIC CAPITAL LIGATURE TE TSE
+-04B6; C; 04B7; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+-04B8; C; 04B9; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+-04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA
+-04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+-04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+-04C0; C; 04CF; # CYRILLIC LETTER PALOCHKA
+-04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+-04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK
+-04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL
+-04C7; C; 04C8; # CYRILLIC CAPITAL LETTER EN WITH HOOK
+-04C9; C; 04CA; # CYRILLIC CAPITAL LETTER EN WITH TAIL
+-04CB; C; 04CC; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+-04CD; C; 04CE; # CYRILLIC CAPITAL LETTER EM WITH TAIL
+-04D0; C; 04D1; # CYRILLIC CAPITAL LETTER A WITH BREVE
+-04D2; C; 04D3; # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+-04D4; C; 04D5; # CYRILLIC CAPITAL LIGATURE A IE
+-04D6; C; 04D7; # CYRILLIC CAPITAL LETTER IE WITH BREVE
+-04D8; C; 04D9; # CYRILLIC CAPITAL LETTER SCHWA
+-04DA; C; 04DB; # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+-04DC; C; 04DD; # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+-04DE; C; 04DF; # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+-04E0; C; 04E1; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+-04E2; C; 04E3; # CYRILLIC CAPITAL LETTER I WITH MACRON
+-04E4; C; 04E5; # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+-04E6; C; 04E7; # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+-04E8; C; 04E9; # CYRILLIC CAPITAL LETTER BARRED O
+-04EA; C; 04EB; # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+-04EC; C; 04ED; # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+-04EE; C; 04EF; # CYRILLIC CAPITAL LETTER U WITH MACRON
+-04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+-04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+-04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+-04F6; C; 04F7; # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+-04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+-04FA; C; 04FB; # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+-04FC; C; 04FD; # CYRILLIC CAPITAL LETTER HA WITH HOOK
+-04FE; C; 04FF; # CYRILLIC CAPITAL LETTER HA WITH STROKE
+-0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE
+-0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE
+-0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE
+-0506; C; 0507; # CYRILLIC CAPITAL LETTER KOMI DZJE
+-0508; C; 0509; # CYRILLIC CAPITAL LETTER KOMI LJE
+-050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE
+-050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE
+-050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE
+-0510; C; 0511; # CYRILLIC CAPITAL LETTER REVERSED ZE
+-0512; C; 0513; # CYRILLIC CAPITAL LETTER EL WITH HOOK
+-0514; C; 0515; # CYRILLIC CAPITAL LETTER LHA
+-0516; C; 0517; # CYRILLIC CAPITAL LETTER RHA
+-0518; C; 0519; # CYRILLIC CAPITAL LETTER YAE
+-051A; C; 051B; # CYRILLIC CAPITAL LETTER QA
+-051C; C; 051D; # CYRILLIC CAPITAL LETTER WE
+-051E; C; 051F; # CYRILLIC CAPITAL LETTER ALEUT KA
+-0520; C; 0521; # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+-0522; C; 0523; # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+-0524; C; 0525; # CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+-0526; C; 0527; # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
+-0528; C; 0529; # CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
+-052A; C; 052B; # CYRILLIC CAPITAL LETTER DZZHE
+-052C; C; 052D; # CYRILLIC CAPITAL LETTER DCHE
+-052E; C; 052F; # CYRILLIC CAPITAL LETTER EL WITH DESCENDER
+-0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB
+-0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN
+-0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM
+-0534; C; 0564; # ARMENIAN CAPITAL LETTER DA
+-0535; C; 0565; # ARMENIAN CAPITAL LETTER ECH
+-0536; C; 0566; # ARMENIAN CAPITAL LETTER ZA
+-0537; C; 0567; # ARMENIAN CAPITAL LETTER EH
+-0538; C; 0568; # ARMENIAN CAPITAL LETTER ET
+-0539; C; 0569; # ARMENIAN CAPITAL LETTER TO
+-053A; C; 056A; # ARMENIAN CAPITAL LETTER ZHE
+-053B; C; 056B; # ARMENIAN CAPITAL LETTER INI
+-053C; C; 056C; # ARMENIAN CAPITAL LETTER LIWN
+-053D; C; 056D; # ARMENIAN CAPITAL LETTER XEH
+-053E; C; 056E; # ARMENIAN CAPITAL LETTER CA
+-053F; C; 056F; # ARMENIAN CAPITAL LETTER KEN
+-0540; C; 0570; # ARMENIAN CAPITAL LETTER HO
+-0541; C; 0571; # ARMENIAN CAPITAL LETTER JA
+-0542; C; 0572; # ARMENIAN CAPITAL LETTER GHAD
+-0543; C; 0573; # ARMENIAN CAPITAL LETTER CHEH
+-0544; C; 0574; # ARMENIAN CAPITAL LETTER MEN
+-0545; C; 0575; # ARMENIAN CAPITAL LETTER YI
+-0546; C; 0576; # ARMENIAN CAPITAL LETTER NOW
+-0547; C; 0577; # ARMENIAN CAPITAL LETTER SHA
+-0548; C; 0578; # ARMENIAN CAPITAL LETTER VO
+-0549; C; 0579; # ARMENIAN CAPITAL LETTER CHA
+-054A; C; 057A; # ARMENIAN CAPITAL LETTER PEH
+-054B; C; 057B; # ARMENIAN CAPITAL LETTER JHEH
+-054C; C; 057C; # ARMENIAN CAPITAL LETTER RA
+-054D; C; 057D; # ARMENIAN CAPITAL LETTER SEH
+-054E; C; 057E; # ARMENIAN CAPITAL LETTER VEW
+-054F; C; 057F; # ARMENIAN CAPITAL LETTER TIWN
+-0550; C; 0580; # ARMENIAN CAPITAL LETTER REH
+-0551; C; 0581; # ARMENIAN CAPITAL LETTER CO
+-0552; C; 0582; # ARMENIAN CAPITAL LETTER YIWN
+-0553; C; 0583; # ARMENIAN CAPITAL LETTER PIWR
+-0554; C; 0584; # ARMENIAN CAPITAL LETTER KEH
+-0555; C; 0585; # ARMENIAN CAPITAL LETTER OH
+-0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH
+-0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN
+-10A0; C; 2D00; # GEORGIAN CAPITAL LETTER AN
+-10A1; C; 2D01; # GEORGIAN CAPITAL LETTER BAN
+-10A2; C; 2D02; # GEORGIAN CAPITAL LETTER GAN
+-10A3; C; 2D03; # GEORGIAN CAPITAL LETTER DON
+-10A4; C; 2D04; # GEORGIAN CAPITAL LETTER EN
+-10A5; C; 2D05; # GEORGIAN CAPITAL LETTER VIN
+-10A6; C; 2D06; # GEORGIAN CAPITAL LETTER ZEN
+-10A7; C; 2D07; # GEORGIAN CAPITAL LETTER TAN
+-10A8; C; 2D08; # GEORGIAN CAPITAL LETTER IN
+-10A9; C; 2D09; # GEORGIAN CAPITAL LETTER KAN
+-10AA; C; 2D0A; # GEORGIAN CAPITAL LETTER LAS
+-10AB; C; 2D0B; # GEORGIAN CAPITAL LETTER MAN
+-10AC; C; 2D0C; # GEORGIAN CAPITAL LETTER NAR
+-10AD; C; 2D0D; # GEORGIAN CAPITAL LETTER ON
+-10AE; C; 2D0E; # GEORGIAN CAPITAL LETTER PAR
+-10AF; C; 2D0F; # GEORGIAN CAPITAL LETTER ZHAR
+-10B0; C; 2D10; # GEORGIAN CAPITAL LETTER RAE
+-10B1; C; 2D11; # GEORGIAN CAPITAL LETTER SAN
+-10B2; C; 2D12; # GEORGIAN CAPITAL LETTER TAR
+-10B3; C; 2D13; # GEORGIAN CAPITAL LETTER UN
+-10B4; C; 2D14; # GEORGIAN CAPITAL LETTER PHAR
+-10B5; C; 2D15; # GEORGIAN CAPITAL LETTER KHAR
+-10B6; C; 2D16; # GEORGIAN CAPITAL LETTER GHAN
+-10B7; C; 2D17; # GEORGIAN CAPITAL LETTER QAR
+-10B8; C; 2D18; # GEORGIAN CAPITAL LETTER SHIN
+-10B9; C; 2D19; # GEORGIAN CAPITAL LETTER CHIN
+-10BA; C; 2D1A; # GEORGIAN CAPITAL LETTER CAN
+-10BB; C; 2D1B; # GEORGIAN CAPITAL LETTER JIL
+-10BC; C; 2D1C; # GEORGIAN CAPITAL LETTER CIL
+-10BD; C; 2D1D; # GEORGIAN CAPITAL LETTER CHAR
+-10BE; C; 2D1E; # GEORGIAN CAPITAL LETTER XAN
+-10BF; C; 2D1F; # GEORGIAN CAPITAL LETTER JHAN
+-10C0; C; 2D20; # GEORGIAN CAPITAL LETTER HAE
+-10C1; C; 2D21; # GEORGIAN CAPITAL LETTER HE
+-10C2; C; 2D22; # GEORGIAN CAPITAL LETTER HIE
+-10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE
+-10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR
+-10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE
+-10C7; C; 2D27; # GEORGIAN CAPITAL LETTER YN
+-10CD; C; 2D2D; # GEORGIAN CAPITAL LETTER AEN
+-13F8; C; 13F0; # CHEROKEE SMALL LETTER YE
+-13F9; C; 13F1; # CHEROKEE SMALL LETTER YI
+-13FA; C; 13F2; # CHEROKEE SMALL LETTER YO
+-13FB; C; 13F3; # CHEROKEE SMALL LETTER YU
+-13FC; C; 13F4; # CHEROKEE SMALL LETTER YV
+-13FD; C; 13F5; # CHEROKEE SMALL LETTER MV
+-1C80; C; 0432; # CYRILLIC SMALL LETTER ROUNDED VE
+-1C81; C; 0434; # CYRILLIC SMALL LETTER LONG-LEGGED DE
+-1C82; C; 043E; # CYRILLIC SMALL LETTER NARROW O
+-1C83; C; 0441; # CYRILLIC SMALL LETTER WIDE ES
+-1C84; C; 0442; # CYRILLIC SMALL LETTER TALL TE
+-1C85; C; 0442; # CYRILLIC SMALL LETTER THREE-LEGGED TE
+-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
+-1C90; C; 10D0; # GEORGIAN MTAVRULI CAPITAL LETTER AN
+-1C91; C; 10D1; # GEORGIAN MTAVRULI CAPITAL LETTER BAN
+-1C92; C; 10D2; # GEORGIAN MTAVRULI CAPITAL LETTER GAN
+-1C93; C; 10D3; # GEORGIAN MTAVRULI CAPITAL LETTER DON
+-1C94; C; 10D4; # GEORGIAN MTAVRULI CAPITAL LETTER EN
+-1C95; C; 10D5; # GEORGIAN MTAVRULI CAPITAL LETTER VIN
+-1C96; C; 10D6; # GEORGIAN MTAVRULI CAPITAL LETTER ZEN
+-1C97; C; 10D7; # GEORGIAN MTAVRULI CAPITAL LETTER TAN
+-1C98; C; 10D8; # GEORGIAN MTAVRULI CAPITAL LETTER IN
+-1C99; C; 10D9; # GEORGIAN MTAVRULI CAPITAL LETTER KAN
+-1C9A; C; 10DA; # GEORGIAN MTAVRULI CAPITAL LETTER LAS
+-1C9B; C; 10DB; # GEORGIAN MTAVRULI CAPITAL LETTER MAN
+-1C9C; C; 10DC; # GEORGIAN MTAVRULI CAPITAL LETTER NAR
+-1C9D; C; 10DD; # GEORGIAN MTAVRULI CAPITAL LETTER ON
+-1C9E; C; 10DE; # GEORGIAN MTAVRULI CAPITAL LETTER PAR
+-1C9F; C; 10DF; # GEORGIAN MTAVRULI CAPITAL LETTER ZHAR
+-1CA0; C; 10E0; # GEORGIAN MTAVRULI CAPITAL LETTER RAE
+-1CA1; C; 10E1; # GEORGIAN MTAVRULI CAPITAL LETTER SAN
+-1CA2; C; 10E2; # GEORGIAN MTAVRULI CAPITAL LETTER TAR
+-1CA3; C; 10E3; # GEORGIAN MTAVRULI CAPITAL LETTER UN
+-1CA4; C; 10E4; # GEORGIAN MTAVRULI CAPITAL LETTER PHAR
+-1CA5; C; 10E5; # GEORGIAN MTAVRULI CAPITAL LETTER KHAR
+-1CA6; C; 10E6; # GEORGIAN MTAVRULI CAPITAL LETTER GHAN
+-1CA7; C; 10E7; # GEORGIAN MTAVRULI CAPITAL LETTER QAR
+-1CA8; C; 10E8; # GEORGIAN MTAVRULI CAPITAL LETTER SHIN
+-1CA9; C; 10E9; # GEORGIAN MTAVRULI CAPITAL LETTER CHIN
+-1CAA; C; 10EA; # GEORGIAN MTAVRULI CAPITAL LETTER CAN
+-1CAB; C; 10EB; # GEORGIAN MTAVRULI CAPITAL LETTER JIL
+-1CAC; C; 10EC; # GEORGIAN MTAVRULI CAPITAL LETTER CIL
+-1CAD; C; 10ED; # GEORGIAN MTAVRULI CAPITAL LETTER CHAR
+-1CAE; C; 10EE; # GEORGIAN MTAVRULI CAPITAL LETTER XAN
+-1CAF; C; 10EF; # GEORGIAN MTAVRULI CAPITAL LETTER JHAN
+-1CB0; C; 10F0; # GEORGIAN MTAVRULI CAPITAL LETTER HAE
+-1CB1; C; 10F1; # GEORGIAN MTAVRULI CAPITAL LETTER HE
+-1CB2; C; 10F2; # GEORGIAN MTAVRULI CAPITAL LETTER HIE
+-1CB3; C; 10F3; # GEORGIAN MTAVRULI CAPITAL LETTER WE
+-1CB4; C; 10F4; # GEORGIAN MTAVRULI CAPITAL LETTER HAR
+-1CB5; C; 10F5; # GEORGIAN MTAVRULI CAPITAL LETTER HOE
+-1CB6; C; 10F6; # GEORGIAN MTAVRULI CAPITAL LETTER FI
+-1CB7; C; 10F7; # GEORGIAN MTAVRULI CAPITAL LETTER YN
+-1CB8; C; 10F8; # GEORGIAN MTAVRULI CAPITAL LETTER ELIFI
+-1CB9; C; 10F9; # GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN
+-1CBA; C; 10FA; # GEORGIAN MTAVRULI CAPITAL LETTER AIN
+-1CBD; C; 10FD; # GEORGIAN MTAVRULI CAPITAL LETTER AEN
+-1CBE; C; 10FE; # GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN
+-1CBF; C; 10FF; # GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+-1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW
+-1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE
+-1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW
+-1E06; C; 1E07; # LATIN CAPITAL LETTER B WITH LINE BELOW
+-1E08; C; 1E09; # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+-1E0A; C; 1E0B; # LATIN CAPITAL LETTER D WITH DOT ABOVE
+-1E0C; C; 1E0D; # LATIN CAPITAL LETTER D WITH DOT BELOW
+-1E0E; C; 1E0F; # LATIN CAPITAL LETTER D WITH LINE BELOW
+-1E10; C; 1E11; # LATIN CAPITAL LETTER D WITH CEDILLA
+-1E12; C; 1E13; # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+-1E14; C; 1E15; # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+-1E16; C; 1E17; # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+-1E18; C; 1E19; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+-1E1A; C; 1E1B; # LATIN CAPITAL LETTER E WITH TILDE BELOW
+-1E1C; C; 1E1D; # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+-1E1E; C; 1E1F; # LATIN CAPITAL LETTER F WITH DOT ABOVE
+-1E20; C; 1E21; # LATIN CAPITAL LETTER G WITH MACRON
+-1E22; C; 1E23; # LATIN CAPITAL LETTER H WITH DOT ABOVE
+-1E24; C; 1E25; # LATIN CAPITAL LETTER H WITH DOT BELOW
+-1E26; C; 1E27; # LATIN CAPITAL LETTER H WITH DIAERESIS
+-1E28; C; 1E29; # LATIN CAPITAL LETTER H WITH CEDILLA
+-1E2A; C; 1E2B; # LATIN CAPITAL LETTER H WITH BREVE BELOW
+-1E2C; C; 1E2D; # LATIN CAPITAL LETTER I WITH TILDE BELOW
+-1E2E; C; 1E2F; # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+-1E30; C; 1E31; # LATIN CAPITAL LETTER K WITH ACUTE
+-1E32; C; 1E33; # LATIN CAPITAL LETTER K WITH DOT BELOW
+-1E34; C; 1E35; # LATIN CAPITAL LETTER K WITH LINE BELOW
+-1E36; C; 1E37; # LATIN CAPITAL LETTER L WITH DOT BELOW
+-1E38; C; 1E39; # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+-1E3A; C; 1E3B; # LATIN CAPITAL LETTER L WITH LINE BELOW
+-1E3C; C; 1E3D; # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+-1E3E; C; 1E3F; # LATIN CAPITAL LETTER M WITH ACUTE
+-1E40; C; 1E41; # LATIN CAPITAL LETTER M WITH DOT ABOVE
+-1E42; C; 1E43; # LATIN CAPITAL LETTER M WITH DOT BELOW
+-1E44; C; 1E45; # LATIN CAPITAL LETTER N WITH DOT ABOVE
+-1E46; C; 1E47; # LATIN CAPITAL LETTER N WITH DOT BELOW
+-1E48; C; 1E49; # LATIN CAPITAL LETTER N WITH LINE BELOW
+-1E4A; C; 1E4B; # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+-1E4C; C; 1E4D; # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+-1E4E; C; 1E4F; # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+-1E50; C; 1E51; # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+-1E52; C; 1E53; # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+-1E54; C; 1E55; # LATIN CAPITAL LETTER P WITH ACUTE
+-1E56; C; 1E57; # LATIN CAPITAL LETTER P WITH DOT ABOVE
+-1E58; C; 1E59; # LATIN CAPITAL LETTER R WITH DOT ABOVE
+-1E5A; C; 1E5B; # LATIN CAPITAL LETTER R WITH DOT BELOW
+-1E5C; C; 1E5D; # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+-1E5E; C; 1E5F; # LATIN CAPITAL LETTER R WITH LINE BELOW
+-1E60; C; 1E61; # LATIN CAPITAL LETTER S WITH DOT ABOVE
+-1E62; C; 1E63; # LATIN CAPITAL LETTER S WITH DOT BELOW
+-1E64; C; 1E65; # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+-1E66; C; 1E67; # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+-1E68; C; 1E69; # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+-1E6A; C; 1E6B; # LATIN CAPITAL LETTER T WITH DOT ABOVE
+-1E6C; C; 1E6D; # LATIN CAPITAL LETTER T WITH DOT BELOW
+-1E6E; C; 1E6F; # LATIN CAPITAL LETTER T WITH LINE BELOW
+-1E70; C; 1E71; # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+-1E72; C; 1E73; # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+-1E74; C; 1E75; # LATIN CAPITAL LETTER U WITH TILDE BELOW
+-1E76; C; 1E77; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+-1E78; C; 1E79; # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+-1E7A; C; 1E7B; # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+-1E7C; C; 1E7D; # LATIN CAPITAL LETTER V WITH TILDE
+-1E7E; C; 1E7F; # LATIN CAPITAL LETTER V WITH DOT BELOW
+-1E80; C; 1E81; # LATIN CAPITAL LETTER W WITH GRAVE
+-1E82; C; 1E83; # LATIN CAPITAL LETTER W WITH ACUTE
+-1E84; C; 1E85; # LATIN CAPITAL LETTER W WITH DIAERESIS
+-1E86; C; 1E87; # LATIN CAPITAL LETTER W WITH DOT ABOVE
+-1E88; C; 1E89; # LATIN CAPITAL LETTER W WITH DOT BELOW
+-1E8A; C; 1E8B; # LATIN CAPITAL LETTER X WITH DOT ABOVE
+-1E8C; C; 1E8D; # LATIN CAPITAL LETTER X WITH DIAERESIS
+-1E8E; C; 1E8F; # LATIN CAPITAL LETTER Y WITH DOT ABOVE
+-1E90; C; 1E91; # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+-1E92; C; 1E93; # LATIN CAPITAL LETTER Z WITH DOT BELOW
+-1E94; C; 1E95; # LATIN CAPITAL LETTER Z WITH LINE BELOW
+-1E96; F; 0068 0331; # LATIN SMALL LETTER H WITH LINE BELOW
+-1E97; F; 0074 0308; # LATIN SMALL LETTER T WITH DIAERESIS
+-1E98; F; 0077 030A; # LATIN SMALL LETTER W WITH RING ABOVE
+-1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE
+-1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING
+-1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE
+-1E9E; F; 0073 0073; # LATIN CAPITAL LETTER SHARP S
+-1E9E; S; 00DF; # LATIN CAPITAL LETTER SHARP S
+-1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW
+-1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE
+-1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+-1EA6; C; 1EA7; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+-1EA8; C; 1EA9; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+-1EAA; C; 1EAB; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+-1EAC; C; 1EAD; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+-1EAE; C; 1EAF; # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+-1EB0; C; 1EB1; # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+-1EB2; C; 1EB3; # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+-1EB4; C; 1EB5; # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+-1EB6; C; 1EB7; # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+-1EB8; C; 1EB9; # LATIN CAPITAL LETTER E WITH DOT BELOW
+-1EBA; C; 1EBB; # LATIN CAPITAL LETTER E WITH HOOK ABOVE
+-1EBC; C; 1EBD; # LATIN CAPITAL LETTER E WITH TILDE
+-1EBE; C; 1EBF; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+-1EC0; C; 1EC1; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+-1EC2; C; 1EC3; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+-1EC4; C; 1EC5; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+-1EC6; C; 1EC7; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+-1EC8; C; 1EC9; # LATIN CAPITAL LETTER I WITH HOOK ABOVE
+-1ECA; C; 1ECB; # LATIN CAPITAL LETTER I WITH DOT BELOW
+-1ECC; C; 1ECD; # LATIN CAPITAL LETTER O WITH DOT BELOW
+-1ECE; C; 1ECF; # LATIN CAPITAL LETTER O WITH HOOK ABOVE
+-1ED0; C; 1ED1; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+-1ED2; C; 1ED3; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+-1ED4; C; 1ED5; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+-1ED6; C; 1ED7; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+-1ED8; C; 1ED9; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+-1EDA; C; 1EDB; # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+-1EDC; C; 1EDD; # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+-1EDE; C; 1EDF; # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+-1EE0; C; 1EE1; # LATIN CAPITAL LETTER O WITH HORN AND TILDE
+-1EE2; C; 1EE3; # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+-1EE4; C; 1EE5; # LATIN CAPITAL LETTER U WITH DOT BELOW
+-1EE6; C; 1EE7; # LATIN CAPITAL LETTER U WITH HOOK ABOVE
+-1EE8; C; 1EE9; # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+-1EEA; C; 1EEB; # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+-1EEC; C; 1EED; # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+-1EEE; C; 1EEF; # LATIN CAPITAL LETTER U WITH HORN AND TILDE
+-1EF0; C; 1EF1; # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+-1EF2; C; 1EF3; # LATIN CAPITAL LETTER Y WITH GRAVE
+-1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW
+-1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+-1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE
+-1EFA; C; 1EFB; # LATIN CAPITAL LETTER MIDDLE-WELSH LL
+-1EFC; C; 1EFD; # LATIN CAPITAL LETTER MIDDLE-WELSH V
+-1EFE; C; 1EFF; # LATIN CAPITAL LETTER Y WITH LOOP
+-1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI
+-1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA
+-1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+-1F0B; C; 1F03; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+-1F0C; C; 1F04; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+-1F0D; C; 1F05; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+-1F0E; C; 1F06; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+-1F0F; C; 1F07; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+-1F18; C; 1F10; # GREEK CAPITAL LETTER EPSILON WITH PSILI
+-1F19; C; 1F11; # GREEK CAPITAL LETTER EPSILON WITH DASIA
+-1F1A; C; 1F12; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+-1F1B; C; 1F13; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+-1F1C; C; 1F14; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+-1F1D; C; 1F15; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+-1F28; C; 1F20; # GREEK CAPITAL LETTER ETA WITH PSILI
+-1F29; C; 1F21; # GREEK CAPITAL LETTER ETA WITH DASIA
+-1F2A; C; 1F22; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+-1F2B; C; 1F23; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+-1F2C; C; 1F24; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+-1F2D; C; 1F25; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+-1F2E; C; 1F26; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+-1F2F; C; 1F27; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+-1F38; C; 1F30; # GREEK CAPITAL LETTER IOTA WITH PSILI
+-1F39; C; 1F31; # GREEK CAPITAL LETTER IOTA WITH DASIA
+-1F3A; C; 1F32; # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+-1F3B; C; 1F33; # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+-1F3C; C; 1F34; # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+-1F3D; C; 1F35; # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+-1F3E; C; 1F36; # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+-1F3F; C; 1F37; # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+-1F48; C; 1F40; # GREEK CAPITAL LETTER OMICRON WITH PSILI
+-1F49; C; 1F41; # GREEK CAPITAL LETTER OMICRON WITH DASIA
+-1F4A; C; 1F42; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+-1F4B; C; 1F43; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+-1F4C; C; 1F44; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+-1F4D; C; 1F45; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+-1F50; F; 03C5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI
+-1F52; F; 03C5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+-1F54; F; 03C5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+-1F56; F; 03C5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+-1F59; C; 1F51; # GREEK CAPITAL LETTER UPSILON WITH DASIA
+-1F5B; C; 1F53; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+-1F5D; C; 1F55; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+-1F5F; C; 1F57; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+-1F68; C; 1F60; # GREEK CAPITAL LETTER OMEGA WITH PSILI
+-1F69; C; 1F61; # GREEK CAPITAL LETTER OMEGA WITH DASIA
+-1F6A; C; 1F62; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+-1F6B; C; 1F63; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+-1F6C; C; 1F64; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+-1F6D; C; 1F65; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+-1F6E; C; 1F66; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+-1F6F; C; 1F67; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+-1F80; F; 1F00 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+-1F81; F; 1F01 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+-1F82; F; 1F02 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+-1F83; F; 1F03 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+-1F84; F; 1F04 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+-1F85; F; 1F05 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+-1F86; F; 1F06 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+-1F87; F; 1F07 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+-1F88; F; 1F00 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+-1F88; S; 1F80; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+-1F89; F; 1F01 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+-1F89; S; 1F81; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+-1F8A; F; 1F02 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+-1F8A; S; 1F82; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+-1F8B; F; 1F03 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+-1F8B; S; 1F83; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+-1F8C; F; 1F04 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+-1F8C; S; 1F84; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+-1F8D; F; 1F05 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+-1F8D; S; 1F85; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+-1F8E; F; 1F06 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+-1F8E; S; 1F86; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+-1F8F; F; 1F07 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+-1F8F; S; 1F87; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+-1F90; F; 1F20 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+-1F91; F; 1F21 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+-1F92; F; 1F22 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+-1F93; F; 1F23 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+-1F94; F; 1F24 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+-1F95; F; 1F25 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+-1F96; F; 1F26 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+-1F97; F; 1F27 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+-1F98; F; 1F20 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+-1F98; S; 1F90; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+-1F99; F; 1F21 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+-1F99; S; 1F91; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+-1F9A; F; 1F22 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+-1F9A; S; 1F92; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+-1F9B; F; 1F23 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+-1F9B; S; 1F93; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+-1F9C; F; 1F24 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+-1F9C; S; 1F94; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+-1F9D; F; 1F25 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+-1F9D; S; 1F95; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+-1F9E; F; 1F26 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+-1F9E; S; 1F96; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+-1F9F; F; 1F27 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+-1F9F; S; 1F97; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+-1FA0; F; 1F60 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+-1FA1; F; 1F61 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+-1FA2; F; 1F62 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+-1FA3; F; 1F63 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+-1FA4; F; 1F64 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+-1FA5; F; 1F65 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+-1FA6; F; 1F66 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+-1FA7; F; 1F67 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+-1FA8; F; 1F60 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+-1FA8; S; 1FA0; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+-1FA9; F; 1F61 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+-1FA9; S; 1FA1; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+-1FAA; F; 1F62 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+-1FAA; S; 1FA2; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+-1FAB; F; 1F63 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+-1FAB; S; 1FA3; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+-1FAC; F; 1F64 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+-1FAC; S; 1FA4; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+-1FAD; F; 1F65 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+-1FAD; S; 1FA5; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+-1FAE; F; 1F66 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+-1FAE; S; 1FA6; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+-1FAF; F; 1F67 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+-1FAF; S; 1FA7; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+-1FB2; F; 1F70 03B9; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+-1FB3; F; 03B1 03B9; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+-1FB4; F; 03AC 03B9; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+-1FB6; F; 03B1 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+-1FB7; F; 03B1 0342 03B9; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+-1FB8; C; 1FB0; # GREEK CAPITAL LETTER ALPHA WITH VRACHY
+-1FB9; C; 1FB1; # GREEK CAPITAL LETTER ALPHA WITH MACRON
+-1FBA; C; 1F70; # GREEK CAPITAL LETTER ALPHA WITH VARIA
+-1FBB; C; 1F71; # GREEK CAPITAL LETTER ALPHA WITH OXIA
+-1FBC; F; 03B1 03B9; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+-1FBC; S; 1FB3; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+-1FBE; C; 03B9; # GREEK PROSGEGRAMMENI
+-1FC2; F; 1F74 03B9; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+-1FC3; F; 03B7 03B9; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+-1FC4; F; 03AE 03B9; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+-1FC6; F; 03B7 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI
+-1FC7; F; 03B7 0342 03B9; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+-1FC8; C; 1F72; # GREEK CAPITAL LETTER EPSILON WITH VARIA
+-1FC9; C; 1F73; # GREEK CAPITAL LETTER EPSILON WITH OXIA
+-1FCA; C; 1F74; # GREEK CAPITAL LETTER ETA WITH VARIA
+-1FCB; C; 1F75; # GREEK CAPITAL LETTER ETA WITH OXIA
+-1FCC; F; 03B7 03B9; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+-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
+-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
+-1FD9; C; 1FD1; # GREEK CAPITAL LETTER IOTA WITH MACRON
+-1FDA; C; 1F76; # GREEK CAPITAL LETTER IOTA WITH VARIA
+-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
+-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
+-1FE8; C; 1FE0; # GREEK CAPITAL LETTER UPSILON WITH VRACHY
+-1FE9; C; 1FE1; # GREEK CAPITAL LETTER UPSILON WITH MACRON
+-1FEA; C; 1F7A; # GREEK CAPITAL LETTER UPSILON WITH VARIA
+-1FEB; C; 1F7B; # GREEK CAPITAL LETTER UPSILON WITH OXIA
+-1FEC; C; 1FE5; # GREEK CAPITAL LETTER RHO WITH DASIA
+-1FF2; F; 1F7C 03B9; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+-1FF3; F; 03C9 03B9; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+-1FF4; F; 03CE 03B9; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+-1FF6; F; 03C9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+-1FF7; F; 03C9 0342 03B9; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+-1FF8; C; 1F78; # GREEK CAPITAL LETTER OMICRON WITH VARIA
+-1FF9; C; 1F79; # GREEK CAPITAL LETTER OMICRON WITH OXIA
+-1FFA; C; 1F7C; # GREEK CAPITAL LETTER OMEGA WITH VARIA
+-1FFB; C; 1F7D; # GREEK CAPITAL LETTER OMEGA WITH OXIA
+-1FFC; F; 03C9 03B9; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+-1FFC; S; 1FF3; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+-2126; C; 03C9; # OHM SIGN
+-212A; C; 006B; # KELVIN SIGN
+-212B; C; 00E5; # ANGSTROM SIGN
+-2132; C; 214E; # TURNED CAPITAL F
+-2160; C; 2170; # ROMAN NUMERAL ONE
+-2161; C; 2171; # ROMAN NUMERAL TWO
+-2162; C; 2172; # ROMAN NUMERAL THREE
+-2163; C; 2173; # ROMAN NUMERAL FOUR
+-2164; C; 2174; # ROMAN NUMERAL FIVE
+-2165; C; 2175; # ROMAN NUMERAL SIX
+-2166; C; 2176; # ROMAN NUMERAL SEVEN
+-2167; C; 2177; # ROMAN NUMERAL EIGHT
+-2168; C; 2178; # ROMAN NUMERAL NINE
+-2169; C; 2179; # ROMAN NUMERAL TEN
+-216A; C; 217A; # ROMAN NUMERAL ELEVEN
+-216B; C; 217B; # ROMAN NUMERAL TWELVE
+-216C; C; 217C; # ROMAN NUMERAL FIFTY
+-216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED
+-216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED
+-216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND
+-2183; C; 2184; # ROMAN NUMERAL REVERSED ONE HUNDRED
+-24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A
+-24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B
+-24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C
+-24B9; C; 24D3; # CIRCLED LATIN CAPITAL LETTER D
+-24BA; C; 24D4; # CIRCLED LATIN CAPITAL LETTER E
+-24BB; C; 24D5; # CIRCLED LATIN CAPITAL LETTER F
+-24BC; C; 24D6; # CIRCLED LATIN CAPITAL LETTER G
+-24BD; C; 24D7; # CIRCLED LATIN CAPITAL LETTER H
+-24BE; C; 24D8; # CIRCLED LATIN CAPITAL LETTER I
+-24BF; C; 24D9; # CIRCLED LATIN CAPITAL LETTER J
+-24C0; C; 24DA; # CIRCLED LATIN CAPITAL LETTER K
+-24C1; C; 24DB; # CIRCLED LATIN CAPITAL LETTER L
+-24C2; C; 24DC; # CIRCLED LATIN CAPITAL LETTER M
+-24C3; C; 24DD; # CIRCLED LATIN CAPITAL LETTER N
+-24C4; C; 24DE; # CIRCLED LATIN CAPITAL LETTER O
+-24C5; C; 24DF; # CIRCLED LATIN CAPITAL LETTER P
+-24C6; C; 24E0; # CIRCLED LATIN CAPITAL LETTER Q
+-24C7; C; 24E1; # CIRCLED LATIN CAPITAL LETTER R
+-24C8; C; 24E2; # CIRCLED LATIN CAPITAL LETTER S
+-24C9; C; 24E3; # CIRCLED LATIN CAPITAL LETTER T
+-24CA; C; 24E4; # CIRCLED LATIN CAPITAL LETTER U
+-24CB; C; 24E5; # CIRCLED LATIN CAPITAL LETTER V
+-24CC; C; 24E6; # CIRCLED LATIN CAPITAL LETTER W
+-24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X
+-24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y
+-24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z
+-2C00; C; 2C30; # GLAGOLITIC CAPITAL LETTER AZU
+-2C01; C; 2C31; # GLAGOLITIC CAPITAL LETTER BUKY
+-2C02; C; 2C32; # GLAGOLITIC CAPITAL LETTER VEDE
+-2C03; C; 2C33; # GLAGOLITIC CAPITAL LETTER GLAGOLI
+-2C04; C; 2C34; # GLAGOLITIC CAPITAL LETTER DOBRO
+-2C05; C; 2C35; # GLAGOLITIC CAPITAL LETTER YESTU
+-2C06; C; 2C36; # GLAGOLITIC CAPITAL LETTER ZHIVETE
+-2C07; C; 2C37; # GLAGOLITIC CAPITAL LETTER DZELO
+-2C08; C; 2C38; # GLAGOLITIC CAPITAL LETTER ZEMLJA
+-2C09; C; 2C39; # GLAGOLITIC CAPITAL LETTER IZHE
+-2C0A; C; 2C3A; # GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+-2C0B; C; 2C3B; # GLAGOLITIC CAPITAL LETTER I
+-2C0C; C; 2C3C; # GLAGOLITIC CAPITAL LETTER DJERVI
+-2C0D; C; 2C3D; # GLAGOLITIC CAPITAL LETTER KAKO
+-2C0E; C; 2C3E; # GLAGOLITIC CAPITAL LETTER LJUDIJE
+-2C0F; C; 2C3F; # GLAGOLITIC CAPITAL LETTER MYSLITE
+-2C10; C; 2C40; # GLAGOLITIC CAPITAL LETTER NASHI
+-2C11; C; 2C41; # GLAGOLITIC CAPITAL LETTER ONU
+-2C12; C; 2C42; # GLAGOLITIC CAPITAL LETTER POKOJI
+-2C13; C; 2C43; # GLAGOLITIC CAPITAL LETTER RITSI
+-2C14; C; 2C44; # GLAGOLITIC CAPITAL LETTER SLOVO
+-2C15; C; 2C45; # GLAGOLITIC CAPITAL LETTER TVRIDO
+-2C16; C; 2C46; # GLAGOLITIC CAPITAL LETTER UKU
+-2C17; C; 2C47; # GLAGOLITIC CAPITAL LETTER FRITU
+-2C18; C; 2C48; # GLAGOLITIC CAPITAL LETTER HERU
+-2C19; C; 2C49; # GLAGOLITIC CAPITAL LETTER OTU
+-2C1A; C; 2C4A; # GLAGOLITIC CAPITAL LETTER PE
+-2C1B; C; 2C4B; # GLAGOLITIC CAPITAL LETTER SHTA
+-2C1C; C; 2C4C; # GLAGOLITIC CAPITAL LETTER TSI
+-2C1D; C; 2C4D; # GLAGOLITIC CAPITAL LETTER CHRIVI
+-2C1E; C; 2C4E; # GLAGOLITIC CAPITAL LETTER SHA
+-2C1F; C; 2C4F; # GLAGOLITIC CAPITAL LETTER YERU
+-2C20; C; 2C50; # GLAGOLITIC CAPITAL LETTER YERI
+-2C21; C; 2C51; # GLAGOLITIC CAPITAL LETTER YATI
+-2C22; C; 2C52; # GLAGOLITIC CAPITAL LETTER SPIDERY HA
+-2C23; C; 2C53; # GLAGOLITIC CAPITAL LETTER YU
+-2C24; C; 2C54; # GLAGOLITIC CAPITAL LETTER SMALL YUS
+-2C25; C; 2C55; # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+-2C26; C; 2C56; # GLAGOLITIC CAPITAL LETTER YO
+-2C27; C; 2C57; # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+-2C28; C; 2C58; # GLAGOLITIC CAPITAL LETTER BIG YUS
+-2C29; C; 2C59; # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+-2C2A; C; 2C5A; # GLAGOLITIC CAPITAL LETTER FITA
+-2C2B; C; 2C5B; # GLAGOLITIC CAPITAL LETTER IZHITSA
+-2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC
+-2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+-2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+-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
+-2C64; C; 027D; # LATIN CAPITAL LETTER R WITH TAIL
+-2C67; C; 2C68; # LATIN CAPITAL LETTER H WITH DESCENDER
+-2C69; C; 2C6A; # LATIN CAPITAL LETTER K WITH DESCENDER
+-2C6B; C; 2C6C; # LATIN CAPITAL LETTER Z WITH DESCENDER
+-2C6D; C; 0251; # LATIN CAPITAL LETTER ALPHA
+-2C6E; C; 0271; # LATIN CAPITAL LETTER M WITH HOOK
+-2C6F; C; 0250; # LATIN CAPITAL LETTER TURNED A
+-2C70; C; 0252; # LATIN CAPITAL LETTER TURNED ALPHA
+-2C72; C; 2C73; # LATIN CAPITAL LETTER W WITH HOOK
+-2C75; C; 2C76; # LATIN CAPITAL LETTER HALF H
+-2C7E; C; 023F; # LATIN CAPITAL LETTER S WITH SWASH TAIL
+-2C7F; C; 0240; # LATIN CAPITAL LETTER Z WITH SWASH TAIL
+-2C80; C; 2C81; # COPTIC CAPITAL LETTER ALFA
+-2C82; C; 2C83; # COPTIC CAPITAL LETTER VIDA
+-2C84; C; 2C85; # COPTIC CAPITAL LETTER GAMMA
+-2C86; C; 2C87; # COPTIC CAPITAL LETTER DALDA
+-2C88; C; 2C89; # COPTIC CAPITAL LETTER EIE
+-2C8A; C; 2C8B; # COPTIC CAPITAL LETTER SOU
+-2C8C; C; 2C8D; # COPTIC CAPITAL LETTER ZATA
+-2C8E; C; 2C8F; # COPTIC CAPITAL LETTER HATE
+-2C90; C; 2C91; # COPTIC CAPITAL LETTER THETHE
+-2C92; C; 2C93; # COPTIC CAPITAL LETTER IAUDA
+-2C94; C; 2C95; # COPTIC CAPITAL LETTER KAPA
+-2C96; C; 2C97; # COPTIC CAPITAL LETTER LAULA
+-2C98; C; 2C99; # COPTIC CAPITAL LETTER MI
+-2C9A; C; 2C9B; # COPTIC CAPITAL LETTER NI
+-2C9C; C; 2C9D; # COPTIC CAPITAL LETTER KSI
+-2C9E; C; 2C9F; # COPTIC CAPITAL LETTER O
+-2CA0; C; 2CA1; # COPTIC CAPITAL LETTER PI
+-2CA2; C; 2CA3; # COPTIC CAPITAL LETTER RO
+-2CA4; C; 2CA5; # COPTIC CAPITAL LETTER SIMA
+-2CA6; C; 2CA7; # COPTIC CAPITAL LETTER TAU
+-2CA8; C; 2CA9; # COPTIC CAPITAL LETTER UA
+-2CAA; C; 2CAB; # COPTIC CAPITAL LETTER FI
+-2CAC; C; 2CAD; # COPTIC CAPITAL LETTER KHI
+-2CAE; C; 2CAF; # COPTIC CAPITAL LETTER PSI
+-2CB0; C; 2CB1; # COPTIC CAPITAL LETTER OOU
+-2CB2; C; 2CB3; # COPTIC CAPITAL LETTER DIALECT-P ALEF
+-2CB4; C; 2CB5; # COPTIC CAPITAL LETTER OLD COPTIC AIN
+-2CB6; C; 2CB7; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+-2CB8; C; 2CB9; # COPTIC CAPITAL LETTER DIALECT-P KAPA
+-2CBA; C; 2CBB; # COPTIC CAPITAL LETTER DIALECT-P NI
+-2CBC; C; 2CBD; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+-2CBE; C; 2CBF; # COPTIC CAPITAL LETTER OLD COPTIC OOU
+-2CC0; C; 2CC1; # COPTIC CAPITAL LETTER SAMPI
+-2CC2; C; 2CC3; # COPTIC CAPITAL LETTER CROSSED SHEI
+-2CC4; C; 2CC5; # COPTIC CAPITAL LETTER OLD COPTIC SHEI
+-2CC6; C; 2CC7; # COPTIC CAPITAL LETTER OLD COPTIC ESH
+-2CC8; C; 2CC9; # COPTIC CAPITAL LETTER AKHMIMIC KHEI
+-2CCA; C; 2CCB; # COPTIC CAPITAL LETTER DIALECT-P HORI
+-2CCC; C; 2CCD; # COPTIC CAPITAL LETTER OLD COPTIC HORI
+-2CCE; C; 2CCF; # COPTIC CAPITAL LETTER OLD COPTIC HA
+-2CD0; C; 2CD1; # COPTIC CAPITAL LETTER L-SHAPED HA
+-2CD2; C; 2CD3; # COPTIC CAPITAL LETTER OLD COPTIC HEI
+-2CD4; C; 2CD5; # COPTIC CAPITAL LETTER OLD COPTIC HAT
+-2CD6; C; 2CD7; # COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+-2CD8; C; 2CD9; # COPTIC CAPITAL LETTER OLD COPTIC DJA
+-2CDA; C; 2CDB; # COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+-2CDC; C; 2CDD; # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+-2CDE; C; 2CDF; # COPTIC CAPITAL LETTER OLD NUBIAN NGI
+-2CE0; C; 2CE1; # COPTIC CAPITAL LETTER OLD NUBIAN NYI
+-2CE2; C; 2CE3; # COPTIC CAPITAL LETTER OLD NUBIAN WAU
+-2CEB; C; 2CEC; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+-2CED; C; 2CEE; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+-2CF2; C; 2CF3; # COPTIC CAPITAL LETTER BOHAIRIC KHEI
+-A640; C; A641; # CYRILLIC CAPITAL LETTER ZEMLYA
+-A642; C; A643; # CYRILLIC CAPITAL LETTER DZELO
+-A644; C; A645; # CYRILLIC CAPITAL LETTER REVERSED DZE
+-A646; C; A647; # CYRILLIC CAPITAL LETTER IOTA
+-A648; C; A649; # CYRILLIC CAPITAL LETTER DJERV
+-A64A; C; A64B; # CYRILLIC CAPITAL LETTER MONOGRAPH UK
+-A64C; C; A64D; # CYRILLIC CAPITAL LETTER BROAD OMEGA
+-A64E; C; A64F; # CYRILLIC CAPITAL LETTER NEUTRAL YER
+-A650; C; A651; # CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+-A652; C; A653; # CYRILLIC CAPITAL LETTER IOTIFIED YAT
+-A654; C; A655; # CYRILLIC CAPITAL LETTER REVERSED YU
+-A656; C; A657; # CYRILLIC CAPITAL LETTER IOTIFIED A
+-A658; C; A659; # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+-A65A; C; A65B; # CYRILLIC CAPITAL LETTER BLENDED YUS
+-A65C; C; A65D; # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+-A65E; C; A65F; # CYRILLIC CAPITAL LETTER YN
+-A660; C; A661; # CYRILLIC CAPITAL LETTER REVERSED TSE
+-A662; C; A663; # CYRILLIC CAPITAL LETTER SOFT DE
+-A664; C; A665; # CYRILLIC CAPITAL LETTER SOFT EL
+-A666; C; A667; # CYRILLIC CAPITAL LETTER SOFT EM
+-A668; C; A669; # CYRILLIC CAPITAL LETTER MONOCULAR O
+-A66A; C; A66B; # CYRILLIC CAPITAL LETTER BINOCULAR O
+-A66C; C; A66D; # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+-A680; C; A681; # CYRILLIC CAPITAL LETTER DWE
+-A682; C; A683; # CYRILLIC CAPITAL LETTER DZWE
+-A684; C; A685; # CYRILLIC CAPITAL LETTER ZHWE
+-A686; C; A687; # CYRILLIC CAPITAL LETTER CCHE
+-A688; C; A689; # CYRILLIC CAPITAL LETTER DZZE
+-A68A; C; A68B; # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+-A68C; C; A68D; # CYRILLIC CAPITAL LETTER TWE
+-A68E; C; A68F; # CYRILLIC CAPITAL LETTER TSWE
+-A690; C; A691; # CYRILLIC CAPITAL LETTER TSSE
+-A692; C; A693; # CYRILLIC CAPITAL LETTER TCHE
+-A694; C; A695; # CYRILLIC CAPITAL LETTER HWE
+-A696; C; A697; # CYRILLIC CAPITAL LETTER SHWE
+-A698; C; A699; # CYRILLIC CAPITAL LETTER DOUBLE O
+-A69A; C; A69B; # CYRILLIC CAPITAL LETTER CROSSED O
+-A722; C; A723; # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+-A724; C; A725; # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+-A726; C; A727; # LATIN CAPITAL LETTER HENG
+-A728; C; A729; # LATIN CAPITAL LETTER TZ
+-A72A; C; A72B; # LATIN CAPITAL LETTER TRESILLO
+-A72C; C; A72D; # LATIN CAPITAL LETTER CUATRILLO
+-A72E; C; A72F; # LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+-A732; C; A733; # LATIN CAPITAL LETTER AA
+-A734; C; A735; # LATIN CAPITAL LETTER AO
+-A736; C; A737; # LATIN CAPITAL LETTER AU
+-A738; C; A739; # LATIN CAPITAL LETTER AV
+-A73A; C; A73B; # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+-A73C; C; A73D; # LATIN CAPITAL LETTER AY
+-A73E; C; A73F; # LATIN CAPITAL LETTER REVERSED C WITH DOT
+-A740; C; A741; # LATIN CAPITAL LETTER K WITH STROKE
+-A742; C; A743; # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+-A744; C; A745; # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+-A746; C; A747; # LATIN CAPITAL LETTER BROKEN L
+-A748; C; A749; # LATIN CAPITAL LETTER L WITH HIGH STROKE
+-A74A; C; A74B; # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+-A74C; C; A74D; # LATIN CAPITAL LETTER O WITH LOOP
+-A74E; C; A74F; # LATIN CAPITAL LETTER OO
+-A750; C; A751; # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+-A752; C; A753; # LATIN CAPITAL LETTER P WITH FLOURISH
+-A754; C; A755; # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+-A756; C; A757; # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+-A758; C; A759; # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+-A75A; C; A75B; # LATIN CAPITAL LETTER R ROTUNDA
+-A75C; C; A75D; # LATIN CAPITAL LETTER RUM ROTUNDA
+-A75E; C; A75F; # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+-A760; C; A761; # LATIN CAPITAL LETTER VY
+-A762; C; A763; # LATIN CAPITAL LETTER VISIGOTHIC Z
+-A764; C; A765; # LATIN CAPITAL LETTER THORN WITH STROKE
+-A766; C; A767; # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+-A768; C; A769; # LATIN CAPITAL LETTER VEND
+-A76A; C; A76B; # LATIN CAPITAL LETTER ET
+-A76C; C; A76D; # LATIN CAPITAL LETTER IS
+-A76E; C; A76F; # LATIN CAPITAL LETTER CON
+-A779; C; A77A; # LATIN CAPITAL LETTER INSULAR D
+-A77B; C; A77C; # LATIN CAPITAL LETTER INSULAR F
+-A77D; C; 1D79; # LATIN CAPITAL LETTER INSULAR G
+-A77E; C; A77F; # LATIN CAPITAL LETTER TURNED INSULAR G
+-A780; C; A781; # LATIN CAPITAL LETTER TURNED L
+-A782; C; A783; # LATIN CAPITAL LETTER INSULAR R
+-A784; C; A785; # LATIN CAPITAL LETTER INSULAR S
+-A786; C; A787; # LATIN CAPITAL LETTER INSULAR T
+-A78B; C; A78C; # LATIN CAPITAL LETTER SALTILLO
+-A78D; C; 0265; # LATIN CAPITAL LETTER TURNED H
+-A790; C; A791; # LATIN CAPITAL LETTER N WITH DESCENDER
+-A792; C; A793; # LATIN CAPITAL LETTER C WITH BAR
+-A796; C; A797; # LATIN CAPITAL LETTER B WITH FLOURISH
+-A798; C; A799; # LATIN CAPITAL LETTER F WITH STROKE
+-A79A; C; A79B; # LATIN CAPITAL LETTER VOLAPUK AE
+-A79C; C; A79D; # LATIN CAPITAL LETTER VOLAPUK OE
+-A79E; C; A79F; # LATIN CAPITAL LETTER VOLAPUK UE
+-A7A0; C; A7A1; # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
+-A7A2; C; A7A3; # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
+-A7A4; C; A7A5; # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
+-A7A6; C; A7A7; # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
+-A7A8; C; A7A9; # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
+-A7AA; C; 0266; # LATIN CAPITAL LETTER H WITH HOOK
+-A7AB; C; 025C; # LATIN CAPITAL LETTER REVERSED OPEN E
+-A7AC; C; 0261; # LATIN CAPITAL LETTER SCRIPT G
+-A7AD; C; 026C; # LATIN CAPITAL LETTER L WITH BELT
+-A7AE; C; 026A; # LATIN CAPITAL LETTER SMALL CAPITAL I
+-A7B0; C; 029E; # LATIN CAPITAL LETTER TURNED K
+-A7B1; C; 0287; # LATIN CAPITAL LETTER TURNED T
+-A7B2; C; 029D; # LATIN CAPITAL LETTER J WITH CROSSED-TAIL
+-A7B3; C; AB53; # LATIN CAPITAL LETTER CHI
+-A7B4; C; A7B5; # LATIN CAPITAL LETTER BETA
+-A7B6; C; A7B7; # LATIN CAPITAL LETTER OMEGA
+-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
+-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
+-A7F5; C; A7F6; # LATIN CAPITAL LETTER REVERSED HALF H
+-AB70; C; 13A0; # CHEROKEE SMALL LETTER A
+-AB71; C; 13A1; # CHEROKEE SMALL LETTER E
+-AB72; C; 13A2; # CHEROKEE SMALL LETTER I
+-AB73; C; 13A3; # CHEROKEE SMALL LETTER O
+-AB74; C; 13A4; # CHEROKEE SMALL LETTER U
+-AB75; C; 13A5; # CHEROKEE SMALL LETTER V
+-AB76; C; 13A6; # CHEROKEE SMALL LETTER GA
+-AB77; C; 13A7; # CHEROKEE SMALL LETTER KA
+-AB78; C; 13A8; # CHEROKEE SMALL LETTER GE
+-AB79; C; 13A9; # CHEROKEE SMALL LETTER GI
+-AB7A; C; 13AA; # CHEROKEE SMALL LETTER GO
+-AB7B; C; 13AB; # CHEROKEE SMALL LETTER GU
+-AB7C; C; 13AC; # CHEROKEE SMALL LETTER GV
+-AB7D; C; 13AD; # CHEROKEE SMALL LETTER HA
+-AB7E; C; 13AE; # CHEROKEE SMALL LETTER HE
+-AB7F; C; 13AF; # CHEROKEE SMALL LETTER HI
+-AB80; C; 13B0; # CHEROKEE SMALL LETTER HO
+-AB81; C; 13B1; # CHEROKEE SMALL LETTER HU
+-AB82; C; 13B2; # CHEROKEE SMALL LETTER HV
+-AB83; C; 13B3; # CHEROKEE SMALL LETTER LA
+-AB84; C; 13B4; # CHEROKEE SMALL LETTER LE
+-AB85; C; 13B5; # CHEROKEE SMALL LETTER LI
+-AB86; C; 13B6; # CHEROKEE SMALL LETTER LO
+-AB87; C; 13B7; # CHEROKEE SMALL LETTER LU
+-AB88; C; 13B8; # CHEROKEE SMALL LETTER LV
+-AB89; C; 13B9; # CHEROKEE SMALL LETTER MA
+-AB8A; C; 13BA; # CHEROKEE SMALL LETTER ME
+-AB8B; C; 13BB; # CHEROKEE SMALL LETTER MI
+-AB8C; C; 13BC; # CHEROKEE SMALL LETTER MO
+-AB8D; C; 13BD; # CHEROKEE SMALL LETTER MU
+-AB8E; C; 13BE; # CHEROKEE SMALL LETTER NA
+-AB8F; C; 13BF; # CHEROKEE SMALL LETTER HNA
+-AB90; C; 13C0; # CHEROKEE SMALL LETTER NAH
+-AB91; C; 13C1; # CHEROKEE SMALL LETTER NE
+-AB92; C; 13C2; # CHEROKEE SMALL LETTER NI
+-AB93; C; 13C3; # CHEROKEE SMALL LETTER NO
+-AB94; C; 13C4; # CHEROKEE SMALL LETTER NU
+-AB95; C; 13C5; # CHEROKEE SMALL LETTER NV
+-AB96; C; 13C6; # CHEROKEE SMALL LETTER QUA
+-AB97; C; 13C7; # CHEROKEE SMALL LETTER QUE
+-AB98; C; 13C8; # CHEROKEE SMALL LETTER QUI
+-AB99; C; 13C9; # CHEROKEE SMALL LETTER QUO
+-AB9A; C; 13CA; # CHEROKEE SMALL LETTER QUU
+-AB9B; C; 13CB; # CHEROKEE SMALL LETTER QUV
+-AB9C; C; 13CC; # CHEROKEE SMALL LETTER SA
+-AB9D; C; 13CD; # CHEROKEE SMALL LETTER S
+-AB9E; C; 13CE; # CHEROKEE SMALL LETTER SE
+-AB9F; C; 13CF; # CHEROKEE SMALL LETTER SI
+-ABA0; C; 13D0; # CHEROKEE SMALL LETTER SO
+-ABA1; C; 13D1; # CHEROKEE SMALL LETTER SU
+-ABA2; C; 13D2; # CHEROKEE SMALL LETTER SV
+-ABA3; C; 13D3; # CHEROKEE SMALL LETTER DA
+-ABA4; C; 13D4; # CHEROKEE SMALL LETTER TA
+-ABA5; C; 13D5; # CHEROKEE SMALL LETTER DE
+-ABA6; C; 13D6; # CHEROKEE SMALL LETTER TE
+-ABA7; C; 13D7; # CHEROKEE SMALL LETTER DI
+-ABA8; C; 13D8; # CHEROKEE SMALL LETTER TI
+-ABA9; C; 13D9; # CHEROKEE SMALL LETTER DO
+-ABAA; C; 13DA; # CHEROKEE SMALL LETTER DU
+-ABAB; C; 13DB; # CHEROKEE SMALL LETTER DV
+-ABAC; C; 13DC; # CHEROKEE SMALL LETTER DLA
+-ABAD; C; 13DD; # CHEROKEE SMALL LETTER TLA
+-ABAE; C; 13DE; # CHEROKEE SMALL LETTER TLE
+-ABAF; C; 13DF; # CHEROKEE SMALL LETTER TLI
+-ABB0; C; 13E0; # CHEROKEE SMALL LETTER TLO
+-ABB1; C; 13E1; # CHEROKEE SMALL LETTER TLU
+-ABB2; C; 13E2; # CHEROKEE SMALL LETTER TLV
+-ABB3; C; 13E3; # CHEROKEE SMALL LETTER TSA
+-ABB4; C; 13E4; # CHEROKEE SMALL LETTER TSE
+-ABB5; C; 13E5; # CHEROKEE SMALL LETTER TSI
+-ABB6; C; 13E6; # CHEROKEE SMALL LETTER TSO
+-ABB7; C; 13E7; # CHEROKEE SMALL LETTER TSU
+-ABB8; C; 13E8; # CHEROKEE SMALL LETTER TSV
+-ABB9; C; 13E9; # CHEROKEE SMALL LETTER WA
+-ABBA; C; 13EA; # CHEROKEE SMALL LETTER WE
+-ABBB; C; 13EB; # CHEROKEE SMALL LETTER WI
+-ABBC; C; 13EC; # CHEROKEE SMALL LETTER WO
+-ABBD; C; 13ED; # CHEROKEE SMALL LETTER WU
+-ABBE; C; 13EE; # CHEROKEE SMALL LETTER WV
+-ABBF; C; 13EF; # CHEROKEE SMALL LETTER YA
+-FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF
+-FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI
+-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
+-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
+-FB15; F; 0574 056B; # ARMENIAN SMALL LIGATURE MEN INI
+-FB16; F; 057E 0576; # ARMENIAN SMALL LIGATURE VEW NOW
+-FB17; F; 0574 056D; # ARMENIAN SMALL LIGATURE MEN XEH
+-FF21; C; FF41; # FULLWIDTH LATIN CAPITAL LETTER A
+-FF22; C; FF42; # FULLWIDTH LATIN CAPITAL LETTER B
+-FF23; C; FF43; # FULLWIDTH LATIN CAPITAL LETTER C
+-FF24; C; FF44; # FULLWIDTH LATIN CAPITAL LETTER D
+-FF25; C; FF45; # FULLWIDTH LATIN CAPITAL LETTER E
+-FF26; C; FF46; # FULLWIDTH LATIN CAPITAL LETTER F
+-FF27; C; FF47; # FULLWIDTH LATIN CAPITAL LETTER G
+-FF28; C; FF48; # FULLWIDTH LATIN CAPITAL LETTER H
+-FF29; C; FF49; # FULLWIDTH LATIN CAPITAL LETTER I
+-FF2A; C; FF4A; # FULLWIDTH LATIN CAPITAL LETTER J
+-FF2B; C; FF4B; # FULLWIDTH LATIN CAPITAL LETTER K
+-FF2C; C; FF4C; # FULLWIDTH LATIN CAPITAL LETTER L
+-FF2D; C; FF4D; # FULLWIDTH LATIN CAPITAL LETTER M
+-FF2E; C; FF4E; # FULLWIDTH LATIN CAPITAL LETTER N
+-FF2F; C; FF4F; # FULLWIDTH LATIN CAPITAL LETTER O
+-FF30; C; FF50; # FULLWIDTH LATIN CAPITAL LETTER P
+-FF31; C; FF51; # FULLWIDTH LATIN CAPITAL LETTER Q
+-FF32; C; FF52; # FULLWIDTH LATIN CAPITAL LETTER R
+-FF33; C; FF53; # FULLWIDTH LATIN CAPITAL LETTER S
+-FF34; C; FF54; # FULLWIDTH LATIN CAPITAL LETTER T
+-FF35; C; FF55; # FULLWIDTH LATIN CAPITAL LETTER U
+-FF36; C; FF56; # FULLWIDTH LATIN CAPITAL LETTER V
+-FF37; C; FF57; # FULLWIDTH LATIN CAPITAL LETTER W
+-FF38; C; FF58; # FULLWIDTH LATIN CAPITAL LETTER X
+-FF39; C; FF59; # FULLWIDTH LATIN CAPITAL LETTER Y
+-FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z
+-10400; C; 10428; # DESERET CAPITAL LETTER LONG I
+-10401; C; 10429; # DESERET CAPITAL LETTER LONG E
+-10402; C; 1042A; # DESERET CAPITAL LETTER LONG A
+-10403; C; 1042B; # DESERET CAPITAL LETTER LONG AH
+-10404; C; 1042C; # DESERET CAPITAL LETTER LONG O
+-10405; C; 1042D; # DESERET CAPITAL LETTER LONG OO
+-10406; C; 1042E; # DESERET CAPITAL LETTER SHORT I
+-10407; C; 1042F; # DESERET CAPITAL LETTER SHORT E
+-10408; C; 10430; # DESERET CAPITAL LETTER SHORT A
+-10409; C; 10431; # DESERET CAPITAL LETTER SHORT AH
+-1040A; C; 10432; # DESERET CAPITAL LETTER SHORT O
+-1040B; C; 10433; # DESERET CAPITAL LETTER SHORT OO
+-1040C; C; 10434; # DESERET CAPITAL LETTER AY
+-1040D; C; 10435; # DESERET CAPITAL LETTER OW
+-1040E; C; 10436; # DESERET CAPITAL LETTER WU
+-1040F; C; 10437; # DESERET CAPITAL LETTER YEE
+-10410; C; 10438; # DESERET CAPITAL LETTER H
+-10411; C; 10439; # DESERET CAPITAL LETTER PEE
+-10412; C; 1043A; # DESERET CAPITAL LETTER BEE
+-10413; C; 1043B; # DESERET CAPITAL LETTER TEE
+-10414; C; 1043C; # DESERET CAPITAL LETTER DEE
+-10415; C; 1043D; # DESERET CAPITAL LETTER CHEE
+-10416; C; 1043E; # DESERET CAPITAL LETTER JEE
+-10417; C; 1043F; # DESERET CAPITAL LETTER KAY
+-10418; C; 10440; # DESERET CAPITAL LETTER GAY
+-10419; C; 10441; # DESERET CAPITAL LETTER EF
+-1041A; C; 10442; # DESERET CAPITAL LETTER VEE
+-1041B; C; 10443; # DESERET CAPITAL LETTER ETH
+-1041C; C; 10444; # DESERET CAPITAL LETTER THEE
+-1041D; C; 10445; # DESERET CAPITAL LETTER ES
+-1041E; C; 10446; # DESERET CAPITAL LETTER ZEE
+-1041F; C; 10447; # DESERET CAPITAL LETTER ESH
+-10420; C; 10448; # DESERET CAPITAL LETTER ZHEE
+-10421; C; 10449; # DESERET CAPITAL LETTER ER
+-10422; C; 1044A; # DESERET CAPITAL LETTER EL
+-10423; C; 1044B; # DESERET CAPITAL LETTER EM
+-10424; C; 1044C; # DESERET CAPITAL LETTER EN
+-10425; C; 1044D; # DESERET CAPITAL LETTER ENG
+-10426; C; 1044E; # DESERET CAPITAL LETTER OI
+-10427; C; 1044F; # DESERET CAPITAL LETTER EW
+-104B0; C; 104D8; # OSAGE CAPITAL LETTER A
+-104B1; C; 104D9; # OSAGE CAPITAL LETTER AI
+-104B2; C; 104DA; # OSAGE CAPITAL LETTER AIN
+-104B3; C; 104DB; # OSAGE CAPITAL LETTER AH
+-104B4; C; 104DC; # OSAGE CAPITAL LETTER BRA
+-104B5; C; 104DD; # OSAGE CAPITAL LETTER CHA
+-104B6; C; 104DE; # OSAGE CAPITAL LETTER EHCHA
+-104B7; C; 104DF; # OSAGE CAPITAL LETTER E
+-104B8; C; 104E0; # OSAGE CAPITAL LETTER EIN
+-104B9; C; 104E1; # OSAGE CAPITAL LETTER HA
+-104BA; C; 104E2; # OSAGE CAPITAL LETTER HYA
+-104BB; C; 104E3; # OSAGE CAPITAL LETTER I
+-104BC; C; 104E4; # OSAGE CAPITAL LETTER KA
+-104BD; C; 104E5; # OSAGE CAPITAL LETTER EHKA
+-104BE; C; 104E6; # OSAGE CAPITAL LETTER KYA
+-104BF; C; 104E7; # OSAGE CAPITAL LETTER LA
+-104C0; C; 104E8; # OSAGE CAPITAL LETTER MA
+-104C1; C; 104E9; # OSAGE CAPITAL LETTER NA
+-104C2; C; 104EA; # OSAGE CAPITAL LETTER O
+-104C3; C; 104EB; # OSAGE CAPITAL LETTER OIN
+-104C4; C; 104EC; # OSAGE CAPITAL LETTER PA
+-104C5; C; 104ED; # OSAGE CAPITAL LETTER EHPA
+-104C6; C; 104EE; # OSAGE CAPITAL LETTER SA
+-104C7; C; 104EF; # OSAGE CAPITAL LETTER SHA
+-104C8; C; 104F0; # OSAGE CAPITAL LETTER TA
+-104C9; C; 104F1; # OSAGE CAPITAL LETTER EHTA
+-104CA; C; 104F2; # OSAGE CAPITAL LETTER TSA
+-104CB; C; 104F3; # OSAGE CAPITAL LETTER EHTSA
+-104CC; C; 104F4; # OSAGE CAPITAL LETTER TSHA
+-104CD; C; 104F5; # OSAGE CAPITAL LETTER DHA
+-104CE; C; 104F6; # OSAGE CAPITAL LETTER U
+-104CF; C; 104F7; # OSAGE CAPITAL LETTER WA
+-104D0; C; 104F8; # OSAGE CAPITAL LETTER KHA
+-104D1; C; 104F9; # OSAGE CAPITAL LETTER GHA
+-104D2; C; 104FA; # OSAGE CAPITAL LETTER ZA
+-104D3; C; 104FB; # OSAGE CAPITAL LETTER ZHA
+-10C80; C; 10CC0; # OLD HUNGARIAN CAPITAL LETTER A
+-10C81; C; 10CC1; # OLD HUNGARIAN CAPITAL LETTER AA
+-10C82; C; 10CC2; # OLD HUNGARIAN CAPITAL LETTER EB
+-10C83; C; 10CC3; # OLD HUNGARIAN CAPITAL LETTER AMB
+-10C84; C; 10CC4; # OLD HUNGARIAN CAPITAL LETTER EC
+-10C85; C; 10CC5; # OLD HUNGARIAN CAPITAL LETTER ENC
+-10C86; C; 10CC6; # OLD HUNGARIAN CAPITAL LETTER ECS
+-10C87; C; 10CC7; # OLD HUNGARIAN CAPITAL LETTER ED
+-10C88; C; 10CC8; # OLD HUNGARIAN CAPITAL LETTER AND
+-10C89; C; 10CC9; # OLD HUNGARIAN CAPITAL LETTER E
+-10C8A; C; 10CCA; # OLD HUNGARIAN CAPITAL LETTER CLOSE E
+-10C8B; C; 10CCB; # OLD HUNGARIAN CAPITAL LETTER EE
+-10C8C; C; 10CCC; # OLD HUNGARIAN CAPITAL LETTER EF
+-10C8D; C; 10CCD; # OLD HUNGARIAN CAPITAL LETTER EG
+-10C8E; C; 10CCE; # OLD HUNGARIAN CAPITAL LETTER EGY
+-10C8F; C; 10CCF; # OLD HUNGARIAN CAPITAL LETTER EH
+-10C90; C; 10CD0; # OLD HUNGARIAN CAPITAL LETTER I
+-10C91; C; 10CD1; # OLD HUNGARIAN CAPITAL LETTER II
+-10C92; C; 10CD2; # OLD HUNGARIAN CAPITAL LETTER EJ
+-10C93; C; 10CD3; # OLD HUNGARIAN CAPITAL LETTER EK
+-10C94; C; 10CD4; # OLD HUNGARIAN CAPITAL LETTER AK
+-10C95; C; 10CD5; # OLD HUNGARIAN CAPITAL LETTER UNK
+-10C96; C; 10CD6; # OLD HUNGARIAN CAPITAL LETTER EL
+-10C97; C; 10CD7; # OLD HUNGARIAN CAPITAL LETTER ELY
+-10C98; C; 10CD8; # OLD HUNGARIAN CAPITAL LETTER EM
+-10C99; C; 10CD9; # OLD HUNGARIAN CAPITAL LETTER EN
+-10C9A; C; 10CDA; # OLD HUNGARIAN CAPITAL LETTER ENY
+-10C9B; C; 10CDB; # OLD HUNGARIAN CAPITAL LETTER O
+-10C9C; C; 10CDC; # OLD HUNGARIAN CAPITAL LETTER OO
+-10C9D; C; 10CDD; # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE
+-10C9E; C; 10CDE; # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE
+-10C9F; C; 10CDF; # OLD HUNGARIAN CAPITAL LETTER OEE
+-10CA0; C; 10CE0; # OLD HUNGARIAN CAPITAL LETTER EP
+-10CA1; C; 10CE1; # OLD HUNGARIAN CAPITAL LETTER EMP
+-10CA2; C; 10CE2; # OLD HUNGARIAN CAPITAL LETTER ER
+-10CA3; C; 10CE3; # OLD HUNGARIAN CAPITAL LETTER SHORT ER
+-10CA4; C; 10CE4; # OLD HUNGARIAN CAPITAL LETTER ES
+-10CA5; C; 10CE5; # OLD HUNGARIAN CAPITAL LETTER ESZ
+-10CA6; C; 10CE6; # OLD HUNGARIAN CAPITAL LETTER ET
+-10CA7; C; 10CE7; # OLD HUNGARIAN CAPITAL LETTER ENT
+-10CA8; C; 10CE8; # OLD HUNGARIAN CAPITAL LETTER ETY
+-10CA9; C; 10CE9; # OLD HUNGARIAN CAPITAL LETTER ECH
+-10CAA; C; 10CEA; # OLD HUNGARIAN CAPITAL LETTER U
+-10CAB; C; 10CEB; # OLD HUNGARIAN CAPITAL LETTER UU
+-10CAC; C; 10CEC; # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE
+-10CAD; C; 10CED; # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE
+-10CAE; C; 10CEE; # OLD HUNGARIAN CAPITAL LETTER EV
+-10CAF; C; 10CEF; # OLD HUNGARIAN CAPITAL LETTER EZ
+-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
+-118A0; C; 118C0; # WARANG CITI CAPITAL LETTER NGAA
+-118A1; C; 118C1; # WARANG CITI CAPITAL LETTER A
+-118A2; C; 118C2; # WARANG CITI CAPITAL LETTER WI
+-118A3; C; 118C3; # WARANG CITI CAPITAL LETTER YU
+-118A4; C; 118C4; # WARANG CITI CAPITAL LETTER YA
+-118A5; C; 118C5; # WARANG CITI CAPITAL LETTER YO
+-118A6; C; 118C6; # WARANG CITI CAPITAL LETTER II
+-118A7; C; 118C7; # WARANG CITI CAPITAL LETTER UU
+-118A8; C; 118C8; # WARANG CITI CAPITAL LETTER E
+-118A9; C; 118C9; # WARANG CITI CAPITAL LETTER O
+-118AA; C; 118CA; # WARANG CITI CAPITAL LETTER ANG
+-118AB; C; 118CB; # WARANG CITI CAPITAL LETTER GA
+-118AC; C; 118CC; # WARANG CITI CAPITAL LETTER KO
+-118AD; C; 118CD; # WARANG CITI CAPITAL LETTER ENY
+-118AE; C; 118CE; # WARANG CITI CAPITAL LETTER YUJ
+-118AF; C; 118CF; # WARANG CITI CAPITAL LETTER UC
+-118B0; C; 118D0; # WARANG CITI CAPITAL LETTER ENN
+-118B1; C; 118D1; # WARANG CITI CAPITAL LETTER ODD
+-118B2; C; 118D2; # WARANG CITI CAPITAL LETTER TTE
+-118B3; C; 118D3; # WARANG CITI CAPITAL LETTER NUNG
+-118B4; C; 118D4; # WARANG CITI CAPITAL LETTER DA
+-118B5; C; 118D5; # WARANG CITI CAPITAL LETTER AT
+-118B6; C; 118D6; # WARANG CITI CAPITAL LETTER AM
+-118B7; C; 118D7; # WARANG CITI CAPITAL LETTER BU
+-118B8; C; 118D8; # WARANG CITI CAPITAL LETTER PU
+-118B9; C; 118D9; # WARANG CITI CAPITAL LETTER HIYO
+-118BA; C; 118DA; # WARANG CITI CAPITAL LETTER HOLO
+-118BB; C; 118DB; # WARANG CITI CAPITAL LETTER HORR
+-118BC; C; 118DC; # WARANG CITI CAPITAL LETTER HAR
+-118BD; C; 118DD; # WARANG CITI CAPITAL LETTER SSUU
+-118BE; C; 118DE; # WARANG CITI CAPITAL LETTER SII
+-118BF; C; 118DF; # WARANG CITI CAPITAL LETTER VIYO
+-16E40; C; 16E60; # MEDEFAIDRIN CAPITAL LETTER M
+-16E41; C; 16E61; # MEDEFAIDRIN CAPITAL LETTER S
+-16E42; C; 16E62; # MEDEFAIDRIN CAPITAL LETTER V
+-16E43; C; 16E63; # MEDEFAIDRIN CAPITAL LETTER W
+-16E44; C; 16E64; # MEDEFAIDRIN CAPITAL LETTER ATIU
+-16E45; C; 16E65; # MEDEFAIDRIN CAPITAL LETTER Z
+-16E46; C; 16E66; # MEDEFAIDRIN CAPITAL LETTER KP
+-16E47; C; 16E67; # MEDEFAIDRIN CAPITAL LETTER P
+-16E48; C; 16E68; # MEDEFAIDRIN CAPITAL LETTER T
+-16E49; C; 16E69; # MEDEFAIDRIN CAPITAL LETTER G
+-16E4A; C; 16E6A; # MEDEFAIDRIN CAPITAL LETTER F
+-16E4B; C; 16E6B; # MEDEFAIDRIN CAPITAL LETTER I
+-16E4C; C; 16E6C; # MEDEFAIDRIN CAPITAL LETTER K
+-16E4D; C; 16E6D; # MEDEFAIDRIN CAPITAL LETTER A
+-16E4E; C; 16E6E; # MEDEFAIDRIN CAPITAL LETTER J
+-16E4F; C; 16E6F; # MEDEFAIDRIN CAPITAL LETTER E
+-16E50; C; 16E70; # MEDEFAIDRIN CAPITAL LETTER B
+-16E51; C; 16E71; # MEDEFAIDRIN CAPITAL LETTER C
+-16E52; C; 16E72; # MEDEFAIDRIN CAPITAL LETTER U
+-16E53; C; 16E73; # MEDEFAIDRIN CAPITAL LETTER YU
+-16E54; C; 16E74; # MEDEFAIDRIN CAPITAL LETTER L
+-16E55; C; 16E75; # MEDEFAIDRIN CAPITAL LETTER Q
+-16E56; C; 16E76; # MEDEFAIDRIN CAPITAL LETTER HP
+-16E57; C; 16E77; # MEDEFAIDRIN CAPITAL LETTER NY
+-16E58; C; 16E78; # MEDEFAIDRIN CAPITAL LETTER X
+-16E59; C; 16E79; # MEDEFAIDRIN CAPITAL LETTER D
+-16E5A; C; 16E7A; # MEDEFAIDRIN CAPITAL LETTER OE
+-16E5B; C; 16E7B; # MEDEFAIDRIN CAPITAL LETTER N
+-16E5C; C; 16E7C; # MEDEFAIDRIN CAPITAL LETTER R
+-16E5D; C; 16E7D; # MEDEFAIDRIN CAPITAL LETTER O
+-16E5E; C; 16E7E; # MEDEFAIDRIN CAPITAL LETTER AI
+-16E5F; C; 16E7F; # MEDEFAIDRIN CAPITAL LETTER Y
+-1E900; C; 1E922; # ADLAM CAPITAL LETTER ALIF
+-1E901; C; 1E923; # ADLAM CAPITAL LETTER DAALI
+-1E902; C; 1E924; # ADLAM CAPITAL LETTER LAAM
+-1E903; C; 1E925; # ADLAM CAPITAL LETTER MIIM
+-1E904; C; 1E926; # ADLAM CAPITAL LETTER BA
+-1E905; C; 1E927; # ADLAM CAPITAL LETTER SINNYIIYHE
+-1E906; C; 1E928; # ADLAM CAPITAL LETTER PE
+-1E907; C; 1E929; # ADLAM CAPITAL LETTER BHE
+-1E908; C; 1E92A; # ADLAM CAPITAL LETTER RA
+-1E909; C; 1E92B; # ADLAM CAPITAL LETTER E
+-1E90A; C; 1E92C; # ADLAM CAPITAL LETTER FA
+-1E90B; C; 1E92D; # ADLAM CAPITAL LETTER I
+-1E90C; C; 1E92E; # ADLAM CAPITAL LETTER O
+-1E90D; C; 1E92F; # ADLAM CAPITAL LETTER DHA
+-1E90E; C; 1E930; # ADLAM CAPITAL LETTER YHE
+-1E90F; C; 1E931; # ADLAM CAPITAL LETTER WAW
+-1E910; C; 1E932; # ADLAM CAPITAL LETTER NUN
+-1E911; C; 1E933; # ADLAM CAPITAL LETTER KAF
+-1E912; C; 1E934; # ADLAM CAPITAL LETTER YA
+-1E913; C; 1E935; # ADLAM CAPITAL LETTER U
+-1E914; C; 1E936; # ADLAM CAPITAL LETTER JIIM
+-1E915; C; 1E937; # ADLAM CAPITAL LETTER CHI
+-1E916; C; 1E938; # ADLAM CAPITAL LETTER HA
+-1E917; C; 1E939; # ADLAM CAPITAL LETTER QAAF
+-1E918; C; 1E93A; # ADLAM CAPITAL LETTER GA
+-1E919; C; 1E93B; # ADLAM CAPITAL LETTER NYA
+-1E91A; C; 1E93C; # ADLAM CAPITAL LETTER TU
+-1E91B; C; 1E93D; # ADLAM CAPITAL LETTER NHA
+-1E91C; C; 1E93E; # ADLAM CAPITAL LETTER VA
+-1E91D; C; 1E93F; # ADLAM CAPITAL LETTER KHA
+-1E91E; C; 1E940; # ADLAM CAPITAL LETTER GBE
+-1E91F; C; 1E941; # ADLAM CAPITAL LETTER ZAL
+-1E920; C; 1E942; # ADLAM CAPITAL LETTER KPO
+-1E921; C; 1E943; # ADLAM CAPITAL LETTER SHA
+-#
+-# EOF
+diff --git a/tests/DerivedGeneralCategory.txt b/tests/DerivedGeneralCategory.txt
+deleted file mode 100644
+index 3e82c7fc..00000000
+--- a/tests/DerivedGeneralCategory.txt
++++ /dev/null
+@@ -1,4100 +0,0 @@
+-# DerivedGeneralCategory-13.0.0.txt
+-# Date: 2019-10-21, 14:30:32 GMT
+-# © 2019 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
+-#
+-# Unicode Character Database
+-#   For documentation, see http://www.unicode.org/reports/tr44/
+-
+-# ================================================
+-
+-# Property:	General_Category
+-
+-# ================================================
+-
+-# General_Category=Unassigned
+-
+-0378..0379    ; Cn #   [2] <reserved-0378>..<reserved-0379>
+-0380..0383    ; Cn #   [4] <reserved-0380>..<reserved-0383>
+-038B          ; Cn #       <reserved-038B>
+-038D          ; Cn #       <reserved-038D>
+-03A2          ; Cn #       <reserved-03A2>
+-0530          ; Cn #       <reserved-0530>
+-0557..0558    ; Cn #   [2] <reserved-0557>..<reserved-0558>
+-058B..058C    ; Cn #   [2] <reserved-058B>..<reserved-058C>
+-0590          ; Cn #       <reserved-0590>
+-05C8..05CF    ; Cn #   [8] <reserved-05C8>..<reserved-05CF>
+-05EB..05EE    ; Cn #   [4] <reserved-05EB>..<reserved-05EE>
+-05F5..05FF    ; Cn #  [11] <reserved-05F5>..<reserved-05FF>
+-061D          ; Cn #       <reserved-061D>
+-070E          ; Cn #       <reserved-070E>
+-074B..074C    ; Cn #   [2] <reserved-074B>..<reserved-074C>
+-07B2..07BF    ; Cn #  [14] <reserved-07B2>..<reserved-07BF>
+-07FB..07FC    ; Cn #   [2] <reserved-07FB>..<reserved-07FC>
+-082E..082F    ; Cn #   [2] <reserved-082E>..<reserved-082F>
+-083F          ; Cn #       <reserved-083F>
+-085C..085D    ; Cn #   [2] <reserved-085C>..<reserved-085D>
+-085F          ; Cn #       <reserved-085F>
+-086B..089F    ; Cn #  [53] <reserved-086B>..<reserved-089F>
+-08B5          ; Cn #       <reserved-08B5>
+-08C8..08D2    ; Cn #  [11] <reserved-08C8>..<reserved-08D2>
+-0984          ; Cn #       <reserved-0984>
+-098D..098E    ; Cn #   [2] <reserved-098D>..<reserved-098E>
+-0991..0992    ; Cn #   [2] <reserved-0991>..<reserved-0992>
+-09A9          ; Cn #       <reserved-09A9>
+-09B1          ; Cn #       <reserved-09B1>
+-09B3..09B5    ; Cn #   [3] <reserved-09B3>..<reserved-09B5>
+-09BA..09BB    ; Cn #   [2] <reserved-09BA>..<reserved-09BB>
+-09C5..09C6    ; Cn #   [2] <reserved-09C5>..<reserved-09C6>
+-09C9..09CA    ; Cn #   [2] <reserved-09C9>..<reserved-09CA>
+-09CF..09D6    ; Cn #   [8] <reserved-09CF>..<reserved-09D6>
+-09D8..09DB    ; Cn #   [4] <reserved-09D8>..<reserved-09DB>
+-09DE          ; Cn #       <reserved-09DE>
+-09E4..09E5    ; Cn #   [2] <reserved-09E4>..<reserved-09E5>
+-09FF..0A00    ; Cn #   [2] <reserved-09FF>..<reserved-0A00>
+-0A04          ; Cn #       <reserved-0A04>
+-0A0B..0A0E    ; Cn #   [4] <reserved-0A0B>..<reserved-0A0E>
+-0A11..0A12    ; Cn #   [2] <reserved-0A11>..<reserved-0A12>
+-0A29          ; Cn #       <reserved-0A29>
+-0A31          ; Cn #       <reserved-0A31>
+-0A34          ; Cn #       <reserved-0A34>
+-0A37          ; Cn #       <reserved-0A37>
+-0A3A..0A3B    ; Cn #   [2] <reserved-0A3A>..<reserved-0A3B>
+-0A3D          ; Cn #       <reserved-0A3D>
+-0A43..0A46    ; Cn #   [4] <reserved-0A43>..<reserved-0A46>
+-0A49..0A4A    ; Cn #   [2] <reserved-0A49>..<reserved-0A4A>
+-0A4E..0A50    ; Cn #   [3] <reserved-0A4E>..<reserved-0A50>
+-0A52..0A58    ; Cn #   [7] <reserved-0A52>..<reserved-0A58>
+-0A5D          ; Cn #       <reserved-0A5D>
+-0A5F..0A65    ; Cn #   [7] <reserved-0A5F>..<reserved-0A65>
+-0A77..0A80    ; Cn #  [10] <reserved-0A77>..<reserved-0A80>
+-0A84          ; Cn #       <reserved-0A84>
+-0A8E          ; Cn #       <reserved-0A8E>
+-0A92          ; Cn #       <reserved-0A92>
+-0AA9          ; Cn #       <reserved-0AA9>
+-0AB1          ; Cn #       <reserved-0AB1>
+-0AB4          ; Cn #       <reserved-0AB4>
+-0ABA..0ABB    ; Cn #   [2] <reserved-0ABA>..<reserved-0ABB>
+-0AC6          ; Cn #       <reserved-0AC6>
+-0ACA          ; Cn #       <reserved-0ACA>
+-0ACE..0ACF    ; Cn #   [2] <reserved-0ACE>..<reserved-0ACF>
+-0AD1..0ADF    ; Cn #  [15] <reserved-0AD1>..<reserved-0ADF>
+-0AE4..0AE5    ; Cn #   [2] <reserved-0AE4>..<reserved-0AE5>
+-0AF2..0AF8    ; Cn #   [7] <reserved-0AF2>..<reserved-0AF8>
+-0B00          ; Cn #       <reserved-0B00>
+-0B04          ; Cn #       <reserved-0B04>
+-0B0D..0B0E    ; Cn #   [2] <reserved-0B0D>..<reserved-0B0E>
+-0B11..0B12    ; Cn #   [2] <reserved-0B11>..<reserved-0B12>
+-0B29          ; Cn #       <reserved-0B29>
+-0B31          ; Cn #       <reserved-0B31>
+-0B34          ; Cn #       <reserved-0B34>
+-0B3A..0B3B    ; Cn #   [2] <reserved-0B3A>..<reserved-0B3B>
+-0B45..0B46    ; Cn #   [2] <reserved-0B45>..<reserved-0B46>
+-0B49..0B4A    ; Cn #   [2] <reserved-0B49>..<reserved-0B4A>
+-0B4E..0B54    ; Cn #   [7] <reserved-0B4E>..<reserved-0B54>
+-0B58..0B5B    ; Cn #   [4] <reserved-0B58>..<reserved-0B5B>
+-0B5E          ; Cn #       <reserved-0B5E>
+-0B64..0B65    ; Cn #   [2] <reserved-0B64>..<reserved-0B65>
+-0B78..0B81    ; Cn #  [10] <reserved-0B78>..<reserved-0B81>
+-0B84          ; Cn #       <reserved-0B84>
+-0B8B..0B8D    ; Cn #   [3] <reserved-0B8B>..<reserved-0B8D>
+-0B91          ; Cn #       <reserved-0B91>
+-0B96..0B98    ; Cn #   [3] <reserved-0B96>..<reserved-0B98>
+-0B9B          ; Cn #       <reserved-0B9B>
+-0B9D          ; Cn #       <reserved-0B9D>
+-0BA0..0BA2    ; Cn #   [3] <reserved-0BA0>..<reserved-0BA2>
+-0BA5..0BA7    ; Cn #   [3] <reserved-0BA5>..<reserved-0BA7>
+-0BAB..0BAD    ; Cn #   [3] <reserved-0BAB>..<reserved-0BAD>
+-0BBA..0BBD    ; Cn #   [4] <reserved-0BBA>..<reserved-0BBD>
+-0BC3..0BC5    ; Cn #   [3] <reserved-0BC3>..<reserved-0BC5>
+-0BC9          ; Cn #       <reserved-0BC9>
+-0BCE..0BCF    ; Cn #   [2] <reserved-0BCE>..<reserved-0BCF>
+-0BD1..0BD6    ; Cn #   [6] <reserved-0BD1>..<reserved-0BD6>
+-0BD8..0BE5    ; Cn #  [14] <reserved-0BD8>..<reserved-0BE5>
+-0BFB..0BFF    ; Cn #   [5] <reserved-0BFB>..<reserved-0BFF>
+-0C0D          ; Cn #       <reserved-0C0D>
+-0C11          ; Cn #       <reserved-0C11>
+-0C29          ; Cn #       <reserved-0C29>
+-0C3A..0C3C    ; Cn #   [3] <reserved-0C3A>..<reserved-0C3C>
+-0C45          ; Cn #       <reserved-0C45>
+-0C49          ; Cn #       <reserved-0C49>
+-0C4E..0C54    ; Cn #   [7] <reserved-0C4E>..<reserved-0C54>
+-0C57          ; Cn #       <reserved-0C57>
+-0C5B..0C5F    ; Cn #   [5] <reserved-0C5B>..<reserved-0C5F>
+-0C64..0C65    ; Cn #   [2] <reserved-0C64>..<reserved-0C65>
+-0C70..0C76    ; Cn #   [7] <reserved-0C70>..<reserved-0C76>
+-0C8D          ; Cn #       <reserved-0C8D>
+-0C91          ; Cn #       <reserved-0C91>
+-0CA9          ; Cn #       <reserved-0CA9>
+-0CB4          ; Cn #       <reserved-0CB4>
+-0CBA..0CBB    ; Cn #   [2] <reserved-0CBA>..<reserved-0CBB>
+-0CC5          ; Cn #       <reserved-0CC5>
+-0CC9          ; Cn #       <reserved-0CC9>
+-0CCE..0CD4    ; Cn #   [7] <reserved-0CCE>..<reserved-0CD4>
+-0CD7..0CDD    ; Cn #   [7] <reserved-0CD7>..<reserved-0CDD>
+-0CDF          ; Cn #       <reserved-0CDF>
+-0CE4..0CE5    ; Cn #   [2] <reserved-0CE4>..<reserved-0CE5>
+-0CF0          ; Cn #       <reserved-0CF0>
+-0CF3..0CFF    ; Cn #  [13] <reserved-0CF3>..<reserved-0CFF>
+-0D0D          ; Cn #       <reserved-0D0D>
+-0D11          ; Cn #       <reserved-0D11>
+-0D45          ; Cn #       <reserved-0D45>
+-0D49          ; Cn #       <reserved-0D49>
+-0D50..0D53    ; Cn #   [4] <reserved-0D50>..<reserved-0D53>
+-0D64..0D65    ; Cn #   [2] <reserved-0D64>..<reserved-0D65>
+-0D80          ; Cn #       <reserved-0D80>
+-0D84          ; Cn #       <reserved-0D84>
+-0D97..0D99    ; Cn #   [3] <reserved-0D97>..<reserved-0D99>
+-0DB2          ; Cn #       <reserved-0DB2>
+-0DBC          ; Cn #       <reserved-0DBC>
+-0DBE..0DBF    ; Cn #   [2] <reserved-0DBE>..<reserved-0DBF>
+-0DC7..0DC9    ; Cn #   [3] <reserved-0DC7>..<reserved-0DC9>
+-0DCB..0DCE    ; Cn #   [4] <reserved-0DCB>..<reserved-0DCE>
+-0DD5          ; Cn #       <reserved-0DD5>
+-0DD7          ; Cn #       <reserved-0DD7>
+-0DE0..0DE5    ; Cn #   [6] <reserved-0DE0>..<reserved-0DE5>
+-0DF0..0DF1    ; Cn #   [2] <reserved-0DF0>..<reserved-0DF1>
+-0DF5..0E00    ; Cn #  [12] <reserved-0DF5>..<reserved-0E00>
+-0E3B..0E3E    ; Cn #   [4] <reserved-0E3B>..<reserved-0E3E>
+-0E5C..0E80    ; Cn #  [37] <reserved-0E5C>..<reserved-0E80>
+-0E83          ; Cn #       <reserved-0E83>
+-0E85          ; Cn #       <reserved-0E85>
+-0E8B          ; Cn #       <reserved-0E8B>
+-0EA4          ; Cn #       <reserved-0EA4>
+-0EA6          ; Cn #       <reserved-0EA6>
+-0EBE..0EBF    ; Cn #   [2] <reserved-0EBE>..<reserved-0EBF>
+-0EC5          ; Cn #       <reserved-0EC5>
+-0EC7          ; Cn #       <reserved-0EC7>
+-0ECE..0ECF    ; Cn #   [2] <reserved-0ECE>..<reserved-0ECF>
+-0EDA..0EDB    ; Cn #   [2] <reserved-0EDA>..<reserved-0EDB>
+-0EE0..0EFF    ; Cn #  [32] <reserved-0EE0>..<reserved-0EFF>
+-0F48          ; Cn #       <reserved-0F48>
+-0F6D..0F70    ; Cn #   [4] <reserved-0F6D>..<reserved-0F70>
+-0F98          ; Cn #       <reserved-0F98>
+-0FBD          ; Cn #       <reserved-0FBD>
+-0FCD          ; Cn #       <reserved-0FCD>
+-0FDB..0FFF    ; Cn #  [37] <reserved-0FDB>..<reserved-0FFF>
+-10C6          ; Cn #       <reserved-10C6>
+-10C8..10CC    ; Cn #   [5] <reserved-10C8>..<reserved-10CC>
+-10CE..10CF    ; Cn #   [2] <reserved-10CE>..<reserved-10CF>
+-1249          ; Cn #       <reserved-1249>
+-124E..124F    ; Cn #   [2] <reserved-124E>..<reserved-124F>
+-1257          ; Cn #       <reserved-1257>
+-1259          ; Cn #       <reserved-1259>
+-125E..125F    ; Cn #   [2] <reserved-125E>..<reserved-125F>
+-1289          ; Cn #       <reserved-1289>
+-128E..128F    ; Cn #   [2] <reserved-128E>..<reserved-128F>
+-12B1          ; Cn #       <reserved-12B1>
+-12B6..12B7    ; Cn #   [2] <reserved-12B6>..<reserved-12B7>
+-12BF          ; Cn #       <reserved-12BF>
+-12C1          ; Cn #       <reserved-12C1>
+-12C6..12C7    ; Cn #   [2] <reserved-12C6>..<reserved-12C7>
+-12D7          ; Cn #       <reserved-12D7>
+-1311          ; Cn #       <reserved-1311>
+-1316..1317    ; Cn #   [2] <reserved-1316>..<reserved-1317>
+-135B..135C    ; Cn #   [2] <reserved-135B>..<reserved-135C>
+-137D..137F    ; Cn #   [3] <reserved-137D>..<reserved-137F>
+-139A..139F    ; Cn #   [6] <reserved-139A>..<reserved-139F>
+-13F6..13F7    ; Cn #   [2] <reserved-13F6>..<reserved-13F7>
+-13FE..13FF    ; Cn #   [2] <reserved-13FE>..<reserved-13FF>
+-169D..169F    ; Cn #   [3] <reserved-169D>..<reserved-169F>
+-16F9..16FF    ; Cn #   [7] <reserved-16F9>..<reserved-16FF>
+-170D          ; Cn #       <reserved-170D>
+-1715..171F    ; Cn #  [11] <reserved-1715>..<reserved-171F>
+-1737..173F    ; Cn #   [9] <reserved-1737>..<reserved-173F>
+-1754..175F    ; Cn #  [12] <reserved-1754>..<reserved-175F>
+-176D          ; Cn #       <reserved-176D>
+-1771          ; Cn #       <reserved-1771>
+-1774..177F    ; Cn #  [12] <reserved-1774>..<reserved-177F>
+-17DE..17DF    ; Cn #   [2] <reserved-17DE>..<reserved-17DF>
+-17EA..17EF    ; Cn #   [6] <reserved-17EA>..<reserved-17EF>
+-17FA..17FF    ; Cn #   [6] <reserved-17FA>..<reserved-17FF>
+-180F          ; Cn #       <reserved-180F>
+-181A..181F    ; Cn #   [6] <reserved-181A>..<reserved-181F>
+-1879..187F    ; Cn #   [7] <reserved-1879>..<reserved-187F>
+-18AB..18AF    ; Cn #   [5] <reserved-18AB>..<reserved-18AF>
+-18F6..18FF    ; Cn #  [10] <reserved-18F6>..<reserved-18FF>
+-191F          ; Cn #       <reserved-191F>
+-192C..192F    ; Cn #   [4] <reserved-192C>..<reserved-192F>
+-193C..193F    ; Cn #   [4] <reserved-193C>..<reserved-193F>
+-1941..1943    ; Cn #   [3] <reserved-1941>..<reserved-1943>
+-196E..196F    ; Cn #   [2] <reserved-196E>..<reserved-196F>
+-1975..197F    ; Cn #  [11] <reserved-1975>..<reserved-197F>
+-19AC..19AF    ; Cn #   [4] <reserved-19AC>..<reserved-19AF>
+-19CA..19CF    ; Cn #   [6] <reserved-19CA>..<reserved-19CF>
+-19DB..19DD    ; Cn #   [3] <reserved-19DB>..<reserved-19DD>
+-1A1C..1A1D    ; Cn #   [2] <reserved-1A1C>..<reserved-1A1D>
+-1A5F          ; Cn #       <reserved-1A5F>
+-1A7D..1A7E    ; Cn #   [2] <reserved-1A7D>..<reserved-1A7E>
+-1A8A..1A8F    ; Cn #   [6] <reserved-1A8A>..<reserved-1A8F>
+-1A9A..1A9F    ; Cn #   [6] <reserved-1A9A>..<reserved-1A9F>
+-1AAE..1AAF    ; Cn #   [2] <reserved-1AAE>..<reserved-1AAF>
+-1AC1..1AFF    ; Cn #  [63] <reserved-1AC1>..<reserved-1AFF>
+-1B4C..1B4F    ; Cn #   [4] <reserved-1B4C>..<reserved-1B4F>
+-1B7D..1B7F    ; Cn #   [3] <reserved-1B7D>..<reserved-1B7F>
+-1BF4..1BFB    ; Cn #   [8] <reserved-1BF4>..<reserved-1BFB>
+-1C38..1C3A    ; Cn #   [3] <reserved-1C38>..<reserved-1C3A>
+-1C4A..1C4C    ; Cn #   [3] <reserved-1C4A>..<reserved-1C4C>
+-1C89..1C8F    ; Cn #   [7] <reserved-1C89>..<reserved-1C8F>
+-1CBB..1CBC    ; Cn #   [2] <reserved-1CBB>..<reserved-1CBC>
+-1CC8..1CCF    ; Cn #   [8] <reserved-1CC8>..<reserved-1CCF>
+-1CFB..1CFF    ; Cn #   [5] <reserved-1CFB>..<reserved-1CFF>
+-1DFA          ; Cn #       <reserved-1DFA>
+-1F16..1F17    ; Cn #   [2] <reserved-1F16>..<reserved-1F17>
+-1F1E..1F1F    ; Cn #   [2] <reserved-1F1E>..<reserved-1F1F>
+-1F46..1F47    ; Cn #   [2] <reserved-1F46>..<reserved-1F47>
+-1F4E..1F4F    ; Cn #   [2] <reserved-1F4E>..<reserved-1F4F>
+-1F58          ; Cn #       <reserved-1F58>
+-1F5A          ; Cn #       <reserved-1F5A>
+-1F5C          ; Cn #       <reserved-1F5C>
+-1F5E          ; Cn #       <reserved-1F5E>
+-1F7E..1F7F    ; Cn #   [2] <reserved-1F7E>..<reserved-1F7F>
+-1FB5          ; Cn #       <reserved-1FB5>
+-1FC5          ; Cn #       <reserved-1FC5>
+-1FD4..1FD5    ; Cn #   [2] <reserved-1FD4>..<reserved-1FD5>
+-1FDC          ; Cn #       <reserved-1FDC>
+-1FF0..1FF1    ; Cn #   [2] <reserved-1FF0>..<reserved-1FF1>
+-1FF5          ; Cn #       <reserved-1FF5>
+-1FFF          ; Cn #       <reserved-1FFF>
+-2065          ; Cn #       <reserved-2065>
+-2072..2073    ; Cn #   [2] <reserved-2072>..<reserved-2073>
+-208F          ; Cn #       <reserved-208F>
+-209D..209F    ; Cn #   [3] <reserved-209D>..<reserved-209F>
+-20C0..20CF    ; Cn #  [16] <reserved-20C0>..<reserved-20CF>
+-20F1..20FF    ; Cn #  [15] <reserved-20F1>..<reserved-20FF>
+-218C..218F    ; Cn #   [4] <reserved-218C>..<reserved-218F>
+-2427..243F    ; Cn #  [25] <reserved-2427>..<reserved-243F>
+-244B..245F    ; Cn #  [21] <reserved-244B>..<reserved-245F>
+-2B74..2B75    ; Cn #   [2] <reserved-2B74>..<reserved-2B75>
+-2B96          ; Cn #       <reserved-2B96>
+-2C2F          ; Cn #       <reserved-2C2F>
+-2C5F          ; Cn #       <reserved-2C5F>
+-2CF4..2CF8    ; Cn #   [5] <reserved-2CF4>..<reserved-2CF8>
+-2D26          ; Cn #       <reserved-2D26>
+-2D28..2D2C    ; Cn #   [5] <reserved-2D28>..<reserved-2D2C>
+-2D2E..2D2F    ; Cn #   [2] <reserved-2D2E>..<reserved-2D2F>
+-2D68..2D6E    ; Cn #   [7] <reserved-2D68>..<reserved-2D6E>
+-2D71..2D7E    ; Cn #  [14] <reserved-2D71>..<reserved-2D7E>
+-2D97..2D9F    ; Cn #   [9] <reserved-2D97>..<reserved-2D9F>
+-2DA7          ; Cn #       <reserved-2DA7>
+-2DAF          ; Cn #       <reserved-2DAF>
+-2DB7          ; Cn #       <reserved-2DB7>
+-2DBF          ; Cn #       <reserved-2DBF>
+-2DC7          ; Cn #       <reserved-2DC7>
+-2DCF          ; Cn #       <reserved-2DCF>
+-2DD7          ; Cn #       <reserved-2DD7>
+-2DDF          ; Cn #       <reserved-2DDF>
+-2E53..2E7F    ; Cn #  [45] <reserved-2E53>..<reserved-2E7F>
+-2E9A          ; Cn #       <reserved-2E9A>
+-2EF4..2EFF    ; Cn #  [12] <reserved-2EF4>..<reserved-2EFF>
+-2FD6..2FEF    ; Cn #  [26] <reserved-2FD6>..<reserved-2FEF>
+-2FFC..2FFF    ; Cn #   [4] <reserved-2FFC>..<reserved-2FFF>
+-3040          ; Cn #       <reserved-3040>
+-3097..3098    ; Cn #   [2] <reserved-3097>..<reserved-3098>
+-3100..3104    ; Cn #   [5] <reserved-3100>..<reserved-3104>
+-3130          ; Cn #       <reserved-3130>
+-318F          ; Cn #       <reserved-318F>
+-31E4..31EF    ; Cn #  [12] <reserved-31E4>..<reserved-31EF>
+-321F          ; Cn #       <reserved-321F>
+-9FFD..9FFF    ; Cn #   [3] <reserved-9FFD>..<reserved-9FFF>
+-A48D..A48F    ; Cn #   [3] <reserved-A48D>..<reserved-A48F>
+-A4C7..A4CF    ; Cn #   [9] <reserved-A4C7>..<reserved-A4CF>
+-A62C..A63F    ; Cn #  [20] <reserved-A62C>..<reserved-A63F>
+-A6F8..A6FF    ; Cn #   [8] <reserved-A6F8>..<reserved-A6FF>
+-A7C0..A7C1    ; Cn #   [2] <reserved-A7C0>..<reserved-A7C1>
+-A7CB..A7F4    ; Cn #  [42] <reserved-A7CB>..<reserved-A7F4>
+-A82D..A82F    ; Cn #   [3] <reserved-A82D>..<reserved-A82F>
+-A83A..A83F    ; Cn #   [6] <reserved-A83A>..<reserved-A83F>
+-A878..A87F    ; Cn #   [8] <reserved-A878>..<reserved-A87F>
+-A8C6..A8CD    ; Cn #   [8] <reserved-A8C6>..<reserved-A8CD>
+-A8DA..A8DF    ; Cn #   [6] <reserved-A8DA>..<reserved-A8DF>
+-A954..A95E    ; Cn #  [11] <reserved-A954>..<reserved-A95E>
+-A97D..A97F    ; Cn #   [3] <reserved-A97D>..<reserved-A97F>
+-A9CE          ; Cn #       <reserved-A9CE>
+-A9DA..A9DD    ; Cn #   [4] <reserved-A9DA>..<reserved-A9DD>
+-A9FF          ; Cn #       <reserved-A9FF>
+-AA37..AA3F    ; Cn #   [9] <reserved-AA37>..<reserved-AA3F>
+-AA4E..AA4F    ; Cn #   [2] <reserved-AA4E>..<reserved-AA4F>
+-AA5A..AA5B    ; Cn #   [2] <reserved-AA5A>..<reserved-AA5B>
+-AAC3..AADA    ; Cn #  [24] <reserved-AAC3>..<reserved-AADA>
+-AAF7..AB00    ; Cn #  [10] <reserved-AAF7>..<reserved-AB00>
+-AB07..AB08    ; Cn #   [2] <reserved-AB07>..<reserved-AB08>
+-AB0F..AB10    ; Cn #   [2] <reserved-AB0F>..<reserved-AB10>
+-AB17..AB1F    ; Cn #   [9] <reserved-AB17>..<reserved-AB1F>
+-AB27          ; Cn #       <reserved-AB27>
+-AB2F          ; Cn #       <reserved-AB2F>
+-AB6C..AB6F    ; Cn #   [4] <reserved-AB6C>..<reserved-AB6F>
+-ABEE..ABEF    ; Cn #   [2] <reserved-ABEE>..<reserved-ABEF>
+-ABFA..ABFF    ; Cn #   [6] <reserved-ABFA>..<reserved-ABFF>
+-D7A4..D7AF    ; Cn #  [12] <reserved-D7A4>..<reserved-D7AF>
+-D7C7..D7CA    ; Cn #   [4] <reserved-D7C7>..<reserved-D7CA>
+-D7FC..D7FF    ; Cn #   [4] <reserved-D7FC>..<reserved-D7FF>
+-FA6E..FA6F    ; Cn #   [2] <reserved-FA6E>..<reserved-FA6F>
+-FADA..FAFF    ; Cn #  [38] <reserved-FADA>..<reserved-FAFF>
+-FB07..FB12    ; Cn #  [12] <reserved-FB07>..<reserved-FB12>
+-FB18..FB1C    ; Cn #   [5] <reserved-FB18>..<reserved-FB1C>
+-FB37          ; Cn #       <reserved-FB37>
+-FB3D          ; Cn #       <reserved-FB3D>
+-FB3F          ; Cn #       <reserved-FB3F>
+-FB42          ; Cn #       <reserved-FB42>
+-FB45          ; Cn #       <reserved-FB45>
+-FBC2..FBD2    ; Cn #  [17] <reserved-FBC2>..<reserved-FBD2>
+-FD40..FD4F    ; Cn #  [16] <reserved-FD40>..<reserved-FD4F>
+-FD90..FD91    ; Cn #   [2] <reserved-FD90>..<reserved-FD91>
+-FDC8..FDEF    ; Cn #  [40] <reserved-FDC8>..<noncharacter-FDEF>
+-FDFE..FDFF    ; Cn #   [2] <reserved-FDFE>..<reserved-FDFF>
+-FE1A..FE1F    ; Cn #   [6] <reserved-FE1A>..<reserved-FE1F>
+-FE53          ; Cn #       <reserved-FE53>
+-FE67          ; Cn #       <reserved-FE67>
+-FE6C..FE6F    ; Cn #   [4] <reserved-FE6C>..<reserved-FE6F>
+-FE75          ; Cn #       <reserved-FE75>
+-FEFD..FEFE    ; Cn #   [2] <reserved-FEFD>..<reserved-FEFE>
+-FF00          ; Cn #       <reserved-FF00>
+-FFBF..FFC1    ; Cn #   [3] <reserved-FFBF>..<reserved-FFC1>
+-FFC8..FFC9    ; Cn #   [2] <reserved-FFC8>..<reserved-FFC9>
+-FFD0..FFD1    ; Cn #   [2] <reserved-FFD0>..<reserved-FFD1>
+-FFD8..FFD9    ; Cn #   [2] <reserved-FFD8>..<reserved-FFD9>
+-FFDD..FFDF    ; Cn #   [3] <reserved-FFDD>..<reserved-FFDF>
+-FFE7          ; Cn #       <reserved-FFE7>
+-FFEF..FFF8    ; Cn #  [10] <reserved-FFEF>..<reserved-FFF8>
+-FFFE..FFFF    ; Cn #   [2] <noncharacter-FFFE>..<noncharacter-FFFF>
+-1000C         ; Cn #       <reserved-1000C>
+-10027         ; Cn #       <reserved-10027>
+-1003B         ; Cn #       <reserved-1003B>
+-1003E         ; Cn #       <reserved-1003E>
+-1004E..1004F  ; Cn #   [2] <reserved-1004E>..<reserved-1004F>
+-1005E..1007F  ; Cn #  [34] <reserved-1005E>..<reserved-1007F>
+-100FB..100FF  ; Cn #   [5] <reserved-100FB>..<reserved-100FF>
+-10103..10106  ; Cn #   [4] <reserved-10103>..<reserved-10106>
+-10134..10136  ; Cn #   [3] <reserved-10134>..<reserved-10136>
+-1018F         ; Cn #       <reserved-1018F>
+-1019D..1019F  ; Cn #   [3] <reserved-1019D>..<reserved-1019F>
+-101A1..101CF  ; Cn #  [47] <reserved-101A1>..<reserved-101CF>
+-101FE..1027F  ; Cn # [130] <reserved-101FE>..<reserved-1027F>
+-1029D..1029F  ; Cn #   [3] <reserved-1029D>..<reserved-1029F>
+-102D1..102DF  ; Cn #  [15] <reserved-102D1>..<reserved-102DF>
+-102FC..102FF  ; Cn #   [4] <reserved-102FC>..<reserved-102FF>
+-10324..1032C  ; Cn #   [9] <reserved-10324>..<reserved-1032C>
+-1034B..1034F  ; Cn #   [5] <reserved-1034B>..<reserved-1034F>
+-1037B..1037F  ; Cn #   [5] <reserved-1037B>..<reserved-1037F>
+-1039E         ; Cn #       <reserved-1039E>
+-103C4..103C7  ; Cn #   [4] <reserved-103C4>..<reserved-103C7>
+-103D6..103FF  ; Cn #  [42] <reserved-103D6>..<reserved-103FF>
+-1049E..1049F  ; Cn #   [2] <reserved-1049E>..<reserved-1049F>
+-104AA..104AF  ; Cn #   [6] <reserved-104AA>..<reserved-104AF>
+-104D4..104D7  ; Cn #   [4] <reserved-104D4>..<reserved-104D7>
+-104FC..104FF  ; Cn #   [4] <reserved-104FC>..<reserved-104FF>
+-10528..1052F  ; Cn #   [8] <reserved-10528>..<reserved-1052F>
+-10564..1056E  ; Cn #  [11] <reserved-10564>..<reserved-1056E>
+-10570..105FF  ; Cn # [144] <reserved-10570>..<reserved-105FF>
+-10737..1073F  ; Cn #   [9] <reserved-10737>..<reserved-1073F>
+-10756..1075F  ; Cn #  [10] <reserved-10756>..<reserved-1075F>
+-10768..107FF  ; Cn # [152] <reserved-10768>..<reserved-107FF>
+-10806..10807  ; Cn #   [2] <reserved-10806>..<reserved-10807>
+-10809         ; Cn #       <reserved-10809>
+-10836         ; Cn #       <reserved-10836>
+-10839..1083B  ; Cn #   [3] <reserved-10839>..<reserved-1083B>
+-1083D..1083E  ; Cn #   [2] <reserved-1083D>..<reserved-1083E>
+-10856         ; Cn #       <reserved-10856>
+-1089F..108A6  ; Cn #   [8] <reserved-1089F>..<reserved-108A6>
+-108B0..108DF  ; Cn #  [48] <reserved-108B0>..<reserved-108DF>
+-108F3         ; Cn #       <reserved-108F3>
+-108F6..108FA  ; Cn #   [5] <reserved-108F6>..<reserved-108FA>
+-1091C..1091E  ; Cn #   [3] <reserved-1091C>..<reserved-1091E>
+-1093A..1093E  ; Cn #   [5] <reserved-1093A>..<reserved-1093E>
+-10940..1097F  ; Cn #  [64] <reserved-10940>..<reserved-1097F>
+-109B8..109BB  ; Cn #   [4] <reserved-109B8>..<reserved-109BB>
+-109D0..109D1  ; Cn #   [2] <reserved-109D0>..<reserved-109D1>
+-10A04         ; Cn #       <reserved-10A04>
+-10A07..10A0B  ; Cn #   [5] <reserved-10A07>..<reserved-10A0B>
+-10A14         ; Cn #       <reserved-10A14>
+-10A18         ; Cn #       <reserved-10A18>
+-10A36..10A37  ; Cn #   [2] <reserved-10A36>..<reserved-10A37>
+-10A3B..10A3E  ; Cn #   [4] <reserved-10A3B>..<reserved-10A3E>
+-10A49..10A4F  ; Cn #   [7] <reserved-10A49>..<reserved-10A4F>
+-10A59..10A5F  ; Cn #   [7] <reserved-10A59>..<reserved-10A5F>
+-10AA0..10ABF  ; Cn #  [32] <reserved-10AA0>..<reserved-10ABF>
+-10AE7..10AEA  ; Cn #   [4] <reserved-10AE7>..<reserved-10AEA>
+-10AF7..10AFF  ; Cn #   [9] <reserved-10AF7>..<reserved-10AFF>
+-10B36..10B38  ; Cn #   [3] <reserved-10B36>..<reserved-10B38>
+-10B56..10B57  ; Cn #   [2] <reserved-10B56>..<reserved-10B57>
+-10B73..10B77  ; Cn #   [5] <reserved-10B73>..<reserved-10B77>
+-10B92..10B98  ; Cn #   [7] <reserved-10B92>..<reserved-10B98>
+-10B9D..10BA8  ; Cn #  [12] <reserved-10B9D>..<reserved-10BA8>
+-10BB0..10BFF  ; Cn #  [80] <reserved-10BB0>..<reserved-10BFF>
+-10C49..10C7F  ; Cn #  [55] <reserved-10C49>..<reserved-10C7F>
+-10CB3..10CBF  ; Cn #  [13] <reserved-10CB3>..<reserved-10CBF>
+-10CF3..10CF9  ; Cn #   [7] <reserved-10CF3>..<reserved-10CF9>
+-10D28..10D2F  ; Cn #   [8] <reserved-10D28>..<reserved-10D2F>
+-10D3A..10E5F  ; Cn # [294] <reserved-10D3A>..<reserved-10E5F>
+-10E7F         ; Cn #       <reserved-10E7F>
+-10EAA         ; Cn #       <reserved-10EAA>
+-10EAE..10EAF  ; Cn #   [2] <reserved-10EAE>..<reserved-10EAF>
+-10EB2..10EFF  ; Cn #  [78] <reserved-10EB2>..<reserved-10EFF>
+-10F28..10F2F  ; Cn #   [8] <reserved-10F28>..<reserved-10F2F>
+-10F5A..10FAF  ; Cn #  [86] <reserved-10F5A>..<reserved-10FAF>
+-10FCC..10FDF  ; Cn #  [20] <reserved-10FCC>..<reserved-10FDF>
+-10FF7..10FFF  ; Cn #   [9] <reserved-10FF7>..<reserved-10FFF>
+-1104E..11051  ; Cn #   [4] <reserved-1104E>..<reserved-11051>
+-11070..1107E  ; Cn #  [15] <reserved-11070>..<reserved-1107E>
+-110C2..110CC  ; Cn #  [11] <reserved-110C2>..<reserved-110CC>
+-110CE..110CF  ; Cn #   [2] <reserved-110CE>..<reserved-110CF>
+-110E9..110EF  ; Cn #   [7] <reserved-110E9>..<reserved-110EF>
+-110FA..110FF  ; Cn #   [6] <reserved-110FA>..<reserved-110FF>
+-11135         ; Cn #       <reserved-11135>
+-11148..1114F  ; Cn #   [8] <reserved-11148>..<reserved-1114F>
+-11177..1117F  ; Cn #   [9] <reserved-11177>..<reserved-1117F>
+-111E0         ; Cn #       <reserved-111E0>
+-111F5..111FF  ; Cn #  [11] <reserved-111F5>..<reserved-111FF>
+-11212         ; Cn #       <reserved-11212>
+-1123F..1127F  ; Cn #  [65] <reserved-1123F>..<reserved-1127F>
+-11287         ; Cn #       <reserved-11287>
+-11289         ; Cn #       <reserved-11289>
+-1128E         ; Cn #       <reserved-1128E>
+-1129E         ; Cn #       <reserved-1129E>
+-112AA..112AF  ; Cn #   [6] <reserved-112AA>..<reserved-112AF>
+-112EB..112EF  ; Cn #   [5] <reserved-112EB>..<reserved-112EF>
+-112FA..112FF  ; Cn #   [6] <reserved-112FA>..<reserved-112FF>
+-11304         ; Cn #       <reserved-11304>
+-1130D..1130E  ; Cn #   [2] <reserved-1130D>..<reserved-1130E>
+-11311..11312  ; Cn #   [2] <reserved-11311>..<reserved-11312>
+-11329         ; Cn #       <reserved-11329>
+-11331         ; Cn #       <reserved-11331>
+-11334         ; Cn #       <reserved-11334>
+-1133A         ; Cn #       <reserved-1133A>
+-11345..11346  ; Cn #   [2] <reserved-11345>..<reserved-11346>
+-11349..1134A  ; Cn #   [2] <reserved-11349>..<reserved-1134A>
+-1134E..1134F  ; Cn #   [2] <reserved-1134E>..<reserved-1134F>
+-11351..11356  ; Cn #   [6] <reserved-11351>..<reserved-11356>
+-11358..1135C  ; Cn #   [5] <reserved-11358>..<reserved-1135C>
+-11364..11365  ; Cn #   [2] <reserved-11364>..<reserved-11365>
+-1136D..1136F  ; Cn #   [3] <reserved-1136D>..<reserved-1136F>
+-11375..113FF  ; Cn # [139] <reserved-11375>..<reserved-113FF>
+-1145C         ; Cn #       <reserved-1145C>
+-11462..1147F  ; Cn #  [30] <reserved-11462>..<reserved-1147F>
+-114C8..114CF  ; Cn #   [8] <reserved-114C8>..<reserved-114CF>
+-114DA..1157F  ; Cn # [166] <reserved-114DA>..<reserved-1157F>
+-115B6..115B7  ; Cn #   [2] <reserved-115B6>..<reserved-115B7>
+-115DE..115FF  ; Cn #  [34] <reserved-115DE>..<reserved-115FF>
+-11645..1164F  ; Cn #  [11] <reserved-11645>..<reserved-1164F>
+-1165A..1165F  ; Cn #   [6] <reserved-1165A>..<reserved-1165F>
+-1166D..1167F  ; Cn #  [19] <reserved-1166D>..<reserved-1167F>
+-116B9..116BF  ; Cn #   [7] <reserved-116B9>..<reserved-116BF>
+-116CA..116FF  ; Cn #  [54] <reserved-116CA>..<reserved-116FF>
+-1171B..1171C  ; Cn #   [2] <reserved-1171B>..<reserved-1171C>
+-1172C..1172F  ; Cn #   [4] <reserved-1172C>..<reserved-1172F>
+-11740..117FF  ; Cn # [192] <reserved-11740>..<reserved-117FF>
+-1183C..1189F  ; Cn # [100] <reserved-1183C>..<reserved-1189F>
+-118F3..118FE  ; Cn #  [12] <reserved-118F3>..<reserved-118FE>
+-11907..11908  ; Cn #   [2] <reserved-11907>..<reserved-11908>
+-1190A..1190B  ; Cn #   [2] <reserved-1190A>..<reserved-1190B>
+-11914         ; Cn #       <reserved-11914>
+-11917         ; Cn #       <reserved-11917>
+-11936         ; Cn #       <reserved-11936>
+-11939..1193A  ; Cn #   [2] <reserved-11939>..<reserved-1193A>
+-11947..1194F  ; Cn #   [9] <reserved-11947>..<reserved-1194F>
+-1195A..1199F  ; Cn #  [70] <reserved-1195A>..<reserved-1199F>
+-119A8..119A9  ; Cn #   [2] <reserved-119A8>..<reserved-119A9>
+-119D8..119D9  ; Cn #   [2] <reserved-119D8>..<reserved-119D9>
+-119E5..119FF  ; Cn #  [27] <reserved-119E5>..<reserved-119FF>
+-11A48..11A4F  ; Cn #   [8] <reserved-11A48>..<reserved-11A4F>
+-11AA3..11ABF  ; Cn #  [29] <reserved-11AA3>..<reserved-11ABF>
+-11AF9..11BFF  ; Cn # [263] <reserved-11AF9>..<reserved-11BFF>
+-11C09         ; Cn #       <reserved-11C09>
+-11C37         ; Cn #       <reserved-11C37>
+-11C46..11C4F  ; Cn #  [10] <reserved-11C46>..<reserved-11C4F>
+-11C6D..11C6F  ; Cn #   [3] <reserved-11C6D>..<reserved-11C6F>
+-11C90..11C91  ; Cn #   [2] <reserved-11C90>..<reserved-11C91>
+-11CA8         ; Cn #       <reserved-11CA8>
+-11CB7..11CFF  ; Cn #  [73] <reserved-11CB7>..<reserved-11CFF>
+-11D07         ; Cn #       <reserved-11D07>
+-11D0A         ; Cn #       <reserved-11D0A>
+-11D37..11D39  ; Cn #   [3] <reserved-11D37>..<reserved-11D39>
+-11D3B         ; Cn #       <reserved-11D3B>
+-11D3E         ; Cn #       <reserved-11D3E>
+-11D48..11D4F  ; Cn #   [8] <reserved-11D48>..<reserved-11D4F>
+-11D5A..11D5F  ; Cn #   [6] <reserved-11D5A>..<reserved-11D5F>
+-11D66         ; Cn #       <reserved-11D66>
+-11D69         ; Cn #       <reserved-11D69>
+-11D8F         ; Cn #       <reserved-11D8F>
+-11D92         ; Cn #       <reserved-11D92>
+-11D99..11D9F  ; Cn #   [7] <reserved-11D99>..<reserved-11D9F>
+-11DAA..11EDF  ; Cn # [310] <reserved-11DAA>..<reserved-11EDF>
+-11EF9..11FAF  ; Cn # [183] <reserved-11EF9>..<reserved-11FAF>
+-11FB1..11FBF  ; Cn #  [15] <reserved-11FB1>..<reserved-11FBF>
+-11FF2..11FFE  ; Cn #  [13] <reserved-11FF2>..<reserved-11FFE>
+-1239A..123FF  ; Cn # [102] <reserved-1239A>..<reserved-123FF>
+-1246F         ; Cn #       <reserved-1246F>
+-12475..1247F  ; Cn #  [11] <reserved-12475>..<reserved-1247F>
+-12544..12FFF  ; Cn # [2748] <reserved-12544>..<reserved-12FFF>
+-1342F         ; Cn #       <reserved-1342F>
+-13439..143FF  ; Cn # [4039] <reserved-13439>..<reserved-143FF>
+-14647..167FF  ; Cn # [8633] <reserved-14647>..<reserved-167FF>
+-16A39..16A3F  ; Cn #   [7] <reserved-16A39>..<reserved-16A3F>
+-16A5F         ; Cn #       <reserved-16A5F>
+-16A6A..16A6D  ; Cn #   [4] <reserved-16A6A>..<reserved-16A6D>
+-16A70..16ACF  ; Cn #  [96] <reserved-16A70>..<reserved-16ACF>
+-16AEE..16AEF  ; Cn #   [2] <reserved-16AEE>..<reserved-16AEF>
+-16AF6..16AFF  ; Cn #  [10] <reserved-16AF6>..<reserved-16AFF>
+-16B46..16B4F  ; Cn #  [10] <reserved-16B46>..<reserved-16B4F>
+-16B5A         ; Cn #       <reserved-16B5A>
+-16B62         ; Cn #       <reserved-16B62>
+-16B78..16B7C  ; Cn #   [5] <reserved-16B78>..<reserved-16B7C>
+-16B90..16E3F  ; Cn # [688] <reserved-16B90>..<reserved-16E3F>
+-16E9B..16EFF  ; Cn # [101] <reserved-16E9B>..<reserved-16EFF>
+-16F4B..16F4E  ; Cn #   [4] <reserved-16F4B>..<reserved-16F4E>
+-16F88..16F8E  ; Cn #   [7] <reserved-16F88>..<reserved-16F8E>
+-16FA0..16FDF  ; Cn #  [64] <reserved-16FA0>..<reserved-16FDF>
+-16FE5..16FEF  ; Cn #  [11] <reserved-16FE5>..<reserved-16FEF>
+-16FF2..16FFF  ; Cn #  [14] <reserved-16FF2>..<reserved-16FFF>
+-187F8..187FF  ; Cn #   [8] <reserved-187F8>..<reserved-187FF>
+-18CD6..18CFF  ; Cn #  [42] <reserved-18CD6>..<reserved-18CFF>
+-18D09..1AFFF  ; Cn # [8951] <reserved-18D09>..<reserved-1AFFF>
+-1B11F..1B14F  ; Cn #  [49] <reserved-1B11F>..<reserved-1B14F>
+-1B153..1B163  ; Cn #  [17] <reserved-1B153>..<reserved-1B163>
+-1B168..1B16F  ; Cn #   [8] <reserved-1B168>..<reserved-1B16F>
+-1B2FC..1BBFF  ; Cn # [2308] <reserved-1B2FC>..<reserved-1BBFF>
+-1BC6B..1BC6F  ; Cn #   [5] <reserved-1BC6B>..<reserved-1BC6F>
+-1BC7D..1BC7F  ; Cn #   [3] <reserved-1BC7D>..<reserved-1BC7F>
+-1BC89..1BC8F  ; Cn #   [7] <reserved-1BC89>..<reserved-1BC8F>
+-1BC9A..1BC9B  ; Cn #   [2] <reserved-1BC9A>..<reserved-1BC9B>
+-1BCA4..1CFFF  ; Cn # [4956] <reserved-1BCA4>..<reserved-1CFFF>
+-1D0F6..1D0FF  ; Cn #  [10] <reserved-1D0F6>..<reserved-1D0FF>
+-1D127..1D128  ; Cn #   [2] <reserved-1D127>..<reserved-1D128>
+-1D1E9..1D1FF  ; Cn #  [23] <reserved-1D1E9>..<reserved-1D1FF>
+-1D246..1D2DF  ; Cn # [154] <reserved-1D246>..<reserved-1D2DF>
+-1D2F4..1D2FF  ; Cn #  [12] <reserved-1D2F4>..<reserved-1D2FF>
+-1D357..1D35F  ; Cn #   [9] <reserved-1D357>..<reserved-1D35F>
+-1D379..1D3FF  ; Cn # [135] <reserved-1D379>..<reserved-1D3FF>
+-1D455         ; Cn #       <reserved-1D455>
+-1D49D         ; Cn #       <reserved-1D49D>
+-1D4A0..1D4A1  ; Cn #   [2] <reserved-1D4A0>..<reserved-1D4A1>
+-1D4A3..1D4A4  ; Cn #   [2] <reserved-1D4A3>..<reserved-1D4A4>
+-1D4A7..1D4A8  ; Cn #   [2] <reserved-1D4A7>..<reserved-1D4A8>
+-1D4AD         ; Cn #       <reserved-1D4AD>
+-1D4BA         ; Cn #       <reserved-1D4BA>
+-1D4BC         ; Cn #       <reserved-1D4BC>
+-1D4C4         ; Cn #       <reserved-1D4C4>
+-1D506         ; Cn #       <reserved-1D506>
+-1D50B..1D50C  ; Cn #   [2] <reserved-1D50B>..<reserved-1D50C>
+-1D515         ; Cn #       <reserved-1D515>
+-1D51D         ; Cn #       <reserved-1D51D>
+-1D53A         ; Cn #       <reserved-1D53A>
+-1D53F         ; Cn #       <reserved-1D53F>
+-1D545         ; Cn #       <reserved-1D545>
+-1D547..1D549  ; Cn #   [3] <reserved-1D547>..<reserved-1D549>
+-1D551         ; Cn #       <reserved-1D551>
+-1D6A6..1D6A7  ; Cn #   [2] <reserved-1D6A6>..<reserved-1D6A7>
+-1D7CC..1D7CD  ; Cn #   [2] <reserved-1D7CC>..<reserved-1D7CD>
+-1DA8C..1DA9A  ; Cn #  [15] <reserved-1DA8C>..<reserved-1DA9A>
+-1DAA0         ; Cn #       <reserved-1DAA0>
+-1DAB0..1DFFF  ; Cn # [1360] <reserved-1DAB0>..<reserved-1DFFF>
+-1E007         ; Cn #       <reserved-1E007>
+-1E019..1E01A  ; Cn #   [2] <reserved-1E019>..<reserved-1E01A>
+-1E022         ; Cn #       <reserved-1E022>
+-1E025         ; Cn #       <reserved-1E025>
+-1E02B..1E0FF  ; Cn # [213] <reserved-1E02B>..<reserved-1E0FF>
+-1E12D..1E12F  ; Cn #   [3] <reserved-1E12D>..<reserved-1E12F>
+-1E13E..1E13F  ; Cn #   [2] <reserved-1E13E>..<reserved-1E13F>
+-1E14A..1E14D  ; Cn #   [4] <reserved-1E14A>..<reserved-1E14D>
+-1E150..1E2BF  ; Cn # [368] <reserved-1E150>..<reserved-1E2BF>
+-1E2FA..1E2FE  ; Cn #   [5] <reserved-1E2FA>..<reserved-1E2FE>
+-1E300..1E7FF  ; Cn # [1280] <reserved-1E300>..<reserved-1E7FF>
+-1E8C5..1E8C6  ; Cn #   [2] <reserved-1E8C5>..<reserved-1E8C6>
+-1E8D7..1E8FF  ; Cn #  [41] <reserved-1E8D7>..<reserved-1E8FF>
+-1E94C..1E94F  ; Cn #   [4] <reserved-1E94C>..<reserved-1E94F>
+-1E95A..1E95D  ; Cn #   [4] <reserved-1E95A>..<reserved-1E95D>
+-1E960..1EC70  ; Cn # [785] <reserved-1E960>..<reserved-1EC70>
+-1ECB5..1ED00  ; Cn #  [76] <reserved-1ECB5>..<reserved-1ED00>
+-1ED3E..1EDFF  ; Cn # [194] <reserved-1ED3E>..<reserved-1EDFF>
+-1EE04         ; Cn #       <reserved-1EE04>
+-1EE20         ; Cn #       <reserved-1EE20>
+-1EE23         ; Cn #       <reserved-1EE23>
+-1EE25..1EE26  ; Cn #   [2] <reserved-1EE25>..<reserved-1EE26>
+-1EE28         ; Cn #       <reserved-1EE28>
+-1EE33         ; Cn #       <reserved-1EE33>
+-1EE38         ; Cn #       <reserved-1EE38>
+-1EE3A         ; Cn #       <reserved-1EE3A>
+-1EE3C..1EE41  ; Cn #   [6] <reserved-1EE3C>..<reserved-1EE41>
+-1EE43..1EE46  ; Cn #   [4] <reserved-1EE43>..<reserved-1EE46>
+-1EE48         ; Cn #       <reserved-1EE48>
+-1EE4A         ; Cn #       <reserved-1EE4A>
+-1EE4C         ; Cn #       <reserved-1EE4C>
+-1EE50         ; Cn #       <reserved-1EE50>
+-1EE53         ; Cn #       <reserved-1EE53>
+-1EE55..1EE56  ; Cn #   [2] <reserved-1EE55>..<reserved-1EE56>
+-1EE58         ; Cn #       <reserved-1EE58>
+-1EE5A         ; Cn #       <reserved-1EE5A>
+-1EE5C         ; Cn #       <reserved-1EE5C>
+-1EE5E         ; Cn #       <reserved-1EE5E>
+-1EE60         ; Cn #       <reserved-1EE60>
+-1EE63         ; Cn #       <reserved-1EE63>
+-1EE65..1EE66  ; Cn #   [2] <reserved-1EE65>..<reserved-1EE66>
+-1EE6B         ; Cn #       <reserved-1EE6B>
+-1EE73         ; Cn #       <reserved-1EE73>
+-1EE78         ; Cn #       <reserved-1EE78>
+-1EE7D         ; Cn #       <reserved-1EE7D>
+-1EE7F         ; Cn #       <reserved-1EE7F>
+-1EE8A         ; Cn #       <reserved-1EE8A>
+-1EE9C..1EEA0  ; Cn #   [5] <reserved-1EE9C>..<reserved-1EEA0>
+-1EEA4         ; Cn #       <reserved-1EEA4>
+-1EEAA         ; Cn #       <reserved-1EEAA>
+-1EEBC..1EEEF  ; Cn #  [52] <reserved-1EEBC>..<reserved-1EEEF>
+-1EEF2..1EFFF  ; Cn # [270] <reserved-1EEF2>..<reserved-1EFFF>
+-1F02C..1F02F  ; Cn #   [4] <reserved-1F02C>..<reserved-1F02F>
+-1F094..1F09F  ; Cn #  [12] <reserved-1F094>..<reserved-1F09F>
+-1F0AF..1F0B0  ; Cn #   [2] <reserved-1F0AF>..<reserved-1F0B0>
+-1F0C0         ; Cn #       <reserved-1F0C0>
+-1F0D0         ; Cn #       <reserved-1F0D0>
+-1F0F6..1F0FF  ; Cn #  [10] <reserved-1F0F6>..<reserved-1F0FF>
+-1F1AE..1F1E5  ; Cn #  [56] <reserved-1F1AE>..<reserved-1F1E5>
+-1F203..1F20F  ; Cn #  [13] <reserved-1F203>..<reserved-1F20F>
+-1F23C..1F23F  ; Cn #   [4] <reserved-1F23C>..<reserved-1F23F>
+-1F249..1F24F  ; Cn #   [7] <reserved-1F249>..<reserved-1F24F>
+-1F252..1F25F  ; Cn #  [14] <reserved-1F252>..<reserved-1F25F>
+-1F266..1F2FF  ; Cn # [154] <reserved-1F266>..<reserved-1F2FF>
+-1F6D8..1F6DF  ; Cn #   [8] <reserved-1F6D8>..<reserved-1F6DF>
+-1F6ED..1F6EF  ; Cn #   [3] <reserved-1F6ED>..<reserved-1F6EF>
+-1F6FD..1F6FF  ; Cn #   [3] <reserved-1F6FD>..<reserved-1F6FF>
+-1F774..1F77F  ; Cn #  [12] <reserved-1F774>..<reserved-1F77F>
+-1F7D9..1F7DF  ; Cn #   [7] <reserved-1F7D9>..<reserved-1F7DF>
+-1F7EC..1F7FF  ; Cn #  [20] <reserved-1F7EC>..<reserved-1F7FF>
+-1F80C..1F80F  ; Cn #   [4] <reserved-1F80C>..<reserved-1F80F>
+-1F848..1F84F  ; Cn #   [8] <reserved-1F848>..<reserved-1F84F>
+-1F85A..1F85F  ; Cn #   [6] <reserved-1F85A>..<reserved-1F85F>
+-1F888..1F88F  ; Cn #   [8] <reserved-1F888>..<reserved-1F88F>
+-1F8AE..1F8AF  ; Cn #   [2] <reserved-1F8AE>..<reserved-1F8AF>
+-1F8B2..1F8FF  ; Cn #  [78] <reserved-1F8B2>..<reserved-1F8FF>
+-1F979         ; Cn #       <reserved-1F979>
+-1F9CC         ; Cn #       <reserved-1F9CC>
+-1FA54..1FA5F  ; Cn #  [12] <reserved-1FA54>..<reserved-1FA5F>
+-1FA6E..1FA6F  ; Cn #   [2] <reserved-1FA6E>..<reserved-1FA6F>
+-1FA75..1FA77  ; Cn #   [3] <reserved-1FA75>..<reserved-1FA77>
+-1FA7B..1FA7F  ; Cn #   [5] <reserved-1FA7B>..<reserved-1FA7F>
+-1FA87..1FA8F  ; Cn #   [9] <reserved-1FA87>..<reserved-1FA8F>
+-1FAA9..1FAAF  ; Cn #   [7] <reserved-1FAA9>..<reserved-1FAAF>
+-1FAB7..1FABF  ; Cn #   [9] <reserved-1FAB7>..<reserved-1FABF>
+-1FAC3..1FACF  ; Cn #  [13] <reserved-1FAC3>..<reserved-1FACF>
+-1FAD7..1FAFF  ; Cn #  [41] <reserved-1FAD7>..<reserved-1FAFF>
+-1FB93         ; Cn #       <reserved-1FB93>
+-1FBCB..1FBEF  ; Cn #  [37] <reserved-1FBCB>..<reserved-1FBEF>
+-1FBFA..1FFFF  ; Cn # [1030] <reserved-1FBFA>..<noncharacter-1FFFF>
+-2A6DE..2A6FF  ; Cn #  [34] <reserved-2A6DE>..<reserved-2A6FF>
+-2B735..2B73F  ; Cn #  [11] <reserved-2B735>..<reserved-2B73F>
+-2B81E..2B81F  ; Cn #   [2] <reserved-2B81E>..<reserved-2B81F>
+-2CEA2..2CEAF  ; Cn #  [14] <reserved-2CEA2>..<reserved-2CEAF>
+-2EBE1..2F7FF  ; Cn # [3103] <reserved-2EBE1>..<reserved-2F7FF>
+-2FA1E..2FFFF  ; Cn # [1506] <reserved-2FA1E>..<noncharacter-2FFFF>
+-3134B..E0000  ; Cn # [715958] <reserved-3134B>..<reserved-E0000>
+-E0002..E001F  ; Cn #  [30] <reserved-E0002>..<reserved-E001F>
+-E0080..E00FF  ; Cn # [128] <reserved-E0080>..<reserved-E00FF>
+-E01F0..EFFFF  ; Cn # [65040] <reserved-E01F0>..<noncharacter-EFFFF>
+-FFFFE..FFFFF  ; Cn #   [2] <noncharacter-FFFFE>..<noncharacter-FFFFF>
+-10FFFE..10FFFF; Cn #   [2] <noncharacter-10FFFE>..<noncharacter-10FFFF>
+-
+-# Total code points: 830672
+-
+-# ================================================
+-
+-# General_Category=Uppercase_Letter
+-
+-0041..005A    ; Lu #  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+-00C0..00D6    ; Lu #  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+-00D8..00DE    ; Lu #   [7] LATIN CAPITAL LETTER O WITH STROKE..LATIN CAPITAL LETTER THORN
+-0100          ; Lu #       LATIN CAPITAL LETTER A WITH MACRON
+-0102          ; Lu #       LATIN CAPITAL LETTER A WITH BREVE
+-0104          ; Lu #       LATIN CAPITAL LETTER A WITH OGONEK
+-0106          ; Lu #       LATIN CAPITAL LETTER C WITH ACUTE
+-0108          ; Lu #       LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+-010A          ; Lu #       LATIN CAPITAL LETTER C WITH DOT ABOVE
+-010C          ; Lu #       LATIN CAPITAL LETTER C WITH CARON
+-010E          ; Lu #       LATIN CAPITAL LETTER D WITH CARON
+-0110          ; Lu #       LATIN CAPITAL LETTER D WITH STROKE
+-0112          ; Lu #       LATIN CAPITAL LETTER E WITH MACRON
+-0114          ; Lu #       LATIN CAPITAL LETTER E WITH BREVE
+-0116          ; Lu #       LATIN CAPITAL LETTER E WITH DOT ABOVE
+-0118          ; Lu #       LATIN CAPITAL LETTER E WITH OGONEK
+-011A          ; Lu #       LATIN CAPITAL LETTER E WITH CARON
+-011C          ; Lu #       LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+-011E          ; Lu #       LATIN CAPITAL LETTER G WITH BREVE
+-0120          ; Lu #       LATIN CAPITAL LETTER G WITH DOT ABOVE
+-0122          ; Lu #       LATIN CAPITAL LETTER G WITH CEDILLA
+-0124          ; Lu #       LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+-0126          ; Lu #       LATIN CAPITAL LETTER H WITH STROKE
+-0128          ; Lu #       LATIN CAPITAL LETTER I WITH TILDE
+-012A          ; Lu #       LATIN CAPITAL LETTER I WITH MACRON
+-012C          ; Lu #       LATIN CAPITAL LETTER I WITH BREVE
+-012E          ; Lu #       LATIN CAPITAL LETTER I WITH OGONEK
+-0130          ; Lu #       LATIN CAPITAL LETTER I WITH DOT ABOVE
+-0132          ; Lu #       LATIN CAPITAL LIGATURE IJ
+-0134          ; Lu #       LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+-0136          ; Lu #       LATIN CAPITAL LETTER K WITH CEDILLA
+-0139          ; Lu #       LATIN CAPITAL LETTER L WITH ACUTE
+-013B          ; Lu #       LATIN CAPITAL LETTER L WITH CEDILLA
+-013D          ; Lu #       LATIN CAPITAL LETTER L WITH CARON
+-013F          ; Lu #       LATIN CAPITAL LETTER L WITH MIDDLE DOT
+-0141          ; Lu #       LATIN CAPITAL LETTER L WITH STROKE
+-0143          ; Lu #       LATIN CAPITAL LETTER N WITH ACUTE
+-0145          ; Lu #       LATIN CAPITAL LETTER N WITH CEDILLA
+-0147          ; Lu #       LATIN CAPITAL LETTER N WITH CARON
+-014A          ; Lu #       LATIN CAPITAL LETTER ENG
+-014C          ; Lu #       LATIN CAPITAL LETTER O WITH MACRON
+-014E          ; Lu #       LATIN CAPITAL LETTER O WITH BREVE
+-0150          ; Lu #       LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+-0152          ; Lu #       LATIN CAPITAL LIGATURE OE
+-0154          ; Lu #       LATIN CAPITAL LETTER R WITH ACUTE
+-0156          ; Lu #       LATIN CAPITAL LETTER R WITH CEDILLA
+-0158          ; Lu #       LATIN CAPITAL LETTER R WITH CARON
+-015A          ; Lu #       LATIN CAPITAL LETTER S WITH ACUTE
+-015C          ; Lu #       LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+-015E          ; Lu #       LATIN CAPITAL LETTER S WITH CEDILLA
+-0160          ; Lu #       LATIN CAPITAL LETTER S WITH CARON
+-0162          ; Lu #       LATIN CAPITAL LETTER T WITH CEDILLA
+-0164          ; Lu #       LATIN CAPITAL LETTER T WITH CARON
+-0166          ; Lu #       LATIN CAPITAL LETTER T WITH STROKE
+-0168          ; Lu #       LATIN CAPITAL LETTER U WITH TILDE
+-016A          ; Lu #       LATIN CAPITAL LETTER U WITH MACRON
+-016C          ; Lu #       LATIN CAPITAL LETTER U WITH BREVE
+-016E          ; Lu #       LATIN CAPITAL LETTER U WITH RING ABOVE
+-0170          ; Lu #       LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+-0172          ; Lu #       LATIN CAPITAL LETTER U WITH OGONEK
+-0174          ; Lu #       LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+-0176          ; Lu #       LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+-0178..0179    ; Lu #   [2] LATIN CAPITAL LETTER Y WITH DIAERESIS..LATIN CAPITAL LETTER Z WITH ACUTE
+-017B          ; Lu #       LATIN CAPITAL LETTER Z WITH DOT ABOVE
+-017D          ; Lu #       LATIN CAPITAL LETTER Z WITH CARON
+-0181..0182    ; Lu #   [2] LATIN CAPITAL LETTER B WITH HOOK..LATIN CAPITAL LETTER B WITH TOPBAR
+-0184          ; Lu #       LATIN CAPITAL LETTER TONE SIX
+-0186..0187    ; Lu #   [2] LATIN CAPITAL LETTER OPEN O..LATIN CAPITAL LETTER C WITH HOOK
+-0189..018B    ; Lu #   [3] LATIN CAPITAL LETTER AFRICAN D..LATIN CAPITAL LETTER D WITH TOPBAR
+-018E..0191    ; Lu #   [4] LATIN CAPITAL LETTER REVERSED E..LATIN CAPITAL LETTER F WITH HOOK
+-0193..0194    ; Lu #   [2] LATIN CAPITAL LETTER G WITH HOOK..LATIN CAPITAL LETTER GAMMA
+-0196..0198    ; Lu #   [3] LATIN CAPITAL LETTER IOTA..LATIN CAPITAL LETTER K WITH HOOK
+-019C..019D    ; Lu #   [2] LATIN CAPITAL LETTER TURNED M..LATIN CAPITAL LETTER N WITH LEFT HOOK
+-019F..01A0    ; Lu #   [2] LATIN CAPITAL LETTER O WITH MIDDLE TILDE..LATIN CAPITAL LETTER O WITH HORN
+-01A2          ; Lu #       LATIN CAPITAL LETTER OI
+-01A4          ; Lu #       LATIN CAPITAL LETTER P WITH HOOK
+-01A6..01A7    ; Lu #   [2] LATIN LETTER YR..LATIN CAPITAL LETTER TONE TWO
+-01A9          ; Lu #       LATIN CAPITAL LETTER ESH
+-01AC          ; Lu #       LATIN CAPITAL LETTER T WITH HOOK
+-01AE..01AF    ; Lu #   [2] LATIN CAPITAL LETTER T WITH RETROFLEX HOOK..LATIN CAPITAL LETTER U WITH HORN
+-01B1..01B3    ; Lu #   [3] LATIN CAPITAL LETTER UPSILON..LATIN CAPITAL LETTER Y WITH HOOK
+-01B5          ; Lu #       LATIN CAPITAL LETTER Z WITH STROKE
+-01B7..01B8    ; Lu #   [2] LATIN CAPITAL LETTER EZH..LATIN CAPITAL LETTER EZH REVERSED
+-01BC          ; Lu #       LATIN CAPITAL LETTER TONE FIVE
+-01C4          ; Lu #       LATIN CAPITAL LETTER DZ WITH CARON
+-01C7          ; Lu #       LATIN CAPITAL LETTER LJ
+-01CA          ; Lu #       LATIN CAPITAL LETTER NJ
+-01CD          ; Lu #       LATIN CAPITAL LETTER A WITH CARON
+-01CF          ; Lu #       LATIN CAPITAL LETTER I WITH CARON
+-01D1          ; Lu #       LATIN CAPITAL LETTER O WITH CARON
+-01D3          ; Lu #       LATIN CAPITAL LETTER U WITH CARON
+-01D5          ; Lu #       LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+-01D7          ; Lu #       LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+-01D9          ; Lu #       LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+-01DB          ; Lu #       LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+-01DE          ; Lu #       LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+-01E0          ; Lu #       LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+-01E2          ; Lu #       LATIN CAPITAL LETTER AE WITH MACRON
+-01E4          ; Lu #       LATIN CAPITAL LETTER G WITH STROKE
+-01E6          ; Lu #       LATIN CAPITAL LETTER G WITH CARON
+-01E8          ; Lu #       LATIN CAPITAL LETTER K WITH CARON
+-01EA          ; Lu #       LATIN CAPITAL LETTER O WITH OGONEK
+-01EC          ; Lu #       LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+-01EE          ; Lu #       LATIN CAPITAL LETTER EZH WITH CARON
+-01F1          ; Lu #       LATIN CAPITAL LETTER DZ
+-01F4          ; Lu #       LATIN CAPITAL LETTER G WITH ACUTE
+-01F6..01F8    ; Lu #   [3] LATIN CAPITAL LETTER HWAIR..LATIN CAPITAL LETTER N WITH GRAVE
+-01FA          ; Lu #       LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+-01FC          ; Lu #       LATIN CAPITAL LETTER AE WITH ACUTE
+-01FE          ; Lu #       LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+-0200          ; Lu #       LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+-0202          ; Lu #       LATIN CAPITAL LETTER A WITH INVERTED BREVE
+-0204          ; Lu #       LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+-0206          ; Lu #       LATIN CAPITAL LETTER E WITH INVERTED BREVE
+-0208          ; Lu #       LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+-020A          ; Lu #       LATIN CAPITAL LETTER I WITH INVERTED BREVE
+-020C          ; Lu #       LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+-020E          ; Lu #       LATIN CAPITAL LETTER O WITH INVERTED BREVE
+-0210          ; Lu #       LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+-0212          ; Lu #       LATIN CAPITAL LETTER R WITH INVERTED BREVE
+-0214          ; Lu #       LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+-0216          ; Lu #       LATIN CAPITAL LETTER U WITH INVERTED BREVE
+-0218          ; Lu #       LATIN CAPITAL LETTER S WITH COMMA BELOW
+-021A          ; Lu #       LATIN CAPITAL LETTER T WITH COMMA BELOW
+-021C          ; Lu #       LATIN CAPITAL LETTER YOGH
+-021E          ; Lu #       LATIN CAPITAL LETTER H WITH CARON
+-0220          ; Lu #       LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+-0222          ; Lu #       LATIN CAPITAL LETTER OU
+-0224          ; Lu #       LATIN CAPITAL LETTER Z WITH HOOK
+-0226          ; Lu #       LATIN CAPITAL LETTER A WITH DOT ABOVE
+-0228          ; Lu #       LATIN CAPITAL LETTER E WITH CEDILLA
+-022A          ; Lu #       LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+-022C          ; Lu #       LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+-022E          ; Lu #       LATIN CAPITAL LETTER O WITH DOT ABOVE
+-0230          ; Lu #       LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+-0232          ; Lu #       LATIN CAPITAL LETTER Y WITH MACRON
+-023A..023B    ; Lu #   [2] LATIN CAPITAL LETTER A WITH STROKE..LATIN CAPITAL LETTER C WITH STROKE
+-023D..023E    ; Lu #   [2] LATIN CAPITAL LETTER L WITH BAR..LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+-0241          ; Lu #       LATIN CAPITAL LETTER GLOTTAL STOP
+-0243..0246    ; Lu #   [4] LATIN CAPITAL LETTER B WITH STROKE..LATIN CAPITAL LETTER E WITH STROKE
+-0248          ; Lu #       LATIN CAPITAL LETTER J WITH STROKE
+-024A          ; Lu #       LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+-024C          ; Lu #       LATIN CAPITAL LETTER R WITH STROKE
+-024E          ; Lu #       LATIN CAPITAL LETTER Y WITH STROKE
+-0370          ; Lu #       GREEK CAPITAL LETTER HETA
+-0372          ; Lu #       GREEK CAPITAL LETTER ARCHAIC SAMPI
+-0376          ; Lu #       GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
+-037F          ; Lu #       GREEK CAPITAL LETTER YOT
+-0386          ; Lu #       GREEK CAPITAL LETTER ALPHA WITH TONOS
+-0388..038A    ; Lu #   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+-038C          ; Lu #       GREEK CAPITAL LETTER OMICRON WITH TONOS
+-038E..038F    ; Lu #   [2] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER OMEGA WITH TONOS
+-0391..03A1    ; Lu #  [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO
+-03A3..03AB    ; Lu #   [9] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+-03CF          ; Lu #       GREEK CAPITAL KAI SYMBOL
+-03D2..03D4    ; Lu #   [3] GREEK UPSILON WITH HOOK SYMBOL..GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+-03D8          ; Lu #       GREEK LETTER ARCHAIC KOPPA
+-03DA          ; Lu #       GREEK LETTER STIGMA
+-03DC          ; Lu #       GREEK LETTER DIGAMMA
+-03DE          ; Lu #       GREEK LETTER KOPPA
+-03E0          ; Lu #       GREEK LETTER SAMPI
+-03E2          ; Lu #       COPTIC CAPITAL LETTER SHEI
+-03E4          ; Lu #       COPTIC CAPITAL LETTER FEI
+-03E6          ; Lu #       COPTIC CAPITAL LETTER KHEI
+-03E8          ; Lu #       COPTIC CAPITAL LETTER HORI
+-03EA          ; Lu #       COPTIC CAPITAL LETTER GANGIA
+-03EC          ; Lu #       COPTIC CAPITAL LETTER SHIMA
+-03EE          ; Lu #       COPTIC CAPITAL LETTER DEI
+-03F4          ; Lu #       GREEK CAPITAL THETA SYMBOL
+-03F7          ; Lu #       GREEK CAPITAL LETTER SHO
+-03F9..03FA    ; Lu #   [2] GREEK CAPITAL LUNATE SIGMA SYMBOL..GREEK CAPITAL LETTER SAN
+-03FD..042F    ; Lu #  [51] GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL..CYRILLIC CAPITAL LETTER YA
+-0460          ; Lu #       CYRILLIC CAPITAL LETTER OMEGA
+-0462          ; Lu #       CYRILLIC CAPITAL LETTER YAT
+-0464          ; Lu #       CYRILLIC CAPITAL LETTER IOTIFIED E
+-0466          ; Lu #       CYRILLIC CAPITAL LETTER LITTLE YUS
+-0468          ; Lu #       CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+-046A          ; Lu #       CYRILLIC CAPITAL LETTER BIG YUS
+-046C          ; Lu #       CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+-046E          ; Lu #       CYRILLIC CAPITAL LETTER KSI
+-0470          ; Lu #       CYRILLIC CAPITAL LETTER PSI
+-0472          ; Lu #       CYRILLIC CAPITAL LETTER FITA
+-0474          ; Lu #       CYRILLIC CAPITAL LETTER IZHITSA
+-0476          ; Lu #       CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+-0478          ; Lu #       CYRILLIC CAPITAL LETTER UK
+-047A          ; Lu #       CYRILLIC CAPITAL LETTER ROUND OMEGA
+-047C          ; Lu #       CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+-047E          ; Lu #       CYRILLIC CAPITAL LETTER OT
+-0480          ; Lu #       CYRILLIC CAPITAL LETTER KOPPA
+-048A          ; Lu #       CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+-048C          ; Lu #       CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+-048E          ; Lu #       CYRILLIC CAPITAL LETTER ER WITH TICK
+-0490          ; Lu #       CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+-0492          ; Lu #       CYRILLIC CAPITAL LETTER GHE WITH STROKE
+-0494          ; Lu #       CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+-0496          ; Lu #       CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+-0498          ; Lu #       CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+-049A          ; Lu #       CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+-049C          ; Lu #       CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+-049E          ; Lu #       CYRILLIC CAPITAL LETTER KA WITH STROKE
+-04A0          ; Lu #       CYRILLIC CAPITAL LETTER BASHKIR KA
+-04A2          ; Lu #       CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+-04A4          ; Lu #       CYRILLIC CAPITAL LIGATURE EN GHE
+-04A6          ; Lu #       CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+-04A8          ; Lu #       CYRILLIC CAPITAL LETTER ABKHASIAN HA
+-04AA          ; Lu #       CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+-04AC          ; Lu #       CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+-04AE          ; Lu #       CYRILLIC CAPITAL LETTER STRAIGHT U
+-04B0          ; Lu #       CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+-04B2          ; Lu #       CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+-04B4          ; Lu #       CYRILLIC CAPITAL LIGATURE TE TSE
+-04B6          ; Lu #       CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+-04B8          ; Lu #       CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+-04BA          ; Lu #       CYRILLIC CAPITAL LETTER SHHA
+-04BC          ; Lu #       CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+-04BE          ; Lu #       CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+-04C0..04C1    ; Lu #   [2] CYRILLIC LETTER PALOCHKA..CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+-04C3          ; Lu #       CYRILLIC CAPITAL LETTER KA WITH HOOK
+-04C5          ; Lu #       CYRILLIC CAPITAL LETTER EL WITH TAIL
+-04C7          ; Lu #       CYRILLIC CAPITAL LETTER EN WITH HOOK
+-04C9          ; Lu #       CYRILLIC CAPITAL LETTER EN WITH TAIL
+-04CB          ; Lu #       CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+-04CD          ; Lu #       CYRILLIC CAPITAL LETTER EM WITH TAIL
+-04D0          ; Lu #       CYRILLIC CAPITAL LETTER A WITH BREVE
+-04D2          ; Lu #       CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+-04D4          ; Lu #       CYRILLIC CAPITAL LIGATURE A IE
+-04D6          ; Lu #       CYRILLIC CAPITAL LETTER IE WITH BREVE
+-04D8          ; Lu #       CYRILLIC CAPITAL LETTER SCHWA
+-04DA          ; Lu #       CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+-04DC          ; Lu #       CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+-04DE          ; Lu #       CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+-04E0          ; Lu #       CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+-04E2          ; Lu #       CYRILLIC CAPITAL LETTER I WITH MACRON
+-04E4          ; Lu #       CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+-04E6          ; Lu #       CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+-04E8          ; Lu #       CYRILLIC CAPITAL LETTER BARRED O
+-04EA          ; Lu #       CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+-04EC          ; Lu #       CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+-04EE          ; Lu #       CYRILLIC CAPITAL LETTER U WITH MACRON
+-04F0          ; Lu #       CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+-04F2          ; Lu #       CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+-04F4          ; Lu #       CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+-04F6          ; Lu #       CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+-04F8          ; Lu #       CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+-04FA          ; Lu #       CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+-04FC          ; Lu #       CYRILLIC CAPITAL LETTER HA WITH HOOK
+-04FE          ; Lu #       CYRILLIC CAPITAL LETTER HA WITH STROKE
+-0500          ; Lu #       CYRILLIC CAPITAL LETTER KOMI DE
+-0502          ; Lu #       CYRILLIC CAPITAL LETTER KOMI DJE
+-0504          ; Lu #       CYRILLIC CAPITAL LETTER KOMI ZJE
+-0506          ; Lu #       CYRILLIC CAPITAL LETTER KOMI DZJE
+-0508          ; Lu #       CYRILLIC CAPITAL LETTER KOMI LJE
+-050A          ; Lu #       CYRILLIC CAPITAL LETTER KOMI NJE
+-050C          ; Lu #       CYRILLIC CAPITAL LETTER KOMI SJE
+-050E          ; Lu #       CYRILLIC CAPITAL LETTER KOMI TJE
+-0510          ; Lu #       CYRILLIC CAPITAL LETTER REVERSED ZE
+-0512          ; Lu #       CYRILLIC CAPITAL LETTER EL WITH HOOK
+-0514          ; Lu #       CYRILLIC CAPITAL LETTER LHA
+-0516          ; Lu #       CYRILLIC CAPITAL LETTER RHA
+-0518          ; Lu #       CYRILLIC CAPITAL LETTER YAE
+-051A          ; Lu #       CYRILLIC CAPITAL LETTER QA
+-051C          ; Lu #       CYRILLIC CAPITAL LETTER WE
+-051E          ; Lu #       CYRILLIC CAPITAL LETTER ALEUT KA
+-0520          ; Lu #       CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
+-0522          ; Lu #       CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+-0524          ; Lu #       CYRILLIC CAPITAL LETTER PE WITH DESCENDER
+-0526          ; Lu #       CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
+-0528          ; Lu #       CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
+-052A          ; Lu #       CYRILLIC CAPITAL LETTER DZZHE
+-052C          ; Lu #       CYRILLIC CAPITAL LETTER DCHE
+-052E          ; Lu #       CYRILLIC CAPITAL LETTER EL WITH DESCENDER
+-0531..0556    ; Lu #  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+-10A0..10C5    ; Lu #  [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+-10C7          ; Lu #       GEORGIAN CAPITAL LETTER YN
+-10CD          ; Lu #       GEORGIAN CAPITAL LETTER AEN
+-13A0..13F5    ; Lu #  [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
+-1C90..1CBA    ; Lu #  [43] GEORGIAN MTAVRULI CAPITAL LETTER AN..GEORGIAN MTAVRULI CAPITAL LETTER AIN
+-1CBD..1CBF    ; Lu #   [3] GEORGIAN MTAVRULI CAPITAL LETTER AEN..GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN
+-1E00          ; Lu #       LATIN CAPITAL LETTER A WITH RING BELOW
+-1E02          ; Lu #       LATIN CAPITAL LETTER B WITH DOT ABOVE
+-1E04          ; Lu #       LATIN CAPITAL LETTER B WITH DOT BELOW
+-1E06          ; Lu #       LATIN CAPITAL LETTER B WITH LINE BELOW
+-1E08          ; Lu #       LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+-1E0A          ; Lu #       LATIN CAPITAL LETTER D WITH DOT ABOVE
+-1E0C          ; Lu #       LATIN CAPITAL LETTER D WITH DOT BELOW
+-1E0E          ; Lu #       LATIN CAPITAL LETTER D WITH LINE BELOW
+-1E10          ; Lu #       LATIN CAPITAL LETTER D WITH CEDILLA
+-1E12          ; Lu #       LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+-1E14          ; Lu #       LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+-1E16          ; Lu #       LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+-1E18          ; Lu #       LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+-1E1A          ; Lu #       LATIN CAPITAL LETTER E WITH TILDE BELOW
+-1E1C          ; Lu #       LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+-1E1E          ; Lu #       LATIN CAPITAL LETTER F WITH DOT ABOVE
+-1E20          ; Lu #       LATIN CAPITAL LETTER G WITH MACRON
+-1E22          ; Lu #       LATIN CAPITAL LETTER H WITH DOT ABOVE
+-1E24          ; Lu #       LATIN CAPITAL LETTER H WITH DOT BELOW
+-1E26          ; Lu #       LATIN CAPITAL LETTER H WITH DIAERESIS
+-1E28          ; Lu #       LATIN CAPITAL LETTER H WITH CEDILLA
+-1E2A          ; Lu #       LATIN CAPITAL LETTER H WITH BREVE BELOW
+-1E2C          ; Lu #       LATIN CAPITAL LETTER I WITH TILDE BELOW
+-1E2E          ; Lu #       LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+-1E30          ; Lu #       LATIN CAPITAL LETTER K WITH ACUTE
+-1E32          ; Lu #       LATIN CAPITAL LETTER K WITH DOT BELOW
+-1E34          ; Lu #       LATIN CAPITAL LETTER K WITH LINE BELOW
+-1E36          ; Lu #       LATIN CAPITAL LETTER L WITH DOT BELOW
+-1E38          ; Lu #       LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+-1E3A          ; Lu #       LATIN CAPITAL LETTER L WITH LINE BELOW
+-1E3C          ; Lu #       LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+-1E3E          ; Lu #       LATIN CAPITAL LETTER M WITH ACUTE
+-1E40          ; Lu #       LATIN CAPITAL LETTER M WITH DOT ABOVE
+-1E42          ; Lu #       LATIN CAPITAL LETTER M WITH DOT BELOW
+-1E44          ; Lu #       LATIN CAPITAL LETTER N WITH DOT ABOVE
+-1E46          ; Lu #       LATIN CAPITAL LETTER N WITH DOT BELOW
+-1E48          ; Lu #       LATIN CAPITAL LETTER N WITH LINE BELOW
+-1E4A          ; Lu #       LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+-1E4C          ; Lu #       LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+-1E4E          ; Lu #       LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+-1E50          ; Lu #       LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+-1E52          ; Lu #       LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+-1E54          ; Lu #       LATIN CAPITAL LETTER P WITH ACUTE
+-1E56          ; Lu #       LATIN CAPITAL LETTER P WITH DOT ABOVE
+-1E58          ; Lu #       LATIN CAPITAL LETTER R WITH DOT ABOVE
+-1E5A          ; Lu #       LATIN CAPITAL LETTER R WITH DOT BELOW
+-1E5C          ; Lu #       LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+-1E5E          ; Lu #       LATIN CAPITAL LETTER R WITH LINE BELOW
+-1E60          ; Lu #       LATIN CAPITAL LETTER S WITH DOT ABOVE
+-1E62          ; Lu #       LATIN CAPITAL LETTER S WITH DOT BELOW
+-1E64          ; Lu #       LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+-1E66          ; Lu #       LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+-1E68          ; Lu #       LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+-1E6A          ; Lu #       LATIN CAPITAL LETTER T WITH DOT ABOVE
+-1E6C          ; Lu #       LATIN CAPITAL LETTER T WITH DOT BELOW
+-1E6E          ; Lu #       LATIN CAPITAL LETTER T WITH LINE BELOW
+-1E70          ; Lu #       LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+-1E72          ; Lu #       LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+-1E74          ; Lu #       LATIN CAPITAL LETTER U WITH TILDE BELOW
+-1E76          ; Lu #       LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+-1E78          ; Lu #       LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+-1E7A          ; Lu #       LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+-1E7C          ; Lu #       LATIN CAPITAL LETTER V WITH TILDE
+-1E7E          ; Lu #       LATIN CAPITAL LETTER V WITH DOT BELOW
+-1E80          ; Lu #       LATIN CAPITAL LETTER W WITH GRAVE
+-1E82          ; Lu #       LATIN CAPITAL LETTER W WITH ACUTE
+-1E84          ; Lu #       LATIN CAPITAL LETTER W WITH DIAERESIS
+-1E86          ; Lu #       LATIN CAPITAL LETTER W WITH DOT ABOVE
+-1E88          ; Lu #       LATIN CAPITAL LETTER W WITH DOT BELOW
+-1E8A          ; Lu #       LATIN CAPITAL LETTER X WITH DOT ABOVE
+-1E8C          ; Lu #       LATIN CAPITAL LETTER X WITH DIAERESIS
+-1E8E          ; Lu #       LATIN CAPITAL LETTER Y WITH DOT ABOVE
+-1E90          ; Lu #       LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+-1E92          ; Lu #       LATIN CAPITAL LETTER Z WITH DOT BELOW
+-1E94          ; Lu #       LATIN CAPITAL LETTER Z WITH LINE BELOW
+-1E9E          ; Lu #       LATIN CAPITAL LETTER SHARP S
+-1EA0          ; Lu #       LATIN CAPITAL LETTER A WITH DOT BELOW
+-1EA2          ; Lu #       LATIN CAPITAL LETTER A WITH HOOK ABOVE
+-1EA4          ; Lu #       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+-1EA6          ; Lu #       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+-1EA8          ; Lu #       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+-1EAA          ; Lu #       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+-1EAC          ; Lu #       LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+-1EAE          ; Lu #       LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+-1EB0          ; Lu #       LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+-1EB2          ; Lu #       LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+-1EB4          ; Lu #       LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+-1EB6          ; Lu #       LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+-1EB8          ; Lu #       LATIN CAPITAL LETTER E WITH DOT BELOW
+-1EBA          ; Lu #       LATIN CAPITAL LETTER E WITH HOOK ABOVE
+-1EBC          ; Lu #       LATIN CAPITAL LETTER E WITH TILDE
+-1EBE          ; Lu #       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+-1EC0          ; Lu #       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+-1EC2          ; Lu #       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+-1EC4          ; Lu #       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+-1EC6          ; Lu #       LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+-1EC8          ; Lu #       LATIN CAPITAL LETTER I WITH HOOK ABOVE
+-1ECA          ; Lu #       LATIN CAPITAL LETTER I WITH DOT BELOW
+-1ECC          ; Lu #       LATIN CAPITAL LETTER O WITH DOT BELOW
+-1ECE          ; Lu #       LATIN CAPITAL LETTER O WITH HOOK ABOVE
+-1ED0          ; Lu #       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+-1ED2          ; Lu #       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+-1ED4          ; Lu #       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+-1ED6          ; Lu #       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+-1ED8          ; Lu #       LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+-1EDA          ; Lu #       LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+-1EDC          ; Lu #       LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+-1EDE          ; Lu #       LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+-1EE0          ; Lu #       LATIN CAPITAL LETTER O WITH HORN AND TILDE
+-1EE2          ; Lu #       LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+-1EE4          ; Lu #       LATIN CAPITAL LETTER U WITH DOT BELOW
+-1EE6          ; Lu #       LATIN CAPITAL LETTER U WITH HOOK ABOVE
+-1EE8          ; Lu #       LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+-1EEA          ; Lu #       LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+-1EEC          ; Lu #       LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+-1EEE          ; Lu #       LATIN CAPITAL LETTER U WITH HORN AND TILDE
+-1EF0          ; Lu #       LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+-1EF2          ; Lu #       LATIN CAPITAL LETTER Y WITH GRAVE
+-1EF4          ; Lu #       LATIN CAPITAL LETTER Y WITH DOT BELOW
+-1EF6          ; Lu #       LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+-1EF8          ; Lu #       LATIN CAPITAL LETTER Y WITH TILDE
+-1EFA          ; Lu #       LATIN CAPITAL LETTER MIDDLE-WELSH LL
+-1EFC          ; Lu #       LATIN CAPITAL LETTER MIDDLE-WELSH V
+-1EFE          ; Lu #       LATIN CAPITAL LETTER Y WITH LOOP
+-1F08..1F0F    ; Lu #   [8] GREEK CAPITAL LETTER ALPHA WITH PSILI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+-1F18..1F1D    ; Lu #   [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+-1F28..1F2F    ; Lu #   [8] GREEK CAPITAL LETTER ETA WITH PSILI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+-1F38..1F3F    ; Lu #   [8] GREEK CAPITAL LETTER IOTA WITH PSILI..GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+-1F48..1F4D    ; Lu #   [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+-1F59          ; Lu #       GREEK CAPITAL LETTER UPSILON WITH DASIA
+-1F5B          ; Lu #       GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+-1F5D          ; Lu #       GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+-1F5F          ; Lu #       GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+-1F68..1F6F    ; Lu #   [8] GREEK CAPITAL LETTER OMEGA WITH PSILI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+-1FB8..1FBB    ; Lu #   [4] GREEK CAPITAL LETTER ALPHA WITH VRACHY..GREEK CAPITAL LETTER ALPHA WITH OXIA
+-1FC8..1FCB    ; Lu #   [4] GREEK CAPITAL LETTER EPSILON WITH VARIA..GREEK CAPITAL LETTER ETA WITH OXIA
+-1FD8..1FDB    ; Lu #   [4] GREEK CAPITAL LETTER IOTA WITH VRACHY..GREEK CAPITAL LETTER IOTA WITH OXIA
+-1FE8..1FEC    ; Lu #   [5] GREEK CAPITAL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
+-1FF8..1FFB    ; Lu #   [4] GREEK CAPITAL LETTER OMICRON WITH VARIA..GREEK CAPITAL LETTER OMEGA WITH OXIA
+-2102          ; Lu #       DOUBLE-STRUCK CAPITAL C
+-2107          ; Lu #       EULER CONSTANT
+-210B..210D    ; Lu #   [3] SCRIPT CAPITAL H..DOUBLE-STRUCK CAPITAL H
+-2110..2112    ; Lu #   [3] SCRIPT CAPITAL I..SCRIPT CAPITAL L
+-2115          ; Lu #       DOUBLE-STRUCK CAPITAL N
+-2119..211D    ; Lu #   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+-2124          ; Lu #       DOUBLE-STRUCK CAPITAL Z
+-2126          ; Lu #       OHM SIGN
+-2128          ; Lu #       BLACK-LETTER CAPITAL Z
+-212A..212D    ; Lu #   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
+-2130..2133    ; Lu #   [4] SCRIPT CAPITAL E..SCRIPT CAPITAL M
+-213E..213F    ; Lu #   [2] DOUBLE-STRUCK CAPITAL GAMMA..DOUBLE-STRUCK CAPITAL PI
+-2145          ; Lu #       DOUBLE-STRUCK ITALIC CAPITAL D
+-2183          ; Lu #       ROMAN NUMERAL REVERSED ONE HUNDRED
+-2C00..2C2E    ; Lu #  [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+-2C60          ; Lu #       LATIN CAPITAL LETTER L WITH DOUBLE BAR
+-2C62..2C64    ; Lu #   [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL
+-2C67          ; Lu #       LATIN CAPITAL LETTER H WITH DESCENDER
+-2C69          ; Lu #       LATIN CAPITAL LETTER K WITH DESCENDER
+-2C6B          ; Lu #       LATIN CAPITAL LETTER Z WITH DESCENDER
+-2C6D..2C70    ; Lu #   [4] LATIN CAPITAL LETTER ALPHA..LATIN CAPITAL LETTER TURNED ALPHA
+-2C72          ; Lu #       LATIN CAPITAL LETTER W WITH HOOK
+-2C75          ; Lu #       LATIN CAPITAL LETTER HALF H
+-2C7E..2C80    ; Lu #   [3] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC CAPITAL LETTER ALFA
+-2C82          ; Lu #       COPTIC CAPITAL LETTER VIDA
+-2C84          ; Lu #       COPTIC CAPITAL LETTER GAMMA
+-2C86          ; Lu #       COPTIC CAPITAL LETTER DALDA
+-2C88          ; Lu #       COPTIC CAPITAL LETTER EIE
+-2C8A          ; Lu #       COPTIC CAPITAL LETTER SOU
+-2C8C          ; Lu #       COPTIC CAPITAL LETTER ZATA
+-2C8E          ; Lu #       COPTIC CAPITAL LETTER HATE
+-2C90          ; Lu #       COPTIC CAPITAL LETTER THETHE
+-2C92          ; Lu #       COPTIC CAPITAL LETTER IAUDA
+-2C94          ; Lu #       COPTIC CAPITAL LETTER KAPA
+-2C96          ; Lu #       COPTIC CAPITAL LETTER LAULA
+-2C98          ; Lu #       COPTIC CAPITAL LETTER MI
+-2C9A          ; Lu #       COPTIC CAPITAL LETTER NI
+-2C9C          ; Lu #       COPTIC CAPITAL LETTER KSI
+-2C9E          ; Lu #       COPTIC CAPITAL LETTER O
+-2CA0          ; Lu #       COPTIC CAPITAL LETTER PI
+-2CA2          ; Lu #       COPTIC CAPITAL LETTER RO
+-2CA4          ; Lu #       COPTIC CAPITAL LETTER SIMA
+-2CA6          ; Lu #       COPTIC CAPITAL LETTER TAU
+-2CA8          ; Lu #       COPTIC CAPITAL LETTER UA
+-2CAA          ; Lu #       COPTIC CAPITAL LETTER FI
+-2CAC          ; Lu #       COPTIC CAPITAL LETTER KHI
+-2CAE          ; Lu #       COPTIC CAPITAL LETTER PSI
+-2CB0          ; Lu #       COPTIC CAPITAL LETTER OOU
+-2CB2          ; Lu #       COPTIC CAPITAL LETTER DIALECT-P ALEF
+-2CB4          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC AIN
+-2CB6          ; Lu #       COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+-2CB8          ; Lu #       COPTIC CAPITAL LETTER DIALECT-P KAPA
+-2CBA          ; Lu #       COPTIC CAPITAL LETTER DIALECT-P NI
+-2CBC          ; Lu #       COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+-2CBE          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC OOU
+-2CC0          ; Lu #       COPTIC CAPITAL LETTER SAMPI
+-2CC2          ; Lu #       COPTIC CAPITAL LETTER CROSSED SHEI
+-2CC4          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC SHEI
+-2CC6          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC ESH
+-2CC8          ; Lu #       COPTIC CAPITAL LETTER AKHMIMIC KHEI
+-2CCA          ; Lu #       COPTIC CAPITAL LETTER DIALECT-P HORI
+-2CCC          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC HORI
+-2CCE          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC HA
+-2CD0          ; Lu #       COPTIC CAPITAL LETTER L-SHAPED HA
+-2CD2          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC HEI
+-2CD4          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC HAT
+-2CD6          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+-2CD8          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC DJA
+-2CDA          ; Lu #       COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+-2CDC          ; Lu #       COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+-2CDE          ; Lu #       COPTIC CAPITAL LETTER OLD NUBIAN NGI
+-2CE0          ; Lu #       COPTIC CAPITAL LETTER OLD NUBIAN NYI
+-2CE2          ; Lu #       COPTIC CAPITAL LETTER OLD NUBIAN WAU
+-2CEB          ; Lu #       COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
+-2CED          ; Lu #       COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
+-2CF2          ; Lu #       COPTIC CAPITAL LETTER BOHAIRIC KHEI
+-A640          ; Lu #       CYRILLIC CAPITAL LETTER ZEMLYA
+-A642          ; Lu #       CYRILLIC CAPITAL LETTER DZELO
+-A644          ; Lu #       CYRILLIC CAPITAL LETTER REVERSED DZE
+-A646          ; Lu #       CYRILLIC CAPITAL LETTER IOTA
+-A648          ; Lu #       CYRILLIC CAPITAL LETTER DJERV
+-A64A          ; Lu #       CYRILLIC CAPITAL LETTER MONOGRAPH UK
+-A64C          ; Lu #       CYRILLIC CAPITAL LETTER BROAD OMEGA
+-A64E          ; Lu #       CYRILLIC CAPITAL LETTER NEUTRAL YER
+-A650          ; Lu #       CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+-A652          ; Lu #       CYRILLIC CAPITAL LETTER IOTIFIED YAT
+-A654          ; Lu #       CYRILLIC CAPITAL LETTER REVERSED YU
+-A656          ; Lu #       CYRILLIC CAPITAL LETTER IOTIFIED A
+-A658          ; Lu #       CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
+-A65A          ; Lu #       CYRILLIC CAPITAL LETTER BLENDED YUS
+-A65C          ; Lu #       CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
+-A65E          ; Lu #       CYRILLIC CAPITAL LETTER YN
+-A660          ; Lu #       CYRILLIC CAPITAL LETTER REVERSED TSE
+-A662          ; Lu #       CYRILLIC CAPITAL LETTER SOFT DE
+-A664          ; Lu #       CYRILLIC CAPITAL LETTER SOFT EL
+-A666          ; Lu #       CYRILLIC CAPITAL LETTER SOFT EM
+-A668          ; Lu #       CYRILLIC CAPITAL LETTER MONOCULAR O
+-A66A          ; Lu #       CYRILLIC CAPITAL LETTER BINOCULAR O
+-A66C          ; Lu #       CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
+-A680          ; Lu #       CYRILLIC CAPITAL LETTER DWE
+-A682          ; Lu #       CYRILLIC CAPITAL LETTER DZWE
+-A684          ; Lu #       CYRILLIC CAPITAL LETTER ZHWE
+-A686          ; Lu #       CYRILLIC CAPITAL LETTER CCHE
+-A688          ; Lu #       CYRILLIC CAPITAL LETTER DZZE
+-A68A          ; Lu #       CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
+-A68C          ; Lu #       CYRILLIC CAPITAL LETTER TWE
+-A68E          ; Lu #       CYRILLIC CAPITAL LETTER TSWE
+-A690          ; Lu #       CYRILLIC CAPITAL LETTER TSSE
+-A692          ; Lu #       CYRILLIC CAPITAL LETTER TCHE
+-A694          ; Lu #       CYRILLIC CAPITAL LETTER HWE
+-A696          ; Lu #       CYRILLIC CAPITAL LETTER SHWE
+-A698          ; Lu #       CYRILLIC CAPITAL LETTER DOUBLE O
+-A69A          ; Lu #       CYRILLIC CAPITAL LETTER CROSSED O
+-A722          ; Lu #       LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
+-A724          ; Lu #       LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
+-A726          ; Lu #       LATIN CAPITAL LETTER HENG
+-A728          ; Lu #       LATIN CAPITAL LETTER TZ
+-A72A          ; Lu #       LATIN CAPITAL LETTER TRESILLO
+-A72C          ; Lu #       LATIN CAPITAL LETTER CUATRILLO
+-A72E          ; Lu #       LATIN CAPITAL LETTER CUATRILLO WITH COMMA
+-A732          ; Lu #       LATIN CAPITAL LETTER AA
+-A734          ; Lu #       LATIN CAPITAL LETTER AO
+-A736          ; Lu #       LATIN CAPITAL LETTER AU
+-A738          ; Lu #       LATIN CAPITAL LETTER AV
+-A73A          ; Lu #       LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
+-A73C          ; Lu #       LATIN CAPITAL LETTER AY
+-A73E          ; Lu #       LATIN CAPITAL LETTER REVERSED C WITH DOT
+-A740          ; Lu #       LATIN CAPITAL LETTER K WITH STROKE
+-A742          ; Lu #       LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
+-A744          ; Lu #       LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
+-A746          ; Lu #       LATIN CAPITAL LETTER BROKEN L
+-A748          ; Lu #       LATIN CAPITAL LETTER L WITH HIGH STROKE
+-A74A          ; Lu #       LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
+-A74C          ; Lu #       LATIN CAPITAL LETTER O WITH LOOP
+-A74E          ; Lu #       LATIN CAPITAL LETTER OO
+-A750          ; Lu #       LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
+-A752          ; Lu #       LATIN CAPITAL LETTER P WITH FLOURISH
+-A754          ; Lu #       LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
+-A756          ; Lu #       LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
+-A758          ; Lu #       LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
+-A75A          ; Lu #       LATIN CAPITAL LETTER R ROTUNDA
+-A75C          ; Lu #       LATIN CAPITAL LETTER RUM ROTUNDA
+-A75E          ; Lu #       LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
+-A760          ; Lu #       LATIN CAPITAL LETTER VY
+-A762          ; Lu #       LATIN CAPITAL LETTER VISIGOTHIC Z
+-A764          ; Lu #       LATIN CAPITAL LETTER THORN WITH STROKE
+-A766          ; Lu #       LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
+-A768          ; Lu #       LATIN CAPITAL LETTER VEND
+-A76A          ; Lu #       LATIN CAPITAL LETTER ET
+-A76C          ; Lu #       LATIN CAPITAL LETTER IS
+-A76E          ; Lu #       LATIN CAPITAL LETTER CON
+-A779          ; Lu #       LATIN CAPITAL LETTER INSULAR D
+-A77B          ; Lu #       LATIN CAPITAL LETTER INSULAR F
+-A77D..A77E    ; Lu #   [2] LATIN CAPITAL LETTER INSULAR G..LATIN CAPITAL LETTER TURNED INSULAR G
+-A780          ; Lu #       LATIN CAPITAL LETTER TURNED L
+-A782          ; Lu #       LATIN CAPITAL LETTER INSULAR R
+-A784          ; Lu #       LATIN CAPITAL LETTER INSULAR S
+-A786          ; Lu #       LATIN CAPITAL LETTER INSULAR T
+-A78B          ; Lu #       LATIN CAPITAL LETTER SALTILLO
+-A78D          ; Lu #       LATIN CAPITAL LETTER TURNED H
+-A790          ; Lu #       LATIN CAPITAL LETTER N WITH DESCENDER
+-A792          ; Lu #       LATIN CAPITAL LETTER C WITH BAR
+-A796          ; Lu #       LATIN CAPITAL LETTER B WITH FLOURISH
+-A798          ; Lu #       LATIN CAPITAL LETTER F WITH STROKE
+-A79A          ; Lu #       LATIN CAPITAL LETTER VOLAPUK AE
+-A79C          ; Lu #       LATIN CAPITAL LETTER VOLAPUK OE
+-A79E          ; Lu #       LATIN CAPITAL LETTER VOLAPUK UE
+-A7A0          ; Lu #       LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
+-A7A2          ; Lu #       LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
+-A7A4          ; Lu #       LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
+-A7A6          ; Lu #       LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
+-A7A8          ; Lu #       LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
+-A7AA..A7AE    ; Lu #   [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I
+-A7B0..A7B4    ; Lu #   [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA
+-A7B6          ; Lu #       LATIN CAPITAL LETTER OMEGA
+-A7B8          ; Lu #       LATIN CAPITAL LETTER U WITH STROKE
+-A7BA          ; Lu #       LATIN CAPITAL LETTER GLOTTAL A
+-A7BC          ; Lu #       LATIN CAPITAL LETTER GLOTTAL I
+-A7BE          ; Lu #       LATIN CAPITAL LETTER GLOTTAL U
+-A7C2          ; Lu #       LATIN CAPITAL LETTER ANGLICANA W
+-A7C4..A7C7    ; Lu #   [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+-A7C9          ; Lu #       LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+-A7F5          ; Lu #       LATIN CAPITAL LETTER REVERSED HALF H
+-FF21..FF3A    ; Lu #  [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
+-10400..10427  ; Lu #  [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW
+-104B0..104D3  ; Lu #  [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+-10C80..10CB2  ; Lu #  [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
+-118A0..118BF  ; Lu #  [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO
+-16E40..16E5F  ; Lu #  [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y
+-1D400..1D419  ; Lu #  [26] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL BOLD CAPITAL Z
+-1D434..1D44D  ; Lu #  [26] MATHEMATICAL ITALIC CAPITAL A..MATHEMATICAL ITALIC CAPITAL Z
+-1D468..1D481  ; Lu #  [26] MATHEMATICAL BOLD ITALIC CAPITAL A..MATHEMATICAL BOLD ITALIC CAPITAL Z
+-1D49C         ; Lu #       MATHEMATICAL SCRIPT CAPITAL A
+-1D49E..1D49F  ; Lu #   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+-1D4A2         ; Lu #       MATHEMATICAL SCRIPT CAPITAL G
+-1D4A5..1D4A6  ; Lu #   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+-1D4A9..1D4AC  ; Lu #   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+-1D4AE..1D4B5  ; Lu #   [8] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT CAPITAL Z
+-1D4D0..1D4E9  ; Lu #  [26] MATHEMATICAL BOLD SCRIPT CAPITAL A..MATHEMATICAL BOLD SCRIPT CAPITAL Z
+-1D504..1D505  ; Lu #   [2] MATHEMATICAL FRAKTUR CAPITAL A..MATHEMATICAL FRAKTUR CAPITAL B
+-1D507..1D50A  ; Lu #   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+-1D50D..1D514  ; Lu #   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+-1D516..1D51C  ; Lu #   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+-1D538..1D539  ; Lu #   [2] MATHEMATICAL DOUBLE-STRUCK CAPITAL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+-1D53B..1D53E  ; Lu #   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+-1D540..1D544  ; Lu #   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+-1D546         ; Lu #       MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+-1D54A..1D550  ; Lu #   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+-1D56C..1D585  ; Lu #  [26] MATHEMATICAL BOLD FRAKTUR CAPITAL A..MATHEMATICAL BOLD FRAKTUR CAPITAL Z
+-1D5A0..1D5B9  ; Lu #  [26] MATHEMATICAL SANS-SERIF CAPITAL A..MATHEMATICAL SANS-SERIF CAPITAL Z
+-1D5D4..1D5ED  ; Lu #  [26] MATHEMATICAL SANS-SERIF BOLD CAPITAL A..MATHEMATICAL SANS-SERIF BOLD CAPITAL Z
+-1D608..1D621  ; Lu #  [26] MATHEMATICAL SANS-SERIF ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z
+-1D63C..1D655  ; Lu #  [26] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z
+-1D670..1D689  ; Lu #  [26] MATHEMATICAL MONOSPACE CAPITAL A..MATHEMATICAL MONOSPACE CAPITAL Z
+-1D6A8..1D6C0  ; Lu #  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+-1D6E2..1D6FA  ; Lu #  [25] MATHEMATICAL ITALIC CAPITAL ALPHA..MATHEMATICAL ITALIC CAPITAL OMEGA
+-1D71C..1D734  ; Lu #  [25] MATHEMATICAL BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+-1D756..1D76E  ; Lu #  [25] MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+-1D790..1D7A8  ; Lu #  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+-1D7CA         ; Lu #       MATHEMATICAL BOLD CAPITAL DIGAMMA
+-1E900..1E921  ; Lu #  [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA
+-
+-# Total code points: 1791
+-
+-# ================================================
+-
+-# General_Category=Lowercase_Letter
+-
+-0061..007A    ; Ll #  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+-00B5          ; Ll #       MICRO SIGN
+-00DF..00F6    ; Ll #  [24] LATIN SMALL LETTER SHARP S..LATIN SMALL LETTER O WITH DIAERESIS
+-00F8..00FF    ; Ll #   [8] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER Y WITH DIAERESIS
+-0101          ; Ll #       LATIN SMALL LETTER A WITH MACRON
+-0103          ; Ll #       LATIN SMALL LETTER A WITH BREVE
+-0105          ; Ll #       LATIN SMALL LETTER A WITH OGONEK
+-0107          ; Ll #       LATIN SMALL LETTER C WITH ACUTE
+-0109          ; Ll #       LATIN SMALL LETTER C WITH CIRCUMFLEX
+-010B          ; Ll #       LATIN SMALL LETTER C WITH DOT ABOVE
+-010D          ; Ll #       LATIN SMALL LETTER C WITH CARON
+-010F          ; Ll #       LATIN SMALL LETTER D WITH CARON
+-0111          ; Ll #       LATIN SMALL LETTER D WITH STROKE
+-0113          ; Ll #       LATIN SMALL LETTER E WITH MACRON
+-0115          ; Ll #       LATIN SMALL LETTER E WITH BREVE
+-0117          ; Ll #       LATIN SMALL LETTER E WITH DOT ABOVE
+-0119          ; Ll #       LATIN SMALL LETTER E WITH OGONEK
+-011B          ; Ll #       LATIN SMALL LETTER E WITH CARON
+-011D          ; Ll #       LATIN SMALL LETTER G WITH CIRCUMFLEX
+-011F          ; Ll #       LATIN SMALL LETTER G WITH BREVE
+-0121          ; Ll #       LATIN SMALL LETTER G WITH DOT ABOVE
+-0123          ; Ll #       LATIN SMALL LETTER G WITH CEDILLA
+-0125          ; Ll #       LATIN SMALL LETTER H WITH CIRCUMFLEX
+-0127          ; Ll #       LATIN SMALL LETTER H WITH STROKE
+-0129          ; Ll #       LATIN SMALL LETTER I WITH TILDE
+-012B          ; Ll #       LATIN SMALL LETTER I WITH MACRON
+-012D          ; Ll #       LATIN SMALL LETTER I WITH BREVE
+-012F          ; Ll #       LATIN SMALL LETTER I WITH OGONEK
+-0131          ; Ll #       LATIN SMALL LETTER DOTLESS I
+-0133          ; Ll #       LATIN SMALL LIGATURE IJ
+-0135          ; Ll #       LATIN SMALL LETTER J WITH CIRCUMFLEX
+-0137..0138    ; Ll #   [2] LATIN SMALL LETTER K WITH CEDILLA..LATIN SMALL LETTER KRA
+-013A          ; Ll #       LATIN SMALL LETTER L WITH ACUTE
+-013C          ; Ll #       LATIN SMALL LETTER L WITH CEDILLA
+-013E          ; Ll #       LATIN SMALL LETTER L WITH CARON
+-0140          ; Ll #       LATIN SMALL LETTER L WITH MIDDLE DOT
+-0142          ; Ll #       LATIN SMALL LETTER L WITH STROKE
+-0144          ; Ll #       LATIN SMALL LETTER N WITH ACUTE
+-0146          ; Ll #       LATIN SMALL LETTER N WITH CEDILLA
+-0148..0149    ; Ll #   [2] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+-014B          ; Ll #       LATIN SMALL LETTER ENG
+-014D          ; Ll #       LATIN SMALL LETTER O WITH MACRON
+-014F          ; Ll #       LATIN SMALL LETTER O WITH BREVE
+-0151          ; Ll #       LATIN SMALL LETTER O WITH DOUBLE ACUTE
+-0153          ; Ll #       LATIN SMALL LIGATURE OE
+-0155          ; Ll #       LATIN SMALL LETTER R WITH ACUTE
+-0157          ; Ll #       LATIN SMALL LETTER R WITH CEDILLA
+-0159          ; Ll #       LATIN SMALL LETTER R WITH CARON
+-015B          ; Ll #       LATIN SMALL LETTER S WITH ACUTE
+-015D          ; Ll #       LATIN SMALL LETTER S WITH CIRCUMFLEX
+-015F          ; Ll #       LATIN SMALL LETTER S WITH CEDILLA
+-0161          ; Ll #       LATIN SMALL LETTER S WITH CARON
+-0163          ; Ll #       LATIN SMALL LETTER T WITH CEDILLA
+-0165          ; Ll #       LATIN SMALL LETTER T WITH CARON
+-0167          ; Ll #       LATIN SMALL LETTER T WITH STROKE
+-0169          ; Ll #       LATIN SMALL LETTER U WITH TILDE
+-016B          ; Ll #       LATIN SMALL LETTER U WITH MACRON
+-016D          ; Ll #       LATIN SMALL LETTER U WITH BREVE
+-016F          ; Ll #       LATIN SMALL LETTER U WITH RING ABOVE
+-0171          ; Ll #       LATIN SMALL LETTER U WITH DOUBLE ACUTE
+-0173          ; Ll #       LATIN SMALL LETTER U WITH OGONEK
+-0175          ; Ll #       LATIN SMALL LETTER W WITH CIRCUMFLEX
+-0177          ; Ll #       LATIN SMALL LETTER Y WITH CIRCUMFLEX
+-017A          ; Ll #       LATIN SMALL LETTER Z WITH ACUTE
+-017C          ; Ll #       LATIN SMALL LETTER Z WITH DOT ABOVE
+-017E..0180    ; Ll #   [3] LATIN SMALL LETTER Z WITH CARON..LATIN SMALL LETTER B WITH STROKE
+-0183          ; Ll #       LATIN SMALL LETTER B WITH TOPBAR
+-0185          ; Ll #       LATIN SMALL LETTER TONE SIX
+-0188          ; Ll #       LATIN SMALL LETTER C WITH HOOK
+-018C..018D    ; Ll #   [2] LATIN SMALL LETTER D WITH TOPBAR..LATIN SMALL LETTER TURNED DELTA
+-0192          ; Ll #       LATIN SMALL LETTER F WITH HOOK
+-0195          ; Ll #       LATIN SMALL LETTER HV
+-0199..019B    ; Ll #   [3] LATIN SMALL LETTER K WITH HOOK..LATIN SMALL LETTER LAMBDA WITH STROKE
+-019E          ; Ll #       LATIN SMALL LETTER N WITH LONG RIGHT LEG
+-01A1          ; Ll #       LATIN SMALL LETTER O WITH HORN
+-01A3          ; Ll #       LATIN SMALL LETTER OI
+-01A5          ; Ll #       LATIN SMALL LETTER P WITH HOOK
+-01A8          ; Ll #       LATIN SMALL LETTER TONE TWO
+-01AA..01AB    ; Ll #   [2] LATIN LETTER REVERSED ESH LOOP..LATIN SMALL LETTER T WITH PALATAL HOOK
+-01AD          ; Ll #       LATIN SMALL LETTER T WITH HOOK
+-01B0          ; Ll #       LATIN SMALL LETTER U WITH HORN
+-01B4          ; Ll #       LATIN SMALL LETTER Y WITH HOOK
+-01B6          ; Ll #       LATIN SMALL LETTER Z WITH STROKE
+-01B9..01BA    ; Ll #   [2] LATIN SMALL LETTER EZH REVERSED..LATIN SMALL LETTER EZH WITH TAIL
+-01BD..01BF    ; Ll #   [3] LATIN SMALL LETTER TONE FIVE..LATIN LETTER WYNN
+-01C6          ; Ll #       LATIN SMALL LETTER DZ WITH CARON
+-01C9          ; Ll #       LATIN SMALL LETTER LJ
+-01CC          ; Ll #       LATIN SMALL LETTER NJ
+-01CE          ; Ll #       LATIN SMALL LETTER A WITH CARON
+-01D0          ; Ll #       LATIN SMALL LETTER I WITH CARON
+-01D2          ; Ll #       LATIN SMALL LETTER O WITH CARON
+-01D4          ; Ll #       LATIN SMALL LETTER U WITH CARON
+-01D6          ; Ll #       LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+-01D8          ; Ll #       LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+-01DA          ; Ll #       LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+-01DC..01DD    ; Ll #   [2] LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE..LATIN SMALL LETTER TURNED E
+-01DF          ; Ll #       LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+-01E1          ; Ll #       LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+-01E3          ; Ll #       LATIN SMALL LETTER AE WITH MACRON
+-01E5          ; Ll #       LATIN SMALL LETTER G WITH STROKE
+-01E7          ; Ll #       LATIN SMALL LETTER G WITH CARON
+-01E9          ; Ll #       LATIN SMALL LETTER K WITH CARON
+-01EB          ; Ll #       LATIN SMALL LETTER O WITH OGONEK
+-01ED          ; Ll #       LATIN SMALL LETTER O WITH OGONEK AND MACRON
+-01EF..01F0    ; Ll #   [2] LATIN SMALL LETTER EZH WITH CARON..LATIN SMALL LETTER J WITH CARON
+-01F3          ; Ll #       LATIN SMALL LETTER DZ
+-01F5          ; Ll #       LATIN SMALL LETTER G WITH ACUTE
+-01F9          ; Ll #       LATIN SMALL LETTER N WITH GRAVE
+-01FB          ; Ll #       LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+-01FD          ; Ll #       LATIN SMALL LETTER AE WITH ACUTE
+-01FF          ; Ll #       LATIN SMALL LETTER O WITH STROKE AND ACUTE
+-0201          ; Ll #       LATIN SMALL LETTER A WITH DOUBLE GRAVE
+-0203          ; Ll #       LATIN SMALL LETTER A WITH INVERTED BREVE
+-0205          ; Ll #       LATIN SMALL LETTER E WITH DOUBLE GRAVE
+-0207          ; Ll #       LATIN SMALL LETTER E WITH INVERTED BREVE
+-0209          ; Ll #       LATIN SMALL LETTER I WITH DOUBLE GRAVE
+-020B          ; Ll #       LATIN SMALL LETTER I WITH INVERTED BREVE
+-020D          ; Ll #       LATIN SMALL LETTER O WITH DOUBLE GRAVE
+-020F          ; Ll #       LATIN SMALL LETTER O WITH INVERTED BREVE
+-0211          ; Ll #       LATIN SMALL LETTER R WITH DOUBLE GRAVE
+-0213          ; Ll #       LATIN SMALL LETTER R WITH INVERTED BREVE
+-0215          ; Ll #       LATIN SMALL LETTER U WITH DOUBLE GRAVE
+-0217          ; Ll #       LATIN SMALL LETTER U WITH INVERTED BREVE
+-0219          ; Ll #       LATIN SMALL LETTER S WITH COMMA BELOW
+-021B          ; Ll #       LATIN SMALL LETTER T WITH COMMA BELOW
+-021D          ; Ll #       LATIN SMALL LETTER YOGH
+-021F          ; Ll #       LATIN SMALL LETTER H WITH CARON
+-0221          ; Ll #       LATIN SMALL LETTER D WITH CURL
+-0223          ; Ll #       LATIN SMALL LETTER OU
+-0225          ; Ll #       LATIN SMALL LETTER Z WITH HOOK
+-0227          ; Ll #       LATIN SMALL LETTER A WITH DOT ABOVE
+-0229          ; Ll #       LATIN SMALL LETTER E WITH CEDILLA
+-022B          ; Ll #       LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+-022D          ; Ll #       LATIN SMALL LETTER O WITH TILDE AND MACRON
+-022F          ; Ll #       LATIN SMALL LETTER O WITH DOT ABOVE
+-0231          ; Ll #       LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+-0233..0239    ; Ll #   [7] LATIN SMALL LETTER Y WITH MACRON..LATIN SMALL LETTER QP DIGRAPH
+-023C          ; Ll #       LATIN SMALL LETTER C WITH STROKE
+-023F..0240    ; Ll #   [2] LATIN SMALL LETTER S WITH SWASH TAIL..LATIN SMALL LETTER Z WITH SWASH TAIL
+-0242          ; Ll #       LATIN SMALL LETTER GLOTTAL STOP
+-0247          ; Ll #       LATIN SMALL LETTER E WITH STROKE
+-0249          ; Ll #       LATIN SMALL LETTER J WITH STROKE
+-024B          ; Ll #       LATIN SMALL LETTER Q WITH HOOK TAIL
+-024D          ; Ll #       LATIN SMALL LETTER R WITH STROKE
+-024F..0293    ; Ll #  [69] LATIN SMALL LETTER Y WITH STROKE..LATIN SMALL LETTER EZH WITH CURL
+-0295..02AF    ; Ll #  [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+-0371          ; Ll #       GREEK SMALL LETTER HETA
+-0373          ; Ll #       GREEK SMALL LETTER ARCHAIC SAMPI
+-0377          ; Ll #       GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+-037B..037D    ; Ll #   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+-0390          ; Ll #       GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+-03AC..03CE    ; Ll #  [35] GREEK SMALL LETTER ALPHA WITH TONOS..GREEK SMALL LETTER OMEGA WITH TONOS
+-03D0..03D1    ; Ll #   [2] GREEK BETA SYMBOL..GREEK THETA SYMBOL
+-03D5..03D7    ; Ll #   [3] GREEK PHI SYMBOL..GREEK KAI SYMBOL
+-03D9          ; Ll #       GREEK SMALL LETTER ARCHAIC KOPPA
+-03DB          ; Ll #       GREEK SMALL LETTER STIGMA
+-03DD          ; Ll #       GREEK SMALL LETTER DIGAMMA
+-03DF          ; Ll #       GREEK SMALL LETTER KOPPA
+-03E1          ; Ll #       GREEK SMALL LETTER SAMPI
+-03E3          ; Ll #       COPTIC SMALL LETTER SHEI
+-03E5          ; Ll #       COPTIC SMALL LETTER FEI
+-03E7          ; Ll #       COPTIC SMALL LETTER KHEI
+-03E9          ; Ll #       COPTIC SMALL LETTER HORI
+-03EB          ; Ll #       COPTIC SMALL LETTER GANGIA
+-03ED          ; Ll #       COPTIC SMALL LETTER SHIMA
+-03EF..03F3    ; Ll #   [5] COPTIC SMALL LETTER DEI..GREEK LETTER YOT
+-03F5          ; Ll #       GREEK LUNATE EPSILON SYMBOL
+-03F8          ; Ll #       GREEK SMALL LETTER SHO
+-03FB..03FC    ; Ll #   [2] GREEK SMALL LETTER SAN..GREEK RHO WITH STROKE SYMBOL
+-0430..045F    ; Ll #  [48] CYRILLIC SMALL LETTER A..CYRILLIC SMALL LETTER DZHE
+-0461          ; Ll #       CYRILLIC SMALL LETTER OMEGA
+-0463          ; Ll #       CYRILLIC SMALL LETTER YAT
+-0465          ; Ll #       CYRILLIC SMALL LETTER IOTIFIED E
+-0467          ; Ll #       CYRILLIC SMALL LETTER LITTLE YUS
+-0469          ; Ll #       CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+-046B          ; Ll #       CYRILLIC SMALL LETTER BIG YUS
+-046D          ; Ll #       CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+-046F          ; Ll #       CYRILLIC SMALL LETTER KSI
+-0471          ; Ll #       CYRILLIC SMALL LETTER PSI
+-0473          ; Ll #       CYRILLIC SMALL LETTER FITA
+-0475          ; Ll #       CYRILLIC SMALL LETTER IZHITSA
+-0477          ; Ll #       CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+-0479          ; Ll #       CYRILLIC SMALL LETTER UK
+-047B          ; Ll #       CYRILLIC SMALL LETTER ROUND OMEGA
+-047D          ; Ll #       CYRILLIC SMALL LETTER OMEGA WITH TITLO
+-047F          ; Ll #       CYRILLIC SMALL LETTER OT
+-0481          ; Ll #       CYRILLIC SMALL LETTER KOPPA
+-048B          ; Ll #       CYRILLIC SMALL LETTER SHORT I WITH TAIL
+-048D          ; Ll #       CYRILLIC SMALL LETTER SEMISOFT SIGN
+-048F          ; Ll #       CYRILLIC SMALL LETTER ER WITH TICK
+-0491          ; Ll #       CYRILLIC SMALL LETTER GHE WITH UPTURN
+-0493          ; Ll #       CYRILLIC SMALL LETTER GHE WITH STROKE
+-0495          ; Ll #       CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+-0497          ; Ll #       CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+-0499          ; Ll #       CYRILLIC SMALL LETTER ZE WITH DESCENDER
+-049B          ; Ll #       CYRILLIC SMALL LETTER KA WITH DESCENDER
+-049D          ; Ll #       CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+-049F          ; Ll #       CYRILLIC SMALL LETTER KA WITH STROKE
+-04A1          ; Ll #       CYRILLIC SMALL LETTER BASHKIR KA
+-04A3          ; Ll #       CYRILLIC SMALL LETTER EN WITH DESCENDER
+-04A5          ; Ll #       CYRILLIC SMALL LIGATURE EN GHE
+-04A7          ; Ll #       CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+-04A9          ; Ll #       CYRILLIC SMALL LETTER ABKHASIAN HA
+-04AB          ; Ll #       CYRILLIC SMALL LETTER ES WITH DESCENDER
+-04AD          ; Ll #       CYRILLIC SMALL LETTER TE WITH DESCENDER
+-04AF          ; Ll #       CYRILLIC SMALL LETTER STRAIGHT U
+-04B1          ; Ll #       CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+-04B3          ; Ll #       CYRILLIC SMALL LETTER HA WITH DESCENDER
+-04B5          ; Ll #       CYRILLIC SMALL LIGATURE TE TSE
+-04B7          ; Ll #       CYRILLIC SMALL LETTER CHE WITH DESCENDER
+-04B9          ; Ll #       CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+-04BB          ; Ll #       CYRILLIC SMALL LETTER SHHA
+-04BD          ; Ll #       CYRILLIC SMALL LETTER ABKHASIAN CHE
+-04BF          ; Ll #       CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+-04C2          ; Ll #       CYRILLIC SMALL LETTER ZHE WITH BREVE
+-04C4          ; Ll #       CYRILLIC SMALL LETTER KA WITH HOOK
+-04C6          ; Ll #       CYRILLIC SMALL LETTER EL WITH TAIL
+-04C8          ; Ll #       CYRILLIC SMALL LETTER EN WITH HOOK
+-04CA          ; Ll #       CYRILLIC SMALL LETTER EN WITH TAIL
+-04CC          ; Ll #       CYRILLIC SMALL LETTER KHAKASSIAN CHE
+-04CE..04CF    ; Ll #   [2] CYRILLIC SMALL LETTER EM WITH TAIL..CYRILLIC SMALL LETTER PALOCHKA
+-04D1          ; Ll #       CYRILLIC SMALL LETTER A WITH BREVE
+-04D3          ; Ll #       CYRILLIC SMALL LETTER A WITH DIAERESIS
+-04D5          ; Ll #       CYRILLIC SMALL LIGATURE A IE
+-04D7          ; Ll #       CYRILLIC SMALL LETTER IE WITH BREVE
+-04D9          ; Ll #       CYRILLIC SMALL LETTER SCHWA
+-04DB          ; Ll #       CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+-04DD          ; Ll #       CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+-04DF          ; Ll #       CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+-04E1          ; Ll #       CYRILLIC SMALL LETTER ABKHASIAN DZE
+-04E3          ; Ll #       CYRILLIC SMALL LETTER I WITH MACRON
+-04E5          ; Ll #       CYRILLIC SMALL LETTER I WITH DIAERESIS
+-04E7          ; Ll #       CYRILLIC SMALL LETTER O WITH DIAERESIS
+-04E9          ; Ll #       CYRILLIC SMALL LETTER BARRED O
+-04EB          ; Ll #       CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+-04ED          ; Ll #       CYRILLIC SMALL LETTER E WITH DIAERESIS
+-04EF          ; Ll #       CYRILLIC SMALL LETTER U WITH MACRON
+-04F1          ; Ll #       CYRILLIC SMALL LETTER U WITH DIAERESIS
+-04F3          ; Ll #       CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+-04F5          ; Ll #       CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+-04F7          ; Ll #       CYRILLIC SMALL LETTER GHE WITH DESCENDER
+-04F9          ; Ll #       CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+-04FB          ; Ll #       CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
+-04FD          ; Ll #       CYRILLIC SMALL LETTER HA WITH HOOK
+-04FF          ; Ll #       CYRILLIC SMALL LETTER HA WITH STROKE
+-0501          ; Ll #       CYRILLIC SMALL LETTER KOMI DE
+-0503          ; Ll #       CYRILLIC SMALL LETTER KOMI DJE
+-0505          ; Ll #       CYRILLIC SMALL LETTER KOMI ZJE
+-0507          ; Ll #       CYRILLIC SMALL LETTER KOMI DZJE
+-0509          ; Ll #       CYRILLIC SMALL LETTER KOMI LJE
+-050B          ; Ll #       CYRILLIC SMALL LETTER KOMI NJE
+-050D          ; Ll #       CYRILLIC SMALL LETTER KOMI SJE
+-050F          ; Ll #       CYRILLIC SMALL LETTER KOMI TJE
+-0511          ; Ll #       CYRILLIC SMALL LETTER REVERSED ZE
+-0513          ; Ll #       CYRILLIC SMALL LETTER EL WITH HOOK
+-0515          ; Ll #       CYRILLIC SMALL LETTER LHA
+-0517          ; Ll #       CYRILLIC SMALL LETTER RHA
+-0519          ; Ll #       CYRILLIC SMALL LETTER YAE
+-051B          ; Ll #       CYRILLIC SMALL LETTER QA
+-051D          ; Ll #       CYRILLIC SMALL LETTER WE
+-051F          ; Ll #       CYRILLIC SMALL LETTER ALEUT KA
+-0521          ; Ll #       CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK
+-0523          ; Ll #       CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
+-0525          ; Ll #       CYRILLIC SMALL LETTER PE WITH DESCENDER
+-0527          ; Ll #       CYRILLIC SMALL LETTER SHHA WITH DESCENDER
+-0529          ; Ll #       CYRILLIC SMALL LETTER EN WITH LEFT HOOK
+-052B          ; Ll #       CYRILLIC SMALL LETTER DZZHE
+-052D          ; Ll #       CYRILLIC SMALL LETTER DCHE
+-052F          ; Ll #       CYRILLIC SMALL LETTER EL WITH DESCENDER
+-0560..0588    ; Ll #  [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
+-10D0..10FA    ; Ll #  [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
+-10FD..10FF    ; Ll #   [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
+-13F8..13FD    ; Ll #   [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+-1C80..1C88    ; Ll #   [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+-1D00..1D2B    ; Ll #  [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
+-1D6B..1D77    ; Ll #  [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
+-1D79..1D9A    ; Ll #  [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+-1E01          ; Ll #       LATIN SMALL LETTER A WITH RING BELOW
+-1E03          ; Ll #       LATIN SMALL LETTER B WITH DOT ABOVE
+-1E05          ; Ll #       LATIN SMALL LETTER B WITH DOT BELOW
+-1E07          ; Ll #       LATIN SMALL LETTER B WITH LINE BELOW
+-1E09          ; Ll #       LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+-1E0B          ; Ll #       LATIN SMALL LETTER D WITH DOT ABOVE
+-1E0D          ; Ll #       LATIN SMALL LETTER D WITH DOT BELOW
+-1E0F          ; Ll #       LATIN SMALL LETTER D WITH LINE BELOW
+-1E11          ; Ll #       LATIN SMALL LETTER D WITH CEDILLA
+-1E13          ; Ll #       LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+-1E15          ; Ll #       LATIN SMALL LETTER E WITH MACRON AND GRAVE
+-1E17          ; Ll #       LATIN SMALL LETTER E WITH MACRON AND ACUTE
+-1E19          ; Ll #       LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+-1E1B          ; Ll #       LATIN SMALL LETTER E WITH TILDE BELOW
+-1E1D          ; Ll #       LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+-1E1F          ; Ll #       LATIN SMALL LETTER F WITH DOT ABOVE
+-1E21          ; Ll #       LATIN SMALL LETTER G WITH MACRON
+-1E23          ; Ll #       LATIN SMALL LETTER H WITH DOT ABOVE
+-1E25          ; Ll #       LATIN SMALL LETTER H WITH DOT BELOW
+-1E27          ; Ll #       LATIN SMALL LETTER H WITH DIAERESIS
+-1E29          ; Ll #       LATIN SMALL LETTER H WITH CEDILLA
+-1E2B          ; Ll #       LATIN SMALL LETTER H WITH BREVE BELOW
+-1E2D          ; Ll #       LATIN SMALL LETTER I WITH TILDE BELOW
+-1E2F          ; Ll #       LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+-1E31          ; Ll #       LATIN SMALL LETTER K WITH ACUTE
+-1E33          ; Ll #       LATIN SMALL LETTER K WITH DOT BELOW
+-1E35          ; Ll #       LATIN SMALL LETTER K WITH LINE BELOW
+-1E37          ; Ll #       LATIN SMALL LETTER L WITH DOT BELOW
+-1E39          ; Ll #       LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+-1E3B          ; Ll #       LATIN SMALL LETTER L WITH LINE BELOW
+-1E3D          ; Ll #       LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+-1E3F          ; Ll #       LATIN SMALL LETTER M WITH ACUTE
+-1E41          ; Ll #       LATIN SMALL LETTER M WITH DOT ABOVE
+-1E43          ; Ll #       LATIN SMALL LETTER M WITH DOT BELOW
+-1E45          ; Ll #       LATIN SMALL LETTER N WITH DOT ABOVE
+-1E47          ; Ll #       LATIN SMALL LETTER N WITH DOT BELOW
+-1E49          ; Ll #       LATIN SMALL LETTER N WITH LINE BELOW
+-1E4B          ; Ll #       LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+-1E4D          ; Ll #       LATIN SMALL LETTER O WITH TILDE AND ACUTE
+-1E4F          ; Ll #       LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+-1E51          ; Ll #       LATIN SMALL LETTER O WITH MACRON AND GRAVE
+-1E53          ; Ll #       LATIN SMALL LETTER O WITH MACRON AND ACUTE
+-1E55          ; Ll #       LATIN SMALL LETTER P WITH ACUTE
+-1E57          ; Ll #       LATIN SMALL LETTER P WITH DOT ABOVE
+-1E59          ; Ll #       LATIN SMALL LETTER R WITH DOT ABOVE
+-1E5B          ; Ll #       LATIN SMALL LETTER R WITH DOT BELOW
+-1E5D          ; Ll #       LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+-1E5F          ; Ll #       LATIN SMALL LETTER R WITH LINE BELOW
+-1E61          ; Ll #       LATIN SMALL LETTER S WITH DOT ABOVE
+-1E63          ; Ll #       LATIN SMALL LETTER S WITH DOT BELOW
+-1E65          ; Ll #       LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+-1E67          ; Ll #       LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+-1E69          ; Ll #       LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+-1E6B          ; Ll #       LATIN SMALL LETTER T WITH DOT ABOVE
+-1E6D          ; Ll #       LATIN SMALL LETTER T WITH DOT BELOW
+-1E6F          ; Ll #       LATIN SMALL LETTER T WITH LINE BELOW
+-1E71          ; Ll #       LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+-1E73          ; Ll #       LATIN SMALL LETTER U WITH DIAERESIS BELOW
+-1E75          ; Ll #       LATIN SMALL LETTER U WITH TILDE BELOW
+-1E77          ; Ll #       LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+-1E79          ; Ll #       LATIN SMALL LETTER U WITH TILDE AND ACUTE
+-1E7B          ; Ll #       LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+-1E7D          ; Ll #       LATIN SMALL LETTER V WITH TILDE
+-1E7F          ; Ll #       LATIN SMALL LETTER V WITH DOT BELOW
+-1E81          ; Ll #       LATIN SMALL LETTER W WITH GRAVE
+-1E83          ; Ll #       LATIN SMALL LETTER W WITH ACUTE
+-1E85          ; Ll #       LATIN SMALL LETTER W WITH DIAERESIS
+-1E87          ; Ll #       LATIN SMALL LETTER W WITH DOT ABOVE
+-1E89          ; Ll #       LATIN SMALL LETTER W WITH DOT BELOW
+-1E8B          ; Ll #       LATIN SMALL LETTER X WITH DOT ABOVE
+-1E8D          ; Ll #       LATIN SMALL LETTER X WITH DIAERESIS
+-1E8F          ; Ll #       LATIN SMALL LETTER Y WITH DOT ABOVE
+-1E91          ; Ll #       LATIN SMALL LETTER Z WITH CIRCUMFLEX
+-1E93          ; Ll #       LATIN SMALL LETTER Z WITH DOT BELOW
+-1E95..1E9D    ; Ll #   [9] LATIN SMALL LETTER Z WITH LINE BELOW..LATIN SMALL LETTER LONG S WITH HIGH STROKE
+-1E9F          ; Ll #       LATIN SMALL LETTER DELTA
+-1EA1          ; Ll #       LATIN SMALL LETTER A WITH DOT BELOW
+-1EA3          ; Ll #       LATIN SMALL LETTER A WITH HOOK ABOVE
+-1EA5          ; Ll #       LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+-1EA7          ; Ll #       LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+-1EA9          ; Ll #       LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+-1EAB          ; Ll #       LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+-1EAD          ; Ll #       LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+-1EAF          ; Ll #       LATIN SMALL LETTER A WITH BREVE AND ACUTE
+-1EB1          ; Ll #       LATIN SMALL LETTER A WITH BREVE AND GRAVE
+-1EB3          ; Ll #       LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+-1EB5          ; Ll #       LATIN SMALL LETTER A WITH BREVE AND TILDE
+-1EB7          ; Ll #       LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+-1EB9          ; Ll #       LATIN SMALL LETTER E WITH DOT BELOW
+-1EBB          ; Ll #       LATIN SMALL LETTER E WITH HOOK ABOVE
+-1EBD          ; Ll #       LATIN SMALL LETTER E WITH TILDE
+-1EBF          ; Ll #       LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+-1EC1          ; Ll #       LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+-1EC3          ; Ll #       LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+-1EC5          ; Ll #       LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+-1EC7          ; Ll #       LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+-1EC9          ; Ll #       LATIN SMALL LETTER I WITH HOOK ABOVE
+-1ECB          ; Ll #       LATIN SMALL LETTER I WITH DOT BELOW
+-1ECD          ; Ll #       LATIN SMALL LETTER O WITH DOT BELOW
+-1ECF          ; Ll #       LATIN SMALL LETTER O WITH HOOK ABOVE
+-1ED1          ; Ll #       LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+-1ED3          ; Ll #       LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+-1ED5          ; Ll #       LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+-1ED7          ; Ll #       LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+-1ED9          ; Ll #       LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+-1EDB          ; Ll #       LATIN SMALL LETTER O WITH HORN AND ACUTE
+-1EDD          ; Ll #       LATIN SMALL LETTER O WITH HORN AND GRAVE
+-1EDF          ; Ll #       LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+-1EE1          ; Ll #       LATIN SMALL LETTER O WITH HORN AND TILDE
+-1EE3          ; Ll #       LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+-1EE5          ; Ll #       LATIN SMALL LETTER U WITH DOT BELOW
+-1EE7          ; Ll #       LATIN SMALL LETTER U WITH HOOK ABOVE
+-1EE9          ; Ll #       LATIN SMALL LETTER U WITH HORN AND ACUTE
+-1EEB          ; Ll #       LATIN SMALL LETTER U WITH HORN AND GRAVE
+-1EED          ; Ll #       LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+-1EEF          ; Ll #       LATIN SMALL LETTER U WITH HORN AND TILDE
+-1EF1          ; Ll #       LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+-1EF3          ; Ll #       LATIN SMALL LETTER Y WITH GRAVE
+-1EF5          ; Ll #       LATIN SMALL LETTER Y WITH DOT BELOW
+-1EF7          ; Ll #       LATIN SMALL LETTER Y WITH HOOK ABOVE
+-1EF9          ; Ll #       LATIN SMALL LETTER Y WITH TILDE
+-1EFB          ; Ll #       LATIN SMALL LETTER MIDDLE-WELSH LL
+-1EFD          ; Ll #       LATIN SMALL LETTER MIDDLE-WELSH V
+-1EFF..1F07    ; Ll #   [9] LATIN SMALL LETTER Y WITH LOOP..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+-1F10..1F15    ; Ll #   [6] GREEK SMALL LETTER EPSILON WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+-1F20..1F27    ; Ll #   [8] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+-1F30..1F37    ; Ll #   [8] GREEK SMALL LETTER IOTA WITH PSILI..GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+-1F40..1F45    ; Ll #   [6] GREEK SMALL LETTER OMICRON WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+-1F50..1F57    ; Ll #   [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+-1F60..1F67    ; Ll #   [8] GREEK SMALL LETTER OMEGA WITH PSILI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+-1F70..1F7D    ; Ll #  [14] GREEK SMALL LETTER ALPHA WITH VARIA..GREEK SMALL LETTER OMEGA WITH OXIA
+-1F80..1F87    ; Ll #   [8] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+-1F90..1F97    ; Ll #   [8] GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+-1FA0..1FA7    ; Ll #   [8] GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+-1FB0..1FB4    ; Ll #   [5] GREEK SMALL LETTER ALPHA WITH VRACHY..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+-1FB6..1FB7    ; Ll #   [2] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+-1FBE          ; Ll #       GREEK PROSGEGRAMMENI
+-1FC2..1FC4    ; Ll #   [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+-1FC6..1FC7    ; Ll #   [2] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+-1FD0..1FD3    ; Ll #   [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+-1FD6..1FD7    ; Ll #   [2] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+-1FE0..1FE7    ; Ll #   [8] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+-1FF2..1FF4    ; Ll #   [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+-1FF6..1FF7    ; Ll #   [2] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+-210A          ; Ll #       SCRIPT SMALL G
+-210E..210F    ; Ll #   [2] PLANCK CONSTANT..PLANCK CONSTANT OVER TWO PI
+-2113          ; Ll #       SCRIPT SMALL L
+-212F          ; Ll #       SCRIPT SMALL E
+-2134          ; Ll #       SCRIPT SMALL O
+-2139          ; Ll #       INFORMATION SOURCE
+-213C..213D    ; Ll #   [2] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK SMALL GAMMA
+-2146..2149    ; Ll #   [4] DOUBLE-STRUCK ITALIC SMALL D..DOUBLE-STRUCK ITALIC SMALL J
+-214E          ; Ll #       TURNED SMALL F
+-2184          ; Ll #       LATIN SMALL LETTER REVERSED C
+-2C30..2C5E    ; Ll #  [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+-2C61          ; Ll #       LATIN SMALL LETTER L WITH DOUBLE BAR
+-2C65..2C66    ; Ll #   [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE
+-2C68          ; Ll #       LATIN SMALL LETTER H WITH DESCENDER
+-2C6A          ; Ll #       LATIN SMALL LETTER K WITH DESCENDER
+-2C6C          ; Ll #       LATIN SMALL LETTER Z WITH DESCENDER
+-2C71          ; Ll #       LATIN SMALL LETTER V WITH RIGHT HOOK
+-2C73..2C74    ; Ll #   [2] LATIN SMALL LETTER W WITH HOOK..LATIN SMALL LETTER V WITH CURL
+-2C76..2C7B    ; Ll #   [6] LATIN SMALL LETTER HALF H..LATIN LETTER SMALL CAPITAL TURNED E
+-2C81          ; Ll #       COPTIC SMALL LETTER ALFA
+-2C83          ; Ll #       COPTIC SMALL LETTER VIDA
+-2C85          ; Ll #       COPTIC SMALL LETTER GAMMA
+-2C87          ; Ll #       COPTIC SMALL LETTER DALDA
+-2C89          ; Ll #       COPTIC SMALL LETTER EIE
+-2C8B          ; Ll #       COPTIC SMALL LETTER SOU
+-2C8D          ; Ll #       COPTIC SMALL LETTER ZATA
+-2C8F          ; Ll #       COPTIC SMALL LETTER HATE
+-2C91          ; Ll #       COPTIC SMALL LETTER THETHE
+-2C93          ; Ll #       COPTIC SMALL LETTER IAUDA
+-2C95          ; Ll #       COPTIC SMALL LETTER KAPA
+-2C97          ; Ll #       COPTIC SMALL LETTER LAULA
+-2C99          ; Ll #       COPTIC SMALL LETTER MI
+-2C9B          ; Ll #       COPTIC SMALL LETTER NI
+-2C9D          ; Ll #       COPTIC SMALL LETTER KSI
+-2C9F          ; Ll #       COPTIC SMALL LETTER O
+-2CA1          ; Ll #       COPTIC SMALL LETTER PI
+-2CA3          ; Ll #       COPTIC SMALL LETTER RO
+-2CA5          ; Ll #       COPTIC SMALL LETTER SIMA
+-2CA7          ; Ll #       COPTIC SMALL LETTER TAU
+-2CA9          ; Ll #       COPTIC SMALL LETTER UA
+-2CAB          ; Ll #       COPTIC SMALL LETTER FI
+-2CAD          ; Ll #       COPTIC SMALL LETTER KHI
+-2CAF          ; Ll #       COPTIC SMALL LETTER PSI
+-2CB1          ; Ll #       COPTIC SMALL LETTER OOU
+-2CB3          ; Ll #       COPTIC SMALL LETTER DIALECT-P ALEF
+-2CB5          ; Ll #       COPTIC SMALL LETTER OLD COPTIC AIN
+-2CB7          ; Ll #       COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+-2CB9          ; Ll #       COPTIC SMALL LETTER DIALECT-P KAPA
+-2CBB          ; Ll #       COPTIC SMALL LETTER DIALECT-P NI
+-2CBD          ; Ll #       COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+-2CBF          ; Ll #       COPTIC SMALL LETTER OLD COPTIC OOU
+-2CC1          ; Ll #       COPTIC SMALL LETTER SAMPI
+-2CC3          ; Ll #       COPTIC SMALL LETTER CROSSED SHEI
+-2CC5          ; Ll #       COPTIC SMALL LETTER OLD COPTIC SHEI
+-2CC7          ; Ll #       COPTIC SMALL LETTER OLD COPTIC ESH
+-2CC9          ; Ll #       COPTIC SMALL LETTER AKHMIMIC KHEI
+-2CCB          ; Ll #       COPTIC SMALL LETTER DIALECT-P HORI
+-2CCD          ; Ll #       COPTIC SMALL LETTER OLD COPTIC HORI
+-2CCF          ; Ll #       COPTIC SMALL LETTER OLD COPTIC HA
+-2CD1          ; Ll #       COPTIC SMALL LETTER L-SHAPED HA
+-2CD3          ; Ll #       COPTIC SMALL LETTER OLD COPTIC HEI
+-2CD5          ; Ll #       COPTIC SMALL LETTER OLD COPTIC HAT
+-2CD7          ; Ll #       COPTIC SMALL LETTER OLD COPTIC GANGIA
+-2CD9          ; Ll #       COPTIC SMALL LETTER OLD COPTIC DJA
+-2CDB          ; Ll #       COPTIC SMALL LETTER OLD COPTIC SHIMA
+-2CDD          ; Ll #       COPTIC SMALL LETTER OLD NUBIAN SHIMA
+-2CDF          ; Ll #       COPTIC SMALL LETTER OLD NUBIAN NGI
+-2CE1          ; Ll #       COPTIC SMALL LETTER OLD NUBIAN NYI
+-2CE3..2CE4    ; Ll #   [2] COPTIC SMALL LETTER OLD NUBIAN WAU..COPTIC SYMBOL KAI
+-2CEC          ; Ll #       COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI
+-2CEE          ; Ll #       COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
+-2CF3          ; Ll #       COPTIC SMALL LETTER BOHAIRIC KHEI
+-2D00..2D25    ; Ll #  [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+-2D27          ; Ll #       GEORGIAN SMALL LETTER YN
+-2D2D          ; Ll #       GEORGIAN SMALL LETTER AEN
+-A641          ; Ll #       CYRILLIC SMALL LETTER ZEMLYA
+-A643          ; Ll #       CYRILLIC SMALL LETTER DZELO
+-A645          ; Ll #       CYRILLIC SMALL LETTER REVERSED DZE
+-A647          ; Ll #       CYRILLIC SMALL LETTER IOTA
+-A649          ; Ll #       CYRILLIC SMALL LETTER DJERV
+-A64B          ; Ll #       CYRILLIC SMALL LETTER MONOGRAPH UK
+-A64D          ; Ll #       CYRILLIC SMALL LETTER BROAD OMEGA
+-A64F          ; Ll #       CYRILLIC SMALL LETTER NEUTRAL YER
+-A651          ; Ll #       CYRILLIC SMALL LETTER YERU WITH BACK YER
+-A653          ; Ll #       CYRILLIC SMALL LETTER IOTIFIED YAT
+-A655          ; Ll #       CYRILLIC SMALL LETTER REVERSED YU
+-A657          ; Ll #       CYRILLIC SMALL LETTER IOTIFIED A
+-A659          ; Ll #       CYRILLIC SMALL LETTER CLOSED LITTLE YUS
+-A65B          ; Ll #       CYRILLIC SMALL LETTER BLENDED YUS
+-A65D          ; Ll #       CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS
+-A65F          ; Ll #       CYRILLIC SMALL LETTER YN
+-A661          ; Ll #       CYRILLIC SMALL LETTER REVERSED TSE
+-A663          ; Ll #       CYRILLIC SMALL LETTER SOFT DE
+-A665          ; Ll #       CYRILLIC SMALL LETTER SOFT EL
+-A667          ; Ll #       CYRILLIC SMALL LETTER SOFT EM
+-A669          ; Ll #       CYRILLIC SMALL LETTER MONOCULAR O
+-A66B          ; Ll #       CYRILLIC SMALL LETTER BINOCULAR O
+-A66D          ; Ll #       CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
+-A681          ; Ll #       CYRILLIC SMALL LETTER DWE
+-A683          ; Ll #       CYRILLIC SMALL LETTER DZWE
+-A685          ; Ll #       CYRILLIC SMALL LETTER ZHWE
+-A687          ; Ll #       CYRILLIC SMALL LETTER CCHE
+-A689          ; Ll #       CYRILLIC SMALL LETTER DZZE
+-A68B          ; Ll #       CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK
+-A68D          ; Ll #       CYRILLIC SMALL LETTER TWE
+-A68F          ; Ll #       CYRILLIC SMALL LETTER TSWE
+-A691          ; Ll #       CYRILLIC SMALL LETTER TSSE
+-A693          ; Ll #       CYRILLIC SMALL LETTER TCHE
+-A695          ; Ll #       CYRILLIC SMALL LETTER HWE
+-A697          ; Ll #       CYRILLIC SMALL LETTER SHWE
+-A699          ; Ll #       CYRILLIC SMALL LETTER DOUBLE O
+-A69B          ; Ll #       CYRILLIC SMALL LETTER CROSSED O
+-A723          ; Ll #       LATIN SMALL LETTER EGYPTOLOGICAL ALEF
+-A725          ; Ll #       LATIN SMALL LETTER EGYPTOLOGICAL AIN
+-A727          ; Ll #       LATIN SMALL LETTER HENG
+-A729          ; Ll #       LATIN SMALL LETTER TZ
+-A72B          ; Ll #       LATIN SMALL LETTER TRESILLO
+-A72D          ; Ll #       LATIN SMALL LETTER CUATRILLO
+-A72F..A731    ; Ll #   [3] LATIN SMALL LETTER CUATRILLO WITH COMMA..LATIN LETTER SMALL CAPITAL S
+-A733          ; Ll #       LATIN SMALL LETTER AA
+-A735          ; Ll #       LATIN SMALL LETTER AO
+-A737          ; Ll #       LATIN SMALL LETTER AU
+-A739          ; Ll #       LATIN SMALL LETTER AV
+-A73B          ; Ll #       LATIN SMALL LETTER AV WITH HORIZONTAL BAR
+-A73D          ; Ll #       LATIN SMALL LETTER AY
+-A73F          ; Ll #       LATIN SMALL LETTER REVERSED C WITH DOT
+-A741          ; Ll #       LATIN SMALL LETTER K WITH STROKE
+-A743          ; Ll #       LATIN SMALL LETTER K WITH DIAGONAL STROKE
+-A745          ; Ll #       LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE
+-A747          ; Ll #       LATIN SMALL LETTER BROKEN L
+-A749          ; Ll #       LATIN SMALL LETTER L WITH HIGH STROKE
+-A74B          ; Ll #       LATIN SMALL LETTER O WITH LONG STROKE OVERLAY
+-A74D          ; Ll #       LATIN SMALL LETTER O WITH LOOP
+-A74F          ; Ll #       LATIN SMALL LETTER OO
+-A751          ; Ll #       LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER
+-A753          ; Ll #       LATIN SMALL LETTER P WITH FLOURISH
+-A755          ; Ll #       LATIN SMALL LETTER P WITH SQUIRREL TAIL
+-A757          ; Ll #       LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER
+-A759          ; Ll #       LATIN SMALL LETTER Q WITH DIAGONAL STROKE
+-A75B          ; Ll #       LATIN SMALL LETTER R ROTUNDA
+-A75D          ; Ll #       LATIN SMALL LETTER RUM ROTUNDA
+-A75F          ; Ll #       LATIN SMALL LETTER V WITH DIAGONAL STROKE
+-A761          ; Ll #       LATIN SMALL LETTER VY
+-A763          ; Ll #       LATIN SMALL LETTER VISIGOTHIC Z
+-A765          ; Ll #       LATIN SMALL LETTER THORN WITH STROKE
+-A767          ; Ll #       LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER
+-A769          ; Ll #       LATIN SMALL LETTER VEND
+-A76B          ; Ll #       LATIN SMALL LETTER ET
+-A76D          ; Ll #       LATIN SMALL LETTER IS
+-A76F          ; Ll #       LATIN SMALL LETTER CON
+-A771..A778    ; Ll #   [8] LATIN SMALL LETTER DUM..LATIN SMALL LETTER UM
+-A77A          ; Ll #       LATIN SMALL LETTER INSULAR D
+-A77C          ; Ll #       LATIN SMALL LETTER INSULAR F
+-A77F          ; Ll #       LATIN SMALL LETTER TURNED INSULAR G
+-A781          ; Ll #       LATIN SMALL LETTER TURNED L
+-A783          ; Ll #       LATIN SMALL LETTER INSULAR R
+-A785          ; Ll #       LATIN SMALL LETTER INSULAR S
+-A787          ; Ll #       LATIN SMALL LETTER INSULAR T
+-A78C          ; Ll #       LATIN SMALL LETTER SALTILLO
+-A78E          ; Ll #       LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
+-A791          ; Ll #       LATIN SMALL LETTER N WITH DESCENDER
+-A793..A795    ; Ll #   [3] LATIN SMALL LETTER C WITH BAR..LATIN SMALL LETTER H WITH PALATAL HOOK
+-A797          ; Ll #       LATIN SMALL LETTER B WITH FLOURISH
+-A799          ; Ll #       LATIN SMALL LETTER F WITH STROKE
+-A79B          ; Ll #       LATIN SMALL LETTER VOLAPUK AE
+-A79D          ; Ll #       LATIN SMALL LETTER VOLAPUK OE
+-A79F          ; Ll #       LATIN SMALL LETTER VOLAPUK UE
+-A7A1          ; Ll #       LATIN SMALL LETTER G WITH OBLIQUE STROKE
+-A7A3          ; Ll #       LATIN SMALL LETTER K WITH OBLIQUE STROKE
+-A7A5          ; Ll #       LATIN SMALL LETTER N WITH OBLIQUE STROKE
+-A7A7          ; Ll #       LATIN SMALL LETTER R WITH OBLIQUE STROKE
+-A7A9          ; Ll #       LATIN SMALL LETTER S WITH OBLIQUE STROKE
+-A7AF          ; Ll #       LATIN LETTER SMALL CAPITAL Q
+-A7B5          ; Ll #       LATIN SMALL LETTER BETA
+-A7B7          ; Ll #       LATIN SMALL LETTER OMEGA
+-A7B9          ; Ll #       LATIN SMALL LETTER U WITH STROKE
+-A7BB          ; Ll #       LATIN SMALL LETTER GLOTTAL A
+-A7BD          ; Ll #       LATIN SMALL LETTER GLOTTAL I
+-A7BF          ; Ll #       LATIN SMALL LETTER GLOTTAL U
+-A7C3          ; Ll #       LATIN SMALL LETTER ANGLICANA W
+-A7C8          ; Ll #       LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY
+-A7CA          ; Ll #       LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+-A7F6          ; Ll #       LATIN SMALL LETTER REVERSED HALF H
+-A7FA          ; Ll #       LATIN LETTER SMALL CAPITAL TURNED M
+-AB30..AB5A    ; Ll #  [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+-AB60..AB68    ; Ll #   [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+-AB70..ABBF    ; Ll #  [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
+-FB00..FB06    ; Ll #   [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
+-FB13..FB17    ; Ll #   [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
+-FF41..FF5A    ; Ll #  [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
+-10428..1044F  ; Ll #  [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW
+-104D8..104FB  ; Ll #  [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+-10CC0..10CF2  ; Ll #  [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
+-118C0..118DF  ; Ll #  [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
+-16E60..16E7F  ; Ll #  [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y
+-1D41A..1D433  ; Ll #  [26] MATHEMATICAL BOLD SMALL A..MATHEMATICAL BOLD SMALL Z
+-1D44E..1D454  ; Ll #   [7] MATHEMATICAL ITALIC SMALL A..MATHEMATICAL ITALIC SMALL G
+-1D456..1D467  ; Ll #  [18] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL Z
+-1D482..1D49B  ; Ll #  [26] MATHEMATICAL BOLD ITALIC SMALL A..MATHEMATICAL BOLD ITALIC SMALL Z
+-1D4B6..1D4B9  ; Ll #   [4] MATHEMATICAL SCRIPT SMALL A..MATHEMATICAL SCRIPT SMALL D
+-1D4BB         ; Ll #       MATHEMATICAL SCRIPT SMALL F
+-1D4BD..1D4C3  ; Ll #   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+-1D4C5..1D4CF  ; Ll #  [11] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL SCRIPT SMALL Z
+-1D4EA..1D503  ; Ll #  [26] MATHEMATICAL BOLD SCRIPT SMALL A..MATHEMATICAL BOLD SCRIPT SMALL Z
+-1D51E..1D537  ; Ll #  [26] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL FRAKTUR SMALL Z
+-1D552..1D56B  ; Ll #  [26] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL DOUBLE-STRUCK SMALL Z
+-1D586..1D59F  ; Ll #  [26] MATHEMATICAL BOLD FRAKTUR SMALL A..MATHEMATICAL BOLD FRAKTUR SMALL Z
+-1D5BA..1D5D3  ; Ll #  [26] MATHEMATICAL SANS-SERIF SMALL A..MATHEMATICAL SANS-SERIF SMALL Z
+-1D5EE..1D607  ; Ll #  [26] MATHEMATICAL SANS-SERIF BOLD SMALL A..MATHEMATICAL SANS-SERIF BOLD SMALL Z
+-1D622..1D63B  ; Ll #  [26] MATHEMATICAL SANS-SERIF ITALIC SMALL A..MATHEMATICAL SANS-SERIF ITALIC SMALL Z
+-1D656..1D66F  ; Ll #  [26] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z
+-1D68A..1D6A5  ; Ll #  [28] MATHEMATICAL MONOSPACE SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+-1D6C2..1D6DA  ; Ll #  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+-1D6DC..1D6E1  ; Ll #   [6] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL BOLD PI SYMBOL
+-1D6FC..1D714  ; Ll #  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+-1D716..1D71B  ; Ll #   [6] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL ITALIC PI SYMBOL
+-1D736..1D74E  ; Ll #  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+-1D750..1D755  ; Ll #   [6] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC PI SYMBOL
+-1D770..1D788  ; Ll #  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+-1D78A..1D78F  ; Ll #   [6] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD PI SYMBOL
+-1D7AA..1D7C2  ; Ll #  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+-1D7C4..1D7C9  ; Ll #   [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
+-1D7CB         ; Ll #       MATHEMATICAL BOLD SMALL DIGAMMA
+-1E922..1E943  ; Ll #  [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA
+-
+-# Total code points: 2155
+-
+-# ================================================
+-
+-# General_Category=Titlecase_Letter
+-
+-01C5          ; Lt #       LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+-01C8          ; Lt #       LATIN CAPITAL LETTER L WITH SMALL LETTER J
+-01CB          ; Lt #       LATIN CAPITAL LETTER N WITH SMALL LETTER J
+-01F2          ; Lt #       LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+-1F88..1F8F    ; Lt #   [8] GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+-1F98..1F9F    ; Lt #   [8] GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+-1FA8..1FAF    ; Lt #   [8] GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI..GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+-1FBC          ; Lt #       GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+-1FCC          ; Lt #       GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+-1FFC          ; Lt #       GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+-
+-# Total code points: 31
+-
+-# ================================================
+-
+-# General_Category=Modifier_Letter
+-
+-02B0..02C1    ; Lm #  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+-02C6..02D1    ; Lm #  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+-02E0..02E4    ; Lm #   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+-02EC          ; Lm #       MODIFIER LETTER VOICING
+-02EE          ; Lm #       MODIFIER LETTER DOUBLE APOSTROPHE
+-0374          ; Lm #       GREEK NUMERAL SIGN
+-037A          ; Lm #       GREEK YPOGEGRAMMENI
+-0559          ; Lm #       ARMENIAN MODIFIER LETTER LEFT HALF RING
+-0640          ; Lm #       ARABIC TATWEEL
+-06E5..06E6    ; Lm #   [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+-07F4..07F5    ; Lm #   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+-07FA          ; Lm #       NKO LAJANYALAN
+-081A          ; Lm #       SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+-0824          ; Lm #       SAMARITAN MODIFIER LETTER SHORT A
+-0828          ; Lm #       SAMARITAN MODIFIER LETTER I
+-0971          ; Lm #       DEVANAGARI SIGN HIGH SPACING DOT
+-0E46          ; Lm #       THAI CHARACTER MAIYAMOK
+-0EC6          ; Lm #       LAO KO LA
+-10FC          ; Lm #       MODIFIER LETTER GEORGIAN NAR
+-17D7          ; Lm #       KHMER SIGN LEK TOO
+-1843          ; Lm #       MONGOLIAN LETTER TODO LONG VOWEL SIGN
+-1AA7          ; Lm #       TAI THAM SIGN MAI YAMOK
+-1C78..1C7D    ; Lm #   [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+-1D2C..1D6A    ; Lm #  [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
+-1D78          ; Lm #       MODIFIER LETTER CYRILLIC EN
+-1D9B..1DBF    ; Lm #  [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
+-2071          ; Lm #       SUPERSCRIPT LATIN SMALL LETTER I
+-207F          ; Lm #       SUPERSCRIPT LATIN SMALL LETTER N
+-2090..209C    ; Lm #  [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
+-2C7C..2C7D    ; Lm #   [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
+-2D6F          ; Lm #       TIFINAGH MODIFIER LETTER LABIALIZATION MARK
+-2E2F          ; Lm #       VERTICAL TILDE
+-3005          ; Lm #       IDEOGRAPHIC ITERATION MARK
+-3031..3035    ; Lm #   [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
+-303B          ; Lm #       VERTICAL IDEOGRAPHIC ITERATION MARK
+-309D..309E    ; Lm #   [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
+-30FC..30FE    ; Lm #   [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
+-A015          ; Lm #       YI SYLLABLE WU
+-A4F8..A4FD    ; Lm #   [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
+-A60C          ; Lm #       VAI SYLLABLE LENGTHENER
+-A67F          ; Lm #       CYRILLIC PAYEROK
+-A69C..A69D    ; Lm #   [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
+-A717..A71F    ; Lm #   [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+-A770          ; Lm #       MODIFIER LETTER US
+-A788          ; Lm #       MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+-A7F8..A7F9    ; Lm #   [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
+-A9CF          ; Lm #       JAVANESE PANGRANGKEP
+-A9E6          ; Lm #       MYANMAR MODIFIER LETTER SHAN REDUPLICATION
+-AA70          ; Lm #       MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
+-AADD          ; Lm #       TAI VIET SYMBOL SAM
+-AAF3..AAF4    ; Lm #   [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
+-AB5C..AB5F    ; Lm #   [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+-AB69          ; Lm #       MODIFIER LETTER SMALL TURNED W
+-FF70          ; Lm #       HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+-FF9E..FF9F    ; Lm #   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+-16B40..16B43  ; Lm #   [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
+-16F93..16F9F  ; Lm #  [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+-16FE0..16FE1  ; Lm #   [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
+-16FE3         ; Lm #       OLD CHINESE ITERATION MARK
+-1E137..1E13D  ; Lm #   [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
+-1E94B         ; Lm #       ADLAM NASALIZATION MARK
+-
+-# Total code points: 260
+-
+-# ================================================
+-
+-# General_Category=Other_Letter
+-
+-00AA          ; Lo #       FEMININE ORDINAL INDICATOR
+-00BA          ; Lo #       MASCULINE ORDINAL INDICATOR
+-01BB          ; Lo #       LATIN LETTER TWO WITH STROKE
+-01C0..01C3    ; Lo #   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+-0294          ; Lo #       LATIN LETTER GLOTTAL STOP
+-05D0..05EA    ; Lo #  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+-05EF..05F2    ; Lo #   [4] HEBREW YOD TRIANGLE..HEBREW LIGATURE YIDDISH DOUBLE YOD
+-0620..063F    ; Lo #  [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+-0641..064A    ; Lo #  [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+-066E..066F    ; Lo #   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+-0671..06D3    ; Lo #  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+-06D5          ; Lo #       ARABIC LETTER AE
+-06EE..06EF    ; Lo #   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+-06FA..06FC    ; Lo #   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+-06FF          ; Lo #       ARABIC LETTER HEH WITH INVERTED V
+-0710          ; Lo #       SYRIAC LETTER ALAPH
+-0712..072F    ; Lo #  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+-074D..07A5    ; Lo #  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU
+-07B1          ; Lo #       THAANA LETTER NAA
+-07CA..07EA    ; Lo #  [33] NKO LETTER A..NKO LETTER JONA RA
+-0800..0815    ; Lo #  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+-0840..0858    ; Lo #  [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
+-0860..086A    ; Lo #  [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
+-08A0..08B4    ; Lo #  [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
+-08B6..08C7    ; Lo #  [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
+-0904..0939    ; Lo #  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+-093D          ; Lo #       DEVANAGARI SIGN AVAGRAHA
+-0950          ; Lo #       DEVANAGARI OM
+-0958..0961    ; Lo #  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+-0972..0980    ; Lo #  [15] DEVANAGARI LETTER CANDRA A..BENGALI ANJI
+-0985..098C    ; Lo #   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+-098F..0990    ; Lo #   [2] BENGALI LETTER E..BENGALI LETTER AI
+-0993..09A8    ; Lo #  [22] BENGALI LETTER O..BENGALI LETTER NA
+-09AA..09B0    ; Lo #   [7] BENGALI LETTER PA..BENGALI LETTER RA
+-09B2          ; Lo #       BENGALI LETTER LA
+-09B6..09B9    ; Lo #   [4] BENGALI LETTER SHA..BENGALI LETTER HA
+-09BD          ; Lo #       BENGALI SIGN AVAGRAHA
+-09CE          ; Lo #       BENGALI LETTER KHANDA TA
+-09DC..09DD    ; Lo #   [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+-09DF..09E1    ; Lo #   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+-09F0..09F1    ; Lo #   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+-09FC          ; Lo #       BENGALI LETTER VEDIC ANUSVARA
+-0A05..0A0A    ; Lo #   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+-0A0F..0A10    ; Lo #   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+-0A13..0A28    ; Lo #  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+-0A2A..0A30    ; Lo #   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+-0A32..0A33    ; Lo #   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+-0A35..0A36    ; Lo #   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+-0A38..0A39    ; Lo #   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+-0A59..0A5C    ; Lo #   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
+-0A5E          ; Lo #       GURMUKHI LETTER FA
+-0A72..0A74    ; Lo #   [3] GURMUKHI IRI..GURMUKHI EK ONKAR
+-0A85..0A8D    ; Lo #   [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
+-0A8F..0A91    ; Lo #   [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
+-0A93..0AA8    ; Lo #  [22] GUJARATI LETTER O..GUJARATI LETTER NA
+-0AAA..0AB0    ; Lo #   [7] GUJARATI LETTER PA..GUJARATI LETTER RA
+-0AB2..0AB3    ; Lo #   [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
+-0AB5..0AB9    ; Lo #   [5] GUJARATI LETTER VA..GUJARATI LETTER HA
+-0ABD          ; Lo #       GUJARATI SIGN AVAGRAHA
+-0AD0          ; Lo #       GUJARATI OM
+-0AE0..0AE1    ; Lo #   [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
+-0AF9          ; Lo #       GUJARATI LETTER ZHA
+-0B05..0B0C    ; Lo #   [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
+-0B0F..0B10    ; Lo #   [2] ORIYA LETTER E..ORIYA LETTER AI
+-0B13..0B28    ; Lo #  [22] ORIYA LETTER O..ORIYA LETTER NA
+-0B2A..0B30    ; Lo #   [7] ORIYA LETTER PA..ORIYA LETTER RA
+-0B32..0B33    ; Lo #   [2] ORIYA LETTER LA..ORIYA LETTER LLA
+-0B35..0B39    ; Lo #   [5] ORIYA LETTER VA..ORIYA LETTER HA
+-0B3D          ; Lo #       ORIYA SIGN AVAGRAHA
+-0B5C..0B5D    ; Lo #   [2] ORIYA LETTER RRA..ORIYA LETTER RHA
+-0B5F..0B61    ; Lo #   [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
+-0B71          ; Lo #       ORIYA LETTER WA
+-0B83          ; Lo #       TAMIL SIGN VISARGA
+-0B85..0B8A    ; Lo #   [6] TAMIL LETTER A..TAMIL LETTER UU
+-0B8E..0B90    ; Lo #   [3] TAMIL LETTER E..TAMIL LETTER AI
+-0B92..0B95    ; Lo #   [4] TAMIL LETTER O..TAMIL LETTER KA
+-0B99..0B9A    ; Lo #   [2] TAMIL LETTER NGA..TAMIL LETTER CA
+-0B9C          ; Lo #       TAMIL LETTER JA
+-0B9E..0B9F    ; Lo #   [2] TAMIL LETTER NYA..TAMIL LETTER TTA
+-0BA3..0BA4    ; Lo #   [2] TAMIL LETTER NNA..TAMIL LETTER TA
+-0BA8..0BAA    ; Lo #   [3] TAMIL LETTER NA..TAMIL LETTER PA
+-0BAE..0BB9    ; Lo #  [12] TAMIL LETTER MA..TAMIL LETTER HA
+-0BD0          ; Lo #       TAMIL OM
+-0C05..0C0C    ; Lo #   [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
+-0C0E..0C10    ; Lo #   [3] TELUGU LETTER E..TELUGU LETTER AI
+-0C12..0C28    ; Lo #  [23] TELUGU LETTER O..TELUGU LETTER NA
+-0C2A..0C39    ; Lo #  [16] TELUGU LETTER PA..TELUGU LETTER HA
+-0C3D          ; Lo #       TELUGU SIGN AVAGRAHA
+-0C58..0C5A    ; Lo #   [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
+-0C60..0C61    ; Lo #   [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+-0C80          ; Lo #       KANNADA SIGN SPACING CANDRABINDU
+-0C85..0C8C    ; Lo #   [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
+-0C8E..0C90    ; Lo #   [3] KANNADA LETTER E..KANNADA LETTER AI
+-0C92..0CA8    ; Lo #  [23] KANNADA LETTER O..KANNADA LETTER NA
+-0CAA..0CB3    ; Lo #  [10] KANNADA LETTER PA..KANNADA LETTER LLA
+-0CB5..0CB9    ; Lo #   [5] KANNADA LETTER VA..KANNADA LETTER HA
+-0CBD          ; Lo #       KANNADA SIGN AVAGRAHA
+-0CDE          ; Lo #       KANNADA LETTER FA
+-0CE0..0CE1    ; Lo #   [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
+-0CF1..0CF2    ; Lo #   [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
+-0D04..0D0C    ; Lo #   [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
+-0D0E..0D10    ; Lo #   [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
+-0D12..0D3A    ; Lo #  [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
+-0D3D          ; Lo #       MALAYALAM SIGN AVAGRAHA
+-0D4E          ; Lo #       MALAYALAM LETTER DOT REPH
+-0D54..0D56    ; Lo #   [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
+-0D5F..0D61    ; Lo #   [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
+-0D7A..0D7F    ; Lo #   [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+-0D85..0D96    ; Lo #  [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
+-0D9A..0DB1    ; Lo #  [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
+-0DB3..0DBB    ; Lo #   [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
+-0DBD          ; Lo #       SINHALA LETTER DANTAJA LAYANNA
+-0DC0..0DC6    ; Lo #   [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
+-0E01..0E30    ; Lo #  [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
+-0E32..0E33    ; Lo #   [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
+-0E40..0E45    ; Lo #   [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
+-0E81..0E82    ; Lo #   [2] LAO LETTER KO..LAO LETTER KHO SUNG
+-0E84          ; Lo #       LAO LETTER KHO TAM
+-0E86..0E8A    ; Lo #   [5] LAO LETTER PALI GHA..LAO LETTER SO TAM
+-0E8C..0EA3    ; Lo #  [24] LAO LETTER PALI JHA..LAO LETTER LO LING
+-0EA5          ; Lo #       LAO LETTER LO LOOT
+-0EA7..0EB0    ; Lo #  [10] LAO LETTER WO..LAO VOWEL SIGN A
+-0EB2..0EB3    ; Lo #   [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
+-0EBD          ; Lo #       LAO SEMIVOWEL SIGN NYO
+-0EC0..0EC4    ; Lo #   [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
+-0EDC..0EDF    ; Lo #   [4] LAO HO NO..LAO LETTER KHMU NYO
+-0F00          ; Lo #       TIBETAN SYLLABLE OM
+-0F40..0F47    ; Lo #   [8] TIBETAN LETTER KA..TIBETAN LETTER JA
+-0F49..0F6C    ; Lo #  [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
+-0F88..0F8C    ; Lo #   [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
+-1000..102A    ; Lo #  [43] MYANMAR LETTER KA..MYANMAR LETTER AU
+-103F          ; Lo #       MYANMAR LETTER GREAT SA
+-1050..1055    ; Lo #   [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
+-105A..105D    ; Lo #   [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
+-1061          ; Lo #       MYANMAR LETTER SGAW KAREN SHA
+-1065..1066    ; Lo #   [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
+-106E..1070    ; Lo #   [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
+-1075..1081    ; Lo #  [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
+-108E          ; Lo #       MYANMAR LETTER RUMAI PALAUNG FA
+-1100..1248    ; Lo # [329] HANGUL CHOSEONG KIYEOK..ETHIOPIC SYLLABLE QWA
+-124A..124D    ; Lo #   [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
+-1250..1256    ; Lo #   [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
+-1258          ; Lo #       ETHIOPIC SYLLABLE QHWA
+-125A..125D    ; Lo #   [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
+-1260..1288    ; Lo #  [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
+-128A..128D    ; Lo #   [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
+-1290..12B0    ; Lo #  [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
+-12B2..12B5    ; Lo #   [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
+-12B8..12BE    ; Lo #   [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
+-12C0          ; Lo #       ETHIOPIC SYLLABLE KXWA
+-12C2..12C5    ; Lo #   [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
+-12C8..12D6    ; Lo #  [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
+-12D8..1310    ; Lo #  [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
+-1312..1315    ; Lo #   [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
+-1318..135A    ; Lo #  [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
+-1380..138F    ; Lo #  [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
+-1401..166C    ; Lo # [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
+-166F..167F    ; Lo #  [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
+-1681..169A    ; Lo #  [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
+-16A0..16EA    ; Lo #  [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
+-16F1..16F8    ; Lo #   [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
+-1700..170C    ; Lo #  [13] TAGALOG LETTER A..TAGALOG LETTER YA
+-170E..1711    ; Lo #   [4] TAGALOG LETTER LA..TAGALOG LETTER HA
+-1720..1731    ; Lo #  [18] HANUNOO LETTER A..HANUNOO LETTER HA
+-1740..1751    ; Lo #  [18] BUHID LETTER A..BUHID LETTER HA
+-1760..176C    ; Lo #  [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
+-176E..1770    ; Lo #   [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
+-1780..17B3    ; Lo #  [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
+-17DC          ; Lo #       KHMER SIGN AVAKRAHASANYA
+-1820..1842    ; Lo #  [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
+-1844..1878    ; Lo #  [53] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER CHA WITH TWO DOTS
+-1880..1884    ; Lo #   [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+-1887..18A8    ; Lo #  [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
+-18AA          ; Lo #       MONGOLIAN LETTER MANCHU ALI GALI LHA
+-18B0..18F5    ; Lo #  [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
+-1900..191E    ; Lo #  [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
+-1950..196D    ; Lo #  [30] TAI LE LETTER KA..TAI LE LETTER AI
+-1970..1974    ; Lo #   [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
+-1980..19AB    ; Lo #  [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
+-19B0..19C9    ; Lo #  [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
+-1A00..1A16    ; Lo #  [23] BUGINESE LETTER KA..BUGINESE LETTER HA
+-1A20..1A54    ; Lo #  [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
+-1B05..1B33    ; Lo #  [47] BALINESE LETTER AKARA..BALINESE LETTER HA
+-1B45..1B4B    ; Lo #   [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK
+-1B83..1BA0    ; Lo #  [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
+-1BAE..1BAF    ; Lo #   [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
+-1BBA..1BE5    ; Lo #  [44] SUNDANESE AVAGRAHA..BATAK LETTER U
+-1C00..1C23    ; Lo #  [36] LEPCHA LETTER KA..LEPCHA LETTER A
+-1C4D..1C4F    ; Lo #   [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
+-1C5A..1C77    ; Lo #  [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
+-1CE9..1CEC    ; Lo #   [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
+-1CEE..1CF3    ; Lo #   [6] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ROTATED ARDHAVISARGA
+-1CF5..1CF6    ; Lo #   [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
+-1CFA          ; Lo #       VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA
+-2135..2138    ; Lo #   [4] ALEF SYMBOL..DALET SYMBOL
+-2D30..2D67    ; Lo #  [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
+-2D80..2D96    ; Lo #  [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
+-2DA0..2DA6    ; Lo #   [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
+-2DA8..2DAE    ; Lo #   [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
+-2DB0..2DB6    ; Lo #   [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
+-2DB8..2DBE    ; Lo #   [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
+-2DC0..2DC6    ; Lo #   [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
+-2DC8..2DCE    ; Lo #   [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
+-2DD0..2DD6    ; Lo #   [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
+-2DD8..2DDE    ; Lo #   [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
+-3006          ; Lo #       IDEOGRAPHIC CLOSING MARK
+-303C          ; Lo #       MASU MARK
+-3041..3096    ; Lo #  [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
+-309F          ; Lo #       HIRAGANA DIGRAPH YORI
+-30A1..30FA    ; Lo #  [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
+-30FF          ; Lo #       KATAKANA DIGRAPH KOTO
+-3105..312F    ; Lo #  [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
+-3131..318E    ; Lo #  [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
+-31A0..31BF    ; Lo #  [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
+-31F0..31FF    ; Lo #  [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
+-3400..4DBF    ; Lo # [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+-4E00..9FFC    ; Lo # [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
+-A000..A014    ; Lo #  [21] YI SYLLABLE IT..YI SYLLABLE E
+-A016..A48C    ; Lo # [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
+-A4D0..A4F7    ; Lo #  [40] LISU LETTER BA..LISU LETTER OE
+-A500..A60B    ; Lo # [268] VAI SYLLABLE EE..VAI SYLLABLE NG
+-A610..A61F    ; Lo #  [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
+-A62A..A62B    ; Lo #   [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
+-A66E          ; Lo #       CYRILLIC LETTER MULTIOCULAR O
+-A6A0..A6E5    ; Lo #  [70] BAMUM LETTER A..BAMUM LETTER KI
+-A78F          ; Lo #       LATIN LETTER SINOLOGICAL DOT
+-A7F7          ; Lo #       LATIN EPIGRAPHIC LETTER SIDEWAYS I
+-A7FB..A801    ; Lo #   [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I
+-A803..A805    ; Lo #   [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
+-A807..A80A    ; Lo #   [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
+-A80C..A822    ; Lo #  [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
+-A840..A873    ; Lo #  [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
+-A882..A8B3    ; Lo #  [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
+-A8F2..A8F7    ; Lo #   [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
+-A8FB          ; Lo #       DEVANAGARI HEADSTROKE
+-A8FD..A8FE    ; Lo #   [2] DEVANAGARI JAIN OM..DEVANAGARI LETTER AY
+-A90A..A925    ; Lo #  [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
+-A930..A946    ; Lo #  [23] REJANG LETTER KA..REJANG LETTER A
+-A960..A97C    ; Lo #  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
+-A984..A9B2    ; Lo #  [47] JAVANESE LETTER A..JAVANESE LETTER HA
+-A9E0..A9E4    ; Lo #   [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA
+-A9E7..A9EF    ; Lo #   [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA
+-A9FA..A9FE    ; Lo #   [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA
+-AA00..AA28    ; Lo #  [41] CHAM LETTER A..CHAM LETTER HA
+-AA40..AA42    ; Lo #   [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
+-AA44..AA4B    ; Lo #   [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
+-AA60..AA6F    ; Lo #  [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
+-AA71..AA76    ; Lo #   [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
+-AA7A          ; Lo #       MYANMAR LETTER AITON RA
+-AA7E..AAAF    ; Lo #  [50] MYANMAR LETTER SHWE PALAUNG CHA..TAI VIET LETTER HIGH O
+-AAB1          ; Lo #       TAI VIET VOWEL AA
+-AAB5..AAB6    ; Lo #   [2] TAI VIET VOWEL E..TAI VIET VOWEL O
+-AAB9..AABD    ; Lo #   [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
+-AAC0          ; Lo #       TAI VIET TONE MAI NUENG
+-AAC2          ; Lo #       TAI VIET TONE MAI SONG
+-AADB..AADC    ; Lo #   [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
+-AAE0..AAEA    ; Lo #  [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
+-AAF2          ; Lo #       MEETEI MAYEK ANJI
+-AB01..AB06    ; Lo #   [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
+-AB09..AB0E    ; Lo #   [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
+-AB11..AB16    ; Lo #   [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
+-AB20..AB26    ; Lo #   [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
+-AB28..AB2E    ; Lo #   [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
+-ABC0..ABE2    ; Lo #  [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
+-AC00..D7A3    ; Lo # [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
+-D7B0..D7C6    ; Lo #  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
+-D7CB..D7FB    ; Lo #  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
+-F900..FA6D    ; Lo # [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
+-FA70..FAD9    ; Lo # [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+-FB1D          ; Lo #       HEBREW LETTER YOD WITH HIRIQ
+-FB1F..FB28    ; Lo #  [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
+-FB2A..FB36    ; Lo #  [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
+-FB38..FB3C    ; Lo #   [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
+-FB3E          ; Lo #       HEBREW LETTER MEM WITH DAGESH
+-FB40..FB41    ; Lo #   [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
+-FB43..FB44    ; Lo #   [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
+-FB46..FBB1    ; Lo # [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
+-FBD3..FD3D    ; Lo # [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
+-FD50..FD8F    ; Lo #  [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
+-FD92..FDC7    ; Lo #  [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
+-FDF0..FDFB    ; Lo #  [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
+-FE70..FE74    ; Lo #   [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
+-FE76..FEFC    ; Lo # [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
+-FF66..FF6F    ; Lo #  [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
+-FF71..FF9D    ; Lo #  [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+-FFA0..FFBE    ; Lo #  [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+-FFC2..FFC7    ; Lo #   [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+-FFCA..FFCF    ; Lo #   [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+-FFD2..FFD7    ; Lo #   [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+-FFDA..FFDC    ; Lo #   [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+-10000..1000B  ; Lo #  [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
+-1000D..10026  ; Lo #  [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
+-10028..1003A  ; Lo #  [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
+-1003C..1003D  ; Lo #   [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
+-1003F..1004D  ; Lo #  [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
+-10050..1005D  ; Lo #  [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
+-10080..100FA  ; Lo # [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
+-10280..1029C  ; Lo #  [29] LYCIAN LETTER A..LYCIAN LETTER X
+-102A0..102D0  ; Lo #  [49] CARIAN LETTER A..CARIAN LETTER UUU3
+-10300..1031F  ; Lo #  [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
+-1032D..10340  ; Lo #  [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA
+-10342..10349  ; Lo #   [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
+-10350..10375  ; Lo #  [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA
+-10380..1039D  ; Lo #  [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
+-103A0..103C3  ; Lo #  [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
+-103C8..103CF  ; Lo #   [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
+-10450..1049D  ; Lo #  [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
+-10500..10527  ; Lo #  [40] ELBASAN LETTER A..ELBASAN LETTER KHE
+-10530..10563  ; Lo #  [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
+-10600..10736  ; Lo # [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
+-10740..10755  ; Lo #  [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
+-10760..10767  ; Lo #   [8] LINEAR A SIGN A800..LINEAR A SIGN A807
+-10800..10805  ; Lo #   [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
+-10808         ; Lo #       CYPRIOT SYLLABLE JO
+-1080A..10835  ; Lo #  [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
+-10837..10838  ; Lo #   [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
+-1083C         ; Lo #       CYPRIOT SYLLABLE ZA
+-1083F..10855  ; Lo #  [23] CYPRIOT SYLLABLE ZO..IMPERIAL ARAMAIC LETTER TAW
+-10860..10876  ; Lo #  [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
+-10880..1089E  ; Lo #  [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
+-108E0..108F2  ; Lo #  [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
+-108F4..108F5  ; Lo #   [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
+-10900..10915  ; Lo #  [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
+-10920..10939  ; Lo #  [26] LYDIAN LETTER A..LYDIAN LETTER C
+-10980..109B7  ; Lo #  [56] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC CURSIVE LETTER DA
+-109BE..109BF  ; Lo #   [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
+-10A00         ; Lo #       KHAROSHTHI LETTER A
+-10A10..10A13  ; Lo #   [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
+-10A15..10A17  ; Lo #   [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
+-10A19..10A35  ; Lo #  [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA
+-10A60..10A7C  ; Lo #  [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
+-10A80..10A9C  ; Lo #  [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
+-10AC0..10AC7  ; Lo #   [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
+-10AC9..10AE4  ; Lo #  [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW
+-10B00..10B35  ; Lo #  [54] AVESTAN LETTER A..AVESTAN LETTER HE
+-10B40..10B55  ; Lo #  [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
+-10B60..10B72  ; Lo #  [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
+-10B80..10B91  ; Lo #  [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
+-10C00..10C48  ; Lo #  [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
+-10D00..10D23  ; Lo #  [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+-10E80..10EA9  ; Lo #  [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+-10EB0..10EB1  ; Lo #   [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
+-10F00..10F1C  ; Lo #  [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
+-10F27         ; Lo #       OLD SOGDIAN LIGATURE AYIN-DALETH
+-10F30..10F45  ; Lo #  [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+-10FB0..10FC4  ; Lo #  [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+-10FE0..10FF6  ; Lo #  [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
+-11003..11037  ; Lo #  [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
+-11083..110AF  ; Lo #  [45] KAITHI LETTER A..KAITHI LETTER HA
+-110D0..110E8  ; Lo #  [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
+-11103..11126  ; Lo #  [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
+-11144         ; Lo #       CHAKMA LETTER LHAA
+-11147         ; Lo #       CHAKMA LETTER VAA
+-11150..11172  ; Lo #  [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
+-11176         ; Lo #       MAHAJANI LIGATURE SHRI
+-11183..111B2  ; Lo #  [48] SHARADA LETTER A..SHARADA LETTER HA
+-111C1..111C4  ; Lo #   [4] SHARADA SIGN AVAGRAHA..SHARADA OM
+-111DA         ; Lo #       SHARADA EKAM
+-111DC         ; Lo #       SHARADA HEADSTROKE
+-11200..11211  ; Lo #  [18] KHOJKI LETTER A..KHOJKI LETTER JJA
+-11213..1122B  ; Lo #  [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA
+-11280..11286  ; Lo #   [7] MULTANI LETTER A..MULTANI LETTER GA
+-11288         ; Lo #       MULTANI LETTER GHA
+-1128A..1128D  ; Lo #   [4] MULTANI LETTER CA..MULTANI LETTER JJA
+-1128F..1129D  ; Lo #  [15] MULTANI LETTER NYA..MULTANI LETTER BA
+-1129F..112A8  ; Lo #  [10] MULTANI LETTER BHA..MULTANI LETTER RHA
+-112B0..112DE  ; Lo #  [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA
+-11305..1130C  ; Lo #   [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
+-1130F..11310  ; Lo #   [2] GRANTHA LETTER EE..GRANTHA LETTER AI
+-11313..11328  ; Lo #  [22] GRANTHA LETTER OO..GRANTHA LETTER NA
+-1132A..11330  ; Lo #   [7] GRANTHA LETTER PA..GRANTHA LETTER RA
+-11332..11333  ; Lo #   [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
+-11335..11339  ; Lo #   [5] GRANTHA LETTER VA..GRANTHA LETTER HA
+-1133D         ; Lo #       GRANTHA SIGN AVAGRAHA
+-11350         ; Lo #       GRANTHA OM
+-1135D..11361  ; Lo #   [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
+-11400..11434  ; Lo #  [53] NEWA LETTER A..NEWA LETTER HA
+-11447..1144A  ; Lo #   [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
+-1145F..11461  ; Lo #   [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
+-11480..114AF  ; Lo #  [48] TIRHUTA ANJI..TIRHUTA LETTER HA
+-114C4..114C5  ; Lo #   [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
+-114C7         ; Lo #       TIRHUTA OM
+-11580..115AE  ; Lo #  [47] SIDDHAM LETTER A..SIDDHAM LETTER HA
+-115D8..115DB  ; Lo #   [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
+-11600..1162F  ; Lo #  [48] MODI LETTER A..MODI LETTER LLA
+-11644         ; Lo #       MODI SIGN HUVA
+-11680..116AA  ; Lo #  [43] TAKRI LETTER A..TAKRI LETTER RRA
+-116B8         ; Lo #       TAKRI LETTER ARCHAIC KHA
+-11700..1171A  ; Lo #  [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
+-11800..1182B  ; Lo #  [44] DOGRA LETTER A..DOGRA LETTER RRA
+-118FF..11906  ; Lo #   [8] WARANG CITI OM..DIVES AKURU LETTER E
+-11909         ; Lo #       DIVES AKURU LETTER O
+-1190C..11913  ; Lo #   [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+-11915..11916  ; Lo #   [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+-11918..1192F  ; Lo #  [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+-1193F         ; Lo #       DIVES AKURU PREFIXED NASAL SIGN
+-11941         ; Lo #       DIVES AKURU INITIAL RA
+-119A0..119A7  ; Lo #   [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
+-119AA..119D0  ; Lo #  [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
+-119E1         ; Lo #       NANDINAGARI SIGN AVAGRAHA
+-119E3         ; Lo #       NANDINAGARI HEADSTROKE
+-11A00         ; Lo #       ZANABAZAR SQUARE LETTER A
+-11A0B..11A32  ; Lo #  [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
+-11A3A         ; Lo #       ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+-11A50         ; Lo #       SOYOMBO LETTER A
+-11A5C..11A89  ; Lo #  [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA
+-11A9D         ; Lo #       SOYOMBO MARK PLUTA
+-11AC0..11AF8  ; Lo #  [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL
+-11C00..11C08  ; Lo #   [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+-11C0A..11C2E  ; Lo #  [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
+-11C40         ; Lo #       BHAIKSUKI SIGN AVAGRAHA
+-11C72..11C8F  ; Lo #  [30] MARCHEN LETTER KA..MARCHEN LETTER A
+-11D00..11D06  ; Lo #   [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+-11D08..11D09  ; Lo #   [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+-11D0B..11D30  ; Lo #  [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
+-11D46         ; Lo #       MASARAM GONDI REPHA
+-11D60..11D65  ; Lo #   [6] GUNJALA GONDI LETTER A..GUNJALA GONDI LETTER UU
+-11D67..11D68  ; Lo #   [2] GUNJALA GONDI LETTER EE..GUNJALA GONDI LETTER AI
+-11D6A..11D89  ; Lo #  [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
+-11D98         ; Lo #       GUNJALA GONDI OM
+-11EE0..11EF2  ; Lo #  [19] MAKASAR LETTER KA..MAKASAR ANGKA
+-11FB0         ; Lo #       LISU LETTER YHA
+-12000..12399  ; Lo # [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
+-12480..12543  ; Lo # [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
+-13000..1342E  ; Lo # [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
+-14400..14646  ; Lo # [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
+-16800..16A38  ; Lo # [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
+-16A40..16A5E  ; Lo #  [31] MRO LETTER TA..MRO LETTER TEK
+-16AD0..16AED  ; Lo #  [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
+-16B00..16B2F  ; Lo #  [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU
+-16B63..16B77  ; Lo #  [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
+-16B7D..16B8F  ; Lo #  [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
+-16F00..16F4A  ; Lo #  [75] MIAO LETTER PA..MIAO LETTER RTE
+-16F50         ; Lo #       MIAO LETTER NASALIZATION
+-17000..187F7  ; Lo # [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
+-18800..18CD5  ; Lo # [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+-18D00..18D08  ; Lo #   [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
+-1B000..1B11E  ; Lo # [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2
+-1B150..1B152  ; Lo #   [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
+-1B164..1B167  ; Lo #   [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
+-1B170..1B2FB  ; Lo # [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
+-1BC00..1BC6A  ; Lo # [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
+-1BC70..1BC7C  ; Lo #  [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
+-1BC80..1BC88  ; Lo #   [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
+-1BC90..1BC99  ; Lo #  [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
+-1E100..1E12C  ; Lo #  [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W
+-1E14E         ; Lo #       NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ
+-1E2C0..1E2EB  ; Lo #  [44] WANCHO LETTER AA..WANCHO LETTER YIH
+-1E800..1E8C4  ; Lo # [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
+-1EE00..1EE03  ; Lo #   [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+-1EE05..1EE1F  ; Lo #  [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+-1EE21..1EE22  ; Lo #   [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+-1EE24         ; Lo #       ARABIC MATHEMATICAL INITIAL HEH
+-1EE27         ; Lo #       ARABIC MATHEMATICAL INITIAL HAH
+-1EE29..1EE32  ; Lo #  [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+-1EE34..1EE37  ; Lo #   [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+-1EE39         ; Lo #       ARABIC MATHEMATICAL INITIAL DAD
+-1EE3B         ; Lo #       ARABIC MATHEMATICAL INITIAL GHAIN
+-1EE42         ; Lo #       ARABIC MATHEMATICAL TAILED JEEM
+-1EE47         ; Lo #       ARABIC MATHEMATICAL TAILED HAH
+-1EE49         ; Lo #       ARABIC MATHEMATICAL TAILED YEH
+-1EE4B         ; Lo #       ARABIC MATHEMATICAL TAILED LAM
+-1EE4D..1EE4F  ; Lo #   [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+-1EE51..1EE52  ; Lo #   [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+-1EE54         ; Lo #       ARABIC MATHEMATICAL TAILED SHEEN
+-1EE57         ; Lo #       ARABIC MATHEMATICAL TAILED KHAH
+-1EE59         ; Lo #       ARABIC MATHEMATICAL TAILED DAD
+-1EE5B         ; Lo #       ARABIC MATHEMATICAL TAILED GHAIN
+-1EE5D         ; Lo #       ARABIC MATHEMATICAL TAILED DOTLESS NOON
+-1EE5F         ; Lo #       ARABIC MATHEMATICAL TAILED DOTLESS QAF
+-1EE61..1EE62  ; Lo #   [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+-1EE64         ; Lo #       ARABIC MATHEMATICAL STRETCHED HEH
+-1EE67..1EE6A  ; Lo #   [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+-1EE6C..1EE72  ; Lo #   [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+-1EE74..1EE77  ; Lo #   [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+-1EE79..1EE7C  ; Lo #   [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+-1EE7E         ; Lo #       ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+-1EE80..1EE89  ; Lo #  [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+-1EE8B..1EE9B  ; Lo #  [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+-1EEA1..1EEA3  ; Lo #   [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+-1EEA5..1EEA9  ; Lo #   [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+-1EEAB..1EEBB  ; Lo #  [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+-20000..2A6DD  ; Lo # [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
+-2A700..2B734  ; Lo # [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
+-2B740..2B81D  ; Lo # [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
+-2B820..2CEA1  ; Lo # [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+-2CEB0..2EBE0  ; Lo # [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+-2F800..2FA1D  ; Lo # [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+-30000..3134A  ; Lo # [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+-
+-# Total code points: 127004
+-
+-# ================================================
+-
+-# General_Category=Nonspacing_Mark
+-
+-0300..036F    ; Mn # [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
+-0483..0487    ; Mn #   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
+-0591..05BD    ; Mn #  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
+-05BF          ; Mn #       HEBREW POINT RAFE
+-05C1..05C2    ; Mn #   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+-05C4..05C5    ; Mn #   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+-05C7          ; Mn #       HEBREW POINT QAMATS QATAN
+-0610..061A    ; Mn #  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+-064B..065F    ; Mn #  [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW
+-0670          ; Mn #       ARABIC LETTER SUPERSCRIPT ALEF
+-06D6..06DC    ; Mn #   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+-06DF..06E4    ; Mn #   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
+-06E7..06E8    ; Mn #   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+-06EA..06ED    ; Mn #   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
+-0711          ; Mn #       SYRIAC LETTER SUPERSCRIPT ALAPH
+-0730..074A    ; Mn #  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
+-07A6..07B0    ; Mn #  [11] THAANA ABAFILI..THAANA SUKUN
+-07EB..07F3    ; Mn #   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
+-07FD          ; Mn #       NKO DANTAYALAN
+-0816..0819    ; Mn #   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
+-081B..0823    ; Mn #   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+-0825..0827    ; Mn #   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+-0829..082D    ; Mn #   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
+-0859..085B    ; Mn #   [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
+-08D3..08E1    ; Mn #  [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA
+-08E3..0902    ; Mn #  [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA
+-093A          ; Mn #       DEVANAGARI VOWEL SIGN OE
+-093C          ; Mn #       DEVANAGARI SIGN NUKTA
+-0941..0948    ; Mn #   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+-094D          ; Mn #       DEVANAGARI SIGN VIRAMA
+-0951..0957    ; Mn #   [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE
+-0962..0963    ; Mn #   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+-0981          ; Mn #       BENGALI SIGN CANDRABINDU
+-09BC          ; Mn #       BENGALI SIGN NUKTA
+-09C1..09C4    ; Mn #   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+-09CD          ; Mn #       BENGALI SIGN VIRAMA
+-09E2..09E3    ; Mn #   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+-09FE          ; Mn #       BENGALI SANDHI MARK
+-0A01..0A02    ; Mn #   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+-0A3C          ; Mn #       GURMUKHI SIGN NUKTA
+-0A41..0A42    ; Mn #   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+-0A47..0A48    ; Mn #   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+-0A4B..0A4D    ; Mn #   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
+-0A51          ; Mn #       GURMUKHI SIGN UDAAT
+-0A70..0A71    ; Mn #   [2] GURMUKHI TIPPI..GURMUKHI ADDAK
+-0A75          ; Mn #       GURMUKHI SIGN YAKASH
+-0A81..0A82    ; Mn #   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
+-0ABC          ; Mn #       GUJARATI SIGN NUKTA
+-0AC1..0AC5    ; Mn #   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
+-0AC7..0AC8    ; Mn #   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
+-0ACD          ; Mn #       GUJARATI SIGN VIRAMA
+-0AE2..0AE3    ; Mn #   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+-0AFA..0AFF    ; Mn #   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
+-0B01          ; Mn #       ORIYA SIGN CANDRABINDU
+-0B3C          ; Mn #       ORIYA SIGN NUKTA
+-0B3F          ; Mn #       ORIYA VOWEL SIGN I
+-0B41..0B44    ; Mn #   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
+-0B4D          ; Mn #       ORIYA SIGN VIRAMA
+-0B55..0B56    ; Mn #   [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
+-0B62..0B63    ; Mn #   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
+-0B82          ; Mn #       TAMIL SIGN ANUSVARA
+-0BC0          ; Mn #       TAMIL VOWEL SIGN II
+-0BCD          ; Mn #       TAMIL SIGN VIRAMA
+-0C00          ; Mn #       TELUGU SIGN COMBINING CANDRABINDU ABOVE
+-0C04          ; Mn #       TELUGU SIGN COMBINING ANUSVARA ABOVE
+-0C3E..0C40    ; Mn #   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
+-0C46..0C48    ; Mn #   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
+-0C4A..0C4D    ; Mn #   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
+-0C55..0C56    ; Mn #   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
+-0C62..0C63    ; Mn #   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
+-0C81          ; Mn #       KANNADA SIGN CANDRABINDU
+-0CBC          ; Mn #       KANNADA SIGN NUKTA
+-0CBF          ; Mn #       KANNADA VOWEL SIGN I
+-0CC6          ; Mn #       KANNADA VOWEL SIGN E
+-0CCC..0CCD    ; Mn #   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
+-0CE2..0CE3    ; Mn #   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
+-0D00..0D01    ; Mn #   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
+-0D3B..0D3C    ; Mn #   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
+-0D41..0D44    ; Mn #   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
+-0D4D          ; Mn #       MALAYALAM SIGN VIRAMA
+-0D62..0D63    ; Mn #   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+-0D81          ; Mn #       SINHALA SIGN CANDRABINDU
+-0DCA          ; Mn #       SINHALA SIGN AL-LAKUNA
+-0DD2..0DD4    ; Mn #   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
+-0DD6          ; Mn #       SINHALA VOWEL SIGN DIGA PAA-PILLA
+-0E31          ; Mn #       THAI CHARACTER MAI HAN-AKAT
+-0E34..0E3A    ; Mn #   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
+-0E47..0E4E    ; Mn #   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
+-0EB1          ; Mn #       LAO VOWEL SIGN MAI KAN
+-0EB4..0EBC    ; Mn #   [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO
+-0EC8..0ECD    ; Mn #   [6] LAO TONE MAI EK..LAO NIGGAHITA
+-0F18..0F19    ; Mn #   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
+-0F35          ; Mn #       TIBETAN MARK NGAS BZUNG NYI ZLA
+-0F37          ; Mn #       TIBETAN MARK NGAS BZUNG SGOR RTAGS
+-0F39          ; Mn #       TIBETAN MARK TSA -PHRU
+-0F71..0F7E    ; Mn #  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
+-0F80..0F84    ; Mn #   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
+-0F86..0F87    ; Mn #   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
+-0F8D..0F97    ; Mn #  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
+-0F99..0FBC    ; Mn #  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
+-0FC6          ; Mn #       TIBETAN SYMBOL PADMA GDAN
+-102D..1030    ; Mn #   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
+-1032..1037    ; Mn #   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
+-1039..103A    ; Mn #   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
+-103D..103E    ; Mn #   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
+-1058..1059    ; Mn #   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
+-105E..1060    ; Mn #   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
+-1071..1074    ; Mn #   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
+-1082          ; Mn #       MYANMAR CONSONANT SIGN SHAN MEDIAL WA
+-1085..1086    ; Mn #   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
+-108D          ; Mn #       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
+-109D          ; Mn #       MYANMAR VOWEL SIGN AITON AI
+-135D..135F    ; Mn #   [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
+-1712..1714    ; Mn #   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
+-1732..1734    ; Mn #   [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD
+-1752..1753    ; Mn #   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
+-1772..1773    ; Mn #   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
+-17B4..17B5    ; Mn #   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+-17B7..17BD    ; Mn #   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
+-17C6          ; Mn #       KHMER SIGN NIKAHIT
+-17C9..17D3    ; Mn #  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
+-17DD          ; Mn #       KHMER SIGN ATTHACAN
+-180B..180D    ; Mn #   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+-1885..1886    ; Mn #   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
+-18A9          ; Mn #       MONGOLIAN LETTER ALI GALI DAGALGA
+-1920..1922    ; Mn #   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
+-1927..1928    ; Mn #   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
+-1932          ; Mn #       LIMBU SMALL LETTER ANUSVARA
+-1939..193B    ; Mn #   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
+-1A17..1A18    ; Mn #   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
+-1A1B          ; Mn #       BUGINESE VOWEL SIGN AE
+-1A56          ; Mn #       TAI THAM CONSONANT SIGN MEDIAL LA
+-1A58..1A5E    ; Mn #   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
+-1A60          ; Mn #       TAI THAM SIGN SAKOT
+-1A62          ; Mn #       TAI THAM VOWEL SIGN MAI SAT
+-1A65..1A6C    ; Mn #   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
+-1A73..1A7C    ; Mn #  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
+-1A7F          ; Mn #       TAI THAM COMBINING CRYPTOGRAMMIC DOT
+-1AB0..1ABD    ; Mn #  [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
+-1ABF..1AC0    ; Mn #   [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
+-1B00..1B03    ; Mn #   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
+-1B34          ; Mn #       BALINESE SIGN REREKAN
+-1B36..1B3A    ; Mn #   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
+-1B3C          ; Mn #       BALINESE VOWEL SIGN LA LENGA
+-1B42          ; Mn #       BALINESE VOWEL SIGN PEPET
+-1B6B..1B73    ; Mn #   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
+-1B80..1B81    ; Mn #   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
+-1BA2..1BA5    ; Mn #   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
+-1BA8..1BA9    ; Mn #   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+-1BAB..1BAD    ; Mn #   [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
+-1BE6          ; Mn #       BATAK SIGN TOMPI
+-1BE8..1BE9    ; Mn #   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
+-1BED          ; Mn #       BATAK VOWEL SIGN KARO O
+-1BEF..1BF1    ; Mn #   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
+-1C2C..1C33    ; Mn #   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
+-1C36..1C37    ; Mn #   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
+-1CD0..1CD2    ; Mn #   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
+-1CD4..1CE0    ; Mn #  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
+-1CE2..1CE8    ; Mn #   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
+-1CED          ; Mn #       VEDIC SIGN TIRYAK
+-1CF4          ; Mn #       VEDIC TONE CANDRA ABOVE
+-1CF8..1CF9    ; Mn #   [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
+-1DC0..1DF9    ; Mn #  [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW
+-1DFB..1DFF    ; Mn #   [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+-20D0..20DC    ; Mn #  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+-20E1          ; Mn #       COMBINING LEFT RIGHT ARROW ABOVE
+-20E5..20F0    ; Mn #  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
+-2CEF..2CF1    ; Mn #   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+-2D7F          ; Mn #       TIFINAGH CONSONANT JOINER
+-2DE0..2DFF    ; Mn #  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+-302A..302D    ; Mn #   [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
+-3099..309A    ; Mn #   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+-A66F          ; Mn #       COMBINING CYRILLIC VZMET
+-A674..A67D    ; Mn #  [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
+-A69E..A69F    ; Mn #   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
+-A6F0..A6F1    ; Mn #   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
+-A802          ; Mn #       SYLOTI NAGRI SIGN DVISVARA
+-A806          ; Mn #       SYLOTI NAGRI SIGN HASANTA
+-A80B          ; Mn #       SYLOTI NAGRI SIGN ANUSVARA
+-A825..A826    ; Mn #   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+-A82C          ; Mn #       SYLOTI NAGRI SIGN ALTERNATE HASANTA
+-A8C4..A8C5    ; Mn #   [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
+-A8E0..A8F1    ; Mn #  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
+-A8FF          ; Mn #       DEVANAGARI VOWEL SIGN AY
+-A926..A92D    ; Mn #   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
+-A947..A951    ; Mn #  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
+-A980..A982    ; Mn #   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
+-A9B3          ; Mn #       JAVANESE SIGN CECAK TELU
+-A9B6..A9B9    ; Mn #   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
+-A9BC..A9BD    ; Mn #   [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET
+-A9E5          ; Mn #       MYANMAR SIGN SHAN SAW
+-AA29..AA2E    ; Mn #   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
+-AA31..AA32    ; Mn #   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
+-AA35..AA36    ; Mn #   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
+-AA43          ; Mn #       CHAM CONSONANT SIGN FINAL NG
+-AA4C          ; Mn #       CHAM CONSONANT SIGN FINAL M
+-AA7C          ; Mn #       MYANMAR SIGN TAI LAING TONE-2
+-AAB0          ; Mn #       TAI VIET MAI KANG
+-AAB2..AAB4    ; Mn #   [3] TAI VIET VOWEL I..TAI VIET VOWEL U
+-AAB7..AAB8    ; Mn #   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
+-AABE..AABF    ; Mn #   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
+-AAC1          ; Mn #       TAI VIET TONE MAI THO
+-AAEC..AAED    ; Mn #   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
+-AAF6          ; Mn #       MEETEI MAYEK VIRAMA
+-ABE5          ; Mn #       MEETEI MAYEK VOWEL SIGN ANAP
+-ABE8          ; Mn #       MEETEI MAYEK VOWEL SIGN UNAP
+-ABED          ; Mn #       MEETEI MAYEK APUN IYEK
+-FB1E          ; Mn #       HEBREW POINT JUDEO-SPANISH VARIKA
+-FE00..FE0F    ; Mn #  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
+-FE20..FE2F    ; Mn #  [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
+-101FD         ; Mn #       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
+-102E0         ; Mn #       COPTIC EPACT THOUSANDS MARK
+-10376..1037A  ; Mn #   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
+-10A01..10A03  ; Mn #   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
+-10A05..10A06  ; Mn #   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
+-10A0C..10A0F  ; Mn #   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
+-10A38..10A3A  ; Mn #   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
+-10A3F         ; Mn #       KHAROSHTHI VIRAMA
+-10AE5..10AE6  ; Mn #   [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
+-10D24..10D27  ; Mn #   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+-10EAB..10EAC  ; Mn #   [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+-10F46..10F50  ; Mn #  [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
+-11001         ; Mn #       BRAHMI SIGN ANUSVARA
+-11038..11046  ; Mn #  [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
+-1107F..11081  ; Mn #   [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA
+-110B3..110B6  ; Mn #   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
+-110B9..110BA  ; Mn #   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+-11100..11102  ; Mn #   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
+-11127..1112B  ; Mn #   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
+-1112D..11134  ; Mn #   [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
+-11173         ; Mn #       MAHAJANI SIGN NUKTA
+-11180..11181  ; Mn #   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
+-111B6..111BE  ; Mn #   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
+-111C9..111CC  ; Mn #   [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+-111CF         ; Mn #       SHARADA SIGN INVERTED CANDRABINDU
+-1122F..11231  ; Mn #   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
+-11234         ; Mn #       KHOJKI SIGN ANUSVARA
+-11236..11237  ; Mn #   [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
+-1123E         ; Mn #       KHOJKI SIGN SUKUN
+-112DF         ; Mn #       KHUDAWADI SIGN ANUSVARA
+-112E3..112EA  ; Mn #   [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
+-11300..11301  ; Mn #   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
+-1133B..1133C  ; Mn #   [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA
+-11340         ; Mn #       GRANTHA VOWEL SIGN II
+-11366..1136C  ; Mn #   [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
+-11370..11374  ; Mn #   [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+-11438..1143F  ; Mn #   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
+-11442..11444  ; Mn #   [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
+-11446         ; Mn #       NEWA SIGN NUKTA
+-1145E         ; Mn #       NEWA SANDHI MARK
+-114B3..114B8  ; Mn #   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
+-114BA         ; Mn #       TIRHUTA VOWEL SIGN SHORT E
+-114BF..114C0  ; Mn #   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
+-114C2..114C3  ; Mn #   [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
+-115B2..115B5  ; Mn #   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
+-115BC..115BD  ; Mn #   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
+-115BF..115C0  ; Mn #   [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
+-115DC..115DD  ; Mn #   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
+-11633..1163A  ; Mn #   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
+-1163D         ; Mn #       MODI SIGN ANUSVARA
+-1163F..11640  ; Mn #   [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA
+-116AB         ; Mn #       TAKRI SIGN ANUSVARA
+-116AD         ; Mn #       TAKRI VOWEL SIGN AA
+-116B0..116B5  ; Mn #   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
+-116B7         ; Mn #       TAKRI SIGN NUKTA
+-1171D..1171F  ; Mn #   [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+-11722..11725  ; Mn #   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
+-11727..1172B  ; Mn #   [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
+-1182F..11837  ; Mn #   [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
+-11839..1183A  ; Mn #   [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+-1193B..1193C  ; Mn #   [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+-1193E         ; Mn #       DIVES AKURU VIRAMA
+-11943         ; Mn #       DIVES AKURU SIGN NUKTA
+-119D4..119D7  ; Mn #   [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
+-119DA..119DB  ; Mn #   [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
+-119E0         ; Mn #       NANDINAGARI SIGN VIRAMA
+-11A01..11A0A  ; Mn #  [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+-11A33..11A38  ; Mn #   [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
+-11A3B..11A3E  ; Mn #   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+-11A47         ; Mn #       ZANABAZAR SQUARE SUBJOINER
+-11A51..11A56  ; Mn #   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
+-11A59..11A5B  ; Mn #   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+-11A8A..11A96  ; Mn #  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
+-11A98..11A99  ; Mn #   [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
+-11C30..11C36  ; Mn #   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
+-11C38..11C3D  ; Mn #   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+-11C3F         ; Mn #       BHAIKSUKI SIGN VIRAMA
+-11C92..11CA7  ; Mn #  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+-11CAA..11CB0  ; Mn #   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+-11CB2..11CB3  ; Mn #   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
+-11CB5..11CB6  ; Mn #   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+-11D31..11D36  ; Mn #   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
+-11D3A         ; Mn #       MASARAM GONDI VOWEL SIGN E
+-11D3C..11D3D  ; Mn #   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+-11D3F..11D45  ; Mn #   [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
+-11D47         ; Mn #       MASARAM GONDI RA-KARA
+-11D90..11D91  ; Mn #   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI
+-11D95         ; Mn #       GUNJALA GONDI SIGN ANUSVARA
+-11D97         ; Mn #       GUNJALA GONDI VIRAMA
+-11EF3..11EF4  ; Mn #   [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
+-16AF0..16AF4  ; Mn #   [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
+-16B30..16B36  ; Mn #   [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
+-16F4F         ; Mn #       MIAO SIGN CONSONANT MODIFIER BAR
+-16F8F..16F92  ; Mn #   [4] MIAO TONE RIGHT..MIAO TONE BELOW
+-16FE4         ; Mn #       KHITAN SMALL SCRIPT FILLER
+-1BC9D..1BC9E  ; Mn #   [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
+-1D167..1D169  ; Mn #   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
+-1D17B..1D182  ; Mn #   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
+-1D185..1D18B  ; Mn #   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
+-1D1AA..1D1AD  ; Mn #   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
+-1D242..1D244  ; Mn #   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
+-1DA00..1DA36  ; Mn #  [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
+-1DA3B..1DA6C  ; Mn #  [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
+-1DA75         ; Mn #       SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
+-1DA84         ; Mn #       SIGNWRITING LOCATION HEAD NECK
+-1DA9B..1DA9F  ; Mn #   [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
+-1DAA1..1DAAF  ; Mn #  [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+-1E000..1E006  ; Mn #   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+-1E008..1E018  ; Mn #  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+-1E01B..1E021  ; Mn #   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+-1E023..1E024  ; Mn #   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+-1E026..1E02A  ; Mn #   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
+-1E130..1E136  ; Mn #   [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D
+-1E2EC..1E2EF  ; Mn #   [4] WANCHO TONE TUP..WANCHO TONE KOINI
+-1E8D0..1E8D6  ; Mn #   [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
+-1E944..1E94A  ; Mn #   [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
+-E0100..E01EF  ; Mn # [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+-
+-# Total code points: 1839
+-
+-# ================================================
+-
+-# General_Category=Enclosing_Mark
+-
+-0488..0489    ; Me #   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
+-1ABE          ; Me #       COMBINING PARENTHESES OVERLAY
+-20DD..20E0    ; Me #   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
+-20E2..20E4    ; Me #   [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
+-A670..A672    ; Me #   [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
+-
+-# Total code points: 13
+-
+-# ================================================
+-
+-# General_Category=Spacing_Mark
+-
+-0903          ; Mc #       DEVANAGARI SIGN VISARGA
+-093B          ; Mc #       DEVANAGARI VOWEL SIGN OOE
+-093E..0940    ; Mc #   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+-0949..094C    ; Mc #   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+-094E..094F    ; Mc #   [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
+-0982..0983    ; Mc #   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+-09BE..09C0    ; Mc #   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+-09C7..09C8    ; Mc #   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+-09CB..09CC    ; Mc #   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+-09D7          ; Mc #       BENGALI AU LENGTH MARK
+-0A03          ; Mc #       GURMUKHI SIGN VISARGA
+-0A3E..0A40    ; Mc #   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+-0A83          ; Mc #       GUJARATI SIGN VISARGA
+-0ABE..0AC0    ; Mc #   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
+-0AC9          ; Mc #       GUJARATI VOWEL SIGN CANDRA O
+-0ACB..0ACC    ; Mc #   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
+-0B02..0B03    ; Mc #   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
+-0B3E          ; Mc #       ORIYA VOWEL SIGN AA
+-0B40          ; Mc #       ORIYA VOWEL SIGN II
+-0B47..0B48    ; Mc #   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
+-0B4B..0B4C    ; Mc #   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
+-0B57          ; Mc #       ORIYA AU LENGTH MARK
+-0BBE..0BBF    ; Mc #   [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
+-0BC1..0BC2    ; Mc #   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
+-0BC6..0BC8    ; Mc #   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
+-0BCA..0BCC    ; Mc #   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
+-0BD7          ; Mc #       TAMIL AU LENGTH MARK
+-0C01..0C03    ; Mc #   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
+-0C41..0C44    ; Mc #   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
+-0C82..0C83    ; Mc #   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
+-0CBE          ; Mc #       KANNADA VOWEL SIGN AA
+-0CC0..0CC4    ; Mc #   [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
+-0CC7..0CC8    ; Mc #   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
+-0CCA..0CCB    ; Mc #   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
+-0CD5..0CD6    ; Mc #   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
+-0D02..0D03    ; Mc #   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+-0D3E..0D40    ; Mc #   [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
+-0D46..0D48    ; Mc #   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
+-0D4A..0D4C    ; Mc #   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
+-0D57          ; Mc #       MALAYALAM AU LENGTH MARK
+-0D82..0D83    ; Mc #   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
+-0DCF..0DD1    ; Mc #   [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
+-0DD8..0DDF    ; Mc #   [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
+-0DF2..0DF3    ; Mc #   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
+-0F3E..0F3F    ; Mc #   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
+-0F7F          ; Mc #       TIBETAN SIGN RNAM BCAD
+-102B..102C    ; Mc #   [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
+-1031          ; Mc #       MYANMAR VOWEL SIGN E
+-1038          ; Mc #       MYANMAR SIGN VISARGA
+-103B..103C    ; Mc #   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
+-1056..1057    ; Mc #   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
+-1062..1064    ; Mc #   [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
+-1067..106D    ; Mc #   [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
+-1083..1084    ; Mc #   [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
+-1087..108C    ; Mc #   [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
+-108F          ; Mc #       MYANMAR SIGN RUMAI PALAUNG TONE-5
+-109A..109C    ; Mc #   [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
+-17B6          ; Mc #       KHMER VOWEL SIGN AA
+-17BE..17C5    ; Mc #   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
+-17C7..17C8    ; Mc #   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
+-1923..1926    ; Mc #   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
+-1929..192B    ; Mc #   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
+-1930..1931    ; Mc #   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
+-1933..1938    ; Mc #   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
+-1A19..1A1A    ; Mc #   [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
+-1A55          ; Mc #       TAI THAM CONSONANT SIGN MEDIAL RA
+-1A57          ; Mc #       TAI THAM CONSONANT SIGN LA TANG LAI
+-1A61          ; Mc #       TAI THAM VOWEL SIGN A
+-1A63..1A64    ; Mc #   [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
+-1A6D..1A72    ; Mc #   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
+-1B04          ; Mc #       BALINESE SIGN BISAH
+-1B35          ; Mc #       BALINESE VOWEL SIGN TEDUNG
+-1B3B          ; Mc #       BALINESE VOWEL SIGN RA REPA TEDUNG
+-1B3D..1B41    ; Mc #   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
+-1B43..1B44    ; Mc #   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
+-1B82          ; Mc #       SUNDANESE SIGN PANGWISAD
+-1BA1          ; Mc #       SUNDANESE CONSONANT SIGN PAMINGKAL
+-1BA6..1BA7    ; Mc #   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
+-1BAA          ; Mc #       SUNDANESE SIGN PAMAAEH
+-1BE7          ; Mc #       BATAK VOWEL SIGN E
+-1BEA..1BEC    ; Mc #   [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
+-1BEE          ; Mc #       BATAK VOWEL SIGN U
+-1BF2..1BF3    ; Mc #   [2] BATAK PANGOLAT..BATAK PANONGONAN
+-1C24..1C2B    ; Mc #   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
+-1C34..1C35    ; Mc #   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
+-1CE1          ; Mc #       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
+-1CF7          ; Mc #       VEDIC SIGN ATIKRAMA
+-302E..302F    ; Mc #   [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
+-A823..A824    ; Mc #   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
+-A827          ; Mc #       SYLOTI NAGRI VOWEL SIGN OO
+-A880..A881    ; Mc #   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
+-A8B4..A8C3    ; Mc #  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
+-A952..A953    ; Mc #   [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
+-A983          ; Mc #       JAVANESE SIGN WIGNYAN
+-A9B4..A9B5    ; Mc #   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
+-A9BA..A9BB    ; Mc #   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
+-A9BE..A9C0    ; Mc #   [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON
+-AA2F..AA30    ; Mc #   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
+-AA33..AA34    ; Mc #   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
+-AA4D          ; Mc #       CHAM CONSONANT SIGN FINAL H
+-AA7B          ; Mc #       MYANMAR SIGN PAO KAREN TONE
+-AA7D          ; Mc #       MYANMAR SIGN TAI LAING TONE-5
+-AAEB          ; Mc #       MEETEI MAYEK VOWEL SIGN II
+-AAEE..AAEF    ; Mc #   [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
+-AAF5          ; Mc #       MEETEI MAYEK VOWEL SIGN VISARGA
+-ABE3..ABE4    ; Mc #   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
+-ABE6..ABE7    ; Mc #   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
+-ABE9..ABEA    ; Mc #   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
+-ABEC          ; Mc #       MEETEI MAYEK LUM IYEK
+-11000         ; Mc #       BRAHMI SIGN CANDRABINDU
+-11002         ; Mc #       BRAHMI SIGN VISARGA
+-11082         ; Mc #       KAITHI SIGN VISARGA
+-110B0..110B2  ; Mc #   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
+-110B7..110B8  ; Mc #   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+-1112C         ; Mc #       CHAKMA VOWEL SIGN E
+-11145..11146  ; Mc #   [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+-11182         ; Mc #       SHARADA SIGN VISARGA
+-111B3..111B5  ; Mc #   [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
+-111BF..111C0  ; Mc #   [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
+-111CE         ; Mc #       SHARADA VOWEL SIGN PRISHTHAMATRA E
+-1122C..1122E  ; Mc #   [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
+-11232..11233  ; Mc #   [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
+-11235         ; Mc #       KHOJKI SIGN VIRAMA
+-112E0..112E2  ; Mc #   [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
+-11302..11303  ; Mc #   [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
+-1133E..1133F  ; Mc #   [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
+-11341..11344  ; Mc #   [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
+-11347..11348  ; Mc #   [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
+-1134B..1134D  ; Mc #   [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
+-11357         ; Mc #       GRANTHA AU LENGTH MARK
+-11362..11363  ; Mc #   [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
+-11435..11437  ; Mc #   [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
+-11440..11441  ; Mc #   [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
+-11445         ; Mc #       NEWA SIGN VISARGA
+-114B0..114B2  ; Mc #   [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
+-114B9         ; Mc #       TIRHUTA VOWEL SIGN E
+-114BB..114BE  ; Mc #   [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU
+-114C1         ; Mc #       TIRHUTA SIGN VISARGA
+-115AF..115B1  ; Mc #   [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II
+-115B8..115BB  ; Mc #   [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
+-115BE         ; Mc #       SIDDHAM SIGN VISARGA
+-11630..11632  ; Mc #   [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
+-1163B..1163C  ; Mc #   [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
+-1163E         ; Mc #       MODI SIGN VISARGA
+-116AC         ; Mc #       TAKRI SIGN VISARGA
+-116AE..116AF  ; Mc #   [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
+-116B6         ; Mc #       TAKRI SIGN VIRAMA
+-11720..11721  ; Mc #   [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
+-11726         ; Mc #       AHOM VOWEL SIGN E
+-1182C..1182E  ; Mc #   [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
+-11838         ; Mc #       DOGRA SIGN VISARGA
+-11930..11935  ; Mc #   [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+-11937..11938  ; Mc #   [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+-1193D         ; Mc #       DIVES AKURU SIGN HALANTA
+-11940         ; Mc #       DIVES AKURU MEDIAL YA
+-11942         ; Mc #       DIVES AKURU MEDIAL RA
+-119D1..119D3  ; Mc #   [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
+-119DC..119DF  ; Mc #   [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
+-119E4         ; Mc #       NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
+-11A39         ; Mc #       ZANABAZAR SQUARE SIGN VISARGA
+-11A57..11A58  ; Mc #   [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
+-11A97         ; Mc #       SOYOMBO SIGN VISARGA
+-11C2F         ; Mc #       BHAIKSUKI VOWEL SIGN AA
+-11C3E         ; Mc #       BHAIKSUKI SIGN VISARGA
+-11CA9         ; Mc #       MARCHEN SUBJOINED LETTER YA
+-11CB1         ; Mc #       MARCHEN VOWEL SIGN I
+-11CB4         ; Mc #       MARCHEN VOWEL SIGN O
+-11D8A..11D8E  ; Mc #   [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
+-11D93..11D94  ; Mc #   [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
+-11D96         ; Mc #       GUNJALA GONDI SIGN VISARGA
+-11EF5..11EF6  ; Mc #   [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
+-16F51..16F87  ; Mc #  [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
+-16FF0..16FF1  ; Mc #   [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
+-1D165..1D166  ; Mc #   [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
+-1D16D..1D172  ; Mc #   [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
+-
+-# Total code points: 443
+-
+-# ================================================
+-
+-# General_Category=Decimal_Number
+-
+-0030..0039    ; Nd #  [10] DIGIT ZERO..DIGIT NINE
+-0660..0669    ; Nd #  [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+-06F0..06F9    ; Nd #  [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
+-07C0..07C9    ; Nd #  [10] NKO DIGIT ZERO..NKO DIGIT NINE
+-0966..096F    ; Nd #  [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+-09E6..09EF    ; Nd #  [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
+-0A66..0A6F    ; Nd #  [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
+-0AE6..0AEF    ; Nd #  [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+-0B66..0B6F    ; Nd #  [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
+-0BE6..0BEF    ; Nd #  [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
+-0C66..0C6F    ; Nd #  [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
+-0CE6..0CEF    ; Nd #  [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
+-0D66..0D6F    ; Nd #  [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
+-0DE6..0DEF    ; Nd #  [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE
+-0E50..0E59    ; Nd #  [10] THAI DIGIT ZERO..THAI DIGIT NINE
+-0ED0..0ED9    ; Nd #  [10] LAO DIGIT ZERO..LAO DIGIT NINE
+-0F20..0F29    ; Nd #  [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
+-1040..1049    ; Nd #  [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
+-1090..1099    ; Nd #  [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
+-17E0..17E9    ; Nd #  [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
+-1810..1819    ; Nd #  [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
+-1946..194F    ; Nd #  [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
+-19D0..19D9    ; Nd #  [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
+-1A80..1A89    ; Nd #  [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
+-1A90..1A99    ; Nd #  [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
+-1B50..1B59    ; Nd #  [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
+-1BB0..1BB9    ; Nd #  [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
+-1C40..1C49    ; Nd #  [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
+-1C50..1C59    ; Nd #  [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
+-A620..A629    ; Nd #  [10] VAI DIGIT ZERO..VAI DIGIT NINE
+-A8D0..A8D9    ; Nd #  [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
+-A900..A909    ; Nd #  [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
+-A9D0..A9D9    ; Nd #  [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
+-A9F0..A9F9    ; Nd #  [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE
+-AA50..AA59    ; Nd #  [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
+-ABF0..ABF9    ; Nd #  [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
+-FF10..FF19    ; Nd #  [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
+-104A0..104A9  ; Nd #  [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
+-10D30..10D39  ; Nd #  [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
+-11066..1106F  ; Nd #  [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
+-110F0..110F9  ; Nd #  [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE
+-11136..1113F  ; Nd #  [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
+-111D0..111D9  ; Nd #  [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
+-112F0..112F9  ; Nd #  [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE
+-11450..11459  ; Nd #  [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
+-114D0..114D9  ; Nd #  [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE
+-11650..11659  ; Nd #  [10] MODI DIGIT ZERO..MODI DIGIT NINE
+-116C0..116C9  ; Nd #  [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
+-11730..11739  ; Nd #  [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
+-118E0..118E9  ; Nd #  [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
+-11950..11959  ; Nd #  [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
+-11C50..11C59  ; Nd #  [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
+-11D50..11D59  ; Nd #  [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
+-11DA0..11DA9  ; Nd #  [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
+-16A60..16A69  ; Nd #  [10] MRO DIGIT ZERO..MRO DIGIT NINE
+-16B50..16B59  ; Nd #  [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE
+-1D7CE..1D7FF  ; Nd #  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+-1E140..1E149  ; Nd #  [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
+-1E2F0..1E2F9  ; Nd #  [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
+-1E950..1E959  ; Nd #  [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+-1FBF0..1FBF9  ; Nd #  [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+-
+-# Total code points: 650
+-
+-# ================================================
+-
+-# General_Category=Letter_Number
+-
+-16EE..16F0    ; Nl #   [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
+-2160..2182    ; Nl #  [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
+-2185..2188    ; Nl #   [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
+-3007          ; Nl #       IDEOGRAPHIC NUMBER ZERO
+-3021..3029    ; Nl #   [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
+-3038..303A    ; Nl #   [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
+-A6E6..A6EF    ; Nl #  [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+-10140..10174  ; Nl #  [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
+-10341         ; Nl #       GOTHIC LETTER NINETY
+-1034A         ; Nl #       GOTHIC LETTER NINE HUNDRED
+-103D1..103D5  ; Nl #   [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
+-12400..1246E  ; Nl # [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
+-
+-# Total code points: 236
+-
+-# ================================================
+-
+-# General_Category=Other_Number
+-
+-00B2..00B3    ; No #   [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
+-00B9          ; No #       SUPERSCRIPT ONE
+-00BC..00BE    ; No #   [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
+-09F4..09F9    ; No #   [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN
+-0B72..0B77    ; No #   [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS
+-0BF0..0BF2    ; No #   [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
+-0C78..0C7E    ; No #   [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
+-0D58..0D5E    ; No #   [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH
+-0D70..0D78    ; No #   [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS
+-0F2A..0F33    ; No #  [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO
+-1369..137C    ; No #  [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
+-17F0..17F9    ; No #  [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON
+-19DA          ; No #       NEW TAI LUE THAM DIGIT ONE
+-2070          ; No #       SUPERSCRIPT ZERO
+-2074..2079    ; No #   [6] SUPERSCRIPT FOUR..SUPERSCRIPT NINE
+-2080..2089    ; No #  [10] SUBSCRIPT ZERO..SUBSCRIPT NINE
+-2150..215F    ; No #  [16] VULGAR FRACTION ONE SEVENTH..FRACTION NUMERATOR ONE
+-2189          ; No #       VULGAR FRACTION ZERO THIRDS
+-2460..249B    ; No #  [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
+-24EA..24FF    ; No #  [22] CIRCLED DIGIT ZERO..NEGATIVE CIRCLED DIGIT ZERO
+-2776..2793    ; No #  [30] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+-2CFD          ; No #       COPTIC FRACTION ONE HALF
+-3192..3195    ; No #   [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
+-3220..3229    ; No #  [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
+-3248..324F    ; No #   [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE
+-3251..325F    ; No #  [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
+-3280..3289    ; No #  [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
+-32B1..32BF    ; No #  [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
+-A830..A835    ; No #   [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS
+-10107..10133  ; No #  [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
+-10175..10178  ; No #   [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN
+-1018A..1018B  ; No #   [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
+-102E1..102FB  ; No #  [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED
+-10320..10323  ; No #   [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
+-10858..1085F  ; No #   [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND
+-10879..1087F  ; No #   [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY
+-108A7..108AF  ; No #   [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED
+-108FB..108FF  ; No #   [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED
+-10916..1091B  ; No #   [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE
+-109BC..109BD  ; No #   [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF
+-109C0..109CF  ; No #  [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY
+-109D2..109FF  ; No #  [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS
+-10A40..10A48  ; No #   [9] KHAROSHTHI DIGIT ONE..KHAROSHTHI FRACTION ONE HALF
+-10A7D..10A7E  ; No #   [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY
+-10A9D..10A9F  ; No #   [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY
+-10AEB..10AEF  ; No #   [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED
+-10B58..10B5F  ; No #   [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
+-10B78..10B7F  ; No #   [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
+-10BA9..10BAF  ; No #   [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED
+-10CFA..10CFF  ; No #   [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND
+-10E60..10E7E  ; No #  [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+-10F1D..10F26  ; No #  [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
+-10F51..10F54  ; No #   [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
+-10FC5..10FCB  ; No #   [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
+-11052..11065  ; No #  [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND
+-111E1..111F4  ; No #  [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND
+-1173A..1173B  ; No #   [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY
+-118EA..118F2  ; No #   [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
+-11C5A..11C6C  ; No #  [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK
+-11FC0..11FD4  ; No #  [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH
+-16B5B..16B61  ; No #   [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS
+-16E80..16E96  ; No #  [23] MEDEFAIDRIN DIGIT ZERO..MEDEFAIDRIN DIGIT THREE ALTERNATE FORM
+-1D2E0..1D2F3  ; No #  [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN
+-1D360..1D378  ; No #  [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE
+-1E8C7..1E8CF  ; No #   [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE
+-1EC71..1ECAB  ; No #  [59] INDIC SIYAQ NUMBER ONE..INDIC SIYAQ NUMBER PREFIXED NINE
+-1ECAD..1ECAF  ; No #   [3] INDIC SIYAQ FRACTION ONE QUARTER..INDIC SIYAQ FRACTION THREE QUARTERS
+-1ECB1..1ECB4  ; No #   [4] INDIC SIYAQ NUMBER ALTERNATE ONE..INDIC SIYAQ ALTERNATE LAKH MARK
+-1ED01..1ED2D  ; No #  [45] OTTOMAN SIYAQ NUMBER ONE..OTTOMAN SIYAQ NUMBER NINETY THOUSAND
+-1ED2F..1ED3D  ; No #  [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH
+-1F100..1F10C  ; No #  [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
+-
+-# Total code points: 895
+-
+-# ================================================
+-
+-# General_Category=Space_Separator
+-
+-0020          ; Zs #       SPACE
+-00A0          ; Zs #       NO-BREAK SPACE
+-1680          ; Zs #       OGHAM SPACE MARK
+-2000..200A    ; Zs #  [11] EN QUAD..HAIR SPACE
+-202F          ; Zs #       NARROW NO-BREAK SPACE
+-205F          ; Zs #       MEDIUM MATHEMATICAL SPACE
+-3000          ; Zs #       IDEOGRAPHIC SPACE
+-
+-# Total code points: 17
+-
+-# ================================================
+-
+-# General_Category=Line_Separator
+-
+-2028          ; Zl #       LINE SEPARATOR
+-
+-# Total code points: 1
+-
+-# ================================================
+-
+-# General_Category=Paragraph_Separator
+-
+-2029          ; Zp #       PARAGRAPH SEPARATOR
+-
+-# Total code points: 1
+-
+-# ================================================
+-
+-# General_Category=Control
+-
+-0000..001F    ; Cc #  [32] <control-0000>..<control-001F>
+-007F..009F    ; Cc #  [33] <control-007F>..<control-009F>
+-
+-# Total code points: 65
+-
+-# ================================================
+-
+-# General_Category=Format
+-
+-00AD          ; Cf #       SOFT HYPHEN
+-0600..0605    ; Cf #   [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE
+-061C          ; Cf #       ARABIC LETTER MARK
+-06DD          ; Cf #       ARABIC END OF AYAH
+-070F          ; Cf #       SYRIAC ABBREVIATION MARK
+-08E2          ; Cf #       ARABIC DISPUTED END OF AYAH
+-180E          ; Cf #       MONGOLIAN VOWEL SEPARATOR
+-200B..200F    ; Cf #   [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK
+-202A..202E    ; Cf #   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
+-2060..2064    ; Cf #   [5] WORD JOINER..INVISIBLE PLUS
+-2066..206F    ; Cf #  [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
+-FEFF          ; Cf #       ZERO WIDTH NO-BREAK SPACE
+-FFF9..FFFB    ; Cf #   [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
+-110BD         ; Cf #       KAITHI NUMBER SIGN
+-110CD         ; Cf #       KAITHI NUMBER SIGN ABOVE
+-13430..13438  ; Cf #   [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT
+-1BCA0..1BCA3  ; Cf #   [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
+-1D173..1D17A  ; Cf #   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
+-E0001         ; Cf #       LANGUAGE TAG
+-E0020..E007F  ; Cf #  [96] TAG SPACE..CANCEL TAG
+-
+-# Total code points: 161
+-
+-# ================================================
+-
+-# General_Category=Private_Use
+-
+-E000..F8FF    ; Co # [6400] <private-use-E000>..<private-use-F8FF>
+-F0000..FFFFD  ; Co # [65534] <private-use-F0000>..<private-use-FFFFD>
+-100000..10FFFD; Co # [65534] <private-use-100000>..<private-use-10FFFD>
+-
+-# Total code points: 137468
+-
+-# ================================================
+-
+-# General_Category=Surrogate
+-
+-D800..DFFF    ; Cs # [2048] <surrogate-D800>..<surrogate-DFFF>
+-
+-# Total code points: 2048
+-
+-# ================================================
+-
+-# General_Category=Dash_Punctuation
+-
+-002D          ; Pd #       HYPHEN-MINUS
+-058A          ; Pd #       ARMENIAN HYPHEN
+-05BE          ; Pd #       HEBREW PUNCTUATION MAQAF
+-1400          ; Pd #       CANADIAN SYLLABICS HYPHEN
+-1806          ; Pd #       MONGOLIAN TODO SOFT HYPHEN
+-2010..2015    ; Pd #   [6] HYPHEN..HORIZONTAL BAR
+-2E17          ; Pd #       DOUBLE OBLIQUE HYPHEN
+-2E1A          ; Pd #       HYPHEN WITH DIAERESIS
+-2E3A..2E3B    ; Pd #   [2] TWO-EM DASH..THREE-EM DASH
+-2E40          ; Pd #       DOUBLE HYPHEN
+-301C          ; Pd #       WAVE DASH
+-3030          ; Pd #       WAVY DASH
+-30A0          ; Pd #       KATAKANA-HIRAGANA DOUBLE HYPHEN
+-FE31..FE32    ; Pd #   [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
+-FE58          ; Pd #       SMALL EM DASH
+-FE63          ; Pd #       SMALL HYPHEN-MINUS
+-FF0D          ; Pd #       FULLWIDTH HYPHEN-MINUS
+-10EAD         ; Pd #       YEZIDI HYPHENATION MARK
+-
+-# Total code points: 25
+-
+-# ================================================
+-
+-# General_Category=Open_Punctuation
+-
+-0028          ; Ps #       LEFT PARENTHESIS
+-005B          ; Ps #       LEFT SQUARE BRACKET
+-007B          ; Ps #       LEFT CURLY BRACKET
+-0F3A          ; Ps #       TIBETAN MARK GUG RTAGS GYON
+-0F3C          ; Ps #       TIBETAN MARK ANG KHANG GYON
+-169B          ; Ps #       OGHAM FEATHER MARK
+-201A          ; Ps #       SINGLE LOW-9 QUOTATION MARK
+-201E          ; Ps #       DOUBLE LOW-9 QUOTATION MARK
+-2045          ; Ps #       LEFT SQUARE BRACKET WITH QUILL
+-207D          ; Ps #       SUPERSCRIPT LEFT PARENTHESIS
+-208D          ; Ps #       SUBSCRIPT LEFT PARENTHESIS
+-2308          ; Ps #       LEFT CEILING
+-230A          ; Ps #       LEFT FLOOR
+-2329          ; Ps #       LEFT-POINTING ANGLE BRACKET
+-2768          ; Ps #       MEDIUM LEFT PARENTHESIS ORNAMENT
+-276A          ; Ps #       MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
+-276C          ; Ps #       MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
+-276E          ; Ps #       HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
+-2770          ; Ps #       HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
+-2772          ; Ps #       LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
+-2774          ; Ps #       MEDIUM LEFT CURLY BRACKET ORNAMENT
+-27C5          ; Ps #       LEFT S-SHAPED BAG DELIMITER
+-27E6          ; Ps #       MATHEMATICAL LEFT WHITE SQUARE BRACKET
+-27E8          ; Ps #       MATHEMATICAL LEFT ANGLE BRACKET
+-27EA          ; Ps #       MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+-27EC          ; Ps #       MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+-27EE          ; Ps #       MATHEMATICAL LEFT FLATTENED PARENTHESIS
+-2983          ; Ps #       LEFT WHITE CURLY BRACKET
+-2985          ; Ps #       LEFT WHITE PARENTHESIS
+-2987          ; Ps #       Z NOTATION LEFT IMAGE BRACKET
+-2989          ; Ps #       Z NOTATION LEFT BINDING BRACKET
+-298B          ; Ps #       LEFT SQUARE BRACKET WITH UNDERBAR
+-298D          ; Ps #       LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+-298F          ; Ps #       LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+-2991          ; Ps #       LEFT ANGLE BRACKET WITH DOT
+-2993          ; Ps #       LEFT ARC LESS-THAN BRACKET
+-2995          ; Ps #       DOUBLE LEFT ARC GREATER-THAN BRACKET
+-2997          ; Ps #       LEFT BLACK TORTOISE SHELL BRACKET
+-29D8          ; Ps #       LEFT WIGGLY FENCE
+-29DA          ; Ps #       LEFT DOUBLE WIGGLY FENCE
+-29FC          ; Ps #       LEFT-POINTING CURVED ANGLE BRACKET
+-2E22          ; Ps #       TOP LEFT HALF BRACKET
+-2E24          ; Ps #       BOTTOM LEFT HALF BRACKET
+-2E26          ; Ps #       LEFT SIDEWAYS U BRACKET
+-2E28          ; Ps #       LEFT DOUBLE PARENTHESIS
+-2E42          ; Ps #       DOUBLE LOW-REVERSED-9 QUOTATION MARK
+-3008          ; Ps #       LEFT ANGLE BRACKET
+-300A          ; Ps #       LEFT DOUBLE ANGLE BRACKET
+-300C          ; Ps #       LEFT CORNER BRACKET
+-300E          ; Ps #       LEFT WHITE CORNER BRACKET
+-3010          ; Ps #       LEFT BLACK LENTICULAR BRACKET
+-3014          ; Ps #       LEFT TORTOISE SHELL BRACKET
+-3016          ; Ps #       LEFT WHITE LENTICULAR BRACKET
+-3018          ; Ps #       LEFT WHITE TORTOISE SHELL BRACKET
+-301A          ; Ps #       LEFT WHITE SQUARE BRACKET
+-301D          ; Ps #       REVERSED DOUBLE PRIME QUOTATION MARK
+-FD3F          ; Ps #       ORNATE RIGHT PARENTHESIS
+-FE17          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+-FE35          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+-FE37          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+-FE39          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+-FE3B          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+-FE3D          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+-FE3F          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+-FE41          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+-FE43          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+-FE47          ; Ps #       PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+-FE59          ; Ps #       SMALL LEFT PARENTHESIS
+-FE5B          ; Ps #       SMALL LEFT CURLY BRACKET
+-FE5D          ; Ps #       SMALL LEFT TORTOISE SHELL BRACKET
+-FF08          ; Ps #       FULLWIDTH LEFT PARENTHESIS
+-FF3B          ; Ps #       FULLWIDTH LEFT SQUARE BRACKET
+-FF5B          ; Ps #       FULLWIDTH LEFT CURLY BRACKET
+-FF5F          ; Ps #       FULLWIDTH LEFT WHITE PARENTHESIS
+-FF62          ; Ps #       HALFWIDTH LEFT CORNER BRACKET
+-
+-# Total code points: 75
+-
+-# ================================================
+-
+-# General_Category=Close_Punctuation
+-
+-0029          ; Pe #       RIGHT PARENTHESIS
+-005D          ; Pe #       RIGHT SQUARE BRACKET
+-007D          ; Pe #       RIGHT CURLY BRACKET
+-0F3B          ; Pe #       TIBETAN MARK GUG RTAGS GYAS
+-0F3D          ; Pe #       TIBETAN MARK ANG KHANG GYAS
+-169C          ; Pe #       OGHAM REVERSED FEATHER MARK
+-2046          ; Pe #       RIGHT SQUARE BRACKET WITH QUILL
+-207E          ; Pe #       SUPERSCRIPT RIGHT PARENTHESIS
+-208E          ; Pe #       SUBSCRIPT RIGHT PARENTHESIS
+-2309          ; Pe #       RIGHT CEILING
+-230B          ; Pe #       RIGHT FLOOR
+-232A          ; Pe #       RIGHT-POINTING ANGLE BRACKET
+-2769          ; Pe #       MEDIUM RIGHT PARENTHESIS ORNAMENT
+-276B          ; Pe #       MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
+-276D          ; Pe #       MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
+-276F          ; Pe #       HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
+-2771          ; Pe #       HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
+-2773          ; Pe #       LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
+-2775          ; Pe #       MEDIUM RIGHT CURLY BRACKET ORNAMENT
+-27C6          ; Pe #       RIGHT S-SHAPED BAG DELIMITER
+-27E7          ; Pe #       MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+-27E9          ; Pe #       MATHEMATICAL RIGHT ANGLE BRACKET
+-27EB          ; Pe #       MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+-27ED          ; Pe #       MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+-27EF          ; Pe #       MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+-2984          ; Pe #       RIGHT WHITE CURLY BRACKET
+-2986          ; Pe #       RIGHT WHITE PARENTHESIS
+-2988          ; Pe #       Z NOTATION RIGHT IMAGE BRACKET
+-298A          ; Pe #       Z NOTATION RIGHT BINDING BRACKET
+-298C          ; Pe #       RIGHT SQUARE BRACKET WITH UNDERBAR
+-298E          ; Pe #       RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+-2990          ; Pe #       RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+-2992          ; Pe #       RIGHT ANGLE BRACKET WITH DOT
+-2994          ; Pe #       RIGHT ARC GREATER-THAN BRACKET
+-2996          ; Pe #       DOUBLE RIGHT ARC LESS-THAN BRACKET
+-2998          ; Pe #       RIGHT BLACK TORTOISE SHELL BRACKET
+-29D9          ; Pe #       RIGHT WIGGLY FENCE
+-29DB          ; Pe #       RIGHT DOUBLE WIGGLY FENCE
+-29FD          ; Pe #       RIGHT-POINTING CURVED ANGLE BRACKET
+-2E23          ; Pe #       TOP RIGHT HALF BRACKET
+-2E25          ; Pe #       BOTTOM RIGHT HALF BRACKET
+-2E27          ; Pe #       RIGHT SIDEWAYS U BRACKET
+-2E29          ; Pe #       RIGHT DOUBLE PARENTHESIS
+-3009          ; Pe #       RIGHT ANGLE BRACKET
+-300B          ; Pe #       RIGHT DOUBLE ANGLE BRACKET
+-300D          ; Pe #       RIGHT CORNER BRACKET
+-300F          ; Pe #       RIGHT WHITE CORNER BRACKET
+-3011          ; Pe #       RIGHT BLACK LENTICULAR BRACKET
+-3015          ; Pe #       RIGHT TORTOISE SHELL BRACKET
+-3017          ; Pe #       RIGHT WHITE LENTICULAR BRACKET
+-3019          ; Pe #       RIGHT WHITE TORTOISE SHELL BRACKET
+-301B          ; Pe #       RIGHT WHITE SQUARE BRACKET
+-301E..301F    ; Pe #   [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
+-FD3E          ; Pe #       ORNATE LEFT PARENTHESIS
+-FE18          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
+-FE36          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+-FE38          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+-FE3A          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+-FE3C          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+-FE3E          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+-FE40          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+-FE42          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+-FE44          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+-FE48          ; Pe #       PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+-FE5A          ; Pe #       SMALL RIGHT PARENTHESIS
+-FE5C          ; Pe #       SMALL RIGHT CURLY BRACKET
+-FE5E          ; Pe #       SMALL RIGHT TORTOISE SHELL BRACKET
+-FF09          ; Pe #       FULLWIDTH RIGHT PARENTHESIS
+-FF3D          ; Pe #       FULLWIDTH RIGHT SQUARE BRACKET
+-FF5D          ; Pe #       FULLWIDTH RIGHT CURLY BRACKET
+-FF60          ; Pe #       FULLWIDTH RIGHT WHITE PARENTHESIS
+-FF63          ; Pe #       HALFWIDTH RIGHT CORNER BRACKET
+-
+-# Total code points: 73
+-
+-# ================================================
+-
+-# General_Category=Connector_Punctuation
+-
+-005F          ; Pc #       LOW LINE
+-203F..2040    ; Pc #   [2] UNDERTIE..CHARACTER TIE
+-2054          ; Pc #       INVERTED UNDERTIE
+-FE33..FE34    ; Pc #   [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+-FE4D..FE4F    ; Pc #   [3] DASHED LOW LINE..WAVY LOW LINE
+-FF3F          ; Pc #       FULLWIDTH LOW LINE
+-
+-# Total code points: 10
+-
+-# ================================================
+-
+-# General_Category=Other_Punctuation
+-
+-0021..0023    ; Po #   [3] EXCLAMATION MARK..NUMBER SIGN
+-0025..0027    ; Po #   [3] PERCENT SIGN..APOSTROPHE
+-002A          ; Po #       ASTERISK
+-002C          ; Po #       COMMA
+-002E..002F    ; Po #   [2] FULL STOP..SOLIDUS
+-003A..003B    ; Po #   [2] COLON..SEMICOLON
+-003F..0040    ; Po #   [2] QUESTION MARK..COMMERCIAL AT
+-005C          ; Po #       REVERSE SOLIDUS
+-00A1          ; Po #       INVERTED EXCLAMATION MARK
+-00A7          ; Po #       SECTION SIGN
+-00B6..00B7    ; Po #   [2] PILCROW SIGN..MIDDLE DOT
+-00BF          ; Po #       INVERTED QUESTION MARK
+-037E          ; Po #       GREEK QUESTION MARK
+-0387          ; Po #       GREEK ANO TELEIA
+-055A..055F    ; Po #   [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
+-0589          ; Po #       ARMENIAN FULL STOP
+-05C0          ; Po #       HEBREW PUNCTUATION PASEQ
+-05C3          ; Po #       HEBREW PUNCTUATION SOF PASUQ
+-05C6          ; Po #       HEBREW PUNCTUATION NUN HAFUKHA
+-05F3..05F4    ; Po #   [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
+-0609..060A    ; Po #   [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN
+-060C..060D    ; Po #   [2] ARABIC COMMA..ARABIC DATE SEPARATOR
+-061B          ; Po #       ARABIC SEMICOLON
+-061E..061F    ; Po #   [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK
+-066A..066D    ; Po #   [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
+-06D4          ; Po #       ARABIC FULL STOP
+-0700..070D    ; Po #  [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS
+-07F7..07F9    ; Po #   [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK
+-0830..083E    ; Po #  [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU
+-085E          ; Po #       MANDAIC PUNCTUATION
+-0964..0965    ; Po #   [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
+-0970          ; Po #       DEVANAGARI ABBREVIATION SIGN
+-09FD          ; Po #       BENGALI ABBREVIATION SIGN
+-0A76          ; Po #       GURMUKHI ABBREVIATION SIGN
+-0AF0          ; Po #       GUJARATI ABBREVIATION SIGN
+-0C77          ; Po #       TELUGU SIGN SIDDHAM
+-0C84          ; Po #       KANNADA SIGN SIDDHAM
+-0DF4          ; Po #       SINHALA PUNCTUATION KUNDDALIYA
+-0E4F          ; Po #       THAI CHARACTER FONGMAN
+-0E5A..0E5B    ; Po #   [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
+-0F04..0F12    ; Po #  [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD
+-0F14          ; Po #       TIBETAN MARK GTER TSHEG
+-0F85          ; Po #       TIBETAN MARK PALUTA
+-0FD0..0FD4    ; Po #   [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
+-0FD9..0FDA    ; Po #   [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS
+-104A..104F    ; Po #   [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE
+-10FB          ; Po #       GEORGIAN PARAGRAPH SEPARATOR
+-1360..1368    ; Po #   [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR
+-166E          ; Po #       CANADIAN SYLLABICS FULL STOP
+-16EB..16ED    ; Po #   [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
+-1735..1736    ; Po #   [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
+-17D4..17D6    ; Po #   [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH
+-17D8..17DA    ; Po #   [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT
+-1800..1805    ; Po #   [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS
+-1807..180A    ; Po #   [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU
+-1944..1945    ; Po #   [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
+-1A1E..1A1F    ; Po #   [2] BUGINESE PALLAWA..BUGINESE END OF SECTION
+-1AA0..1AA6    ; Po #   [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA
+-1AA8..1AAD    ; Po #   [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
+-1B5A..1B60    ; Po #   [7] BALINESE PANTI..BALINESE PAMENENG
+-1BFC..1BFF    ; Po #   [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT
+-1C3B..1C3F    ; Po #   [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK
+-1C7E..1C7F    ; Po #   [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
+-1CC0..1CC7    ; Po #   [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA
+-1CD3          ; Po #       VEDIC SIGN NIHSHVASA
+-2016..2017    ; Po #   [2] DOUBLE VERTICAL LINE..DOUBLE LOW LINE
+-2020..2027    ; Po #   [8] DAGGER..HYPHENATION POINT
+-2030..2038    ; Po #   [9] PER MILLE SIGN..CARET
+-203B..203E    ; Po #   [4] REFERENCE MARK..OVERLINE
+-2041..2043    ; Po #   [3] CARET INSERTION POINT..HYPHEN BULLET
+-2047..2051    ; Po #  [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY
+-2053          ; Po #       SWUNG DASH
+-2055..205E    ; Po #  [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS
+-2CF9..2CFC    ; Po #   [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER
+-2CFE..2CFF    ; Po #   [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER
+-2D70          ; Po #       TIFINAGH SEPARATOR MARK
+-2E00..2E01    ; Po #   [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
+-2E06..2E08    ; Po #   [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
+-2E0B          ; Po #       RAISED SQUARE
+-2E0E..2E16    ; Po #   [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
+-2E18..2E19    ; Po #   [2] INVERTED INTERROBANG..PALM BRANCH
+-2E1B          ; Po #       TILDE WITH RING ABOVE
+-2E1E..2E1F    ; Po #   [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW
+-2E2A..2E2E    ; Po #   [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK
+-2E30..2E39    ; Po #  [10] RING POINT..TOP HALF SECTION SIGN
+-2E3C..2E3F    ; Po #   [4] STENOGRAPHIC FULL STOP..CAPITULUM
+-2E41          ; Po #       REVERSED COMMA
+-2E43..2E4F    ; Po #  [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
+-2E52          ; Po #       TIRONIAN SIGN CAPITAL ET
+-3001..3003    ; Po #   [3] IDEOGRAPHIC COMMA..DITTO MARK
+-303D          ; Po #       PART ALTERNATION MARK
+-30FB          ; Po #       KATAKANA MIDDLE DOT
+-A4FE..A4FF    ; Po #   [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
+-A60D..A60F    ; Po #   [3] VAI COMMA..VAI QUESTION MARK
+-A673          ; Po #       SLAVONIC ASTERISK
+-A67E          ; Po #       CYRILLIC KAVYKA
+-A6F2..A6F7    ; Po #   [6] BAMUM NJAEMLI..BAMUM QUESTION MARK
+-A874..A877    ; Po #   [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD
+-A8CE..A8CF    ; Po #   [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
+-A8F8..A8FA    ; Po #   [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
+-A8FC          ; Po #       DEVANAGARI SIGN SIDDHAM
+-A92E..A92F    ; Po #   [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA
+-A95F          ; Po #       REJANG SECTION MARK
+-A9C1..A9CD    ; Po #  [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH
+-A9DE..A9DF    ; Po #   [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN
+-AA5C..AA5F    ; Po #   [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA
+-AADE..AADF    ; Po #   [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI
+-AAF0..AAF1    ; Po #   [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM
+-ABEB          ; Po #       MEETEI MAYEK CHEIKHEI
+-FE10..FE16    ; Po #   [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
+-FE19          ; Po #       PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
+-FE30          ; Po #       PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+-FE45..FE46    ; Po #   [2] SESAME DOT..WHITE SESAME DOT
+-FE49..FE4C    ; Po #   [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
+-FE50..FE52    ; Po #   [3] SMALL COMMA..SMALL FULL STOP
+-FE54..FE57    ; Po #   [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
+-FE5F..FE61    ; Po #   [3] SMALL NUMBER SIGN..SMALL ASTERISK
+-FE68          ; Po #       SMALL REVERSE SOLIDUS
+-FE6A..FE6B    ; Po #   [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
+-FF01..FF03    ; Po #   [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN
+-FF05..FF07    ; Po #   [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE
+-FF0A          ; Po #       FULLWIDTH ASTERISK
+-FF0C          ; Po #       FULLWIDTH COMMA
+-FF0E..FF0F    ; Po #   [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS
+-FF1A..FF1B    ; Po #   [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
+-FF1F..FF20    ; Po #   [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT
+-FF3C          ; Po #       FULLWIDTH REVERSE SOLIDUS
+-FF61          ; Po #       HALFWIDTH IDEOGRAPHIC FULL STOP
+-FF64..FF65    ; Po #   [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
+-10100..10102  ; Po #   [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK
+-1039F         ; Po #       UGARITIC WORD DIVIDER
+-103D0         ; Po #       OLD PERSIAN WORD DIVIDER
+-1056F         ; Po #       CAUCASIAN ALBANIAN CITATION MARK
+-10857         ; Po #       IMPERIAL ARAMAIC SECTION SIGN
+-1091F         ; Po #       PHOENICIAN WORD SEPARATOR
+-1093F         ; Po #       LYDIAN TRIANGULAR MARK
+-10A50..10A58  ; Po #   [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES
+-10A7F         ; Po #       OLD SOUTH ARABIAN NUMERIC INDICATOR
+-10AF0..10AF6  ; Po #   [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER
+-10B39..10B3F  ; Po #   [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION
+-10B99..10B9C  ; Po #   [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT
+-10F55..10F59  ; Po #   [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+-11047..1104D  ; Po #   [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS
+-110BB..110BC  ; Po #   [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN
+-110BE..110C1  ; Po #   [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
+-11140..11143  ; Po #   [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
+-11174..11175  ; Po #   [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK
+-111C5..111C8  ; Po #   [4] SHARADA DANDA..SHARADA SEPARATOR
+-111CD         ; Po #       SHARADA SUTRA MARK
+-111DB         ; Po #       SHARADA SIGN SIDDHAM
+-111DD..111DF  ; Po #   [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2
+-11238..1123D  ; Po #   [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN
+-112A9         ; Po #       MULTANI SECTION MARK
+-1144B..1144F  ; Po #   [5] NEWA DANDA..NEWA ABBREVIATION SIGN
+-1145A..1145B  ; Po #   [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK
+-1145D         ; Po #       NEWA INSERTION SIGN
+-114C6         ; Po #       TIRHUTA ABBREVIATION SIGN
+-115C1..115D7  ; Po #  [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
+-11641..11643  ; Po #   [3] MODI DANDA..MODI ABBREVIATION SIGN
+-11660..1166C  ; Po #  [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
+-1173C..1173E  ; Po #   [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
+-1183B         ; Po #       DOGRA ABBREVIATION SIGN
+-11944..11946  ; Po #   [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
+-119E2         ; Po #       NANDINAGARI SIGN SIDDHAM
+-11A3F..11A46  ; Po #   [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK
+-11A9A..11A9C  ; Po #   [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
+-11A9E..11AA2  ; Po #   [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2
+-11C41..11C45  ; Po #   [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2
+-11C70..11C71  ; Po #   [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD
+-11EF7..11EF8  ; Po #   [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+-11FFF         ; Po #       TAMIL PUNCTUATION END OF TEXT
+-12470..12474  ; Po #   [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
+-16A6E..16A6F  ; Po #   [2] MRO DANDA..MRO DOUBLE DANDA
+-16AF5         ; Po #       BASSA VAH FULL STOP
+-16B37..16B3B  ; Po #   [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM
+-16B44         ; Po #       PAHAWH HMONG SIGN XAUS
+-16E97..16E9A  ; Po #   [4] MEDEFAIDRIN COMMA..MEDEFAIDRIN EXCLAMATION OH
+-16FE2         ; Po #       OLD CHINESE HOOK MARK
+-1BC9F         ; Po #       DUPLOYAN PUNCTUATION CHINOOK FULL STOP
+-1DA87..1DA8B  ; Po #   [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS
+-1E95E..1E95F  ; Po #   [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK
+-
+-# Total code points: 593
+-
+-# ================================================
+-
+-# General_Category=Math_Symbol
+-
+-002B          ; Sm #       PLUS SIGN
+-003C..003E    ; Sm #   [3] LESS-THAN SIGN..GREATER-THAN SIGN
+-007C          ; Sm #       VERTICAL LINE
+-007E          ; Sm #       TILDE
+-00AC          ; Sm #       NOT SIGN
+-00B1          ; Sm #       PLUS-MINUS SIGN
+-00D7          ; Sm #       MULTIPLICATION SIGN
+-00F7          ; Sm #       DIVISION SIGN
+-03F6          ; Sm #       GREEK REVERSED LUNATE EPSILON SYMBOL
+-0606..0608    ; Sm #   [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
+-2044          ; Sm #       FRACTION SLASH
+-2052          ; Sm #       COMMERCIAL MINUS SIGN
+-207A..207C    ; Sm #   [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
+-208A..208C    ; Sm #   [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
+-2118          ; Sm #       SCRIPT CAPITAL P
+-2140..2144    ; Sm #   [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
+-214B          ; Sm #       TURNED AMPERSAND
+-2190..2194    ; Sm #   [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+-219A..219B    ; Sm #   [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+-21A0          ; Sm #       RIGHTWARDS TWO HEADED ARROW
+-21A3          ; Sm #       RIGHTWARDS ARROW WITH TAIL
+-21A6          ; Sm #       RIGHTWARDS ARROW FROM BAR
+-21AE          ; Sm #       LEFT RIGHT ARROW WITH STROKE
+-21CE..21CF    ; Sm #   [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+-21D2          ; Sm #       RIGHTWARDS DOUBLE ARROW
+-21D4          ; Sm #       LEFT RIGHT DOUBLE ARROW
+-21F4..22FF    ; Sm # [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP
+-2320..2321    ; Sm #   [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+-237C          ; Sm #       RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+-239B..23B3    ; Sm #  [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+-23DC..23E1    ; Sm #   [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
+-25B7          ; Sm #       WHITE RIGHT-POINTING TRIANGLE
+-25C1          ; Sm #       WHITE LEFT-POINTING TRIANGLE
+-25F8..25FF    ; Sm #   [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
+-266F          ; Sm #       MUSIC SHARP SIGN
+-27C0..27C4    ; Sm #   [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+-27C7..27E5    ; Sm #  [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK
+-27F0..27FF    ; Sm #  [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+-2900..2982    ; Sm # [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON
+-2999..29D7    ; Sm #  [63] DOTTED FENCE..BLACK HOURGLASS
+-29DC..29FB    ; Sm #  [32] INCOMPLETE INFINITY..TRIPLE PLUS
+-29FE..2AFF    ; Sm # [258] TINY..N-ARY WHITE VERTICAL BAR
+-2B30..2B44    ; Sm #  [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET
+-2B47..2B4C    ; Sm #   [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+-FB29          ; Sm #       HEBREW LETTER ALTERNATIVE PLUS SIGN
+-FE62          ; Sm #       SMALL PLUS SIGN
+-FE64..FE66    ; Sm #   [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+-FF0B          ; Sm #       FULLWIDTH PLUS SIGN
+-FF1C..FF1E    ; Sm #   [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+-FF5C          ; Sm #       FULLWIDTH VERTICAL LINE
+-FF5E          ; Sm #       FULLWIDTH TILDE
+-FFE2          ; Sm #       FULLWIDTH NOT SIGN
+-FFE9..FFEC    ; Sm #   [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+-1D6C1         ; Sm #       MATHEMATICAL BOLD NABLA
+-1D6DB         ; Sm #       MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+-1D6FB         ; Sm #       MATHEMATICAL ITALIC NABLA
+-1D715         ; Sm #       MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+-1D735         ; Sm #       MATHEMATICAL BOLD ITALIC NABLA
+-1D74F         ; Sm #       MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+-1D76F         ; Sm #       MATHEMATICAL SANS-SERIF BOLD NABLA
+-1D789         ; Sm #       MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+-1D7A9         ; Sm #       MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+-1D7C3         ; Sm #       MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+-1EEF0..1EEF1  ; Sm #   [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
+-
+-# Total code points: 948
+-
+-# ================================================
+-
+-# General_Category=Currency_Symbol
+-
+-0024          ; Sc #       DOLLAR SIGN
+-00A2..00A5    ; Sc #   [4] CENT SIGN..YEN SIGN
+-058F          ; Sc #       ARMENIAN DRAM SIGN
+-060B          ; Sc #       AFGHANI SIGN
+-07FE..07FF    ; Sc #   [2] NKO DOROME SIGN..NKO TAMAN SIGN
+-09F2..09F3    ; Sc #   [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN
+-09FB          ; Sc #       BENGALI GANDA MARK
+-0AF1          ; Sc #       GUJARATI RUPEE SIGN
+-0BF9          ; Sc #       TAMIL RUPEE SIGN
+-0E3F          ; Sc #       THAI CURRENCY SYMBOL BAHT
+-17DB          ; Sc #       KHMER CURRENCY SYMBOL RIEL
+-20A0..20BF    ; Sc #  [32] EURO-CURRENCY SIGN..BITCOIN SIGN
+-A838          ; Sc #       NORTH INDIC RUPEE MARK
+-FDFC          ; Sc #       RIAL SIGN
+-FE69          ; Sc #       SMALL DOLLAR SIGN
+-FF04          ; Sc #       FULLWIDTH DOLLAR SIGN
+-FFE0..FFE1    ; Sc #   [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
+-FFE5..FFE6    ; Sc #   [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
+-11FDD..11FE0  ; Sc #   [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN
+-1E2FF         ; Sc #       WANCHO NGUN SIGN
+-1ECB0         ; Sc #       INDIC SIYAQ RUPEE MARK
+-
+-# Total code points: 62
+-
+-# ================================================
+-
+-# General_Category=Modifier_Symbol
+-
+-005E          ; Sk #       CIRCUMFLEX ACCENT
+-0060          ; Sk #       GRAVE ACCENT
+-00A8          ; Sk #       DIAERESIS
+-00AF          ; Sk #       MACRON
+-00B4          ; Sk #       ACUTE ACCENT
+-00B8          ; Sk #       CEDILLA
+-02C2..02C5    ; Sk #   [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
+-02D2..02DF    ; Sk #  [14] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER CROSS ACCENT
+-02E5..02EB    ; Sk #   [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
+-02ED          ; Sk #       MODIFIER LETTER UNASPIRATED
+-02EF..02FF    ; Sk #  [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
+-0375          ; Sk #       GREEK LOWER NUMERAL SIGN
+-0384..0385    ; Sk #   [2] GREEK TONOS..GREEK DIALYTIKA TONOS
+-1FBD          ; Sk #       GREEK KORONIS
+-1FBF..1FC1    ; Sk #   [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
+-1FCD..1FCF    ; Sk #   [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
+-1FDD..1FDF    ; Sk #   [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
+-1FED..1FEF    ; Sk #   [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
+-1FFD..1FFE    ; Sk #   [2] GREEK OXIA..GREEK DASIA
+-309B..309C    ; Sk #   [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+-A700..A716    ; Sk #  [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
+-A720..A721    ; Sk #   [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
+-A789..A78A    ; Sk #   [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
+-AB5B          ; Sk #       MODIFIER BREVE WITH INVERTED BREVE
+-AB6A..AB6B    ; Sk #   [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
+-FBB2..FBC1    ; Sk #  [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
+-FF3E          ; Sk #       FULLWIDTH CIRCUMFLEX ACCENT
+-FF40          ; Sk #       FULLWIDTH GRAVE ACCENT
+-FFE3          ; Sk #       FULLWIDTH MACRON
+-1F3FB..1F3FF  ; Sk #   [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
+-
+-# Total code points: 123
+-
+-# ================================================
+-
+-# General_Category=Other_Symbol
+-
+-00A6          ; So #       BROKEN BAR
+-00A9          ; So #       COPYRIGHT SIGN
+-00AE          ; So #       REGISTERED SIGN
+-00B0          ; So #       DEGREE SIGN
+-0482          ; So #       CYRILLIC THOUSANDS SIGN
+-058D..058E    ; So #   [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN
+-060E..060F    ; So #   [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
+-06DE          ; So #       ARABIC START OF RUB EL HIZB
+-06E9          ; So #       ARABIC PLACE OF SAJDAH
+-06FD..06FE    ; So #   [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
+-07F6          ; So #       NKO SYMBOL OO DENNEN
+-09FA          ; So #       BENGALI ISSHAR
+-0B70          ; So #       ORIYA ISSHAR
+-0BF3..0BF8    ; So #   [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN
+-0BFA          ; So #       TAMIL NUMBER SIGN
+-0C7F          ; So #       TELUGU SIGN TUUMU
+-0D4F          ; So #       MALAYALAM SIGN PARA
+-0D79          ; So #       MALAYALAM DATE MARK
+-0F01..0F03    ; So #   [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
+-0F13          ; So #       TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
+-0F15..0F17    ; So #   [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+-0F1A..0F1F    ; So #   [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
+-0F34          ; So #       TIBETAN MARK BSDUS RTAGS
+-0F36          ; So #       TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
+-0F38          ; So #       TIBETAN MARK CHE MGO
+-0FBE..0FC5    ; So #   [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
+-0FC7..0FCC    ; So #   [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
+-0FCE..0FCF    ; So #   [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM
+-0FD5..0FD8    ; So #   [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
+-109E..109F    ; So #   [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION
+-1390..1399    ; So #  [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT
+-166D          ; So #       CANADIAN SYLLABICS CHI SIGN
+-1940          ; So #       LIMBU SIGN LOO
+-19DE..19FF    ; So #  [34] NEW TAI LUE SIGN LAE..KHMER SYMBOL DAP-PRAM ROC
+-1B61..1B6A    ; So #  [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE
+-1B74..1B7C    ; So #   [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
+-2100..2101    ; So #   [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
+-2103..2106    ; So #   [4] DEGREE CELSIUS..CADA UNA
+-2108..2109    ; So #   [2] SCRUPLE..DEGREE FAHRENHEIT
+-2114          ; So #       L B BAR SYMBOL
+-2116..2117    ; So #   [2] NUMERO SIGN..SOUND RECORDING COPYRIGHT
+-211E..2123    ; So #   [6] PRESCRIPTION TAKE..VERSICLE
+-2125          ; So #       OUNCE SIGN
+-2127          ; So #       INVERTED OHM SIGN
+-2129          ; So #       TURNED GREEK SMALL LETTER IOTA
+-212E          ; So #       ESTIMATED SYMBOL
+-213A..213B    ; So #   [2] ROTATED CAPITAL Q..FACSIMILE SIGN
+-214A          ; So #       PROPERTY LINE
+-214C..214D    ; So #   [2] PER SIGN..AKTIESELSKAB
+-214F          ; So #       SYMBOL FOR SAMARITAN SOURCE
+-218A..218B    ; So #   [2] TURNED DIGIT TWO..TURNED DIGIT THREE
+-2195..2199    ; So #   [5] UP DOWN ARROW..SOUTH WEST ARROW
+-219C..219F    ; So #   [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+-21A1..21A2    ; So #   [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+-21A4..21A5    ; So #   [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+-21A7..21AD    ; So #   [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
+-21AF..21CD    ; So #  [31] DOWNWARDS ZIGZAG ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
+-21D0..21D1    ; So #   [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+-21D3          ; So #       DOWNWARDS DOUBLE ARROW
+-21D5..21F3    ; So #  [31] UP DOWN DOUBLE ARROW..UP DOWN WHITE ARROW
+-2300..2307    ; So #   [8] DIAMETER SIGN..WAVY LINE
+-230C..231F    ; So #  [20] BOTTOM RIGHT CROP..BOTTOM RIGHT CORNER
+-2322..2328    ; So #   [7] FROWN..KEYBOARD
+-232B..237B    ; So #  [81] ERASE TO THE LEFT..NOT CHECK MARK
+-237D..239A    ; So #  [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
+-23B4..23DB    ; So #  [40] TOP SQUARE BRACKET..FUSE
+-23E2..2426    ; So #  [69] WHITE TRAPEZIUM..SYMBOL FOR SUBSTITUTE FORM TWO
+-2440..244A    ; So #  [11] OCR HOOK..OCR DOUBLE BACKSLASH
+-249C..24E9    ; So #  [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
+-2500..25B6    ; So # [183] BOX DRAWINGS LIGHT HORIZONTAL..BLACK RIGHT-POINTING TRIANGLE
+-25B8..25C0    ; So #   [9] BLACK RIGHT-POINTING SMALL TRIANGLE..BLACK LEFT-POINTING TRIANGLE
+-25C2..25F7    ; So #  [54] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
+-2600..266E    ; So # [111] BLACK SUN WITH RAYS..MUSIC NATURAL SIGN
+-2670..2767    ; So # [248] WEST SYRIAC CROSS..ROTATED FLORAL HEART BULLET
+-2794..27BF    ; So #  [44] HEAVY WIDE-HEADED RIGHTWARDS ARROW..DOUBLE CURLY LOOP
+-2800..28FF    ; So # [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
+-2B00..2B2F    ; So #  [48] NORTH EAST WHITE ARROW..WHITE VERTICAL ELLIPSE
+-2B45..2B46    ; So #   [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW
+-2B4D..2B73    ; So #  [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
+-2B76..2B95    ; So #  [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
+-2B97..2BFF    ; So # [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL
+-2CE5..2CEA    ; So #   [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
+-2E50..2E51    ; So #   [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
+-2E80..2E99    ; So #  [26] CJK RADICAL REPEAT..CJK RADICAL RAP
+-2E9B..2EF3    ; So #  [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
+-2F00..2FD5    ; So # [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
+-2FF0..2FFB    ; So #  [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
+-3004          ; So #       JAPANESE INDUSTRIAL STANDARD SYMBOL
+-3012..3013    ; So #   [2] POSTAL MARK..GETA MARK
+-3020          ; So #       POSTAL MARK FACE
+-3036..3037    ; So #   [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
+-303E..303F    ; So #   [2] IDEOGRAPHIC VARIATION INDICATOR..IDEOGRAPHIC HALF FILL SPACE
+-3190..3191    ; So #   [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
+-3196..319F    ; So #  [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
+-31C0..31E3    ; So #  [36] CJK STROKE T..CJK STROKE Q
+-3200..321E    ; So #  [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
+-322A..3247    ; So #  [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO
+-3250          ; So #       PARTNERSHIP SIGN
+-3260..327F    ; So #  [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL
+-328A..32B0    ; So #  [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
+-32C0..33FF    ; So # [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL
+-4DC0..4DFF    ; So #  [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
+-A490..A4C6    ; So #  [55] YI RADICAL QOT..YI RADICAL KE
+-A828..A82B    ; So #   [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
+-A836..A837    ; So #   [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
+-A839          ; So #       NORTH INDIC QUANTITY MARK
+-AA77..AA79    ; So #   [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO
+-FDFD          ; So #       ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
+-FFE4          ; So #       FULLWIDTH BROKEN BAR
+-FFE8          ; So #       HALFWIDTH FORMS LIGHT VERTICAL
+-FFED..FFEE    ; So #   [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
+-FFFC..FFFD    ; So #   [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
+-10137..1013F  ; So #   [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
+-10179..10189  ; So #  [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
+-1018C..1018E  ; So #   [3] GREEK SINUSOID SIGN..NOMISMA SIGN
+-10190..1019C  ; So #  [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL
+-101A0         ; So #       GREEK SYMBOL TAU RHO
+-101D0..101FC  ; So #  [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
+-10877..10878  ; So #   [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON
+-10AC8         ; So #       MANICHAEAN SIGN UD
+-1173F         ; So #       AHOM SYMBOL VI
+-11FD5..11FDC  ; So #   [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI
+-11FE1..11FF1  ; So #  [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA
+-16B3C..16B3F  ; So #   [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB
+-16B45         ; So #       PAHAWH HMONG SIGN CIM TSOV ROG
+-1BC9C         ; So #       DUPLOYAN SIGN O WITH CROSS
+-1D000..1D0F5  ; So # [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
+-1D100..1D126  ; So #  [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
+-1D129..1D164  ; So #  [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+-1D16A..1D16C  ; So #   [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3
+-1D183..1D184  ; So #   [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
+-1D18C..1D1A9  ; So #  [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
+-1D1AE..1D1E8  ; So #  [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN
+-1D200..1D241  ; So #  [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
+-1D245         ; So #       GREEK MUSICAL LEIMMA
+-1D300..1D356  ; So #  [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
+-1D800..1D9FF  ; So # [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD
+-1DA37..1DA3A  ; So #   [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE
+-1DA6D..1DA74  ; So #   [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING
+-1DA76..1DA83  ; So #  [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH
+-1DA85..1DA86  ; So #   [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS
+-1E14F         ; So #       NYIAKENG PUACHUE HMONG CIRCLED CA
+-1ECAC         ; So #       INDIC SIYAQ PLACEHOLDER
+-1ED2E         ; So #       OTTOMAN SIYAQ MARRATAN
+-1F000..1F02B  ; So #  [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK
+-1F030..1F093  ; So # [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
+-1F0A0..1F0AE  ; So #  [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES
+-1F0B1..1F0BF  ; So #  [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER
+-1F0C1..1F0CF  ; So #  [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER
+-1F0D1..1F0F5  ; So #  [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
+-1F10D..1F1AD  ; So # [161] CIRCLED ZERO WITH SLASH..MASK WORK SYMBOL
+-1F1E6..1F202  ; So #  [29] REGIONAL INDICATOR SYMBOL LETTER A..SQUARED KATAKANA SA
+-1F210..1F23B  ; So #  [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
+-1F240..1F248  ; So #   [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+-1F250..1F251  ; So #   [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
+-1F260..1F265  ; So #   [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
+-1F300..1F3FA  ; So # [251] CYCLONE..AMPHORA
+-1F400..1F6D7  ; So # [728] RAT..ELEVATOR
+-1F6E0..1F6EC  ; So #  [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
+-1F6F0..1F6FC  ; So #  [13] SATELLITE..ROLLER SKATE
+-1F700..1F773  ; So # [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
+-1F780..1F7D8  ; So #  [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE
+-1F7E0..1F7EB  ; So #  [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
+-1F800..1F80B  ; So #  [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
+-1F810..1F847  ; So #  [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW
+-1F850..1F859  ; So #  [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
+-1F860..1F887  ; So #  [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
+-1F890..1F8AD  ; So #  [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
+-1F8B0..1F8B1  ; So #   [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
+-1F900..1F978  ; So # [121] CIRCLED CROSS FORMEE WITH FOUR DOTS..DISGUISED FACE
+-1F97A..1F9CB  ; So #  [82] FACE WITH PLEADING EYES..BUBBLE TEA
+-1F9CD..1FA53  ; So # [135] STANDING PERSON..BLACK CHESS KNIGHT-BISHOP
+-1FA60..1FA6D  ; So #  [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
+-1FA70..1FA74  ; So #   [5] BALLET SHOES..THONG SANDAL
+-1FA78..1FA7A  ; So #   [3] DROP OF BLOOD..STETHOSCOPE
+-1FA80..1FA86  ; So #   [7] YO-YO..NESTING DOLLS
+-1FA90..1FAA8  ; So #  [25] RINGED PLANET..ROCK
+-1FAB0..1FAB6  ; So #   [7] FLY..FEATHER
+-1FAC0..1FAC2  ; So #   [3] ANATOMICAL HEART..PEOPLE HUGGING
+-1FAD0..1FAD6  ; So #   [7] BLUEBERRIES..TEAPOT
+-1FB00..1FB92  ; So # [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+-1FB94..1FBCA  ; So #  [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
+-
+-# Total code points: 6431
+-
+-# ================================================
+-
+-# General_Category=Initial_Punctuation
+-
+-00AB          ; Pi #       LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+-2018          ; Pi #       LEFT SINGLE QUOTATION MARK
+-201B..201C    ; Pi #   [2] SINGLE HIGH-REVERSED-9 QUOTATION MARK..LEFT DOUBLE QUOTATION MARK
+-201F          ; Pi #       DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+-2039          ; Pi #       SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+-2E02          ; Pi #       LEFT SUBSTITUTION BRACKET
+-2E04          ; Pi #       LEFT DOTTED SUBSTITUTION BRACKET
+-2E09          ; Pi #       LEFT TRANSPOSITION BRACKET
+-2E0C          ; Pi #       LEFT RAISED OMISSION BRACKET
+-2E1C          ; Pi #       LEFT LOW PARAPHRASE BRACKET
+-2E20          ; Pi #       LEFT VERTICAL BAR WITH QUILL
+-
+-# Total code points: 12
+-
+-# ================================================
+-
+-# General_Category=Final_Punctuation
+-
+-00BB          ; Pf #       RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+-2019          ; Pf #       RIGHT SINGLE QUOTATION MARK
+-201D          ; Pf #       RIGHT DOUBLE QUOTATION MARK
+-203A          ; Pf #       SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+-2E03          ; Pf #       RIGHT SUBSTITUTION BRACKET
+-2E05          ; Pf #       RIGHT DOTTED SUBSTITUTION BRACKET
+-2E0A          ; Pf #       RIGHT TRANSPOSITION BRACKET
+-2E0D          ; Pf #       RIGHT RAISED OMISSION BRACKET
+-2E1D          ; Pf #       RIGHT LOW PARAPHRASE BRACKET
+-2E21          ; Pf #       RIGHT VERTICAL BAR WITH QUILL
+-
+-# Total code points: 10
+-
+-# EOF
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 535e91e8..d06659e5 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -515,7 +515,7 @@ clean-local:
+ 	rm -rf *.dSYM
+ endif
+ CLEANFILES  = *~ *.lo *.o *.i t_*.log t_*.trs *.exe test-fc.pl test-upr.pl
+-CLEANFILES  += *.gcno *.gcda
++CLEANFILES  += *.gcno *.gcda DerivedGeneralCategory.txt CaseFolding.txt
+ if ENABLE_GCOV
+ CLEANFILES  += *.gcov gcov.log
+ endif
+diff --git a/tests/test_towfc_s.c b/tests/test_towfc_s.c
+index a7ac808f..0a384355 100644
+--- a/tests/test_towfc_s.c
++++ b/tests/test_towfc_s.c
+@@ -3,7 +3,7 @@
+  * File 'towfc_s.c'
+  * Lines executed:98.28% of 174
+  *
+- * Full case-folding regarding latest Unicode (10.0) CaseFolding.txt
++ * Full case-folding regarding latest Unicode (14.0) CaseFolding.txt
+  * Some F characters fold to multiples.
+  *------------------------------------------------------------------
+  */
+@@ -67,7 +67,7 @@ int test_towfc_s(void) {
+     if (!f) {
+         printf("downloading %s ...", CFOLD);
+         fflush(stdout);
+-        system("wget https://www.unicode.org/Public/13.0.0/ucd/CaseFolding.txt")
++        system("wget https://www.unicode.org/Public/14.0.0/ucd/CaseFolding.txt")
+             ? printf(" done\n")
+             : printf(" failed\n");
+         f = fopen(CFOLD, "r");
+@@ -195,8 +195,7 @@ int test_towfc_s(void) {
+                             WEXPSTR(result, L"i");
+                         }
+                     }
+-                } else if (*status ==
+-                           'S') { /* ignore as we handle the other F case */
++                } else if (*status == 'S') { /* ignore as we handle the other F case */
+                     ;
+                 } else { /* the simple 1:1 C case */
+ #if SIZEOF_WCHAR_T > 2
+@@ -207,15 +206,13 @@ int test_towfc_s(void) {
+                     {
+                         errs++;
+                         printf("%s %u  Error: iswfc(U+%04X) => %d (towfc=>%d) "
+-                               "\"%s\" status=%s %s\n",
+-                               __FUNCTION__, __LINE__, wc, n, len, mapping,
+-                               status, name);
++                               "\"%s\" status=%s %s\n", __FUNCTION__, __LINE__, wc,
++                               n, len, mapping, status, name);
+                     } else if (cp != m0) {
+                         errs++;
+                         printf("%s %u  Error: towfc(U+%04X) => %X != %X \"%s\" "
+-                               "status=%s %s\n",
+-                               __FUNCTION__, __LINE__, wc, cp, m0, mapping, status,
+-                               name);
++                               "status=%s %s\n", __FUNCTION__, __LINE__, wc, cp, m0,
++                               mapping, status, name);
+                     }
+                 }
+             }
+diff --git a/tests/test_towlower.c b/tests/test_towlower.c
+index e4a496d4..a3e17fd6 100644
+--- a/tests/test_towlower.c
++++ b/tests/test_towlower.c
+@@ -38,7 +38,7 @@ int test_towlower(void) {
+     if (!f) {
+         printf("downloading %s ...", CFOLD);
+         fflush(stdout);
+-        system("wget https://www.unicode.org/Public/13.0.0/ucd/CaseFolding.txt")
++        system("wget https://www.unicode.org/Public/14.0.0/ucd/CaseFolding.txt")
+             ? printf(" done\n")
+             : printf(" failed\n");
+         printf(" done\n");
+diff --git a/tests/test_towupper.c b/tests/test_towupper.c
+index b47be8e4..75b3a797 100644
+--- a/tests/test_towupper.c
++++ b/tests/test_towupper.c
+@@ -33,7 +33,7 @@ int test_towupper(void);
+  */
+ /*# define PERL "perl" */
+ /*# define PERL "cperl5.30.0"*/
+-#define PERL "perl5.34.0"
++#define PERL "perl5.36.0"
+ #endif
+ #define TESTPL "test-upr.pl"
+ 
+@@ -154,7 +154,7 @@ int test_towupper(void) {
+     if (!f) {
+         printf("downloading %s ...", GENCAT);
+         fflush(stdout);
+-        if (system("wget https://www.unicode.org/Public/13.0.0/ucd/extracted/"
++        if (system("wget https://www.unicode.org/Public/14.0.0/ucd/extracted/"
+                    "DerivedGeneralCategory.txt"))
+             printf(" done\n");
+         else
+@@ -166,7 +166,7 @@ int test_towupper(void) {
+     if (!cf) {
+         printf("downloading %s ...", CFOLD);
+         fflush(stdout);
+-        if (system("wget https://www.unicode.org/Public/13.0.0/ucd/CaseFolding.txt"))
++        if (system("wget https://www.unicode.org/Public/14.0.0/ucd/CaseFolding.txt"))
+             printf(" done\n");
+         else
+             printf(" failed\n");
+diff --git a/tests/test_wcsfc_s.c b/tests/test_wcsfc_s.c
+index 49e429d0..bd846a50 100644
+--- a/tests/test_wcsfc_s.c
++++ b/tests/test_wcsfc_s.c
+@@ -24,7 +24,7 @@ int test_wcsfc_s(void);
+ #ifndef PERL
+ /*# define PERL "perl"*/
+ /*# define PERL "cperl5.30.0"*/
+-#define PERL "perl5.34.0"
++#define PERL "perl5.36.0"
+ #endif
+ #define TESTPL "test-fc.pl"
+ 
+diff --git a/tests/test_wcsnorm_s.c b/tests/test_wcsnorm_s.c
+index 4219ae1c..1b2a66e2 100644
+--- a/tests/test_wcsnorm_s.c
++++ b/tests/test_wcsnorm_s.c
+@@ -29,7 +29,7 @@ int test_wcsnorm_s(void);
+ #ifndef PERL
+ /*# define PERL "perl" */
+ /*# define PERL "cperl5.30.0" */
+-#define PERL "perl5.34.0"
++#define PERL "perl5.36.0"
+ #endif
+ #define TESTPL "test-norm.pl"
+ 
diff --git a/meta-oe/recipes-core/safec/safec/0069-fix-qsort-stack-addresses-detected-by-gcc-12.patch b/meta-oe/recipes-core/safec/safec/0069-fix-qsort-stack-addresses-detected-by-gcc-12.patch
new file mode 100644
index 000000000..473d6b0c1
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0069-fix-qsort-stack-addresses-detected-by-gcc-12.patch
@@ -0,0 +1,41 @@ 
+From 61929b556f8e883ef377e274cbfdf82c987d1d8a Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Fri, 28 Jan 2022 19:33:51 +0100
+Subject: [PATCH] fix qsort stack addresses, detected by gcc-12
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Fixes GH #110, by Tomasz Kłoczko (@kloczek)
+---
+ src/misc/qsort_s.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/src/misc/qsort_s.c b/src/misc/qsort_s.c
+index 5d1fd15f..e2d1cbd1 100644
+--- a/src/misc/qsort_s.c
++++ b/src/misc/qsort_s.c
+@@ -126,6 +126,7 @@ typedef unsigned long uint64_t;
+  */
+ 
+ typedef int (*cmpfun)(const void *, const void *, void *);
++static unsigned char tmp[256];
+ #ifdef HAVE___BUILTIN_CTZ
+ #define ntz(x) __builtin_ctz((x))
+ #else
+@@ -167,14 +168,11 @@ static inline int pntz(size_t p[2]) {
+ }
+ 
+ static void cycle(size_t width, unsigned char *ar[], int n) {
+-    unsigned char tmp[256];
+     size_t l;
+     int i;
+ 
+-    if (n < 2) {
++    if (n < 2)
+         return;
+-    }
+-
+     ar[n] = tmp;
+     while (width) {
+         l = sizeof(tmp) < width ? sizeof(tmp) : width;
diff --git a/meta-oe/recipes-core/safec/safec/0070-don-t-fail-some-tests-if-wget-failed.patch b/meta-oe/recipes-core/safec/safec/0070-don-t-fail-some-tests-if-wget-failed.patch
new file mode 100644
index 000000000..7902e2e60
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0070-don-t-fail-some-tests-if-wget-failed.patch
@@ -0,0 +1,97 @@ 
+From f8a61aa86b2bac5e1db374dd2d6cf1c8c9961d71 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sat, 29 Jan 2022 10:30:56 +0100
+Subject: [PATCH] don't fail some tests if wget failed
+
+Still better than shipping the UCD files.
+Fixes GH #112
+---
+ tests/test_towfc_s.c  | 13 ++++++++-----
+ tests/test_towlower.c | 12 ++++++++----
+ tests/test_towupper.c | 12 ++++++++++--
+ 3 files changed, 26 insertions(+), 11 deletions(-)
+
+diff --git a/tests/test_towfc_s.c b/tests/test_towfc_s.c
+index 0a384355..586d2367 100644
+--- a/tests/test_towfc_s.c
++++ b/tests/test_towfc_s.c
+@@ -67,13 +67,16 @@ int test_towfc_s(void) {
+     if (!f) {
+         printf("downloading %s ...", CFOLD);
+         fflush(stdout);
+-        system("wget https://www.unicode.org/Public/14.0.0/ucd/CaseFolding.txt")
+-            ? printf(" done\n")
+-            : printf(" failed\n");
++        if (system("wget https://www.unicode.org/Public/14.0.0/ucd/CaseFolding.txt"))
++            printf(" done\n");
++        else {
++            printf(" failed\n");
++            return 0;
++        }
+         f = fopen(CFOLD, "r");
++        if (!f)
++            return 0;
+     }
+-    if (!f)
+-        return 1;
+     while (!feof(f)) {
+         int l;
+         char *p = fgets(s, sizeof(s), f);
+diff --git a/tests/test_towlower.c b/tests/test_towlower.c
+index a3e17fd6..9ee9b42e 100644
+--- a/tests/test_towlower.c
++++ b/tests/test_towlower.c
+@@ -38,11 +38,15 @@ int test_towlower(void) {
+     if (!f) {
+         printf("downloading %s ...", CFOLD);
+         fflush(stdout);
+-        system("wget https://www.unicode.org/Public/14.0.0/ucd/CaseFolding.txt")
+-            ? printf(" done\n")
+-            : printf(" failed\n");
+-        printf(" done\n");
++        if (system("wget https://www.unicode.org/Public/14.0.0/ucd/CaseFolding.txt"))
++            printf(" done\n");
++        else {
++            printf(" failed\n");
++            return 0;
++        }
+         f = fopen(CFOLD, "r");
++        if (!f)
++            return 0;
+     }
+     while (!feof(f)) {
+         int l;
+diff --git a/tests/test_towupper.c b/tests/test_towupper.c
+index 75b3a797..4d588807 100644
+--- a/tests/test_towupper.c
++++ b/tests/test_towupper.c
+@@ -157,9 +157,13 @@ int test_towupper(void) {
+         if (system("wget https://www.unicode.org/Public/14.0.0/ucd/extracted/"
+                    "DerivedGeneralCategory.txt"))
+             printf(" done\n");
+-        else
++        else {
+             printf(" failed\n");
++            return 0;
++        }
+         f = fopen(GENCAT, "r");
++        if (!f)
++            return 0;
+     }
+ 
+     cf = fopen(CFOLD, "r");
+@@ -168,9 +172,13 @@ int test_towupper(void) {
+         fflush(stdout);
+         if (system("wget https://www.unicode.org/Public/14.0.0/ucd/CaseFolding.txt"))
+             printf(" done\n");
+-        else
++        else {
+             printf(" failed\n");
++            return 0;
++        }
+         cf = fopen(CFOLD, "r");
++        if (!cf)
++            return 0;
+     }
+ 
+     while (!feof(f)) {
diff --git a/meta-oe/recipes-core/safec/safec/0071-Release-3.7.patch b/meta-oe/recipes-core/safec/safec/0071-Release-3.7.patch
new file mode 100644
index 000000000..3efc369e6
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0071-Release-3.7.patch
@@ -0,0 +1,207 @@ 
+From 97f29ab88f46c81db2adab29188edbc873eee853 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Fri, 28 Jan 2022 16:16:17 +0100
+Subject: [PATCH] Release 3.7
+
+---
+ .appveyor.yml              |  2 +-
+ .github/workflows/main.yml | 26 ++++++++++++++++++++++++--
+ ChangeLog                  |  6 +++++-
+ Makefile.am                | 20 +++++++++-----------
+ configure.ac               |  3 +--
+ tests/test_getenv_s.c      |  2 +-
+ tests/test_stpncpy_s.c     |  2 ++
+ tests/test_vsnprintf_s.c   |  2 +-
+ 8 files changed, 44 insertions(+), 19 deletions(-)
+
+diff --git a/.appveyor.yml b/.appveyor.yml
+index 281e5934..c1f24254 100644
+--- a/.appveyor.yml
++++ b/.appveyor.yml
+@@ -1,4 +1,4 @@
+-version: 3.6.{build}
++version: 3.7.{build}
+ max_jobs: 4
+ environment:
+   matrix:
+diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
+index 559685cf..8933d64e 100644
+--- a/.github/workflows/main.yml
++++ b/.github/workflows/main.yml
+@@ -45,6 +45,18 @@ jobs:
+       run: |
+         sudo apt-get -y install doxygen wget perl
+         make distcheck
++    - if: matrix.CONF_ARGS == '' && startsWith(github.ref, 'refs/tags/')
++      name: Prep-Release
++      run: sha256sum safeclib-*.tar.* > dist.sha256
++    - if: matrix.CONF_ARGS == '' && startsWith(github.ref, 'refs/tags/')
++      name: Release
++      continue-on-error: true
++      uses: softprops/action-gh-release@v1
++      with:
++        body_path: dist.sha256
++        files: |
++          dist.sha256
++          safeclib-*.tar.*
+   macOS:
+     name: macOS
+     runs-on: macOS-latest
+@@ -85,6 +97,7 @@ jobs:
+           libtool
+           autoconf-wrapper
+           automake-wrapper
++          zip
+     - run: reg add "HKLM\Software\Microsoft\Windows\Windows Error Reporting" /f /v DontShowUI /d 1
+     - run: git config --global core.autocrlf input
+     - name: checkout
+@@ -98,8 +111,17 @@ jobs:
+       run: make V=1
+     - shell: msys2 {0}
+       run: make check-log
+-    #- name: Create zipped asset
+-    #  run: gzip -c configure >configure.gz
++    - shell: msys2 {0}
++      if: startsWith(github.ref, 'refs/tags/')
++      run: make pkg; sha256sum safeclib-*-x86_64-w64-mingw32.zip > mingw.sha256
++    - name: Release
++      uses: softprops/action-gh-release@fe9a9bd3295828558c7a3c004f23f3bf77d155b2
++      if: startsWith(github.ref, 'refs/tags/')
++      with:
++        append_body_path: mingw.sha256
++        files: |
++          mingw.sha256
++          safeclib-*-x86_64-w64-mingw32.zip
+     #- name: Create Release
+     #  id: create_release
+     #  uses: actions/create-release@v1
+diff --git a/ChangeLog b/ChangeLog
+index 8c537aa1..f1e02e3c 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -1,15 +1,19 @@
+ 
+         ChangeLog file for safeclib
+ 
+-Changes in 3.7.0
++Changes in 3.7
+         - Switched to proper semantic versioning for upstream packagers.
+         - Fixed getenv_s to allow dest=NULL or dmax=0 as in the spec. (GH #109)
++        - Fixed qsort_s with gcc-12 (GH #110)
+         - Updated to Unicode 14 (tested against perl 5.35.7)
+           export define SAFECLIB_UNICODE_VERSION 14
+         - Added stpcpy_s and stpncpy_s as in the Intel safestringlib fork.
+         - Added our own portable implementation of the family of printf_s
+           functions. This make the results and errno sideeffects more predictable.
+           scanf_s not yet. Fixes GH #97.
++        - This also adds support for the %Lx family of printf handlers: %L[fFeEaAgG]
++          and wide-char %ls, %lc conversions.
++          (GH #103). Now just custom sscanf_s and UTF-8 support is missing.
+ 	- Added a --disable-hardening option, which bypasses obviously failing
+ 	  AX_APPEND_COMPILE_FLAGS probes (PR #107, ffontaine).
+ 	  E.g. needed on some exotic uclibc buildroot targets.
+diff --git a/Makefile.am b/Makefile.am
+index bcf4de00..21931b37 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -390,16 +390,6 @@ dist_man_MANS += \
+ 	doc/man/man3/towfc_s.c.3	\
+ 	doc/man/man3/towlower.3		\
+ 	doc/man/man3/towupper.3		\
+-	doc/man/man3/unw16ifcan.h.3	\
+-	doc/man/man3/unw16ifcmb.h.3	\
+-	doc/man/man3/unw16ifcmp.h.3	\
+-	doc/man/man3/unw16ifcpt.h.3	\
+-	doc/man/man3/unw16ifexc.h.3	\
+-	doc/man/man3/unwifcan.h.3	\
+-	doc/man/man3/unwifcmb.h.3	\
+-	doc/man/man3/unwifcmp.h.3	\
+-	doc/man/man3/unwifcpt.h.3	\
+-	doc/man/man3/unwifexc.h.3	\
+ 	doc/man/man3/vfwprintf_s.3	\
+ 	doc/man/man3/vfwprintf_s.c.3	\
+ 	doc/man/man3/vfwscanf_s.3	\
+@@ -514,7 +504,6 @@ docs man: Doxyfile doc/footer $(BUILT_SOURCES) README.rst \
+ 	-rm doc/man/man3/seqindex_*
+ 	-rm doc/man/man3/*case_seqindex.3
+ 	-rm doc/man/man3/UINT16_MAX.3
+-	-rm doc/man/man3/UNWIF_*.3
+ 	-rm doc/man/man3/README*
+ 	-rm doc/man/man3/__STDC_WANT_LIB_EXT1__.3
+ 	-rm doc/man/man3/__WORDSIZE.3
+@@ -601,6 +590,15 @@ check-log:
+ perf:
+ 	tests/p_memcpy_s
+ 	tests/p_memcpy32_s
++pkg:
++	-rm -rf inst
++	$(MAKE) install DESTDIR="`pwd`/inst" prefix=/$(PACKAGE_TARNAME)-$(PACKAGE_VERSION)
++if HAVE_MINGW
++	(cd inst && zip ../$(PACKAGE_TARNAME)-$(PACKAGE_VERSION)-$(host_triplet).zip -r $(PACKAGE_TARNAME)-$(PACKAGE_VERSION) && cd -)
++else
++	tar cfz $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)-$(host_triplet).tar.gz -C inst $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)
++endif
++	rm -rf inst
+ gh-pages: docs
+ 	echo ensure ./configure --enable-unsafe
+ 	ls doc/man/man3/tmpnam_s.3
+diff --git a/configure.ac b/configure.ac
+index bb82cedc..e1df6a4a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -4,7 +4,7 @@
+ # 2017  Reini Urban <rurban@cpan.org>
+ #
+ # Copyright (c) 2012, 2013 Cisco Systems
+-# Copyright (c) 2017-2021 Reini Urban
++# Copyright (c) 2017-2022 Reini Urban
+ # All rights reserved.
+ #
+ # Permission is hereby granted, free of charge, to any person
+@@ -34,7 +34,6 @@
+ AC_PREREQ([2.69])
+ 
+ # information on the package
+-#AC_SUBST([PACKAGE_VERSION], [3.7])
+ AC_INIT([Safe C Library],[3.7],[https://github.com/rurban/safeclib/issues],[safeclib],[http://github.com/rurban/safeclib/])
+ 
+ # Configure the configure script
+diff --git a/tests/test_getenv_s.c b/tests/test_getenv_s.c
+index 4e36fa9b..f8043215 100644
+--- a/tests/test_getenv_s.c
++++ b/tests/test_getenv_s.c
+@@ -1,7 +1,7 @@
+ /*------------------------------------------------------------------
+  * test_getenv_s
+  * File 'os/getenv_s.c'
+- * Lines executed:96.43% of 28
++ * Lines executed:100.00% of 29
+  *
+  *------------------------------------------------------------------
+  */
+diff --git a/tests/test_stpncpy_s.c b/tests/test_stpncpy_s.c
+index 30fec845..41486c42 100644
+--- a/tests/test_stpncpy_s.c
++++ b/tests/test_stpncpy_s.c
+@@ -3,6 +3,8 @@
+  * File 'stpncpy_s.c'
+  * File 'stpncpy_s.c'
+  * Lines executed:75.25% of 101
++ * File 'stpncpy_s.c'
++ * Lines executed:75.25% of 101
+  * Lines executed:75.25% of 101
+  *------------------------------------------------------------------
+  */
+diff --git a/tests/test_vsnprintf_s.c b/tests/test_vsnprintf_s.c
+index 6d33e75e..48f6db34 100644
+--- a/tests/test_vsnprintf_s.c
++++ b/tests/test_vsnprintf_s.c
+@@ -1,7 +1,7 @@
+ /*------------------------------------------------------------------
+  * test_vsnprintf_s
+  * File 'wchar/vsnprintf_s.c'
+- * Lines executed:40.37% of 488
++ * Lines executed:40.12% of 486
+  *
+  *------------------------------------------------------------------
+  */
diff --git a/meta-oe/recipes-core/safec/safec/0072-post-release-fixups-vVERSION.patch b/meta-oe/recipes-core/safec/safec/0072-post-release-fixups-vVERSION.patch
new file mode 100644
index 000000000..a0a5fac96
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0072-post-release-fixups-vVERSION.patch
@@ -0,0 +1,30 @@ 
+From 66dab4bc04e5cde8eb954127777739a9f0806739 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sat, 29 Jan 2022 12:25:06 +0100
+Subject: [PATCH] post-release fixups: vVERSION
+
+---
+ Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 21931b37..63cd3b76 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -612,7 +612,7 @@ gh-pages: docs
+ release: docs distcheck
+ 	git branch |grep '^* master'
+ 	git tag -f v`date +%d%m%Y`
+-	git tag -f $(PACKAGE_VERSION)
++	git tag -f v$(PACKAGE_VERSION)
+ 	build-aux/autogen.sh
+ 	./configure
+ 	$(MAKE)
+@@ -627,6 +627,6 @@ release: docs distcheck
+ 	$(MAKE) docs
+ 	$(MAKE) gh-pages
+ 	git branch |grep '^* gh-pages'
+-	git commit -m"Update to $(PACKAGE_VERSION)"
++	git commit -m"Update to v$(PACKAGE_VERSION)"
+ 	git push
+ 	git checkout master
diff --git a/meta-oe/recipes-core/safec/safec/0073-appveyor-disable-failing-mingw.patch b/meta-oe/recipes-core/safec/safec/0073-appveyor-disable-failing-mingw.patch
new file mode 100644
index 000000000..865e4b576
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0073-appveyor-disable-failing-mingw.patch
@@ -0,0 +1,37 @@ 
+From ca61bede9ce82ee7e899b47843316180aa39255a Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sat, 29 Jan 2022 22:48:33 +0100
+Subject: [PATCH] appveyor: disable failing mingw
+
+we have a good one at github
+---
+ .appveyor.yml | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/.appveyor.yml b/.appveyor.yml
+index c1f24254..be00e511 100644
+--- a/.appveyor.yml
++++ b/.appveyor.yml
+@@ -2,14 +2,14 @@ version: 3.7.{build}
+ max_jobs: 4
+ environment:
+   matrix:
+-    - MINGW: 1
+-      MSYS2_ARCH: x86_64
+-      MSYSTEM: MINGW64
+-      PLATFORM: x64
+-    - MINGW: 1
+-      MSYS2_ARCH: i686
+-      MSYSTEM: MINGW32
+-      PLATFORM: x86
++    #- MINGW: 1
++    #  MSYS2_ARCH: x86_64
++    #  MSYSTEM: MINGW64
++    #  PLATFORM: x64
++    #- MINGW: 1
++    #  MSYS2_ARCH: i686
++    #  MSYSTEM: MINGW32
++    #  PLATFORM: x86
+     - CYGWIN: 1
+       PLATFORM: x86
+     - CYGWIN: 1
diff --git a/meta-oe/recipes-core/safec/safec/0074-drone-upgrade-a-bit.patch b/meta-oe/recipes-core/safec/safec/0074-drone-upgrade-a-bit.patch
new file mode 100644
index 000000000..b710a4dc5
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0074-drone-upgrade-a-bit.patch
@@ -0,0 +1,32 @@ 
+From bd4211307602782d5c39fa2b4e86ec154f5f5693 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Sat, 29 Jan 2022 22:52:24 +0100
+Subject: [PATCH] drone: upgrade a bit
+
+but disable it for now, until we can find out how to start a build
+---
+ .drone.yml | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/.drone.yml b/.drone.yml
+index 31b0494f..9ebde6c4 100644
+--- a/.drone.yml
++++ b/.drone.yml
+@@ -10,7 +10,7 @@ steps:
+     image: arm64v8/fedora
+     commands:
+       - uname -a
+-      - dnf install -y --repo fedora gcc make file git automake autoconf which
++      - dnf install -y --repo fedora gcc bash make file git automake autoconf which
+                                      libtool perl-Text-Diff pkgconf-pkg-config
+       - build-aux/autogen.sh
+       - build-aux/conf-make-check.sh
+@@ -34,7 +34,7 @@ steps:
+       - uname -a
+       - apt-get update -qq
+       - apt-get install -yq --no-install-suggests --no-install-recommends
+-                build-essential file gcc make autotools-dev automake autoconf libtool
++                build-essential file bash gcc make autotools-dev automake autoconf libtool
+                 libtext-diff-perl pkg-config
+       - build-aux/autogen.sh
+       - build-aux/conf-make-check.sh
diff --git a/meta-oe/recipes-core/safec/safec/0075-powerpc-compilation-fix.patch b/meta-oe/recipes-core/safec/safec/0075-powerpc-compilation-fix.patch
new file mode 100644
index 000000000..561ce18f3
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0075-powerpc-compilation-fix.patch
@@ -0,0 +1,23 @@ 
+From 17bf3dcd67ac7c540d5d3fe0ce4e198de9edaa69 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Tue, 1 Feb 2022 20:34:54 +0100
+Subject: [PATCH] powerpc compilation fix
+
+Fixes GH #113, reported by @kilobyte
+---
+ tests/perf_private.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/perf_private.h b/tests/perf_private.h
+index 070faf75..3296cb3d 100644
+--- a/tests/perf_private.h
++++ b/tests/perf_private.h
+@@ -106,7 +106,7 @@ static inline clock_t rdtsc() {
+       "cmpw %0, %2\n"
+       "bne- 0b"
+       : "=r" (tbu), "=r" (tbl), "=r" (tmp));
+-    return (((uint64) tbu << 32) | tbl);
++    return (((uint64_t) tbu << 32) | tbl);
+ #elif defined(__sparc__)
+     uint64_t tick;
+     asm(".byte 0x83, 0x41, 0x00, 0x00");
diff --git a/meta-oe/recipes-core/safec/safec/0076-Release-3.7.1.patch b/meta-oe/recipes-core/safec/safec/0076-Release-3.7.1.patch
new file mode 100644
index 000000000..244f718ff
--- /dev/null
+++ b/meta-oe/recipes-core/safec/safec/0076-Release-3.7.1.patch
@@ -0,0 +1,52 @@ 
+From f9add9245b97c7bda6e28cceb0ee37fb7e254fd8 Mon Sep 17 00:00:00 2001
+From: Reini Urban <rurban@cpan.org>
+Date: Tue, 1 Feb 2022 20:37:19 +0100
+Subject: [PATCH] Release 3.7.1
+
+Fixed powerpc perf tests only. No need for others to upgrade
+---
+ ChangeLog    | 3 +++
+ Makefile.am  | 2 +-
+ configure.ac | 2 +-
+ 3 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/ChangeLog b/ChangeLog
+index f1e02e3c..c5e57394 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -1,6 +1,9 @@
+ 
+         ChangeLog file for safeclib
+ 
++Changes in 3.7.1
++        - Fixed powerpc compilation of the perf tests. GH #113
++
+ Changes in 3.7
+         - Switched to proper semantic versioning for upstream packagers.
+         - Fixed getenv_s to allow dest=NULL or dmax=0 as in the spec. (GH #109)
+diff --git a/Makefile.am b/Makefile.am
+index 63cd3b76..429a84b2 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -612,7 +612,7 @@ gh-pages: docs
+ release: docs distcheck
+ 	git branch |grep '^* master'
+ 	git tag -f v`date +%d%m%Y`
+-	git tag -f v$(PACKAGE_VERSION)
++	-git tag -f v$(PACKAGE_VERSION)
+ 	build-aux/autogen.sh
+ 	./configure
+ 	$(MAKE)
+diff --git a/configure.ac b/configure.ac
+index e1df6a4a..b7fd03e9 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -34,7 +34,7 @@
+ AC_PREREQ([2.69])
+ 
+ # information on the package
+-AC_INIT([Safe C Library],[3.7],[https://github.com/rurban/safeclib/issues],[safeclib],[http://github.com/rurban/safeclib/])
++AC_INIT([Safe C Library],[3.7.1],[https://github.com/rurban/safeclib/issues],[safeclib],[http://github.com/rurban/safeclib/])
+ 
+ # Configure the configure script
+ # ===============================================
diff --git a/meta-oe/recipes-core/safec/safec_3.7.1.bb b/meta-oe/recipes-core/safec/safec_31082020.bb
similarity index 10%
rename from meta-oe/recipes-core/safec/safec_3.7.1.bb
rename to meta-oe/recipes-core/safec/safec_31082020.bb
index 9dd6f1c7c..af3220548 100644
--- a/meta-oe/recipes-core/safec/safec_3.7.1.bb
+++ b/meta-oe/recipes-core/safec/safec_31082020.bb
@@ -7,9 +7,85 @@  SECTION = "lib"
 inherit autotools pkgconfig
 
 S = "${WORKDIR}/git"
-SRCREV = "f9add9245b97c7bda6e28cceb0ee37fb7e254fd8"
+SRCREV = "013c2f70977d7c7198d5d5a1f82eccafa7b10229"
 SRC_URI = "git://github.com/rurban/safeclib.git;branch=master;protocol=https \
            file://0001-strpbrk_s-Remove-unused-variable-len.patch \
+           file://0001-man-improved-skip-_chk-add-public-API.patch \
+           file://0002-man-fix-various-doxygen-warnings.patch \
+           file://0003-v02092020-3.6.0-release.patch \
+           file://0004-drone-no-fedora-modular-on-arm32.patch \
+           file://0005-document-new-CI-s-tested-archs.patch \
+           file://0006-man-improved-s-n-printf_s.patch \
+           file://0007-mem_prim_set-remove-duplicate-MEMORY_BARRIER.patch \
+           file://0008-perf_memset_s-add-mem_prim_set-test-without-MEMORY_B.patch \
+           file://0009-improve-perf_memset_s-proper-timer-linearization.patch \
+           file://0010-extract-perf-functions-into-perf_private.h.patch \
+           file://0011-.gitgnore-new-files.patch \
+           file://0012-perf-fix-aarch64-and-add-more-archs.patch \
+           file://0013-add-support-banner-and-link.patch \
+           file://0014-add-rst-and-md-in-parallel.patch \
+           file://0015-generate-README.rst.patch \
+           file://0016-travis-disable-unfree-osx.patch \
+           file://0017-Define-NDEBUG-only-if-not-already-defined.patch \
+           file://0018-switch-to-semantic-versioning-3.7-change-PACKAGE-nam.patch \
+           file://0019-update-freebsd-smoker.patch \
+           file://0020-fix-mingw-keyring-mess-again.patch \
+           file://0021-Dont-install-wchar-manpages-with-disable-wchar.patch \
+           file://0022-kernel-fix-for-time64_t-only.patch \
+           file://0023-configure-replace-obsolute-macros.patch \
+           file://0024-add-GH-Actions.patch \
+           file://0025-avoid-macro-redefinition-warnings.patch \
+           file://0026-add-stpcpy_s.patch \
+           file://0027-Cope-with-EOVERFLOW-being-an-enum-value-rather-than-.patch \
+           file://0028-stpcpy_s-doc-typo.patch \
+           file://0029-avoid-macro-redefinition-warnings.patch \
+           file://0030-stpcpy_s-rename-err-arg-to-errp.patch \
+           file://0031-add-stpncpy_s.patch \
+           file://0032-configure-don-t-probe-for-wchar-with-disable-wchar.patch \
+           file://0033-doxyfile-update.patch \
+           file://0034-gcc-std-c-11-already-defines-_GNU_SOURCE.patch \
+           file://0035-mingw-fixes-disable-p_memset_s-test.patch \
+           file://0036-fixup-smoker-for-mingw.patch \
+           file://0037-fix-sprintf_s-with-arg-GH-97.patch \
+           file://0038-WIP-start-with-our-own-printf.patch \
+           file://0039-vsnprintf_s-catch-s-ESNULLP-and-ESNOSPC.patch \
+           file://0040-new-safe-f-printf_s-also.patch \
+           file://0041-printf_s-catch-more-ESNOSPC-errors.patch \
+           file://0042-fix-all-printf_s-tests.patch \
+           file://0043-rename-_vsnprintf_s-to-__vsnprintf_s.patch \
+           file://0044-disable-fixup-some-io-for-the-kernel.patch \
+           file://0045-let-vfprintf_s-use-the-new-secure-vsnprintf_s.patch \
+           file://0046-doc-fix-retval-doxygen-warnings.patch \
+           file://0047-add-ESNOSPC-check-to-qsort_s.patch \
+           file://0048-adjust-bsearch_s-error-messages-to-qsort_s.patch \
+           file://0049-add-safec_-prefix-for-internal-printf-function.patch \
+           file://0050-printf-add-name-of-failing-function.patch \
+           file://0051-printf-correctly-reject-illegal-format-specifiers.patch \
+           file://0052-printf-catch-print-to-closed-stream-external-errno.patch \
+           file://0053-Add-Changelog-for-upcoming-3.7.0.patch \
+           file://0054-WIP-test_vfprintf_s-test-more-fprintf-errors.patch \
+           file://0055-fix-compilation-with-c-std-c-11.patch \
+           file://0056-fix-t_vfprintf_s.patch \
+           file://0057-update-coverages-smoke.sh.patch \
+           file://0058-configure-more-required-safec-CFLAGS.patch \
+           file://0059-configure.ac-add-disable-hardening-option.patch \
+           file://0060-ChangeLog-for-PR-107.patch \
+           file://0061-fixup-mingw-GH-action.patch \
+           file://0062-no-stack-clash-protection-on-macOS-clang-yet.patch \
+           file://0063-minor-docs-m4.patch \
+           file://0064-getenv_s-allow-dest-NULL-and-dmax-0.patch \
+           file://0065-fixup-header-includes.patch \
+           file://0066-fixup-test_towfc_s-a-bit.patch \
+           file://0067-export-SAFECLIB_UNICODE_VERSION-13.patch \
+           file://0068-update-to-Unicode-14.patch \
+           file://0069-fix-qsort-stack-addresses-detected-by-gcc-12.patch \
+           file://0070-don-t-fail-some-tests-if-wget-failed.patch \
+           file://0071-Release-3.7.patch \
+           file://0072-post-release-fixups-vVERSION.patch \
+           file://0073-appveyor-disable-failing-mingw.patch \
+           file://0074-drone-upgrade-a-bit.patch \
+           file://0075-powerpc-compilation-fix.patch \
+           file://0076-Release-3.7.1.patch \
            "
 
 COMPATIBLE_HOST = '(x86_64|i.86|powerpc|powerpc64|arm|aarch64|mips).*-linux'