[llvm-branch-commits] [libcxx] [libc++][format] Improves escaping performance. (PR #88533)

Mark de Wever via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Apr 12 09:58:55 PDT 2024


https://github.com/mordante updated https://github.com/llvm/llvm-project/pull/88533

>From e133af07c0630f4eac45ba8298f0d80741d88893 Mon Sep 17 00:00:00 2001
From: Mark de Wever <koraq at xs4all.nl>
Date: Sat, 6 Apr 2024 19:35:12 +0200
Subject: [PATCH] [libc++][format] Improves escaping performance.

The previous patch implemented
- P2713R1 Escaping improvements in std::format
- LWG3965 Incorrect example in [format.string.escaped] p3 for formatting of combining characters

These changes were correct, but has a size and performance penalty. This
patch improves the size and performance of the previous patch. The
performance is still worse than before since the lookups may require two
property lookups instead of one before implementing the paper. The changes
give a tighter coupling between the Unicode data and the algorithm.
An additional tests are added to notify about changes in future Unicode
updates.

Before
-----------------------------------------------------------------------
Benchmark                             Time             CPU   Iterations
-----------------------------------------------------------------------
BM_ascii_escaped<char>           110704 ns       110696 ns         6206
BM_unicode_escaped<char>         101371 ns       101374 ns         6862
BM_cyrillic_escaped<char>         63329 ns        63327 ns        11013
BM_japanese_escaped<char>         41223 ns        41225 ns        16938
BM_emoji_escaped<char>           111022 ns       111021 ns         6304
BM_ascii_escaped<wchar_t>        112441 ns       112443 ns         6231
BM_unicode_escaped<wchar_t>      102776 ns       102779 ns         6813
BM_cyrillic_escaped<wchar_t>      58977 ns        58975 ns        11868
BM_japanese_escaped<wchar_t>      36885 ns        36886 ns        18975
BM_emoji_escaped<wchar_t>        115885 ns       115881 ns         6051

The first change is to manually encode the entire last area and make a
manual exception for the 240 excluded entries. This reduced the table
from 1077 to 729 entries and gave the following benchmark results.
-----------------------------------------------------------------------
Benchmark                             Time             CPU   Iterations
-----------------------------------------------------------------------
BM_ascii_escaped<char>           104777 ns       104776 ns         6550
BM_unicode_escaped<char>          96980 ns        96982 ns         7238
BM_cyrillic_escaped<char>         60254 ns        60251 ns        11670
BM_japanese_escaped<char>         44452 ns        44452 ns        15734
BM_emoji_escaped<char>           104557 ns       104551 ns         6685
BM_ascii_escaped<wchar_t>        107456 ns       107454 ns         6505
BM_unicode_escaped<wchar_t>       96219 ns        96216 ns         7301
BM_cyrillic_escaped<wchar_t>      56921 ns        56904 ns        12288
BM_japanese_escaped<wchar_t>      39530 ns        39529 ns        17492
BM_emoji_escaped<wchar_t>        108494 ns       108496 ns         6408

An entry in the table can only contain 2048 code points. For larger ranges
there are multiple entries split in chunks with a maximum size of 2048
entries. To encode the entire Unicode code point range 21 bits are
required. The manual part starts at 0x323B0 this means all entries in the
table fit in 18 bits. This allows to allocate 3 additional bits for the
range. This allows entries to have 16384 elements. This range always
avoids splitting the range in multiple chunks.

This reduces the number of table elements from 729 to 711 and gives the
following benchmark results.
-----------------------------------------------------------------------
Benchmark                             Time             CPU   Iterations
-----------------------------------------------------------------------
BM_ascii_escaped<char>           104289 ns       104289 ns         6619
BM_unicode_escaped<char>          96682 ns        96681 ns         7215
BM_cyrillic_escaped<char>         59673 ns        59673 ns        11732
BM_japanese_escaped<char>         41983 ns        41982 ns        16646
BM_emoji_escaped<char>           104119 ns       104120 ns         6683
BM_ascii_escaped<wchar_t>        104503 ns       104505 ns         6693
BM_unicode_escaped<wchar_t>       93426 ns        93423 ns         7489
BM_cyrillic_escaped<wchar_t>      54858 ns        54859 ns        12742
BM_japanese_escaped<wchar_t>      36385 ns        36384 ns        19259
BM_emoji_escaped<wchar_t>        105608 ns       105610 ns         6592
---
 .../include/__format/escaped_output_table.h   | 1821 +++++++----------
 libcxx/include/format                         |    2 +
 .../format.string.std/escaped_output.pass.cpp |  100 +
 libcxx/utils/generate_escaped_output_table.py |   86 +-
 4 files changed, 882 insertions(+), 1127 deletions(-)
 create mode 100644 libcxx/test/libcxx/utilities/format/format.string/format.string.std/escaped_output.pass.cpp

diff --git a/libcxx/include/__format/escaped_output_table.h b/libcxx/include/__format/escaped_output_table.h
index 3144abdd3f9a80..6abe121661bdf6 100644
--- a/libcxx/include/__format/escaped_output_table.h
+++ b/libcxx/include/__format/escaped_output_table.h
@@ -97,7 +97,6 @@ namespace __escaped_output_table {
 /// - Unassigned.
 ///
 /// The data is generated from
-/// - https://www.unicode.org/Public/UCD/latest/ucd/DerivedCoreProperties.txt
 /// - https://www.unicode.org/Public/UCD/latest/ucd/extracted/DerivedGeneralCategory.txt
 ///
 /// The table is similar to the table
@@ -106,1110 +105,748 @@ namespace __escaped_output_table {
 /// table lacks a property, thus having more bits available for the size.
 ///
 /// The data has 2 values:
-/// - bits [0, 10] The size of the range, allowing 2048 elements.
-/// - bits [11, 31] The lower bound code point of the range. The upper bound of
-///   the range is lower bound + size.
-_LIBCPP_HIDE_FROM_ABI inline constexpr uint32_t __entries[1077] = {
+/// - bits [0, 13] The size of the range, allowing 16384 elements.
+/// - bits [14, 31] The lower bound code point of the range. The upper bound of
+///   the range is lower bound + size. Note the code expects code units the fit
+///   into 18 bits, instead of the 21 bits needed for the full Unicode range.
+_LIBCPP_HIDE_FROM_ABI inline constexpr uint32_t __entries[711] = {
     0x00000020 /* 00000000 - 00000020 [   33] */,
-    0x0003f821 /* 0000007f - 000000a0 [   34] */,
-    0x00056800 /* 000000ad - 000000ad [    1] */,
-    0x001bc001 /* 00000378 - 00000379 [    2] */,
-    0x001c0003 /* 00000380 - 00000383 [    4] */,
-    0x001c5800 /* 0000038b - 0000038b [    1] */,
-    0x001c6800 /* 0000038d - 0000038d [    1] */,
-    0x001d1000 /* 000003a2 - 000003a2 [    1] */,
-    0x00298000 /* 00000530 - 00000530 [    1] */,
-    0x002ab801 /* 00000557 - 00000558 [    2] */,
-    0x002c5801 /* 0000058b - 0000058c [    2] */,
-    0x002c8000 /* 00000590 - 00000590 [    1] */,
-    0x002e4007 /* 000005c8 - 000005cf [    8] */,
-    0x002f5803 /* 000005eb - 000005ee [    4] */,
-    0x002fa810 /* 000005f5 - 00000605 [   17] */,
-    0x0030e000 /* 0000061c - 0000061c [    1] */,
-    0x0036e800 /* 000006dd - 000006dd [    1] */,
-    0x00387001 /* 0000070e - 0000070f [    2] */,
-    0x003a5801 /* 0000074b - 0000074c [    2] */,
-    0x003d900d /* 000007b2 - 000007bf [   14] */,
-    0x003fd801 /* 000007fb - 000007fc [    2] */,
-    0x00417001 /* 0000082e - 0000082f [    2] */,
-    0x0041f800 /* 0000083f - 0000083f [    1] */,
-    0x0042e001 /* 0000085c - 0000085d [    2] */,
-    0x0042f800 /* 0000085f - 0000085f [    1] */,
-    0x00435804 /* 0000086b - 0000086f [    5] */,
-    0x00447808 /* 0000088f - 00000897 [    9] */,
-    0x00471000 /* 000008e2 - 000008e2 [    1] */,
-    0x004c2000 /* 00000984 - 00000984 [    1] */,
-    0x004c6801 /* 0000098d - 0000098e [    2] */,
-    0x004c8801 /* 00000991 - 00000992 [    2] */,
-    0x004d4800 /* 000009a9 - 000009a9 [    1] */,
-    0x004d8800 /* 000009b1 - 000009b1 [    1] */,
-    0x004d9802 /* 000009b3 - 000009b5 [    3] */,
-    0x004dd001 /* 000009ba - 000009bb [    2] */,
-    0x004e2801 /* 000009c5 - 000009c6 [    2] */,
-    0x004e4801 /* 000009c9 - 000009ca [    2] */,
-    0x004e7807 /* 000009cf - 000009d6 [    8] */,
-    0x004ec003 /* 000009d8 - 000009db [    4] */,
-    0x004ef000 /* 000009de - 000009de [    1] */,
-    0x004f2001 /* 000009e4 - 000009e5 [    2] */,
-    0x004ff801 /* 000009ff - 00000a00 [    2] */,
-    0x00502000 /* 00000a04 - 00000a04 [    1] */,
-    0x00505803 /* 00000a0b - 00000a0e [    4] */,
-    0x00508801 /* 00000a11 - 00000a12 [    2] */,
-    0x00514800 /* 00000a29 - 00000a29 [    1] */,
-    0x00518800 /* 00000a31 - 00000a31 [    1] */,
-    0x0051a000 /* 00000a34 - 00000a34 [    1] */,
-    0x0051b800 /* 00000a37 - 00000a37 [    1] */,
-    0x0051d001 /* 00000a3a - 00000a3b [    2] */,
-    0x0051e800 /* 00000a3d - 00000a3d [    1] */,
-    0x00521803 /* 00000a43 - 00000a46 [    4] */,
-    0x00524801 /* 00000a49 - 00000a4a [    2] */,
-    0x00527002 /* 00000a4e - 00000a50 [    3] */,
-    0x00529006 /* 00000a52 - 00000a58 [    7] */,
-    0x0052e800 /* 00000a5d - 00000a5d [    1] */,
-    0x0052f806 /* 00000a5f - 00000a65 [    7] */,
-    0x0053b809 /* 00000a77 - 00000a80 [   10] */,
-    0x00542000 /* 00000a84 - 00000a84 [    1] */,
-    0x00547000 /* 00000a8e - 00000a8e [    1] */,
-    0x00549000 /* 00000a92 - 00000a92 [    1] */,
-    0x00554800 /* 00000aa9 - 00000aa9 [    1] */,
-    0x00558800 /* 00000ab1 - 00000ab1 [    1] */,
-    0x0055a000 /* 00000ab4 - 00000ab4 [    1] */,
-    0x0055d001 /* 00000aba - 00000abb [    2] */,
-    0x00563000 /* 00000ac6 - 00000ac6 [    1] */,
-    0x00565000 /* 00000aca - 00000aca [    1] */,
-    0x00567001 /* 00000ace - 00000acf [    2] */,
-    0x0056880e /* 00000ad1 - 00000adf [   15] */,
-    0x00572001 /* 00000ae4 - 00000ae5 [    2] */,
-    0x00579006 /* 00000af2 - 00000af8 [    7] */,
-    0x00580000 /* 00000b00 - 00000b00 [    1] */,
-    0x00582000 /* 00000b04 - 00000b04 [    1] */,
-    0x00586801 /* 00000b0d - 00000b0e [    2] */,
-    0x00588801 /* 00000b11 - 00000b12 [    2] */,
-    0x00594800 /* 00000b29 - 00000b29 [    1] */,
-    0x00598800 /* 00000b31 - 00000b31 [    1] */,
-    0x0059a000 /* 00000b34 - 00000b34 [    1] */,
-    0x0059d001 /* 00000b3a - 00000b3b [    2] */,
-    0x005a2801 /* 00000b45 - 00000b46 [    2] */,
-    0x005a4801 /* 00000b49 - 00000b4a [    2] */,
-    0x005a7006 /* 00000b4e - 00000b54 [    7] */,
-    0x005ac003 /* 00000b58 - 00000b5b [    4] */,
-    0x005af000 /* 00000b5e - 00000b5e [    1] */,
-    0x005b2001 /* 00000b64 - 00000b65 [    2] */,
-    0x005bc009 /* 00000b78 - 00000b81 [   10] */,
-    0x005c2000 /* 00000b84 - 00000b84 [    1] */,
-    0x005c5802 /* 00000b8b - 00000b8d [    3] */,
-    0x005c8800 /* 00000b91 - 00000b91 [    1] */,
-    0x005cb002 /* 00000b96 - 00000b98 [    3] */,
-    0x005cd800 /* 00000b9b - 00000b9b [    1] */,
-    0x005ce800 /* 00000b9d - 00000b9d [    1] */,
-    0x005d0002 /* 00000ba0 - 00000ba2 [    3] */,
-    0x005d2802 /* 00000ba5 - 00000ba7 [    3] */,
-    0x005d5802 /* 00000bab - 00000bad [    3] */,
-    0x005dd003 /* 00000bba - 00000bbd [    4] */,
-    0x005e1802 /* 00000bc3 - 00000bc5 [    3] */,
-    0x005e4800 /* 00000bc9 - 00000bc9 [    1] */,
-    0x005e7001 /* 00000bce - 00000bcf [    2] */,
-    0x005e8805 /* 00000bd1 - 00000bd6 [    6] */,
-    0x005ec00d /* 00000bd8 - 00000be5 [   14] */,
-    0x005fd804 /* 00000bfb - 00000bff [    5] */,
-    0x00606800 /* 00000c0d - 00000c0d [    1] */,
-    0x00608800 /* 00000c11 - 00000c11 [    1] */,
-    0x00614800 /* 00000c29 - 00000c29 [    1] */,
-    0x0061d001 /* 00000c3a - 00000c3b [    2] */,
-    0x00622800 /* 00000c45 - 00000c45 [    1] */,
-    0x00624800 /* 00000c49 - 00000c49 [    1] */,
-    0x00627006 /* 00000c4e - 00000c54 [    7] */,
-    0x0062b800 /* 00000c57 - 00000c57 [    1] */,
-    0x0062d801 /* 00000c5b - 00000c5c [    2] */,
-    0x0062f001 /* 00000c5e - 00000c5f [    2] */,
-    0x00632001 /* 00000c64 - 00000c65 [    2] */,
-    0x00638006 /* 00000c70 - 00000c76 [    7] */,
-    0x00646800 /* 00000c8d - 00000c8d [    1] */,
-    0x00648800 /* 00000c91 - 00000c91 [    1] */,
-    0x00654800 /* 00000ca9 - 00000ca9 [    1] */,
-    0x0065a000 /* 00000cb4 - 00000cb4 [    1] */,
-    0x0065d001 /* 00000cba - 00000cbb [    2] */,
-    0x00662800 /* 00000cc5 - 00000cc5 [    1] */,
-    0x00664800 /* 00000cc9 - 00000cc9 [    1] */,
-    0x00667006 /* 00000cce - 00000cd4 [    7] */,
-    0x0066b805 /* 00000cd7 - 00000cdc [    6] */,
-    0x0066f800 /* 00000cdf - 00000cdf [    1] */,
-    0x00672001 /* 00000ce4 - 00000ce5 [    2] */,
-    0x00678000 /* 00000cf0 - 00000cf0 [    1] */,
-    0x0067a00b /* 00000cf4 - 00000cff [   12] */,
-    0x00686800 /* 00000d0d - 00000d0d [    1] */,
-    0x00688800 /* 00000d11 - 00000d11 [    1] */,
-    0x006a2800 /* 00000d45 - 00000d45 [    1] */,
-    0x006a4800 /* 00000d49 - 00000d49 [    1] */,
-    0x006a8003 /* 00000d50 - 00000d53 [    4] */,
-    0x006b2001 /* 00000d64 - 00000d65 [    2] */,
-    0x006c0000 /* 00000d80 - 00000d80 [    1] */,
-    0x006c2000 /* 00000d84 - 00000d84 [    1] */,
-    0x006cb802 /* 00000d97 - 00000d99 [    3] */,
-    0x006d9000 /* 00000db2 - 00000db2 [    1] */,
-    0x006de000 /* 00000dbc - 00000dbc [    1] */,
-    0x006df001 /* 00000dbe - 00000dbf [    2] */,
-    0x006e3802 /* 00000dc7 - 00000dc9 [    3] */,
-    0x006e5803 /* 00000dcb - 00000dce [    4] */,
-    0x006ea800 /* 00000dd5 - 00000dd5 [    1] */,
-    0x006eb800 /* 00000dd7 - 00000dd7 [    1] */,
-    0x006f0005 /* 00000de0 - 00000de5 [    6] */,
-    0x006f8001 /* 00000df0 - 00000df1 [    2] */,
-    0x006fa80b /* 00000df5 - 00000e00 [   12] */,
-    0x0071d803 /* 00000e3b - 00000e3e [    4] */,
-    0x0072e024 /* 00000e5c - 00000e80 [   37] */,
-    0x00741800 /* 00000e83 - 00000e83 [    1] */,
-    0x00742800 /* 00000e85 - 00000e85 [    1] */,
-    0x00745800 /* 00000e8b - 00000e8b [    1] */,
-    0x00752000 /* 00000ea4 - 00000ea4 [    1] */,
-    0x00753000 /* 00000ea6 - 00000ea6 [    1] */,
-    0x0075f001 /* 00000ebe - 00000ebf [    2] */,
-    0x00762800 /* 00000ec5 - 00000ec5 [    1] */,
-    0x00763800 /* 00000ec7 - 00000ec7 [    1] */,
-    0x00767800 /* 00000ecf - 00000ecf [    1] */,
-    0x0076d001 /* 00000eda - 00000edb [    2] */,
-    0x0077001f /* 00000ee0 - 00000eff [   32] */,
-    0x007a4000 /* 00000f48 - 00000f48 [    1] */,
-    0x007b6803 /* 00000f6d - 00000f70 [    4] */,
-    0x007cc000 /* 00000f98 - 00000f98 [    1] */,
-    0x007de800 /* 00000fbd - 00000fbd [    1] */,
-    0x007e6800 /* 00000fcd - 00000fcd [    1] */,
-    0x007ed824 /* 00000fdb - 00000fff [   37] */,
-    0x00863000 /* 000010c6 - 000010c6 [    1] */,
-    0x00864004 /* 000010c8 - 000010cc [    5] */,
-    0x00867001 /* 000010ce - 000010cf [    2] */,
-    0x00924800 /* 00001249 - 00001249 [    1] */,
-    0x00927001 /* 0000124e - 0000124f [    2] */,
-    0x0092b800 /* 00001257 - 00001257 [    1] */,
-    0x0092c800 /* 00001259 - 00001259 [    1] */,
-    0x0092f001 /* 0000125e - 0000125f [    2] */,
-    0x00944800 /* 00001289 - 00001289 [    1] */,
-    0x00947001 /* 0000128e - 0000128f [    2] */,
-    0x00958800 /* 000012b1 - 000012b1 [    1] */,
-    0x0095b001 /* 000012b6 - 000012b7 [    2] */,
-    0x0095f800 /* 000012bf - 000012bf [    1] */,
-    0x00960800 /* 000012c1 - 000012c1 [    1] */,
-    0x00963001 /* 000012c6 - 000012c7 [    2] */,
-    0x0096b800 /* 000012d7 - 000012d7 [    1] */,
-    0x00988800 /* 00001311 - 00001311 [    1] */,
-    0x0098b001 /* 00001316 - 00001317 [    2] */,
-    0x009ad801 /* 0000135b - 0000135c [    2] */,
-    0x009be802 /* 0000137d - 0000137f [    3] */,
-    0x009cd005 /* 0000139a - 0000139f [    6] */,
-    0x009fb001 /* 000013f6 - 000013f7 [    2] */,
-    0x009ff001 /* 000013fe - 000013ff [    2] */,
-    0x00b40000 /* 00001680 - 00001680 [    1] */,
-    0x00b4e802 /* 0000169d - 0000169f [    3] */,
-    0x00b7c806 /* 000016f9 - 000016ff [    7] */,
-    0x00b8b008 /* 00001716 - 0000171e [    9] */,
-    0x00b9b808 /* 00001737 - 0000173f [    9] */,
-    0x00baa00b /* 00001754 - 0000175f [   12] */,
-    0x00bb6800 /* 0000176d - 0000176d [    1] */,
-    0x00bb8800 /* 00001771 - 00001771 [    1] */,
-    0x00bba00b /* 00001774 - 0000177f [   12] */,
-    0x00bef001 /* 000017de - 000017df [    2] */,
-    0x00bf5005 /* 000017ea - 000017ef [    6] */,
-    0x00bfd005 /* 000017fa - 000017ff [    6] */,
-    0x00c07000 /* 0000180e - 0000180e [    1] */,
-    0x00c0d005 /* 0000181a - 0000181f [    6] */,
-    0x00c3c806 /* 00001879 - 0000187f [    7] */,
-    0x00c55804 /* 000018ab - 000018af [    5] */,
-    0x00c7b009 /* 000018f6 - 000018ff [   10] */,
-    0x00c8f800 /* 0000191f - 0000191f [    1] */,
-    0x00c96003 /* 0000192c - 0000192f [    4] */,
-    0x00c9e003 /* 0000193c - 0000193f [    4] */,
-    0x00ca0802 /* 00001941 - 00001943 [    3] */,
-    0x00cb7001 /* 0000196e - 0000196f [    2] */,
-    0x00cba80a /* 00001975 - 0000197f [   11] */,
-    0x00cd6003 /* 000019ac - 000019af [    4] */,
-    0x00ce5005 /* 000019ca - 000019cf [    6] */,
-    0x00ced802 /* 000019db - 000019dd [    3] */,
-    0x00d0e001 /* 00001a1c - 00001a1d [    2] */,
-    0x00d2f800 /* 00001a5f - 00001a5f [    1] */,
-    0x00d3e801 /* 00001a7d - 00001a7e [    2] */,
-    0x00d45005 /* 00001a8a - 00001a8f [    6] */,
-    0x00d4d005 /* 00001a9a - 00001a9f [    6] */,
-    0x00d57001 /* 00001aae - 00001aaf [    2] */,
-    0x00d67830 /* 00001acf - 00001aff [   49] */,
-    0x00da6802 /* 00001b4d - 00001b4f [    3] */,
-    0x00dbf800 /* 00001b7f - 00001b7f [    1] */,
-    0x00dfa007 /* 00001bf4 - 00001bfb [    8] */,
-    0x00e1c002 /* 00001c38 - 00001c3a [    3] */,
-    0x00e25002 /* 00001c4a - 00001c4c [    3] */,
-    0x00e44806 /* 00001c89 - 00001c8f [    7] */,
-    0x00e5d801 /* 00001cbb - 00001cbc [    2] */,
-    0x00e64007 /* 00001cc8 - 00001ccf [    8] */,
-    0x00e7d804 /* 00001cfb - 00001cff [    5] */,
-    0x00f8b001 /* 00001f16 - 00001f17 [    2] */,
-    0x00f8f001 /* 00001f1e - 00001f1f [    2] */,
-    0x00fa3001 /* 00001f46 - 00001f47 [    2] */,
-    0x00fa7001 /* 00001f4e - 00001f4f [    2] */,
-    0x00fac000 /* 00001f58 - 00001f58 [    1] */,
-    0x00fad000 /* 00001f5a - 00001f5a [    1] */,
-    0x00fae000 /* 00001f5c - 00001f5c [    1] */,
-    0x00faf000 /* 00001f5e - 00001f5e [    1] */,
-    0x00fbf001 /* 00001f7e - 00001f7f [    2] */,
-    0x00fda800 /* 00001fb5 - 00001fb5 [    1] */,
-    0x00fe2800 /* 00001fc5 - 00001fc5 [    1] */,
-    0x00fea001 /* 00001fd4 - 00001fd5 [    2] */,
-    0x00fee000 /* 00001fdc - 00001fdc [    1] */,
-    0x00ff8001 /* 00001ff0 - 00001ff1 [    2] */,
-    0x00ffa800 /* 00001ff5 - 00001ff5 [    1] */,
-    0x00fff810 /* 00001fff - 0000200f [   17] */,
-    0x01014007 /* 00002028 - 0000202f [    8] */,
-    0x0102f810 /* 0000205f - 0000206f [   17] */,
-    0x01039001 /* 00002072 - 00002073 [    2] */,
-    0x01047800 /* 0000208f - 0000208f [    1] */,
-    0x0104e802 /* 0000209d - 0000209f [    3] */,
-    0x0106080e /* 000020c1 - 000020cf [   15] */,
-    0x0107880e /* 000020f1 - 000020ff [   15] */,
-    0x010c6003 /* 0000218c - 0000218f [    4] */,
-    0x01213818 /* 00002427 - 0000243f [   25] */,
-    0x01225814 /* 0000244b - 0000245f [   21] */,
-    0x015ba001 /* 00002b74 - 00002b75 [    2] */,
-    0x015cb000 /* 00002b96 - 00002b96 [    1] */,
-    0x0167a004 /* 00002cf4 - 00002cf8 [    5] */,
-    0x01693000 /* 00002d26 - 00002d26 [    1] */,
-    0x01694004 /* 00002d28 - 00002d2c [    5] */,
-    0x01697001 /* 00002d2e - 00002d2f [    2] */,
-    0x016b4006 /* 00002d68 - 00002d6e [    7] */,
-    0x016b880d /* 00002d71 - 00002d7e [   14] */,
-    0x016cb808 /* 00002d97 - 00002d9f [    9] */,
-    0x016d3800 /* 00002da7 - 00002da7 [    1] */,
-    0x016d7800 /* 00002daf - 00002daf [    1] */,
-    0x016db800 /* 00002db7 - 00002db7 [    1] */,
-    0x016df800 /* 00002dbf - 00002dbf [    1] */,
-    0x016e3800 /* 00002dc7 - 00002dc7 [    1] */,
-    0x016e7800 /* 00002dcf - 00002dcf [    1] */,
-    0x016eb800 /* 00002dd7 - 00002dd7 [    1] */,
-    0x016ef800 /* 00002ddf - 00002ddf [    1] */,
-    0x0172f021 /* 00002e5e - 00002e7f [   34] */,
-    0x0174d000 /* 00002e9a - 00002e9a [    1] */,
-    0x0177a00b /* 00002ef4 - 00002eff [   12] */,
-    0x017eb019 /* 00002fd6 - 00002fef [   26] */,
-    0x01800000 /* 00003000 - 00003000 [    1] */,
-    0x01820000 /* 00003040 - 00003040 [    1] */,
-    0x0184b801 /* 00003097 - 00003098 [    2] */,
-    0x01880004 /* 00003100 - 00003104 [    5] */,
-    0x01898000 /* 00003130 - 00003130 [    1] */,
-    0x018c7800 /* 0000318f - 0000318f [    1] */,
-    0x018f200a /* 000031e4 - 000031ee [   11] */,
-    0x0190f800 /* 0000321f - 0000321f [    1] */,
-    0x05246802 /* 0000a48d - 0000a48f [    3] */,
-    0x05263808 /* 0000a4c7 - 0000a4cf [    9] */,
-    0x05316013 /* 0000a62c - 0000a63f [   20] */,
-    0x0537c007 /* 0000a6f8 - 0000a6ff [    8] */,
-    0x053e5804 /* 0000a7cb - 0000a7cf [    5] */,
-    0x053e9000 /* 0000a7d2 - 0000a7d2 [    1] */,
-    0x053ea000 /* 0000a7d4 - 0000a7d4 [    1] */,
-    0x053ed017 /* 0000a7da - 0000a7f1 [   24] */,
-    0x05416802 /* 0000a82d - 0000a82f [    3] */,
-    0x0541d005 /* 0000a83a - 0000a83f [    6] */,
-    0x0543c007 /* 0000a878 - 0000a87f [    8] */,
-    0x05463007 /* 0000a8c6 - 0000a8cd [    8] */,
-    0x0546d005 /* 0000a8da - 0000a8df [    6] */,
-    0x054aa00a /* 0000a954 - 0000a95e [   11] */,
-    0x054be802 /* 0000a97d - 0000a97f [    3] */,
-    0x054e7000 /* 0000a9ce - 0000a9ce [    1] */,
-    0x054ed003 /* 0000a9da - 0000a9dd [    4] */,
-    0x054ff800 /* 0000a9ff - 0000a9ff [    1] */,
-    0x0551b808 /* 0000aa37 - 0000aa3f [    9] */,
-    0x05527001 /* 0000aa4e - 0000aa4f [    2] */,
-    0x0552d001 /* 0000aa5a - 0000aa5b [    2] */,
-    0x05561817 /* 0000aac3 - 0000aada [   24] */,
-    0x0557b809 /* 0000aaf7 - 0000ab00 [   10] */,
-    0x05583801 /* 0000ab07 - 0000ab08 [    2] */,
-    0x05587801 /* 0000ab0f - 0000ab10 [    2] */,
-    0x0558b808 /* 0000ab17 - 0000ab1f [    9] */,
-    0x05593800 /* 0000ab27 - 0000ab27 [    1] */,
-    0x05597800 /* 0000ab2f - 0000ab2f [    1] */,
-    0x055b6003 /* 0000ab6c - 0000ab6f [    4] */,
-    0x055f7001 /* 0000abee - 0000abef [    2] */,
-    0x055fd005 /* 0000abfa - 0000abff [    6] */,
-    0x06bd200b /* 0000d7a4 - 0000d7af [   12] */,
-    0x06be3803 /* 0000d7c7 - 0000d7ca [    4] */,
-    0x06bfe7ff /* 0000d7fc - 0000dffb [ 2048] */,
-    0x06ffe7ff /* 0000dffc - 0000e7fb [ 2048] */,
-    0x073fe7ff /* 0000e7fc - 0000effb [ 2048] */,
-    0x077fe7ff /* 0000effc - 0000f7fb [ 2048] */,
-    0x07bfe103 /* 0000f7fc - 0000f8ff [  260] */,
-    0x07d37001 /* 0000fa6e - 0000fa6f [    2] */,
-    0x07d6d025 /* 0000fada - 0000faff [   38] */,
-    0x07d8380b /* 0000fb07 - 0000fb12 [   12] */,
-    0x07d8c004 /* 0000fb18 - 0000fb1c [    5] */,
-    0x07d9b800 /* 0000fb37 - 0000fb37 [    1] */,
-    0x07d9e800 /* 0000fb3d - 0000fb3d [    1] */,
-    0x07d9f800 /* 0000fb3f - 0000fb3f [    1] */,
-    0x07da1000 /* 0000fb42 - 0000fb42 [    1] */,
-    0x07da2800 /* 0000fb45 - 0000fb45 [    1] */,
-    0x07de180f /* 0000fbc3 - 0000fbd2 [   16] */,
-    0x07ec8001 /* 0000fd90 - 0000fd91 [    2] */,
-    0x07ee4006 /* 0000fdc8 - 0000fdce [    7] */,
-    0x07ee801f /* 0000fdd0 - 0000fdef [   32] */,
-    0x07f0d005 /* 0000fe1a - 0000fe1f [    6] */,
-    0x07f29800 /* 0000fe53 - 0000fe53 [    1] */,
-    0x07f33800 /* 0000fe67 - 0000fe67 [    1] */,
-    0x07f36003 /* 0000fe6c - 0000fe6f [    4] */,
-    0x07f3a800 /* 0000fe75 - 0000fe75 [    1] */,
-    0x07f7e803 /* 0000fefd - 0000ff00 [    4] */,
-    0x07fdf802 /* 0000ffbf - 0000ffc1 [    3] */,
-    0x07fe4001 /* 0000ffc8 - 0000ffc9 [    2] */,
-    0x07fe8001 /* 0000ffd0 - 0000ffd1 [    2] */,
-    0x07fec001 /* 0000ffd8 - 0000ffd9 [    2] */,
-    0x07fee802 /* 0000ffdd - 0000ffdf [    3] */,
-    0x07ff3800 /* 0000ffe7 - 0000ffe7 [    1] */,
-    0x07ff780c /* 0000ffef - 0000fffb [   13] */,
-    0x07fff001 /* 0000fffe - 0000ffff [    2] */,
-    0x08006000 /* 0001000c - 0001000c [    1] */,
-    0x08013800 /* 00010027 - 00010027 [    1] */,
-    0x0801d800 /* 0001003b - 0001003b [    1] */,
-    0x0801f000 /* 0001003e - 0001003e [    1] */,
-    0x08027001 /* 0001004e - 0001004f [    2] */,
-    0x0802f021 /* 0001005e - 0001007f [   34] */,
-    0x0807d804 /* 000100fb - 000100ff [    5] */,
-    0x08081803 /* 00010103 - 00010106 [    4] */,
-    0x0809a002 /* 00010134 - 00010136 [    3] */,
-    0x080c7800 /* 0001018f - 0001018f [    1] */,
-    0x080ce802 /* 0001019d - 0001019f [    3] */,
-    0x080d082e /* 000101a1 - 000101cf [   47] */,
-    0x080ff081 /* 000101fe - 0001027f [  130] */,
-    0x0814e802 /* 0001029d - 0001029f [    3] */,
-    0x0816880e /* 000102d1 - 000102df [   15] */,
-    0x0817e003 /* 000102fc - 000102ff [    4] */,
-    0x08192008 /* 00010324 - 0001032c [    9] */,
-    0x081a5804 /* 0001034b - 0001034f [    5] */,
-    0x081bd804 /* 0001037b - 0001037f [    5] */,
-    0x081cf000 /* 0001039e - 0001039e [    1] */,
-    0x081e2003 /* 000103c4 - 000103c7 [    4] */,
-    0x081eb029 /* 000103d6 - 000103ff [   42] */,
-    0x0824f001 /* 0001049e - 0001049f [    2] */,
-    0x08255005 /* 000104aa - 000104af [    6] */,
-    0x0826a003 /* 000104d4 - 000104d7 [    4] */,
-    0x0827e003 /* 000104fc - 000104ff [    4] */,
-    0x08294007 /* 00010528 - 0001052f [    8] */,
-    0x082b200a /* 00010564 - 0001056e [   11] */,
-    0x082bd800 /* 0001057b - 0001057b [    1] */,
-    0x082c5800 /* 0001058b - 0001058b [    1] */,
-    0x082c9800 /* 00010593 - 00010593 [    1] */,
-    0x082cb000 /* 00010596 - 00010596 [    1] */,
-    0x082d1000 /* 000105a2 - 000105a2 [    1] */,
-    0x082d9000 /* 000105b2 - 000105b2 [    1] */,
-    0x082dd000 /* 000105ba - 000105ba [    1] */,
-    0x082de842 /* 000105bd - 000105ff [   67] */,
-    0x0839b808 /* 00010737 - 0001073f [    9] */,
-    0x083ab009 /* 00010756 - 0001075f [   10] */,
-    0x083b4017 /* 00010768 - 0001077f [   24] */,
-    0x083c3000 /* 00010786 - 00010786 [    1] */,
-    0x083d8800 /* 000107b1 - 000107b1 [    1] */,
-    0x083dd844 /* 000107bb - 000107ff [   69] */,
-    0x08403001 /* 00010806 - 00010807 [    2] */,
-    0x08404800 /* 00010809 - 00010809 [    1] */,
-    0x0841b000 /* 00010836 - 00010836 [    1] */,
-    0x0841c802 /* 00010839 - 0001083b [    3] */,
-    0x0841e801 /* 0001083d - 0001083e [    2] */,
-    0x0842b000 /* 00010856 - 00010856 [    1] */,
-    0x0844f807 /* 0001089f - 000108a6 [    8] */,
-    0x0845802f /* 000108b0 - 000108df [   48] */,
-    0x08479800 /* 000108f3 - 000108f3 [    1] */,
-    0x0847b004 /* 000108f6 - 000108fa [    5] */,
-    0x0848e002 /* 0001091c - 0001091e [    3] */,
-    0x0849d004 /* 0001093a - 0001093e [    5] */,
-    0x084a003f /* 00010940 - 0001097f [   64] */,
-    0x084dc003 /* 000109b8 - 000109bb [    4] */,
-    0x084e8001 /* 000109d0 - 000109d1 [    2] */,
-    0x08502000 /* 00010a04 - 00010a04 [    1] */,
-    0x08503804 /* 00010a07 - 00010a0b [    5] */,
-    0x0850a000 /* 00010a14 - 00010a14 [    1] */,
-    0x0850c000 /* 00010a18 - 00010a18 [    1] */,
-    0x0851b001 /* 00010a36 - 00010a37 [    2] */,
-    0x0851d803 /* 00010a3b - 00010a3e [    4] */,
-    0x08524806 /* 00010a49 - 00010a4f [    7] */,
-    0x0852c806 /* 00010a59 - 00010a5f [    7] */,
-    0x0855001f /* 00010aa0 - 00010abf [   32] */,
-    0x08573803 /* 00010ae7 - 00010aea [    4] */,
-    0x0857b808 /* 00010af7 - 00010aff [    9] */,
-    0x0859b002 /* 00010b36 - 00010b38 [    3] */,
-    0x085ab001 /* 00010b56 - 00010b57 [    2] */,
-    0x085b9804 /* 00010b73 - 00010b77 [    5] */,
-    0x085c9006 /* 00010b92 - 00010b98 [    7] */,
-    0x085ce80b /* 00010b9d - 00010ba8 [   12] */,
-    0x085d804f /* 00010bb0 - 00010bff [   80] */,
-    0x08624836 /* 00010c49 - 00010c7f [   55] */,
-    0x0865980c /* 00010cb3 - 00010cbf [   13] */,
-    0x08679806 /* 00010cf3 - 00010cf9 [    7] */,
-    0x08694007 /* 00010d28 - 00010d2f [    8] */,
-    0x0869d125 /* 00010d3a - 00010e5f [  294] */,
-    0x0873f800 /* 00010e7f - 00010e7f [    1] */,
-    0x08755000 /* 00010eaa - 00010eaa [    1] */,
-    0x08757001 /* 00010eae - 00010eaf [    2] */,
-    0x0875904a /* 00010eb2 - 00010efc [   75] */,
-    0x08794007 /* 00010f28 - 00010f2f [    8] */,
-    0x087ad015 /* 00010f5a - 00010f6f [   22] */,
-    0x087c5025 /* 00010f8a - 00010faf [   38] */,
-    0x087e6013 /* 00010fcc - 00010fdf [   20] */,
-    0x087fb808 /* 00010ff7 - 00010fff [    9] */,
-    0x08827003 /* 0001104e - 00011051 [    4] */,
-    0x0883b008 /* 00011076 - 0001107e [    9] */,
-    0x0885e800 /* 000110bd - 000110bd [    1] */,
-    0x0886180c /* 000110c3 - 000110cf [   13] */,
-    0x08874806 /* 000110e9 - 000110ef [    7] */,
-    0x0887d005 /* 000110fa - 000110ff [    6] */,
-    0x0889a800 /* 00011135 - 00011135 [    1] */,
-    0x088a4007 /* 00011148 - 0001114f [    8] */,
-    0x088bb808 /* 00011177 - 0001117f [    9] */,
-    0x088f0000 /* 000111e0 - 000111e0 [    1] */,
-    0x088fa80a /* 000111f5 - 000111ff [   11] */,
-    0x08909000 /* 00011212 - 00011212 [    1] */,
-    0x0892103d /* 00011242 - 0001127f [   62] */,
-    0x08943800 /* 00011287 - 00011287 [    1] */,
-    0x08944800 /* 00011289 - 00011289 [    1] */,
-    0x08947000 /* 0001128e - 0001128e [    1] */,
-    0x0894f000 /* 0001129e - 0001129e [    1] */,
-    0x08955005 /* 000112aa - 000112af [    6] */,
-    0x08975804 /* 000112eb - 000112ef [    5] */,
-    0x0897d005 /* 000112fa - 000112ff [    6] */,
-    0x08982000 /* 00011304 - 00011304 [    1] */,
-    0x08986801 /* 0001130d - 0001130e [    2] */,
-    0x08988801 /* 00011311 - 00011312 [    2] */,
-    0x08994800 /* 00011329 - 00011329 [    1] */,
-    0x08998800 /* 00011331 - 00011331 [    1] */,
-    0x0899a000 /* 00011334 - 00011334 [    1] */,
-    0x0899d000 /* 0001133a - 0001133a [    1] */,
-    0x089a2801 /* 00011345 - 00011346 [    2] */,
-    0x089a4801 /* 00011349 - 0001134a [    2] */,
-    0x089a7001 /* 0001134e - 0001134f [    2] */,
-    0x089a8805 /* 00011351 - 00011356 [    6] */,
-    0x089ac004 /* 00011358 - 0001135c [    5] */,
-    0x089b2001 /* 00011364 - 00011365 [    2] */,
-    0x089b6802 /* 0001136d - 0001136f [    3] */,
-    0x089ba88a /* 00011375 - 000113ff [  139] */,
-    0x08a2e000 /* 0001145c - 0001145c [    1] */,
-    0x08a3101d /* 00011462 - 0001147f [   30] */,
-    0x08a64007 /* 000114c8 - 000114cf [    8] */,
-    0x08a6d0a5 /* 000114da - 0001157f [  166] */,
-    0x08adb001 /* 000115b6 - 000115b7 [    2] */,
-    0x08aef021 /* 000115de - 000115ff [   34] */,
-    0x08b2280a /* 00011645 - 0001164f [   11] */,
-    0x08b2d005 /* 0001165a - 0001165f [    6] */,
-    0x08b36812 /* 0001166d - 0001167f [   19] */,
-    0x08b5d005 /* 000116ba - 000116bf [    6] */,
-    0x08b65035 /* 000116ca - 000116ff [   54] */,
-    0x08b8d801 /* 0001171b - 0001171c [    2] */,
-    0x08b96003 /* 0001172c - 0001172f [    4] */,
-    0x08ba38b8 /* 00011747 - 000117ff [  185] */,
-    0x08c1e063 /* 0001183c - 0001189f [  100] */,
-    0x08c7980b /* 000118f3 - 000118fe [   12] */,
-    0x08c83801 /* 00011907 - 00011908 [    2] */,
-    0x08c85001 /* 0001190a - 0001190b [    2] */,
-    0x08c8a000 /* 00011914 - 00011914 [    1] */,
-    0x08c8b800 /* 00011917 - 00011917 [    1] */,
-    0x08c9b000 /* 00011936 - 00011936 [    1] */,
-    0x08c9c801 /* 00011939 - 0001193a [    2] */,
-    0x08ca3808 /* 00011947 - 0001194f [    9] */,
-    0x08cad045 /* 0001195a - 0001199f [   70] */,
-    0x08cd4001 /* 000119a8 - 000119a9 [    2] */,
-    0x08cec001 /* 000119d8 - 000119d9 [    2] */,
-    0x08cf281a /* 000119e5 - 000119ff [   27] */,
-    0x08d24007 /* 00011a48 - 00011a4f [    8] */,
-    0x08d5180c /* 00011aa3 - 00011aaf [   13] */,
-    0x08d7c806 /* 00011af9 - 00011aff [    7] */,
-    0x08d850f5 /* 00011b0a - 00011bff [  246] */,
-    0x08e04800 /* 00011c09 - 00011c09 [    1] */,
-    0x08e1b800 /* 00011c37 - 00011c37 [    1] */,
-    0x08e23009 /* 00011c46 - 00011c4f [   10] */,
-    0x08e36802 /* 00011c6d - 00011c6f [    3] */,
-    0x08e48001 /* 00011c90 - 00011c91 [    2] */,
-    0x08e54000 /* 00011ca8 - 00011ca8 [    1] */,
-    0x08e5b848 /* 00011cb7 - 00011cff [   73] */,
-    0x08e83800 /* 00011d07 - 00011d07 [    1] */,
-    0x08e85000 /* 00011d0a - 00011d0a [    1] */,
-    0x08e9b802 /* 00011d37 - 00011d39 [    3] */,
-    0x08e9d800 /* 00011d3b - 00011d3b [    1] */,
-    0x08e9f000 /* 00011d3e - 00011d3e [    1] */,
-    0x08ea4007 /* 00011d48 - 00011d4f [    8] */,
-    0x08ead005 /* 00011d5a - 00011d5f [    6] */,
-    0x08eb3000 /* 00011d66 - 00011d66 [    1] */,
-    0x08eb4800 /* 00011d69 - 00011d69 [    1] */,
-    0x08ec7800 /* 00011d8f - 00011d8f [    1] */,
-    0x08ec9000 /* 00011d92 - 00011d92 [    1] */,
-    0x08ecc806 /* 00011d99 - 00011d9f [    7] */,
-    0x08ed5135 /* 00011daa - 00011edf [  310] */,
-    0x08f7c806 /* 00011ef9 - 00011eff [    7] */,
-    0x08f88800 /* 00011f11 - 00011f11 [    1] */,
-    0x08f9d802 /* 00011f3b - 00011f3d [    3] */,
-    0x08fad055 /* 00011f5a - 00011faf [   86] */,
-    0x08fd880e /* 00011fb1 - 00011fbf [   15] */,
-    0x08ff900c /* 00011ff2 - 00011ffe [   13] */,
-    0x091cd065 /* 0001239a - 000123ff [  102] */,
-    0x09237800 /* 0001246f - 0001246f [    1] */,
-    0x0923a80a /* 00012475 - 0001247f [   11] */,
-    0x092a27ff /* 00012544 - 00012d43 [ 2048] */,
-    0x096a224b /* 00012d44 - 00012f8f [  588] */,
-    0x097f980c /* 00012ff3 - 00012fff [   13] */,
-    0x09a1800f /* 00013430 - 0001343f [   16] */,
-    0x09a2b7ff /* 00013456 - 00013c55 [ 2048] */,
-    0x09e2b7a9 /* 00013c56 - 000143ff [ 1962] */,
-    0x0a323fff /* 00014647 - 00014e46 [ 2048] */,
-    0x0a723fff /* 00014e47 - 00015646 [ 2048] */,
-    0x0ab23fff /* 00015647 - 00015e46 [ 2048] */,
-    0x0af23fff /* 00015e47 - 00016646 [ 2048] */,
-    0x0b3239b8 /* 00016647 - 000167ff [  441] */,
-    0x0b51c806 /* 00016a39 - 00016a3f [    7] */,
-    0x0b52f800 /* 00016a5f - 00016a5f [    1] */,
-    0x0b535003 /* 00016a6a - 00016a6d [    4] */,
-    0x0b55f800 /* 00016abf - 00016abf [    1] */,
-    0x0b565005 /* 00016aca - 00016acf [    6] */,
-    0x0b577001 /* 00016aee - 00016aef [    2] */,
-    0x0b57b009 /* 00016af6 - 00016aff [   10] */,
-    0x0b5a3009 /* 00016b46 - 00016b4f [   10] */,
-    0x0b5ad000 /* 00016b5a - 00016b5a [    1] */,
-    0x0b5b1000 /* 00016b62 - 00016b62 [    1] */,
-    0x0b5bc004 /* 00016b78 - 00016b7c [    5] */,
-    0x0b5c82af /* 00016b90 - 00016e3f [  688] */,
-    0x0b74d864 /* 00016e9b - 00016eff [  101] */,
-    0x0b7a5803 /* 00016f4b - 00016f4e [    4] */,
-    0x0b7c4006 /* 00016f88 - 00016f8e [    7] */,
-    0x0b7d003f /* 00016fa0 - 00016fdf [   64] */,
-    0x0b7f280a /* 00016fe5 - 00016fef [   11] */,
-    0x0b7f900d /* 00016ff2 - 00016fff [   14] */,
-    0x0c3fc007 /* 000187f8 - 000187ff [    8] */,
-    0x0c66b029 /* 00018cd6 - 00018cff [   42] */,
-    0x0c684fff /* 00018d09 - 00019508 [ 2048] */,
-    0x0ca84fff /* 00019509 - 00019d08 [ 2048] */,
-    0x0ce84fff /* 00019d09 - 0001a508 [ 2048] */,
-    0x0d284fff /* 0001a509 - 0001ad08 [ 2048] */,
-    0x0d684ae6 /* 0001ad09 - 0001afef [  743] */,
-    0x0d7fa000 /* 0001aff4 - 0001aff4 [    1] */,
-    0x0d7fe000 /* 0001affc - 0001affc [    1] */,
-    0x0d7ff800 /* 0001afff - 0001afff [    1] */,
-    0x0d89180e /* 0001b123 - 0001b131 [   15] */,
-    0x0d89981c /* 0001b133 - 0001b14f [   29] */,
-    0x0d8a9801 /* 0001b153 - 0001b154 [    2] */,
-    0x0d8ab00d /* 0001b156 - 0001b163 [   14] */,
-    0x0d8b4007 /* 0001b168 - 0001b16f [    8] */,
-    0x0d97e7ff /* 0001b2fc - 0001bafb [ 2048] */,
-    0x0dd7e103 /* 0001bafc - 0001bbff [  260] */,
-    0x0de35804 /* 0001bc6b - 0001bc6f [    5] */,
-    0x0de3e802 /* 0001bc7d - 0001bc7f [    3] */,
-    0x0de44806 /* 0001bc89 - 0001bc8f [    7] */,
-    0x0de4d001 /* 0001bc9a - 0001bc9b [    2] */,
-    0x0de507ff /* 0001bca0 - 0001c49f [ 2048] */,
-    0x0e2507ff /* 0001c4a0 - 0001cc9f [ 2048] */,
-    0x0e65025f /* 0001cca0 - 0001ceff [  608] */,
-    0x0e797001 /* 0001cf2e - 0001cf2f [    2] */,
-    0x0e7a3808 /* 0001cf47 - 0001cf4f [    9] */,
-    0x0e7e203b /* 0001cfc4 - 0001cfff [   60] */,
-    0x0e87b009 /* 0001d0f6 - 0001d0ff [   10] */,
-    0x0e893801 /* 0001d127 - 0001d128 [    2] */,
-    0x0e8b9807 /* 0001d173 - 0001d17a [    8] */,
-    0x0e8f5814 /* 0001d1eb - 0001d1ff [   21] */,
-    0x0e923079 /* 0001d246 - 0001d2bf [  122] */,
-    0x0e96a00b /* 0001d2d4 - 0001d2df [   12] */,
-    0x0e97a00b /* 0001d2f4 - 0001d2ff [   12] */,
-    0x0e9ab808 /* 0001d357 - 0001d35f [    9] */,
-    0x0e9bc886 /* 0001d379 - 0001d3ff [  135] */,
-    0x0ea2a800 /* 0001d455 - 0001d455 [    1] */,
-    0x0ea4e800 /* 0001d49d - 0001d49d [    1] */,
-    0x0ea50001 /* 0001d4a0 - 0001d4a1 [    2] */,
-    0x0ea51801 /* 0001d4a3 - 0001d4a4 [    2] */,
-    0x0ea53801 /* 0001d4a7 - 0001d4a8 [    2] */,
-    0x0ea56800 /* 0001d4ad - 0001d4ad [    1] */,
-    0x0ea5d000 /* 0001d4ba - 0001d4ba [    1] */,
-    0x0ea5e000 /* 0001d4bc - 0001d4bc [    1] */,
-    0x0ea62000 /* 0001d4c4 - 0001d4c4 [    1] */,
-    0x0ea83000 /* 0001d506 - 0001d506 [    1] */,
-    0x0ea85801 /* 0001d50b - 0001d50c [    2] */,
-    0x0ea8a800 /* 0001d515 - 0001d515 [    1] */,
-    0x0ea8e800 /* 0001d51d - 0001d51d [    1] */,
-    0x0ea9d000 /* 0001d53a - 0001d53a [    1] */,
-    0x0ea9f800 /* 0001d53f - 0001d53f [    1] */,
-    0x0eaa2800 /* 0001d545 - 0001d545 [    1] */,
-    0x0eaa3802 /* 0001d547 - 0001d549 [    3] */,
-    0x0eaa8800 /* 0001d551 - 0001d551 [    1] */,
-    0x0eb53001 /* 0001d6a6 - 0001d6a7 [    2] */,
-    0x0ebe6001 /* 0001d7cc - 0001d7cd [    2] */,
-    0x0ed4600e /* 0001da8c - 0001da9a [   15] */,
-    0x0ed50000 /* 0001daa0 - 0001daa0 [    1] */,
-    0x0ed5844f /* 0001dab0 - 0001deff [ 1104] */,
-    0x0ef8f805 /* 0001df1f - 0001df24 [    6] */,
-    0x0ef958d4 /* 0001df2b - 0001dfff [  213] */,
-    0x0f003800 /* 0001e007 - 0001e007 [    1] */,
-    0x0f00c801 /* 0001e019 - 0001e01a [    2] */,
-    0x0f011000 /* 0001e022 - 0001e022 [    1] */,
-    0x0f012800 /* 0001e025 - 0001e025 [    1] */,
-    0x0f015804 /* 0001e02b - 0001e02f [    5] */,
-    0x0f037020 /* 0001e06e - 0001e08e [   33] */,
-    0x0f04806f /* 0001e090 - 0001e0ff [  112] */,
-    0x0f096802 /* 0001e12d - 0001e12f [    3] */,
-    0x0f09f001 /* 0001e13e - 0001e13f [    2] */,
-    0x0f0a5003 /* 0001e14a - 0001e14d [    4] */,
-    0x0f0a813f /* 0001e150 - 0001e28f [  320] */,
-    0x0f157810 /* 0001e2af - 0001e2bf [   17] */,
-    0x0f17d004 /* 0001e2fa - 0001e2fe [    5] */,
-    0x0f1801cf /* 0001e300 - 0001e4cf [  464] */,
-    0x0f27d2e5 /* 0001e4fa - 0001e7df [  742] */,
-    0x0f3f3800 /* 0001e7e7 - 0001e7e7 [    1] */,
-    0x0f3f6000 /* 0001e7ec - 0001e7ec [    1] */,
-    0x0f3f7800 /* 0001e7ef - 0001e7ef [    1] */,
-    0x0f3ff800 /* 0001e7ff - 0001e7ff [    1] */,
-    0x0f462801 /* 0001e8c5 - 0001e8c6 [    2] */,
-    0x0f46b828 /* 0001e8d7 - 0001e8ff [   41] */,
-    0x0f4a6003 /* 0001e94c - 0001e94f [    4] */,
-    0x0f4ad003 /* 0001e95a - 0001e95d [    4] */,
-    0x0f4b0310 /* 0001e960 - 0001ec70 [  785] */,
-    0x0f65a84b /* 0001ecb5 - 0001ed00 [   76] */,
-    0x0f69f0c1 /* 0001ed3e - 0001edff [  194] */,
-    0x0f702000 /* 0001ee04 - 0001ee04 [    1] */,
-    0x0f710000 /* 0001ee20 - 0001ee20 [    1] */,
-    0x0f711800 /* 0001ee23 - 0001ee23 [    1] */,
-    0x0f712801 /* 0001ee25 - 0001ee26 [    2] */,
-    0x0f714000 /* 0001ee28 - 0001ee28 [    1] */,
-    0x0f719800 /* 0001ee33 - 0001ee33 [    1] */,
-    0x0f71c000 /* 0001ee38 - 0001ee38 [    1] */,
-    0x0f71d000 /* 0001ee3a - 0001ee3a [    1] */,
-    0x0f71e005 /* 0001ee3c - 0001ee41 [    6] */,
-    0x0f721803 /* 0001ee43 - 0001ee46 [    4] */,
-    0x0f724000 /* 0001ee48 - 0001ee48 [    1] */,
-    0x0f725000 /* 0001ee4a - 0001ee4a [    1] */,
-    0x0f726000 /* 0001ee4c - 0001ee4c [    1] */,
-    0x0f728000 /* 0001ee50 - 0001ee50 [    1] */,
-    0x0f729800 /* 0001ee53 - 0001ee53 [    1] */,
-    0x0f72a801 /* 0001ee55 - 0001ee56 [    2] */,
-    0x0f72c000 /* 0001ee58 - 0001ee58 [    1] */,
-    0x0f72d000 /* 0001ee5a - 0001ee5a [    1] */,
-    0x0f72e000 /* 0001ee5c - 0001ee5c [    1] */,
-    0x0f72f000 /* 0001ee5e - 0001ee5e [    1] */,
-    0x0f730000 /* 0001ee60 - 0001ee60 [    1] */,
-    0x0f731800 /* 0001ee63 - 0001ee63 [    1] */,
-    0x0f732801 /* 0001ee65 - 0001ee66 [    2] */,
-    0x0f735800 /* 0001ee6b - 0001ee6b [    1] */,
-    0x0f739800 /* 0001ee73 - 0001ee73 [    1] */,
-    0x0f73c000 /* 0001ee78 - 0001ee78 [    1] */,
-    0x0f73e800 /* 0001ee7d - 0001ee7d [    1] */,
-    0x0f73f800 /* 0001ee7f - 0001ee7f [    1] */,
-    0x0f745000 /* 0001ee8a - 0001ee8a [    1] */,
-    0x0f74e004 /* 0001ee9c - 0001eea0 [    5] */,
-    0x0f752000 /* 0001eea4 - 0001eea4 [    1] */,
-    0x0f755000 /* 0001eeaa - 0001eeaa [    1] */,
-    0x0f75e033 /* 0001eebc - 0001eeef [   52] */,
-    0x0f77910d /* 0001eef2 - 0001efff [  270] */,
-    0x0f816003 /* 0001f02c - 0001f02f [    4] */,
-    0x0f84a00b /* 0001f094 - 0001f09f [   12] */,
-    0x0f857801 /* 0001f0af - 0001f0b0 [    2] */,
-    0x0f860000 /* 0001f0c0 - 0001f0c0 [    1] */,
-    0x0f868000 /* 0001f0d0 - 0001f0d0 [    1] */,
-    0x0f87b009 /* 0001f0f6 - 0001f0ff [   10] */,
-    0x0f8d7037 /* 0001f1ae - 0001f1e5 [   56] */,
-    0x0f90180c /* 0001f203 - 0001f20f [   13] */,
-    0x0f91e003 /* 0001f23c - 0001f23f [    4] */,
-    0x0f924806 /* 0001f249 - 0001f24f [    7] */,
-    0x0f92900d /* 0001f252 - 0001f25f [   14] */,
-    0x0f933099 /* 0001f266 - 0001f2ff [  154] */,
-    0x0fb6c003 /* 0001f6d8 - 0001f6db [    4] */,
-    0x0fb76802 /* 0001f6ed - 0001f6ef [    3] */,
-    0x0fb7e802 /* 0001f6fd - 0001f6ff [    3] */,
-    0x0fbbb803 /* 0001f777 - 0001f77a [    4] */,
-    0x0fbed005 /* 0001f7da - 0001f7df [    6] */,
-    0x0fbf6003 /* 0001f7ec - 0001f7ef [    4] */,
-    0x0fbf880e /* 0001f7f1 - 0001f7ff [   15] */,
-    0x0fc06003 /* 0001f80c - 0001f80f [    4] */,
-    0x0fc24007 /* 0001f848 - 0001f84f [    8] */,
-    0x0fc2d005 /* 0001f85a - 0001f85f [    6] */,
-    0x0fc44007 /* 0001f888 - 0001f88f [    8] */,
-    0x0fc57001 /* 0001f8ae - 0001f8af [    2] */,
-    0x0fc5904d /* 0001f8b2 - 0001f8ff [   78] */,
-    0x0fd2a00b /* 0001fa54 - 0001fa5f [   12] */,
-    0x0fd37001 /* 0001fa6e - 0001fa6f [    2] */,
-    0x0fd3e802 /* 0001fa7d - 0001fa7f [    3] */,
-    0x0fd44806 /* 0001fa89 - 0001fa8f [    7] */,
-    0x0fd5f000 /* 0001fabe - 0001fabe [    1] */,
-    0x0fd63007 /* 0001fac6 - 0001facd [    8] */,
-    0x0fd6e003 /* 0001fadc - 0001fadf [    4] */,
-    0x0fd74806 /* 0001fae9 - 0001faef [    7] */,
-    0x0fd7c806 /* 0001faf9 - 0001faff [    7] */,
-    0x0fdc9800 /* 0001fb93 - 0001fb93 [    1] */,
-    0x0fde5824 /* 0001fbcb - 0001fbef [   37] */,
-    0x0fdfd405 /* 0001fbfa - 0001ffff [ 1030] */,
-    0x1537001f /* 0002a6e0 - 0002a6ff [   32] */,
-    0x15b9d005 /* 0002b73a - 0002b73f [    6] */,
-    0x15c0f001 /* 0002b81e - 0002b81f [    2] */,
-    0x1675100d /* 0002cea2 - 0002ceaf [   14] */,
-    0x175f080e /* 0002ebe1 - 0002ebef [   15] */,
-    0x1772f7ff /* 0002ee5e - 0002f65d [ 2048] */,
-    0x17b2f1a1 /* 0002f65e - 0002f7ff [  418] */,
-    0x17d0f5e1 /* 0002fa1e - 0002ffff [ 1506] */,
-    0x189a5804 /* 0003134b - 0003134f [    5] */,
-    0x191d87ff /* 000323b0 - 00032baf [ 2048] */,
-    0x195d87ff /* 00032bb0 - 000333af [ 2048] */,
-    0x199d87ff /* 000333b0 - 00033baf [ 2048] */,
-    0x19dd87ff /* 00033bb0 - 000343af [ 2048] */,
-    0x1a1d87ff /* 000343b0 - 00034baf [ 2048] */,
-    0x1a5d87ff /* 00034bb0 - 000353af [ 2048] */,
-    0x1a9d87ff /* 000353b0 - 00035baf [ 2048] */,
-    0x1add87ff /* 00035bb0 - 000363af [ 2048] */,
-    0x1b1d87ff /* 000363b0 - 00036baf [ 2048] */,
-    0x1b5d87ff /* 00036bb0 - 000373af [ 2048] */,
-    0x1b9d87ff /* 000373b0 - 00037baf [ 2048] */,
-    0x1bdd87ff /* 00037bb0 - 000383af [ 2048] */,
-    0x1c1d87ff /* 000383b0 - 00038baf [ 2048] */,
-    0x1c5d87ff /* 00038bb0 - 000393af [ 2048] */,
-    0x1c9d87ff /* 000393b0 - 00039baf [ 2048] */,
-    0x1cdd87ff /* 00039bb0 - 0003a3af [ 2048] */,
-    0x1d1d87ff /* 0003a3b0 - 0003abaf [ 2048] */,
-    0x1d5d87ff /* 0003abb0 - 0003b3af [ 2048] */,
-    0x1d9d87ff /* 0003b3b0 - 0003bbaf [ 2048] */,
-    0x1ddd87ff /* 0003bbb0 - 0003c3af [ 2048] */,
-    0x1e1d87ff /* 0003c3b0 - 0003cbaf [ 2048] */,
-    0x1e5d87ff /* 0003cbb0 - 0003d3af [ 2048] */,
-    0x1e9d87ff /* 0003d3b0 - 0003dbaf [ 2048] */,
-    0x1edd87ff /* 0003dbb0 - 0003e3af [ 2048] */,
-    0x1f1d87ff /* 0003e3b0 - 0003ebaf [ 2048] */,
-    0x1f5d87ff /* 0003ebb0 - 0003f3af [ 2048] */,
-    0x1f9d87ff /* 0003f3b0 - 0003fbaf [ 2048] */,
-    0x1fdd87ff /* 0003fbb0 - 000403af [ 2048] */,
-    0x201d87ff /* 000403b0 - 00040baf [ 2048] */,
-    0x205d87ff /* 00040bb0 - 000413af [ 2048] */,
-    0x209d87ff /* 000413b0 - 00041baf [ 2048] */,
-    0x20dd87ff /* 00041bb0 - 000423af [ 2048] */,
-    0x211d87ff /* 000423b0 - 00042baf [ 2048] */,
-    0x215d87ff /* 00042bb0 - 000433af [ 2048] */,
-    0x219d87ff /* 000433b0 - 00043baf [ 2048] */,
-    0x21dd87ff /* 00043bb0 - 000443af [ 2048] */,
-    0x221d87ff /* 000443b0 - 00044baf [ 2048] */,
-    0x225d87ff /* 00044bb0 - 000453af [ 2048] */,
-    0x229d87ff /* 000453b0 - 00045baf [ 2048] */,
-    0x22dd87ff /* 00045bb0 - 000463af [ 2048] */,
-    0x231d87ff /* 000463b0 - 00046baf [ 2048] */,
-    0x235d87ff /* 00046bb0 - 000473af [ 2048] */,
-    0x239d87ff /* 000473b0 - 00047baf [ 2048] */,
-    0x23dd87ff /* 00047bb0 - 000483af [ 2048] */,
-    0x241d87ff /* 000483b0 - 00048baf [ 2048] */,
-    0x245d87ff /* 00048bb0 - 000493af [ 2048] */,
-    0x249d87ff /* 000493b0 - 00049baf [ 2048] */,
-    0x24dd87ff /* 00049bb0 - 0004a3af [ 2048] */,
-    0x251d87ff /* 0004a3b0 - 0004abaf [ 2048] */,
-    0x255d87ff /* 0004abb0 - 0004b3af [ 2048] */,
-    0x259d87ff /* 0004b3b0 - 0004bbaf [ 2048] */,
-    0x25dd87ff /* 0004bbb0 - 0004c3af [ 2048] */,
-    0x261d87ff /* 0004c3b0 - 0004cbaf [ 2048] */,
-    0x265d87ff /* 0004cbb0 - 0004d3af [ 2048] */,
-    0x269d87ff /* 0004d3b0 - 0004dbaf [ 2048] */,
-    0x26dd87ff /* 0004dbb0 - 0004e3af [ 2048] */,
-    0x271d87ff /* 0004e3b0 - 0004ebaf [ 2048] */,
-    0x275d87ff /* 0004ebb0 - 0004f3af [ 2048] */,
-    0x279d87ff /* 0004f3b0 - 0004fbaf [ 2048] */,
-    0x27dd87ff /* 0004fbb0 - 000503af [ 2048] */,
-    0x281d87ff /* 000503b0 - 00050baf [ 2048] */,
-    0x285d87ff /* 00050bb0 - 000513af [ 2048] */,
-    0x289d87ff /* 000513b0 - 00051baf [ 2048] */,
-    0x28dd87ff /* 00051bb0 - 000523af [ 2048] */,
-    0x291d87ff /* 000523b0 - 00052baf [ 2048] */,
-    0x295d87ff /* 00052bb0 - 000533af [ 2048] */,
-    0x299d87ff /* 000533b0 - 00053baf [ 2048] */,
-    0x29dd87ff /* 00053bb0 - 000543af [ 2048] */,
-    0x2a1d87ff /* 000543b0 - 00054baf [ 2048] */,
-    0x2a5d87ff /* 00054bb0 - 000553af [ 2048] */,
-    0x2a9d87ff /* 000553b0 - 00055baf [ 2048] */,
-    0x2add87ff /* 00055bb0 - 000563af [ 2048] */,
-    0x2b1d87ff /* 000563b0 - 00056baf [ 2048] */,
-    0x2b5d87ff /* 00056bb0 - 000573af [ 2048] */,
-    0x2b9d87ff /* 000573b0 - 00057baf [ 2048] */,
-    0x2bdd87ff /* 00057bb0 - 000583af [ 2048] */,
-    0x2c1d87ff /* 000583b0 - 00058baf [ 2048] */,
-    0x2c5d87ff /* 00058bb0 - 000593af [ 2048] */,
-    0x2c9d87ff /* 000593b0 - 00059baf [ 2048] */,
-    0x2cdd87ff /* 00059bb0 - 0005a3af [ 2048] */,
-    0x2d1d87ff /* 0005a3b0 - 0005abaf [ 2048] */,
-    0x2d5d87ff /* 0005abb0 - 0005b3af [ 2048] */,
-    0x2d9d87ff /* 0005b3b0 - 0005bbaf [ 2048] */,
-    0x2ddd87ff /* 0005bbb0 - 0005c3af [ 2048] */,
-    0x2e1d87ff /* 0005c3b0 - 0005cbaf [ 2048] */,
-    0x2e5d87ff /* 0005cbb0 - 0005d3af [ 2048] */,
-    0x2e9d87ff /* 0005d3b0 - 0005dbaf [ 2048] */,
-    0x2edd87ff /* 0005dbb0 - 0005e3af [ 2048] */,
-    0x2f1d87ff /* 0005e3b0 - 0005ebaf [ 2048] */,
-    0x2f5d87ff /* 0005ebb0 - 0005f3af [ 2048] */,
-    0x2f9d87ff /* 0005f3b0 - 0005fbaf [ 2048] */,
-    0x2fdd87ff /* 0005fbb0 - 000603af [ 2048] */,
-    0x301d87ff /* 000603b0 - 00060baf [ 2048] */,
-    0x305d87ff /* 00060bb0 - 000613af [ 2048] */,
-    0x309d87ff /* 000613b0 - 00061baf [ 2048] */,
-    0x30dd87ff /* 00061bb0 - 000623af [ 2048] */,
-    0x311d87ff /* 000623b0 - 00062baf [ 2048] */,
-    0x315d87ff /* 00062bb0 - 000633af [ 2048] */,
-    0x319d87ff /* 000633b0 - 00063baf [ 2048] */,
-    0x31dd87ff /* 00063bb0 - 000643af [ 2048] */,
-    0x321d87ff /* 000643b0 - 00064baf [ 2048] */,
-    0x325d87ff /* 00064bb0 - 000653af [ 2048] */,
-    0x329d87ff /* 000653b0 - 00065baf [ 2048] */,
-    0x32dd87ff /* 00065bb0 - 000663af [ 2048] */,
-    0x331d87ff /* 000663b0 - 00066baf [ 2048] */,
-    0x335d87ff /* 00066bb0 - 000673af [ 2048] */,
-    0x339d87ff /* 000673b0 - 00067baf [ 2048] */,
-    0x33dd87ff /* 00067bb0 - 000683af [ 2048] */,
-    0x341d87ff /* 000683b0 - 00068baf [ 2048] */,
-    0x345d87ff /* 00068bb0 - 000693af [ 2048] */,
-    0x349d87ff /* 000693b0 - 00069baf [ 2048] */,
-    0x34dd87ff /* 00069bb0 - 0006a3af [ 2048] */,
-    0x351d87ff /* 0006a3b0 - 0006abaf [ 2048] */,
-    0x355d87ff /* 0006abb0 - 0006b3af [ 2048] */,
-    0x359d87ff /* 0006b3b0 - 0006bbaf [ 2048] */,
-    0x35dd87ff /* 0006bbb0 - 0006c3af [ 2048] */,
-    0x361d87ff /* 0006c3b0 - 0006cbaf [ 2048] */,
-    0x365d87ff /* 0006cbb0 - 0006d3af [ 2048] */,
-    0x369d87ff /* 0006d3b0 - 0006dbaf [ 2048] */,
-    0x36dd87ff /* 0006dbb0 - 0006e3af [ 2048] */,
-    0x371d87ff /* 0006e3b0 - 0006ebaf [ 2048] */,
-    0x375d87ff /* 0006ebb0 - 0006f3af [ 2048] */,
-    0x379d87ff /* 0006f3b0 - 0006fbaf [ 2048] */,
-    0x37dd87ff /* 0006fbb0 - 000703af [ 2048] */,
-    0x381d87ff /* 000703b0 - 00070baf [ 2048] */,
-    0x385d87ff /* 00070bb0 - 000713af [ 2048] */,
-    0x389d87ff /* 000713b0 - 00071baf [ 2048] */,
-    0x38dd87ff /* 00071bb0 - 000723af [ 2048] */,
-    0x391d87ff /* 000723b0 - 00072baf [ 2048] */,
-    0x395d87ff /* 00072bb0 - 000733af [ 2048] */,
-    0x399d87ff /* 000733b0 - 00073baf [ 2048] */,
-    0x39dd87ff /* 00073bb0 - 000743af [ 2048] */,
-    0x3a1d87ff /* 000743b0 - 00074baf [ 2048] */,
-    0x3a5d87ff /* 00074bb0 - 000753af [ 2048] */,
-    0x3a9d87ff /* 000753b0 - 00075baf [ 2048] */,
-    0x3add87ff /* 00075bb0 - 000763af [ 2048] */,
-    0x3b1d87ff /* 000763b0 - 00076baf [ 2048] */,
-    0x3b5d87ff /* 00076bb0 - 000773af [ 2048] */,
-    0x3b9d87ff /* 000773b0 - 00077baf [ 2048] */,
-    0x3bdd87ff /* 00077bb0 - 000783af [ 2048] */,
-    0x3c1d87ff /* 000783b0 - 00078baf [ 2048] */,
-    0x3c5d87ff /* 00078bb0 - 000793af [ 2048] */,
-    0x3c9d87ff /* 000793b0 - 00079baf [ 2048] */,
-    0x3cdd87ff /* 00079bb0 - 0007a3af [ 2048] */,
-    0x3d1d87ff /* 0007a3b0 - 0007abaf [ 2048] */,
-    0x3d5d87ff /* 0007abb0 - 0007b3af [ 2048] */,
-    0x3d9d87ff /* 0007b3b0 - 0007bbaf [ 2048] */,
-    0x3ddd87ff /* 0007bbb0 - 0007c3af [ 2048] */,
-    0x3e1d87ff /* 0007c3b0 - 0007cbaf [ 2048] */,
-    0x3e5d87ff /* 0007cbb0 - 0007d3af [ 2048] */,
-    0x3e9d87ff /* 0007d3b0 - 0007dbaf [ 2048] */,
-    0x3edd87ff /* 0007dbb0 - 0007e3af [ 2048] */,
-    0x3f1d87ff /* 0007e3b0 - 0007ebaf [ 2048] */,
-    0x3f5d87ff /* 0007ebb0 - 0007f3af [ 2048] */,
-    0x3f9d87ff /* 0007f3b0 - 0007fbaf [ 2048] */,
-    0x3fdd87ff /* 0007fbb0 - 000803af [ 2048] */,
-    0x401d87ff /* 000803b0 - 00080baf [ 2048] */,
-    0x405d87ff /* 00080bb0 - 000813af [ 2048] */,
-    0x409d87ff /* 000813b0 - 00081baf [ 2048] */,
-    0x40dd87ff /* 00081bb0 - 000823af [ 2048] */,
-    0x411d87ff /* 000823b0 - 00082baf [ 2048] */,
-    0x415d87ff /* 00082bb0 - 000833af [ 2048] */,
-    0x419d87ff /* 000833b0 - 00083baf [ 2048] */,
-    0x41dd87ff /* 00083bb0 - 000843af [ 2048] */,
-    0x421d87ff /* 000843b0 - 00084baf [ 2048] */,
-    0x425d87ff /* 00084bb0 - 000853af [ 2048] */,
-    0x429d87ff /* 000853b0 - 00085baf [ 2048] */,
-    0x42dd87ff /* 00085bb0 - 000863af [ 2048] */,
-    0x431d87ff /* 000863b0 - 00086baf [ 2048] */,
-    0x435d87ff /* 00086bb0 - 000873af [ 2048] */,
-    0x439d87ff /* 000873b0 - 00087baf [ 2048] */,
-    0x43dd87ff /* 00087bb0 - 000883af [ 2048] */,
-    0x441d87ff /* 000883b0 - 00088baf [ 2048] */,
-    0x445d87ff /* 00088bb0 - 000893af [ 2048] */,
-    0x449d87ff /* 000893b0 - 00089baf [ 2048] */,
-    0x44dd87ff /* 00089bb0 - 0008a3af [ 2048] */,
-    0x451d87ff /* 0008a3b0 - 0008abaf [ 2048] */,
-    0x455d87ff /* 0008abb0 - 0008b3af [ 2048] */,
-    0x459d87ff /* 0008b3b0 - 0008bbaf [ 2048] */,
-    0x45dd87ff /* 0008bbb0 - 0008c3af [ 2048] */,
-    0x461d87ff /* 0008c3b0 - 0008cbaf [ 2048] */,
-    0x465d87ff /* 0008cbb0 - 0008d3af [ 2048] */,
-    0x469d87ff /* 0008d3b0 - 0008dbaf [ 2048] */,
-    0x46dd87ff /* 0008dbb0 - 0008e3af [ 2048] */,
-    0x471d87ff /* 0008e3b0 - 0008ebaf [ 2048] */,
-    0x475d87ff /* 0008ebb0 - 0008f3af [ 2048] */,
-    0x479d87ff /* 0008f3b0 - 0008fbaf [ 2048] */,
-    0x47dd87ff /* 0008fbb0 - 000903af [ 2048] */,
-    0x481d87ff /* 000903b0 - 00090baf [ 2048] */,
-    0x485d87ff /* 00090bb0 - 000913af [ 2048] */,
-    0x489d87ff /* 000913b0 - 00091baf [ 2048] */,
-    0x48dd87ff /* 00091bb0 - 000923af [ 2048] */,
-    0x491d87ff /* 000923b0 - 00092baf [ 2048] */,
-    0x495d87ff /* 00092bb0 - 000933af [ 2048] */,
-    0x499d87ff /* 000933b0 - 00093baf [ 2048] */,
-    0x49dd87ff /* 00093bb0 - 000943af [ 2048] */,
-    0x4a1d87ff /* 000943b0 - 00094baf [ 2048] */,
-    0x4a5d87ff /* 00094bb0 - 000953af [ 2048] */,
-    0x4a9d87ff /* 000953b0 - 00095baf [ 2048] */,
-    0x4add87ff /* 00095bb0 - 000963af [ 2048] */,
-    0x4b1d87ff /* 000963b0 - 00096baf [ 2048] */,
-    0x4b5d87ff /* 00096bb0 - 000973af [ 2048] */,
-    0x4b9d87ff /* 000973b0 - 00097baf [ 2048] */,
-    0x4bdd87ff /* 00097bb0 - 000983af [ 2048] */,
-    0x4c1d87ff /* 000983b0 - 00098baf [ 2048] */,
-    0x4c5d87ff /* 00098bb0 - 000993af [ 2048] */,
-    0x4c9d87ff /* 000993b0 - 00099baf [ 2048] */,
-    0x4cdd87ff /* 00099bb0 - 0009a3af [ 2048] */,
-    0x4d1d87ff /* 0009a3b0 - 0009abaf [ 2048] */,
-    0x4d5d87ff /* 0009abb0 - 0009b3af [ 2048] */,
-    0x4d9d87ff /* 0009b3b0 - 0009bbaf [ 2048] */,
-    0x4ddd87ff /* 0009bbb0 - 0009c3af [ 2048] */,
-    0x4e1d87ff /* 0009c3b0 - 0009cbaf [ 2048] */,
-    0x4e5d87ff /* 0009cbb0 - 0009d3af [ 2048] */,
-    0x4e9d87ff /* 0009d3b0 - 0009dbaf [ 2048] */,
-    0x4edd87ff /* 0009dbb0 - 0009e3af [ 2048] */,
-    0x4f1d87ff /* 0009e3b0 - 0009ebaf [ 2048] */,
-    0x4f5d87ff /* 0009ebb0 - 0009f3af [ 2048] */,
-    0x4f9d87ff /* 0009f3b0 - 0009fbaf [ 2048] */,
-    0x4fdd87ff /* 0009fbb0 - 000a03af [ 2048] */,
-    0x501d87ff /* 000a03b0 - 000a0baf [ 2048] */,
-    0x505d87ff /* 000a0bb0 - 000a13af [ 2048] */,
-    0x509d87ff /* 000a13b0 - 000a1baf [ 2048] */,
-    0x50dd87ff /* 000a1bb0 - 000a23af [ 2048] */,
-    0x511d87ff /* 000a23b0 - 000a2baf [ 2048] */,
-    0x515d87ff /* 000a2bb0 - 000a33af [ 2048] */,
-    0x519d87ff /* 000a33b0 - 000a3baf [ 2048] */,
-    0x51dd87ff /* 000a3bb0 - 000a43af [ 2048] */,
-    0x521d87ff /* 000a43b0 - 000a4baf [ 2048] */,
-    0x525d87ff /* 000a4bb0 - 000a53af [ 2048] */,
-    0x529d87ff /* 000a53b0 - 000a5baf [ 2048] */,
-    0x52dd87ff /* 000a5bb0 - 000a63af [ 2048] */,
-    0x531d87ff /* 000a63b0 - 000a6baf [ 2048] */,
-    0x535d87ff /* 000a6bb0 - 000a73af [ 2048] */,
-    0x539d87ff /* 000a73b0 - 000a7baf [ 2048] */,
-    0x53dd87ff /* 000a7bb0 - 000a83af [ 2048] */,
-    0x541d87ff /* 000a83b0 - 000a8baf [ 2048] */,
-    0x545d87ff /* 000a8bb0 - 000a93af [ 2048] */,
-    0x549d87ff /* 000a93b0 - 000a9baf [ 2048] */,
-    0x54dd87ff /* 000a9bb0 - 000aa3af [ 2048] */,
-    0x551d87ff /* 000aa3b0 - 000aabaf [ 2048] */,
-    0x555d87ff /* 000aabb0 - 000ab3af [ 2048] */,
-    0x559d87ff /* 000ab3b0 - 000abbaf [ 2048] */,
-    0x55dd87ff /* 000abbb0 - 000ac3af [ 2048] */,
-    0x561d87ff /* 000ac3b0 - 000acbaf [ 2048] */,
-    0x565d87ff /* 000acbb0 - 000ad3af [ 2048] */,
-    0x569d87ff /* 000ad3b0 - 000adbaf [ 2048] */,
-    0x56dd87ff /* 000adbb0 - 000ae3af [ 2048] */,
-    0x571d87ff /* 000ae3b0 - 000aebaf [ 2048] */,
-    0x575d87ff /* 000aebb0 - 000af3af [ 2048] */,
-    0x579d87ff /* 000af3b0 - 000afbaf [ 2048] */,
-    0x57dd87ff /* 000afbb0 - 000b03af [ 2048] */,
-    0x581d87ff /* 000b03b0 - 000b0baf [ 2048] */,
-    0x585d87ff /* 000b0bb0 - 000b13af [ 2048] */,
-    0x589d87ff /* 000b13b0 - 000b1baf [ 2048] */,
-    0x58dd87ff /* 000b1bb0 - 000b23af [ 2048] */,
-    0x591d87ff /* 000b23b0 - 000b2baf [ 2048] */,
-    0x595d87ff /* 000b2bb0 - 000b33af [ 2048] */,
-    0x599d87ff /* 000b33b0 - 000b3baf [ 2048] */,
-    0x59dd87ff /* 000b3bb0 - 000b43af [ 2048] */,
-    0x5a1d87ff /* 000b43b0 - 000b4baf [ 2048] */,
-    0x5a5d87ff /* 000b4bb0 - 000b53af [ 2048] */,
-    0x5a9d87ff /* 000b53b0 - 000b5baf [ 2048] */,
-    0x5add87ff /* 000b5bb0 - 000b63af [ 2048] */,
-    0x5b1d87ff /* 000b63b0 - 000b6baf [ 2048] */,
-    0x5b5d87ff /* 000b6bb0 - 000b73af [ 2048] */,
-    0x5b9d87ff /* 000b73b0 - 000b7baf [ 2048] */,
-    0x5bdd87ff /* 000b7bb0 - 000b83af [ 2048] */,
-    0x5c1d87ff /* 000b83b0 - 000b8baf [ 2048] */,
-    0x5c5d87ff /* 000b8bb0 - 000b93af [ 2048] */,
-    0x5c9d87ff /* 000b93b0 - 000b9baf [ 2048] */,
-    0x5cdd87ff /* 000b9bb0 - 000ba3af [ 2048] */,
-    0x5d1d87ff /* 000ba3b0 - 000babaf [ 2048] */,
-    0x5d5d87ff /* 000babb0 - 000bb3af [ 2048] */,
-    0x5d9d87ff /* 000bb3b0 - 000bbbaf [ 2048] */,
-    0x5ddd87ff /* 000bbbb0 - 000bc3af [ 2048] */,
-    0x5e1d87ff /* 000bc3b0 - 000bcbaf [ 2048] */,
-    0x5e5d87ff /* 000bcbb0 - 000bd3af [ 2048] */,
-    0x5e9d87ff /* 000bd3b0 - 000bdbaf [ 2048] */,
-    0x5edd87ff /* 000bdbb0 - 000be3af [ 2048] */,
-    0x5f1d87ff /* 000be3b0 - 000bebaf [ 2048] */,
-    0x5f5d87ff /* 000bebb0 - 000bf3af [ 2048] */,
-    0x5f9d87ff /* 000bf3b0 - 000bfbaf [ 2048] */,
-    0x5fdd87ff /* 000bfbb0 - 000c03af [ 2048] */,
-    0x601d87ff /* 000c03b0 - 000c0baf [ 2048] */,
-    0x605d87ff /* 000c0bb0 - 000c13af [ 2048] */,
-    0x609d87ff /* 000c13b0 - 000c1baf [ 2048] */,
-    0x60dd87ff /* 000c1bb0 - 000c23af [ 2048] */,
-    0x611d87ff /* 000c23b0 - 000c2baf [ 2048] */,
-    0x615d87ff /* 000c2bb0 - 000c33af [ 2048] */,
-    0x619d87ff /* 000c33b0 - 000c3baf [ 2048] */,
-    0x61dd87ff /* 000c3bb0 - 000c43af [ 2048] */,
-    0x621d87ff /* 000c43b0 - 000c4baf [ 2048] */,
-    0x625d87ff /* 000c4bb0 - 000c53af [ 2048] */,
-    0x629d87ff /* 000c53b0 - 000c5baf [ 2048] */,
-    0x62dd87ff /* 000c5bb0 - 000c63af [ 2048] */,
-    0x631d87ff /* 000c63b0 - 000c6baf [ 2048] */,
-    0x635d87ff /* 000c6bb0 - 000c73af [ 2048] */,
-    0x639d87ff /* 000c73b0 - 000c7baf [ 2048] */,
-    0x63dd87ff /* 000c7bb0 - 000c83af [ 2048] */,
-    0x641d87ff /* 000c83b0 - 000c8baf [ 2048] */,
-    0x645d87ff /* 000c8bb0 - 000c93af [ 2048] */,
-    0x649d87ff /* 000c93b0 - 000c9baf [ 2048] */,
-    0x64dd87ff /* 000c9bb0 - 000ca3af [ 2048] */,
-    0x651d87ff /* 000ca3b0 - 000cabaf [ 2048] */,
-    0x655d87ff /* 000cabb0 - 000cb3af [ 2048] */,
-    0x659d87ff /* 000cb3b0 - 000cbbaf [ 2048] */,
-    0x65dd87ff /* 000cbbb0 - 000cc3af [ 2048] */,
-    0x661d87ff /* 000cc3b0 - 000ccbaf [ 2048] */,
-    0x665d87ff /* 000ccbb0 - 000cd3af [ 2048] */,
-    0x669d87ff /* 000cd3b0 - 000cdbaf [ 2048] */,
-    0x66dd87ff /* 000cdbb0 - 000ce3af [ 2048] */,
-    0x671d87ff /* 000ce3b0 - 000cebaf [ 2048] */,
-    0x675d87ff /* 000cebb0 - 000cf3af [ 2048] */,
-    0x679d87ff /* 000cf3b0 - 000cfbaf [ 2048] */,
-    0x67dd87ff /* 000cfbb0 - 000d03af [ 2048] */,
-    0x681d87ff /* 000d03b0 - 000d0baf [ 2048] */,
-    0x685d87ff /* 000d0bb0 - 000d13af [ 2048] */,
-    0x689d87ff /* 000d13b0 - 000d1baf [ 2048] */,
-    0x68dd87ff /* 000d1bb0 - 000d23af [ 2048] */,
-    0x691d87ff /* 000d23b0 - 000d2baf [ 2048] */,
-    0x695d87ff /* 000d2bb0 - 000d33af [ 2048] */,
-    0x699d87ff /* 000d33b0 - 000d3baf [ 2048] */,
-    0x69dd87ff /* 000d3bb0 - 000d43af [ 2048] */,
-    0x6a1d87ff /* 000d43b0 - 000d4baf [ 2048] */,
-    0x6a5d87ff /* 000d4bb0 - 000d53af [ 2048] */,
-    0x6a9d87ff /* 000d53b0 - 000d5baf [ 2048] */,
-    0x6add87ff /* 000d5bb0 - 000d63af [ 2048] */,
-    0x6b1d87ff /* 000d63b0 - 000d6baf [ 2048] */,
-    0x6b5d87ff /* 000d6bb0 - 000d73af [ 2048] */,
-    0x6b9d87ff /* 000d73b0 - 000d7baf [ 2048] */,
-    0x6bdd87ff /* 000d7bb0 - 000d83af [ 2048] */,
-    0x6c1d87ff /* 000d83b0 - 000d8baf [ 2048] */,
-    0x6c5d87ff /* 000d8bb0 - 000d93af [ 2048] */,
-    0x6c9d87ff /* 000d93b0 - 000d9baf [ 2048] */,
-    0x6cdd87ff /* 000d9bb0 - 000da3af [ 2048] */,
-    0x6d1d87ff /* 000da3b0 - 000dabaf [ 2048] */,
-    0x6d5d87ff /* 000dabb0 - 000db3af [ 2048] */,
-    0x6d9d87ff /* 000db3b0 - 000dbbaf [ 2048] */,
-    0x6ddd87ff /* 000dbbb0 - 000dc3af [ 2048] */,
-    0x6e1d87ff /* 000dc3b0 - 000dcbaf [ 2048] */,
-    0x6e5d87ff /* 000dcbb0 - 000dd3af [ 2048] */,
-    0x6e9d87ff /* 000dd3b0 - 000ddbaf [ 2048] */,
-    0x6edd87ff /* 000ddbb0 - 000de3af [ 2048] */,
-    0x6f1d87ff /* 000de3b0 - 000debaf [ 2048] */,
-    0x6f5d87ff /* 000debb0 - 000df3af [ 2048] */,
-    0x6f9d87ff /* 000df3b0 - 000dfbaf [ 2048] */,
-    0x6fdd854f /* 000dfbb0 - 000e00ff [ 1360] */};
+    0x001fc021 /* 0000007f - 000000a0 [   34] */,
+    0x002b4000 /* 000000ad - 000000ad [    1] */,
+    0x00de0001 /* 00000378 - 00000379 [    2] */,
+    0x00e00003 /* 00000380 - 00000383 [    4] */,
+    0x00e2c000 /* 0000038b - 0000038b [    1] */,
+    0x00e34000 /* 0000038d - 0000038d [    1] */,
+    0x00e88000 /* 000003a2 - 000003a2 [    1] */,
+    0x014c0000 /* 00000530 - 00000530 [    1] */,
+    0x0155c001 /* 00000557 - 00000558 [    2] */,
+    0x0162c001 /* 0000058b - 0000058c [    2] */,
+    0x01640000 /* 00000590 - 00000590 [    1] */,
+    0x01720007 /* 000005c8 - 000005cf [    8] */,
+    0x017ac003 /* 000005eb - 000005ee [    4] */,
+    0x017d4010 /* 000005f5 - 00000605 [   17] */,
+    0x01870000 /* 0000061c - 0000061c [    1] */,
+    0x01b74000 /* 000006dd - 000006dd [    1] */,
+    0x01c38001 /* 0000070e - 0000070f [    2] */,
+    0x01d2c001 /* 0000074b - 0000074c [    2] */,
+    0x01ec800d /* 000007b2 - 000007bf [   14] */,
+    0x01fec001 /* 000007fb - 000007fc [    2] */,
+    0x020b8001 /* 0000082e - 0000082f [    2] */,
+    0x020fc000 /* 0000083f - 0000083f [    1] */,
+    0x02170001 /* 0000085c - 0000085d [    2] */,
+    0x0217c000 /* 0000085f - 0000085f [    1] */,
+    0x021ac004 /* 0000086b - 0000086f [    5] */,
+    0x0223c008 /* 0000088f - 00000897 [    9] */,
+    0x02388000 /* 000008e2 - 000008e2 [    1] */,
+    0x02610000 /* 00000984 - 00000984 [    1] */,
+    0x02634001 /* 0000098d - 0000098e [    2] */,
+    0x02644001 /* 00000991 - 00000992 [    2] */,
+    0x026a4000 /* 000009a9 - 000009a9 [    1] */,
+    0x026c4000 /* 000009b1 - 000009b1 [    1] */,
+    0x026cc002 /* 000009b3 - 000009b5 [    3] */,
+    0x026e8001 /* 000009ba - 000009bb [    2] */,
+    0x02714001 /* 000009c5 - 000009c6 [    2] */,
+    0x02724001 /* 000009c9 - 000009ca [    2] */,
+    0x0273c007 /* 000009cf - 000009d6 [    8] */,
+    0x02760003 /* 000009d8 - 000009db [    4] */,
+    0x02778000 /* 000009de - 000009de [    1] */,
+    0x02790001 /* 000009e4 - 000009e5 [    2] */,
+    0x027fc001 /* 000009ff - 00000a00 [    2] */,
+    0x02810000 /* 00000a04 - 00000a04 [    1] */,
+    0x0282c003 /* 00000a0b - 00000a0e [    4] */,
+    0x02844001 /* 00000a11 - 00000a12 [    2] */,
+    0x028a4000 /* 00000a29 - 00000a29 [    1] */,
+    0x028c4000 /* 00000a31 - 00000a31 [    1] */,
+    0x028d0000 /* 00000a34 - 00000a34 [    1] */,
+    0x028dc000 /* 00000a37 - 00000a37 [    1] */,
+    0x028e8001 /* 00000a3a - 00000a3b [    2] */,
+    0x028f4000 /* 00000a3d - 00000a3d [    1] */,
+    0x0290c003 /* 00000a43 - 00000a46 [    4] */,
+    0x02924001 /* 00000a49 - 00000a4a [    2] */,
+    0x02938002 /* 00000a4e - 00000a50 [    3] */,
+    0x02948006 /* 00000a52 - 00000a58 [    7] */,
+    0x02974000 /* 00000a5d - 00000a5d [    1] */,
+    0x0297c006 /* 00000a5f - 00000a65 [    7] */,
+    0x029dc009 /* 00000a77 - 00000a80 [   10] */,
+    0x02a10000 /* 00000a84 - 00000a84 [    1] */,
+    0x02a38000 /* 00000a8e - 00000a8e [    1] */,
+    0x02a48000 /* 00000a92 - 00000a92 [    1] */,
+    0x02aa4000 /* 00000aa9 - 00000aa9 [    1] */,
+    0x02ac4000 /* 00000ab1 - 00000ab1 [    1] */,
+    0x02ad0000 /* 00000ab4 - 00000ab4 [    1] */,
+    0x02ae8001 /* 00000aba - 00000abb [    2] */,
+    0x02b18000 /* 00000ac6 - 00000ac6 [    1] */,
+    0x02b28000 /* 00000aca - 00000aca [    1] */,
+    0x02b38001 /* 00000ace - 00000acf [    2] */,
+    0x02b4400e /* 00000ad1 - 00000adf [   15] */,
+    0x02b90001 /* 00000ae4 - 00000ae5 [    2] */,
+    0x02bc8006 /* 00000af2 - 00000af8 [    7] */,
+    0x02c00000 /* 00000b00 - 00000b00 [    1] */,
+    0x02c10000 /* 00000b04 - 00000b04 [    1] */,
+    0x02c34001 /* 00000b0d - 00000b0e [    2] */,
+    0x02c44001 /* 00000b11 - 00000b12 [    2] */,
+    0x02ca4000 /* 00000b29 - 00000b29 [    1] */,
+    0x02cc4000 /* 00000b31 - 00000b31 [    1] */,
+    0x02cd0000 /* 00000b34 - 00000b34 [    1] */,
+    0x02ce8001 /* 00000b3a - 00000b3b [    2] */,
+    0x02d14001 /* 00000b45 - 00000b46 [    2] */,
+    0x02d24001 /* 00000b49 - 00000b4a [    2] */,
+    0x02d38006 /* 00000b4e - 00000b54 [    7] */,
+    0x02d60003 /* 00000b58 - 00000b5b [    4] */,
+    0x02d78000 /* 00000b5e - 00000b5e [    1] */,
+    0x02d90001 /* 00000b64 - 00000b65 [    2] */,
+    0x02de0009 /* 00000b78 - 00000b81 [   10] */,
+    0x02e10000 /* 00000b84 - 00000b84 [    1] */,
+    0x02e2c002 /* 00000b8b - 00000b8d [    3] */,
+    0x02e44000 /* 00000b91 - 00000b91 [    1] */,
+    0x02e58002 /* 00000b96 - 00000b98 [    3] */,
+    0x02e6c000 /* 00000b9b - 00000b9b [    1] */,
+    0x02e74000 /* 00000b9d - 00000b9d [    1] */,
+    0x02e80002 /* 00000ba0 - 00000ba2 [    3] */,
+    0x02e94002 /* 00000ba5 - 00000ba7 [    3] */,
+    0x02eac002 /* 00000bab - 00000bad [    3] */,
+    0x02ee8003 /* 00000bba - 00000bbd [    4] */,
+    0x02f0c002 /* 00000bc3 - 00000bc5 [    3] */,
+    0x02f24000 /* 00000bc9 - 00000bc9 [    1] */,
+    0x02f38001 /* 00000bce - 00000bcf [    2] */,
+    0x02f44005 /* 00000bd1 - 00000bd6 [    6] */,
+    0x02f6000d /* 00000bd8 - 00000be5 [   14] */,
+    0x02fec004 /* 00000bfb - 00000bff [    5] */,
+    0x03034000 /* 00000c0d - 00000c0d [    1] */,
+    0x03044000 /* 00000c11 - 00000c11 [    1] */,
+    0x030a4000 /* 00000c29 - 00000c29 [    1] */,
+    0x030e8001 /* 00000c3a - 00000c3b [    2] */,
+    0x03114000 /* 00000c45 - 00000c45 [    1] */,
+    0x03124000 /* 00000c49 - 00000c49 [    1] */,
+    0x03138006 /* 00000c4e - 00000c54 [    7] */,
+    0x0315c000 /* 00000c57 - 00000c57 [    1] */,
+    0x0316c001 /* 00000c5b - 00000c5c [    2] */,
+    0x03178001 /* 00000c5e - 00000c5f [    2] */,
+    0x03190001 /* 00000c64 - 00000c65 [    2] */,
+    0x031c0006 /* 00000c70 - 00000c76 [    7] */,
+    0x03234000 /* 00000c8d - 00000c8d [    1] */,
+    0x03244000 /* 00000c91 - 00000c91 [    1] */,
+    0x032a4000 /* 00000ca9 - 00000ca9 [    1] */,
+    0x032d0000 /* 00000cb4 - 00000cb4 [    1] */,
+    0x032e8001 /* 00000cba - 00000cbb [    2] */,
+    0x03314000 /* 00000cc5 - 00000cc5 [    1] */,
+    0x03324000 /* 00000cc9 - 00000cc9 [    1] */,
+    0x03338006 /* 00000cce - 00000cd4 [    7] */,
+    0x0335c005 /* 00000cd7 - 00000cdc [    6] */,
+    0x0337c000 /* 00000cdf - 00000cdf [    1] */,
+    0x03390001 /* 00000ce4 - 00000ce5 [    2] */,
+    0x033c0000 /* 00000cf0 - 00000cf0 [    1] */,
+    0x033d000b /* 00000cf4 - 00000cff [   12] */,
+    0x03434000 /* 00000d0d - 00000d0d [    1] */,
+    0x03444000 /* 00000d11 - 00000d11 [    1] */,
+    0x03514000 /* 00000d45 - 00000d45 [    1] */,
+    0x03524000 /* 00000d49 - 00000d49 [    1] */,
+    0x03540003 /* 00000d50 - 00000d53 [    4] */,
+    0x03590001 /* 00000d64 - 00000d65 [    2] */,
+    0x03600000 /* 00000d80 - 00000d80 [    1] */,
+    0x03610000 /* 00000d84 - 00000d84 [    1] */,
+    0x0365c002 /* 00000d97 - 00000d99 [    3] */,
+    0x036c8000 /* 00000db2 - 00000db2 [    1] */,
+    0x036f0000 /* 00000dbc - 00000dbc [    1] */,
+    0x036f8001 /* 00000dbe - 00000dbf [    2] */,
+    0x0371c002 /* 00000dc7 - 00000dc9 [    3] */,
+    0x0372c003 /* 00000dcb - 00000dce [    4] */,
+    0x03754000 /* 00000dd5 - 00000dd5 [    1] */,
+    0x0375c000 /* 00000dd7 - 00000dd7 [    1] */,
+    0x03780005 /* 00000de0 - 00000de5 [    6] */,
+    0x037c0001 /* 00000df0 - 00000df1 [    2] */,
+    0x037d400b /* 00000df5 - 00000e00 [   12] */,
+    0x038ec003 /* 00000e3b - 00000e3e [    4] */,
+    0x03970024 /* 00000e5c - 00000e80 [   37] */,
+    0x03a0c000 /* 00000e83 - 00000e83 [    1] */,
+    0x03a14000 /* 00000e85 - 00000e85 [    1] */,
+    0x03a2c000 /* 00000e8b - 00000e8b [    1] */,
+    0x03a90000 /* 00000ea4 - 00000ea4 [    1] */,
+    0x03a98000 /* 00000ea6 - 00000ea6 [    1] */,
+    0x03af8001 /* 00000ebe - 00000ebf [    2] */,
+    0x03b14000 /* 00000ec5 - 00000ec5 [    1] */,
+    0x03b1c000 /* 00000ec7 - 00000ec7 [    1] */,
+    0x03b3c000 /* 00000ecf - 00000ecf [    1] */,
+    0x03b68001 /* 00000eda - 00000edb [    2] */,
+    0x03b8001f /* 00000ee0 - 00000eff [   32] */,
+    0x03d20000 /* 00000f48 - 00000f48 [    1] */,
+    0x03db4003 /* 00000f6d - 00000f70 [    4] */,
+    0x03e60000 /* 00000f98 - 00000f98 [    1] */,
+    0x03ef4000 /* 00000fbd - 00000fbd [    1] */,
+    0x03f34000 /* 00000fcd - 00000fcd [    1] */,
+    0x03f6c024 /* 00000fdb - 00000fff [   37] */,
+    0x04318000 /* 000010c6 - 000010c6 [    1] */,
+    0x04320004 /* 000010c8 - 000010cc [    5] */,
+    0x04338001 /* 000010ce - 000010cf [    2] */,
+    0x04924000 /* 00001249 - 00001249 [    1] */,
+    0x04938001 /* 0000124e - 0000124f [    2] */,
+    0x0495c000 /* 00001257 - 00001257 [    1] */,
+    0x04964000 /* 00001259 - 00001259 [    1] */,
+    0x04978001 /* 0000125e - 0000125f [    2] */,
+    0x04a24000 /* 00001289 - 00001289 [    1] */,
+    0x04a38001 /* 0000128e - 0000128f [    2] */,
+    0x04ac4000 /* 000012b1 - 000012b1 [    1] */,
+    0x04ad8001 /* 000012b6 - 000012b7 [    2] */,
+    0x04afc000 /* 000012bf - 000012bf [    1] */,
+    0x04b04000 /* 000012c1 - 000012c1 [    1] */,
+    0x04b18001 /* 000012c6 - 000012c7 [    2] */,
+    0x04b5c000 /* 000012d7 - 000012d7 [    1] */,
+    0x04c44000 /* 00001311 - 00001311 [    1] */,
+    0x04c58001 /* 00001316 - 00001317 [    2] */,
+    0x04d6c001 /* 0000135b - 0000135c [    2] */,
+    0x04df4002 /* 0000137d - 0000137f [    3] */,
+    0x04e68005 /* 0000139a - 0000139f [    6] */,
+    0x04fd8001 /* 000013f6 - 000013f7 [    2] */,
+    0x04ff8001 /* 000013fe - 000013ff [    2] */,
+    0x05a00000 /* 00001680 - 00001680 [    1] */,
+    0x05a74002 /* 0000169d - 0000169f [    3] */,
+    0x05be4006 /* 000016f9 - 000016ff [    7] */,
+    0x05c58008 /* 00001716 - 0000171e [    9] */,
+    0x05cdc008 /* 00001737 - 0000173f [    9] */,
+    0x05d5000b /* 00001754 - 0000175f [   12] */,
+    0x05db4000 /* 0000176d - 0000176d [    1] */,
+    0x05dc4000 /* 00001771 - 00001771 [    1] */,
+    0x05dd000b /* 00001774 - 0000177f [   12] */,
+    0x05f78001 /* 000017de - 000017df [    2] */,
+    0x05fa8005 /* 000017ea - 000017ef [    6] */,
+    0x05fe8005 /* 000017fa - 000017ff [    6] */,
+    0x06038000 /* 0000180e - 0000180e [    1] */,
+    0x06068005 /* 0000181a - 0000181f [    6] */,
+    0x061e4006 /* 00001879 - 0000187f [    7] */,
+    0x062ac004 /* 000018ab - 000018af [    5] */,
+    0x063d8009 /* 000018f6 - 000018ff [   10] */,
+    0x0647c000 /* 0000191f - 0000191f [    1] */,
+    0x064b0003 /* 0000192c - 0000192f [    4] */,
+    0x064f0003 /* 0000193c - 0000193f [    4] */,
+    0x06504002 /* 00001941 - 00001943 [    3] */,
+    0x065b8001 /* 0000196e - 0000196f [    2] */,
+    0x065d400a /* 00001975 - 0000197f [   11] */,
+    0x066b0003 /* 000019ac - 000019af [    4] */,
+    0x06728005 /* 000019ca - 000019cf [    6] */,
+    0x0676c002 /* 000019db - 000019dd [    3] */,
+    0x06870001 /* 00001a1c - 00001a1d [    2] */,
+    0x0697c000 /* 00001a5f - 00001a5f [    1] */,
+    0x069f4001 /* 00001a7d - 00001a7e [    2] */,
+    0x06a28005 /* 00001a8a - 00001a8f [    6] */,
+    0x06a68005 /* 00001a9a - 00001a9f [    6] */,
+    0x06ab8001 /* 00001aae - 00001aaf [    2] */,
+    0x06b3c030 /* 00001acf - 00001aff [   49] */,
+    0x06d34002 /* 00001b4d - 00001b4f [    3] */,
+    0x06dfc000 /* 00001b7f - 00001b7f [    1] */,
+    0x06fd0007 /* 00001bf4 - 00001bfb [    8] */,
+    0x070e0002 /* 00001c38 - 00001c3a [    3] */,
+    0x07128002 /* 00001c4a - 00001c4c [    3] */,
+    0x07224006 /* 00001c89 - 00001c8f [    7] */,
+    0x072ec001 /* 00001cbb - 00001cbc [    2] */,
+    0x07320007 /* 00001cc8 - 00001ccf [    8] */,
+    0x073ec004 /* 00001cfb - 00001cff [    5] */,
+    0x07c58001 /* 00001f16 - 00001f17 [    2] */,
+    0x07c78001 /* 00001f1e - 00001f1f [    2] */,
+    0x07d18001 /* 00001f46 - 00001f47 [    2] */,
+    0x07d38001 /* 00001f4e - 00001f4f [    2] */,
+    0x07d60000 /* 00001f58 - 00001f58 [    1] */,
+    0x07d68000 /* 00001f5a - 00001f5a [    1] */,
+    0x07d70000 /* 00001f5c - 00001f5c [    1] */,
+    0x07d78000 /* 00001f5e - 00001f5e [    1] */,
+    0x07df8001 /* 00001f7e - 00001f7f [    2] */,
+    0x07ed4000 /* 00001fb5 - 00001fb5 [    1] */,
+    0x07f14000 /* 00001fc5 - 00001fc5 [    1] */,
+    0x07f50001 /* 00001fd4 - 00001fd5 [    2] */,
+    0x07f70000 /* 00001fdc - 00001fdc [    1] */,
+    0x07fc0001 /* 00001ff0 - 00001ff1 [    2] */,
+    0x07fd4000 /* 00001ff5 - 00001ff5 [    1] */,
+    0x07ffc010 /* 00001fff - 0000200f [   17] */,
+    0x080a0007 /* 00002028 - 0000202f [    8] */,
+    0x0817c010 /* 0000205f - 0000206f [   17] */,
+    0x081c8001 /* 00002072 - 00002073 [    2] */,
+    0x0823c000 /* 0000208f - 0000208f [    1] */,
+    0x08274002 /* 0000209d - 0000209f [    3] */,
+    0x0830400e /* 000020c1 - 000020cf [   15] */,
+    0x083c400e /* 000020f1 - 000020ff [   15] */,
+    0x08630003 /* 0000218c - 0000218f [    4] */,
+    0x0909c018 /* 00002427 - 0000243f [   25] */,
+    0x0912c014 /* 0000244b - 0000245f [   21] */,
+    0x0add0001 /* 00002b74 - 00002b75 [    2] */,
+    0x0ae58000 /* 00002b96 - 00002b96 [    1] */,
+    0x0b3d0004 /* 00002cf4 - 00002cf8 [    5] */,
+    0x0b498000 /* 00002d26 - 00002d26 [    1] */,
+    0x0b4a0004 /* 00002d28 - 00002d2c [    5] */,
+    0x0b4b8001 /* 00002d2e - 00002d2f [    2] */,
+    0x0b5a0006 /* 00002d68 - 00002d6e [    7] */,
+    0x0b5c400d /* 00002d71 - 00002d7e [   14] */,
+    0x0b65c008 /* 00002d97 - 00002d9f [    9] */,
+    0x0b69c000 /* 00002da7 - 00002da7 [    1] */,
+    0x0b6bc000 /* 00002daf - 00002daf [    1] */,
+    0x0b6dc000 /* 00002db7 - 00002db7 [    1] */,
+    0x0b6fc000 /* 00002dbf - 00002dbf [    1] */,
+    0x0b71c000 /* 00002dc7 - 00002dc7 [    1] */,
+    0x0b73c000 /* 00002dcf - 00002dcf [    1] */,
+    0x0b75c000 /* 00002dd7 - 00002dd7 [    1] */,
+    0x0b77c000 /* 00002ddf - 00002ddf [    1] */,
+    0x0b978021 /* 00002e5e - 00002e7f [   34] */,
+    0x0ba68000 /* 00002e9a - 00002e9a [    1] */,
+    0x0bbd000b /* 00002ef4 - 00002eff [   12] */,
+    0x0bf58019 /* 00002fd6 - 00002fef [   26] */,
+    0x0c000000 /* 00003000 - 00003000 [    1] */,
+    0x0c100000 /* 00003040 - 00003040 [    1] */,
+    0x0c25c001 /* 00003097 - 00003098 [    2] */,
+    0x0c400004 /* 00003100 - 00003104 [    5] */,
+    0x0c4c0000 /* 00003130 - 00003130 [    1] */,
+    0x0c63c000 /* 0000318f - 0000318f [    1] */,
+    0x0c79000a /* 000031e4 - 000031ee [   11] */,
+    0x0c87c000 /* 0000321f - 0000321f [    1] */,
+    0x29234002 /* 0000a48d - 0000a48f [    3] */,
+    0x2931c008 /* 0000a4c7 - 0000a4cf [    9] */,
+    0x298b0013 /* 0000a62c - 0000a63f [   20] */,
+    0x29be0007 /* 0000a6f8 - 0000a6ff [    8] */,
+    0x29f2c004 /* 0000a7cb - 0000a7cf [    5] */,
+    0x29f48000 /* 0000a7d2 - 0000a7d2 [    1] */,
+    0x29f50000 /* 0000a7d4 - 0000a7d4 [    1] */,
+    0x29f68017 /* 0000a7da - 0000a7f1 [   24] */,
+    0x2a0b4002 /* 0000a82d - 0000a82f [    3] */,
+    0x2a0e8005 /* 0000a83a - 0000a83f [    6] */,
+    0x2a1e0007 /* 0000a878 - 0000a87f [    8] */,
+    0x2a318007 /* 0000a8c6 - 0000a8cd [    8] */,
+    0x2a368005 /* 0000a8da - 0000a8df [    6] */,
+    0x2a55000a /* 0000a954 - 0000a95e [   11] */,
+    0x2a5f4002 /* 0000a97d - 0000a97f [    3] */,
+    0x2a738000 /* 0000a9ce - 0000a9ce [    1] */,
+    0x2a768003 /* 0000a9da - 0000a9dd [    4] */,
+    0x2a7fc000 /* 0000a9ff - 0000a9ff [    1] */,
+    0x2a8dc008 /* 0000aa37 - 0000aa3f [    9] */,
+    0x2a938001 /* 0000aa4e - 0000aa4f [    2] */,
+    0x2a968001 /* 0000aa5a - 0000aa5b [    2] */,
+    0x2ab0c017 /* 0000aac3 - 0000aada [   24] */,
+    0x2abdc009 /* 0000aaf7 - 0000ab00 [   10] */,
+    0x2ac1c001 /* 0000ab07 - 0000ab08 [    2] */,
+    0x2ac3c001 /* 0000ab0f - 0000ab10 [    2] */,
+    0x2ac5c008 /* 0000ab17 - 0000ab1f [    9] */,
+    0x2ac9c000 /* 0000ab27 - 0000ab27 [    1] */,
+    0x2acbc000 /* 0000ab2f - 0000ab2f [    1] */,
+    0x2adb0003 /* 0000ab6c - 0000ab6f [    4] */,
+    0x2afb8001 /* 0000abee - 0000abef [    2] */,
+    0x2afe8005 /* 0000abfa - 0000abff [    6] */,
+    0x35e9000b /* 0000d7a4 - 0000d7af [   12] */,
+    0x35f1c003 /* 0000d7c7 - 0000d7ca [    4] */,
+    0x35ff2103 /* 0000d7fc - 0000f8ff [ 8452] */,
+    0x3e9b8001 /* 0000fa6e - 0000fa6f [    2] */,
+    0x3eb68025 /* 0000fada - 0000faff [   38] */,
+    0x3ec1c00b /* 0000fb07 - 0000fb12 [   12] */,
+    0x3ec60004 /* 0000fb18 - 0000fb1c [    5] */,
+    0x3ecdc000 /* 0000fb37 - 0000fb37 [    1] */,
+    0x3ecf4000 /* 0000fb3d - 0000fb3d [    1] */,
+    0x3ecfc000 /* 0000fb3f - 0000fb3f [    1] */,
+    0x3ed08000 /* 0000fb42 - 0000fb42 [    1] */,
+    0x3ed14000 /* 0000fb45 - 0000fb45 [    1] */,
+    0x3ef0c00f /* 0000fbc3 - 0000fbd2 [   16] */,
+    0x3f640001 /* 0000fd90 - 0000fd91 [    2] */,
+    0x3f720006 /* 0000fdc8 - 0000fdce [    7] */,
+    0x3f74001f /* 0000fdd0 - 0000fdef [   32] */,
+    0x3f868005 /* 0000fe1a - 0000fe1f [    6] */,
+    0x3f94c000 /* 0000fe53 - 0000fe53 [    1] */,
+    0x3f99c000 /* 0000fe67 - 0000fe67 [    1] */,
+    0x3f9b0003 /* 0000fe6c - 0000fe6f [    4] */,
+    0x3f9d4000 /* 0000fe75 - 0000fe75 [    1] */,
+    0x3fbf4003 /* 0000fefd - 0000ff00 [    4] */,
+    0x3fefc002 /* 0000ffbf - 0000ffc1 [    3] */,
+    0x3ff20001 /* 0000ffc8 - 0000ffc9 [    2] */,
+    0x3ff40001 /* 0000ffd0 - 0000ffd1 [    2] */,
+    0x3ff60001 /* 0000ffd8 - 0000ffd9 [    2] */,
+    0x3ff74002 /* 0000ffdd - 0000ffdf [    3] */,
+    0x3ff9c000 /* 0000ffe7 - 0000ffe7 [    1] */,
+    0x3ffbc00c /* 0000ffef - 0000fffb [   13] */,
+    0x3fff8001 /* 0000fffe - 0000ffff [    2] */,
+    0x40030000 /* 0001000c - 0001000c [    1] */,
+    0x4009c000 /* 00010027 - 00010027 [    1] */,
+    0x400ec000 /* 0001003b - 0001003b [    1] */,
+    0x400f8000 /* 0001003e - 0001003e [    1] */,
+    0x40138001 /* 0001004e - 0001004f [    2] */,
+    0x40178021 /* 0001005e - 0001007f [   34] */,
+    0x403ec004 /* 000100fb - 000100ff [    5] */,
+    0x4040c003 /* 00010103 - 00010106 [    4] */,
+    0x404d0002 /* 00010134 - 00010136 [    3] */,
+    0x4063c000 /* 0001018f - 0001018f [    1] */,
+    0x40674002 /* 0001019d - 0001019f [    3] */,
+    0x4068402e /* 000101a1 - 000101cf [   47] */,
+    0x407f8081 /* 000101fe - 0001027f [  130] */,
+    0x40a74002 /* 0001029d - 0001029f [    3] */,
+    0x40b4400e /* 000102d1 - 000102df [   15] */,
+    0x40bf0003 /* 000102fc - 000102ff [    4] */,
+    0x40c90008 /* 00010324 - 0001032c [    9] */,
+    0x40d2c004 /* 0001034b - 0001034f [    5] */,
+    0x40dec004 /* 0001037b - 0001037f [    5] */,
+    0x40e78000 /* 0001039e - 0001039e [    1] */,
+    0x40f10003 /* 000103c4 - 000103c7 [    4] */,
+    0x40f58029 /* 000103d6 - 000103ff [   42] */,
+    0x41278001 /* 0001049e - 0001049f [    2] */,
+    0x412a8005 /* 000104aa - 000104af [    6] */,
+    0x41350003 /* 000104d4 - 000104d7 [    4] */,
+    0x413f0003 /* 000104fc - 000104ff [    4] */,
+    0x414a0007 /* 00010528 - 0001052f [    8] */,
+    0x4159000a /* 00010564 - 0001056e [   11] */,
+    0x415ec000 /* 0001057b - 0001057b [    1] */,
+    0x4162c000 /* 0001058b - 0001058b [    1] */,
+    0x4164c000 /* 00010593 - 00010593 [    1] */,
+    0x41658000 /* 00010596 - 00010596 [    1] */,
+    0x41688000 /* 000105a2 - 000105a2 [    1] */,
+    0x416c8000 /* 000105b2 - 000105b2 [    1] */,
+    0x416e8000 /* 000105ba - 000105ba [    1] */,
+    0x416f4042 /* 000105bd - 000105ff [   67] */,
+    0x41cdc008 /* 00010737 - 0001073f [    9] */,
+    0x41d58009 /* 00010756 - 0001075f [   10] */,
+    0x41da0017 /* 00010768 - 0001077f [   24] */,
+    0x41e18000 /* 00010786 - 00010786 [    1] */,
+    0x41ec4000 /* 000107b1 - 000107b1 [    1] */,
+    0x41eec044 /* 000107bb - 000107ff [   69] */,
+    0x42018001 /* 00010806 - 00010807 [    2] */,
+    0x42024000 /* 00010809 - 00010809 [    1] */,
+    0x420d8000 /* 00010836 - 00010836 [    1] */,
+    0x420e4002 /* 00010839 - 0001083b [    3] */,
+    0x420f4001 /* 0001083d - 0001083e [    2] */,
+    0x42158000 /* 00010856 - 00010856 [    1] */,
+    0x4227c007 /* 0001089f - 000108a6 [    8] */,
+    0x422c002f /* 000108b0 - 000108df [   48] */,
+    0x423cc000 /* 000108f3 - 000108f3 [    1] */,
+    0x423d8004 /* 000108f6 - 000108fa [    5] */,
+    0x42470002 /* 0001091c - 0001091e [    3] */,
+    0x424e8004 /* 0001093a - 0001093e [    5] */,
+    0x4250003f /* 00010940 - 0001097f [   64] */,
+    0x426e0003 /* 000109b8 - 000109bb [    4] */,
+    0x42740001 /* 000109d0 - 000109d1 [    2] */,
+    0x42810000 /* 00010a04 - 00010a04 [    1] */,
+    0x4281c004 /* 00010a07 - 00010a0b [    5] */,
+    0x42850000 /* 00010a14 - 00010a14 [    1] */,
+    0x42860000 /* 00010a18 - 00010a18 [    1] */,
+    0x428d8001 /* 00010a36 - 00010a37 [    2] */,
+    0x428ec003 /* 00010a3b - 00010a3e [    4] */,
+    0x42924006 /* 00010a49 - 00010a4f [    7] */,
+    0x42964006 /* 00010a59 - 00010a5f [    7] */,
+    0x42a8001f /* 00010aa0 - 00010abf [   32] */,
+    0x42b9c003 /* 00010ae7 - 00010aea [    4] */,
+    0x42bdc008 /* 00010af7 - 00010aff [    9] */,
+    0x42cd8002 /* 00010b36 - 00010b38 [    3] */,
+    0x42d58001 /* 00010b56 - 00010b57 [    2] */,
+    0x42dcc004 /* 00010b73 - 00010b77 [    5] */,
+    0x42e48006 /* 00010b92 - 00010b98 [    7] */,
+    0x42e7400b /* 00010b9d - 00010ba8 [   12] */,
+    0x42ec004f /* 00010bb0 - 00010bff [   80] */,
+    0x43124036 /* 00010c49 - 00010c7f [   55] */,
+    0x432cc00c /* 00010cb3 - 00010cbf [   13] */,
+    0x433cc006 /* 00010cf3 - 00010cf9 [    7] */,
+    0x434a0007 /* 00010d28 - 00010d2f [    8] */,
+    0x434e8125 /* 00010d3a - 00010e5f [  294] */,
+    0x439fc000 /* 00010e7f - 00010e7f [    1] */,
+    0x43aa8000 /* 00010eaa - 00010eaa [    1] */,
+    0x43ab8001 /* 00010eae - 00010eaf [    2] */,
+    0x43ac804a /* 00010eb2 - 00010efc [   75] */,
+    0x43ca0007 /* 00010f28 - 00010f2f [    8] */,
+    0x43d68015 /* 00010f5a - 00010f6f [   22] */,
+    0x43e28025 /* 00010f8a - 00010faf [   38] */,
+    0x43f30013 /* 00010fcc - 00010fdf [   20] */,
+    0x43fdc008 /* 00010ff7 - 00010fff [    9] */,
+    0x44138003 /* 0001104e - 00011051 [    4] */,
+    0x441d8008 /* 00011076 - 0001107e [    9] */,
+    0x442f4000 /* 000110bd - 000110bd [    1] */,
+    0x4430c00c /* 000110c3 - 000110cf [   13] */,
+    0x443a4006 /* 000110e9 - 000110ef [    7] */,
+    0x443e8005 /* 000110fa - 000110ff [    6] */,
+    0x444d4000 /* 00011135 - 00011135 [    1] */,
+    0x44520007 /* 00011148 - 0001114f [    8] */,
+    0x445dc008 /* 00011177 - 0001117f [    9] */,
+    0x44780000 /* 000111e0 - 000111e0 [    1] */,
+    0x447d400a /* 000111f5 - 000111ff [   11] */,
+    0x44848000 /* 00011212 - 00011212 [    1] */,
+    0x4490803d /* 00011242 - 0001127f [   62] */,
+    0x44a1c000 /* 00011287 - 00011287 [    1] */,
+    0x44a24000 /* 00011289 - 00011289 [    1] */,
+    0x44a38000 /* 0001128e - 0001128e [    1] */,
+    0x44a78000 /* 0001129e - 0001129e [    1] */,
+    0x44aa8005 /* 000112aa - 000112af [    6] */,
+    0x44bac004 /* 000112eb - 000112ef [    5] */,
+    0x44be8005 /* 000112fa - 000112ff [    6] */,
+    0x44c10000 /* 00011304 - 00011304 [    1] */,
+    0x44c34001 /* 0001130d - 0001130e [    2] */,
+    0x44c44001 /* 00011311 - 00011312 [    2] */,
+    0x44ca4000 /* 00011329 - 00011329 [    1] */,
+    0x44cc4000 /* 00011331 - 00011331 [    1] */,
+    0x44cd0000 /* 00011334 - 00011334 [    1] */,
+    0x44ce8000 /* 0001133a - 0001133a [    1] */,
+    0x44d14001 /* 00011345 - 00011346 [    2] */,
+    0x44d24001 /* 00011349 - 0001134a [    2] */,
+    0x44d38001 /* 0001134e - 0001134f [    2] */,
+    0x44d44005 /* 00011351 - 00011356 [    6] */,
+    0x44d60004 /* 00011358 - 0001135c [    5] */,
+    0x44d90001 /* 00011364 - 00011365 [    2] */,
+    0x44db4002 /* 0001136d - 0001136f [    3] */,
+    0x44dd408a /* 00011375 - 000113ff [  139] */,
+    0x45170000 /* 0001145c - 0001145c [    1] */,
+    0x4518801d /* 00011462 - 0001147f [   30] */,
+    0x45320007 /* 000114c8 - 000114cf [    8] */,
+    0x453680a5 /* 000114da - 0001157f [  166] */,
+    0x456d8001 /* 000115b6 - 000115b7 [    2] */,
+    0x45778021 /* 000115de - 000115ff [   34] */,
+    0x4591400a /* 00011645 - 0001164f [   11] */,
+    0x45968005 /* 0001165a - 0001165f [    6] */,
+    0x459b4012 /* 0001166d - 0001167f [   19] */,
+    0x45ae8005 /* 000116ba - 000116bf [    6] */,
+    0x45b28035 /* 000116ca - 000116ff [   54] */,
+    0x45c6c001 /* 0001171b - 0001171c [    2] */,
+    0x45cb0003 /* 0001172c - 0001172f [    4] */,
+    0x45d1c0b8 /* 00011747 - 000117ff [  185] */,
+    0x460f0063 /* 0001183c - 0001189f [  100] */,
+    0x463cc00b /* 000118f3 - 000118fe [   12] */,
+    0x4641c001 /* 00011907 - 00011908 [    2] */,
+    0x46428001 /* 0001190a - 0001190b [    2] */,
+    0x46450000 /* 00011914 - 00011914 [    1] */,
+    0x4645c000 /* 00011917 - 00011917 [    1] */,
+    0x464d8000 /* 00011936 - 00011936 [    1] */,
+    0x464e4001 /* 00011939 - 0001193a [    2] */,
+    0x4651c008 /* 00011947 - 0001194f [    9] */,
+    0x46568045 /* 0001195a - 0001199f [   70] */,
+    0x466a0001 /* 000119a8 - 000119a9 [    2] */,
+    0x46760001 /* 000119d8 - 000119d9 [    2] */,
+    0x4679401a /* 000119e5 - 000119ff [   27] */,
+    0x46920007 /* 00011a48 - 00011a4f [    8] */,
+    0x46a8c00c /* 00011aa3 - 00011aaf [   13] */,
+    0x46be4006 /* 00011af9 - 00011aff [    7] */,
+    0x46c280f5 /* 00011b0a - 00011bff [  246] */,
+    0x47024000 /* 00011c09 - 00011c09 [    1] */,
+    0x470dc000 /* 00011c37 - 00011c37 [    1] */,
+    0x47118009 /* 00011c46 - 00011c4f [   10] */,
+    0x471b4002 /* 00011c6d - 00011c6f [    3] */,
+    0x47240001 /* 00011c90 - 00011c91 [    2] */,
+    0x472a0000 /* 00011ca8 - 00011ca8 [    1] */,
+    0x472dc048 /* 00011cb7 - 00011cff [   73] */,
+    0x4741c000 /* 00011d07 - 00011d07 [    1] */,
+    0x47428000 /* 00011d0a - 00011d0a [    1] */,
+    0x474dc002 /* 00011d37 - 00011d39 [    3] */,
+    0x474ec000 /* 00011d3b - 00011d3b [    1] */,
+    0x474f8000 /* 00011d3e - 00011d3e [    1] */,
+    0x47520007 /* 00011d48 - 00011d4f [    8] */,
+    0x47568005 /* 00011d5a - 00011d5f [    6] */,
+    0x47598000 /* 00011d66 - 00011d66 [    1] */,
+    0x475a4000 /* 00011d69 - 00011d69 [    1] */,
+    0x4763c000 /* 00011d8f - 00011d8f [    1] */,
+    0x47648000 /* 00011d92 - 00011d92 [    1] */,
+    0x47664006 /* 00011d99 - 00011d9f [    7] */,
+    0x476a8135 /* 00011daa - 00011edf [  310] */,
+    0x47be4006 /* 00011ef9 - 00011eff [    7] */,
+    0x47c44000 /* 00011f11 - 00011f11 [    1] */,
+    0x47cec002 /* 00011f3b - 00011f3d [    3] */,
+    0x47d68055 /* 00011f5a - 00011faf [   86] */,
+    0x47ec400e /* 00011fb1 - 00011fbf [   15] */,
+    0x47fc800c /* 00011ff2 - 00011ffe [   13] */,
+    0x48e68065 /* 0001239a - 000123ff [  102] */,
+    0x491bc000 /* 0001246f - 0001246f [    1] */,
+    0x491d400a /* 00012475 - 0001247f [   11] */,
+    0x49510a4b /* 00012544 - 00012f8f [ 2636] */,
+    0x4bfcc00c /* 00012ff3 - 00012fff [   13] */,
+    0x4d0c000f /* 00013430 - 0001343f [   16] */,
+    0x4d158fa9 /* 00013456 - 000143ff [ 4010] */,
+    0x5191e1b8 /* 00014647 - 000167ff [ 8633] */,
+    0x5a8e4006 /* 00016a39 - 00016a3f [    7] */,
+    0x5a97c000 /* 00016a5f - 00016a5f [    1] */,
+    0x5a9a8003 /* 00016a6a - 00016a6d [    4] */,
+    0x5aafc000 /* 00016abf - 00016abf [    1] */,
+    0x5ab28005 /* 00016aca - 00016acf [    6] */,
+    0x5abb8001 /* 00016aee - 00016aef [    2] */,
+    0x5abd8009 /* 00016af6 - 00016aff [   10] */,
+    0x5ad18009 /* 00016b46 - 00016b4f [   10] */,
+    0x5ad68000 /* 00016b5a - 00016b5a [    1] */,
+    0x5ad88000 /* 00016b62 - 00016b62 [    1] */,
+    0x5ade0004 /* 00016b78 - 00016b7c [    5] */,
+    0x5ae402af /* 00016b90 - 00016e3f [  688] */,
+    0x5ba6c064 /* 00016e9b - 00016eff [  101] */,
+    0x5bd2c003 /* 00016f4b - 00016f4e [    4] */,
+    0x5be20006 /* 00016f88 - 00016f8e [    7] */,
+    0x5be8003f /* 00016fa0 - 00016fdf [   64] */,
+    0x5bf9400a /* 00016fe5 - 00016fef [   11] */,
+    0x5bfc800d /* 00016ff2 - 00016fff [   14] */,
+    0x61fe0007 /* 000187f8 - 000187ff [    8] */,
+    0x63358029 /* 00018cd6 - 00018cff [   42] */,
+    0x634262e6 /* 00018d09 - 0001afef [ 8935] */,
+    0x6bfd0000 /* 0001aff4 - 0001aff4 [    1] */,
+    0x6bff0000 /* 0001affc - 0001affc [    1] */,
+    0x6bffc000 /* 0001afff - 0001afff [    1] */,
+    0x6c48c00e /* 0001b123 - 0001b131 [   15] */,
+    0x6c4cc01c /* 0001b133 - 0001b14f [   29] */,
+    0x6c54c001 /* 0001b153 - 0001b154 [    2] */,
+    0x6c55800d /* 0001b156 - 0001b163 [   14] */,
+    0x6c5a0007 /* 0001b168 - 0001b16f [    8] */,
+    0x6cbf0903 /* 0001b2fc - 0001bbff [ 2308] */,
+    0x6f1ac004 /* 0001bc6b - 0001bc6f [    5] */,
+    0x6f1f4002 /* 0001bc7d - 0001bc7f [    3] */,
+    0x6f224006 /* 0001bc89 - 0001bc8f [    7] */,
+    0x6f268001 /* 0001bc9a - 0001bc9b [    2] */,
+    0x6f28125f /* 0001bca0 - 0001ceff [ 4704] */,
+    0x73cb8001 /* 0001cf2e - 0001cf2f [    2] */,
+    0x73d1c008 /* 0001cf47 - 0001cf4f [    9] */,
+    0x73f1003b /* 0001cfc4 - 0001cfff [   60] */,
+    0x743d8009 /* 0001d0f6 - 0001d0ff [   10] */,
+    0x7449c001 /* 0001d127 - 0001d128 [    2] */,
+    0x745cc007 /* 0001d173 - 0001d17a [    8] */,
+    0x747ac014 /* 0001d1eb - 0001d1ff [   21] */,
+    0x74918079 /* 0001d246 - 0001d2bf [  122] */,
+    0x74b5000b /* 0001d2d4 - 0001d2df [   12] */,
+    0x74bd000b /* 0001d2f4 - 0001d2ff [   12] */,
+    0x74d5c008 /* 0001d357 - 0001d35f [    9] */,
+    0x74de4086 /* 0001d379 - 0001d3ff [  135] */,
+    0x75154000 /* 0001d455 - 0001d455 [    1] */,
+    0x75274000 /* 0001d49d - 0001d49d [    1] */,
+    0x75280001 /* 0001d4a0 - 0001d4a1 [    2] */,
+    0x7528c001 /* 0001d4a3 - 0001d4a4 [    2] */,
+    0x7529c001 /* 0001d4a7 - 0001d4a8 [    2] */,
+    0x752b4000 /* 0001d4ad - 0001d4ad [    1] */,
+    0x752e8000 /* 0001d4ba - 0001d4ba [    1] */,
+    0x752f0000 /* 0001d4bc - 0001d4bc [    1] */,
+    0x75310000 /* 0001d4c4 - 0001d4c4 [    1] */,
+    0x75418000 /* 0001d506 - 0001d506 [    1] */,
+    0x7542c001 /* 0001d50b - 0001d50c [    2] */,
+    0x75454000 /* 0001d515 - 0001d515 [    1] */,
+    0x75474000 /* 0001d51d - 0001d51d [    1] */,
+    0x754e8000 /* 0001d53a - 0001d53a [    1] */,
+    0x754fc000 /* 0001d53f - 0001d53f [    1] */,
+    0x75514000 /* 0001d545 - 0001d545 [    1] */,
+    0x7551c002 /* 0001d547 - 0001d549 [    3] */,
+    0x75544000 /* 0001d551 - 0001d551 [    1] */,
+    0x75a98001 /* 0001d6a6 - 0001d6a7 [    2] */,
+    0x75f30001 /* 0001d7cc - 0001d7cd [    2] */,
+    0x76a3000e /* 0001da8c - 0001da9a [   15] */,
+    0x76a80000 /* 0001daa0 - 0001daa0 [    1] */,
+    0x76ac044f /* 0001dab0 - 0001deff [ 1104] */,
+    0x77c7c005 /* 0001df1f - 0001df24 [    6] */,
+    0x77cac0d4 /* 0001df2b - 0001dfff [  213] */,
+    0x7801c000 /* 0001e007 - 0001e007 [    1] */,
+    0x78064001 /* 0001e019 - 0001e01a [    2] */,
+    0x78088000 /* 0001e022 - 0001e022 [    1] */,
+    0x78094000 /* 0001e025 - 0001e025 [    1] */,
+    0x780ac004 /* 0001e02b - 0001e02f [    5] */,
+    0x781b8020 /* 0001e06e - 0001e08e [   33] */,
+    0x7824006f /* 0001e090 - 0001e0ff [  112] */,
+    0x784b4002 /* 0001e12d - 0001e12f [    3] */,
+    0x784f8001 /* 0001e13e - 0001e13f [    2] */,
+    0x78528003 /* 0001e14a - 0001e14d [    4] */,
+    0x7854013f /* 0001e150 - 0001e28f [  320] */,
+    0x78abc010 /* 0001e2af - 0001e2bf [   17] */,
+    0x78be8004 /* 0001e2fa - 0001e2fe [    5] */,
+    0x78c001cf /* 0001e300 - 0001e4cf [  464] */,
+    0x793e82e5 /* 0001e4fa - 0001e7df [  742] */,
+    0x79f9c000 /* 0001e7e7 - 0001e7e7 [    1] */,
+    0x79fb0000 /* 0001e7ec - 0001e7ec [    1] */,
+    0x79fbc000 /* 0001e7ef - 0001e7ef [    1] */,
+    0x79ffc000 /* 0001e7ff - 0001e7ff [    1] */,
+    0x7a314001 /* 0001e8c5 - 0001e8c6 [    2] */,
+    0x7a35c028 /* 0001e8d7 - 0001e8ff [   41] */,
+    0x7a530003 /* 0001e94c - 0001e94f [    4] */,
+    0x7a568003 /* 0001e95a - 0001e95d [    4] */,
+    0x7a580310 /* 0001e960 - 0001ec70 [  785] */,
+    0x7b2d404b /* 0001ecb5 - 0001ed00 [   76] */,
+    0x7b4f80c1 /* 0001ed3e - 0001edff [  194] */,
+    0x7b810000 /* 0001ee04 - 0001ee04 [    1] */,
+    0x7b880000 /* 0001ee20 - 0001ee20 [    1] */,
+    0x7b88c000 /* 0001ee23 - 0001ee23 [    1] */,
+    0x7b894001 /* 0001ee25 - 0001ee26 [    2] */,
+    0x7b8a0000 /* 0001ee28 - 0001ee28 [    1] */,
+    0x7b8cc000 /* 0001ee33 - 0001ee33 [    1] */,
+    0x7b8e0000 /* 0001ee38 - 0001ee38 [    1] */,
+    0x7b8e8000 /* 0001ee3a - 0001ee3a [    1] */,
+    0x7b8f0005 /* 0001ee3c - 0001ee41 [    6] */,
+    0x7b90c003 /* 0001ee43 - 0001ee46 [    4] */,
+    0x7b920000 /* 0001ee48 - 0001ee48 [    1] */,
+    0x7b928000 /* 0001ee4a - 0001ee4a [    1] */,
+    0x7b930000 /* 0001ee4c - 0001ee4c [    1] */,
+    0x7b940000 /* 0001ee50 - 0001ee50 [    1] */,
+    0x7b94c000 /* 0001ee53 - 0001ee53 [    1] */,
+    0x7b954001 /* 0001ee55 - 0001ee56 [    2] */,
+    0x7b960000 /* 0001ee58 - 0001ee58 [    1] */,
+    0x7b968000 /* 0001ee5a - 0001ee5a [    1] */,
+    0x7b970000 /* 0001ee5c - 0001ee5c [    1] */,
+    0x7b978000 /* 0001ee5e - 0001ee5e [    1] */,
+    0x7b980000 /* 0001ee60 - 0001ee60 [    1] */,
+    0x7b98c000 /* 0001ee63 - 0001ee63 [    1] */,
+    0x7b994001 /* 0001ee65 - 0001ee66 [    2] */,
+    0x7b9ac000 /* 0001ee6b - 0001ee6b [    1] */,
+    0x7b9cc000 /* 0001ee73 - 0001ee73 [    1] */,
+    0x7b9e0000 /* 0001ee78 - 0001ee78 [    1] */,
+    0x7b9f4000 /* 0001ee7d - 0001ee7d [    1] */,
+    0x7b9fc000 /* 0001ee7f - 0001ee7f [    1] */,
+    0x7ba28000 /* 0001ee8a - 0001ee8a [    1] */,
+    0x7ba70004 /* 0001ee9c - 0001eea0 [    5] */,
+    0x7ba90000 /* 0001eea4 - 0001eea4 [    1] */,
+    0x7baa8000 /* 0001eeaa - 0001eeaa [    1] */,
+    0x7baf0033 /* 0001eebc - 0001eeef [   52] */,
+    0x7bbc810d /* 0001eef2 - 0001efff [  270] */,
+    0x7c0b0003 /* 0001f02c - 0001f02f [    4] */,
+    0x7c25000b /* 0001f094 - 0001f09f [   12] */,
+    0x7c2bc001 /* 0001f0af - 0001f0b0 [    2] */,
+    0x7c300000 /* 0001f0c0 - 0001f0c0 [    1] */,
+    0x7c340000 /* 0001f0d0 - 0001f0d0 [    1] */,
+    0x7c3d8009 /* 0001f0f6 - 0001f0ff [   10] */,
+    0x7c6b8037 /* 0001f1ae - 0001f1e5 [   56] */,
+    0x7c80c00c /* 0001f203 - 0001f20f [   13] */,
+    0x7c8f0003 /* 0001f23c - 0001f23f [    4] */,
+    0x7c924006 /* 0001f249 - 0001f24f [    7] */,
+    0x7c94800d /* 0001f252 - 0001f25f [   14] */,
+    0x7c998099 /* 0001f266 - 0001f2ff [  154] */,
+    0x7db60003 /* 0001f6d8 - 0001f6db [    4] */,
+    0x7dbb4002 /* 0001f6ed - 0001f6ef [    3] */,
+    0x7dbf4002 /* 0001f6fd - 0001f6ff [    3] */,
+    0x7dddc003 /* 0001f777 - 0001f77a [    4] */,
+    0x7df68005 /* 0001f7da - 0001f7df [    6] */,
+    0x7dfb0003 /* 0001f7ec - 0001f7ef [    4] */,
+    0x7dfc400e /* 0001f7f1 - 0001f7ff [   15] */,
+    0x7e030003 /* 0001f80c - 0001f80f [    4] */,
+    0x7e120007 /* 0001f848 - 0001f84f [    8] */,
+    0x7e168005 /* 0001f85a - 0001f85f [    6] */,
+    0x7e220007 /* 0001f888 - 0001f88f [    8] */,
+    0x7e2b8001 /* 0001f8ae - 0001f8af [    2] */,
+    0x7e2c804d /* 0001f8b2 - 0001f8ff [   78] */,
+    0x7e95000b /* 0001fa54 - 0001fa5f [   12] */,
+    0x7e9b8001 /* 0001fa6e - 0001fa6f [    2] */,
+    0x7e9f4002 /* 0001fa7d - 0001fa7f [    3] */,
+    0x7ea24006 /* 0001fa89 - 0001fa8f [    7] */,
+    0x7eaf8000 /* 0001fabe - 0001fabe [    1] */,
+    0x7eb18007 /* 0001fac6 - 0001facd [    8] */,
+    0x7eb70003 /* 0001fadc - 0001fadf [    4] */,
+    0x7eba4006 /* 0001fae9 - 0001faef [    7] */,
+    0x7ebe4006 /* 0001faf9 - 0001faff [    7] */,
+    0x7ee4c000 /* 0001fb93 - 0001fb93 [    1] */,
+    0x7ef2c024 /* 0001fbcb - 0001fbef [   37] */,
+    0x7efe8405 /* 0001fbfa - 0001ffff [ 1030] */,
+    0xa9b8001f /* 0002a6e0 - 0002a6ff [   32] */,
+    0xadce8005 /* 0002b73a - 0002b73f [    6] */,
+    0xae078001 /* 0002b81e - 0002b81f [    2] */,
+    0xb3a8800d /* 0002cea2 - 0002ceaf [   14] */,
+    0xbaf8400e /* 0002ebe1 - 0002ebef [   15] */,
+    0xbb9789a1 /* 0002ee5e - 0002f7ff [ 2466] */,
+    0xbe8785e1 /* 0002fa1e - 0002ffff [ 1506] */,
+    0xc4d2c004 /* 0003134b - 0003134f [    5] */};
 
+/// Returns whether the code unit needs to be escaped.
+///
 /// At the end of the valid Unicode code points space a lot of code points are
 /// either reserved or a noncharacter. Adding all these entries to the
-/// lookup table would add 446 entries to the table (in Unicode 14).
-/// Instead the only the start of the region is stored, every code point in
-/// this region needs to be escaped.
-_LIBCPP_HIDE_FROM_ABI inline constexpr uint32_t __unallocated_region_lower_bound = 0x000e01f0;
-
-/// Returns whether the code unit needs to be escaped.
+/// lookup table would several entries. Instead these entries are manually
+/// processed. In this large area there is a small area that should return false.
+/// This is also manually coded. Se the generation script for more details.
 ///
 /// \pre The code point is a valid Unicode code point.
 [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool __needs_escape(const char32_t __code_point) noexcept {
-  // Since __unallocated_region_lower_bound contains the unshifted range do the
-  // comparison without shifting.
-  if (__code_point >= __unallocated_region_lower_bound)
+
+  // The entries in the gap at the end.
+  if(__code_point >= 0x000e0100 && __code_point <= 0x000e01ef)
+     return false;
+
+  // The entries at the end.
+  if (__code_point >= 0x000323b0)
     return true;
 
-  ptrdiff_t __i = std::ranges::upper_bound(__entries, (__code_point << 11) | 0x7ffu) - __entries;
+  ptrdiff_t __i = std::ranges::upper_bound(__entries, (__code_point << 14) | 0x3fffu) - __entries;
   if (__i == 0)
     return false;
 
   --__i;
-  uint32_t __upper_bound = (__entries[__i] >> 11) + (__entries[__i] & 0x7ffu);
+  uint32_t __upper_bound = (__entries[__i] >> 14) + (__entries[__i] & 0x3fffu);
   return __code_point <= __upper_bound;
 }
 
diff --git a/libcxx/include/format b/libcxx/include/format
index f1e87de0f83015..07c2ba083199e9 100644
--- a/libcxx/include/format
+++ b/libcxx/include/format
@@ -193,6 +193,8 @@ namespace std {
 #include <__format/concepts.h>
 #include <__format/container_adaptor.h>
 #include <__format/enable_insertable.h>
+#include <__format/escaped_output_table.h>
+#include <__format/extended_grapheme_cluster_table.h>
 #include <__format/format_arg.h>
 #include <__format/format_arg_store.h>
 #include <__format/format_args.h>
diff --git a/libcxx/test/libcxx/utilities/format/format.string/format.string.std/escaped_output.pass.cpp b/libcxx/test/libcxx/utilities/format/format.string/format.string.std/escaped_output.pass.cpp
new file mode 100644
index 00000000000000..fc3a981365df31
--- /dev/null
+++ b/libcxx/test/libcxx/utilities/format/format.string/format.string.std/escaped_output.pass.cpp
@@ -0,0 +1,100 @@
+//===----------------------------------------------------------------------===//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
+// UNSUPPORTED: GCC-ALWAYS_INLINE-FIXME
+
+// <format>
+
+// Tests the properties of the Unicode escaped output table.
+// The libc++ algorithm has size and speed optimizations based on the properties
+// of Unicode. This means updating the Unicode tables has a likilihood of
+// breaking test. This is an assert; it requires validating whether the
+// assumptions of the size and speed optimizations are still valid.
+
+#include <algorithm>
+#include <numeric>
+#include <format>
+#include <cassert>
+
+// Contains the entries for [format.string.escaped]/2.2.1.2.1
+//   CE is a Unicode encoding and C corresponds to a UCS scalar value whose
+//   Unicode property General_Category has a value in the groups Separator (Z)
+//   or Other (C), as described by table 12 of UAX #44
+//
+// Separator (Z) consists of General_Category
+// - Zs Space_Separator,
+// - Zl Line_Separator,
+// - Zp Paragraph_Separator.
+//
+// Other (C) consists of General_Category
+// - Cc Control,
+// - Cf Format,
+// - Cs Surrogate,
+// - Co Private_Use,
+// - Cn Unassigned.
+inline constexpr int Zs = 17;
+inline constexpr int Zl = 1;
+inline constexpr int Zp = 1;
+inline constexpr int Z  = Zs + Zl + Zp;
+
+inline constexpr int Cc = 65;
+inline constexpr int Cf = 170;
+inline constexpr int Cs = 2'048;
+inline constexpr int Co = 137'468;
+inline constexpr int Cn = 824'718;
+inline constexpr int C  = Cc + Cf + Cs + Co + Cn;
+
+// This is the final part of the Unicode properties table:
+//
+// 31350..323AF  ; Lo # [4192] CJK UNIFIED IDEOGRAPH-31350..CJK UNIFIED IDEOGRAPH-323AF
+// 323B0..E0000  ; Cn # [711761] <reserved-323B0>..<reserved-E0000>
+// E0001         ; Cf #       LANGUAGE TAG
+// E0002..E001F  ; Cn #  [30] <reserved-E0002>..<reserved-E001F>
+// E0020..E007F  ; Cf #  [96] TAG SPACE..CANCEL TAG
+// E0080..E00FF  ; Cn # [128] <reserved-E0080>..<reserved-E00FF>
+// E0100..E01EF  ; Mn # [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
+// E01F0..EFFFF  ; Cn # [65040] <reserved-E01F0>..<noncharacter-EFFFF>
+// F0000..FFFFD  ; Co # [65534] <private-use-F0000>..<private-use-FFFFD>
+// FFFFE..FFFFF  ; Cn #   [2] <noncharacter-FFFFE>..<noncharacter-FFFFF>
+// 100000..10FFFD; Co # [65534] <private-use-100000>..<private-use-10FFFD>
+// 10FFFE..10FFFF; Cn #   [2] <noncharacter-10FFFE>..<noncharacter-10FFFF>
+//
+// It can be observed all entries in the range 323B0..10FFFF are in the
+// categories Cf, Co, Cn, except a small range with the property Mn.
+// In order to reduce the size of the table only the entires in the range
+// [0000, 323B0) are stored in the table. The entries in the range
+// [323B0, 10FFFF] use a hand-crafted algorithm.
+//
+// This means a number of entries are omitted
+inline constexpr int excluded = ((0x10FFFF - 0x323B0) + 1) - 240;
+
+inline constexpr int entries = Z + C - excluded;
+
+static constexpr int count_entries() {
+  return std::transform_reduce(
+      std::begin(std::__escaped_output_table::__entries),
+      std::end(std::__escaped_output_table::__entries),
+      0,
+      std::plus{},
+      [](auto entry) { return 1 + static_cast<int>(entry & 0x3fffu); });
+}
+static_assert(count_entries() == entries);
+
+int main() {
+  for (char32_t c = 0x31350; c <= 0x323AF; ++c) // 31350..323AF  ; Lo # [4192]
+    assert(std::__escaped_output_table::__needs_escape(c) == false);
+
+  for (char32_t c = 0x323B0; c <= 0xE00FF; ++c) // 323B0..E00FF ; C
+    assert(std::__escaped_output_table::__needs_escape(c) == true);
+
+  for (char32_t c = 0xE0100; c <= 0xE01EF; ++c) // E0100..E01EF  ; Mn # [240]
+    assert(std::__escaped_output_table::__needs_escape(c) == false);
+
+  for (char32_t c = 0xE01F0; c <= 0x10FFFF; ++c) // E01F0..10FFFF; C
+    assert(std::__escaped_output_table::__needs_escape(c) == true);
+}
diff --git a/libcxx/utils/generate_escaped_output_table.py b/libcxx/utils/generate_escaped_output_table.py
index 2279a37afbbaeb..dee809898f1283 100755
--- a/libcxx/utils/generate_escaped_output_table.py
+++ b/libcxx/utils/generate_escaped_output_table.py
@@ -113,34 +113,38 @@ def compactPropertyRanges(input: list[PropertyRange]) -> list[PropertyRange]:
 /// table lacks a property, thus having more bits available for the size.
 ///
 /// The data has 2 values:
-/// - bits [0, 10] The size of the range, allowing 2048 elements.
-/// - bits [11, 31] The lower bound code point of the range. The upper bound of
-///   the range is lower bound + size.
+/// - bits [0, 13] The size of the range, allowing 16384 elements.
+/// - bits [14, 31] The lower bound code point of the range. The upper bound of
+///   the range is lower bound + size. Note the code expects code units the fit
+///   into 18 bits, instead of the 21 bits needed for the full Unicode range.
 _LIBCPP_HIDE_FROM_ABI inline constexpr uint32_t __entries[{size}] = {{
 {entries}}};
 
+/// Returns whether the code unit needs to be escaped.
+///
 /// At the end of the valid Unicode code points space a lot of code points are
 /// either reserved or a noncharacter. Adding all these entries to the
-/// lookup table would add 446 entries to the table (in Unicode 14).
-/// Instead the only the start of the region is stored, every code point in
-/// this region needs to be escaped.
-_LIBCPP_HIDE_FROM_ABI inline constexpr uint32_t __unallocated_region_lower_bound = 0x{unallocated:08x};
-
-/// Returns whether the code unit needs to be escaped.
+/// lookup table would several entries. Instead these entries are manually
+/// processed. In this large area there is a small area that should return false.
+/// This is also manually coded. Se the generation script for more details.
 ///
 /// \pre The code point is a valid Unicode code point.
 [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool __needs_escape(const char32_t __code_point) noexcept {{
-  // Since __unallocated_region_lower_bound contains the unshifted range do the
-  // comparison without shifting.
-  if (__code_point >= __unallocated_region_lower_bound)
+
+  // The entries in the gap at the end.
+  if(__code_point >= 0x{gap_lower:08x} && __code_point <= 0x{gap_upper:08x})
+     return false;
+
+  // The entries at the end.
+  if (__code_point >= 0x{unallocated:08x})
     return true;
 
-  ptrdiff_t __i = std::ranges::upper_bound(__entries, (__code_point << 11) | 0x7ffu) - __entries;
+  ptrdiff_t __i = std::ranges::upper_bound(__entries, (__code_point << 14) | 0x3fffu) - __entries;
   if (__i == 0)
     return false;
 
   --__i;
-  uint32_t __upper_bound = (__entries[__i] >> 11) + (__entries[__i] & 0x7ffu);
+  uint32_t __upper_bound = (__entries[__i] >> 14) + (__entries[__i] & 0x3fffu);
   return __code_point <= __upper_bound;
 }}
 """
@@ -245,28 +249,33 @@ def property_ranges_to_table(ranges: list[PropertyRange]) -> list[Entry]:
 
         while True:
             e = Entry(range.lower, range.upper - range.lower)
-            if e.offset <= 2047:
+            if e.offset <= 16383:
                 result.append(e)
                 break
-            e.offset = 2047
+            e.offset = 16383
             result.append(e)
-            range.lower += 2048
+            range.lower += 16384
     return result
 
 
 cpp_entrytemplate = "    0x{:08x} /* {:08x} - {:08x} [{:>5}] */"
 
 
-def generate_cpp_data(ranges: list[PropertyRange], unallocated: int) -> str:
+def generate_cpp_data(
+    ranges: list[PropertyRange], unallocated: int, gap_lower: int, gap_upper: int
+) -> str:
     result = StringIO()
     table = property_ranges_to_table(ranges)
+    # Validates all entries fit in 18 bits.
+    for x in table:
+        assert x.lower + x.offset < 0x3FFFF
     result.write(
         DATA_ARRAY_TEMPLATE.format(
             size=len(table),
             entries=",\n".join(
                 [
                     cpp_entrytemplate.format(
-                        x.lower << 11 | x.offset,
+                        x.lower << 14 | x.offset,
                         x.lower,
                         x.lower + x.offset,
                         x.offset + 1,
@@ -275,6 +284,8 @@ def generate_cpp_data(ranges: list[PropertyRange], unallocated: int) -> str:
                 ]
             ),
             unallocated=unallocated,
+            gap_lower=gap_lower,
+            gap_upper=gap_upper,
         )
     )
 
@@ -305,23 +316,28 @@ def generate_data_tables() -> str:
 
     data = compactPropertyRanges(sorted(properties, key=lambda x: x.lower))
 
-    # The last entry is large. In Unicode 14 it contains the entries
-    # 3134B..0FFFF 912564 elements
-    # This are 446 entries of 1325 entries in the table.
-    # Based on the nature of these entries it is expected they remain for the
-    # forseeable future. Therefore we only store the lower bound of this section.
-    #
-    # When this region becomes substantially smaller we need to investigate
-    # this design.
-    #
-    # Due to P2713R1 Escaping improvements in std::format the range
+    # The output table has two large entries at the end, with a small "gap"
     #   E0100..E01EF  ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-    # is no longer part of these entries. This causes an increase in the size
-    # of the table.
-    assert data[-1].upper == 0x10FFFF
-    # assert data[-1].upper - data[-1].lower > 900000
-
-    return "\n".join([generate_cpp_data(data[:-1], data[-1].lower)])
+    # Based on Unicode 15.1.0:
+    # - Encoding all these entries in the table requires 1173 entries.
+    # - Manually handling these last two blocks reduces the size to 729 entries.
+    # This not only reduces the binary size, but also improves the performance
+    # by having less elements to search.
+    # The exact entrires may differ between Unicode versions. When these numbers
+    # change the test needs to be updated too.
+    #   test/libcxx/utilities/format/format.string/format.string.std/escaped_output.pass.cpp
+    assert (data[-2].lower) == 0x323B0
+    assert (data[-2].upper) == 0xE00FF
+    assert (data[-1].lower) == 0xE01F0
+    assert (data[-1].upper) == 0x10FFFF
+
+    return "\n".join(
+        [
+            generate_cpp_data(
+                data[:-2], data[-2].lower, data[-2].upper + 1, data[-1].lower - 1
+            )
+        ]
+    )
 
 
 if __name__ == "__main__":



More information about the llvm-branch-commits mailing list