speed up unicode decomposition and recomposition
Having committed the optimization for unicode normalization quick check,
Michael Paquier suggested I might do the same for decomposition as well. I
wrote:
I'll
do some performance testing soon. Note that a 25kB increase in size could
be present in frontend binaries as well in this case. While looking at
decomposition, I noticed that recomposition does a linear search through
all 6600+ entries, although it seems only about 800 are valid for that.
That could be optimized as well now, since with hashing we have more
flexibility in the ordering and can put the recomp-valid entries in front.
I'm not yet sure if it's worth the additional complexity. I'll take a look
and start a new thread.
The attached patch uses a perfect hash for codepoint decomposition, and for
recomposing reduces the linear search from 6604 entries to 942.
The performance is very nice, and if I'd known better I would have done
this first, since the decomp array is as big as the two quick check arrays
put together:
Normalize, decomp only
select count(normalize(t, NFD)) from (
select md5(i::text) as t from
generate_series(1,100000) as i
) s;
master patchÏ
887ms 231ms
select count(normalize(t, NFD)) from (
select repeat(U&'\00E4\00C5\0958\00F4\1EBF\3300\1FE2\3316\2465\322D', i % 3
+ 1) as t from
generate_series(1,100000) as i
) s;
master patch
1110ms 208ms
Normalize, decomp+recomp (note: 100x less data)
select count(normalize(t, NFC)) from (
select md5(i::text) as t from
generate_series(1,1000) as i
) s;
master patch
194ms 50.6ms
select count(normalize(t, NFC)) from (
select repeat(U&'\00E4\00C5\0958\00F4\1EBF\3300\1FE2\3316\2465\322D', i % 3
+ 1) as t from
generate_series(1,1000) as i
) s;
master patch
137ms 39.4ms
Quick check is another 2x faster on top of previous gains, since it tests
canonical class via the decomposition array:
-- all chars are quickcheck YES
select count(*) from (
select md5(i::text) as t from
generate_series(1,100000) as i
) s
where t is NFC normalized;
master patch
296ms 131ms
Some other considerations:
- As I alluded above, this adds ~26kB to libpq because of SASLPrep. Since
the decomp array was reordered to optimize linear search, it can no longer
be used for binary search. It's possible to build two arrays, one for
frontend and one for backend, but that's additional complexity. We could
also force frontend to do a linear search all the time, but that seems
foolish. I haven't checked if it's possible to exclude the hash from
backend's libpq.
- I could split out the two approaches into separate patches, but it'd be
rather messy.
I'll add a CF entry for this.
--
John Naylor
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
Attachments:
v1-0001-Optimize-unicode-decomposition-and-recomposition.patchapplication/octet-stream; name=v1-0001-Optimize-unicode-decomposition-and-recomposition.patchDownload
From bc65c8aaaeffe392c9fb55c2228becebcf0cf93e Mon Sep 17 00:00:00 2001
From: John Naylor <john.naylor@2ndquadrant.com>
Date: Wed, 14 Oct 2020 12:38:44 -0400
Subject: [PATCH v1] Optimize unicode decomposition and recomposition
Use a perfect hash to look up a codepoint in the decomposition
array. Since the order of the array is less important now, this
allows us to move all recomposeable codepoints to the front. Linear
search now only scans 1/6 of the array, speeding up recomposition
accordingly. Normalization is about 4x faster, and testing for
normalized strings is about 2x faster.
---
.../unicode/generate-unicode_norm_table.pl | 96 +-
src/common/unicode_norm.c | 82 +-
src/include/common/unicode_norm_table.h | 3638 ++++++++++++-----
src/tools/pgindent/exclude_file_patterns | 3 +-
4 files changed, 2796 insertions(+), 1023 deletions(-)
diff --git a/src/common/unicode/generate-unicode_norm_table.pl b/src/common/unicode/generate-unicode_norm_table.pl
index 7ce15e1a03..ffa47b3638 100644
--- a/src/common/unicode/generate-unicode_norm_table.pl
+++ b/src/common/unicode/generate-unicode_norm_table.pl
@@ -10,6 +10,10 @@
use strict;
use warnings;
+use FindBin;
+use lib "$FindBin::RealBin/../../tools/";
+use PerfectHash;
+
my $output_file = "unicode_norm_table.h";
my $FH;
@@ -96,6 +100,17 @@ typedef struct
* decomposition itself if DECOMP_INLINE */
} pg_unicode_decomposition;
+/* Typedef for hash function on quick check table */
+typedef int (*decomp_hash_func) (const void *key);
+
+/* Information for decomposition lookup with perfect hash function */
+typedef struct
+{
+ const pg_unicode_decomposition *decomps;
+ decomp_hash_func hash;
+ int num_decomps;
+} pg_unicode_decompinfo;
+
#define DECOMP_NO_COMPOSE 0x80 /* don't use for re-composition */
#define DECOMP_INLINE 0x40 /* decomposition is stored inline in
* dec_index */
@@ -114,13 +129,18 @@ HEADER
my $decomp_index = 0;
my $decomp_string = "";
-my $last_code = $characters[-1]->{code};
+# First iterate through the codes in order to derive some values
+# and build the output string.
foreach my $char (@characters)
{
my $code = $char->{code};
my $class = $char->{class};
my $decomp = $char->{decomp};
+ # Give all entries a default sort order. Later, we will mark entries
+ # needed for recomposition with an earlier sort order
+ $char->{sortorder} = 0;
+
# The character decomposition mapping field in UnicodeData.txt is a list
# of unicode codepoints, separated by space. But it can be prefixed with
# so-called compatibility formatting tag, like "<compat>", or "<font>".
@@ -157,25 +177,33 @@ foreach my $char (@characters)
&& $character_hash{$first_decomp}->{class} != 0)
{
$flags .= " | DECOMP_NO_COMPOSE";
- $comment = "non-starter decomposition";
+ $char->{comment} = "non-starter decomposition";
}
else
{
foreach my $lcode (@composition_exclusion_codes)
{
- if ($lcode eq $char->{code})
+ if ($lcode eq $code)
{
$flags .= " | DECOMP_NO_COMPOSE";
- $comment = "in exclusion list";
+ $char->{comment} = "in exclusion list";
last;
}
}
}
+
+ # Set sortorder for some entries of decomp size 2 so that they
+ # come before the rest.
+ # XXX This must match the DECOMPOSITION_NO_COMPOSE C macro above!
+ # See the inverse lookup in recompose_code() found in
+ # common/unicode_norm.c.
+ $char->{sortorder} = -1
+ if ($flags !~ /DECOMP_COMPAT/ && $flags !~ /DECOMP_NO_COMPOSE/)
}
if ($decomp_size == 0)
{
- print $OUTPUT "\t{0x$code, $class, 0$flags, 0}";
+ $char->{output} = sprintf "\t{0x$code, $class, 0$flags, 0}";
}
elsif ($decomp_size == 1 && length($first_decomp) <= 4)
{
@@ -183,11 +211,11 @@ foreach my $char (@characters)
# The decomposition consists of a single codepoint, and it fits
# in a uint16, so we can store it "inline" in the main table.
$flags .= " | DECOMP_INLINE";
- print $OUTPUT "\t{0x$code, $class, 1$flags, 0x$first_decomp}";
+ $char->{output} = sprintf "\t{0x$code, $class, 1$flags, 0x$first_decomp}";
}
else
{
- print $OUTPUT
+ $char->{output} = sprintf
"\t{0x$code, $class, $decomp_size$flags, $decomp_index}";
# Now save the decompositions into a dedicated area that will
@@ -203,21 +231,18 @@ foreach my $char (@characters)
$decomp_index = $decomp_index + $decomp_size;
}
+}
- # Print a comma after all items except the last one.
- print $OUTPUT "," unless ($code eq $last_code);
- if ($comment ne "")
- {
+my @code_packed;
+foreach my $char (sort recomp_sort @characters)
+{
+ # Save the code point bytes as a string in network order.
+ push @code_packed, pack('N', hex($char->{code}));
- # If the line is wide already, indent the comment with one tab,
- # otherwise with two. This is to make the output match the way
- # pgindent would mangle it. (This is quite hacky. To do this
- # properly, we should actually track how long the line is so far,
- # but this works for now.)
- print $OUTPUT "\t" if ($decomp_index < 10);
+ print $OUTPUT $char->{output};
- print $OUTPUT "\t/* $comment */" if ($comment ne "");
- }
+ print $OUTPUT ",";
+ print $OUTPUT "\t/* $char->{comment} */" if ($char->{comment});
print $OUTPUT "\n";
}
print $OUTPUT "\n};\n\n";
@@ -231,4 +256,37 @@ $decomp_string
};
HEADER
+# Emit the definition of the perfect hash function.
+my $funcname = 'DecompMain_hash_func';
+my $f = PerfectHash::generate_hash_function(\@code_packed, $funcname,
+ fixed_key_length => 4);
+print $OUTPUT "\n/* Perfect hash function for decomposition */\n";
+print $OUTPUT "static $f\n";
+
+# Emit the structure that wraps the hash lookup information into
+# one variable.
+print $OUTPUT <<HEADER;
+/* Hash lookup information for decomposition */
+static const pg_unicode_decompinfo UnicodeDecompInfo =
+{
+ UnicodeDecompMain,
+ $funcname,
+ $num_characters
+};
+HEADER
+
close $OUTPUT;
+
+# Sort by specially-marked sort order, then by code point.
+sub recomp_sort
+{
+ my $anum = hex($a->{code});
+ my $bnum = hex($a->{code});
+
+ return -1 if ($a->{sortorder} < $b->{sortorder});
+ return 1 if ($a->{sortorder} > $b->{sortorder});
+
+ return -1 if $anum < $bnum;
+ return 0 if $anum == $bnum;
+ return 1 if $anum > $bnum;
+}
diff --git a/src/common/unicode_norm.c b/src/common/unicode_norm.c
index 4bb6a0f587..99bfab177d 100644
--- a/src/common/unicode_norm.c
+++ b/src/common/unicode_norm.c
@@ -44,29 +44,37 @@
#define NCOUNT VCOUNT * TCOUNT
#define SCOUNT LCOUNT * NCOUNT
-/* comparison routine for bsearch() of decomposition lookup table. */
-static int
-conv_compare(const void *p1, const void *p2)
-{
- uint32 v1,
- v2;
-
- v1 = *(const uint32 *) p1;
- v2 = ((const pg_unicode_decomposition *) p2)->codepoint;
- return (v1 > v2) ? 1 : ((v1 == v2) ? 0 : -1);
-}
/*
* Get the entry corresponding to code in the decomposition lookup table.
*/
-static pg_unicode_decomposition *
+static const pg_unicode_decomposition *
get_code_entry(pg_wchar code)
{
- return bsearch(&(code),
- UnicodeDecompMain,
- lengthof(UnicodeDecompMain),
- sizeof(pg_unicode_decomposition),
- conv_compare);
+ int h;
+ uint32 hashkey;
+ pg_unicode_decompinfo decompinfo = UnicodeDecompInfo;
+
+ /*
+ * Compute the hash function. The hash key is the codepoint with the bytes
+ * in network order.
+ */
+ hashkey = pg_hton32(code);
+ h = decompinfo.hash(&hashkey);
+
+ /* An out-of-range result implies no match */
+ if (h < 0 || h >= decompinfo.num_decomps)
+ return NULL;
+
+ /*
+ * Since it's a perfect hash, we need only match to the specific codepoint
+ * it identifies.
+ */
+ if (code != decompinfo.decomps[h].codepoint)
+ return NULL;
+
+ /* Success! */
+ return &decompinfo.decomps[h];
}
/*
@@ -77,7 +85,7 @@ get_code_entry(pg_wchar code)
* is only valid until next call to this function!
*/
static const pg_wchar *
-get_code_decomposition(pg_unicode_decomposition *entry, int *dec_size)
+get_code_decomposition(const pg_unicode_decomposition *entry, int *dec_size)
{
static pg_wchar x;
@@ -104,7 +112,7 @@ get_code_decomposition(pg_unicode_decomposition *entry, int *dec_size)
static int
get_decomposed_size(pg_wchar code, bool compat)
{
- pg_unicode_decomposition *entry;
+ const pg_unicode_decomposition *entry;
int size = 0;
int i;
const uint32 *decomp;
@@ -197,17 +205,31 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
* Do an inverse lookup of the decomposition tables to see if anything
* matches. The comparison just needs to be a perfect match on the
* sub-table of size two, because the start character has already been
- * recomposed partially.
+ * recomposed partially. The array UnicodeDecompMain should have all
+ * recomposeable codepoints at the front as a performance optimization.
+ * See common/generate-unicode_norm_table.pl.
*/
for (i = 0; i < lengthof(UnicodeDecompMain); i++)
{
const pg_unicode_decomposition *entry = &UnicodeDecompMain[i];
- if (DECOMPOSITION_SIZE(entry) != 2)
- continue;
-
- if (DECOMPOSITION_NO_COMPOSE(entry))
- continue;
+ if (DECOMPOSITION_SIZE(entry) != 2 ||
+ DECOMPOSITION_NO_COMPOSE(entry))
+ {
+#ifdef USE_ASSERT_CHECKING
+ /*
+ * Verify that there are no recomposeable codepoints
+ * from this point forwards.
+ */
+ for (int j = i; j < lengthof(UnicodeDecompMain); j++)
+ {
+ entry = &UnicodeDecompMain[j];
+ Assert(DECOMPOSITION_SIZE(entry) != 2 ||
+ DECOMPOSITION_NO_COMPOSE(entry));
+ }
+#endif
+ break;
+ }
if (start == UnicodeDecomp_codepoints[entry->dec_index] &&
code == UnicodeDecomp_codepoints[entry->dec_index + 1])
@@ -231,7 +253,7 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
static void
decompose_code(pg_wchar code, bool compat, pg_wchar **result, int *current)
{
- pg_unicode_decomposition *entry;
+ const pg_unicode_decomposition *entry;
int i;
const uint32 *decomp;
int dec_size;
@@ -358,8 +380,8 @@ unicode_normalize(UnicodeNormalizationForm form, const pg_wchar *input)
pg_wchar prev = decomp_chars[count - 1];
pg_wchar next = decomp_chars[count];
pg_wchar tmp;
- pg_unicode_decomposition *prevEntry = get_code_entry(prev);
- pg_unicode_decomposition *nextEntry = get_code_entry(next);
+ const pg_unicode_decomposition *prevEntry = get_code_entry(prev);
+ const pg_unicode_decomposition *nextEntry = get_code_entry(next);
/*
* If no entries are found, the character used is either an Hangul
@@ -417,7 +439,7 @@ unicode_normalize(UnicodeNormalizationForm form, const pg_wchar *input)
for (count = 1; count < decomp_size; count++)
{
pg_wchar ch = decomp_chars[count];
- pg_unicode_decomposition *ch_entry = get_code_entry(ch);
+ const pg_unicode_decomposition *ch_entry = get_code_entry(ch);
int ch_class = (ch_entry == NULL) ? 0 : ch_entry->comb_class;
pg_wchar composite;
@@ -458,7 +480,7 @@ unicode_normalize(UnicodeNormalizationForm form, const pg_wchar *input)
static uint8
get_canonical_class(pg_wchar ch)
{
- pg_unicode_decomposition *entry = get_code_entry(ch);
+ const pg_unicode_decomposition *entry = get_code_entry(ch);
if (!entry)
return 0;
diff --git a/src/include/common/unicode_norm_table.h b/src/include/common/unicode_norm_table.h
index 96d43b893c..ad5792dbb7 100644
--- a/src/include/common/unicode_norm_table.h
+++ b/src/include/common/unicode_norm_table.h
@@ -25,6 +25,17 @@ typedef struct
* decomposition itself if DECOMP_INLINE */
} pg_unicode_decomposition;
+/* Typedef for hash function on quick check table */
+typedef int (*decomp_hash_func) (const void *key);
+
+/* Information for decomposition lookup with perfect hash function */
+typedef struct
+{
+ const pg_unicode_decomposition *decomps;
+ decomp_hash_func hash;
+ int num_decomps;
+} pg_unicode_decompinfo;
+
#define DECOMP_NO_COMPOSE 0x80 /* don't use for re-composition */
#define DECOMP_INLINE 0x40 /* decomposition is stored inline in
* dec_index */
@@ -38,20 +49,6 @@ typedef struct
/* Table of Unicode codepoints and their decompositions */
static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{
- {0x00A0, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0020},
- {0x00A8, 0, 2 | DECOMP_COMPAT, 0},
- {0x00AA, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0061},
- {0x00AF, 0, 2 | DECOMP_COMPAT, 2},
- {0x00B2, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0032},
- {0x00B3, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0033},
- {0x00B4, 0, 2 | DECOMP_COMPAT, 4},
- {0x00B5, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03BC},
- {0x00B8, 0, 2 | DECOMP_COMPAT, 6},
- {0x00B9, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0031},
- {0x00BA, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x006F},
- {0x00BC, 0, 3 | DECOMP_COMPAT, 8},
- {0x00BD, 0, 3 | DECOMP_COMPAT, 11},
- {0x00BE, 0, 3 | DECOMP_COMPAT, 14},
{0x00C0, 0, 2, 17},
{0x00C1, 0, 2, 19},
{0x00C2, 0, 2, 21},
@@ -150,8 +147,6 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x012E, 0, 2, 207},
{0x012F, 0, 2, 209},
{0x0130, 0, 2, 211},
- {0x0132, 0, 2 | DECOMP_COMPAT, 213},
- {0x0133, 0, 2 | DECOMP_COMPAT, 215},
{0x0134, 0, 2, 217},
{0x0135, 0, 2, 219},
{0x0136, 0, 2, 221},
@@ -162,15 +157,12 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x013C, 0, 2, 231},
{0x013D, 0, 2, 233},
{0x013E, 0, 2, 235},
- {0x013F, 0, 2 | DECOMP_COMPAT, 237},
- {0x0140, 0, 2 | DECOMP_COMPAT, 239},
{0x0143, 0, 2, 241},
{0x0144, 0, 2, 243},
{0x0145, 0, 2, 245},
{0x0146, 0, 2, 247},
{0x0147, 0, 2, 249},
{0x0148, 0, 2, 251},
- {0x0149, 0, 2 | DECOMP_COMPAT, 253},
{0x014C, 0, 2, 255},
{0x014D, 0, 2, 257},
{0x014E, 0, 2, 259},
@@ -218,20 +210,10 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x017C, 0, 2, 343},
{0x017D, 0, 2, 345},
{0x017E, 0, 2, 347},
- {0x017F, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0073},
{0x01A0, 0, 2, 349},
{0x01A1, 0, 2, 351},
{0x01AF, 0, 2, 353},
{0x01B0, 0, 2, 355},
- {0x01C4, 0, 2 | DECOMP_COMPAT, 357},
- {0x01C5, 0, 2 | DECOMP_COMPAT, 359},
- {0x01C6, 0, 2 | DECOMP_COMPAT, 361},
- {0x01C7, 0, 2 | DECOMP_COMPAT, 363},
- {0x01C8, 0, 2 | DECOMP_COMPAT, 365},
- {0x01C9, 0, 2 | DECOMP_COMPAT, 367},
- {0x01CA, 0, 2 | DECOMP_COMPAT, 369},
- {0x01CB, 0, 2 | DECOMP_COMPAT, 371},
- {0x01CC, 0, 2 | DECOMP_COMPAT, 373},
{0x01CD, 0, 2, 375},
{0x01CE, 0, 2, 377},
{0x01CF, 0, 2, 379},
@@ -265,9 +247,6 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x01EE, 0, 2, 435},
{0x01EF, 0, 2, 437},
{0x01F0, 0, 2, 439},
- {0x01F1, 0, 2 | DECOMP_COMPAT, 441},
- {0x01F2, 0, 2 | DECOMP_COMPAT, 443},
- {0x01F3, 0, 2 | DECOMP_COMPAT, 445},
{0x01F4, 0, 2, 447},
{0x01F5, 0, 2, 449},
{0x01F8, 0, 2, 451},
@@ -322,144 +301,8 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x0231, 0, 2, 549},
{0x0232, 0, 2, 551},
{0x0233, 0, 2, 553},
- {0x02B0, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0068},
- {0x02B1, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0266},
- {0x02B2, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x006A},
- {0x02B3, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0072},
- {0x02B4, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0279},
- {0x02B5, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x027B},
- {0x02B6, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0281},
- {0x02B7, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0077},
- {0x02B8, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0079},
- {0x02D8, 0, 2 | DECOMP_COMPAT, 555},
- {0x02D9, 0, 2 | DECOMP_COMPAT, 557},
- {0x02DA, 0, 2 | DECOMP_COMPAT, 559},
- {0x02DB, 0, 2 | DECOMP_COMPAT, 561},
- {0x02DC, 0, 2 | DECOMP_COMPAT, 563},
- {0x02DD, 0, 2 | DECOMP_COMPAT, 565},
- {0x02E0, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0263},
- {0x02E1, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x006C},
- {0x02E2, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0073},
- {0x02E3, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0078},
- {0x02E4, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0295},
- {0x0300, 230, 0, 0},
- {0x0301, 230, 0, 0},
- {0x0302, 230, 0, 0},
- {0x0303, 230, 0, 0},
- {0x0304, 230, 0, 0},
- {0x0305, 230, 0, 0},
- {0x0306, 230, 0, 0},
- {0x0307, 230, 0, 0},
- {0x0308, 230, 0, 0},
- {0x0309, 230, 0, 0},
- {0x030A, 230, 0, 0},
- {0x030B, 230, 0, 0},
- {0x030C, 230, 0, 0},
- {0x030D, 230, 0, 0},
- {0x030E, 230, 0, 0},
- {0x030F, 230, 0, 0},
- {0x0310, 230, 0, 0},
- {0x0311, 230, 0, 0},
- {0x0312, 230, 0, 0},
- {0x0313, 230, 0, 0},
- {0x0314, 230, 0, 0},
- {0x0315, 232, 0, 0},
- {0x0316, 220, 0, 0},
- {0x0317, 220, 0, 0},
- {0x0318, 220, 0, 0},
- {0x0319, 220, 0, 0},
- {0x031A, 232, 0, 0},
- {0x031B, 216, 0, 0},
- {0x031C, 220, 0, 0},
- {0x031D, 220, 0, 0},
- {0x031E, 220, 0, 0},
- {0x031F, 220, 0, 0},
- {0x0320, 220, 0, 0},
- {0x0321, 202, 0, 0},
- {0x0322, 202, 0, 0},
- {0x0323, 220, 0, 0},
- {0x0324, 220, 0, 0},
- {0x0325, 220, 0, 0},
- {0x0326, 220, 0, 0},
- {0x0327, 202, 0, 0},
- {0x0328, 202, 0, 0},
- {0x0329, 220, 0, 0},
- {0x032A, 220, 0, 0},
- {0x032B, 220, 0, 0},
- {0x032C, 220, 0, 0},
- {0x032D, 220, 0, 0},
- {0x032E, 220, 0, 0},
- {0x032F, 220, 0, 0},
- {0x0330, 220, 0, 0},
- {0x0331, 220, 0, 0},
- {0x0332, 220, 0, 0},
- {0x0333, 220, 0, 0},
- {0x0334, 1, 0, 0},
- {0x0335, 1, 0, 0},
- {0x0336, 1, 0, 0},
- {0x0337, 1, 0, 0},
- {0x0338, 1, 0, 0},
- {0x0339, 220, 0, 0},
- {0x033A, 220, 0, 0},
- {0x033B, 220, 0, 0},
- {0x033C, 220, 0, 0},
- {0x033D, 230, 0, 0},
- {0x033E, 230, 0, 0},
- {0x033F, 230, 0, 0},
- {0x0340, 230, 1 | DECOMP_INLINE, 0x0300},
- {0x0341, 230, 1 | DECOMP_INLINE, 0x0301},
- {0x0342, 230, 0, 0},
- {0x0343, 230, 1 | DECOMP_INLINE, 0x0313},
- {0x0344, 230, 2 | DECOMP_NO_COMPOSE, 567}, /* non-starter decomposition */
- {0x0345, 240, 0, 0},
- {0x0346, 230, 0, 0},
- {0x0347, 220, 0, 0},
- {0x0348, 220, 0, 0},
- {0x0349, 220, 0, 0},
- {0x034A, 230, 0, 0},
- {0x034B, 230, 0, 0},
- {0x034C, 230, 0, 0},
- {0x034D, 220, 0, 0},
- {0x034E, 220, 0, 0},
- {0x0350, 230, 0, 0},
- {0x0351, 230, 0, 0},
- {0x0352, 230, 0, 0},
- {0x0353, 220, 0, 0},
- {0x0354, 220, 0, 0},
- {0x0355, 220, 0, 0},
- {0x0356, 220, 0, 0},
- {0x0357, 230, 0, 0},
- {0x0358, 232, 0, 0},
- {0x0359, 220, 0, 0},
- {0x035A, 220, 0, 0},
- {0x035B, 230, 0, 0},
- {0x035C, 233, 0, 0},
- {0x035D, 234, 0, 0},
- {0x035E, 234, 0, 0},
- {0x035F, 233, 0, 0},
- {0x0360, 234, 0, 0},
- {0x0361, 234, 0, 0},
- {0x0362, 233, 0, 0},
- {0x0363, 230, 0, 0},
- {0x0364, 230, 0, 0},
- {0x0365, 230, 0, 0},
- {0x0366, 230, 0, 0},
- {0x0367, 230, 0, 0},
- {0x0368, 230, 0, 0},
- {0x0369, 230, 0, 0},
- {0x036A, 230, 0, 0},
- {0x036B, 230, 0, 0},
- {0x036C, 230, 0, 0},
- {0x036D, 230, 0, 0},
- {0x036E, 230, 0, 0},
- {0x036F, 230, 0, 0},
- {0x0374, 0, 1 | DECOMP_INLINE, 0x02B9},
- {0x037A, 0, 2 | DECOMP_COMPAT, 569},
- {0x037E, 0, 1 | DECOMP_INLINE, 0x003B},
- {0x0384, 0, 2 | DECOMP_COMPAT, 571},
{0x0385, 0, 2, 573},
{0x0386, 0, 2, 575},
- {0x0387, 0, 1 | DECOMP_INLINE, 0x00B7},
{0x0388, 0, 2, 577},
{0x0389, 0, 2, 579},
{0x038A, 0, 2, 581},
@@ -479,19 +322,8 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x03CC, 0, 2, 609},
{0x03CD, 0, 2, 611},
{0x03CE, 0, 2, 613},
- {0x03D0, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B2},
- {0x03D1, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B8},
- {0x03D2, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03A5},
{0x03D3, 0, 2, 615},
{0x03D4, 0, 2, 617},
- {0x03D5, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C6},
- {0x03D6, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C0},
- {0x03F0, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03BA},
- {0x03F1, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C1},
- {0x03F2, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C2},
- {0x03F4, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0398},
- {0x03F5, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B5},
- {0x03F9, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03A3},
{0x0400, 0, 2, 619},
{0x0401, 0, 2, 621},
{0x0403, 0, 2, 623},
@@ -510,11 +342,6 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x045E, 0, 2, 649},
{0x0476, 0, 2, 651},
{0x0477, 0, 2, 653},
- {0x0483, 230, 0, 0},
- {0x0484, 230, 0, 0},
- {0x0485, 230, 0, 0},
- {0x0486, 230, 0, 0},
- {0x0487, 230, 0, 0},
{0x04C1, 0, 2, 655},
{0x04C2, 0, 2, 657},
{0x04D0, 0, 2, 659},
@@ -549,615 +376,51 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x04F5, 0, 2, 717},
{0x04F8, 0, 2, 719},
{0x04F9, 0, 2, 721},
- {0x0587, 0, 2 | DECOMP_COMPAT, 723},
- {0x0591, 220, 0, 0},
- {0x0592, 230, 0, 0},
- {0x0593, 230, 0, 0},
- {0x0594, 230, 0, 0},
- {0x0595, 230, 0, 0},
- {0x0596, 220, 0, 0},
- {0x0597, 230, 0, 0},
- {0x0598, 230, 0, 0},
- {0x0599, 230, 0, 0},
- {0x059A, 222, 0, 0},
- {0x059B, 220, 0, 0},
- {0x059C, 230, 0, 0},
- {0x059D, 230, 0, 0},
- {0x059E, 230, 0, 0},
- {0x059F, 230, 0, 0},
- {0x05A0, 230, 0, 0},
- {0x05A1, 230, 0, 0},
- {0x05A2, 220, 0, 0},
- {0x05A3, 220, 0, 0},
- {0x05A4, 220, 0, 0},
- {0x05A5, 220, 0, 0},
- {0x05A6, 220, 0, 0},
- {0x05A7, 220, 0, 0},
- {0x05A8, 230, 0, 0},
- {0x05A9, 230, 0, 0},
- {0x05AA, 220, 0, 0},
- {0x05AB, 230, 0, 0},
- {0x05AC, 230, 0, 0},
- {0x05AD, 222, 0, 0},
- {0x05AE, 228, 0, 0},
- {0x05AF, 230, 0, 0},
- {0x05B0, 10, 0, 0},
- {0x05B1, 11, 0, 0},
- {0x05B2, 12, 0, 0},
- {0x05B3, 13, 0, 0},
- {0x05B4, 14, 0, 0},
- {0x05B5, 15, 0, 0},
- {0x05B6, 16, 0, 0},
- {0x05B7, 17, 0, 0},
- {0x05B8, 18, 0, 0},
- {0x05B9, 19, 0, 0},
- {0x05BA, 19, 0, 0},
- {0x05BB, 20, 0, 0},
- {0x05BC, 21, 0, 0},
- {0x05BD, 22, 0, 0},
- {0x05BF, 23, 0, 0},
- {0x05C1, 24, 0, 0},
- {0x05C2, 25, 0, 0},
- {0x05C4, 230, 0, 0},
- {0x05C5, 220, 0, 0},
- {0x05C7, 18, 0, 0},
- {0x0610, 230, 0, 0},
- {0x0611, 230, 0, 0},
- {0x0612, 230, 0, 0},
- {0x0613, 230, 0, 0},
- {0x0614, 230, 0, 0},
- {0x0615, 230, 0, 0},
- {0x0616, 230, 0, 0},
- {0x0617, 230, 0, 0},
- {0x0618, 30, 0, 0},
- {0x0619, 31, 0, 0},
- {0x061A, 32, 0, 0},
{0x0622, 0, 2, 725},
{0x0623, 0, 2, 727},
{0x0624, 0, 2, 729},
{0x0625, 0, 2, 731},
{0x0626, 0, 2, 733},
- {0x064B, 27, 0, 0},
- {0x064C, 28, 0, 0},
- {0x064D, 29, 0, 0},
- {0x064E, 30, 0, 0},
- {0x064F, 31, 0, 0},
- {0x0650, 32, 0, 0},
- {0x0651, 33, 0, 0},
- {0x0652, 34, 0, 0},
- {0x0653, 230, 0, 0},
- {0x0654, 230, 0, 0},
- {0x0655, 220, 0, 0},
- {0x0656, 220, 0, 0},
- {0x0657, 230, 0, 0},
- {0x0658, 230, 0, 0},
- {0x0659, 230, 0, 0},
- {0x065A, 230, 0, 0},
- {0x065B, 230, 0, 0},
- {0x065C, 220, 0, 0},
- {0x065D, 230, 0, 0},
- {0x065E, 230, 0, 0},
- {0x065F, 220, 0, 0},
- {0x0670, 35, 0, 0},
- {0x0675, 0, 2 | DECOMP_COMPAT, 735},
- {0x0676, 0, 2 | DECOMP_COMPAT, 737},
- {0x0677, 0, 2 | DECOMP_COMPAT, 739},
- {0x0678, 0, 2 | DECOMP_COMPAT, 741},
{0x06C0, 0, 2, 743},
{0x06C2, 0, 2, 745},
{0x06D3, 0, 2, 747},
- {0x06D6, 230, 0, 0},
- {0x06D7, 230, 0, 0},
- {0x06D8, 230, 0, 0},
- {0x06D9, 230, 0, 0},
- {0x06DA, 230, 0, 0},
- {0x06DB, 230, 0, 0},
- {0x06DC, 230, 0, 0},
- {0x06DF, 230, 0, 0},
- {0x06E0, 230, 0, 0},
- {0x06E1, 230, 0, 0},
- {0x06E2, 230, 0, 0},
- {0x06E3, 220, 0, 0},
- {0x06E4, 230, 0, 0},
- {0x06E7, 230, 0, 0},
- {0x06E8, 230, 0, 0},
- {0x06EA, 220, 0, 0},
- {0x06EB, 230, 0, 0},
- {0x06EC, 230, 0, 0},
- {0x06ED, 220, 0, 0},
- {0x0711, 36, 0, 0},
- {0x0730, 230, 0, 0},
- {0x0731, 220, 0, 0},
- {0x0732, 230, 0, 0},
- {0x0733, 230, 0, 0},
- {0x0734, 220, 0, 0},
- {0x0735, 230, 0, 0},
- {0x0736, 230, 0, 0},
- {0x0737, 220, 0, 0},
- {0x0738, 220, 0, 0},
- {0x0739, 220, 0, 0},
- {0x073A, 230, 0, 0},
- {0x073B, 220, 0, 0},
- {0x073C, 220, 0, 0},
- {0x073D, 230, 0, 0},
- {0x073E, 220, 0, 0},
- {0x073F, 230, 0, 0},
- {0x0740, 230, 0, 0},
- {0x0741, 230, 0, 0},
- {0x0742, 220, 0, 0},
- {0x0743, 230, 0, 0},
- {0x0744, 220, 0, 0},
- {0x0745, 230, 0, 0},
- {0x0746, 220, 0, 0},
- {0x0747, 230, 0, 0},
- {0x0748, 220, 0, 0},
- {0x0749, 230, 0, 0},
- {0x074A, 230, 0, 0},
- {0x07EB, 230, 0, 0},
- {0x07EC, 230, 0, 0},
- {0x07ED, 230, 0, 0},
- {0x07EE, 230, 0, 0},
- {0x07EF, 230, 0, 0},
- {0x07F0, 230, 0, 0},
- {0x07F1, 230, 0, 0},
- {0x07F2, 220, 0, 0},
- {0x07F3, 230, 0, 0},
- {0x07FD, 220, 0, 0},
- {0x0816, 230, 0, 0},
- {0x0817, 230, 0, 0},
- {0x0818, 230, 0, 0},
- {0x0819, 230, 0, 0},
- {0x081B, 230, 0, 0},
- {0x081C, 230, 0, 0},
- {0x081D, 230, 0, 0},
- {0x081E, 230, 0, 0},
- {0x081F, 230, 0, 0},
- {0x0820, 230, 0, 0},
- {0x0821, 230, 0, 0},
- {0x0822, 230, 0, 0},
- {0x0823, 230, 0, 0},
- {0x0825, 230, 0, 0},
- {0x0826, 230, 0, 0},
- {0x0827, 230, 0, 0},
- {0x0829, 230, 0, 0},
- {0x082A, 230, 0, 0},
- {0x082B, 230, 0, 0},
- {0x082C, 230, 0, 0},
- {0x082D, 230, 0, 0},
- {0x0859, 220, 0, 0},
- {0x085A, 220, 0, 0},
- {0x085B, 220, 0, 0},
- {0x08D3, 220, 0, 0},
- {0x08D4, 230, 0, 0},
- {0x08D5, 230, 0, 0},
- {0x08D6, 230, 0, 0},
- {0x08D7, 230, 0, 0},
- {0x08D8, 230, 0, 0},
- {0x08D9, 230, 0, 0},
- {0x08DA, 230, 0, 0},
- {0x08DB, 230, 0, 0},
- {0x08DC, 230, 0, 0},
- {0x08DD, 230, 0, 0},
- {0x08DE, 230, 0, 0},
- {0x08DF, 230, 0, 0},
- {0x08E0, 230, 0, 0},
- {0x08E1, 230, 0, 0},
- {0x08E3, 220, 0, 0},
- {0x08E4, 230, 0, 0},
- {0x08E5, 230, 0, 0},
- {0x08E6, 220, 0, 0},
- {0x08E7, 230, 0, 0},
- {0x08E8, 230, 0, 0},
- {0x08E9, 220, 0, 0},
- {0x08EA, 230, 0, 0},
- {0x08EB, 230, 0, 0},
- {0x08EC, 230, 0, 0},
- {0x08ED, 220, 0, 0},
- {0x08EE, 220, 0, 0},
- {0x08EF, 220, 0, 0},
- {0x08F0, 27, 0, 0},
- {0x08F1, 28, 0, 0},
- {0x08F2, 29, 0, 0},
- {0x08F3, 230, 0, 0},
- {0x08F4, 230, 0, 0},
- {0x08F5, 230, 0, 0},
- {0x08F6, 220, 0, 0},
- {0x08F7, 230, 0, 0},
- {0x08F8, 230, 0, 0},
- {0x08F9, 220, 0, 0},
- {0x08FA, 220, 0, 0},
- {0x08FB, 230, 0, 0},
- {0x08FC, 230, 0, 0},
- {0x08FD, 230, 0, 0},
- {0x08FE, 230, 0, 0},
- {0x08FF, 230, 0, 0},
{0x0929, 0, 2, 749},
{0x0931, 0, 2, 751},
{0x0934, 0, 2, 753},
- {0x093C, 7, 0, 0},
- {0x094D, 9, 0, 0},
- {0x0951, 230, 0, 0},
- {0x0952, 220, 0, 0},
- {0x0953, 230, 0, 0},
- {0x0954, 230, 0, 0},
- {0x0958, 0, 2 | DECOMP_NO_COMPOSE, 755}, /* in exclusion list */
- {0x0959, 0, 2 | DECOMP_NO_COMPOSE, 757}, /* in exclusion list */
- {0x095A, 0, 2 | DECOMP_NO_COMPOSE, 759}, /* in exclusion list */
- {0x095B, 0, 2 | DECOMP_NO_COMPOSE, 761}, /* in exclusion list */
- {0x095C, 0, 2 | DECOMP_NO_COMPOSE, 763}, /* in exclusion list */
- {0x095D, 0, 2 | DECOMP_NO_COMPOSE, 765}, /* in exclusion list */
- {0x095E, 0, 2 | DECOMP_NO_COMPOSE, 767}, /* in exclusion list */
- {0x095F, 0, 2 | DECOMP_NO_COMPOSE, 769}, /* in exclusion list */
- {0x09BC, 7, 0, 0},
{0x09CB, 0, 2, 771},
{0x09CC, 0, 2, 773},
- {0x09CD, 9, 0, 0},
- {0x09DC, 0, 2 | DECOMP_NO_COMPOSE, 775}, /* in exclusion list */
- {0x09DD, 0, 2 | DECOMP_NO_COMPOSE, 777}, /* in exclusion list */
- {0x09DF, 0, 2 | DECOMP_NO_COMPOSE, 779}, /* in exclusion list */
- {0x09FE, 230, 0, 0},
- {0x0A33, 0, 2 | DECOMP_NO_COMPOSE, 781}, /* in exclusion list */
- {0x0A36, 0, 2 | DECOMP_NO_COMPOSE, 783}, /* in exclusion list */
- {0x0A3C, 7, 0, 0},
- {0x0A4D, 9, 0, 0},
- {0x0A59, 0, 2 | DECOMP_NO_COMPOSE, 785}, /* in exclusion list */
- {0x0A5A, 0, 2 | DECOMP_NO_COMPOSE, 787}, /* in exclusion list */
- {0x0A5B, 0, 2 | DECOMP_NO_COMPOSE, 789}, /* in exclusion list */
- {0x0A5E, 0, 2 | DECOMP_NO_COMPOSE, 791}, /* in exclusion list */
- {0x0ABC, 7, 0, 0},
- {0x0ACD, 9, 0, 0},
- {0x0B3C, 7, 0, 0},
{0x0B48, 0, 2, 793},
{0x0B4B, 0, 2, 795},
{0x0B4C, 0, 2, 797},
- {0x0B4D, 9, 0, 0},
- {0x0B5C, 0, 2 | DECOMP_NO_COMPOSE, 799}, /* in exclusion list */
- {0x0B5D, 0, 2 | DECOMP_NO_COMPOSE, 801}, /* in exclusion list */
{0x0B94, 0, 2, 803},
{0x0BCA, 0, 2, 805},
{0x0BCB, 0, 2, 807},
{0x0BCC, 0, 2, 809},
- {0x0BCD, 9, 0, 0},
{0x0C48, 0, 2, 811},
- {0x0C4D, 9, 0, 0},
- {0x0C55, 84, 0, 0},
- {0x0C56, 91, 0, 0},
- {0x0CBC, 7, 0, 0},
{0x0CC0, 0, 2, 813},
{0x0CC7, 0, 2, 815},
{0x0CC8, 0, 2, 817},
{0x0CCA, 0, 2, 819},
{0x0CCB, 0, 2, 821},
- {0x0CCD, 9, 0, 0},
- {0x0D3B, 9, 0, 0},
- {0x0D3C, 9, 0, 0},
{0x0D4A, 0, 2, 823},
{0x0D4B, 0, 2, 825},
{0x0D4C, 0, 2, 827},
- {0x0D4D, 9, 0, 0},
- {0x0DCA, 9, 0, 0},
{0x0DDA, 0, 2, 829},
{0x0DDC, 0, 2, 831},
{0x0DDD, 0, 2, 833},
{0x0DDE, 0, 2, 835},
- {0x0E33, 0, 2 | DECOMP_COMPAT, 837},
- {0x0E38, 103, 0, 0},
- {0x0E39, 103, 0, 0},
- {0x0E3A, 9, 0, 0},
- {0x0E48, 107, 0, 0},
- {0x0E49, 107, 0, 0},
- {0x0E4A, 107, 0, 0},
- {0x0E4B, 107, 0, 0},
- {0x0EB3, 0, 2 | DECOMP_COMPAT, 839},
- {0x0EB8, 118, 0, 0},
- {0x0EB9, 118, 0, 0},
- {0x0EBA, 9, 0, 0},
- {0x0EC8, 122, 0, 0},
- {0x0EC9, 122, 0, 0},
- {0x0ECA, 122, 0, 0},
- {0x0ECB, 122, 0, 0},
- {0x0EDC, 0, 2 | DECOMP_COMPAT, 841},
- {0x0EDD, 0, 2 | DECOMP_COMPAT, 843},
- {0x0F0C, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0F0B},
- {0x0F18, 220, 0, 0},
- {0x0F19, 220, 0, 0},
- {0x0F35, 220, 0, 0},
- {0x0F37, 220, 0, 0},
- {0x0F39, 216, 0, 0},
- {0x0F43, 0, 2 | DECOMP_NO_COMPOSE, 845}, /* in exclusion list */
- {0x0F4D, 0, 2 | DECOMP_NO_COMPOSE, 847}, /* in exclusion list */
- {0x0F52, 0, 2 | DECOMP_NO_COMPOSE, 849}, /* in exclusion list */
- {0x0F57, 0, 2 | DECOMP_NO_COMPOSE, 851}, /* in exclusion list */
- {0x0F5C, 0, 2 | DECOMP_NO_COMPOSE, 853}, /* in exclusion list */
- {0x0F69, 0, 2 | DECOMP_NO_COMPOSE, 855}, /* in exclusion list */
- {0x0F71, 129, 0, 0},
- {0x0F72, 130, 0, 0},
- {0x0F73, 0, 2 | DECOMP_NO_COMPOSE, 857}, /* non-starter decomposition */
- {0x0F74, 132, 0, 0},
- {0x0F75, 0, 2 | DECOMP_NO_COMPOSE, 859}, /* non-starter decomposition */
- {0x0F76, 0, 2 | DECOMP_NO_COMPOSE, 861}, /* in exclusion list */
- {0x0F77, 0, 2 | DECOMP_COMPAT, 863},
- {0x0F78, 0, 2 | DECOMP_NO_COMPOSE, 865}, /* in exclusion list */
- {0x0F79, 0, 2 | DECOMP_COMPAT, 867},
- {0x0F7A, 130, 0, 0},
- {0x0F7B, 130, 0, 0},
- {0x0F7C, 130, 0, 0},
- {0x0F7D, 130, 0, 0},
- {0x0F80, 130, 0, 0},
- {0x0F81, 0, 2 | DECOMP_NO_COMPOSE, 869}, /* non-starter decomposition */
- {0x0F82, 230, 0, 0},
- {0x0F83, 230, 0, 0},
- {0x0F84, 9, 0, 0},
- {0x0F86, 230, 0, 0},
- {0x0F87, 230, 0, 0},
- {0x0F93, 0, 2 | DECOMP_NO_COMPOSE, 871}, /* in exclusion list */
- {0x0F9D, 0, 2 | DECOMP_NO_COMPOSE, 873}, /* in exclusion list */
- {0x0FA2, 0, 2 | DECOMP_NO_COMPOSE, 875}, /* in exclusion list */
- {0x0FA7, 0, 2 | DECOMP_NO_COMPOSE, 877}, /* in exclusion list */
- {0x0FAC, 0, 2 | DECOMP_NO_COMPOSE, 879}, /* in exclusion list */
- {0x0FB9, 0, 2 | DECOMP_NO_COMPOSE, 881}, /* in exclusion list */
- {0x0FC6, 220, 0, 0},
{0x1026, 0, 2, 883},
- {0x1037, 7, 0, 0},
- {0x1039, 9, 0, 0},
- {0x103A, 9, 0, 0},
- {0x108D, 220, 0, 0},
- {0x10FC, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x10DC},
- {0x135D, 230, 0, 0},
- {0x135E, 230, 0, 0},
- {0x135F, 230, 0, 0},
- {0x1714, 9, 0, 0},
- {0x1734, 9, 0, 0},
- {0x17D2, 9, 0, 0},
- {0x17DD, 230, 0, 0},
- {0x18A9, 228, 0, 0},
- {0x1939, 222, 0, 0},
- {0x193A, 230, 0, 0},
- {0x193B, 220, 0, 0},
- {0x1A17, 230, 0, 0},
- {0x1A18, 220, 0, 0},
- {0x1A60, 9, 0, 0},
- {0x1A75, 230, 0, 0},
- {0x1A76, 230, 0, 0},
- {0x1A77, 230, 0, 0},
- {0x1A78, 230, 0, 0},
- {0x1A79, 230, 0, 0},
- {0x1A7A, 230, 0, 0},
- {0x1A7B, 230, 0, 0},
- {0x1A7C, 230, 0, 0},
- {0x1A7F, 220, 0, 0},
- {0x1AB0, 230, 0, 0},
- {0x1AB1, 230, 0, 0},
- {0x1AB2, 230, 0, 0},
- {0x1AB3, 230, 0, 0},
- {0x1AB4, 230, 0, 0},
- {0x1AB5, 220, 0, 0},
- {0x1AB6, 220, 0, 0},
- {0x1AB7, 220, 0, 0},
- {0x1AB8, 220, 0, 0},
- {0x1AB9, 220, 0, 0},
- {0x1ABA, 220, 0, 0},
- {0x1ABB, 230, 0, 0},
- {0x1ABC, 230, 0, 0},
- {0x1ABD, 220, 0, 0},
- {0x1ABF, 220, 0, 0},
- {0x1AC0, 220, 0, 0},
{0x1B06, 0, 2, 885},
{0x1B08, 0, 2, 887},
{0x1B0A, 0, 2, 889},
{0x1B0C, 0, 2, 891},
{0x1B0E, 0, 2, 893},
{0x1B12, 0, 2, 895},
- {0x1B34, 7, 0, 0},
{0x1B3B, 0, 2, 897},
{0x1B3D, 0, 2, 899},
{0x1B40, 0, 2, 901},
{0x1B41, 0, 2, 903},
{0x1B43, 0, 2, 905},
- {0x1B44, 9, 0, 0},
- {0x1B6B, 230, 0, 0},
- {0x1B6C, 220, 0, 0},
- {0x1B6D, 230, 0, 0},
- {0x1B6E, 230, 0, 0},
- {0x1B6F, 230, 0, 0},
- {0x1B70, 230, 0, 0},
- {0x1B71, 230, 0, 0},
- {0x1B72, 230, 0, 0},
- {0x1B73, 230, 0, 0},
- {0x1BAA, 9, 0, 0},
- {0x1BAB, 9, 0, 0},
- {0x1BE6, 7, 0, 0},
- {0x1BF2, 9, 0, 0},
- {0x1BF3, 9, 0, 0},
- {0x1C37, 7, 0, 0},
- {0x1CD0, 230, 0, 0},
- {0x1CD1, 230, 0, 0},
- {0x1CD2, 230, 0, 0},
- {0x1CD4, 1, 0, 0},
- {0x1CD5, 220, 0, 0},
- {0x1CD6, 220, 0, 0},
- {0x1CD7, 220, 0, 0},
- {0x1CD8, 220, 0, 0},
- {0x1CD9, 220, 0, 0},
- {0x1CDA, 230, 0, 0},
- {0x1CDB, 230, 0, 0},
- {0x1CDC, 220, 0, 0},
- {0x1CDD, 220, 0, 0},
- {0x1CDE, 220, 0, 0},
- {0x1CDF, 220, 0, 0},
- {0x1CE0, 230, 0, 0},
- {0x1CE2, 1, 0, 0},
- {0x1CE3, 1, 0, 0},
- {0x1CE4, 1, 0, 0},
- {0x1CE5, 1, 0, 0},
- {0x1CE6, 1, 0, 0},
- {0x1CE7, 1, 0, 0},
- {0x1CE8, 1, 0, 0},
- {0x1CED, 220, 0, 0},
- {0x1CF4, 230, 0, 0},
- {0x1CF8, 230, 0, 0},
- {0x1CF9, 230, 0, 0},
- {0x1D2C, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0041},
- {0x1D2D, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x00C6},
- {0x1D2E, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0042},
- {0x1D30, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0044},
- {0x1D31, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0045},
- {0x1D32, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x018E},
- {0x1D33, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0047},
- {0x1D34, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0048},
- {0x1D35, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0049},
- {0x1D36, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x004A},
- {0x1D37, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x004B},
- {0x1D38, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x004C},
- {0x1D39, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x004D},
- {0x1D3A, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x004E},
- {0x1D3C, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x004F},
- {0x1D3D, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0222},
- {0x1D3E, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0050},
- {0x1D3F, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0052},
- {0x1D40, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0054},
- {0x1D41, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0055},
- {0x1D42, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0057},
- {0x1D43, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0061},
- {0x1D44, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0250},
- {0x1D45, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0251},
- {0x1D46, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1D02},
- {0x1D47, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0062},
- {0x1D48, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0064},
- {0x1D49, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0065},
- {0x1D4A, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0259},
- {0x1D4B, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x025B},
- {0x1D4C, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x025C},
- {0x1D4D, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0067},
- {0x1D4F, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x006B},
- {0x1D50, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x006D},
- {0x1D51, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x014B},
- {0x1D52, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x006F},
- {0x1D53, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0254},
- {0x1D54, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1D16},
- {0x1D55, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1D17},
- {0x1D56, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0070},
- {0x1D57, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0074},
- {0x1D58, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0075},
- {0x1D59, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1D1D},
- {0x1D5A, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x026F},
- {0x1D5B, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0076},
- {0x1D5C, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1D25},
- {0x1D5D, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B2},
- {0x1D5E, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B3},
- {0x1D5F, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B4},
- {0x1D60, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C6},
- {0x1D61, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C7},
- {0x1D62, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0069},
- {0x1D63, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0072},
- {0x1D64, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0075},
- {0x1D65, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0076},
- {0x1D66, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B2},
- {0x1D67, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B3},
- {0x1D68, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C1},
- {0x1D69, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C6},
- {0x1D6A, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C7},
- {0x1D78, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x043D},
- {0x1D9B, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0252},
- {0x1D9C, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0063},
- {0x1D9D, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0255},
- {0x1D9E, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x00F0},
- {0x1D9F, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x025C},
- {0x1DA0, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0066},
- {0x1DA1, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x025F},
- {0x1DA2, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0261},
- {0x1DA3, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0265},
- {0x1DA4, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0268},
- {0x1DA5, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0269},
- {0x1DA6, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x026A},
- {0x1DA7, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1D7B},
- {0x1DA8, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x029D},
- {0x1DA9, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x026D},
- {0x1DAA, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1D85},
- {0x1DAB, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x029F},
- {0x1DAC, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0271},
- {0x1DAD, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0270},
- {0x1DAE, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0272},
- {0x1DAF, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0273},
- {0x1DB0, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0274},
- {0x1DB1, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0275},
- {0x1DB2, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0278},
- {0x1DB3, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0282},
- {0x1DB4, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0283},
- {0x1DB5, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x01AB},
- {0x1DB6, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0289},
- {0x1DB7, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x028A},
- {0x1DB8, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1D1C},
- {0x1DB9, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x028B},
- {0x1DBA, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x028C},
- {0x1DBB, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x007A},
- {0x1DBC, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0290},
- {0x1DBD, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0291},
- {0x1DBE, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0292},
- {0x1DBF, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B8},
- {0x1DC0, 230, 0, 0},
- {0x1DC1, 230, 0, 0},
- {0x1DC2, 220, 0, 0},
- {0x1DC3, 230, 0, 0},
- {0x1DC4, 230, 0, 0},
- {0x1DC5, 230, 0, 0},
- {0x1DC6, 230, 0, 0},
- {0x1DC7, 230, 0, 0},
- {0x1DC8, 230, 0, 0},
- {0x1DC9, 230, 0, 0},
- {0x1DCA, 220, 0, 0},
- {0x1DCB, 230, 0, 0},
- {0x1DCC, 230, 0, 0},
- {0x1DCD, 234, 0, 0},
- {0x1DCE, 214, 0, 0},
- {0x1DCF, 220, 0, 0},
- {0x1DD0, 202, 0, 0},
- {0x1DD1, 230, 0, 0},
- {0x1DD2, 230, 0, 0},
- {0x1DD3, 230, 0, 0},
- {0x1DD4, 230, 0, 0},
- {0x1DD5, 230, 0, 0},
- {0x1DD6, 230, 0, 0},
- {0x1DD7, 230, 0, 0},
- {0x1DD8, 230, 0, 0},
- {0x1DD9, 230, 0, 0},
- {0x1DDA, 230, 0, 0},
- {0x1DDB, 230, 0, 0},
- {0x1DDC, 230, 0, 0},
- {0x1DDD, 230, 0, 0},
- {0x1DDE, 230, 0, 0},
- {0x1DDF, 230, 0, 0},
- {0x1DE0, 230, 0, 0},
- {0x1DE1, 230, 0, 0},
- {0x1DE2, 230, 0, 0},
- {0x1DE3, 230, 0, 0},
- {0x1DE4, 230, 0, 0},
- {0x1DE5, 230, 0, 0},
- {0x1DE6, 230, 0, 0},
- {0x1DE7, 230, 0, 0},
- {0x1DE8, 230, 0, 0},
- {0x1DE9, 230, 0, 0},
- {0x1DEA, 230, 0, 0},
- {0x1DEB, 230, 0, 0},
- {0x1DEC, 230, 0, 0},
- {0x1DED, 230, 0, 0},
- {0x1DEE, 230, 0, 0},
- {0x1DEF, 230, 0, 0},
- {0x1DF0, 230, 0, 0},
- {0x1DF1, 230, 0, 0},
- {0x1DF2, 230, 0, 0},
- {0x1DF3, 230, 0, 0},
- {0x1DF4, 230, 0, 0},
- {0x1DF5, 230, 0, 0},
- {0x1DF6, 232, 0, 0},
- {0x1DF7, 228, 0, 0},
- {0x1DF8, 228, 0, 0},
- {0x1DF9, 220, 0, 0},
- {0x1DFB, 230, 0, 0},
- {0x1DFC, 233, 0, 0},
- {0x1DFD, 220, 0, 0},
- {0x1DFE, 230, 0, 0},
- {0x1DFF, 220, 0, 0},
{0x1E00, 0, 2, 907},
{0x1E01, 0, 2, 909},
{0x1E02, 0, 2, 911},
@@ -1312,7 +575,6 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x1E97, 0, 2, 1209},
{0x1E98, 0, 2, 1211},
{0x1E99, 0, 2, 1213},
- {0x1E9A, 0, 2 | DECOMP_COMPAT, 1215},
{0x1E9B, 0, 2, 1217},
{0x1EA0, 0, 2, 1219},
{0x1EA1, 0, 2, 1221},
@@ -1505,136 +767,1000 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x1F6E, 0, 2, 1595},
{0x1F6F, 0, 2, 1597},
{0x1F70, 0, 2, 1599},
+ {0x1F72, 0, 2, 1601},
+ {0x1F74, 0, 2, 1603},
+ {0x1F76, 0, 2, 1605},
+ {0x1F78, 0, 2, 1607},
+ {0x1F7A, 0, 2, 1609},
+ {0x1F7C, 0, 2, 1611},
+ {0x1F80, 0, 2, 1613},
+ {0x1F81, 0, 2, 1615},
+ {0x1F82, 0, 2, 1617},
+ {0x1F83, 0, 2, 1619},
+ {0x1F84, 0, 2, 1621},
+ {0x1F85, 0, 2, 1623},
+ {0x1F86, 0, 2, 1625},
+ {0x1F87, 0, 2, 1627},
+ {0x1F88, 0, 2, 1629},
+ {0x1F89, 0, 2, 1631},
+ {0x1F8A, 0, 2, 1633},
+ {0x1F8B, 0, 2, 1635},
+ {0x1F8C, 0, 2, 1637},
+ {0x1F8D, 0, 2, 1639},
+ {0x1F8E, 0, 2, 1641},
+ {0x1F8F, 0, 2, 1643},
+ {0x1F90, 0, 2, 1645},
+ {0x1F91, 0, 2, 1647},
+ {0x1F92, 0, 2, 1649},
+ {0x1F93, 0, 2, 1651},
+ {0x1F94, 0, 2, 1653},
+ {0x1F95, 0, 2, 1655},
+ {0x1F96, 0, 2, 1657},
+ {0x1F97, 0, 2, 1659},
+ {0x1F98, 0, 2, 1661},
+ {0x1F99, 0, 2, 1663},
+ {0x1F9A, 0, 2, 1665},
+ {0x1F9B, 0, 2, 1667},
+ {0x1F9C, 0, 2, 1669},
+ {0x1F9D, 0, 2, 1671},
+ {0x1F9E, 0, 2, 1673},
+ {0x1F9F, 0, 2, 1675},
+ {0x1FA0, 0, 2, 1677},
+ {0x1FA1, 0, 2, 1679},
+ {0x1FA2, 0, 2, 1681},
+ {0x1FA3, 0, 2, 1683},
+ {0x1FA4, 0, 2, 1685},
+ {0x1FA5, 0, 2, 1687},
+ {0x1FA6, 0, 2, 1689},
+ {0x1FA7, 0, 2, 1691},
+ {0x1FA8, 0, 2, 1693},
+ {0x1FA9, 0, 2, 1695},
+ {0x1FAA, 0, 2, 1697},
+ {0x1FAB, 0, 2, 1699},
+ {0x1FAC, 0, 2, 1701},
+ {0x1FAD, 0, 2, 1703},
+ {0x1FAE, 0, 2, 1705},
+ {0x1FAF, 0, 2, 1707},
+ {0x1FB0, 0, 2, 1709},
+ {0x1FB1, 0, 2, 1711},
+ {0x1FB2, 0, 2, 1713},
+ {0x1FB3, 0, 2, 1715},
+ {0x1FB4, 0, 2, 1717},
+ {0x1FB6, 0, 2, 1719},
+ {0x1FB7, 0, 2, 1721},
+ {0x1FB8, 0, 2, 1723},
+ {0x1FB9, 0, 2, 1725},
+ {0x1FBA, 0, 2, 1727},
+ {0x1FBC, 0, 2, 1729},
+ {0x1FC1, 0, 2, 1737},
+ {0x1FC2, 0, 2, 1739},
+ {0x1FC3, 0, 2, 1741},
+ {0x1FC4, 0, 2, 1743},
+ {0x1FC6, 0, 2, 1745},
+ {0x1FC7, 0, 2, 1747},
+ {0x1FC8, 0, 2, 1749},
+ {0x1FCA, 0, 2, 1751},
+ {0x1FCC, 0, 2, 1753},
+ {0x1FCD, 0, 2, 1755},
+ {0x1FCE, 0, 2, 1757},
+ {0x1FCF, 0, 2, 1759},
+ {0x1FD0, 0, 2, 1761},
+ {0x1FD1, 0, 2, 1763},
+ {0x1FD2, 0, 2, 1765},
+ {0x1FD6, 0, 2, 1767},
+ {0x1FD7, 0, 2, 1769},
+ {0x1FD8, 0, 2, 1771},
+ {0x1FD9, 0, 2, 1773},
+ {0x1FDA, 0, 2, 1775},
+ {0x1FDD, 0, 2, 1777},
+ {0x1FDE, 0, 2, 1779},
+ {0x1FDF, 0, 2, 1781},
+ {0x1FE0, 0, 2, 1783},
+ {0x1FE1, 0, 2, 1785},
+ {0x1FE2, 0, 2, 1787},
+ {0x1FE4, 0, 2, 1789},
+ {0x1FE5, 0, 2, 1791},
+ {0x1FE6, 0, 2, 1793},
+ {0x1FE7, 0, 2, 1795},
+ {0x1FE8, 0, 2, 1797},
+ {0x1FE9, 0, 2, 1799},
+ {0x1FEA, 0, 2, 1801},
+ {0x1FEC, 0, 2, 1803},
+ {0x1FED, 0, 2, 1805},
+ {0x1FF2, 0, 2, 1807},
+ {0x1FF3, 0, 2, 1809},
+ {0x1FF4, 0, 2, 1811},
+ {0x1FF6, 0, 2, 1813},
+ {0x1FF7, 0, 2, 1815},
+ {0x1FF8, 0, 2, 1817},
+ {0x1FFA, 0, 2, 1819},
+ {0x1FFC, 0, 2, 1821},
+ {0x219A, 0, 2, 1983},
+ {0x219B, 0, 2, 1985},
+ {0x21AE, 0, 2, 1987},
+ {0x21CD, 0, 2, 1989},
+ {0x21CE, 0, 2, 1991},
+ {0x21CF, 0, 2, 1993},
+ {0x2204, 0, 2, 1995},
+ {0x2209, 0, 2, 1997},
+ {0x220C, 0, 2, 1999},
+ {0x2224, 0, 2, 2001},
+ {0x2226, 0, 2, 2003},
+ {0x2241, 0, 2, 2015},
+ {0x2244, 0, 2, 2017},
+ {0x2247, 0, 2, 2019},
+ {0x2249, 0, 2, 2021},
+ {0x2260, 0, 2, 2023},
+ {0x2262, 0, 2, 2025},
+ {0x226D, 0, 2, 2027},
+ {0x226E, 0, 2, 2029},
+ {0x226F, 0, 2, 2031},
+ {0x2270, 0, 2, 2033},
+ {0x2271, 0, 2, 2035},
+ {0x2274, 0, 2, 2037},
+ {0x2275, 0, 2, 2039},
+ {0x2278, 0, 2, 2041},
+ {0x2279, 0, 2, 2043},
+ {0x2280, 0, 2, 2045},
+ {0x2281, 0, 2, 2047},
+ {0x2284, 0, 2, 2049},
+ {0x2285, 0, 2, 2051},
+ {0x2288, 0, 2, 2053},
+ {0x2289, 0, 2, 2055},
+ {0x22AC, 0, 2, 2057},
+ {0x22AD, 0, 2, 2059},
+ {0x22AE, 0, 2, 2061},
+ {0x22AF, 0, 2, 2063},
+ {0x22E0, 0, 2, 2065},
+ {0x22E1, 0, 2, 2067},
+ {0x22E2, 0, 2, 2069},
+ {0x22E3, 0, 2, 2071},
+ {0x22EA, 0, 2, 2073},
+ {0x22EB, 0, 2, 2075},
+ {0x22EC, 0, 2, 2077},
+ {0x22ED, 0, 2, 2079},
+ {0x304C, 0, 2, 2317},
+ {0x304E, 0, 2, 2319},
+ {0x3050, 0, 2, 2321},
+ {0x3052, 0, 2, 2323},
+ {0x3054, 0, 2, 2325},
+ {0x3056, 0, 2, 2327},
+ {0x3058, 0, 2, 2329},
+ {0x305A, 0, 2, 2331},
+ {0x305C, 0, 2, 2333},
+ {0x305E, 0, 2, 2335},
+ {0x3060, 0, 2, 2337},
+ {0x3062, 0, 2, 2339},
+ {0x3065, 0, 2, 2341},
+ {0x3067, 0, 2, 2343},
+ {0x3069, 0, 2, 2345},
+ {0x3070, 0, 2, 2347},
+ {0x3071, 0, 2, 2349},
+ {0x3073, 0, 2, 2351},
+ {0x3074, 0, 2, 2353},
+ {0x3076, 0, 2, 2355},
+ {0x3077, 0, 2, 2357},
+ {0x3079, 0, 2, 2359},
+ {0x307A, 0, 2, 2361},
+ {0x307C, 0, 2, 2363},
+ {0x307D, 0, 2, 2365},
+ {0x3094, 0, 2, 2367},
+ {0x309E, 0, 2, 2373},
+ {0x30AC, 0, 2, 2377},
+ {0x30AE, 0, 2, 2379},
+ {0x30B0, 0, 2, 2381},
+ {0x30B2, 0, 2, 2383},
+ {0x30B4, 0, 2, 2385},
+ {0x30B6, 0, 2, 2387},
+ {0x30B8, 0, 2, 2389},
+ {0x30BA, 0, 2, 2391},
+ {0x30BC, 0, 2, 2393},
+ {0x30BE, 0, 2, 2395},
+ {0x30C0, 0, 2, 2397},
+ {0x30C2, 0, 2, 2399},
+ {0x30C5, 0, 2, 2401},
+ {0x30C7, 0, 2, 2403},
+ {0x30C9, 0, 2, 2405},
+ {0x30D0, 0, 2, 2407},
+ {0x30D1, 0, 2, 2409},
+ {0x30D3, 0, 2, 2411},
+ {0x30D4, 0, 2, 2413},
+ {0x30D6, 0, 2, 2415},
+ {0x30D7, 0, 2, 2417},
+ {0x30D9, 0, 2, 2419},
+ {0x30DA, 0, 2, 2421},
+ {0x30DC, 0, 2, 2423},
+ {0x30DD, 0, 2, 2425},
+ {0x30F4, 0, 2, 2427},
+ {0x30F7, 0, 2, 2429},
+ {0x30F8, 0, 2, 2431},
+ {0x30F9, 0, 2, 2433},
+ {0x30FA, 0, 2, 2435},
+ {0x30FE, 0, 2, 2437},
+ {0x1109A, 0, 2, 4776},
+ {0x1109C, 0, 2, 4778},
+ {0x110AB, 0, 2, 4780},
+ {0x1112E, 0, 2, 4782},
+ {0x1112F, 0, 2, 4784},
+ {0x1134B, 0, 2, 4786},
+ {0x1134C, 0, 2, 4788},
+ {0x114BB, 0, 2, 4790},
+ {0x114BC, 0, 2, 4792},
+ {0x114BE, 0, 2, 4794},
+ {0x115BA, 0, 2, 4796},
+ {0x115BB, 0, 2, 4798},
+ {0x11938, 0, 2, 4800},
+ {0x00A0, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0020},
+ {0x00A8, 0, 2 | DECOMP_COMPAT, 0},
+ {0x00AA, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0061},
+ {0x00AF, 0, 2 | DECOMP_COMPAT, 2},
+ {0x00B2, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0032},
+ {0x00B3, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0033},
+ {0x00B4, 0, 2 | DECOMP_COMPAT, 4},
+ {0x00B5, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03BC},
+ {0x00B8, 0, 2 | DECOMP_COMPAT, 6},
+ {0x00B9, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0031},
+ {0x00BA, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x006F},
+ {0x00BC, 0, 3 | DECOMP_COMPAT, 8},
+ {0x00BD, 0, 3 | DECOMP_COMPAT, 11},
+ {0x00BE, 0, 3 | DECOMP_COMPAT, 14},
+ {0x0132, 0, 2 | DECOMP_COMPAT, 213},
+ {0x0133, 0, 2 | DECOMP_COMPAT, 215},
+ {0x013F, 0, 2 | DECOMP_COMPAT, 237},
+ {0x0140, 0, 2 | DECOMP_COMPAT, 239},
+ {0x0149, 0, 2 | DECOMP_COMPAT, 253},
+ {0x017F, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0073},
+ {0x01C4, 0, 2 | DECOMP_COMPAT, 357},
+ {0x01C5, 0, 2 | DECOMP_COMPAT, 359},
+ {0x01C6, 0, 2 | DECOMP_COMPAT, 361},
+ {0x01C7, 0, 2 | DECOMP_COMPAT, 363},
+ {0x01C8, 0, 2 | DECOMP_COMPAT, 365},
+ {0x01C9, 0, 2 | DECOMP_COMPAT, 367},
+ {0x01CA, 0, 2 | DECOMP_COMPAT, 369},
+ {0x01CB, 0, 2 | DECOMP_COMPAT, 371},
+ {0x01CC, 0, 2 | DECOMP_COMPAT, 373},
+ {0x01F1, 0, 2 | DECOMP_COMPAT, 441},
+ {0x01F2, 0, 2 | DECOMP_COMPAT, 443},
+ {0x01F3, 0, 2 | DECOMP_COMPAT, 445},
+ {0x02B0, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0068},
+ {0x02B1, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0266},
+ {0x02B2, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x006A},
+ {0x02B3, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0072},
+ {0x02B4, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0279},
+ {0x02B5, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x027B},
+ {0x02B6, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0281},
+ {0x02B7, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0077},
+ {0x02B8, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0079},
+ {0x02D8, 0, 2 | DECOMP_COMPAT, 555},
+ {0x02D9, 0, 2 | DECOMP_COMPAT, 557},
+ {0x02DA, 0, 2 | DECOMP_COMPAT, 559},
+ {0x02DB, 0, 2 | DECOMP_COMPAT, 561},
+ {0x02DC, 0, 2 | DECOMP_COMPAT, 563},
+ {0x02DD, 0, 2 | DECOMP_COMPAT, 565},
+ {0x02E0, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0263},
+ {0x02E1, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x006C},
+ {0x02E2, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0073},
+ {0x02E3, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0078},
+ {0x02E4, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0295},
+ {0x0300, 230, 0, 0},
+ {0x0301, 230, 0, 0},
+ {0x0302, 230, 0, 0},
+ {0x0303, 230, 0, 0},
+ {0x0304, 230, 0, 0},
+ {0x0305, 230, 0, 0},
+ {0x0306, 230, 0, 0},
+ {0x0307, 230, 0, 0},
+ {0x0308, 230, 0, 0},
+ {0x0309, 230, 0, 0},
+ {0x030A, 230, 0, 0},
+ {0x030B, 230, 0, 0},
+ {0x030C, 230, 0, 0},
+ {0x030D, 230, 0, 0},
+ {0x030E, 230, 0, 0},
+ {0x030F, 230, 0, 0},
+ {0x0310, 230, 0, 0},
+ {0x0311, 230, 0, 0},
+ {0x0312, 230, 0, 0},
+ {0x0313, 230, 0, 0},
+ {0x0314, 230, 0, 0},
+ {0x0315, 232, 0, 0},
+ {0x0316, 220, 0, 0},
+ {0x0317, 220, 0, 0},
+ {0x0318, 220, 0, 0},
+ {0x0319, 220, 0, 0},
+ {0x031A, 232, 0, 0},
+ {0x031B, 216, 0, 0},
+ {0x031C, 220, 0, 0},
+ {0x031D, 220, 0, 0},
+ {0x031E, 220, 0, 0},
+ {0x031F, 220, 0, 0},
+ {0x0320, 220, 0, 0},
+ {0x0321, 202, 0, 0},
+ {0x0322, 202, 0, 0},
+ {0x0323, 220, 0, 0},
+ {0x0324, 220, 0, 0},
+ {0x0325, 220, 0, 0},
+ {0x0326, 220, 0, 0},
+ {0x0327, 202, 0, 0},
+ {0x0328, 202, 0, 0},
+ {0x0329, 220, 0, 0},
+ {0x032A, 220, 0, 0},
+ {0x032B, 220, 0, 0},
+ {0x032C, 220, 0, 0},
+ {0x032D, 220, 0, 0},
+ {0x032E, 220, 0, 0},
+ {0x032F, 220, 0, 0},
+ {0x0330, 220, 0, 0},
+ {0x0331, 220, 0, 0},
+ {0x0332, 220, 0, 0},
+ {0x0333, 220, 0, 0},
+ {0x0334, 1, 0, 0},
+ {0x0335, 1, 0, 0},
+ {0x0336, 1, 0, 0},
+ {0x0337, 1, 0, 0},
+ {0x0338, 1, 0, 0},
+ {0x0339, 220, 0, 0},
+ {0x033A, 220, 0, 0},
+ {0x033B, 220, 0, 0},
+ {0x033C, 220, 0, 0},
+ {0x033D, 230, 0, 0},
+ {0x033E, 230, 0, 0},
+ {0x033F, 230, 0, 0},
+ {0x0340, 230, 1 | DECOMP_INLINE, 0x0300},
+ {0x0341, 230, 1 | DECOMP_INLINE, 0x0301},
+ {0x0342, 230, 0, 0},
+ {0x0343, 230, 1 | DECOMP_INLINE, 0x0313},
+ {0x0344, 230, 2 | DECOMP_NO_COMPOSE, 567}, /* non-starter decomposition */
+ {0x0345, 240, 0, 0},
+ {0x0346, 230, 0, 0},
+ {0x0347, 220, 0, 0},
+ {0x0348, 220, 0, 0},
+ {0x0349, 220, 0, 0},
+ {0x034A, 230, 0, 0},
+ {0x034B, 230, 0, 0},
+ {0x034C, 230, 0, 0},
+ {0x034D, 220, 0, 0},
+ {0x034E, 220, 0, 0},
+ {0x0350, 230, 0, 0},
+ {0x0351, 230, 0, 0},
+ {0x0352, 230, 0, 0},
+ {0x0353, 220, 0, 0},
+ {0x0354, 220, 0, 0},
+ {0x0355, 220, 0, 0},
+ {0x0356, 220, 0, 0},
+ {0x0357, 230, 0, 0},
+ {0x0358, 232, 0, 0},
+ {0x0359, 220, 0, 0},
+ {0x035A, 220, 0, 0},
+ {0x035B, 230, 0, 0},
+ {0x035C, 233, 0, 0},
+ {0x035D, 234, 0, 0},
+ {0x035E, 234, 0, 0},
+ {0x035F, 233, 0, 0},
+ {0x0360, 234, 0, 0},
+ {0x0361, 234, 0, 0},
+ {0x0362, 233, 0, 0},
+ {0x0363, 230, 0, 0},
+ {0x0364, 230, 0, 0},
+ {0x0365, 230, 0, 0},
+ {0x0366, 230, 0, 0},
+ {0x0367, 230, 0, 0},
+ {0x0368, 230, 0, 0},
+ {0x0369, 230, 0, 0},
+ {0x036A, 230, 0, 0},
+ {0x036B, 230, 0, 0},
+ {0x036C, 230, 0, 0},
+ {0x036D, 230, 0, 0},
+ {0x036E, 230, 0, 0},
+ {0x036F, 230, 0, 0},
+ {0x0374, 0, 1 | DECOMP_INLINE, 0x02B9},
+ {0x037A, 0, 2 | DECOMP_COMPAT, 569},
+ {0x037E, 0, 1 | DECOMP_INLINE, 0x003B},
+ {0x0384, 0, 2 | DECOMP_COMPAT, 571},
+ {0x0387, 0, 1 | DECOMP_INLINE, 0x00B7},
+ {0x03D0, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B2},
+ {0x03D1, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B8},
+ {0x03D2, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03A5},
+ {0x03D5, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C6},
+ {0x03D6, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C0},
+ {0x03F0, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03BA},
+ {0x03F1, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C1},
+ {0x03F2, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C2},
+ {0x03F4, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0398},
+ {0x03F5, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B5},
+ {0x03F9, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03A3},
+ {0x0483, 230, 0, 0},
+ {0x0484, 230, 0, 0},
+ {0x0485, 230, 0, 0},
+ {0x0486, 230, 0, 0},
+ {0x0487, 230, 0, 0},
+ {0x0587, 0, 2 | DECOMP_COMPAT, 723},
+ {0x0591, 220, 0, 0},
+ {0x0592, 230, 0, 0},
+ {0x0593, 230, 0, 0},
+ {0x0594, 230, 0, 0},
+ {0x0595, 230, 0, 0},
+ {0x0596, 220, 0, 0},
+ {0x0597, 230, 0, 0},
+ {0x0598, 230, 0, 0},
+ {0x0599, 230, 0, 0},
+ {0x059A, 222, 0, 0},
+ {0x059B, 220, 0, 0},
+ {0x059C, 230, 0, 0},
+ {0x059D, 230, 0, 0},
+ {0x059E, 230, 0, 0},
+ {0x059F, 230, 0, 0},
+ {0x05A0, 230, 0, 0},
+ {0x05A1, 230, 0, 0},
+ {0x05A2, 220, 0, 0},
+ {0x05A3, 220, 0, 0},
+ {0x05A4, 220, 0, 0},
+ {0x05A5, 220, 0, 0},
+ {0x05A6, 220, 0, 0},
+ {0x05A7, 220, 0, 0},
+ {0x05A8, 230, 0, 0},
+ {0x05A9, 230, 0, 0},
+ {0x05AA, 220, 0, 0},
+ {0x05AB, 230, 0, 0},
+ {0x05AC, 230, 0, 0},
+ {0x05AD, 222, 0, 0},
+ {0x05AE, 228, 0, 0},
+ {0x05AF, 230, 0, 0},
+ {0x05B0, 10, 0, 0},
+ {0x05B1, 11, 0, 0},
+ {0x05B2, 12, 0, 0},
+ {0x05B3, 13, 0, 0},
+ {0x05B4, 14, 0, 0},
+ {0x05B5, 15, 0, 0},
+ {0x05B6, 16, 0, 0},
+ {0x05B7, 17, 0, 0},
+ {0x05B8, 18, 0, 0},
+ {0x05B9, 19, 0, 0},
+ {0x05BA, 19, 0, 0},
+ {0x05BB, 20, 0, 0},
+ {0x05BC, 21, 0, 0},
+ {0x05BD, 22, 0, 0},
+ {0x05BF, 23, 0, 0},
+ {0x05C1, 24, 0, 0},
+ {0x05C2, 25, 0, 0},
+ {0x05C4, 230, 0, 0},
+ {0x05C5, 220, 0, 0},
+ {0x05C7, 18, 0, 0},
+ {0x0610, 230, 0, 0},
+ {0x0611, 230, 0, 0},
+ {0x0612, 230, 0, 0},
+ {0x0613, 230, 0, 0},
+ {0x0614, 230, 0, 0},
+ {0x0615, 230, 0, 0},
+ {0x0616, 230, 0, 0},
+ {0x0617, 230, 0, 0},
+ {0x0618, 30, 0, 0},
+ {0x0619, 31, 0, 0},
+ {0x061A, 32, 0, 0},
+ {0x064B, 27, 0, 0},
+ {0x064C, 28, 0, 0},
+ {0x064D, 29, 0, 0},
+ {0x064E, 30, 0, 0},
+ {0x064F, 31, 0, 0},
+ {0x0650, 32, 0, 0},
+ {0x0651, 33, 0, 0},
+ {0x0652, 34, 0, 0},
+ {0x0653, 230, 0, 0},
+ {0x0654, 230, 0, 0},
+ {0x0655, 220, 0, 0},
+ {0x0656, 220, 0, 0},
+ {0x0657, 230, 0, 0},
+ {0x0658, 230, 0, 0},
+ {0x0659, 230, 0, 0},
+ {0x065A, 230, 0, 0},
+ {0x065B, 230, 0, 0},
+ {0x065C, 220, 0, 0},
+ {0x065D, 230, 0, 0},
+ {0x065E, 230, 0, 0},
+ {0x065F, 220, 0, 0},
+ {0x0670, 35, 0, 0},
+ {0x0675, 0, 2 | DECOMP_COMPAT, 735},
+ {0x0676, 0, 2 | DECOMP_COMPAT, 737},
+ {0x0677, 0, 2 | DECOMP_COMPAT, 739},
+ {0x0678, 0, 2 | DECOMP_COMPAT, 741},
+ {0x06D6, 230, 0, 0},
+ {0x06D7, 230, 0, 0},
+ {0x06D8, 230, 0, 0},
+ {0x06D9, 230, 0, 0},
+ {0x06DA, 230, 0, 0},
+ {0x06DB, 230, 0, 0},
+ {0x06DC, 230, 0, 0},
+ {0x06DF, 230, 0, 0},
+ {0x06E0, 230, 0, 0},
+ {0x06E1, 230, 0, 0},
+ {0x06E2, 230, 0, 0},
+ {0x06E3, 220, 0, 0},
+ {0x06E4, 230, 0, 0},
+ {0x06E7, 230, 0, 0},
+ {0x06E8, 230, 0, 0},
+ {0x06EA, 220, 0, 0},
+ {0x06EB, 230, 0, 0},
+ {0x06EC, 230, 0, 0},
+ {0x06ED, 220, 0, 0},
+ {0x0711, 36, 0, 0},
+ {0x0730, 230, 0, 0},
+ {0x0731, 220, 0, 0},
+ {0x0732, 230, 0, 0},
+ {0x0733, 230, 0, 0},
+ {0x0734, 220, 0, 0},
+ {0x0735, 230, 0, 0},
+ {0x0736, 230, 0, 0},
+ {0x0737, 220, 0, 0},
+ {0x0738, 220, 0, 0},
+ {0x0739, 220, 0, 0},
+ {0x073A, 230, 0, 0},
+ {0x073B, 220, 0, 0},
+ {0x073C, 220, 0, 0},
+ {0x073D, 230, 0, 0},
+ {0x073E, 220, 0, 0},
+ {0x073F, 230, 0, 0},
+ {0x0740, 230, 0, 0},
+ {0x0741, 230, 0, 0},
+ {0x0742, 220, 0, 0},
+ {0x0743, 230, 0, 0},
+ {0x0744, 220, 0, 0},
+ {0x0745, 230, 0, 0},
+ {0x0746, 220, 0, 0},
+ {0x0747, 230, 0, 0},
+ {0x0748, 220, 0, 0},
+ {0x0749, 230, 0, 0},
+ {0x074A, 230, 0, 0},
+ {0x07EB, 230, 0, 0},
+ {0x07EC, 230, 0, 0},
+ {0x07ED, 230, 0, 0},
+ {0x07EE, 230, 0, 0},
+ {0x07EF, 230, 0, 0},
+ {0x07F0, 230, 0, 0},
+ {0x07F1, 230, 0, 0},
+ {0x07F2, 220, 0, 0},
+ {0x07F3, 230, 0, 0},
+ {0x07FD, 220, 0, 0},
+ {0x0816, 230, 0, 0},
+ {0x0817, 230, 0, 0},
+ {0x0818, 230, 0, 0},
+ {0x0819, 230, 0, 0},
+ {0x081B, 230, 0, 0},
+ {0x081C, 230, 0, 0},
+ {0x081D, 230, 0, 0},
+ {0x081E, 230, 0, 0},
+ {0x081F, 230, 0, 0},
+ {0x0820, 230, 0, 0},
+ {0x0821, 230, 0, 0},
+ {0x0822, 230, 0, 0},
+ {0x0823, 230, 0, 0},
+ {0x0825, 230, 0, 0},
+ {0x0826, 230, 0, 0},
+ {0x0827, 230, 0, 0},
+ {0x0829, 230, 0, 0},
+ {0x082A, 230, 0, 0},
+ {0x082B, 230, 0, 0},
+ {0x082C, 230, 0, 0},
+ {0x082D, 230, 0, 0},
+ {0x0859, 220, 0, 0},
+ {0x085A, 220, 0, 0},
+ {0x085B, 220, 0, 0},
+ {0x08D3, 220, 0, 0},
+ {0x08D4, 230, 0, 0},
+ {0x08D5, 230, 0, 0},
+ {0x08D6, 230, 0, 0},
+ {0x08D7, 230, 0, 0},
+ {0x08D8, 230, 0, 0},
+ {0x08D9, 230, 0, 0},
+ {0x08DA, 230, 0, 0},
+ {0x08DB, 230, 0, 0},
+ {0x08DC, 230, 0, 0},
+ {0x08DD, 230, 0, 0},
+ {0x08DE, 230, 0, 0},
+ {0x08DF, 230, 0, 0},
+ {0x08E0, 230, 0, 0},
+ {0x08E1, 230, 0, 0},
+ {0x08E3, 220, 0, 0},
+ {0x08E4, 230, 0, 0},
+ {0x08E5, 230, 0, 0},
+ {0x08E6, 220, 0, 0},
+ {0x08E7, 230, 0, 0},
+ {0x08E8, 230, 0, 0},
+ {0x08E9, 220, 0, 0},
+ {0x08EA, 230, 0, 0},
+ {0x08EB, 230, 0, 0},
+ {0x08EC, 230, 0, 0},
+ {0x08ED, 220, 0, 0},
+ {0x08EE, 220, 0, 0},
+ {0x08EF, 220, 0, 0},
+ {0x08F0, 27, 0, 0},
+ {0x08F1, 28, 0, 0},
+ {0x08F2, 29, 0, 0},
+ {0x08F3, 230, 0, 0},
+ {0x08F4, 230, 0, 0},
+ {0x08F5, 230, 0, 0},
+ {0x08F6, 220, 0, 0},
+ {0x08F7, 230, 0, 0},
+ {0x08F8, 230, 0, 0},
+ {0x08F9, 220, 0, 0},
+ {0x08FA, 220, 0, 0},
+ {0x08FB, 230, 0, 0},
+ {0x08FC, 230, 0, 0},
+ {0x08FD, 230, 0, 0},
+ {0x08FE, 230, 0, 0},
+ {0x08FF, 230, 0, 0},
+ {0x093C, 7, 0, 0},
+ {0x094D, 9, 0, 0},
+ {0x0951, 230, 0, 0},
+ {0x0952, 220, 0, 0},
+ {0x0953, 230, 0, 0},
+ {0x0954, 230, 0, 0},
+ {0x0958, 0, 2 | DECOMP_NO_COMPOSE, 755}, /* in exclusion list */
+ {0x0959, 0, 2 | DECOMP_NO_COMPOSE, 757}, /* in exclusion list */
+ {0x095A, 0, 2 | DECOMP_NO_COMPOSE, 759}, /* in exclusion list */
+ {0x095B, 0, 2 | DECOMP_NO_COMPOSE, 761}, /* in exclusion list */
+ {0x095C, 0, 2 | DECOMP_NO_COMPOSE, 763}, /* in exclusion list */
+ {0x095D, 0, 2 | DECOMP_NO_COMPOSE, 765}, /* in exclusion list */
+ {0x095E, 0, 2 | DECOMP_NO_COMPOSE, 767}, /* in exclusion list */
+ {0x095F, 0, 2 | DECOMP_NO_COMPOSE, 769}, /* in exclusion list */
+ {0x09BC, 7, 0, 0},
+ {0x09CD, 9, 0, 0},
+ {0x09DC, 0, 2 | DECOMP_NO_COMPOSE, 775}, /* in exclusion list */
+ {0x09DD, 0, 2 | DECOMP_NO_COMPOSE, 777}, /* in exclusion list */
+ {0x09DF, 0, 2 | DECOMP_NO_COMPOSE, 779}, /* in exclusion list */
+ {0x09FE, 230, 0, 0},
+ {0x0A33, 0, 2 | DECOMP_NO_COMPOSE, 781}, /* in exclusion list */
+ {0x0A36, 0, 2 | DECOMP_NO_COMPOSE, 783}, /* in exclusion list */
+ {0x0A3C, 7, 0, 0},
+ {0x0A4D, 9, 0, 0},
+ {0x0A59, 0, 2 | DECOMP_NO_COMPOSE, 785}, /* in exclusion list */
+ {0x0A5A, 0, 2 | DECOMP_NO_COMPOSE, 787}, /* in exclusion list */
+ {0x0A5B, 0, 2 | DECOMP_NO_COMPOSE, 789}, /* in exclusion list */
+ {0x0A5E, 0, 2 | DECOMP_NO_COMPOSE, 791}, /* in exclusion list */
+ {0x0ABC, 7, 0, 0},
+ {0x0ACD, 9, 0, 0},
+ {0x0B3C, 7, 0, 0},
+ {0x0B4D, 9, 0, 0},
+ {0x0B5C, 0, 2 | DECOMP_NO_COMPOSE, 799}, /* in exclusion list */
+ {0x0B5D, 0, 2 | DECOMP_NO_COMPOSE, 801}, /* in exclusion list */
+ {0x0BCD, 9, 0, 0},
+ {0x0C4D, 9, 0, 0},
+ {0x0C55, 84, 0, 0},
+ {0x0C56, 91, 0, 0},
+ {0x0CBC, 7, 0, 0},
+ {0x0CCD, 9, 0, 0},
+ {0x0D3B, 9, 0, 0},
+ {0x0D3C, 9, 0, 0},
+ {0x0D4D, 9, 0, 0},
+ {0x0DCA, 9, 0, 0},
+ {0x0E33, 0, 2 | DECOMP_COMPAT, 837},
+ {0x0E38, 103, 0, 0},
+ {0x0E39, 103, 0, 0},
+ {0x0E3A, 9, 0, 0},
+ {0x0E48, 107, 0, 0},
+ {0x0E49, 107, 0, 0},
+ {0x0E4A, 107, 0, 0},
+ {0x0E4B, 107, 0, 0},
+ {0x0EB3, 0, 2 | DECOMP_COMPAT, 839},
+ {0x0EB8, 118, 0, 0},
+ {0x0EB9, 118, 0, 0},
+ {0x0EBA, 9, 0, 0},
+ {0x0EC8, 122, 0, 0},
+ {0x0EC9, 122, 0, 0},
+ {0x0ECA, 122, 0, 0},
+ {0x0ECB, 122, 0, 0},
+ {0x0EDC, 0, 2 | DECOMP_COMPAT, 841},
+ {0x0EDD, 0, 2 | DECOMP_COMPAT, 843},
+ {0x0F0C, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0F0B},
+ {0x0F18, 220, 0, 0},
+ {0x0F19, 220, 0, 0},
+ {0x0F35, 220, 0, 0},
+ {0x0F37, 220, 0, 0},
+ {0x0F39, 216, 0, 0},
+ {0x0F43, 0, 2 | DECOMP_NO_COMPOSE, 845}, /* in exclusion list */
+ {0x0F4D, 0, 2 | DECOMP_NO_COMPOSE, 847}, /* in exclusion list */
+ {0x0F52, 0, 2 | DECOMP_NO_COMPOSE, 849}, /* in exclusion list */
+ {0x0F57, 0, 2 | DECOMP_NO_COMPOSE, 851}, /* in exclusion list */
+ {0x0F5C, 0, 2 | DECOMP_NO_COMPOSE, 853}, /* in exclusion list */
+ {0x0F69, 0, 2 | DECOMP_NO_COMPOSE, 855}, /* in exclusion list */
+ {0x0F71, 129, 0, 0},
+ {0x0F72, 130, 0, 0},
+ {0x0F73, 0, 2 | DECOMP_NO_COMPOSE, 857}, /* non-starter decomposition */
+ {0x0F74, 132, 0, 0},
+ {0x0F75, 0, 2 | DECOMP_NO_COMPOSE, 859}, /* non-starter decomposition */
+ {0x0F76, 0, 2 | DECOMP_NO_COMPOSE, 861}, /* in exclusion list */
+ {0x0F77, 0, 2 | DECOMP_COMPAT, 863},
+ {0x0F78, 0, 2 | DECOMP_NO_COMPOSE, 865}, /* in exclusion list */
+ {0x0F79, 0, 2 | DECOMP_COMPAT, 867},
+ {0x0F7A, 130, 0, 0},
+ {0x0F7B, 130, 0, 0},
+ {0x0F7C, 130, 0, 0},
+ {0x0F7D, 130, 0, 0},
+ {0x0F80, 130, 0, 0},
+ {0x0F81, 0, 2 | DECOMP_NO_COMPOSE, 869}, /* non-starter decomposition */
+ {0x0F82, 230, 0, 0},
+ {0x0F83, 230, 0, 0},
+ {0x0F84, 9, 0, 0},
+ {0x0F86, 230, 0, 0},
+ {0x0F87, 230, 0, 0},
+ {0x0F93, 0, 2 | DECOMP_NO_COMPOSE, 871}, /* in exclusion list */
+ {0x0F9D, 0, 2 | DECOMP_NO_COMPOSE, 873}, /* in exclusion list */
+ {0x0FA2, 0, 2 | DECOMP_NO_COMPOSE, 875}, /* in exclusion list */
+ {0x0FA7, 0, 2 | DECOMP_NO_COMPOSE, 877}, /* in exclusion list */
+ {0x0FAC, 0, 2 | DECOMP_NO_COMPOSE, 879}, /* in exclusion list */
+ {0x0FB9, 0, 2 | DECOMP_NO_COMPOSE, 881}, /* in exclusion list */
+ {0x0FC6, 220, 0, 0},
+ {0x1037, 7, 0, 0},
+ {0x1039, 9, 0, 0},
+ {0x103A, 9, 0, 0},
+ {0x108D, 220, 0, 0},
+ {0x10FC, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x10DC},
+ {0x135D, 230, 0, 0},
+ {0x135E, 230, 0, 0},
+ {0x135F, 230, 0, 0},
+ {0x1714, 9, 0, 0},
+ {0x1734, 9, 0, 0},
+ {0x17D2, 9, 0, 0},
+ {0x17DD, 230, 0, 0},
+ {0x18A9, 228, 0, 0},
+ {0x1939, 222, 0, 0},
+ {0x193A, 230, 0, 0},
+ {0x193B, 220, 0, 0},
+ {0x1A17, 230, 0, 0},
+ {0x1A18, 220, 0, 0},
+ {0x1A60, 9, 0, 0},
+ {0x1A75, 230, 0, 0},
+ {0x1A76, 230, 0, 0},
+ {0x1A77, 230, 0, 0},
+ {0x1A78, 230, 0, 0},
+ {0x1A79, 230, 0, 0},
+ {0x1A7A, 230, 0, 0},
+ {0x1A7B, 230, 0, 0},
+ {0x1A7C, 230, 0, 0},
+ {0x1A7F, 220, 0, 0},
+ {0x1AB0, 230, 0, 0},
+ {0x1AB1, 230, 0, 0},
+ {0x1AB2, 230, 0, 0},
+ {0x1AB3, 230, 0, 0},
+ {0x1AB4, 230, 0, 0},
+ {0x1AB5, 220, 0, 0},
+ {0x1AB6, 220, 0, 0},
+ {0x1AB7, 220, 0, 0},
+ {0x1AB8, 220, 0, 0},
+ {0x1AB9, 220, 0, 0},
+ {0x1ABA, 220, 0, 0},
+ {0x1ABB, 230, 0, 0},
+ {0x1ABC, 230, 0, 0},
+ {0x1ABD, 220, 0, 0},
+ {0x1ABF, 220, 0, 0},
+ {0x1AC0, 220, 0, 0},
+ {0x1B34, 7, 0, 0},
+ {0x1B44, 9, 0, 0},
+ {0x1B6B, 230, 0, 0},
+ {0x1B6C, 220, 0, 0},
+ {0x1B6D, 230, 0, 0},
+ {0x1B6E, 230, 0, 0},
+ {0x1B6F, 230, 0, 0},
+ {0x1B70, 230, 0, 0},
+ {0x1B71, 230, 0, 0},
+ {0x1B72, 230, 0, 0},
+ {0x1B73, 230, 0, 0},
+ {0x1BAA, 9, 0, 0},
+ {0x1BAB, 9, 0, 0},
+ {0x1BE6, 7, 0, 0},
+ {0x1BF2, 9, 0, 0},
+ {0x1BF3, 9, 0, 0},
+ {0x1C37, 7, 0, 0},
+ {0x1CD0, 230, 0, 0},
+ {0x1CD1, 230, 0, 0},
+ {0x1CD2, 230, 0, 0},
+ {0x1CD4, 1, 0, 0},
+ {0x1CD5, 220, 0, 0},
+ {0x1CD6, 220, 0, 0},
+ {0x1CD7, 220, 0, 0},
+ {0x1CD8, 220, 0, 0},
+ {0x1CD9, 220, 0, 0},
+ {0x1CDA, 230, 0, 0},
+ {0x1CDB, 230, 0, 0},
+ {0x1CDC, 220, 0, 0},
+ {0x1CDD, 220, 0, 0},
+ {0x1CDE, 220, 0, 0},
+ {0x1CDF, 220, 0, 0},
+ {0x1CE0, 230, 0, 0},
+ {0x1CE2, 1, 0, 0},
+ {0x1CE3, 1, 0, 0},
+ {0x1CE4, 1, 0, 0},
+ {0x1CE5, 1, 0, 0},
+ {0x1CE6, 1, 0, 0},
+ {0x1CE7, 1, 0, 0},
+ {0x1CE8, 1, 0, 0},
+ {0x1CED, 220, 0, 0},
+ {0x1CF4, 230, 0, 0},
+ {0x1CF8, 230, 0, 0},
+ {0x1CF9, 230, 0, 0},
+ {0x1D2C, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0041},
+ {0x1D2D, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x00C6},
+ {0x1D2E, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0042},
+ {0x1D30, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0044},
+ {0x1D31, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0045},
+ {0x1D32, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x018E},
+ {0x1D33, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0047},
+ {0x1D34, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0048},
+ {0x1D35, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0049},
+ {0x1D36, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x004A},
+ {0x1D37, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x004B},
+ {0x1D38, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x004C},
+ {0x1D39, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x004D},
+ {0x1D3A, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x004E},
+ {0x1D3C, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x004F},
+ {0x1D3D, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0222},
+ {0x1D3E, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0050},
+ {0x1D3F, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0052},
+ {0x1D40, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0054},
+ {0x1D41, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0055},
+ {0x1D42, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0057},
+ {0x1D43, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0061},
+ {0x1D44, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0250},
+ {0x1D45, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0251},
+ {0x1D46, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1D02},
+ {0x1D47, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0062},
+ {0x1D48, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0064},
+ {0x1D49, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0065},
+ {0x1D4A, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0259},
+ {0x1D4B, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x025B},
+ {0x1D4C, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x025C},
+ {0x1D4D, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0067},
+ {0x1D4F, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x006B},
+ {0x1D50, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x006D},
+ {0x1D51, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x014B},
+ {0x1D52, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x006F},
+ {0x1D53, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0254},
+ {0x1D54, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1D16},
+ {0x1D55, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1D17},
+ {0x1D56, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0070},
+ {0x1D57, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0074},
+ {0x1D58, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0075},
+ {0x1D59, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1D1D},
+ {0x1D5A, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x026F},
+ {0x1D5B, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0076},
+ {0x1D5C, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1D25},
+ {0x1D5D, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B2},
+ {0x1D5E, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B3},
+ {0x1D5F, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B4},
+ {0x1D60, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C6},
+ {0x1D61, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C7},
+ {0x1D62, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0069},
+ {0x1D63, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0072},
+ {0x1D64, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0075},
+ {0x1D65, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0076},
+ {0x1D66, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B2},
+ {0x1D67, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B3},
+ {0x1D68, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C1},
+ {0x1D69, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C6},
+ {0x1D6A, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03C7},
+ {0x1D78, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x043D},
+ {0x1D9B, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0252},
+ {0x1D9C, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0063},
+ {0x1D9D, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0255},
+ {0x1D9E, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x00F0},
+ {0x1D9F, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x025C},
+ {0x1DA0, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0066},
+ {0x1DA1, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x025F},
+ {0x1DA2, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0261},
+ {0x1DA3, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0265},
+ {0x1DA4, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0268},
+ {0x1DA5, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0269},
+ {0x1DA6, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x026A},
+ {0x1DA7, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1D7B},
+ {0x1DA8, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x029D},
+ {0x1DA9, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x026D},
+ {0x1DAA, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1D85},
+ {0x1DAB, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x029F},
+ {0x1DAC, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0271},
+ {0x1DAD, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0270},
+ {0x1DAE, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0272},
+ {0x1DAF, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0273},
+ {0x1DB0, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0274},
+ {0x1DB1, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0275},
+ {0x1DB2, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0278},
+ {0x1DB3, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0282},
+ {0x1DB4, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0283},
+ {0x1DB5, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x01AB},
+ {0x1DB6, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0289},
+ {0x1DB7, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x028A},
+ {0x1DB8, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1D1C},
+ {0x1DB9, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x028B},
+ {0x1DBA, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x028C},
+ {0x1DBB, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x007A},
+ {0x1DBC, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0290},
+ {0x1DBD, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0291},
+ {0x1DBE, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0292},
+ {0x1DBF, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x03B8},
+ {0x1DC0, 230, 0, 0},
+ {0x1DC1, 230, 0, 0},
+ {0x1DC2, 220, 0, 0},
+ {0x1DC3, 230, 0, 0},
+ {0x1DC4, 230, 0, 0},
+ {0x1DC5, 230, 0, 0},
+ {0x1DC6, 230, 0, 0},
+ {0x1DC7, 230, 0, 0},
+ {0x1DC8, 230, 0, 0},
+ {0x1DC9, 230, 0, 0},
+ {0x1DCA, 220, 0, 0},
+ {0x1DCB, 230, 0, 0},
+ {0x1DCC, 230, 0, 0},
+ {0x1DCD, 234, 0, 0},
+ {0x1DCE, 214, 0, 0},
+ {0x1DCF, 220, 0, 0},
+ {0x1DD0, 202, 0, 0},
+ {0x1DD1, 230, 0, 0},
+ {0x1DD2, 230, 0, 0},
+ {0x1DD3, 230, 0, 0},
+ {0x1DD4, 230, 0, 0},
+ {0x1DD5, 230, 0, 0},
+ {0x1DD6, 230, 0, 0},
+ {0x1DD7, 230, 0, 0},
+ {0x1DD8, 230, 0, 0},
+ {0x1DD9, 230, 0, 0},
+ {0x1DDA, 230, 0, 0},
+ {0x1DDB, 230, 0, 0},
+ {0x1DDC, 230, 0, 0},
+ {0x1DDD, 230, 0, 0},
+ {0x1DDE, 230, 0, 0},
+ {0x1DDF, 230, 0, 0},
+ {0x1DE0, 230, 0, 0},
+ {0x1DE1, 230, 0, 0},
+ {0x1DE2, 230, 0, 0},
+ {0x1DE3, 230, 0, 0},
+ {0x1DE4, 230, 0, 0},
+ {0x1DE5, 230, 0, 0},
+ {0x1DE6, 230, 0, 0},
+ {0x1DE7, 230, 0, 0},
+ {0x1DE8, 230, 0, 0},
+ {0x1DE9, 230, 0, 0},
+ {0x1DEA, 230, 0, 0},
+ {0x1DEB, 230, 0, 0},
+ {0x1DEC, 230, 0, 0},
+ {0x1DED, 230, 0, 0},
+ {0x1DEE, 230, 0, 0},
+ {0x1DEF, 230, 0, 0},
+ {0x1DF0, 230, 0, 0},
+ {0x1DF1, 230, 0, 0},
+ {0x1DF2, 230, 0, 0},
+ {0x1DF3, 230, 0, 0},
+ {0x1DF4, 230, 0, 0},
+ {0x1DF5, 230, 0, 0},
+ {0x1DF6, 232, 0, 0},
+ {0x1DF7, 228, 0, 0},
+ {0x1DF8, 228, 0, 0},
+ {0x1DF9, 220, 0, 0},
+ {0x1DFB, 230, 0, 0},
+ {0x1DFC, 233, 0, 0},
+ {0x1DFD, 220, 0, 0},
+ {0x1DFE, 230, 0, 0},
+ {0x1DFF, 220, 0, 0},
+ {0x1E9A, 0, 2 | DECOMP_COMPAT, 1215},
{0x1F71, 0, 1 | DECOMP_INLINE, 0x03AC},
- {0x1F72, 0, 2, 1601},
{0x1F73, 0, 1 | DECOMP_INLINE, 0x03AD},
- {0x1F74, 0, 2, 1603},
{0x1F75, 0, 1 | DECOMP_INLINE, 0x03AE},
- {0x1F76, 0, 2, 1605},
{0x1F77, 0, 1 | DECOMP_INLINE, 0x03AF},
- {0x1F78, 0, 2, 1607},
{0x1F79, 0, 1 | DECOMP_INLINE, 0x03CC},
- {0x1F7A, 0, 2, 1609},
{0x1F7B, 0, 1 | DECOMP_INLINE, 0x03CD},
- {0x1F7C, 0, 2, 1611},
{0x1F7D, 0, 1 | DECOMP_INLINE, 0x03CE},
- {0x1F80, 0, 2, 1613},
- {0x1F81, 0, 2, 1615},
- {0x1F82, 0, 2, 1617},
- {0x1F83, 0, 2, 1619},
- {0x1F84, 0, 2, 1621},
- {0x1F85, 0, 2, 1623},
- {0x1F86, 0, 2, 1625},
- {0x1F87, 0, 2, 1627},
- {0x1F88, 0, 2, 1629},
- {0x1F89, 0, 2, 1631},
- {0x1F8A, 0, 2, 1633},
- {0x1F8B, 0, 2, 1635},
- {0x1F8C, 0, 2, 1637},
- {0x1F8D, 0, 2, 1639},
- {0x1F8E, 0, 2, 1641},
- {0x1F8F, 0, 2, 1643},
- {0x1F90, 0, 2, 1645},
- {0x1F91, 0, 2, 1647},
- {0x1F92, 0, 2, 1649},
- {0x1F93, 0, 2, 1651},
- {0x1F94, 0, 2, 1653},
- {0x1F95, 0, 2, 1655},
- {0x1F96, 0, 2, 1657},
- {0x1F97, 0, 2, 1659},
- {0x1F98, 0, 2, 1661},
- {0x1F99, 0, 2, 1663},
- {0x1F9A, 0, 2, 1665},
- {0x1F9B, 0, 2, 1667},
- {0x1F9C, 0, 2, 1669},
- {0x1F9D, 0, 2, 1671},
- {0x1F9E, 0, 2, 1673},
- {0x1F9F, 0, 2, 1675},
- {0x1FA0, 0, 2, 1677},
- {0x1FA1, 0, 2, 1679},
- {0x1FA2, 0, 2, 1681},
- {0x1FA3, 0, 2, 1683},
- {0x1FA4, 0, 2, 1685},
- {0x1FA5, 0, 2, 1687},
- {0x1FA6, 0, 2, 1689},
- {0x1FA7, 0, 2, 1691},
- {0x1FA8, 0, 2, 1693},
- {0x1FA9, 0, 2, 1695},
- {0x1FAA, 0, 2, 1697},
- {0x1FAB, 0, 2, 1699},
- {0x1FAC, 0, 2, 1701},
- {0x1FAD, 0, 2, 1703},
- {0x1FAE, 0, 2, 1705},
- {0x1FAF, 0, 2, 1707},
- {0x1FB0, 0, 2, 1709},
- {0x1FB1, 0, 2, 1711},
- {0x1FB2, 0, 2, 1713},
- {0x1FB3, 0, 2, 1715},
- {0x1FB4, 0, 2, 1717},
- {0x1FB6, 0, 2, 1719},
- {0x1FB7, 0, 2, 1721},
- {0x1FB8, 0, 2, 1723},
- {0x1FB9, 0, 2, 1725},
- {0x1FBA, 0, 2, 1727},
{0x1FBB, 0, 1 | DECOMP_INLINE, 0x0386},
- {0x1FBC, 0, 2, 1729},
{0x1FBD, 0, 2 | DECOMP_COMPAT, 1731},
{0x1FBE, 0, 1 | DECOMP_INLINE, 0x03B9},
{0x1FBF, 0, 2 | DECOMP_COMPAT, 1733},
{0x1FC0, 0, 2 | DECOMP_COMPAT, 1735},
- {0x1FC1, 0, 2, 1737},
- {0x1FC2, 0, 2, 1739},
- {0x1FC3, 0, 2, 1741},
- {0x1FC4, 0, 2, 1743},
- {0x1FC6, 0, 2, 1745},
- {0x1FC7, 0, 2, 1747},
- {0x1FC8, 0, 2, 1749},
{0x1FC9, 0, 1 | DECOMP_INLINE, 0x0388},
- {0x1FCA, 0, 2, 1751},
{0x1FCB, 0, 1 | DECOMP_INLINE, 0x0389},
- {0x1FCC, 0, 2, 1753},
- {0x1FCD, 0, 2, 1755},
- {0x1FCE, 0, 2, 1757},
- {0x1FCF, 0, 2, 1759},
- {0x1FD0, 0, 2, 1761},
- {0x1FD1, 0, 2, 1763},
- {0x1FD2, 0, 2, 1765},
{0x1FD3, 0, 1 | DECOMP_INLINE, 0x0390},
- {0x1FD6, 0, 2, 1767},
- {0x1FD7, 0, 2, 1769},
- {0x1FD8, 0, 2, 1771},
- {0x1FD9, 0, 2, 1773},
- {0x1FDA, 0, 2, 1775},
{0x1FDB, 0, 1 | DECOMP_INLINE, 0x038A},
- {0x1FDD, 0, 2, 1777},
- {0x1FDE, 0, 2, 1779},
- {0x1FDF, 0, 2, 1781},
- {0x1FE0, 0, 2, 1783},
- {0x1FE1, 0, 2, 1785},
- {0x1FE2, 0, 2, 1787},
{0x1FE3, 0, 1 | DECOMP_INLINE, 0x03B0},
- {0x1FE4, 0, 2, 1789},
- {0x1FE5, 0, 2, 1791},
- {0x1FE6, 0, 2, 1793},
- {0x1FE7, 0, 2, 1795},
- {0x1FE8, 0, 2, 1797},
- {0x1FE9, 0, 2, 1799},
- {0x1FEA, 0, 2, 1801},
{0x1FEB, 0, 1 | DECOMP_INLINE, 0x038E},
- {0x1FEC, 0, 2, 1803},
- {0x1FED, 0, 2, 1805},
{0x1FEE, 0, 1 | DECOMP_INLINE, 0x0385},
{0x1FEF, 0, 1 | DECOMP_INLINE, 0x0060},
- {0x1FF2, 0, 2, 1807},
- {0x1FF3, 0, 2, 1809},
- {0x1FF4, 0, 2, 1811},
- {0x1FF6, 0, 2, 1813},
- {0x1FF7, 0, 2, 1815},
- {0x1FF8, 0, 2, 1817},
{0x1FF9, 0, 1 | DECOMP_INLINE, 0x038C},
- {0x1FFA, 0, 2, 1819},
{0x1FFB, 0, 1 | DECOMP_INLINE, 0x038F},
- {0x1FFC, 0, 2, 1821},
{0x1FFD, 0, 1 | DECOMP_INLINE, 0x00B4},
{0x1FFE, 0, 2 | DECOMP_COMPAT, 1823},
{0x2000, 0, 1 | DECOMP_INLINE, 0x2002},
@@ -1839,54 +1965,10 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x217E, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0064},
{0x217F, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x006D},
{0x2189, 0, 3 | DECOMP_COMPAT, 1980},
- {0x219A, 0, 2, 1983},
- {0x219B, 0, 2, 1985},
- {0x21AE, 0, 2, 1987},
- {0x21CD, 0, 2, 1989},
- {0x21CE, 0, 2, 1991},
- {0x21CF, 0, 2, 1993},
- {0x2204, 0, 2, 1995},
- {0x2209, 0, 2, 1997},
- {0x220C, 0, 2, 1999},
- {0x2224, 0, 2, 2001},
- {0x2226, 0, 2, 2003},
{0x222C, 0, 2 | DECOMP_COMPAT, 2005},
{0x222D, 0, 3 | DECOMP_COMPAT, 2007},
{0x222F, 0, 2 | DECOMP_COMPAT, 2010},
{0x2230, 0, 3 | DECOMP_COMPAT, 2012},
- {0x2241, 0, 2, 2015},
- {0x2244, 0, 2, 2017},
- {0x2247, 0, 2, 2019},
- {0x2249, 0, 2, 2021},
- {0x2260, 0, 2, 2023},
- {0x2262, 0, 2, 2025},
- {0x226D, 0, 2, 2027},
- {0x226E, 0, 2, 2029},
- {0x226F, 0, 2, 2031},
- {0x2270, 0, 2, 2033},
- {0x2271, 0, 2, 2035},
- {0x2274, 0, 2, 2037},
- {0x2275, 0, 2, 2039},
- {0x2278, 0, 2, 2041},
- {0x2279, 0, 2, 2043},
- {0x2280, 0, 2, 2045},
- {0x2281, 0, 2, 2047},
- {0x2284, 0, 2, 2049},
- {0x2285, 0, 2, 2051},
- {0x2288, 0, 2, 2053},
- {0x2289, 0, 2, 2055},
- {0x22AC, 0, 2, 2057},
- {0x22AD, 0, 2, 2059},
- {0x22AE, 0, 2, 2061},
- {0x22AF, 0, 2, 2063},
- {0x22E0, 0, 2, 2065},
- {0x22E1, 0, 2, 2067},
- {0x22E2, 0, 2, 2069},
- {0x22E3, 0, 2, 2071},
- {0x22EA, 0, 2, 2073},
- {0x22EB, 0, 2, 2075},
- {0x22EC, 0, 2, 2077},
- {0x22ED, 0, 2, 2079},
{0x2329, 0, 1 | DECOMP_INLINE, 0x3008},
{0x232A, 0, 1 | DECOMP_INLINE, 0x3009},
{0x2460, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x0031},
@@ -2299,69 +2381,11 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x3038, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x5341},
{0x3039, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x5344},
{0x303A, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x5345},
- {0x304C, 0, 2, 2317},
- {0x304E, 0, 2, 2319},
- {0x3050, 0, 2, 2321},
- {0x3052, 0, 2, 2323},
- {0x3054, 0, 2, 2325},
- {0x3056, 0, 2, 2327},
- {0x3058, 0, 2, 2329},
- {0x305A, 0, 2, 2331},
- {0x305C, 0, 2, 2333},
- {0x305E, 0, 2, 2335},
- {0x3060, 0, 2, 2337},
- {0x3062, 0, 2, 2339},
- {0x3065, 0, 2, 2341},
- {0x3067, 0, 2, 2343},
- {0x3069, 0, 2, 2345},
- {0x3070, 0, 2, 2347},
- {0x3071, 0, 2, 2349},
- {0x3073, 0, 2, 2351},
- {0x3074, 0, 2, 2353},
- {0x3076, 0, 2, 2355},
- {0x3077, 0, 2, 2357},
- {0x3079, 0, 2, 2359},
- {0x307A, 0, 2, 2361},
- {0x307C, 0, 2, 2363},
- {0x307D, 0, 2, 2365},
- {0x3094, 0, 2, 2367},
{0x3099, 8, 0, 0},
{0x309A, 8, 0, 0},
{0x309B, 0, 2 | DECOMP_COMPAT, 2369},
{0x309C, 0, 2 | DECOMP_COMPAT, 2371},
- {0x309E, 0, 2, 2373},
{0x309F, 0, 2 | DECOMP_COMPAT, 2375},
- {0x30AC, 0, 2, 2377},
- {0x30AE, 0, 2, 2379},
- {0x30B0, 0, 2, 2381},
- {0x30B2, 0, 2, 2383},
- {0x30B4, 0, 2, 2385},
- {0x30B6, 0, 2, 2387},
- {0x30B8, 0, 2, 2389},
- {0x30BA, 0, 2, 2391},
- {0x30BC, 0, 2, 2393},
- {0x30BE, 0, 2, 2395},
- {0x30C0, 0, 2, 2397},
- {0x30C2, 0, 2, 2399},
- {0x30C5, 0, 2, 2401},
- {0x30C7, 0, 2, 2403},
- {0x30C9, 0, 2, 2405},
- {0x30D0, 0, 2, 2407},
- {0x30D1, 0, 2, 2409},
- {0x30D3, 0, 2, 2411},
- {0x30D4, 0, 2, 2413},
- {0x30D6, 0, 2, 2415},
- {0x30D7, 0, 2, 2417},
- {0x30D9, 0, 2, 2419},
- {0x30DA, 0, 2, 2421},
- {0x30DC, 0, 2, 2423},
- {0x30DD, 0, 2, 2425},
- {0x30F4, 0, 2, 2427},
- {0x30F7, 0, 2, 2429},
- {0x30F8, 0, 2, 2431},
- {0x30F9, 0, 2, 2433},
- {0x30FA, 0, 2, 2435},
- {0x30FE, 0, 2, 2437},
{0x30FF, 0, 2 | DECOMP_COMPAT, 2439},
{0x3131, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1100},
{0x3132, 0, 1 | DECOMP_COMPAT | DECOMP_INLINE, 0x1101},
@@ -4626,16 +4650,11 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x10F50, 220, 0, 0},
{0x11046, 9, 0, 0},
{0x1107F, 9, 0, 0},
- {0x1109A, 0, 2, 4776},
- {0x1109C, 0, 2, 4778},
- {0x110AB, 0, 2, 4780},
{0x110B9, 9, 0, 0},
{0x110BA, 7, 0, 0},
{0x11100, 230, 0, 0},
{0x11101, 230, 0, 0},
{0x11102, 230, 0, 0},
- {0x1112E, 0, 2, 4782},
- {0x1112F, 0, 2, 4784},
{0x11133, 9, 0, 0},
{0x11134, 9, 0, 0},
{0x11173, 7, 0, 0},
@@ -4647,8 +4666,6 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x112EA, 9, 0, 0},
{0x1133B, 7, 0, 0},
{0x1133C, 7, 0, 0},
- {0x1134B, 0, 2, 4786},
- {0x1134C, 0, 2, 4788},
{0x1134D, 9, 0, 0},
{0x11366, 230, 0, 0},
{0x11367, 230, 0, 0},
@@ -4665,13 +4682,8 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x11442, 9, 0, 0},
{0x11446, 7, 0, 0},
{0x1145E, 230, 0, 0},
- {0x114BB, 0, 2, 4790},
- {0x114BC, 0, 2, 4792},
- {0x114BE, 0, 2, 4794},
{0x114C2, 9, 0, 0},
{0x114C3, 7, 0, 0},
- {0x115BA, 0, 2, 4796},
- {0x115BB, 0, 2, 4798},
{0x115BF, 9, 0, 0},
{0x115C0, 7, 0, 0},
{0x1163F, 9, 0, 0},
@@ -4680,7 +4692,6 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x1172B, 9, 0, 0},
{0x11839, 9, 0, 0},
{0x1183A, 7, 0, 0},
- {0x11938, 0, 2, 4800},
{0x1193D, 9, 0, 0},
{0x1193E, 9, 0, 0},
{0x11943, 7, 0, 0},
@@ -6641,7 +6652,7 @@ static const pg_unicode_decomposition UnicodeDecompMain[6604] =
{0x2FA1A, 0, 1 | DECOMP_INLINE, 0x9F0F},
{0x2FA1B, 0, 1 | DECOMP_INLINE, 0x9F16},
{0x2FA1C, 0, 1 | DECOMP_INLINE, 0x9F3B},
- {0x2FA1D, 0, 1, 5091}
+ {0x2FA1D, 0, 1, 5091},
};
@@ -8935,3 +8946,1684 @@ static const uint32 UnicodeDecomp_codepoints[5092] =
/* 5090 */ 0x2A291,
/* 5091 */ 0x2A600
};
+
+/* Perfect hash function for decomposition */
+static int
+DecompMain_hash_func(const void *key)
+{
+ static const int16 h[13209] = {
+ 0, 759, 4790, 4791, 0, 0, 0, 0,
+ 0, 0, 0, 0, 2904, 2904, 0, 0,
+ 2905, 2905, -1432, 2813, 2904, 2904, 2904, -5133,
+ 3611, 3612, -5178, -5178, -5133, 1803, 1803, 884,
+ 4427, 4428, -4370, -4370, -4325, -4325, 2661, 98,
+ -4279, -4325, -4325, -4325, -4325, -4325, 2661, 2661,
+ 797, 4401, 4402, 4403, 1096, 1052, 1053, 1054,
+ -8722, 4413, 17622, 2664, 2664, 2664, 6412, 6413,
+ 6414, 6415, 6416, 6417, 5646, 1892, -5094, -4319,
+ 4472, -5343, -5343, 4432, 4433, -5343, -5343, -6309,
+ -3007, 2556, -5343, -5343, -3628, -3628, -3628, -3628,
+ -906, 0, 0, -10611, -10566, 2887, 2888, 2889,
+ 2890, 2891, -9616, -3636, -8844, -8844, -1858, -5333,
+ -8797, -9755, 310, -5333, -8842, -5333, -1855, 152,
+ 316, 2907, 2908, -2239, 2910, 2911, 2912, 2913,
+ 2914, 2915, 2916, 2917, 2918, 2919, 2920, 2921,
+ 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929,
+ 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937,
+ 2938, 2939, 2940, 2941, 2942, 2943, 2944, 2945,
+ 2946, 2947, 32767, 32767, 32767, 32767, 32767, 32767,
+ -7767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 942, 32767, 989, 32767, 32767, 32767, 32767, 990,
+ 32767, 32767, -7733, -7733, -4425, -4380, 32767, 32767,
+ -7735, -7735, -20943, 32767, -17642, -14340, -14340, 32767,
+ -11994, -8692, -8692, -8692, -8692, -8692, 32767, 52,
+ -8738, -8738, -8693, -8693, -8693, -8693, 59, 60,
+ 32767, -8739, -8694, -8694, -8694, -8694, -8694, 32767,
+ 32767, -8696, -8696, -8696, -8696, -8696, 32767, 32767,
+ 26, 27, -3280, -3324, 30, 31, 32767, 32,
+ 13241, 9940, 9941, 6640, 6641, 3340, 3341, 40,
+ 0, 41, 42, 43, -8700, -8700, 91, 32767,
+ 32767, 47, 48, 49, -8702, -8702, 32767, 97,
+ 32767, 53, 54, 55, 56, 2136, 3875, -537,
+ 4904, 61, 62, 63, 64, 65, 66, 67,
+ 68, 32767, 32767, 69, 70, 71, 72, 73,
+ 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 32767,
+ 32767, 89, 90, 91, 92, 93, 94, 95,
+ -8661, -8661, 32767, -7805, -7805, -8664, -8664, -8664,
+ -8664, 32767, 57, 58, 59, 60, -3247, -3291,
+ 912, 913, 32767, 32767, 13271, 9970, 9971, 6670,
+ 6671, 3370, 4216, 32767, 32767, 69, 70, 71,
+ -8672, -8672, 119, 32767, 32767, 75, 76, 77,
+ -8674, -8674, 125, 126, 82, -2585, -2585, -2585,
+ -2585, -5751, -2585, -2585, 135, -2585, 137, 32767,
+ 32767, 7255, 139, -3159, -3158, -3157, -13759, -7669,
+ -552, -3155, 147, -3154, -5365, 150, -3153, -3152,
+ -3151, -3150, -3149, -3148, -3147, -2520, -3145, -3144,
+ 960, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4717,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 3673, 3674, 2144, 2145, 2146, 2147, 2148,
+ 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156,
+ 2157, 2158, -5459, -5459, -3599, -3599, -3599, -3599,
+ -3599, 2665, -3599, -3599, -3599, -3599, -3599, -3599,
+ -3599, -3599, 3706, -3600, -6989, -6989, 1755, 1756,
+ -7034, -7034, -6989, -53, -53, -972, 1766, 1767,
+ -7031, -7031, -6986, -6986, 0, -2563, -6940, -6986,
+ -6986, -6986, -6986, -6986, 0, 0, 1738, 1739,
+ 1740, 1741, -1566, -1610, -1609, 0, 1748, 1749,
+ 14958, 0, 0, 0, 3748, 3749, 3750, 3751,
+ 3752, 3753, 3754, 0, -6986, -6986, 1805, 1806,
+ 1762, 1763, 1764, -8012, -8012, -8978, -5676, -113,
+ -8012, -113, -2456, -6203, -6203, -6203, -6203, -6203,
+ -6203, -5431, -1676, 5311, 4537, -4253, 5563, 5564,
+ -4210, -4210, 5567, 5568, 6535, 3234, -2328, 5572,
+ 5573, 3859, 3860, 3861, 3862, 1141, 2056, 9931,
+ 10847, 10803, 3868, 3869, 3870, 328, 328, 9127,
+ 3874, 9083, 9084, 2099, 5575, 9040, 9999, -65,
+ 5579, 9089, 5581, 2104, 98, -65, 1271, 12459,
+ 3669, 3669, 3714, 3714, 3714, 13491, 13492, 14459,
+ 11158, 5596, 13496, 5598, 7942, 11690, 11691, 11692,
+ 11693, 11694, 11695, 10924, 7170, 184, 959, 9750,
+ -65, -65, 9710, 9711, -65, -65, -1031, 2271,
+ 7834, -65, -65, 1650, 1650, 1650, 1650, 4372,
+ 3458, -4416, -5331, -5286, 1650, 1650, 1650, 5193,
+ 5194, -3604, 1650, -3558, -3558, 3428, -47, -3511,
+ -4469, 5596, -47, -3556, -47, 3431, 5438, 5602,
+ 4267, -6920, 1871, 1872, 1828, 1829, 1830, -7946,
+ -7946, -8912, -5610, -47, -7946, -47, -2390, -6137,
+ -6137, -6137, -6137, -6137, -6137, -5365, -1610, 5377,
+ 4603, -4187, 5629, 5630, -4144, -4144, 5633, 5634,
+ 6601, 3300, -2262, 5638, 5639, 3925, 3926, 3927,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -2367, -2367, 935, 976, 936, 936,
+ 936, 9680, 9681, 32767, 32767, 3099, 32767, 3098,
+ 3098, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 911, 911, 911, 911, 911, 911,
+ 32767, 32767, 909, 909, 909, 909, 909, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 993, 994, -1216, 996, 997,
+ 998, 7401, -800, 11149, 5060, -2056, 5062, 1005,
+ 5063, -4365, 5064, 5065, 5066, 1011, 559, 1013,
+ 1014, 1015, 908, 561, 1018, -2743, 1534, 1021,
+ 1022, 1023, 1024, 566, 1026, 6103, 1028, 1029,
+ 1030, 1031, 1032, 1033, 1034, 1035, -2737, -2737,
+ -2737, 1039, 1040, 1041, 1042, 1043, 1044, 1045,
+ 1046, 1047, 1048, 1049, 1050, 1051, -6236, 1053,
+ 1054, 1055, 1056, 1057, 1058, 1059, 72, 1061,
+ 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069,
+ 1070, 1071, 32767, 1072, 1073, -2802, -2801, -2800,
+ -2799, 1078, -2796, -2795, -2794, 1544, -664, -2791,
+ -2790, -2789, 5249, -3494, -2579, 5296, 6212, 6168,
+ -767, -766, -765, -4307, -4307, 4492, -761, 4448,
+ 4449, -2536, 940, 32767, 0, 32767, 32767, 4451,
+ -1318, -1318, -1318, 32767, 32767, -672, 506, 506,
+ 0, -928, 32767, 32767, 32767, 32767, 32767, 949,
+ 252, 96, 3294, 6187, 6188, 256, 32767, -6362,
+ 32767, 258, 259, 260, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 32767, 0,
+ 32767, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 32767, 261, -5575, 263,
+ -5574, 265, -4744, 267, 32767, -3183, 32767, 32767,
+ 32767, 32767, -3187, 32767, 32767, 32767, 32767, 0,
+ 32767, 32767, 32767, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 268, -11680, -5590,
+ 1527, -5590, 1527, -4754, 4675, -4753, -5592, -5592,
+ -4755, -4755, 4681, 0, 0, 0, 4682, 4683,
+ 4684, 4685, 4686, 4687, 0, 0, 32767, 32767,
+ 0, 0, -4560, 0, 4688, 4689, 4690, 4691,
+ 4692, 4693, 4694, 4695, -706, -706, 4696, -4775,
+ -4775, 4699, 4700, 4701, -4777, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 275, 0, 32767, 277,
+ 32767, 32767, 0, 278, 32767, 32767, 32767, 0,
+ 279, 280, 281, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 4703, 4704, 4705, 4706, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 4655, 4656, 4657, 4658,
+ 4659, 4712, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 283, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 284, 285, 32767, 286,
+ 32767, 32767, 32767, 287, 32767, 32767, 32767, 32767,
+ 288, 289, 290, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 2998, 2998, 2998,
+ 2998, 2998, 2998, 2998, 32767, 32767, 32767, 32767,
+ 32767, 32767, 291, 292, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 1120,
+ 1121, 1122, 1123, 1124, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 4713, 4714, 4715, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 293, 294, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 295, 296, 297, 298,
+ 32767, 32767, 299, 300, 32767, 32767, 301, 302,
+ 303, 304, 305, 306, 32767, 32767, 307, 308,
+ 309, 310, 311, 312, 32767, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 736, -753, 738, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 764, 765, 766, 767,
+ 768, 769, 770, 771, 772, 773, 774, 775,
+ 776, 777, 778, 779, 780, 781, 782, 783,
+ 9637, 785, 887, 787, 4022, 789, 9648, 791,
+ 4028, 793, 794, 9658, 796, 797, 798, 799,
+ 800, 801, 802, 803, 804, 805, 806, 807,
+ 0, 0, 4407, 4452, 816, -73, 818, 819,
+ 8149, -4948, -4948, -4948, -4948, 2009, 0, 0,
+ 0, 0, 0, 0, 838, 839, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 32767, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, -2274, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -2283, -2283,
+ -2283, -2283, -2283, -2283, -2283, -2283, -2283, -2283,
+ -2283, -2283, -3665, -2283, -2283, -2283, -2283, -2283,
+ -2283, -2283, -2283, -2283, -2283, -2283, -2283, -2283,
+ -2283, -2283, -2283, -2283, -2283, -2283, -2283, -2283,
+ -2283, -2283, -2283, -2283, -2283, -2283, -2283, -2283,
+ -2283, -2283, -2283, 32767, -2284, 32767, -2285, -2285,
+ 32767, -2286, -2286, 32767, -2287, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 1177, 1178,
+ 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186,
+ 1187, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 327, 328, 329, 330, 331, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, -265, -265, -265, 1833, 1192, 1193, 1194,
+ -3856, -3812, -3812, -3812, -3812, -3812, -3856, -3856,
+ -3856, 1204, 1205, 1206, 1207, 1208, 32767, 32767,
+ 32767, 32767, -3865, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 4716, 4717, 4718, 4719,
+ 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727,
+ 4728, 4729, 4730, 4731, 4732, 4733, 4734, 4735,
+ 3252, 4737, 4738, 4739, 4740, 4741, 4742, 4376,
+ 4744, 4377, 3133, 3134, 4379, 4379, 3137, 4380,
+ 3267, 4753, 4754, 4755, 4756, 4757, 4758, 4759,
+ 4760, 4761, 4762, 4763, 4764, 4765, 4766, 4767,
+ 4768, 4769, 4770, 4771, 4772, 4773, 4774, 4775,
+ 4776, 4777, 4778, 4779, 4780, 4781, 6561, 6562,
+ 6563, 12193, 6565, 6566, 4788, 4789, 4790, 3305,
+ 4772, 3305, 4794, 3305, 4796, 4797, 4798, 3305,
+ 4800, 32767, 0, 4802, 4803, 4804, 4805, 4806,
+ 4807, 4808, 4809, 4810, 4811, 4812, 4813, 4814,
+ 4815, 4816, 4817, 4818, 4819, 4820, 4821, 4822,
+ 4823, 4824, 4825, 4826, 4827, 4828, 13682, 4830,
+ 4932, 4832, 8067, 4834, 13693, 4836, 8073, 4838,
+ 4839, 13703, 4841, 4842, 4843, 4844, 4845, 4846,
+ 4847, 4848, 4849, 4850, 4851, 4852, 1186, 4854,
+ 4855, 4856, 4857, 3968, 4859, 4860, 12190, -907,
+ -907, -907, -907, -907, -907, 4868, 4869, 4870,
+ 4871, 32767, 4872, 4873, 32767, 32767, 4874, 32767,
+ 1233, 4875, 4876, 32767, 32767, 4877, 4878, 4879,
+ 8126, 32767, 4881, 4882, 4883, 6698, 6699, 7945,
+ 6701, 4888, 9388, 7949, 4891, 4892, 32767, 4893,
+ 32767, 4894, 4895, 4896, 4897, 4898, 4899, 3517,
+ 3518, 3519, 3520, 3521, 4904, 3523, 3524, 3525,
+ 3526, 3527, 3528, 3529, 3530, 3531, 3532, 3533,
+ 3534, 3535, 3536, 3537, 3538, 3539, 3540, 3541,
+ 3542, 3543, 4926, 8206, 4928, 8209, 4930, 4931,
+ 4932, 4933, 4934, 4935, 8222, 4937, 4938, 8225,
+ 8226, 4941, 4942, 4943, 0, 4945, 8230, 0,
+ 0, 4949, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, -127, -127, -127,
+ 7202, -127, -127, 0, -128, -128, -128, -128,
+ 0, 32767, -130, 4971, -129, 5613, 5614, 5615,
+ 4976, 5618, 32767, 5619, 5620, 5621, 4981, 5624,
+ 4983, 4984, 32767, 5630, 5631, -1986, -1986, -126,
+ -126, 5078, 4992, 5037, 5038, 5039, 5040, 5041,
+ 5086, 5087, 5088, 5089, -2239, 5091, 5092, 5093,
+ 5094, 5095, 5096, 5097, 5098, 5099, 5100, 0,
+ 5101, -640, -640, -640, 0, -641, -641, -641,
+ -641, -641, 0, -642, 0, 0, 32767, -645,
+ -645, 6973, 6974, 5115, 5116, -87, 0, -44,
+ -44, -44, -44, -44, -88, -88, -88, -88,
+ 7241, -88, -88, -88, -88, -88, -88, -88,
+ -88, -88, -88, -88, -88, 5654, 5655, 5656,
+ 5657, 5658, 5659, 5660, 5661, 5662, 5663, 5664,
+ 5665, 5666, 5667, 5668, 5669, -1948, -1948, -88,
+ -88, 5116, 5117, 5074, 5075, 5076, 5077, 5078,
+ 5123, 5124, 5125, 5126, -2202, 5128, 5129, 5130,
+ 5131, 5132, 5133, 5134, 5135, 5136, 5137, 5138,
+ 5139, -602, -602, -602, -602, -602, -602, -602,
+ -602, -602, -602, -602, -602, -602, -602, -602,
+ -602, 7016, 7017, 5158, 5159, -44, -44, 0,
+ 0, 0, 0, 0, -44, -44, -44, -44,
+ 7285, -44, -44, -44, -44, -44, -44, -44,
+ -44, -44, -44, -44, -44, 5698, 5699, 5700,
+ 5701, 5702, 5703, 5704, 5705, 5706, 5707, 5708,
+ 5709, 5710, 5711, 5712, 5713, -1904, -1904, -44,
+ -44, 5160, 5161, 5118, 5119, 5120, 5121, 5122,
+ 5167, 5168, 5169, 5170, -2158, 5172, 5173, 5174,
+ 5175, 5176, 5177, 5178, 5179, 5180, 5181, 5182,
+ 5183, -558, -558, -558, -558, -558, -558, -558,
+ -558, -558, -558, -558, -558, -558, -558, -558,
+ -558, 7060, 7061, 5202, 5203, 0, 0, 44,
+ 44, 44, 44, 44, 0, 0, 0, 0,
+ 7329, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5742, 5743, 5744,
+ 5745, 5746, 5747, 5748, 5749, 5750, 5751, 5752,
+ 5753, 5754, 5755, 5756, 5757, -1860, -1860, 0,
+ 0, 0, 0, 0, 6264, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -3389,
+ -3389, 5355, 5356, -3434, -3434, -3389, -3389, -3389,
+ -3389, 5363, 5364, -3434, -3434, -3389, -3389, -3389,
+ -3345, -3345, -3391, -3391, -3391, -3391, -3391, -3391,
+ -3391, 5331, 5332, 5333, 5334, 2027, 1983, 5337,
+ 5338, 5339, 5340, 18549, 15248, 15249, 11948, 11949,
+ 8648, 8649, 5348, 5349, 5350, 5351, 5352, -3391,
+ -3391, 5400, 5401, 5357, 5358, 5359, 5360, -3391,
+ -3391, 5408, 5409, 5365, 5366, 5367, 5324, 5325,
+ 5372, 5373, 5374, 5375, 5376, 5377, 5378, -3343,
+ -3343, -3343, -3343, -35, 10, -3343, -3343, -3343,
+ -3343, -16551, -13249, -13249, -9947, -9947, -6645, -6645,
+ -3343, -3343, -3343, -3343, -3343, 5401, 5402, -3388,
+ -3388, -3343, -3343, -3343, -3343, 5409, 5410, -3388,
+ -3388, -3343, -3343, -3343, -3299, -3299, -3345, -3345,
+ -3345, -3345, -3345, -3345, -3345, 5377, 5378, 5379,
+ 5380, 2073, 2029, 5383, 5384, 5385, 5386, 18595,
+ 15294, 15295, 11994, 11995, 8694, 8695, 5394, 5395,
+ 5396, 5397, 5398, -3345, -3345, 5446, 5447, 5403,
+ 5404, 5405, 5406, -3345, -3345, 5454, 5455, 5411,
+ 5412, 5413, 5414, 5415, 5416, 5417, 5418, 5419,
+ 5420, 5421, 5422, -3299, -3299, -3299, -3299, 9,
+ 54, -3299, -3299, -3299, -3299, -16507, -13205, -13205,
+ -9903, -9903, -6601, -6601, -3299, -3299, -3299, -3299,
+ -3299, 5445, 5446, -3344, -3344, -3299, -3299, -3299,
+ -3299, 5453, 5454, -3344, -3344, -3299, -3299, -3299,
+ -3299, -3299, -3299, -3299, -3299, -3299, -3299, -3299,
+ -3299, 5423, 5424, 5425, 5426, 2119, 2075, 5429,
+ 5430, 5431, 5432, 18641, 15340, 15341, 12040, 12041,
+ 8740, 8741, 5440, 5441, 5442, 5443, 5444, -3299,
+ -3299, 5492, 5493, 5449, 5450, 5451, 5452, -3299,
+ -3299, 5500, 5501, 5457, 2790, 2790, 2790, 2790,
+ -376, 2790, 2790, 5510, 2790, 5512, 12630, 5514,
+ 12632, 5516, 2218, 2219, 2220, -8382, -2292, 4825,
+ 2222, 5524, 2223, 12, 5527, 2224, 2225, 2226,
+ 2227, 2228, 2229, 2230, 2857, 2232, 2233, 5538,
+ 2234, 5540, 2235, 5542, 5543, 2236, -3299, -3299,
+ -3299, 5548, 5549, -3299, -3299, 2790, 2790, 2790,
+ 5555, 5556, 5557, 2790, 2790, 2790, 2790, 2790,
+ 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790,
+ 9083, 9084, 2790, 2790, 2790, 2790, 2790, 2790,
+ 2790, 2790, 2790, 2790, 2790, 2790, 3549, 7580,
+ 7581, 2790, 2790, 2790, 2790, 2790, 2790, 2790,
+ 2790, 5694, 5694, 2790, 2790, 5695, 5695, 1358,
+ 5603, 5694, 5694, 5694, -2343, 6401, 6402, -2388,
+ -2388, -2343, 4593, 4593, 3674, 7217, 7218, -1580,
+ -1580, -1535, -1535, 5451, 2888, -1489, -1535, -1535,
+ -1535, -1535, -1535, 5451, 5451, 3587, 7191, 7192,
+ 7193, 3886, 3842, 3843, 3844, -5932, 7203, 20412,
+ 5454, 5454, 5454, 9202, 9203, 9204, 9205, 9206,
+ 9207, 8436, 4682, -2304, -1529, 7262, -2553, -2553,
+ 7222, 7223, -2553, 32767, 32767, -219, 5344, -2555,
+ -2555, -840, -840, -840, -840, 1882, 2788, 2788,
+ -7823, -7778, 5675, 5676, 5677, 5678, 5679, -6828,
+ -848, -6056, -6056, 930, -2545, -6009, -6967, 3098,
+ -2545, -6054, -2545, 933, 2940, 3104, 5695, 5696,
+ 549, 5698, 5699, 5700, 5701, 5702, 5703, 5704,
+ 5705, 5706, 5707, 5708, 5709, 5710, 5711, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -1250, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 7502,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -1419, 32767, 32767,
+ 32767, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 4580, 4581, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 912,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -129, 32767, 32767, -131, -131,
+ 896, 0, 32767, 32767, 32767, -2616, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 0, 32767, 882,
+ 882, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -197,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 5757, 5758, 5759, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -4071, -4071, -12944, -4071, 32767,
+ -4072, -4072, -9647, 32767, 0, 0, 5401, 0,
+ 0, -4068, -4068, -4068, 0, -2329, -4067, 346,
+ -4068, -5246, 32767, 32767, -4575, -5503, -4069, -4069,
+ -4069, 32767, 32767, -4071, -4071, -950, 32767, -950,
+ 32767, -4073, 0, -4074, 32767, 0, 0, 0,
+ 0, 32767, 0, 0, 0, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 32767, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -4337, -2128, 0, 0, 0,
+ -8037, 707, -207, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 1760, 32767, -2024, 32767, 32767, 1761,
+ 1762, 1763, 1764, 1765, 1766, 10620, 1768, 1870,
+ 1770, 1374, 32767, 32767, 32767, -2908, -2952, 32767,
+ 32767, 1375, -3204, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 579, 32767, 32767, 32767, 32767, 32767, -3995,
+ -3995, -3995, 2962, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, -2645, 831, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 4613, 4614,
+ 32767, 32767, 0, 276, 32767, 0, 32767, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -4423, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 1377, 32767, 32767, 2963, 2964, 32767, 32767, 32767,
+ 32767, 32767, 32767, 349, 350, 32767, -531, -530,
+ 32767, 1378, 32767, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 32767, 0, 32767, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -187, -187, -187,
+ -187, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ -5344, -5344, 32767, 32767, 2965, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -5827,
+ -5827, -5827, -4802, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 0, 32767, 32767,
+ 0, 0, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 313, 314, 315, 316,
+ 317, 318, 319, 320, 321, 322, 323, 324,
+ 32767, 32767, -411, 1079, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -877,
+ 32767, 6064, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2966, 2967, 32767, 1382,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 2968, 32767, 32767, 32767, -9358,
+ 32767, -9314, -9314, -9314, 32767, 32767, 32767, 32767,
+ 32767, 32767, -768, 7132, 7133, 32767, 32767, 32767,
+ 32767, 2697, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, -1181, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -4100, 0, 9000,
+ 9001, 0, 0, 0, 0, 0, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -1245, 0,
+ 0, -1244, -1243, 0, -1242, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3268,
+ 0, 4651, 32767, 32767, 0, 4651, 0, 4652,
+ 0, 4653, 0, 4654, 0, 4655, 0, 4656,
+ 1389, 4656, 0, 4657, 0, 4658, 0, 0,
+ 4660, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 0, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 0, 0, 8233,
+ 32767, 0, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 4220, 4221, 0, 0, 0, 0, 0, 3305,
+ 0, 0, 3307, 3307, 3307, 3307, 0, 0,
+ 0, 3310, 1901, 0, 0, 0, 0, 0,
+ 0, -1319, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 7618, 7619, 7620,
+ 3, 3, 1863, 1863, 7067, 7068, 7025, 7026,
+ 7027, 7028, 7029, 7074, 7075, 7076, 7077, -251,
+ 7079, 7080, 7081, 7082, 7083, 7084, 7085, 7086,
+ 7087, 7088, 7089, 7090, 1349, 1349, 1349, 1349,
+ 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349,
+ 1349, 1349, 1349, 1349, 8967, 8968, 7109, 7110,
+ 1907, 1907, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 2989, 2990, 2991, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 1401, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 1402,
+ 2331, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 1449, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 1404, 32767, 1405, 32767,
+ 1406, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 1407, 32767, 32767, 32767, 32767, 32767,
+ 32767, 4588, 4589, 4590, 4591, 4592, 4593, 4594,
+ 4595, 4596, 4597, 4598, 32767, 32767, 1410, 32767,
+ 32767, 32767, 32767, 1411, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 7002, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 6168, -3267, 1415, 1416, 1417, -3264, -3264, -3264,
+ -3264, -3264, -3264, 1424, 1425, -4183, 32767, 1426,
+ 1427, 5988, 1429, -3258, 32767, -3259, -3259, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 1390, 32767,
+ 32767, 32767, -3268, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 1434, 32767, 32767, 32767,
+ 32767, 1435, 32767, 32767, 32767, 32767, 1436, 32767,
+ 32767, 32767, 32767, 1437, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 1438, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -3218, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 7380, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 360, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 1440,
+ 32767, 1441, -4485, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 10733, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4484,
+ 32767, 4531, 4532, 4533, 32767, 32767, -2452, -587,
+ 32767, 32767, 32767, 32767, 32767, -842, -842, 3659,
+ -4200, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 928, 32767,
+ 929, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 930,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 4601, 4602, 32767,
+ 32767, 32767, 32767, 32767, 32767, 2071, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 1444, 32767, 32767, 32767,
+ 0, 32767, 0, 32767, 32767, -2192, 1107, 1107,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 3005, 3006, 3007, 3008,
+ 32767, 32767, 32767, 931, -340, 32767, 32767, 32767,
+ -1180, 5937, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 4608, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 3010, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 4609, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 2880,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -11659, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -5062, 32767, 32767, -5109, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -4115, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4639,
+ 32767, 32767, 32767, 4640, 4641, 4642, 17851, 32767,
+ 32767, 32767, 11248, 7947, 7948, 4647, 4648, 4649,
+ 4650, 4651, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 4611, 8686, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 1270, 4897, 4898, 4899, 11619, 4901, 4902, 32767,
+ 4903, 4904, 4905, 4906, 4907, 9707, -879, 1269,
+ 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
+ 1269, 32767, 32767, 4920, 4921, 3637, -2451, -1436,
+ 4925, 4926, 32767, 7319, 7320, 32767, 7321, 7322,
+ 7323, 7324, 5319, 32767, 32767, 32767, -1435, -1434,
+ 32767, -7726, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 384, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 20109, 16808, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3219, 3220, 6903, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -5258, -5258, -5258, -5258, -5258, -5258, -5258, 0,
+ 0, 0, 0, 0, 0, -1825, -1825, -1825,
+ -15033, -11731, -11731, -8429, 0, 0, 0, -1828,
+ -1828, -1828, -1828, -1828, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -2079, -3817, 596, -4844, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 32767, 32767, 0,
+ 0, 0, 0, 0, 0, 0, 8757, 8758,
+ 8759, 8760, 8761, 8762, 8763, 8764, 8765, 8766,
+ 45, 45, 45, 45, 3353, 3398, 45, 45,
+ 45, 45, -13163, -9861, -9861, -6559, -6559, -3257,
+ -3257, 45, 45, 45, 45, 45, 8789, 8790,
+ 0, 0, 45, 45, 45, 45, 8797, 8798,
+ 0, 0, 45, 2713, 2714, 2715, 2716, 5883,
+ 2718, 2719, 0, 2721, 0, -7117, 0, -7117,
+ 0, 3299, 3299, 3299, 13902, 7813, 697, 3301,
+ 0, 3302, 5514, 0, 3304, 3304, 3304, 3304,
+ 3304, 3304, 3304, 2678, 3304, 3304, 0, 3305,
+ 0, 3306, 0, 0, 3308, 8844, 8845, 8846,
+ 0, 0, 8849, 8850, 2762, 2763, 2764, 0,
+ 0, 0, 2768, 2769, 2770, 2771, 2772, 2773,
+ 2774, 2775, 2776, 2777, 2778, 2779, 2780, -3512,
+ -3512, 2783, 2784, 2785, 2786, 2787, 2788, 2789,
+ 2790, 2791, 2792, 2793, 2794, 2036, -1994, -1994,
+ 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2805,
+ -98, -97, 2808, 2809, -95, -94, 4244, 0,
+ -90, -89, -88, 7950, -793, -793, 7998, 7999,
+ 7955, 1020, 1021, 1941, -1601, -1601, 7198, 7199,
+ 7155, 7156, 171, 2735, 7113, 7160, 7161, 7162,
+ 7163, 7164, 179, 180, 2045, -1558, -1558, -1558,
+ 1750, 1795, 1795, 1795, 11572, -1562, -14770, 189,
+ 190, 191, -3556, -3556, -3556, -3556, -3556, -3556,
+ -2784, 971, 7958, 7184, -1606, 8210, 8211, -1563,
+ -1563, 8214, 8215, 9182, 5881, 319, 8219, 8220,
+ 6506, 6507, 6508, 6509, 3788, 2883, 2884, 13496,
+ 13452, 0, 0, 0, 0, 0, 12508, 6529,
+ 11738, 11739, 4754, 8230, 11695, 12654, 2590, 8234,
+ 11744, 8236, 4759, 2753, 2590, 0, 0, 5148,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 0, 0, 10878,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 1408,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5760, 0, 0, 0, 0, 0, 32767,
+ 0, 32767, 0, 0, 32767, 0, 0, 32767,
+ 0, 3520, 3521, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 1657, 1658, 1659, 1660, -5668, 1662, 1663, 1664,
+ 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672,
+ 1673, -4068, -4068, -4068, -4068, -4068, -4068, -4068,
+ -4068, -4068, -4068, -4068, -4068, -4068, -4068, -4068,
+ -4068, 3550, 3551, 1692, 3595, 3596, 3597, -3469,
+ -3469, -3469, -3469, -3469, -3513, -3513, -3513, -3513,
+ 3816, -3513, -3513, -3513, -3513, 3612, 3613, 3614,
+ 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3622,
+ 3623, 3624, 3625, 3626, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+ -6719, 0, 0, -6678, 0, 0, 0, 0,
+ 0, -4799, 5788, 3641, 3642, 3643, 3644, 3645,
+ 3646, 3647, 3648, 3649, 3650, 3651, 3652, 0,
+ 0, 1285, 7374, 6360, 0, 0, 3660, -2392,
+ -2392, 3663, -2392, -2392, -2392, -2392, -386, -2392,
+ -2555, 3671, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 32767, 32767, 32767,
+ 32767, 6685, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 4638, 4639, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 4600, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1383, 32767, 32767,
+ 32767, 32767, 1384, -1883, 1386, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 4640, 32767,
+ 32767, 32767, 1387, -3268, 0, -3266, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1391, 32767, 32767,
+ 32767, 32767, 1392, 1393, 1394, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -5630, -5630, -5630, -5630, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -5690, -5690,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 1515, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, -9707, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 0, 32767, 32767, 4641, 4642, 32767,
+ 32767, 32767, 32767, 32767, 4630, 32767, 32767, 32767,
+ -4214, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 1852, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 1452, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -8247, -4945, 32767,
+ -7282, 32767, 32767, 32767, -1875, -1875, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 1453, 1454, 1455, -642, 0, 0,
+ 0, 5051, 5008, 5009, 5010, 5011, 5012, 5057,
+ 5058, 5059, 0, 0, 0, 0, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -3509,
+ 32767, 32767, 32767, 32767, -3513, -3513, -3513, -3513,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4466,
+ 32767, -4467, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -4482, 32767, 32767, -3605, -3605, -3605,
+ -3605, -3605, -3605, -3605, 32767, 32767, -3607, -12460,
+ -3607, -3708, -3607, -6841, 32767, 32767, -3609, -6845,
+ 32767, -3610, -12473, -3610, -3610, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 4646, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 1456, 1457, 0, 32767, 0, 32767, 0,
+ 32767, 0, 32767, 0, 32767, 32767, 32767, 0,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 1857, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -2932, 0, 32767,
+ 0, 32767, 0, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1416, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32767, 0, 0, 0, 1459,
+ 1460, 1461, 1462, 1463, 1464, 1465, 1466, 0,
+ 0, 1467, 0, 1489, 0, 1491, 1492, 1493,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 5489,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 3616, 1469, 1470, 1471, 1472, 1473,
+ 1474, 1475, 1476, 1477, 1478, 1479, 1480, -2172,
+ 1496, -888, 5201, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 115, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 116,
+ 117, 361, 32767, 362, 32767, 363, 32767, 364,
+ 32767, 365, 32767, 32767, 32767, 366, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1484,
+ 0, 0, 0, 0, 0, 0, 367, 0,
+ 368, 1613, 1613, 369, 370, 1613, 371, 1485,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -1779, -1779, -1779,
+ -7408, -1779, -1779, 0, 0, 0, 1486, 20,
+ 1488, 0, 1490, 0, 0, 0, 1494, 0,
+ 32767, 4801, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -8853, 0, -101,
+ 0, -3234, 0, -8858, 0, -3236, 0, 0,
+ -8863, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3667, 0, 0,
+ 0, 0, 890, 0, 0, -7329, 5769, 5770,
+ 5771, 5772, 5773, 5774, 0, 0, 0, 0,
+ 32767, 0, 0, 32767, 32767, 0, 32767, 32767,
+ 0, 0, 32767, 32767, 0, 0, 0, -3246,
+ 32767, 0, 0, 0, -1814, -1814, -3059, -1814,
+ 0, -4499, -3059, 0, 0, 32767, 0, 32767,
+ 0, 0, 0, 0, 0, 0, 1383, 0,
+ 1382, 1382, 1382, 0, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 0, -3279, 0, -3280, 0, 0, 0,
+ 0, 0, 0, -3286, 0, 0, -3286, -3286,
+ 0, 0, 0, 4944, 0, -3284, 4947, 4948,
+ 0, 4950, 4951, 4952, 4953, 4954, 4955, 4956,
+ 4957, 4958, 4959, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+ 32767, 32767, 0, 0, 0, 0, 32767, 32767,
+ 32767, 0, 0, 1500, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4650,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 6703,
+ 6704, 6705, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 13097, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, -3442, 1502, -3442, 32767,
+ 1504, 1505, -3443, 1507, 1508, 1509, 1510, 1511,
+ 1512, 1513, 1514, 1515, 1516, 32767, 1644, 1645,
+ 1646, -5682, 1648, 1649, 1523, 32767, 32767, 32767,
+ 32767, 1524, 32767, 32767, 32767, 32767, 32767, 32767,
+ -4090, 32767, 32767, 32767, -4093, -4093, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 1528, 1529, 1530, 32767, 1531, 1532, 1533,
+ 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541,
+ 32767, 1542, 1543, 1544, 1545, 1546, 1547, 1548,
+ 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556,
+ 1557, 1558, 1559, 32767, 1560, 1561, 1562, 1563,
+ 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571,
+ 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579,
+ 1580, 1581, 1582, 1583, 1584, 1585, 1586, -365,
+ -365, 32767, 32767, 32767, 32767, -413, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1588, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ -410, 1590, -2995, -2995, 1593, 1594, 1595, 1596,
+ 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604,
+ 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612,
+ 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620,
+ 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628,
+ 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636,
+ 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644,
+ 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652,
+ 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660,
+ 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668,
+ 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676,
+ 1677, 1678, 1679, 1680, 1681, 1682, 1683, 32767,
+ 1684, 1685, 1686, 1687, 1688, 32767, 372, 373,
+ 374, 375, 376, 377, 378, 379, 380, 381,
+ 382, 383, 0, 385, 386, 387, 388, 389,
+ 390, 391, 392, 393, 394, 395, 396, 397,
+ 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413,
+ 414, 415, 416, 417, 418, 419, 420, 421,
+ 422, 423, 424, 425, 426, 427, 428, 429,
+ 430, 431, 432, 433, 434, 435, 436, 437,
+ 438, 439, 440, 441, 442, 443, 444, 445,
+ 446, 447, 448, 449, 450, 451, 452, 453,
+ 454, 455, 456, 457, 458, 459, 460, 461,
+ -19647, -16345, 464, 465, 466, 467, 468, 469,
+ 470, 471, 472, 473, 474, 475, 476, 477,
+ -2741, -2741, -6423, 481, 482, 483, 484, 485,
+ 486, 487, 488, 489, 490, 491, 5750, 5751,
+ 5752, 5753, 5754, 5755, 5756, 499, 500, 501,
+ 502, 503, 504, 2330, 2331, 2332, 15541, 12240,
+ 12241, 8940, 512, 513, 514, 2343, 2344, 2345,
+ 2346, 2347, 520, 521, 522, 523, 524, 525,
+ 1689, 526, 32767, 32767, 32767, 32767, 527, 528,
+ 529, 530, 531, 532, 533, 534, 535, 536,
+ 537, 538, 539, 540, 541, 542, 543, 544,
+ 545, 546, 547, 548, 549, 550, 551, 552,
+ 553, 554, 555, 556, 557, 558, 559, 560,
+ 561, 562, 563, 564, 565, 566, 567, 568,
+ 569, 570, 571, 572, 573, 574, 575, 576,
+ 577, 578, 579, 580, 581, 582, 583, 584,
+ 585, 586, 587, 588, 589, 590, 591, 592,
+ 593, 2673, 4412, 0, 5441, 598, 599, 600,
+ 601, 602, 603, 604, 605, 606, 607, 608,
+ 609, 610, 611, 612, 613, 614, 615, 616,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 6706,
+ 6707, 6708, 6709, 3402, 3358, 6712, 6713, 6714,
+ 6715, 19924, 16623, 16624, 13323, 13324, 10023, 10024,
+ 6723, 6724, 6725, 6726, 6727, 32767, 32767, 6773,
+ 6774, 6730, 6731, 6732, 6733, 32767, 32767, 6779,
+ 6780, 6736, 4069, 4069, 4069, 4069, 903, 4069,
+ 4069, 6789, 4069, 6791, 13909, 6793, 13911, 6795,
+ 3497, 3498, 3499, -7103, -1013, 6104, 3501, 6803,
+ 3502, 1291, 672, -8578, -5276, -5276, -1974, -1974,
+ -1974, -1974, -1974, 6770, 6771, 0, 0, -1976,
+ -1976, -1976, -1976, 6776, 6777, 32767, 1725, -1978,
+ 690, 691, 692, 693, 3860, 695, 696, 32767,
+ 697, 32767, -9142, 32767, -9143, 0, 1272, 1272,
+ 1272, 11875, 5786, -1330, 1274, -2027, 1275, 3487,
+ -2027, 1277, 1277, 1277, 1277, 1277, 1277, 1277,
+ 1623, 1276, 2248, -2029, 2248, -2030, 2248, -2031,
+ -1059, 1276, 7784, 6812, 7785, 32767, 32767, 6813,
+ 6814, 726, 727, 728, -2036, -2036, -2036, 732,
+ 733, 734, 735, 736, 737, 738, 739, 740,
+ 741, 742, 743, 744, -5548, -5548, 747, 748,
+ 749, 750, 751, 752, 753, 754, 755, 756,
+ 757, 758, 0, -4030, -4030, 762, 763, 764,
+ 765, 766, 767, 768, 769, -2134, -2133, 772,
+ 773, -2131, -2130, 2208, 0, -2127, -2126, -2125,
+ 5913, -2830, -1915, 5960, 6876, 6832, -103, -102,
+ -101, -3643, -3643, 5156, -97, 5112, 5113, -1872,
+ 1604, 5069, 6028, 5116, 5117, 5118, 5119, -1866,
+ -1865, 0, -2697, 0, -298, -298, -253, -253,
+ -253, 9524, -2708, 32767, -1861, -1860, -1859, -5606,
+ -5606, -5606, -4709, -5607, -5607, -4835, -1080, 5907,
+ 5133, -3657, 7050, 6159, -3615, -2725, 7052, 0,
+ 32767, 3825, -1737, 6163, 32767, 4449, 4450, 4451,
+ 5338, 1730, 1711, 825, 12323, 12279, 32767, 32767,
+ 6990, 3689, 3690, 3691, 3692, 3693, -5050, -5050,
+ 1722, 1723, 3700, 32767, 32767, 1586, 0, -7565,
+ 0, 0, 1431, 1595, 260, -10927, 0, -2134,
+ -2178, -2177, 32767, 32767, 0, 0, 2211, 0,
+ 0, 0, -6402, 1800, -10148, -4058, 3059, -4058,
+ 0, -4057, 5372, -4056, -4056, -4056, 0, 453,
+ 0, 0, 0, 108, 456, 0, 3762, -514,
+ 0, 0, 0, 0, 459, 0, -5076, 0,
+ 0, 0, 0, 0, 0, 0, 0, 3773,
+ 3774, 3775, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 7288,
+ 0, 0, 0, 0, 0, 0, 0, 988,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32767, 0, 0, 3876, 3876,
+ 3876, 3876, 0, 3875, 3875, 3875, -462, 1747,
+ 3875, 3875, 3875, -4162, 4582, 3668, -4206, -5121,
+ -5076, 1860, 1860, 1860, 5403, 5404, -3394, 1860,
+ -3348, -3348, 3638, 163, -3301, -4259, -3346, 162,
+ -3347, -3347, 3639, 3639, 1775, 4473, 1777, 2076,
+ 2077, 2033, 2034, 2035, -7741, -7741, -8707, -5405,
+ 158, 0, 157, -2186, -5933, -5933, 0, -5934,
+ 6619, -5935, 0, 0, 0, 32767, 32767, 32767,
+ 5826, 32767, 32767, 32767, 32767, 6793, 32767, -2071,
+ 32767, 5829, 32767, 5830, 5831, 5832, 32767, 5833,
+ 5834, 32767, 5835, 32767, 32767, -4499, 0, 5837,
+ 0, 5838, 0, 5010, 0, 5840, 32767, 10263,
+ 199, 1786, 9352, 1788, 1789, 359, 196, 1532,
+ 12720, 1794, 3929, 3974, 3974, 3974, 13751, 13752,
+ 14719, -413, 5855, 13755, 5857, 8201, 0, 11949,
+ 5860, -1256, 5862, 1805, 5863, -3565, 5864, 5865,
+ 5866, 5867, 5868, 5869, 5870, 5871, 5872, 5873,
+ 32767, 5874, 5875, 5876, 5877, 5878, 5879, 5880,
+ 5881, 5882, 5883, 14757, 5885, 5886, 5887, 5888,
+ 11464, 5890, 1818, 1819, -3581, 1821, 1822, 5891,
+ 5892, 5893, 1826, 4156, 5895, 5896, 5897, 7076,
+ 32767, 5899, 6406, 7335, 5902, 5903, 5904, 5905,
+ 5906, 5907, 5908, 2788, 5910, 2789, 5912, 5913,
+ 5914, 5915, 32767, 1842, 1843, 1844, 1845, 32767,
+ 1846, 1847, 1848, 32767, 1849, 1850, 1851, 1852,
+ 1853, 1854, 1855, 32767, 1856, 1857, 1858, 1859,
+ 1860, 1861, 32767, 32767, 32767, 32767, 1862, 1863,
+ 1864, 1865, 1866, 32767, 32767, 32767, 32767, 32767,
+ 32767, 1867, 1868, 1869, 1870, 1871, 1872, 1873,
+ 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881,
+ 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889,
+ 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897,
+ 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905,
+ 1906, 6244, 4036, 1909, 1910, 1911, 9949, 1206,
+ 2121, 9996, 10912, 10868, 3933, 3934, 3935, 393,
+ 393, 9192, 3939, 9148, 9149, 2164, 5640, 9105,
+ 10064, 0, 5644, 9154, 5646, 2169, 163, 0,
+ 1336, 12524, 3734, 3734, 3779, 3779, 3779, 13556,
+ 13557, 14524, 11223, 5661, 13561, 5663, 8007, 11755,
+ 11756, 11757, 11758, 11759, 11760, 10989, 7235, 249,
+ 1024, 9815, 0, 0, 9775, 9776, 0, 0,
+ -966, 2336, 7899, 0, 0, 32767, 0, 0,
+ 0, 32767, 0, 0, 32767, 0, 32767, 32767,
+ 10335, 32767, 0, 32767, 0, 32767, 829, 3475,
+ 0, -3464, -4422, 5643, 0, -3509, 0, 3478,
+ 5485, 5649, 4314, -6873, 1918, 1919, 1875, 1876,
+ 1877, -7899, -7899, -8865, -5563, 0, -7899, 0,
+ -2343, -6090, -6090, 0, 7117, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -8873, 0,
+ 0, 0, 0, -5575, 0, 0, 3168, 32767,
+ 32767, 0, 0, 0, 0, 0, 1738, 0,
+ 0, 0, -1178, 0, 0, -506, -1434, 0,
+ 0, 0, 0, 0, 0, 0, 3121, 0,
+ 3122, 0, 0, 0, 0, 0, 4202, 17411,
+ 0, 14110, 10809, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -5629, 0, 0, 3169, 32767,
+ 32767, 3125, 32767, 3126, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -8912, 32767, -5611, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -5621,
+ -5621, 3131, 3132, -5666, 0, 0, -5623, -5623,
+ 0, 0, -5625, -5625, 32767, 32767, 32767, 32767,
+ 32767, 32767, 3092, 3093, 32767, 32767, -259, 3095,
+ 32767, 32767, 3096, 16305, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 10260, 3144,
+ 10262, 3146, 9428, 0, 9429, 10269, 10270, 9434,
+ 9435, 0, 32767, 32767, 32767, 0, 0, 0,
+ 0, 0, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32767, 32767, 0, 9472, 9473,
+ 0, 0, 0, 9479, 32767, 32767, 32767, 32767,
+ 32767, 32767, -2417, 8186, 2097, -5019, 32767, 0,
+ 32767, 32767, 32767, 32767, -2418, -2418, -2418, -2418,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 52, 52, 52, 52, 52,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 1920, 1921, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 171, 172, 173, 174, 175, 176, 177, 178,
+ 179, -5562, -5562, -5562, -5562, -5562, -5562, -5562,
+ -5562, -5562, -5562, -5562, -5562, -5562, -5562, -5562,
+ -5562, 2056, 2057, 198, 2101, 2102, 2103, -4963,
+ 32767, 32767, 32767, 32767, 32767, 0, 32767, 32767,
+ 32767, 5916, 5917, 5918, 5919, 5920, 5921, 5922,
+ 5923, 5924, 8857, 5926, 32767, 32767, 0, 32767,
+ 0, 5927, 5928, 5929, 5930, 5931, 5932, 5933,
+ 5934, 5935, 5936, 5937, 5938, 5939, 5940, 4525,
+ 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949,
+ 5950, 5951, 5952, 5953, 5954, 5955, 5956, 5957,
+ 32767, 5958, 5959, 5960, 4502, 4502, 4502, 4502,
+ 4502, 4502, 4502, 4502, 5969, 5970, 4504, 5972,
+ 4484, 5974, 4484, 4484, 4484, 5978, 5979, 5980,
+ 5981, 5982, 5983, 5984, 5985, 5986, 5987, 5988,
+ 5989, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2285, 32767, 32767, 32767,
+ 32767, 32767, 32767, 5990, 5991, 5992, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 5993, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 7023, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 1922, 1923, 1924, 1925,
+ 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933,
+ 1934, 1935, 1200, 2690, 1200, 1939, 1940, 1941,
+ 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949,
+ 1950, 1951, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, -7665, 1188,
+ 1087, 1188, -2046, 1188, -7670, 1188, -2048, 1188,
+ 1188, -7675, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1996, 1997,
+ -2409, -2453, 1184, 2074, 1184, 1184, -6145, 6953,
+ 6954, 6955, 6956, 0, 2010, 2011, 2012, 2013,
+ 2014, 2015, 1178, 1178, 2018, 2019, 2020, 2021,
+ 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029,
+ 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037,
+ 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045,
+ 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053,
+ 2054, 2055, 2056, 2057, 2058, 2059, 2060, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 1315, 1272, 1273, 1274, 32767, 1275,
+ 1320, 1321, 1322, 1323, -6005, 1325, 1326, 1327,
+ 32767, 1328, 1329, 1330, 32767, 1331, 1332, 1333,
+ 1334, -4407, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 6052, 0, 0, 6055,
+ 0, 0, 0, 0, 2006, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1850, 1851, 1852,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4054,
+ -4054, -4054, -4054, 4690, 4691, -4099, -4099, -4054,
+ -4054, -4054, -4054, 4698, 4699, -4099, 32767, -4055,
+ -4055, -4055, -4011, -4011, -4057, -4057, -4057, -4057,
+ -4057, -4057, -4057, 4665, 4666, 4667, 4668, 1361,
+ 1317, 4671, 4672, 4673, 4674, 17883, 14582, 14583,
+ 11282, 11283, 7982, 7983, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32767, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1952, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1999, 0, 4586,
+ 4587, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 0, 0, 0,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 5204, 5161, 5162, 5163, 5164, 5165, 5210, 5211,
+ 5212, 5213, -2115, 5215, 5216, 5217, 5218, 5219,
+ 5220, 5221, 5222, 5223, 5224, 5225, 5226, -515,
+ -515, -515, -515, -515, -515, -515, -515, -515,
+ -515, -515, -515, -515, -515, -515, -515, 7103,
+ 7104, 5245, 5246, 5247, 5248, 5249, -1014, 5251,
+ 5252, 5253, 5254, 5255, 5256, 5257, 5258, 5259,
+ 5260, 8650, 8651, -92, -92, 8699, 8700, 8656,
+ 8657, 8658, 8659, -92, -92, 8707, 8708, 8664,
+ 8665, 8666, 8623, 8624, 8671, 8672, 8673, 8674,
+ 8675, 8676, 8677, -44, -44, -44, -44, 3264,
+ 3309, -44, -44, -44, -44, -13252, -9950, -9950,
+ -6648, -6648, -3346, -3346, -44, -44, -44, -44,
+ -44, 8700, 8701, -89, -89, -44, -44, -44,
+ -44, 8708, 8709, -89, -89, -44, -44, -44,
+ 0, 0, -46, -46, -46, -46, -46, -46,
+ -46, 8676, 8677, 8678, 8679, 5372, 5328, 8682,
+ 8683, 8684, 8685, 21894, 18593, 18594, 15293, 15294,
+ 11993, 11994, 8693, 8694, 8695, 8696, 8697, -46,
+ -46, 8745, 8746, 8702, 8703, 8704, 8705, -46,
+ -46, 8753, 8754, 8710, 8711, 8712, 8713, 8714,
+ 8715, 8716, 8717, 8718, 8719, 8720, 8721, 0,
+ 0, 0, 0, 3308, 3353, 0, 0, 0,
+ 0, -13208, -9906, -9906, -6604, -6604, -3302, -3302,
+ 0, 0, 0, 0, 0, 8744, 8745, -45,
+ -45, 0, 0, 0, 0, 8752, 8753, -45,
+ -45, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 8722, 8723, 8724,
+ 8725, 5418, 5374, 8728, 8729, 8730, 8731, 21940,
+ 18639, 18640, 15339, 15340, 12039, 12040, 8739, 8740,
+ 8741, 8742, 8743, 0, 0, 8791, 8792, 8748,
+ 8749, 8750, 8751, 0, 0, 8799, 8800, 8756,
+ 6089, 6089, 6089, 6089, 2923, 6089, 6089, 8809,
+ 6089, 8811, 15929, 8813, 15931, 8815, 5517, 5518,
+ 5519, -5083, 1007, 8124, 5521, 8823, 5522, 3311,
+ 8826, 5523, 5524, 5525, 5526, 5527, 5528, 5529,
+ 6156, 5531, 5532, 8837, 5533, 8839, 5534, 8841,
+ 8842, 5535, 0, 0, 0, 8847, 8848, 0,
+ 0, 0, 13200, 9900, 9900, 6600, 6600, 3300,
+ 3300, 0, 0, 0, -10416, -3299, 0, 0,
+ 0, 10603, 32767, 32767, 0, 32767, 0, 32767,
+ 32767, 0, 0, 0, 0, 0, 0, 0,
+ -626, 0, 0, 32767, 0, 32767, 0, 32767,
+ 32767, 0, 0, 32767, 32767, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -1382, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -2928, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, -4090, 1652, 1653, 32767, 32767, 2061, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 1610, 32767, 32767, 6150, 6151, 6152, 411,
+ 411, 411, 411, 411, 411, 411, 411, 411,
+ 411, 411, 411, 411, 411, 411, 411, 8029,
+ 8030, 6171, 6172, 969, 969, 1013, 1013, 1013,
+ 1013, 1013, 969, 969, 969, 969, 8298, 969,
+ 969, 969, 969, 969, 969, 969, 969, 969,
+ 969, 969, 969, 6711, 6712, 6713, 6714, 6715,
+ 6716, 6717, 6718, 6719, 6720, 6721, 6722, 6723,
+ 6724, 6725, 6726, -891, -891, 969, 969, 6173,
+ 6174, 6131, 6132, 6133, 6134, 6135, 6180, 6181,
+ 6182, 6183, -1145, 6185, 6186, 6187, 6188, 6189,
+ 6190, 6191, 6192, 6193, 6194, 6195, 6196, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 8073,
+ 8074, 6215, 6216, 1013, 1013, 1057, 1057, 1057,
+ 1057, 1057, 1013, 1013, 1013, 1013, 8342, 1013,
+ 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
+ 1013, 1013, 1013, 6755, 6756, 6757, 6758, 6759,
+ 6760, 6761, 6762, 6763, 6764, 6765, 6766, 6767,
+ 6768, 6769, 6770, -847, -847, 1013, 1013, 6217,
+ 6218, 6175, 6176, 6177, 6178, 6179, 6224, 6225,
+ 6226, 6227, -1101, 6229, 6230, 6231, 6232, 6233,
+ 6234, 6235, 6236, 6237, 6238, 6239, 6240, 499,
+ 499, 499, 499, 499, 499, 499, 499, 499,
+ 499, 499, 499, 499, 499, 499, 499, 8117,
+ 8118, 6259, 6260, 6261, 6262, 6263, 0, 6265,
+ 6266, 6267, 6268, 6269, 6270, 6271, 6272, 6273,
+ 6274, 9664, 9665, 922, 922, 9713, 9714, 9670,
+ 9671, 9672, 9673, 922, 922, 9721, 9722, 9678,
+ 9679, 9680, 9637, 9638, 9685, 9686, 9687, 9688,
+ 9689, 9690, 9691, 970, 970, 970, 970, 4278,
+ 4323, 970, 970, 970, 970, -12238, -8936, -8936,
+ -5634, -5634, -2332, -2332, -2332, -2332, -2332, 6412,
+ 6413, -2377, -2377, -2332, -2332, -2332, -2332, 6420,
+ 6421, -2377, -2377, -2332, -2332, -2332, -2288, -2288,
+ -2334, -2334, -2334, -2334, -2334, -2334, -2334, 6388,
+ 6389, 6390, 6391, 3084, 3040, 6394, 6395, 6396,
+ 6397, 19606, 16305, 16306, 13005, 13006, 9705, 9706,
+ 6405, 6406, 6407, 6408, 6409, -2334, -2334, 6457,
+ 6458, 6414, 6415, 6416, 6417, -2334, -2334, 6465,
+ 6466, 6422, 6423, 6424, 6381, 6382, 6429, 6430,
+ 6431, 6432, 6433, 6434, 6435, -2286, -2286, -2286,
+ -2286, 1022, 1067, -2286, -2286, -2286, -2286, -15494,
+ -12192, -12192, -8890, -8890, -5588, -5588, -2286, -2286,
+ -2286, -2286, -2286, 6458, 6459, -2331, -2331, -2286,
+ -2286, -2286, -2286, 6466, 6467, -2331, -2331, -2286,
+ -2286, -2286, -2286, -2286, -2286, -2286, -2286, -2286,
+ -2286, -2286, -2286, 6436, 6437, 6438, 6439, 3132,
+ 3088, 6442, 6443, 6444, 6445, 19654, 16353, 16354,
+ 13053, 13054, 9753, 9754, 6453, 6454, 6455, 6456,
+ 6457, -2286, -2286, 6505, 6506, 6462, 6463, 6464,
+ 6465, -2286, -2286, 6513, 6514, 6470, 6471, 6472,
+ 6473, 6474, 6475, 6476, 6477, 6478, 6479, 6480,
+ 6481, -2240, -2240, -2240, -2240, 1068, 1113, -2240,
+ -2240, -2240, -2240, -15448, -12146, -12146, -8844, -8844,
+ -5542, -5542, -2240, -2240, -2240, -2240, -2240, 6504,
+ 6505, -2285, -2285, -2240, -2240, -2240, -2240, 6512,
+ 6513, -2285, -2285, -2240, 428, 429, 430, 431,
+ 3598, 433, 434, -2285, 436, -2285, -9402, -2285,
+ -9402, -2285, 1014, 1014, 1014, 11617, 5528, -1588,
+ 1016, -2285, 1017, 3229, -2285, 1019, 1019, 1019,
+ 1019, 1019, 1019, 1019, 393, 1019, 1019, -2285,
+ 1020, -2285, 1021, -2285, -2285, 1023, 6559, 6560,
+ 6561, -2285, -2285, 6564, 6565, 6566, -6633, -3332,
+ -3331, -30, -29, 3272, 3273, 3274, 13691, 6575,
+ 3277, 3278, 3279, -7323, -1233, 5884, 3281, 6583,
+ 3282, 1071, 6586, 3283, 3284, 3285, 3286, 3287,
+ 3288, 3289, 3916, 3291, 3292, 6597, 3293, 6599,
+ 3294, 6601, 6602, 3295, 3296, 32767, 32767, 32767,
+ 3297, 3298, 3299, 3300, 3301, 3302, 3303, 3304,
+ 3305, 3306, 3307, 3308, 3309, 3310, 3311, 3312,
+ 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320,
+ 3321, 3322, 3323, 3324, 3325, 3326, 3327, 3328,
+ 3329, 3330, 3331, 3332, 3333, 3334, 3335, 3336,
+ 3337, 3338, 3339, 3340, 3341, 3342, 3343, 3344,
+ 3345, 3346, 3347, 3348, 3349, 3350, 3351, 3352,
+ 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360,
+ 3361, 3362, 3363, 3364, 32767, 32767, 3365, 3366,
+ 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374,
+ 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382,
+ 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390,
+ 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398,
+ 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406,
+ 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414,
+ 3415, 3416, 3417, 3418, 3419, 3420, 4803, 3422,
+ 3423, 3424, 3425, 3426, 3427, 3428, 3429, 3430,
+ 3431, 3432, 3433, 3434, 3435, 3436, 3437, 3438,
+ 3439, 3440, 3441, 3442, 3443, 3444, 3445, 3446,
+ 3447, 3448, 3449, 3450, 3451, 3452, 3453, 3454,
+ 3455, 3456, 3457, 3458, 3459, 3460, 3461, 3462,
+ 3463, 3464, 3465, 3466, 3467, 3468, 3469, 3470,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 3471,
+ 3472, 3473, 3474, 3475, -7402, 3477, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 3478, 3479, 2072, 3481, 3482, 32767,
+ 32767, 32767, 32767, 32767, 3483, 3484, 3485, 3486,
+ 3487, 3488, 3489, 3490, 3491, 3492, 3493, 3494,
+ 3495, 3496, 3497, 3498, 3499, 3500, 3501, 3502,
+ 3503, 3504, 3505, 3506, 3507, 3508, 32767, 3509,
+ 3510, 3511, 3512, 3513, 32767, 3514, 32767, 3515,
+ 3516, 32767, 3517, 3518, 32767, 3519, 0, 0,
+ 3522, 3523, 3524, 3525, 3526, 3527, 3528, 3529,
+ 3530, 3531, 3532, 3533, 3534, 3535, 3536, 3537,
+ 3538, 3539, 3540, 3541, 3542, 3543, 3544, 3545,
+ 3546, 3547, 3548, 3549, 3550, 3551, 3552, 3553,
+ 3554, 3555, 3556, 3557, 3558, 1902, 1902, 1902,
+ 1902, 9231, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 7644, 7645,
+ 7646, 7647, 7648, 7649, 7650, 7651, 7652, 7653,
+ 7654, 7655, 7656, 7657, 7658, 7659, 42, 42,
+ 1902, 0, 0, 0, 7067, 7068, 7069, 7070,
+ 7071, 7116, 7117, 7118, 7119, -209, 7121, 7122,
+ 7123, 7124, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3627, 3628, 3629, 10349, 3631, 3632,
+ 10311, 3634, 3635, 3636, 3637, 3638, 8438, -2148,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3653, 3654, 2370, -3718,
+ -2703, 3658, 3659, 0, 6053, 6054, 0, 6056,
+ 6057, 6058, 6059, 4054, 6061, 6225, 0, 0,
+ 3672, 0, 0, 1531, 1531, 1531, 1531, 1531,
+ 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531,
+ 1531, 1531, 9149, 9150, 7291, 7292, 7293, 7294,
+ 7295, 1032, 7297, 7298, 7299, 7300, 7301, 7302,
+ 7303, 7304, 0, 7307, 10697, 10698, 1955, 1955,
+ 10746, 10747, 10703, 3768, 3769, 4689, 1952, 1952,
+ 10751, 10752, 10708, 10709, 3724, 6288, 10666, 10713,
+ 10714, 10715, 10716, 10717, 3732, 3733, 1996, 1996,
+ 1996, 1996, 5304, 5349, 5349, 3741, 1994, 1994,
+ -11214, 3745, 3746, 3747, 0, 0, 0, 0,
+ 0, 0, 0, 3755, 10742, 10743, 1953, 1953,
+ 1998, 1998, 1998, 11775, 11776, 12743, 9442, 3880,
+ 11780, 3882, 6226, 9974, 9975, 9976, 9977, 9978,
+ 9979, 9208, 5454, -1532, -757, 8034, -1781, -1781,
+ 7994, 7995, -1781, -1781, -2747, 555, 6118, -1781,
+ -1781, -66, -66, -66, -66, 2656, 1742, -6132,
+ -7047, -7002, -66, -66, -66, 3477, 3478, -5320,
+ -66, -5274, -5274, 1712, -1763, -5227, -6185, 3880,
+ -1763, -5272, -1763, 1715, 3722, 3886, 2551, -8636,
+ 155, 156, 112, 113, 114, -9662, -9662, -10628,
+ -7326, -1763, -9662, -1763, -4106, -7853, -7853, -7853,
+ -7853, -7853, -7853, -7081, -3326, 3661, 2887, -5903,
+ 3913, 3914, -5860, -5860, 3917, 3918, 4885, 1584,
+ -3978, 3922, 3923, 2209, 2210, 2211, 2212, -509,
+ 406, 8281, 9197, 9153, 2218, 2219, 2220, -1322,
+ -1322, 7477, 2224, 7433, 7434, 449, 3925, 7390,
+ 8349, -1715, 3929, 7439, 3931, 454, -1552, -1715,
+ -379, 10809, 2019, 2019, 2064, 2064, 2064, 11841,
+ 11842, 12809, 9508, 3946, 11846, 3948, 6292, 10040,
+ 10041, 10042, 10043, 10044, 10045, 9274, 5520, -1466,
+ -691, 8100, -1715, -1715, 8060, 8061, -1715, -1715,
+ -2681, 621, 6184, -1715, -1715, 0, 0, 0,
+ 0, 2722, 1808, -6066, -6981, -6936, 0, 0,
+ 0, 3543, 3544, -5254, 0, -5208, -5208, 1778,
+ -1697, -5161, -6119, 3946, -1697, -5206, -1697, 1781,
+ 3788, 3952, 2617, -8570, 221, 222, 178, 179,
+ 180, -9596, -9596, -10562, -7260, -1697, -9596, -1697,
+ -4040, -7787, -7787, -7787, -7787, -7787, -7787, -7015,
+ -3260, 3727, 2953, -5837, 3979, 3980, -5794, -5794,
+ 3983, 3984, 4951, 1650, -3912, 3988, 3989, 2275,
+ 2276, 2277, 2278, -443, 472, 8347, 9263, 9219,
+ 2284, 2285, 2286, -1256, -1256, 7543, 2290, 7499,
+ 7500, 515, 3991, 7456, 8415, -1649, 3995, 7505,
+ 3997, 520, -1486, -1649, -313, 10875, 2085, 2085,
+ 2130, 2130, 2130, 11907, 11908, 12875, 9574, 4012,
+ 11912, 4014, 6358, 10106, 10107, 4018, -3098, 4020,
+ 4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028,
+ 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036,
+ 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044,
+ 12918, 4046, 4047, 4048, 4049, 9625, 4051, 4052,
+ 885, 32767, 32767, 4054, 4055, 4056, 4057, 4058,
+ 2321, 4060, 4061, 4062, 5241, 4064, 4065, 4572,
+ 5501, 4068, 4069, 4070, 4071, 4072, 4073, 4074,
+ 954, 4076, 955, 4078, 4079, 4080, 4081, 4082,
+ -119, -13327, 4085, -10024, -6722, 4088, 4089, 4090,
+ 4091, 4092, 4093, 4094, 4095, 4096, 4097, 4098,
+ 4099, 4100, 4101, 4102, 4103, 9733, 4105, 4106,
+ 938, 32767, 32767, 32767, 32767, 32767, 2328, 32767,
+ 2329, 2330, 2331, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 870, 32767, 871, 32767,
+ 872, 32767, 873, 32767, 874, 32767, 875, 32767,
+ 876, 9729, 9730, 979, 979, 9778, 4113, 4114,
+ 9738, 9739, 4117, 4118, 9744, 9745, 32767, 883,
+ 32767, 884, 32767, 32767, 32767, 32767, 32767, 32767,
+ 885, 886, 32767, 887, 888, 32767, 889, 0,
+ 32767, 891, 8221, 4122, -4877, -4877, 4125, 4126,
+ 4127, 4128, 4129, 4130, 32767, 32767, 32767, 32767,
+ 32767, 32767, 4131, 4132, 4133, 4134, 4135, 4136,
+ 4137, 4138, 4139, 4140, 4141, 4142, 4143, 4144,
+ 4145, 4146, 4147, 5393, 4149, 4150, 5395, 5395,
+ 4153, 5396, 4155, 4156, 4157, 4158, 4159, 4160,
+ 4161, 4162, 4163, 4164, 897, 4166, -484, 32767,
+ 899, 4168, -482, 4170, -481, 4172, -480, 4174,
+ -479, 4176, -478, 4178, -477, 32767, -476, 4181,
+ -475, 4183, -474, 4185, 4186, -473, 4188, 4189,
+ 4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197,
+ 4198, 913, 4199, 4200, 4201, 4202, 916, 917,
+ 32767, 918, 4203, 4204, -4028, 921, 4206, 32767,
+ 4207, 4208, 4209, 4210, 4211, 4212, 4213, 4214,
+ 4215, 4216, 4217, 4218, 4219, 0, 0, 4222,
+ 4223, 4224, 4225, 4226, 922, 4228, 4229, 923,
+ 924, 925, 926, 4234, 4235, 4236, 927, 2337,
+ 4239, 4240, 4241, 4242, 4243, 4244, 5564, 4246,
+ 4247, 4248, 4249, 4250, 4251, 4252, 4253, 4254,
+ 4255, 4256, 4257, 4258, 4259, 4260, 4261, 4262,
+ 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270,
+ 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278,
+ 4279, 4280, 4281, 4282, 4283, 4284, 4285, 4286,
+ 4287, 4288, -3329, -3329, -3329, 4289, 4290, 2431,
+ 2432, -2771, -2771, -2727, -2727, -2727, -2727, -2727,
+ -2771, -2771, -2771, -2771, 4558, -2771, -2771, -2771,
+ -2771, -2771, -2771, -2771, -2771, -2771, -2771, -2771,
+ -2771, 2971, 2972, 2973, 2974, 2975, 2976, 2977,
+ 2978, 2979, 2980, 2981, 2982, 2983, 2984, 2985,
+ 2986, -4631, -4631, -2771, -2771, 2433, 2434, 2391,
+ 2392, 2393, 2394, 2395, 2440, 2441, 2442, 2443,
+ -4885, 2445, 2446, 2447, 2448, 2449, 2450, 2451,
+ 2452, 2453, 2454, 2455, 2456, -3285, -3285, -3285,
+ -3285, -3285, -3285, -3285, -3285, -3285, -3285, -3285,
+ -3285, -3285, -3285, -3285, -3285, 4333, 4334, 2475,
+ 4378, 4379, 4380, -2686, -2686, -2686, -2686, -2686,
+ -2730, -2730, -2730, -2730, 4599, -2730, -2730, -2730,
+ -2730, 4395, 4396, 4397, 4398, 4399, 4400, 4401,
+ 4402, 4403, 4404, 4405, 4406, 4407, 4408, 4409,
+ 4410, 4411, 4412, 4413, 4414, 4415, 4416, 4417,
+ 4418, 4419, 4420, 4421, 4422, 4423, 4424, 4425,
+ 4426, 4427, 4428, 4429, 4430, 4431, 4432, 4433,
+ 4434, 4435, 4436, 4437, 4438, 4439, 4440, 4441,
+ 4442, 816, 816, 816, -5903, 816, 816, -5862,
+ 816, 816, 816, 816, 816, -3983, 6604, 4457,
+ 4458, 4459, 4460, 4461, 4462, 4463, 4464, 4465,
+ 4466, 4467, 4468, 816, 816, 2101, 8190, 7176,
+ 816, 816, 4476, -1576, -1576, 4479, -1576, -1576,
+ -1576, -1576, 430, -1576, -1739, 4487, 4488, 817,
+ 4490, 4491, 2961, 2962, 2963, 2964, 2965, 2966,
+ 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974,
+ 2975, -4642, -4642, -2782, -2782, -2782, -2782, -2782,
+ 3482, -2782, -2782, -2782, -2782, -2782, -2782, -2782,
+ -2782, 4523, -2783, -6172, -6172, 2572, 2573, -6217,
+ -6217, -6172, -6172, -6172, -6172, 2580, 2581, -6217,
+ -6217, -6172, -6172, -6172, -6128, -6128, -6174, -6174,
+ -6174, -6174, -6174, -6174, -6174, 2548, 2549, 2550,
+ 2551, -756, -800, 2554, 2555, 2556, 2557, 15766,
+ 12465, 12466, 32767, 4553, 4554, 4555, 4556, 4557,
+ 4558, 4559, 2561, -6182, -6182, 2609, 2610, 2566,
+ 2567, 2568, 2569, -6182, -6182, 2617, 2618, 2574,
+ 2575, 2576, 2533, 2534, 2581, 2582, 2583, 2584,
+ 2585, 2586, 2587, -6134, -6134, -6134, -6134, -2826,
+ -2781, -6134, -6134, -6134, -6134, -19342, -16040, -16040,
+ -12738, -12738, -9436, -9436, -6134, -6134, -6134, -6134,
+ -6134, 32767, 2610, -6180, -6180, -6135, -6135, -6135,
+ -6135, 2617, 2618, -6180, -6180, -6135, -6135, -6135,
+ -6135, -6135, -6135, -6135, -6135, -6135, -6135, -6135,
+ -6135, 2587, 2588, 2589, 2590, -717, -761, 2593,
+ 2594, 2595, 2596, 15805, 12504, 12505, 9204, 9205,
+ 5904, 5905, 2604, 2605, 2606, 2607, 2608, -6135,
+ -6135, 2656, 2657, 2613, 2614, 2615, 2616, -6135,
+ -6135, 2664, 2665, 2621, 2622, 2623, 2624, 2625,
+ 2626, 2627, 2628, 2629, 2630, 2631, 2632, -6089,
+ -6089, -6089, -6089, -2781, -2736, -6089, -6089, -6089,
+ -6089, -19297, -15995, -15995, -12693, -12693, -9391, -9391,
+ -6089, -6089, -6089, -6089, -6089, 2655, 2656, -6134,
+ -6134, -6089, -6089, -6089, -6089, 2663, 2664, -6134,
+ -6134, -6089, -3421, -3420, -3419, -3418, -251, -3416,
+ -3415, -6134, -3413, -6134, -13251, -6134, -13251, -6134,
+ -2835, -2835, -2835, 7768, 1679, -5437, -2833, -6134,
+ -2832, -620, 0, 9251, 5950, 5951, 2650, 2651,
+ 2652, 2653, 2654, -6089, -6089, 2702, 2703, 2659,
+ 2660, 2661, 2662, -6089, -6089, 2710, 2711, 2667,
+ 0, 0, 0, 0, -3166, 0, 0, 2720,
+ 0, 2722, 9840, 2724, 9842, 2726, -572, -571,
+ -570, -11172, -5082, 2035, -568, 2734, -567, -2778,
+ 2737, -566, -565, -564, -563, -562, -561, -560,
+ 67, -558, -557, 2748, -556, 2750, -555, 2752,
+ 2753, -554, -6089, -6089, -6089, 2758, 2759, -6089,
+ -6089, 0, 0, 0, 2765, 2766, 2767, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6293, 6294, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,
+ };
+
+ const unsigned char *k = (const unsigned char *) key;
+ size_t keylen = 4;
+ uint32 a = 0;
+ uint32 b = 1;
+
+ while (keylen--)
+ {
+ unsigned char c = *k++;
+
+ a = a * 257 + c;
+ b = b * 8191 + c;
+ }
+ return h[a % 13209] + h[b % 13209];
+}
+
+/* Hash lookup information for decomposition */
+static const pg_unicode_decompinfo UnicodeDecompInfo = {
+ UnicodeDecompMain,
+ DecompMain_hash_func,
+ 6604
+};
diff --git a/src/tools/pgindent/exclude_file_patterns b/src/tools/pgindent/exclude_file_patterns
index 86bdd9d6dc..f7e771a7e6 100644
--- a/src/tools/pgindent/exclude_file_patterns
+++ b/src/tools/pgindent/exclude_file_patterns
@@ -18,9 +18,10 @@ src/backend/utils/fmgrprotos\.h$
# they match pgindent style, they'd look worse not better, so exclude them.
kwlist_d\.h$
#
-# This is generated by the scripts from src/common/unicode/. It uses
+# These are generated by the scripts from src/common/unicode/. They use
# hash functions generated by PerfectHash.pm whose format looks worse with
# pgindent.
+src/include/common/unicode_norm_table\.h$
src/include/common/unicode_normprops_table\.h$
#
# Exclude ecpg test files to avoid breaking the ecpg regression tests
--
2.22.0
John Naylor <john.naylor@enterprisedb.com> writes:
Some other considerations:
- As I alluded above, this adds ~26kB to libpq because of SASLPrep. Since
the decomp array was reordered to optimize linear search, it can no longer
be used for binary search. It's possible to build two arrays, one for
frontend and one for backend, but that's additional complexity. We could
also force frontend to do a linear search all the time, but that seems
foolish. I haven't checked if it's possible to exclude the hash from
backend's libpq.
IIUC, the only place libpq uses this is to process a password-sized string
or two during connection establishment. It seems quite silly to add
26kB in order to make that faster. Seems like a nice speedup on the
backend side, but I'd vote for keeping the frontend as-is.
regards, tom lane
On Wed, Oct 14, 2020 at 01:06:40PM -0400, Tom Lane wrote:
John Naylor <john.naylor@enterprisedb.com> writes:
Some other considerations:
- As I alluded above, this adds ~26kB to libpq because of SASLPrep. Since
the decomp array was reordered to optimize linear search, it can no longer
be used for binary search. It's possible to build two arrays, one for
frontend and one for backend, but that's additional complexity. We could
also force frontend to do a linear search all the time, but that seems
foolish. I haven't checked if it's possible to exclude the hash from
backend's libpq.IIUC, the only place libpq uses this is to process a password-sized string
or two during connection establishment. It seems quite silly to add
26kB in order to make that faster. Seems like a nice speedup on the
backend side, but I'd vote for keeping the frontend as-is.
Agreed. Let's only use the perfect hash in the backend. It would be
nice to avoid an extra generation of the decomposition table for that,
and a table ordered by codepoints is easier to look at. How much do
you think would be the performance impact if we don't use for the
linear search the most-optimized decomposition table?
--
Michael
On Wed, Oct 14, 2020 at 8:25 PM Michael Paquier <michael@paquier.xyz> wrote:
On Wed, Oct 14, 2020 at 01:06:40PM -0400, Tom Lane wrote:
IIUC, the only place libpq uses this is to process a password-sized
string
or two during connection establishment. It seems quite silly to add
26kB in order to make that faster. Seems like a nice speedup on the
backend side, but I'd vote for keeping the frontend as-is.Agreed. Let's only use the perfect hash in the backend. It would be
nice to avoid an extra generation of the decomposition table for that,
and a table ordered by codepoints is easier to look at. How much do
you think would be the performance impact if we don't use for the
linear search the most-optimized decomposition table?
With those points in mind and thinking more broadly, I'd like to try harder
on recomposition. Even several times faster, recomposition is still orders
of magnitude slower than ICU, as measured by Daniel Verite [1]/messages/by-id/2c5e8df9-43b8-41fa-88e6-286e8634f00a@manitou-mail.org. I only did
it this way because I couldn't think of how to do the inverse lookup with a
hash. But I think if we constructed the hash key like
pg_hton64((code1 << 32) | code2)
and on the Perl side do something like
pack('N',$code1) . pack('N',$code2)
that might work. Or something that looks more like the C side. And make
sure to use the lowest codepoint for the result. That way, we can still
keep the large decomp array ordered, making it easier to keep the current
implementation in the front end, and hopefully getting even better
performance in the backend.
[1]: /messages/by-id/2c5e8df9-43b8-41fa-88e6-286e8634f00a@manitou-mail.org
/messages/by-id/2c5e8df9-43b8-41fa-88e6-286e8634f00a@manitou-mail.org
--
John Naylor
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
John Naylor <john.naylor@enterprisedb.com> writes:
With those points in mind and thinking more broadly, I'd like to try harder
on recomposition. Even several times faster, recomposition is still orders
of magnitude slower than ICU, as measured by Daniel Verite [1].
Huh. Has anyone looked into how they do it?
regards, tom lane
At Wed, 14 Oct 2020 23:06:28 -0400, Tom Lane <tgl@sss.pgh.pa.us> wrote in
John Naylor <john.naylor@enterprisedb.com> writes:
With those points in mind and thinking more broadly, I'd like to try harder
on recomposition. Even several times faster, recomposition is still orders
of magnitude slower than ICU, as measured by Daniel Verite [1].Huh. Has anyone looked into how they do it?
I'm not sure it is that, but it would be that.. It uses separate
tables for decomposition and composition pointed from a trie?
That table is used after trying algorithmic decomposition/composition
for, for example, Hangul. I didn't look it any fruther but just for
information, icu4c/source/common/normalizer2impl.cpp seems doing that.
For example icu4c/srouce/common/norm2_nfc_data.h defines the static data.
icu4c/source/common/normalier2impl.h:244 points a design documentation
of normalization.
http://site.icu-project.org/design/normalization/custom
Old and New Implementation Details
The old normalization data format (unorm.icu, ca. 2001..2009) uses
three data structures for normalization: A trie for looking up 32-bit
values for every code point, a 16-bit-unit array with decompositions
and some other data, and a composition table (16-bit-unit array,
linear search list per starter). The data is combined for all 4
standard normalization forms: NFC, NFD, NFKC and NFKD.
regards.
--
Kyotaro Horiguchi
NTT Open Source Software Center
On Thu, Oct 15, 2020 at 1:30 AM Kyotaro Horiguchi <horikyota.ntt@gmail.com>
wrote:
At Wed, 14 Oct 2020 23:06:28 -0400, Tom Lane <tgl@sss.pgh.pa.us> wrote in
John Naylor <john.naylor@enterprisedb.com> writes:
With those points in mind and thinking more broadly, I'd like to try
harder
on recomposition. Even several times faster, recomposition is still
orders
of magnitude slower than ICU, as measured by Daniel Verite [1].
Huh. Has anyone looked into how they do it?
I'm not sure it is that, but it would be that.. It uses separate
tables for decomposition and composition pointed from a trie?
I think I've seen a trie recommended somewhere, maybe the official website.
That said, I was able to get the hash working for recomposition (split into
a separate patch, and both of them now leave frontend alone), and I'm
pleased to say it's 50-75x faster than linear search in simple tests. I'd
be curious how it compares to ICU now. Perhaps Daniel Verite would be
interested in testing again? (CC'd)
select count(normalize(t, NFC)) from (
select md5(i::text) as t from
generate_series(1,100000) as i
) s;
master patch
18800ms 257ms
select count(normalize(t, NFC)) from (
select repeat(U&'\00E4\00C5\0958\00F4\1EBF\3300\1FE2\3316\2465\322D', i % 3
+ 1) as t from
generate_series(1,100000) as i
) s;
master patch
13000ms 254ms
--
John Naylor
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
Attachments:
v2-0001-Speed-up-unicode-decomposition.patchapplication/x-patch; name=v2-0001-Speed-up-unicode-decomposition.patchDownload
From 6bbddb72852b18803ccf258e026242630c5db674 Mon Sep 17 00:00:00 2001
From: John Naylor <john.naylor@2ndquadrant.com>
Date: Thu, 15 Oct 2020 12:44:28 -0400
Subject: [PATCH v2 1/2] Speed up unicode decomposition
Replace binary search in the backend with a perfect hash function.
This takes up 26kB additional bytes, so leave out of the frontend
since decomposition there is thus far only used on password-length
strings.
---
.../unicode/generate-unicode_norm_table.pl | 52 +-
src/common/unicode_norm.c | 57 +-
src/include/common/unicode_norm_table.h | 1693 +++++++++++++++++
src/tools/pgindent/exclude_file_patterns | 3 +-
4 files changed, 1781 insertions(+), 24 deletions(-)
diff --git a/src/common/unicode/generate-unicode_norm_table.pl b/src/common/unicode/generate-unicode_norm_table.pl
index 7ce15e1a03..05eec2bf21 100644
--- a/src/common/unicode/generate-unicode_norm_table.pl
+++ b/src/common/unicode/generate-unicode_norm_table.pl
@@ -10,6 +10,10 @@
use strict;
use warnings;
+use FindBin;
+use lib "$FindBin::RealBin/../../tools/";
+use PerfectHash;
+
my $output_file = "unicode_norm_table.h";
my $FH;
@@ -96,6 +100,17 @@ typedef struct
* decomposition itself if DECOMP_INLINE */
} pg_unicode_decomposition;
+/* Typedef for perfect hash functions */
+typedef int (*cp_hash_func) (const void *key);
+
+/* Information for lookups with perfect hash functions */
+typedef struct
+{
+ const pg_unicode_decomposition *decomps;
+ cp_hash_func hash;
+ int num_decomps;
+} pg_unicode_decompinfo;
+
#define DECOMP_NO_COMPOSE 0x80 /* don't use for re-composition */
#define DECOMP_INLINE 0x40 /* decomposition is stored inline in
* dec_index */
@@ -113,6 +128,7 @@ HEADER
my $decomp_index = 0;
my $decomp_string = "";
+my @dec_cp_packed;
my $last_code = $characters[-1]->{code};
foreach my $char (@characters)
@@ -121,6 +137,9 @@ foreach my $char (@characters)
my $class = $char->{class};
my $decomp = $char->{decomp};
+ # Save the code point bytes as a string in network order.
+ push @dec_cp_packed, pack('N', hex($char->{code}));
+
# The character decomposition mapping field in UnicodeData.txt is a list
# of unicode codepoints, separated by space. But it can be prefixed with
# so-called compatibility formatting tag, like "<compat>", or "<font>".
@@ -163,7 +182,7 @@ foreach my $char (@characters)
{
foreach my $lcode (@composition_exclusion_codes)
{
- if ($lcode eq $char->{code})
+ if ($lcode eq $code)
{
$flags .= " | DECOMP_NO_COMPOSE";
$comment = "in exclusion list";
@@ -206,18 +225,8 @@ foreach my $char (@characters)
# Print a comma after all items except the last one.
print $OUTPUT "," unless ($code eq $last_code);
- if ($comment ne "")
- {
-
- # If the line is wide already, indent the comment with one tab,
- # otherwise with two. This is to make the output match the way
- # pgindent would mangle it. (This is quite hacky. To do this
- # properly, we should actually track how long the line is so far,
- # but this works for now.)
- print $OUTPUT "\t" if ($decomp_index < 10);
- print $OUTPUT "\t/* $comment */" if ($comment ne "");
- }
+ print $OUTPUT "\t/* $comment */" if ($comment ne "");
print $OUTPUT "\n";
}
print $OUTPUT "\n};\n\n";
@@ -231,4 +240,23 @@ $decomp_string
};
HEADER
+# Emit the definition of the decomp hash function.
+my $dec_funcname = 'Decomp_hash_func';
+my $dec_func = PerfectHash::generate_hash_function(\@dec_cp_packed,
+ $dec_funcname, fixed_key_length => 4);
+print $OUTPUT "\n/* Perfect hash function for decomposition */\n";
+print $OUTPUT "static $dec_func\n";
+
+# Emit the structure that wraps the hash lookup information into
+# one variable.
+print $OUTPUT <<HEADER;
+/* Hash lookup information for decomposition */
+static const pg_unicode_decompinfo UnicodeDecompInfo =
+{
+ UnicodeDecompMain,
+ $dec_funcname,
+ $num_characters
+};
+HEADER
+
close $OUTPUT;
diff --git a/src/common/unicode_norm.c b/src/common/unicode_norm.c
index 4bb6a0f587..ee12aa6789 100644
--- a/src/common/unicode_norm.c
+++ b/src/common/unicode_norm.c
@@ -44,6 +44,42 @@
#define NCOUNT VCOUNT * TCOUNT
#define SCOUNT LCOUNT * NCOUNT
+/*
+ * Get the entry corresponding to code in the decomposition lookup table.
+ */
+#ifndef FRONTEND
+
+static const pg_unicode_decomposition *
+get_code_entry(pg_wchar code)
+{
+ int h;
+ uint32 hashkey;
+ pg_unicode_decompinfo decompinfo = UnicodeDecompInfo;
+
+ /*
+ * Compute the hash function. The hash key is the codepoint with the bytes
+ * in network order.
+ */
+ hashkey = pg_hton32(code);
+ h = decompinfo.hash(&hashkey);
+
+ /* An out-of-range result implies no match */
+ if (h < 0 || h >= decompinfo.num_decomps)
+ return NULL;
+
+ /*
+ * Since it's a perfect hash, we need only match to the specific codepoint
+ * it identifies.
+ */
+ if (code != decompinfo.decomps[h].codepoint)
+ return NULL;
+
+ /* Success! */
+ return &decompinfo.decomps[h];
+}
+
+#else
+
/* comparison routine for bsearch() of decomposition lookup table. */
static int
conv_compare(const void *p1, const void *p2)
@@ -56,10 +92,7 @@ conv_compare(const void *p1, const void *p2)
return (v1 > v2) ? 1 : ((v1 == v2) ? 0 : -1);
}
-/*
- * Get the entry corresponding to code in the decomposition lookup table.
- */
-static pg_unicode_decomposition *
+static const pg_unicode_decomposition *
get_code_entry(pg_wchar code)
{
return bsearch(&(code),
@@ -69,6 +102,8 @@ get_code_entry(pg_wchar code)
conv_compare);
}
+#endif /* !FRONTEND */
+
/*
* Given a decomposition entry looked up earlier, get the decomposed
* characters.
@@ -77,7 +112,7 @@ get_code_entry(pg_wchar code)
* is only valid until next call to this function!
*/
static const pg_wchar *
-get_code_decomposition(pg_unicode_decomposition *entry, int *dec_size)
+get_code_decomposition(const pg_unicode_decomposition *entry, int *dec_size)
{
static pg_wchar x;
@@ -104,7 +139,7 @@ get_code_decomposition(pg_unicode_decomposition *entry, int *dec_size)
static int
get_decomposed_size(pg_wchar code, bool compat)
{
- pg_unicode_decomposition *entry;
+ const pg_unicode_decomposition *entry;
int size = 0;
int i;
const uint32 *decomp;
@@ -231,7 +266,7 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
static void
decompose_code(pg_wchar code, bool compat, pg_wchar **result, int *current)
{
- pg_unicode_decomposition *entry;
+ const pg_unicode_decomposition *entry;
int i;
const uint32 *decomp;
int dec_size;
@@ -358,8 +393,8 @@ unicode_normalize(UnicodeNormalizationForm form, const pg_wchar *input)
pg_wchar prev = decomp_chars[count - 1];
pg_wchar next = decomp_chars[count];
pg_wchar tmp;
- pg_unicode_decomposition *prevEntry = get_code_entry(prev);
- pg_unicode_decomposition *nextEntry = get_code_entry(next);
+ const pg_unicode_decomposition *prevEntry = get_code_entry(prev);
+ const pg_unicode_decomposition *nextEntry = get_code_entry(next);
/*
* If no entries are found, the character used is either an Hangul
@@ -417,7 +452,7 @@ unicode_normalize(UnicodeNormalizationForm form, const pg_wchar *input)
for (count = 1; count < decomp_size; count++)
{
pg_wchar ch = decomp_chars[count];
- pg_unicode_decomposition *ch_entry = get_code_entry(ch);
+ const pg_unicode_decomposition *ch_entry = get_code_entry(ch);
int ch_class = (ch_entry == NULL) ? 0 : ch_entry->comb_class;
pg_wchar composite;
@@ -458,7 +493,7 @@ unicode_normalize(UnicodeNormalizationForm form, const pg_wchar *input)
static uint8
get_canonical_class(pg_wchar ch)
{
- pg_unicode_decomposition *entry = get_code_entry(ch);
+ const pg_unicode_decomposition *entry = get_code_entry(ch);
if (!entry)
return 0;
diff --git a/src/include/common/unicode_norm_table.h b/src/include/common/unicode_norm_table.h
index 96d43b893c..25cf16f47e 100644
--- a/src/include/common/unicode_norm_table.h
+++ b/src/include/common/unicode_norm_table.h
@@ -25,6 +25,17 @@ typedef struct
* decomposition itself if DECOMP_INLINE */
} pg_unicode_decomposition;
+/* Typedef for perfect hash functions */
+typedef int (*cp_hash_func) (const void *key);
+
+/* Information for lookups with perfect hash functions */
+typedef struct
+{
+ const pg_unicode_decomposition *decomps;
+ cp_hash_func hash;
+ int num_decomps;
+} pg_unicode_decompinfo;
+
#define DECOMP_NO_COMPOSE 0x80 /* don't use for re-composition */
#define DECOMP_INLINE 0x40 /* decomposition is stored inline in
* dec_index */
@@ -8935,3 +8946,1685 @@ static const uint32 UnicodeDecomp_codepoints[5092] =
/* 5090 */ 0x2A291,
/* 5091 */ 0x2A600
};
+
+/* Perfect hash function for decomposition */
+static int
+Decomp_hash_func(const void *key)
+{
+ static const int16 h[13209] = {
+ 0, 1515, 4744, 4745, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3890, 3890, 0, 0,
+ 3891, 3891, -2046, 2800, 3890, 3890, 3890, -4396,
+ 4361, 4362, -4441, -4441, -4396, 1773, 1773, 1773,
+ 4372, 4373, -4438, -4438, -4393, -4393, 2619, 17,
+ -4347, -4393, -4393, -4393, -4393, -4393, 2619, 2619,
+ 1560, 4346, 4347, 4348, 1917, 1873, 1874, 1875,
+ -7856, 4358, 17619, 2622, 2622, 2622, 6357, 6358,
+ 6359, 6360, 6361, 6362, 6363, 2622, -4390, -4390,
+ 4414, -5356, -5356, 4374, 4375, -5356, -5356, -6335,
+ -3020, 2511, -5356, -5356, -3583, -3583, -3583, -3583,
+ -995, 0, 0, -9799, -9754, 2874, 2875, 2876,
+ 2877, 2878, -9830, -3591, -9756, -9756, -2744, -5346,
+ -9710, -9756, 342, -5346, -9756, -5346, -2743, -449,
+ 348, 2894, 2895, -2853, 2897, 2898, 2899, 2900,
+ 2901, 2902, 2903, 2904, 2905, 2906, 2907, 2908,
+ 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916,
+ 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924,
+ 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932,
+ 2933, 2934, 32767, 32767, 32767, 32767, 32767, 32767,
+ -8721, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 1, 32767, 48, 32767, 32767, 32767, 32767, 49,
+ 32767, 32767, -8687, -8687, -6255, -6210, 32767, 32767,
+ -8689, -8689, -21949, 32767, -18635, -15320, -15320, 32767,
+ -12006, -8691, -8691, -8691, -8691, -8691, 32767, 66,
+ -8737, -8737, -8692, -8692, -8692, -8692, 73, 74,
+ 32767, -8738, -8693, -8693, -8693, -8693, -8693, 32767,
+ 32767, -8695, -8695, -8695, -8695, -8695, 32767, 32767,
+ 40, 41, -2390, -2434, 44, 45, 32767, 46,
+ 13307, 9993, 9994, 6680, 6681, 3367, 3368, 54,
+ 0, 55, 56, 57, -8699, -8699, 105, 32767,
+ 32767, 61, 62, 63, -8701, -8701, 32767, 111,
+ 32767, 67, 68, 69, 70, 1890, 3687, -1272,
+ 3690, 75, 76, 77, 78, 79, 80, 81,
+ 82, 32767, 32767, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 32767,
+ 32767, 103, 104, 105, 106, 107, 108, 109,
+ -8660, -8660, 32767, -8661, -8661, -8661, -8661, -8661,
+ -8661, 32767, 73, 74, 75, 76, -2355, -2399,
+ 79, 80, 32767, 32767, 13341, 10027, 10028, 6714,
+ 6715, 3401, 3402, 32767, 32767, 88, 89, 90,
+ -8666, -8666, 138, 32767, 32767, 94, 95, 96,
+ -8668, -8668, 144, 145, 101, -2553, -2553, -2553,
+ -2553, -4983, -2553, -2553, 154, -2553, 156, 32767,
+ 32767, 6114, 158, -3153, -3152, -3151, -12891, -6888,
+ -931, -3149, 166, -3148, -4728, 169, -3147, -3146,
+ -3145, -3144, -3143, -3142, -3141, -2543, -3139, -3138,
+ 180, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 3314,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 3660, 3661, 2131, 2132, 2133, 2134, 2135,
+ 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143,
+ 2144, 2145, -5472, -5472, -3612, -3612, -3612, -3612,
+ -3612, 2652, -3612, -3612, -3612, -3612, -3612, -3612,
+ -3612, -3612, 3693, -3613, -7015, -7015, 1742, 1743,
+ -7060, -7060, -7015, -846, -846, -846, 1753, 1754,
+ -7057, -7057, -7012, -7012, 0, -2602, -6966, -7012,
+ -7012, -7012, -7012, -7012, 0, 0, 1725, 1726,
+ 1727, 1728, -703, -747, -746, 0, 1735, 1736,
+ 14997, 0, 0, 0, 3735, 3736, 3737, 3738,
+ 3739, 3740, 3741, 0, -7012, -7012, 1792, 1793,
+ 1749, 1750, 1751, -7980, -7980, -8959, -5644, -113,
+ -7980, -113, -2382, -6116, -6116, -6116, -6116, -6116,
+ -6116, -6116, -2374, 4639, 4640, -4163, 5608, 5609,
+ -4120, -4120, 5612, 5613, 6593, 3279, -2251, 5617,
+ 5618, 3846, 3847, 3848, 3849, 1262, 1262, 10066,
+ 10067, 10023, 3855, 3856, 3857, 1259, 1259, 10071,
+ 3861, 10027, 10028, 3017, 5620, 9985, 10032, -65,
+ 5624, 10035, 5626, 3024, 731, -65, 1298, 12530,
+ 3727, 3727, 3772, 3772, 3772, 13504, 13505, 14485,
+ 11171, 5641, 13509, 5643, 7913, 11648, 11649, 11650,
+ 11651, 11652, 11653, 11654, 7913, 901, 901, 9705,
+ -65, -65, 9665, 9666, -65, -65, -1044, 2271,
+ 7802, -65, -65, 1708, 1708, 1708, 1708, 4296,
+ 4297, -4506, -4506, -4461, 1708, 1708, 1708, 4307,
+ 4308, -4503, 1708, -4457, -4457, 2555, -47, -4411,
+ -4457, 5641, -47, -4457, -47, 2556, 4850, 5647,
+ 4285, -6946, 1858, 1859, 1815, 1816, 1817, -7914,
+ -7914, -8893, -5578, -47, -7914, -47, -2316, -6050,
+ -6050, -6050, -6050, -6050, -6050, -6050, -2308, 4705,
+ 4706, -4097, 5674, 5675, -4054, -4054, 5678, 5679,
+ 6659, 3345, -2185, 5683, 5684, 3912, 3913, 3914,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -3083, -3083, 232, 287, 233, 233,
+ 233, 8990, 8991, 32767, 32767, 3668, 32767, 3667,
+ 3667, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 208, 208, 208, 208, 208, 208,
+ 32767, 32767, 206, 206, 206, 206, 206, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 304, 305, -1274, 307, 308,
+ 309, 6753, -1374, 10488, 4486, -1470, 4488, 316,
+ 4489, -5607, 4490, 4491, 4492, 322, 760, 324,
+ 325, 326, 166, 763, 329, -2553, 765, 332,
+ 333, 334, 335, 772, 337, 6310, 339, 340,
+ 341, 342, 343, 344, 345, 346, -2542, -2542,
+ -2542, 350, 351, 352, 353, 354, 355, 356,
+ 357, 358, 359, 360, 361, 362, -6008, 364,
+ 365, 366, 367, 368, 369, 370, 254, 372,
+ 373, 374, 375, 376, 377, 378, 379, 380,
+ 381, 382, 32767, 383, 384, -3606, -3605, -3604,
+ -3603, 389, -3600, -3599, -3598, 2340, -1238, -3595,
+ -3594, -3593, 4694, -4062, -4062, 4742, 4743, 4699,
+ -1469, -1468, -1467, -4065, -4065, 4747, -1463, 4703,
+ 4704, -2307, 296, 32767, 0, 32767, 32767, 4708,
+ -1376, -1376, -1376, 32767, 32767, -1246, 506, 506,
+ 0, -1559, 32767, 32767, 32767, 32767, 32767, 305,
+ 419, 308, 2578, 6313, 6314, 424, 32767, -6030,
+ 32767, 426, 427, 428, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 32767, 0,
+ 32767, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 32767, 429, -5407, 431,
+ -5406, 433, -3601, 435, 32767, -3751, 32767, 32767,
+ 32767, 32767, -3755, 32767, 32767, 32767, 32767, 0,
+ 32767, 32767, 32767, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 436, -11425, -5422,
+ 535, -5422, 535, -5422, 4675, -5421, -5421, -5421,
+ -5421, -5421, 4681, 0, 0, 0, 4682, 4683,
+ 4684, 4685, 4686, 4687, 0, 0, 32767, 32767,
+ 0, 0, -5684, 0, 4688, 4689, 4690, 4691,
+ 4692, 4693, 4694, 4695, -1257, -1257, 4696, -5441,
+ -5441, 4699, 4700, 4701, -5443, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 454, 0, 32767, 456,
+ 32767, 32767, 0, 457, 32767, 32767, 32767, 0,
+ 458, 459, 460, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 4703, 4704, 4705, 4706, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 4655, 4656, 4657, 4658,
+ 4659, 4712, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 462, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 463, 464, 32767, 465,
+ 32767, 32767, 32767, 466, 32767, 32767, 32767, 32767,
+ 467, 468, 469, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 3011, 3011, 3011,
+ 3011, 3011, 3011, 3011, 32767, 32767, 32767, 32767,
+ 32767, 32767, 470, 471, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 472,
+ 473, 474, 475, 476, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 4713, 4714, 4715, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 477, 478, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 479, 480, 481, 482,
+ 32767, 32767, 483, 484, 32767, 32767, 485, 486,
+ 487, 488, 489, 490, 32767, 32767, 491, 492,
+ 493, 494, 495, 496, 32767, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 665, -255, 667, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 693, 694, 695, 696,
+ 697, 698, 699, 700, 701, 702, 703, 704,
+ 705, 706, 707, 708, 709, 710, 711, 712,
+ 7183, 714, -1580, 716, 2547, 718, 7194, 720,
+ 2553, 722, 723, 7204, 725, 726, 727, 728,
+ 729, 730, 731, 732, 733, 734, 735, 736,
+ 0, 0, 8114, 8159, 745, -1535, 747, 748,
+ 8161, -5019, -5019, -5019, -5019, 1938, 0, 0,
+ 0, 0, 0, 0, 767, 768, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 32767, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, -2875, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -2884, -2884,
+ -2884, -2884, -2884, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -4271, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -2884, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -2884, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -2884, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -2884, 32767, -2885, 32767, -2886, -2886,
+ 32767, -2887, -2887, 32767, -2888, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 563, 564,
+ 565, 566, 567, 568, 569, 570, 571, 572,
+ 573, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 574, 575, 576, 577, 578, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, -294, -294, -294, -3047, 583, 584, 585,
+ -4462, -4418, -4418, -4418, -4418, -4418, -4462, -4462,
+ -4462, 595, 596, 597, 598, 599, 32767, 32767,
+ 32767, 32767, -4471, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 4716, 4717, 4718, 4719,
+ 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727,
+ 4728, 4729, 4730, 4731, 4732, 4733, 4734, 4735,
+ 3826, 4737, 4738, 4739, 4740, 4741, 4742, 3832,
+ 4744, 3833, 3120, 3121, 3835, 3835, 3124, 3836,
+ 3836, 4753, 4754, 4755, 4756, 4757, 4758, 4759,
+ 4760, 4761, 4762, 4763, 4764, 4765, 4766, 4767,
+ 4768, 4769, 4770, 4771, 4772, 4773, 4774, 4775,
+ 4776, 4777, 4778, 4779, 4780, 4781, 6619, 6620,
+ 6621, 11272, 6623, 6624, 4788, 4789, 4790, 3874,
+ 4761, 3874, 4794, 3874, 4796, 4797, 4798, 3874,
+ 4800, 32767, 0, 4802, 4803, 4804, 4805, 4806,
+ 4807, 4808, 4809, 4810, 4811, 4812, 4813, 4814,
+ 4815, 4816, 4817, 4818, 4819, 4820, 4821, 4822,
+ 4823, 4824, 4825, 4826, 4827, 4828, 11299, 4830,
+ 2536, 4832, 6663, 4834, 11310, 4836, 6669, 4838,
+ 4839, 11320, 4841, 4842, 4843, 4844, 4845, 4846,
+ 4847, 4848, 4849, 4850, 4851, 4852, 1188, 4854,
+ 4855, 4856, 4857, 2577, 4859, 4860, 12273, -907,
+ -907, -907, -907, -907, -907, 4868, 4869, 4870,
+ 4871, 32767, 4872, 4873, 32767, 32767, 4874, 32767,
+ 627, 4875, 4876, 32767, 32767, 4877, 4878, 4879,
+ 6722, 32767, 4881, 4882, 4883, 6730, 6731, 7446,
+ 6733, 4888, 7449, 7449, 4891, 4892, 32767, 4893,
+ 32767, 4894, 4895, 4896, 4897, 4898, 4899, 3512,
+ 3513, 3514, 3515, 3516, 4904, 3518, 3519, 3520,
+ 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528,
+ 3529, 3530, 3531, 3532, 3533, 3534, 3535, 3536,
+ 3537, 3538, 4926, 6797, 4928, 6800, 4930, 4931,
+ 4932, 4933, 4934, 4935, 6813, 4937, 4938, 6816,
+ 6817, 4941, 4942, 4943, 0, 4945, 6821, 0,
+ 0, 4949, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, -127, -127, -127,
+ 7285, -127, -127, 0, -128, -128, -128, -128,
+ 0, 32767, -130, 4971, -129, 5613, 5614, 5615,
+ 4976, 5618, 32767, 5619, 5620, 5621, 4981, 5624,
+ 4983, 4984, 32767, 5630, 5631, -1986, -1986, -126,
+ -126, 5078, 4992, 5037, 5038, 5039, 5040, 5041,
+ 5086, 5087, 5088, 5089, -2322, 5091, 5092, 5093,
+ 5094, 5095, 5096, 5097, 5098, 5099, 5100, 0,
+ 5101, -640, -640, -640, 0, -641, -641, -641,
+ -641, -641, 0, -642, 0, 0, 32767, -645,
+ -645, 6973, 6974, 5115, 5116, -87, 0, -44,
+ -44, -44, -44, -44, -88, -88, -88, -88,
+ 7324, -88, -88, -88, -88, -88, -88, -88,
+ -88, -88, -88, -88, -88, 5654, 5655, 5656,
+ 5657, 5658, 5659, 5660, 5661, 5662, 5663, 5664,
+ 5665, 5666, 5667, 5668, 5669, -1948, -1948, -88,
+ -88, 5116, 5117, 5074, 5075, 5076, 5077, 5078,
+ 5123, 5124, 5125, 5126, -2285, 5128, 5129, 5130,
+ 5131, 5132, 5133, 5134, 5135, 5136, 5137, 5138,
+ 5139, -602, -602, -602, -602, -602, -602, -602,
+ -602, -602, -602, -602, -602, -602, -602, -602,
+ -602, 7016, 7017, 5158, 5159, -44, -44, 0,
+ 0, 0, 0, 0, -44, -44, -44, -44,
+ 7368, -44, -44, -44, -44, -44, -44, -44,
+ -44, -44, -44, -44, -44, 5698, 5699, 5700,
+ 5701, 5702, 5703, 5704, 5705, 5706, 5707, 5708,
+ 5709, 5710, 5711, 5712, 5713, -1904, -1904, -44,
+ -44, 5160, 5161, 5118, 5119, 5120, 5121, 5122,
+ 5167, 5168, 5169, 5170, -2241, 5172, 5173, 5174,
+ 5175, 5176, 5177, 5178, 5179, 5180, 5181, 5182,
+ 5183, -558, -558, -558, -558, -558, -558, -558,
+ -558, -558, -558, -558, -558, -558, -558, -558,
+ -558, 7060, 7061, 5202, 5203, 0, 0, 44,
+ 44, 44, 44, 44, 0, 0, 0, 0,
+ 7412, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5742, 5743, 5744,
+ 5745, 5746, 5747, 5748, 5749, 5750, 5751, 5752,
+ 5753, 5754, 5755, 5756, 5757, -1860, -1860, 0,
+ 0, 0, 0, 0, 6264, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -3402,
+ -3402, 5355, 5356, -3447, -3447, -3402, -3402, -3402,
+ -3402, 5363, 5364, -3447, -3447, -3402, -3402, -3402,
+ -3358, -3358, -3404, -3404, -3404, -3404, -3404, -3404,
+ -3404, 5331, 5332, 5333, 5334, 2903, 2859, 5337,
+ 5338, 5339, 5340, 18601, 15287, 15288, 11974, 11975,
+ 8661, 8662, 5348, 5349, 5350, 5351, 5352, -3404,
+ -3404, 5400, 5401, 5357, 5358, 5359, 5360, -3404,
+ -3404, 5408, 5409, 5365, 5366, 5367, 5324, 5325,
+ 5372, 5373, 5374, 5375, 5376, 5377, 5378, -3356,
+ -3356, -3356, -3356, -924, -879, -3356, -3356, -3356,
+ -3356, -16616, -13301, -13301, -9986, -9986, -6671, -6671,
+ -3356, -3356, -3356, -3356, -3356, 5401, 5402, -3401,
+ -3401, -3356, -3356, -3356, -3356, 5409, 5410, -3401,
+ -3401, -3356, -3356, -3356, -3312, -3312, -3358, -3358,
+ -3358, -3358, -3358, -3358, -3358, 5377, 5378, 5379,
+ 5380, 2949, 2905, 5383, 5384, 5385, 5386, 18647,
+ 15333, 15334, 12020, 12021, 8707, 8708, 5394, 5395,
+ 5396, 5397, 5398, -3358, -3358, 5446, 5447, 5403,
+ 5404, 5405, 5406, -3358, -3358, 5454, 5455, 5411,
+ 5412, 5413, 5414, 5415, 5416, 5417, 5418, 5419,
+ 5420, 5421, 5422, -3312, -3312, -3312, -3312, -880,
+ -835, -3312, -3312, -3312, -3312, -16572, -13257, -13257,
+ -9942, -9942, -6627, -6627, -3312, -3312, -3312, -3312,
+ -3312, 5445, 5446, -3357, -3357, -3312, -3312, -3312,
+ -3312, 5453, 5454, -3357, -3357, -3312, -3312, -3312,
+ -3312, -3312, -3312, -3312, -3312, -3312, -3312, -3312,
+ -3312, 5423, 5424, 5425, 5426, 2995, 2951, 5429,
+ 5430, 5431, 5432, 18693, 15379, 15380, 12066, 12067,
+ 8753, 8754, 5440, 5441, 5442, 5443, 5444, -3312,
+ -3312, 5492, 5493, 5449, 5450, 5451, 5452, -3312,
+ -3312, 5500, 5501, 5457, 2803, 2803, 2803, 2803,
+ 373, 2803, 2803, 5510, 2803, 5512, 11470, 5514,
+ 11472, 5516, 2205, 2206, 2207, -7533, -1530, 4427,
+ 2209, 5524, 2210, 630, 5527, 2211, 2212, 2213,
+ 2214, 2215, 2216, 2217, 2815, 2219, 2220, 5538,
+ 2221, 5540, 2222, 5542, 5543, 2223, -3312, -3312,
+ -3312, 5548, 5549, -3312, -3312, 2803, 2803, 2803,
+ 5555, 5556, 5557, 2803, 2803, 2803, 2803, 2803,
+ 2803, 2803, 2803, 2803, 2803, 2803, 2803, 2803,
+ 9050, 9051, 2803, 2803, 2803, 2803, 2803, 2803,
+ 2803, 2803, 2803, 2803, 2803, 2803, 4318, 7547,
+ 7548, 2803, 2803, 2803, 2803, 2803, 2803, 2803,
+ 2803, 6693, 6693, 2803, 2803, 6694, 6694, 757,
+ 5603, 6693, 6693, 6693, -1593, 7164, 7165, -1638,
+ -1638, -1593, 4576, 4576, 4576, 7175, 7176, -1635,
+ -1635, -1590, -1590, 5422, 2820, -1544, -1590, -1590,
+ -1590, -1590, -1590, 5422, 5422, 4363, 7149, 7150,
+ 7151, 4720, 4676, 4677, 4678, -5053, 7161, 20422,
+ 5425, 5425, 5425, 9160, 9161, 9162, 9163, 9164,
+ 9165, 9166, 5425, -1587, -1587, 7217, -2553, -2553,
+ 7177, 7178, -2553, 32767, 32767, -219, 5312, -2555,
+ -2555, -782, -782, -782, -782, 1806, 2801, 2801,
+ -6998, -6953, 5675, 5676, 5677, 5678, 5679, -7029,
+ -790, -6955, -6955, 57, -2545, -6909, -6955, 3143,
+ -2545, -6955, -2545, 58, 2352, 3149, 5695, 5696,
+ -52, 5698, 5699, 5700, 5701, 5702, 5703, 5704,
+ 5705, 5706, 5707, 5708, 5709, 5710, 5711, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -1838, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 6927,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -973, 32767, 32767,
+ 32767, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 4567, 4568, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -437,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -448, 32767, 32767, -450, -450,
+ -450, 0, 32767, 32767, 32767, -2166, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 0, 32767, -464,
+ -464, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -514,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 5757, 5758, 5759, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -4186, -4186, -12097, -4186, 32767,
+ -4187, -4187, -8787, 32767, 0, 0, 5952, 0,
+ 0, -4183, -4183, -4183, 0, -2386, -4182, 778,
+ -4183, -5935, 32767, 32767, -4690, -6249, -4184, -4184,
+ -4184, 32767, 32767, -4186, -4186, -77, 32767, -77,
+ 32767, -4188, 0, -4189, 32767, 0, 0, 0,
+ 0, 32767, 0, 0, 0, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 32767, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -5937, -2358, 0, 0, 0,
+ -8286, 471, 472, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 1747, 32767, -2126, 32767, 32767, 1748,
+ 1749, 1750, 1751, 1752, 1753, 8224, 1755, -539,
+ 1757, 781, 32767, 32767, 32767, -1991, -2035, 32767,
+ 32767, 782, -3784, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 837, 32767, 32767, 32767, 32767, 32767, -4008,
+ -4008, -4008, 2949, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, -797, 1806, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 4605, 4606,
+ 32767, 32767, 0, 455, 32767, 0, 32767, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -4244, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 784, 32767, 32767, 2950, 2951, 32767, 32767, 32767,
+ 32767, 32767, 32767, 786, 787, 32767, 1252, 1253,
+ 32767, 790, 32767, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 32767, 0, 32767, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -200, -200, -200,
+ -200, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ -5932, -5932, 32767, 32767, 2952, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -5387,
+ -5387, -5387, -5387, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 0, 32767, 32767,
+ 0, 0, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 497, 498, 499, 500,
+ 501, 502, 503, 504, 505, 506, 507, 508,
+ 32767, 32767, -156, 765, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -861,
+ 32767, 6106, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2953, 2954, 32767, 797,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 2955, 32767, 32767, 32767, -8929,
+ 32767, -8885, -8885, -8885, 32767, 32767, 32767, 32767,
+ 32767, 32767, -749, 7119, 7120, 32767, 32767, 32767,
+ 32767, 2760, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, -1181, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -5587, 0, 7596,
+ 7597, 0, 0, 0, 0, 0, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -714, 0,
+ 0, -713, -712, 0, -711, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1859,
+ 0, 3247, 32767, 32767, 0, 3247, 0, 3248,
+ 0, 3249, 0, 3250, 0, 3251, 0, 3252,
+ 808, 3252, 0, 3253, 0, 3254, 0, 0,
+ 3256, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 0, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 0, 0, 6824,
+ 32767, 0, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 4207, 4208, 0, 0, 0, 0, 0, 1896,
+ 0, 0, 1898, 1898, 1898, 1898, 0, 0,
+ 0, 1901, 1901, 0, 0, 0, 0, 0,
+ 0, -1319, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 7618, 7619, 7620,
+ 3, 3, 1863, 1863, 7067, 7068, 7025, 7026,
+ 7027, 7028, 7029, 7074, 7075, 7076, 7077, -334,
+ 7079, 7080, 7081, 7082, 7083, 7084, 7085, 7086,
+ 7087, 7088, 7089, 7090, 1349, 1349, 1349, 1349,
+ 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349,
+ 1349, 1349, 1349, 1349, 8967, 8968, 7109, 7110,
+ 1907, 1907, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 2976, 2977, 2978, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 820, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 821,
+ 2381, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 2005, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 823, 32767, 824, 32767,
+ 825, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 826, 32767, 32767, 32767, 32767, 32767,
+ 32767, 4575, 4576, 4577, 4578, 4579, 4580, 4581,
+ 4582, 4583, 4584, 4585, 32767, 32767, 829, 32767,
+ 32767, 32767, 32767, 830, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 6253, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 6253, -3848, 834, 835, 836, -3845, -3845, -3845,
+ -3845, -3845, -3845, 843, 844, -4280, 32767, 845,
+ 846, 6531, 848, -3839, 32767, -3840, -3840, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 1946, 32767,
+ 32767, 32767, -3849, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 853, 32767, 32767, 32767,
+ 32767, 854, 32767, 32767, 32767, 32767, 855, 32767,
+ 32767, 32767, 32767, 856, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 857, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -3799, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 8266, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 859, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 860,
+ 32767, 861, -5065, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 10746, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4526,
+ 32767, 4573, 4574, 4575, 32767, 32767, -2436, -1376,
+ 32767, 32767, 32767, 32767, 32767, -1689, -1689, 4349,
+ -4171, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 4588, 32767,
+ 4589, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4590,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 4591, 4592, 32767,
+ 32767, 32767, 32767, 32767, 32767, 2933, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 864, 32767, 32767, 32767,
+ 0, 32767, 0, 32767, 32767, -2977, 335, 335,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2992, 2993, 2994, 2995,
+ 32767, 32767, 32767, 4596, 2550, 32767, 32767, 32767,
+ -1188, 4769, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 4600, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 2997, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 4601, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 2013,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -11287, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -4664, 32767, 32767, -4711, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -4718, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4049,
+ 32767, 32767, 32767, 4050, 4051, 4052, 17313, 32767,
+ 32767, 32767, 10684, 7370, 7371, 4057, 4058, 4059,
+ 4060, 4061, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 4603, 8793, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 1283, 4897, 4898, 4899, 12175, 4901, 4902, 32767,
+ 4903, 4904, 4905, 4906, 4907, 10276, -1469, 1282,
+ 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
+ 1282, 32767, 32767, 4920, 4921, 4063, -2051, -2050,
+ 4925, 4926, 32767, 7332, 7333, 32767, 7334, 7335,
+ 7336, 7337, 5045, 32767, 32767, 32767, -2049, -2048,
+ 32767, -8294, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1132, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 20166, 16852, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6908, 6909, 6910, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -4510, -4510, -4510, -4510, -4510, -4510, -4510, 0,
+ 0, 0, 0, 0, 0, -1831, -1831, -1831,
+ -15091, -11776, -11776, -8461, 0, 0, 0, -1834,
+ -1834, -1834, -1834, -1834, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -1819, -3615, 1345, -3616, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 32767, 32767, 0,
+ 0, 0, 0, 0, 0, 0, 8770, 8771,
+ 8772, 8773, 8774, 8775, 8776, 8777, 8778, 8779,
+ 45, 45, 45, 45, 2477, 2522, 45, 45,
+ 45, 45, -13215, -9900, -9900, -6585, -6585, -3270,
+ -3270, 45, 45, 45, 45, 45, 8802, 8803,
+ 0, 0, 45, 45, 45, 45, 8810, 8811,
+ 0, 0, 45, 2700, 2701, 2702, 2703, 5134,
+ 2705, 2706, 0, 2708, 0, -5957, 0, -5957,
+ 0, 3312, 3312, 3312, 13053, 7051, 1095, 3314,
+ 0, 3315, 4896, 0, 3317, 3317, 3317, 3317,
+ 3317, 3317, 3317, 2720, 3317, 3317, 0, 3318,
+ 0, 3319, 0, 0, 3321, 8857, 8858, 8859,
+ 0, 0, 8862, 8863, 2749, 2750, 2751, 0,
+ 0, 0, 2755, 2756, 2757, 2758, 2759, 2760,
+ 2761, 2762, 2763, 2764, 2765, 2766, 2767, -3479,
+ -3479, 2770, 2771, 2772, 2773, 2774, 2775, 2776,
+ 2777, 2778, 2779, 2780, 2781, 1267, -1961, -1961,
+ 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792,
+ -1097, -1096, 2795, 2796, -1094, -1093, 4845, 0,
+ -1089, -1088, -1087, 7200, -1556, -1556, 7248, 7249,
+ 7205, 1037, 1038, 1039, -1559, -1559, 7253, 7254,
+ 7210, 7211, 200, 2803, 7168, 7215, 7216, 7217,
+ 7218, 7219, 208, 209, 1269, -1516, -1516, -1516,
+ 916, 961, 961, 961, 10693, -1520, -14780, 218,
+ 219, 220, -3514, -3514, -3514, -3514, -3514, -3514,
+ -3514, 228, 7241, 7242, -1561, 8210, 8211, -1518,
+ -1518, 8214, 8215, 9195, 5881, 351, 8219, 8220,
+ 6448, 6449, 6450, 6451, 3864, 2870, 2871, 12671,
+ 12627, 0, 0, 0, 0, 0, 12709, 6471,
+ 12637, 12638, 5627, 8230, 12595, 12642, 2545, 8234,
+ 12645, 8236, 5634, 3341, 2545, 0, 0, 5749,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 0, 0, 11602,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 1466,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5760, 0, 0, 0, 0, 0, 32767,
+ 0, 32767, 0, 0, 32767, 0, 0, 32767,
+ 0, 3507, 3508, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 1644, 1645, 1646, 1647, -5764, 1649, 1650, 1651,
+ 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659,
+ 1660, -4081, -4081, -4081, -4081, -4081, -4081, -4081,
+ -4081, -4081, -4081, -4081, -4081, -4081, -4081, -4081,
+ -4081, 3537, 3538, 1679, 3582, 3583, 3584, -3482,
+ -3482, -3482, -3482, -3482, -3526, -3526, -3526, -3526,
+ 3886, -3526, -3526, -3526, -3526, 3599, 3600, 3601,
+ 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609,
+ 3610, 3611, 3612, 3613, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+ -7275, 0, 0, -7234, 0, 0, 0, 0,
+ 0, -5368, 6378, 3628, 3629, 3630, 3631, 3632,
+ 3633, 3634, 3635, 3636, 3637, 3638, 3639, 0,
+ 0, 859, 6974, 6974, 0, 0, 3647, -2405,
+ -2405, 3650, -2405, -2405, -2405, -2405, -112, -2405,
+ -3201, 3658, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 32767, 32767, 32767,
+ 32767, 5280, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 4637, 4638, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 4014, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 802, 32767, 32767,
+ 32767, 32767, 803, -1055, 805, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 4639, 32767,
+ 32767, 32767, 806, -2445, 0, -2443, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 810, 32767, 32767,
+ 32767, 32767, 811, 812, 813, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -6211, -6211, -6211, -6211, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -6271, -6271,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 935, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, -10300, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 0, 32767, 32767, 4640, 4641, 32767,
+ 32767, 32767, 32767, 32767, 4624, 32767, 32767, 32767,
+ -4233, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 1859, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 872, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -4568, -1253, 32767,
+ -3590, 32767, 32767, 32767, -1820, -1820, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 873, 874, 875, 3629, 0, 0,
+ 0, 5048, 5005, 5006, 5007, 5008, 5009, 5054,
+ 5055, 5056, 0, 0, 0, 0, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4118,
+ 32767, 32767, 32767, 32767, -4122, -4122, -4122, -4122,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4193,
+ 32767, -4194, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -4209, 32767, 32767, -4211, -4211, -4211,
+ -4211, -4211, -4211, -4211, 32767, 32767, -4213, -10683,
+ -4213, -1918, -4213, -6043, 32767, 32767, -4215, -6047,
+ 32767, -4216, -10696, -4216, -4216, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 4646, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 876, 877, 0, 32767, 0, 32767, 0,
+ 32767, 0, 32767, 0, 32767, 32767, 32767, 0,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 1844, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -2899, 0, 32767,
+ 0, 32767, 0, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 836, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32767, 0, 0, 0, 879,
+ 880, 881, 882, 883, 884, 885, 886, 0,
+ 0, 887, 0, 920, 0, 922, 923, 924,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 5431,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 3639, 889, 890, 891, 892, 893,
+ 894, 895, 896, 897, 898, 899, 900, -2739,
+ 927, -1881, 4234, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -459, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -458,
+ -457, 904, 32767, 905, 32767, 906, 32767, 907,
+ 32767, 908, 32767, 32767, 32767, 909, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 910,
+ 0, 0, 0, 0, 0, 0, 911, 0,
+ 912, 1626, 1626, 913, 914, 1626, 915, 916,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -1837, -1837, -1837,
+ -6487, -1837, -1837, 0, 0, 0, 917, 31,
+ 919, 0, 921, 0, 0, 0, 925, 0,
+ 32767, 4801, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -6470, 0, 2295,
+ 0, -1830, 0, -6475, 0, -1832, 0, 0,
+ -6480, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3665, 0, 0,
+ 0, 0, 2281, 0, 0, -7412, 5769, 5770,
+ 5771, 5772, 5773, 5774, 0, 0, 0, 0,
+ 32767, 0, 0, 32767, 32767, 0, 32767, 32767,
+ 0, 0, 32767, 32767, 0, 0, 0, -1842,
+ 32767, 0, 0, 0, -1846, -1846, -2560, -1846,
+ 0, -2560, -2559, 0, 0, 32767, 0, 32767,
+ 0, 0, 0, 0, 0, 0, 1388, 0,
+ 1387, 1387, 1387, 0, 1387, 1387, 1387, 1387,
+ 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
+ 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
+ 1387, 0, -1870, 0, -1871, 0, 0, 0,
+ 0, 0, 0, -1877, 0, 0, -1877, -1877,
+ 0, 0, 0, 4944, 0, -1875, 4947, 4948,
+ 0, 4950, 4951, 4952, 4953, 4954, 4955, 4956,
+ 4957, 4958, 4959, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+ 32767, 32767, 0, 0, 0, 0, 32767, 32767,
+ 32767, 0, 0, 931, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4650,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 5375,
+ 5376, 5377, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 13180, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, -4011, 933, -4011, 32767,
+ 935, 936, -4012, 938, 939, 940, 941, 942,
+ 943, 944, 945, 946, 947, 32767, 1075, 1076,
+ 1077, -6334, 1079, 1080, 954, 32767, 32767, 32767,
+ 32767, 955, 32767, 32767, 32767, 32767, 32767, 32767,
+ -4659, 32767, 32767, 32767, -4662, -4662, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 959, 960, 961, 32767, 962, 963, 964,
+ 965, 966, 967, 968, 969, 970, 971, 972,
+ 32767, 973, 974, 975, 976, 977, 978, 979,
+ 980, 981, 982, 983, 984, 985, 986, 987,
+ 988, 989, 990, 32767, 991, 992, 993, 994,
+ 995, 996, 997, 998, 999, 1000, 1001, 1002,
+ 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
+ 1011, 1012, 1013, 1014, 1015, 1016, 1017, -362,
+ -362, 32767, 32767, 32767, 32767, -410, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1019, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 164, 1021, -3551, -3551, 1024, 1025, 1026, 1027,
+ 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035,
+ 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043,
+ 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051,
+ 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059,
+ 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
+ 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075,
+ 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083,
+ 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091,
+ 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099,
+ 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107,
+ 1108, 1109, 1110, 1111, 1112, 1113, 1114, 32767,
+ 1115, 1116, 1117, 1118, 1119, 32767, 1120, 1121,
+ 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129,
+ 1130, 1131, 0, 1133, 1134, 1135, 1136, 1137,
+ 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145,
+ 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153,
+ 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161,
+ 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169,
+ 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177,
+ 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185,
+ 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193,
+ 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201,
+ 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209,
+ -18956, -15641, 1212, 1213, 1214, 1215, 1216, 1217,
+ 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225,
+ -5682, -5682, -5682, 1229, 1230, 1231, 1232, 1233,
+ 1234, 1235, 1236, 1237, 1238, 1239, 5750, 5751,
+ 5752, 5753, 5754, 5755, 5756, 1247, 1248, 1249,
+ 1250, 1251, 1252, 3084, 3085, 3086, 16347, 13033,
+ 13034, 9720, 1260, 1261, 1262, 3097, 3098, 3099,
+ 3100, 3101, 1268, 1269, 1270, 1271, 1272, 1273,
+ 1274, 1275, 32767, 32767, 32767, 32767, 1276, 1277,
+ 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285,
+ 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293,
+ 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301,
+ 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309,
+ 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317,
+ 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325,
+ 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333,
+ 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341,
+ 1342, 3162, 4959, 0, 4962, 1347, 1348, 1349,
+ 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357,
+ 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 7481,
+ 7482, 7483, 7484, 5053, 5009, 7487, 7488, 7489,
+ 7490, 20751, 17437, 17438, 14124, 14125, 10811, 10812,
+ 7498, 7499, 7500, 7501, 7502, 32767, 32767, 7548,
+ 7549, 7505, 7506, 7507, 7508, 32767, 32767, 7554,
+ 7555, 7511, 4857, 4857, 4857, 4857, 2427, 4857,
+ 4857, 7564, 4857, 7566, 13524, 7568, 13526, 7570,
+ 4259, 4260, 4261, -5479, 524, 6481, 4263, 7578,
+ 4264, 2684, 1421, -7842, -4527, -4527, -1212, -1212,
+ -1212, -1212, -1212, 7545, 7546, 0, 0, -1214,
+ -1214, -1214, -1214, 7551, 7552, 32767, 1610, -1216,
+ 1439, 1440, 1441, 1442, 3873, 1444, 1445, 32767,
+ 1446, 32767, -7220, 32767, -7221, 0, 2047, 2047,
+ 2047, 11788, 5786, -170, 2049, -1265, 2050, 3631,
+ -1265, 2052, 2052, 2052, 2052, 2052, 2052, 2052,
+ 1455, 2052, 2052, -1265, 2053, -1265, 2054, -1265,
+ -1265, 2056, 7592, 7593, 7594, 32767, 32767, 7595,
+ 7596, 1482, 1483, 1484, -1267, -1267, -1267, 1488,
+ 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496,
+ 1497, 1498, 1499, 1500, -4746, -4746, 1503, 1504,
+ 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512,
+ 1513, 1514, 0, -3228, -3228, 1518, 1519, 1520,
+ 1521, 1522, 1523, 1524, 1525, -2364, -2363, 1528,
+ 1529, -2361, -2360, 3578, 0, -2357, -2356, -2355,
+ 5932, -2824, -2824, 5980, 5981, 5937, -231, -230,
+ -229, -2827, -2827, 5985, -225, 5941, 5942, -1069,
+ 1534, 5899, 5946, 5947, 5948, 5949, 5950, -1061,
+ -1060, 0, -2785, 0, -355, -355, -310, -310,
+ -310, 9422, -2791, 32767, -1054, -1053, -1052, -4786,
+ -4786, -4786, -4786, -4786, -4786, -4786, -1044, 5969,
+ 5970, -2833, 6938, 6939, -2790, -2790, 6942, 0,
+ 32767, 4607, -923, 6945, 32767, 5173, 5174, 5175,
+ 5176, 2589, 1595, 1596, 11396, 11352, 32767, 32767,
+ 6126, 2812, 2813, 2814, 2815, 2816, -5940, -5940,
+ 1607, 1608, 2823, 32767, 32767, 1516, 0, -8581,
+ 0, 0, 728, 1525, 163, -11068, 0, -2262,
+ -2306, -2305, 32767, 32767, 0, 0, 1580, 0,
+ 0, 0, -6443, 1685, -10176, -4173, 1784, -4173,
+ 0, -4172, 5925, -4171, -4171, -4171, 0, -437,
+ 0, 0, 0, 161, -435, 0, 2883, -434,
+ 0, 0, 0, 0, -436, 0, -5972, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2889,
+ 2890, 2891, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 6371,
+ 0, 0, 0, 0, 0, 0, 0, 117,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32767, 0, 0, 3991, 3991,
+ 3991, 3991, 0, 3990, 3990, 3990, -1947, 1632,
+ 3990, 3990, 3990, -4296, 4461, 4462, -4341, -4341,
+ -4296, 1873, 1873, 1873, 4472, 4473, -4338, 1873,
+ -4292, -4292, 2720, 118, -4246, -4292, -4292, 117,
+ -4293, -4293, 2719, 2719, 1660, 4446, 1662, 2018,
+ 2019, 1975, 1976, 1977, -7754, -7754, -8733, -5418,
+ 113, 0, 112, -2157, -5891, -5891, 0, -5892,
+ 6455, -5893, 0, 0, 0, 32767, 32767, 32767,
+ 5826, 32767, 32767, 32767, 32767, 6806, 32767, -2039,
+ 32767, 5829, 32767, 5830, 5831, 5832, 32767, 5833,
+ 5834, 32767, 5835, 32767, 32767, -3520, 0, 5837,
+ 0, 5838, 0, 4035, 0, 5840, 32767, 10251,
+ 154, 1671, 10253, 1673, 1674, 947, 151, 1514,
+ 12746, 1679, 3942, 3987, 3987, 3987, 13719, 13720,
+ 14700, 103, 5855, 13723, 5857, 8127, 0, 11862,
+ 5860, -96, 5862, 1690, 5863, -4233, 5864, 5865,
+ 5866, 5867, 5868, 5869, 5870, 5871, 5872, 5873,
+ 32767, 5874, 5875, 5876, 5877, 5878, 5879, 5880,
+ 5881, 5882, 5883, 13795, 5885, 5886, 5887, 5888,
+ 10489, 5890, 1703, 1704, -4247, 1706, 1707, 5891,
+ 5892, 5893, 1711, 4098, 5895, 5896, 5897, 7650,
+ 32767, 5899, 6406, 7966, 5902, 5903, 5904, 5905,
+ 5906, 5907, 5908, 1800, 5910, 1801, 5912, 5913,
+ 5914, 5915, 32767, 1727, 1728, 1729, 1730, 32767,
+ 1731, 1732, 1733, 32767, 1734, 1735, 1736, 1737,
+ 1738, 1739, 1740, 32767, 1741, 1742, 1743, 1744,
+ 1745, 1746, 32767, 32767, 32767, 32767, 1747, 1748,
+ 1749, 1750, 1751, 32767, 32767, 32767, 32767, 32767,
+ 32767, 1752, 1753, 1754, 1755, 1756, 1757, 1758,
+ 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766,
+ 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774,
+ 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782,
+ 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790,
+ 1791, 7729, 4151, 1794, 1795, 1796, 10083, 1327,
+ 1327, 10131, 10132, 10088, 3920, 3921, 3922, 1324,
+ 1324, 10136, 3926, 10092, 10093, 3082, 5685, 10050,
+ 10097, 0, 5689, 10100, 5691, 3089, 796, 0,
+ 1363, 12595, 3792, 3792, 3837, 3837, 3837, 13569,
+ 13570, 14550, 11236, 5706, 13574, 5708, 7978, 11713,
+ 11714, 11715, 11716, 11717, 11718, 11719, 7978, 966,
+ 966, 9770, 0, 0, 9730, 9731, 0, 0,
+ -979, 2336, 7867, 0, 0, 32767, 0, 0,
+ 0, 32767, 0, 0, 32767, 0, 32767, 32767,
+ 9356, 32767, 0, 32767, 0, 32767, 1804, 2602,
+ 0, -4364, -4410, 5688, 0, -4410, 0, 2603,
+ 4897, 5694, 4332, -6899, 1905, 1906, 1862, 1863,
+ 1864, -7867, -7867, -8846, -5531, 0, -7867, 0,
+ -2269, -6003, -6003, 0, 5957, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -7911, 0,
+ 0, 0, 0, -4600, 0, 0, 4156, 32767,
+ 32767, 0, 0, 0, 0, 0, 1796, 0,
+ 0, 0, -1752, 0, 0, -506, -2065, 0,
+ 0, 0, 0, 0, 0, 0, 4109, 0,
+ 4110, 0, 0, 0, 0, 0, 4111, 17372,
+ 0, 14058, 10744, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -4650, 0, 0, 4161, 32767,
+ 32767, 4117, 32767, 4118, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -7946, 32767, -4632, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4642,
+ -4642, 4123, 4124, -4687, 0, 0, -4644, -4644,
+ 0, 0, -4646, -4646, 32767, 32767, 32767, 32767,
+ 32767, 32767, 4084, 4085, 32767, 32767, 1609, 4087,
+ 32767, 32767, 4088, 17349, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 10092, 4136,
+ 10094, 4138, 10096, 0, 10097, 10098, 10099, 10100,
+ 10101, 0, 32767, 32767, 32767, 0, 0, 0,
+ 0, 0, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32767, 32767, 0, 10138, 10139,
+ 0, 0, 0, 10145, 32767, 32767, 32767, 32767,
+ 32767, 32767, -1425, 8316, 2314, -3642, 32767, 0,
+ 32767, 32767, 32767, 32767, -1426, -1426, -1426, -1426,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 52, 52, 52, 52, 52,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 1849, 1850, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, -5633, -5633, -5633, -5633, -5633, -5633, -5633,
+ -5633, -5633, -5633, -5633, -5633, -5633, -5633, -5633,
+ -5633, 1985, 1986, 127, 2030, 2031, 2032, -5034,
+ 32767, 32767, 32767, 32767, 32767, 0, 32767, 32767,
+ 32767, 5916, 5917, 5918, 5919, 5920, 5921, 5922,
+ 5923, 5924, 8824, 5926, 32767, 32767, 0, 32767,
+ 0, 5927, 5928, 5929, 5930, 5931, 5932, 5933,
+ 5934, 5935, 5936, 5937, 5938, 5939, 5940, 5105,
+ 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949,
+ 5950, 5951, 5952, 5953, 5954, 5955, 5956, 5957,
+ 32767, 5958, 5959, 5960, 5082, 5082, 5082, 5082,
+ 5082, 5082, 5082, 5082, 5969, 5970, 5084, 5972,
+ 5053, 5974, 5053, 5053, 5053, 5978, 5979, 5980,
+ 5981, 5982, 5983, 5984, 5985, 5986, 5987, 5988,
+ 5989, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2552, 32767, 32767, 32767,
+ 32767, 32767, 32767, 5990, 5991, 5992, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 5993, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 6936, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 1851, 1852, 1853, 1854,
+ 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862,
+ 1863, 1864, 1200, 2121, 1200, 1868, 1869, 1870,
+ 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878,
+ 1879, 1880, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, -5282, 1188,
+ 3483, 1188, -642, 1188, -5287, 1188, -644, 1188,
+ 1188, -5292, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1925, 1926,
+ -6187, -6231, 1184, 3465, 1184, 1184, -6228, 6953,
+ 6954, 6955, 6956, 0, 1939, 1940, 1941, 1942,
+ 1943, 1944, 1178, 1178, 1947, 1948, 1949, 1950,
+ 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958,
+ 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966,
+ 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974,
+ 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982,
+ 1983, 1984, 1985, 1986, 1987, 1988, 1989, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 709, 666, 667, 668, 32767, 669,
+ 714, 715, 716, 717, -6694, 719, 720, 721,
+ 32767, 722, 723, 724, 32767, 725, 726, 727,
+ 728, -5013, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 6052, 0, 0, 6055,
+ 0, 0, 0, 0, 2293, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1244, 1245, 1246,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4660,
+ -4660, -4660, -4660, 4097, 4098, -4705, -4705, -4660,
+ -4660, -4660, -4660, 4105, 4106, -4705, 32767, -4661,
+ -4661, -4661, -4617, -4617, -4663, -4663, -4663, -4663,
+ -4663, -4663, -4663, 4072, 4073, 4074, 4075, 1644,
+ 1600, 4078, 4079, 4080, 4081, 17342, 14028, 14029,
+ 10715, 10716, 7402, 7403, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32767, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1380, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 856, 0, 4573,
+ 4574, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 0, 0, 0,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 5204, 5161, 5162, 5163, 5164, 5165, 5210, 5211,
+ 5212, 5213, -2198, 5215, 5216, 5217, 5218, 5219,
+ 5220, 5221, 5222, 5223, 5224, 5225, 5226, -515,
+ -515, -515, -515, -515, -515, -515, -515, -515,
+ -515, -515, -515, -515, -515, -515, -515, 7103,
+ 7104, 5245, 5246, 5247, 5248, 5249, -1014, 5251,
+ 5252, 5253, 5254, 5255, 5256, 5257, 5258, 5259,
+ 5260, 8663, 8664, -92, -92, 8712, 8713, 8669,
+ 8670, 8671, 8672, -92, -92, 8720, 8721, 8677,
+ 8678, 8679, 8636, 8637, 8684, 8685, 8686, 8687,
+ 8688, 8689, 8690, -44, -44, -44, -44, 2388,
+ 2433, -44, -44, -44, -44, -13304, -9989, -9989,
+ -6674, -6674, -3359, -3359, -44, -44, -44, -44,
+ -44, 8713, 8714, -89, -89, -44, -44, -44,
+ -44, 8721, 8722, -89, -89, -44, -44, -44,
+ 0, 0, -46, -46, -46, -46, -46, -46,
+ -46, 8689, 8690, 8691, 8692, 6261, 6217, 8695,
+ 8696, 8697, 8698, 21959, 18645, 18646, 15332, 15333,
+ 12019, 12020, 8706, 8707, 8708, 8709, 8710, -46,
+ -46, 8758, 8759, 8715, 8716, 8717, 8718, -46,
+ -46, 8766, 8767, 8723, 8724, 8725, 8726, 8727,
+ 8728, 8729, 8730, 8731, 8732, 8733, 8734, 0,
+ 0, 0, 0, 2432, 2477, 0, 0, 0,
+ 0, -13260, -9945, -9945, -6630, -6630, -3315, -3315,
+ 0, 0, 0, 0, 0, 8757, 8758, -45,
+ -45, 0, 0, 0, 0, 8765, 8766, -45,
+ -45, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 8735, 8736, 8737,
+ 8738, 6307, 6263, 8741, 8742, 8743, 8744, 22005,
+ 18691, 18692, 15378, 15379, 12065, 12066, 8752, 8753,
+ 8754, 8755, 8756, 0, 0, 8804, 8805, 8761,
+ 8762, 8763, 8764, 0, 0, 8812, 8813, 8769,
+ 6115, 6115, 6115, 6115, 3685, 6115, 6115, 8822,
+ 6115, 8824, 14782, 8826, 14784, 8828, 5517, 5518,
+ 5519, -4221, 1782, 7739, 5521, 8836, 5522, 3942,
+ 8839, 5523, 5524, 5525, 5526, 5527, 5528, 5529,
+ 6127, 5531, 5532, 8850, 5533, 8852, 5534, 8854,
+ 8855, 5535, 0, 0, 0, 8860, 8861, 0,
+ 0, 0, 13252, 9939, 9939, 6626, 6626, 3313,
+ 3313, 0, 0, 0, -9269, -3312, 0, 0,
+ 0, 9741, 32767, 32767, 0, 32767, 0, 32767,
+ 32767, 0, 0, 0, 0, 0, 0, 0,
+ -597, 0, 0, 32767, 0, 32767, 0, 32767,
+ 32767, 0, 0, 32767, 32767, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -1387, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -1773, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, -4161, 1581, 1582, 32767, 32767, 1990, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 1539, 32767, 32767, 6150, 6151, 6152, 411,
+ 411, 411, 411, 411, 411, 411, 411, 411,
+ 411, 411, 411, 411, 411, 411, 411, 8029,
+ 8030, 6171, 6172, 969, 969, 1013, 1013, 1013,
+ 1013, 1013, 969, 969, 969, 969, 8381, 969,
+ 969, 969, 969, 969, 969, 969, 969, 969,
+ 969, 969, 969, 6711, 6712, 6713, 6714, 6715,
+ 6716, 6717, 6718, 6719, 6720, 6721, 6722, 6723,
+ 6724, 6725, 6726, -891, -891, 969, 969, 6173,
+ 6174, 6131, 6132, 6133, 6134, 6135, 6180, 6181,
+ 6182, 6183, -1228, 6185, 6186, 6187, 6188, 6189,
+ 6190, 6191, 6192, 6193, 6194, 6195, 6196, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 8073,
+ 8074, 6215, 6216, 1013, 1013, 1057, 1057, 1057,
+ 1057, 1057, 1013, 1013, 1013, 1013, 8425, 1013,
+ 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
+ 1013, 1013, 1013, 6755, 6756, 6757, 6758, 6759,
+ 6760, 6761, 6762, 6763, 6764, 6765, 6766, 6767,
+ 6768, 6769, 6770, -847, -847, 1013, 1013, 6217,
+ 6218, 6175, 6176, 6177, 6178, 6179, 6224, 6225,
+ 6226, 6227, -1184, 6229, 6230, 6231, 6232, 6233,
+ 6234, 6235, 6236, 6237, 6238, 6239, 6240, 499,
+ 499, 499, 499, 499, 499, 499, 499, 499,
+ 499, 499, 499, 499, 499, 499, 499, 8117,
+ 8118, 6259, 6260, 6261, 6262, 6263, 0, 6265,
+ 6266, 6267, 6268, 6269, 6270, 6271, 6272, 6273,
+ 6274, 9677, 9678, 922, 922, 9726, 9727, 9683,
+ 9684, 9685, 9686, 922, 922, 9734, 9735, 9691,
+ 9692, 9693, 9650, 9651, 9698, 9699, 9700, 9701,
+ 9702, 9703, 9704, 970, 970, 970, 970, 3402,
+ 3447, 970, 970, 970, 970, -12290, -8975, -8975,
+ -5660, -5660, -2345, -2345, -2345, -2345, -2345, 6412,
+ 6413, -2390, -2390, -2345, -2345, -2345, -2345, 6420,
+ 6421, -2390, -2390, -2345, -2345, -2345, -2301, -2301,
+ -2347, -2347, -2347, -2347, -2347, -2347, -2347, 6388,
+ 6389, 6390, 6391, 3960, 3916, 6394, 6395, 6396,
+ 6397, 19658, 16344, 16345, 13031, 13032, 9718, 9719,
+ 6405, 6406, 6407, 6408, 6409, -2347, -2347, 6457,
+ 6458, 6414, 6415, 6416, 6417, -2347, -2347, 6465,
+ 6466, 6422, 6423, 6424, 6381, 6382, 6429, 6430,
+ 6431, 6432, 6433, 6434, 6435, -2299, -2299, -2299,
+ -2299, 133, 178, -2299, -2299, -2299, -2299, -15559,
+ -12244, -12244, -8929, -8929, -5614, -5614, -2299, -2299,
+ -2299, -2299, -2299, 6458, 6459, -2344, -2344, -2299,
+ -2299, -2299, -2299, 6466, 6467, -2344, -2344, -2299,
+ -2299, -2299, -2299, -2299, -2299, -2299, -2299, -2299,
+ -2299, -2299, -2299, 6436, 6437, 6438, 6439, 4008,
+ 3964, 6442, 6443, 6444, 6445, 19706, 16392, 16393,
+ 13079, 13080, 9766, 9767, 6453, 6454, 6455, 6456,
+ 6457, -2299, -2299, 6505, 6506, 6462, 6463, 6464,
+ 6465, -2299, -2299, 6513, 6514, 6470, 6471, 6472,
+ 6473, 6474, 6475, 6476, 6477, 6478, 6479, 6480,
+ 6481, -2253, -2253, -2253, -2253, 179, 224, -2253,
+ -2253, -2253, -2253, -15513, -12198, -12198, -8883, -8883,
+ -5568, -5568, -2253, -2253, -2253, -2253, -2253, 6504,
+ 6505, -2298, -2298, -2253, -2253, -2253, -2253, 6512,
+ 6513, -2298, -2298, -2253, 402, 403, 404, 405,
+ 2836, 407, 408, -2298, 410, -2298, -8255, -2298,
+ -8255, -2298, 1014, 1014, 1014, 10755, 4753, -1203,
+ 1016, -2298, 1017, 2598, -2298, 1019, 1019, 1019,
+ 1019, 1019, 1019, 1019, 422, 1019, 1019, -2298,
+ 1020, -2298, 1021, -2298, -2298, 1023, 6559, 6560,
+ 6561, -2298, -2298, 6564, 6565, 6566, -6685, -3371,
+ -3370, -56, -55, 3259, 3260, 3261, 12531, 6575,
+ 3264, 3265, 3266, -6474, -471, 5486, 3268, 6583,
+ 3269, 1689, 6586, 3270, 3271, 3272, 3273, 3274,
+ 3275, 3276, 3874, 3278, 3279, 6597, 3280, 6599,
+ 3281, 6601, 6602, 3282, 3283, 32767, 32767, 32767,
+ 3284, 3285, 3286, 3287, 3288, 3289, 3290, 3291,
+ 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3299,
+ 3300, 3301, 3302, 3303, 3304, 3305, 3306, 3307,
+ 3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315,
+ 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323,
+ 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331,
+ 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339,
+ 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347,
+ 3348, 3349, 3350, 3351, 32767, 32767, 3352, 3353,
+ 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361,
+ 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369,
+ 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377,
+ 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385,
+ 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393,
+ 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401,
+ 3402, 3403, 3404, 3405, 3406, 3407, 4795, 3409,
+ 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417,
+ 3418, 3419, 3420, 3421, 3422, 3423, 3424, 3425,
+ 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433,
+ 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441,
+ 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449,
+ 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 3458,
+ 3459, 3460, 3461, 3462, -8139, 3464, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 3465, 3466, 2001, 3468, 3469, 32767,
+ 32767, 32767, 32767, 32767, 3470, 3471, 3472, 3473,
+ 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481,
+ 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489,
+ 3490, 3491, 3492, 3493, 3494, 3495, 32767, 3496,
+ 3497, 3498, 3499, 3500, 32767, 3501, 32767, 3502,
+ 3503, 32767, 3504, 3505, 32767, 3506, 0, 0,
+ 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516,
+ 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3524,
+ 3525, 3526, 3527, 3528, 3529, 3530, 3531, 3532,
+ 3533, 3534, 3535, 3536, 3537, 3538, 3539, 3540,
+ 3541, 3542, 3543, 3544, 3545, 1902, 1902, 1902,
+ 1902, 9314, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 7644, 7645,
+ 7646, 7647, 7648, 7649, 7650, 7651, 7652, 7653,
+ 7654, 7655, 7656, 7657, 7658, 7659, 42, 42,
+ 1902, 0, 0, 0, 7067, 7068, 7069, 7070,
+ 7071, 7116, 7117, 7118, 7119, -292, 7121, 7122,
+ 7123, 7124, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3614, 3615, 3616, 10892, 3618, 3619,
+ 10854, 3621, 3622, 3623, 3624, 3625, 8994, -2751,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3640, 3641, 2783, -3331,
+ -3330, 3645, 3646, 0, 6053, 6054, 0, 6056,
+ 6057, 6058, 6059, 3767, 6061, 6858, 0, 0,
+ 3659, 0, 0, 1531, 1531, 1531, 1531, 1531,
+ 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531,
+ 1531, 1531, 9149, 9150, 7291, 7292, 7293, 7294,
+ 7295, 1032, 7297, 7298, 7299, 7300, 7301, 7302,
+ 7303, 7304, 0, 7307, 10710, 10711, 1955, 1955,
+ 10759, 10760, 10716, 4548, 4549, 4550, 1952, 1952,
+ 10764, 10765, 10721, 10722, 3711, 6314, 10679, 10726,
+ 10727, 10728, 10729, 10730, 3719, 3720, 1996, 1996,
+ 1996, 1996, 4428, 4473, 4473, 3728, 1994, 1994,
+ -11266, 3732, 3733, 3734, 0, 0, 0, 0,
+ 0, 0, 0, 3742, 10755, 10756, 1953, 1953,
+ 1998, 1998, 1998, 11730, 11731, 12711, 9397, 3867,
+ 11735, 3869, 6139, 9874, 9875, 9876, 9877, 9878,
+ 9879, 9880, 6139, -873, -873, 7931, -1839, -1839,
+ 7891, 7892, -1839, -1839, -2818, 497, 6028, -1839,
+ -1839, -66, -66, -66, -66, 2522, 2523, -6280,
+ -6280, -6235, -66, -66, -66, 2533, 2534, -6277,
+ -66, -6231, -6231, 781, -1821, -6185, -6231, 3867,
+ -1821, -6231, -1821, 782, 3076, 3873, 2511, -8720,
+ 84, 85, 41, 42, 43, -9688, -9688, -10667,
+ -7352, -1821, -9688, -1821, -4090, -7824, -7824, -7824,
+ -7824, -7824, -7824, -7824, -4082, 2931, 2932, -5871,
+ 3900, 3901, -5828, -5828, 3904, 3905, 4885, 1571,
+ -3959, 3909, 3910, 2138, 2139, 2140, 2141, -446,
+ -446, 8358, 8359, 8315, 2147, 2148, 2149, -449,
+ -449, 8363, 2153, 8319, 8320, 1309, 3912, 8277,
+ 8324, -1773, 3916, 8327, 3918, 1316, -977, -1773,
+ -410, 10822, 2019, 2019, 2064, 2064, 2064, 11796,
+ 11797, 12777, 9463, 3933, 11801, 3935, 6205, 9940,
+ 9941, 9942, 9943, 9944, 9945, 9946, 6205, -807,
+ -807, 7997, -1773, -1773, 7957, 7958, -1773, -1773,
+ -2752, 563, 6094, -1773, -1773, 0, 0, 0,
+ 0, 2588, 2589, -6214, -6214, -6169, 0, 0,
+ 0, 2599, 2600, -6211, 0, -6165, -6165, 847,
+ -1755, -6119, -6165, 3933, -1755, -6165, -1755, 848,
+ 3142, 3939, 2577, -8654, 150, 151, 107, 108,
+ 109, -9622, -9622, -10601, -7286, -1755, -9622, -1755,
+ -4024, -7758, -7758, -7758, -7758, -7758, -7758, -7758,
+ -4016, 2997, 2998, -5805, 3966, 3967, -5762, -5762,
+ 3970, 3971, 4951, 1637, -3893, 3975, 3976, 2204,
+ 2205, 2206, 2207, -380, -380, 8424, 8425, 8381,
+ 2213, 2214, 2215, -383, -383, 8429, 2219, 8385,
+ 8386, 1375, 3978, 8343, 8390, -1707, 3982, 8393,
+ 3984, 1382, -911, -1707, -344, 10888, 2085, 2085,
+ 2130, 2130, 2130, 11862, 11863, 12843, 9529, 3999,
+ 11867, 4001, 6271, 10006, 10007, 4005, -1951, 4007,
+ 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015,
+ 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023,
+ 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031,
+ 11943, 4033, 4034, 4035, 4036, 8637, 4038, 4039,
+ -116, 32767, 32767, 4041, 4042, 4043, 4044, 4045,
+ 2250, 4047, 4048, 4049, 5802, 4051, 4052, 4559,
+ 6119, 4055, 4056, 4057, 4058, 4059, 4060, 4061,
+ -47, 4063, -46, 4065, 4066, 4067, 4068, 4069,
+ -41, -13301, 4072, -9985, -6670, 4075, 4076, 4077,
+ 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085,
+ 4086, 4087, 4088, 4089, 4090, 8741, 4092, 4093,
+ -67, 32767, 32767, 32767, 32767, 32767, 2257, 32767,
+ 2258, 2259, 2260, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2261, 32767, 2262, 32767,
+ 2263, 32767, 2264, 32767, 2265, 32767, 2266, 32767,
+ 2267, 8737, 8738, -26, -26, 8786, 4100, 4101,
+ 8746, 8747, 4104, 4105, 8752, 8753, 32767, 2274,
+ 32767, 2275, 32767, 32767, 32767, 32767, 32767, 32767,
+ 2276, 2277, 32767, 2278, 2279, 32767, 2280, 0,
+ 32767, 2282, 9695, 4109, -3486, -3486, 4112, 4113,
+ 4114, 4115, 4116, 4117, 32767, 32767, 32767, 32767,
+ 32767, 32767, 4118, 4119, 4120, 4121, 4122, 4123,
+ 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131,
+ 4132, 4133, 4134, 4849, 4136, 4137, 4851, 4851,
+ 4140, 4852, 4142, 4143, 4144, 4145, 4146, 4147,
+ 4148, 4149, 4150, 4151, 2293, 4153, 907, 32767,
+ 2295, 4155, 909, 4157, 910, 4159, 911, 4161,
+ 912, 4163, 913, 4165, 914, 32767, 915, 4168,
+ 916, 4170, 917, 4172, 4173, 918, 4175, 4176,
+ 4177, 4178, 4179, 4180, 4181, 4182, 4183, 4184,
+ 4185, 2309, 4186, 4187, 4188, 4189, 2312, 2313,
+ 32767, 2314, 4190, 4191, -2632, 2317, 4193, 32767,
+ 4194, 4195, 4196, 4197, 4198, 4199, 4200, 4201,
+ 4202, 4203, 4204, 4205, 4206, 0, 0, 4209,
+ 4210, 4211, 4212, 4213, 2318, 4215, 4216, 2319,
+ 2320, 2321, 2322, 4221, 4222, 4223, 2323, 2324,
+ 4226, 4227, 4228, 4229, 4230, 4231, 5551, 4233,
+ 4234, 4235, 4236, 4237, 4238, 4239, 4240, 4241,
+ 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249,
+ 4250, 4251, 4252, 4253, 4254, 4255, 4256, 4257,
+ 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265,
+ 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273,
+ 4274, 4275, -3342, -3342, -3342, 4276, 4277, 2418,
+ 2419, -2784, -2784, -2740, -2740, -2740, -2740, -2740,
+ -2784, -2784, -2784, -2784, 4628, -2784, -2784, -2784,
+ -2784, -2784, -2784, -2784, -2784, -2784, -2784, -2784,
+ -2784, 2958, 2959, 2960, 2961, 2962, 2963, 2964,
+ 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972,
+ 2973, -4644, -4644, -2784, -2784, 2420, 2421, 2378,
+ 2379, 2380, 2381, 2382, 2427, 2428, 2429, 2430,
+ -4981, 2432, 2433, 2434, 2435, 2436, 2437, 2438,
+ 2439, 2440, 2441, 2442, 2443, -3298, -3298, -3298,
+ -3298, -3298, -3298, -3298, -3298, -3298, -3298, -3298,
+ -3298, -3298, -3298, -3298, -3298, 4320, 4321, 2462,
+ 4365, 4366, 4367, -2699, -2699, -2699, -2699, -2699,
+ -2743, -2743, -2743, -2743, 4669, -2743, -2743, -2743,
+ -2743, 4382, 4383, 4384, 4385, 4386, 4387, 4388,
+ 4389, 4390, 4391, 4392, 4393, 4394, 4395, 4396,
+ 4397, 4398, 4399, 4400, 4401, 4402, 4403, 4404,
+ 4405, 4406, 4407, 4408, 4409, 4410, 4411, 4412,
+ 4413, 4414, 4415, 4416, 4417, 4418, 4419, 4420,
+ 4421, 4422, 4423, 4424, 4425, 4426, 4427, 4428,
+ 4429, 816, 816, 816, -6459, 816, 816, -6418,
+ 816, 816, 816, 816, 816, -4552, 7194, 4444,
+ 4445, 4446, 4447, 4448, 4449, 4450, 4451, 4452,
+ 4453, 4454, 4455, 816, 816, 1675, 7790, 7790,
+ 816, 816, 4463, -1589, -1589, 4466, -1589, -1589,
+ -1589, -1589, 704, -1589, -2385, 4474, 4475, 817,
+ 4477, 4478, 2948, 2949, 2950, 2951, 2952, 2953,
+ 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961,
+ 2962, -4655, -4655, -2795, -2795, -2795, -2795, -2795,
+ 3469, -2795, -2795, -2795, -2795, -2795, -2795, -2795,
+ -2795, 4510, -2796, -6198, -6198, 2559, 2560, -6243,
+ -6243, -6198, -6198, -6198, -6198, 2567, 2568, -6243,
+ -6243, -6198, -6198, -6198, -6154, -6154, -6200, -6200,
+ -6200, -6200, -6200, -6200, -6200, 2535, 2536, 2537,
+ 2538, 107, 63, 2541, 2542, 2543, 2544, 15805,
+ 12491, 12492, 32767, 4540, 4541, 4542, 4543, 4544,
+ 4545, 4546, 2548, -6208, -6208, 2596, 2597, 2553,
+ 2554, 2555, 2556, -6208, -6208, 2604, 2605, 2561,
+ 2562, 2563, 2520, 2521, 2568, 2569, 2570, 2571,
+ 2572, 2573, 2574, -6160, -6160, -6160, -6160, -3728,
+ -3683, -6160, -6160, -6160, -6160, -19420, -16105, -16105,
+ -12790, -12790, -9475, -9475, -6160, -6160, -6160, -6160,
+ -6160, 32767, 2597, -6206, -6206, -6161, -6161, -6161,
+ -6161, 2604, 2605, -6206, -6206, -6161, -6161, -6161,
+ -6161, -6161, -6161, -6161, -6161, -6161, -6161, -6161,
+ -6161, 2574, 2575, 2576, 2577, 146, 102, 2580,
+ 2581, 2582, 2583, 15844, 12530, 12531, 9217, 9218,
+ 5904, 5905, 2591, 2592, 2593, 2594, 2595, -6161,
+ -6161, 2643, 2644, 2600, 2601, 2602, 2603, -6161,
+ -6161, 2651, 2652, 2608, 2609, 2610, 2611, 2612,
+ 2613, 2614, 2615, 2616, 2617, 2618, 2619, -6115,
+ -6115, -6115, -6115, -3683, -3638, -6115, -6115, -6115,
+ -6115, -19375, -16060, -16060, -12745, -12745, -9430, -9430,
+ -6115, -6115, -6115, -6115, -6115, 2642, 2643, -6160,
+ -6160, -6115, -6115, -6115, -6115, 2650, 2651, -6160,
+ -6160, -6115, -3460, -3459, -3458, -3457, -1026, -3455,
+ -3454, -6160, -3452, -6160, -12117, -6160, -12117, -6160,
+ -2848, -2848, -2848, 6893, 891, -5065, -2846, -6160,
+ -2845, -1264, 0, 9264, 5950, 5951, 2637, 2638,
+ 2639, 2640, 2641, -6115, -6115, 2689, 2690, 2646,
+ 2647, 2648, 2649, -6115, -6115, 2697, 2698, 2654,
+ 0, 0, 0, 0, -2430, 0, 0, 2707,
+ 0, 2709, 8667, 2711, 8669, 2713, -598, -597,
+ -596, -10336, -4333, 1624, -594, 2721, -593, -2173,
+ 2724, -592, -591, -590, -589, -588, -587, -586,
+ 12, -584, -583, 2735, -582, 2737, -581, 2739,
+ 2740, -580, -6115, -6115, -6115, 2745, 2746, -6115,
+ -6115, 0, 0, 0, 2752, 2753, 2754, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6247, 6248, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,
+ };
+
+ const unsigned char *k = (const unsigned char *) key;
+ size_t keylen = 4;
+ uint32 a = 0;
+ uint32 b = 1;
+
+ while (keylen--)
+ {
+ unsigned char c = *k++;
+
+ a = a * 257 + c;
+ b = b * 8191 + c;
+ }
+ return h[a % 13209] + h[b % 13209];
+}
+
+/* Hash lookup information for decomposition */
+static const pg_unicode_decompinfo UnicodeDecompInfo =
+{
+ UnicodeDecompMain,
+ Decomp_hash_func,
+ 6604
+};
diff --git a/src/tools/pgindent/exclude_file_patterns b/src/tools/pgindent/exclude_file_patterns
index 86bdd9d6dc..f7e771a7e6 100644
--- a/src/tools/pgindent/exclude_file_patterns
+++ b/src/tools/pgindent/exclude_file_patterns
@@ -18,9 +18,10 @@ src/backend/utils/fmgrprotos\.h$
# they match pgindent style, they'd look worse not better, so exclude them.
kwlist_d\.h$
#
-# This is generated by the scripts from src/common/unicode/. It uses
+# These are generated by the scripts from src/common/unicode/. They use
# hash functions generated by PerfectHash.pm whose format looks worse with
# pgindent.
+src/include/common/unicode_norm_table\.h$
src/include/common/unicode_normprops_table\.h$
#
# Exclude ecpg test files to avoid breaking the ecpg regression tests
--
2.22.0
v2-0002-Speed-up-unicode-recomposition.patchapplication/x-patch; name=v2-0002-Speed-up-unicode-recomposition.patchDownload
From ed51e0bfa6269df197773e03f14bd13f4a373331 Mon Sep 17 00:00:00 2001
From: John Naylor <john.naylor@2ndquadrant.com>
Date: Thu, 15 Oct 2020 13:20:41 -0400
Subject: [PATCH v2 2/2] Speed up unicode recomposition.
Similar to decomposition, use a perfect hash function for speed.
The performance increase is much higher in this casebecause the
former implementation used linear search. This makes normalizing
to NFC and NFKC 50-75x faster in the backend, while adding only
6kB to the binary. While this is small, keep out of the frontend
since its use is not performance critical.
---
.../unicode/generate-unicode_norm_table.pl | 104 ++
src/common/unicode_norm.c | 32 +-
src/include/common/unicode_norm_table.h | 1219 +++++++++++++++++
3 files changed, 1353 insertions(+), 2 deletions(-)
diff --git a/src/common/unicode/generate-unicode_norm_table.pl b/src/common/unicode/generate-unicode_norm_table.pl
index 05eec2bf21..fda0198639 100644
--- a/src/common/unicode/generate-unicode_norm_table.pl
+++ b/src/common/unicode/generate-unicode_norm_table.pl
@@ -104,6 +104,7 @@ typedef struct
typedef int (*cp_hash_func) (const void *key);
/* Information for lookups with perfect hash functions */
+
typedef struct
{
const pg_unicode_decomposition *decomps;
@@ -111,6 +112,13 @@ typedef struct
int num_decomps;
} pg_unicode_decompinfo;
+typedef struct
+{
+ const uint16 *inverse_lookup;
+ cp_hash_func hash;
+ int num_recomps;
+} pg_unicode_recompinfo;
+
#define DECOMP_NO_COMPOSE 0x80 /* don't use for re-composition */
#define DECOMP_INLINE 0x40 /* decomposition is stored inline in
* dec_index */
@@ -129,6 +137,8 @@ HEADER
my $decomp_index = 0;
my $decomp_string = "";
my @dec_cp_packed;
+my $main_index = 0;
+my @rec_info;
my $last_code = $characters[-1]->{code};
foreach my $char (@characters)
@@ -190,6 +200,18 @@ foreach my $char (@characters)
}
}
}
+
+ # Save info for recomposeable codepoints.
+ # XXX This must match the DECOMPOSITION_NO_COMPOSE C macro above!
+ # See the inverse lookup in recompose_code() found in
+ # common/unicode_norm.c.
+ if (!($flags =~ /DECOMP_COMPAT/ || $flags =~ /DECOMP_NO_COMPOSE/))
+ {
+ push @rec_info, {code => $code,
+ main_index => $main_index,
+ first => $first_decomp,
+ second => $decomp_elts[0]};
+ }
}
if ($decomp_size == 0)
@@ -228,6 +250,8 @@ foreach my $char (@characters)
print $OUTPUT "\t/* $comment */" if ($comment ne "");
print $OUTPUT "\n";
+
+ $main_index++;
}
print $OUTPUT "\n};\n\n";
@@ -259,4 +283,84 @@ static const pg_unicode_decompinfo UnicodeDecompInfo =
};
HEADER
+# Find the lowest codepoint that decomposes to each recomposeable
+# code pair and create a mapping to it.
+my $recomp_string = "";
+my @rec_cp_packed;
+my %seenit;
+foreach my $rec (sort recomp_sort @rec_info)
+{
+ # The hashkey is a 64 bit integer containing the bytes from
+ # both codepoints.
+ my $hashkey = (hex($rec->{first}) << 32) | hex($rec->{second});
+ next if $seenit{$hashkey};
+
+ # Save the hash key bytes as a string in network order
+ push @rec_cp_packed, pack('Q>', $hashkey);
+
+ # Append inverse lookup element
+ $recomp_string .= sprintf "\t/* %s + %s -> %s */ %s,\n",
+ $rec->{first},
+ $rec->{second},
+ $rec->{code},
+ $rec->{main_index};
+
+ $seenit{$hashkey} = 1;
+}
+
+# Remove trailing comma and newline
+substr($recomp_string, -2) = "";
+
+# Emit the inverse lookup array containing indexes into UnicodeDecompMain
+my $num_recomps = scalar @rec_cp_packed;
+print $OUTPUT <<HEADER;
+/* inverse lookup array */
+static const uint16 RecompInverseLookup[$num_recomps] =
+{
+$recomp_string
+};
+HEADER
+
+# Emit the definition of the recomp hash function.
+my $rec_funcname = 'Recomp_hash_func';
+my $rec_func = PerfectHash::generate_hash_function(\@rec_cp_packed, $rec_funcname,
+ fixed_key_length => 8);
+print $OUTPUT "\n/* Perfect hash function for recomposition */\n";
+print $OUTPUT "static $rec_func\n";
+
+# Emit the structure that wraps the hash lookup information into
+# one variable.
+print $OUTPUT <<HEADER;
+/* Hash lookup information for recomposition */
+static const pg_unicode_recompinfo UnicodeRecompInfo =
+{
+ RecompInverseLookup,
+ $rec_funcname,
+ $num_recomps
+};
+HEADER
+
close $OUTPUT;
+
+sub recomp_sort
+{
+ my $a1 = hex($a->{first});
+ my $b1 = hex($b->{first});
+
+ my $a2 = hex($a->{second});
+ my $b2 = hex($b->{second});
+
+ # First sort by first code point
+ return -1 if $a1 < $b1;
+ return 1 if $a1 > $b1;
+
+ # Then the second
+ return -1 if $a2 < $b2;
+ return 1 if $a2 > $b2;
+
+ # Finally by index into UnicodeDecompMain
+ return -1 if $a->{main_index} < $b->{main_index};
+ return 1 if $a->{main_index} > $b->{main_index};
+
+ die "found duplicate entries";
+}
diff --git a/src/common/unicode_norm.c b/src/common/unicode_norm.c
index ee12aa6789..0b0d6b51b9 100644
--- a/src/common/unicode_norm.c
+++ b/src/common/unicode_norm.c
@@ -226,7 +226,7 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
}
else
{
- int i;
+ const pg_unicode_decomposition *entry;
/*
* Do an inverse lookup of the decomposition tables to see if anything
@@ -234,9 +234,36 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
* sub-table of size two, because the start character has already been
* recomposed partially.
*/
+#ifndef FRONTEND
+
+ int h, inv_lookup_index;
+ uint64 hashkey;
+ pg_unicode_recompinfo recompinfo = UnicodeRecompInfo;
+
+ hashkey = pg_hton64(((uint64) start << 32) | (uint64) code);
+ h = recompinfo.hash(&hashkey);
+
+ /* An out-of-range result implies no match */
+ if (h < 0 || h >= recompinfo.num_recomps)
+ return false;
+
+ inv_lookup_index = recompinfo.inverse_lookup[h];
+ entry = &UnicodeDecompMain[inv_lookup_index];
+
+ if (start == UnicodeDecomp_codepoints[entry->dec_index] &&
+ code == UnicodeDecomp_codepoints[entry->dec_index + 1])
+ {
+ *result = entry->codepoint;
+ return true;
+ }
+
+#else
+
+ int i;
+
for (i = 0; i < lengthof(UnicodeDecompMain); i++)
{
- const pg_unicode_decomposition *entry = &UnicodeDecompMain[i];
+ entry = &UnicodeDecompMain[i];
if (DECOMPOSITION_SIZE(entry) != 2)
continue;
@@ -251,6 +278,7 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
return true;
}
}
+#endif
}
return false;
diff --git a/src/include/common/unicode_norm_table.h b/src/include/common/unicode_norm_table.h
index 25cf16f47e..aff5581d05 100644
--- a/src/include/common/unicode_norm_table.h
+++ b/src/include/common/unicode_norm_table.h
@@ -29,6 +29,7 @@ typedef struct
typedef int (*cp_hash_func) (const void *key);
/* Information for lookups with perfect hash functions */
+
typedef struct
{
const pg_unicode_decomposition *decomps;
@@ -36,6 +37,13 @@ typedef struct
int num_decomps;
} pg_unicode_decompinfo;
+typedef struct
+{
+ const uint16 *inverse_lookup;
+ cp_hash_func hash;
+ int num_recomps;
+} pg_unicode_recompinfo;
+
#define DECOMP_NO_COMPOSE 0x80 /* don't use for re-composition */
#define DECOMP_INLINE 0x40 /* decomposition is stored inline in
* dec_index */
@@ -10628,3 +10636,1214 @@ static const pg_unicode_decompinfo UnicodeDecompInfo =
Decomp_hash_func,
6604
};
+/* inverse lookup array */
+static const uint16 RecompInverseLookup[941] =
+{
+ /* 003C + 0338 -> 226E */ 1823,
+ /* 003D + 0338 -> 2260 */ 1820,
+ /* 003E + 0338 -> 226F */ 1824,
+ /* 0041 + 0300 -> 00C0 */ 14,
+ /* 0041 + 0301 -> 00C1 */ 15,
+ /* 0041 + 0302 -> 00C2 */ 16,
+ /* 0041 + 0303 -> 00C3 */ 17,
+ /* 0041 + 0304 -> 0100 */ 67,
+ /* 0041 + 0306 -> 0102 */ 69,
+ /* 0041 + 0307 -> 0226 */ 270,
+ /* 0041 + 0308 -> 00C4 */ 18,
+ /* 0041 + 0309 -> 1EA2 */ 1278,
+ /* 0041 + 030A -> 00C5 */ 19,
+ /* 0041 + 030C -> 01CD */ 194,
+ /* 0041 + 030F -> 0200 */ 240,
+ /* 0041 + 0311 -> 0202 */ 242,
+ /* 0041 + 0323 -> 1EA0 */ 1276,
+ /* 0041 + 0325 -> 1E00 */ 1120,
+ /* 0041 + 0328 -> 0104 */ 71,
+ /* 0042 + 0307 -> 1E02 */ 1122,
+ /* 0042 + 0323 -> 1E04 */ 1124,
+ /* 0042 + 0331 -> 1E06 */ 1126,
+ /* 0043 + 0301 -> 0106 */ 73,
+ /* 0043 + 0302 -> 0108 */ 75,
+ /* 0043 + 0307 -> 010A */ 77,
+ /* 0043 + 030C -> 010C */ 79,
+ /* 0043 + 0327 -> 00C7 */ 20,
+ /* 0044 + 0307 -> 1E0A */ 1130,
+ /* 0044 + 030C -> 010E */ 81,
+ /* 0044 + 0323 -> 1E0C */ 1132,
+ /* 0044 + 0327 -> 1E10 */ 1136,
+ /* 0044 + 032D -> 1E12 */ 1138,
+ /* 0044 + 0331 -> 1E0E */ 1134,
+ /* 0045 + 0300 -> 00C8 */ 21,
+ /* 0045 + 0301 -> 00C9 */ 22,
+ /* 0045 + 0302 -> 00CA */ 23,
+ /* 0045 + 0303 -> 1EBC */ 1304,
+ /* 0045 + 0304 -> 0112 */ 83,
+ /* 0045 + 0306 -> 0114 */ 85,
+ /* 0045 + 0307 -> 0116 */ 87,
+ /* 0045 + 0308 -> 00CB */ 24,
+ /* 0045 + 0309 -> 1EBA */ 1302,
+ /* 0045 + 030C -> 011A */ 91,
+ /* 0045 + 030F -> 0204 */ 244,
+ /* 0045 + 0311 -> 0206 */ 246,
+ /* 0045 + 0323 -> 1EB8 */ 1300,
+ /* 0045 + 0327 -> 0228 */ 272,
+ /* 0045 + 0328 -> 0118 */ 89,
+ /* 0045 + 032D -> 1E18 */ 1144,
+ /* 0045 + 0330 -> 1E1A */ 1146,
+ /* 0046 + 0307 -> 1E1E */ 1150,
+ /* 0047 + 0301 -> 01F4 */ 230,
+ /* 0047 + 0302 -> 011C */ 93,
+ /* 0047 + 0304 -> 1E20 */ 1152,
+ /* 0047 + 0306 -> 011E */ 95,
+ /* 0047 + 0307 -> 0120 */ 97,
+ /* 0047 + 030C -> 01E6 */ 216,
+ /* 0047 + 0327 -> 0122 */ 99,
+ /* 0048 + 0302 -> 0124 */ 101,
+ /* 0048 + 0307 -> 1E22 */ 1154,
+ /* 0048 + 0308 -> 1E26 */ 1158,
+ /* 0048 + 030C -> 021E */ 268,
+ /* 0048 + 0323 -> 1E24 */ 1156,
+ /* 0048 + 0327 -> 1E28 */ 1160,
+ /* 0048 + 032E -> 1E2A */ 1162,
+ /* 0049 + 0300 -> 00CC */ 25,
+ /* 0049 + 0301 -> 00CD */ 26,
+ /* 0049 + 0302 -> 00CE */ 27,
+ /* 0049 + 0303 -> 0128 */ 103,
+ /* 0049 + 0304 -> 012A */ 105,
+ /* 0049 + 0306 -> 012C */ 107,
+ /* 0049 + 0307 -> 0130 */ 111,
+ /* 0049 + 0308 -> 00CF */ 28,
+ /* 0049 + 0309 -> 1EC8 */ 1316,
+ /* 0049 + 030C -> 01CF */ 196,
+ /* 0049 + 030F -> 0208 */ 248,
+ /* 0049 + 0311 -> 020A */ 250,
+ /* 0049 + 0323 -> 1ECA */ 1318,
+ /* 0049 + 0328 -> 012E */ 109,
+ /* 0049 + 0330 -> 1E2C */ 1164,
+ /* 004A + 0302 -> 0134 */ 114,
+ /* 004B + 0301 -> 1E30 */ 1168,
+ /* 004B + 030C -> 01E8 */ 218,
+ /* 004B + 0323 -> 1E32 */ 1170,
+ /* 004B + 0327 -> 0136 */ 116,
+ /* 004B + 0331 -> 1E34 */ 1172,
+ /* 004C + 0301 -> 0139 */ 118,
+ /* 004C + 030C -> 013D */ 122,
+ /* 004C + 0323 -> 1E36 */ 1174,
+ /* 004C + 0327 -> 013B */ 120,
+ /* 004C + 032D -> 1E3C */ 1180,
+ /* 004C + 0331 -> 1E3A */ 1178,
+ /* 004D + 0301 -> 1E3E */ 1182,
+ /* 004D + 0307 -> 1E40 */ 1184,
+ /* 004D + 0323 -> 1E42 */ 1186,
+ /* 004E + 0300 -> 01F8 */ 232,
+ /* 004E + 0301 -> 0143 */ 126,
+ /* 004E + 0303 -> 00D1 */ 29,
+ /* 004E + 0307 -> 1E44 */ 1188,
+ /* 004E + 030C -> 0147 */ 130,
+ /* 004E + 0323 -> 1E46 */ 1190,
+ /* 004E + 0327 -> 0145 */ 128,
+ /* 004E + 032D -> 1E4A */ 1194,
+ /* 004E + 0331 -> 1E48 */ 1192,
+ /* 004F + 0300 -> 00D2 */ 30,
+ /* 004F + 0301 -> 00D3 */ 31,
+ /* 004F + 0302 -> 00D4 */ 32,
+ /* 004F + 0303 -> 00D5 */ 33,
+ /* 004F + 0304 -> 014C */ 133,
+ /* 004F + 0306 -> 014E */ 135,
+ /* 004F + 0307 -> 022E */ 278,
+ /* 004F + 0308 -> 00D6 */ 34,
+ /* 004F + 0309 -> 1ECE */ 1322,
+ /* 004F + 030B -> 0150 */ 137,
+ /* 004F + 030C -> 01D1 */ 198,
+ /* 004F + 030F -> 020C */ 252,
+ /* 004F + 0311 -> 020E */ 254,
+ /* 004F + 031B -> 01A0 */ 181,
+ /* 004F + 0323 -> 1ECC */ 1320,
+ /* 004F + 0328 -> 01EA */ 220,
+ /* 0050 + 0301 -> 1E54 */ 1204,
+ /* 0050 + 0307 -> 1E56 */ 1206,
+ /* 0052 + 0301 -> 0154 */ 139,
+ /* 0052 + 0307 -> 1E58 */ 1208,
+ /* 0052 + 030C -> 0158 */ 143,
+ /* 0052 + 030F -> 0210 */ 256,
+ /* 0052 + 0311 -> 0212 */ 258,
+ /* 0052 + 0323 -> 1E5A */ 1210,
+ /* 0052 + 0327 -> 0156 */ 141,
+ /* 0052 + 0331 -> 1E5E */ 1214,
+ /* 0053 + 0301 -> 015A */ 145,
+ /* 0053 + 0302 -> 015C */ 147,
+ /* 0053 + 0307 -> 1E60 */ 1216,
+ /* 0053 + 030C -> 0160 */ 151,
+ /* 0053 + 0323 -> 1E62 */ 1218,
+ /* 0053 + 0326 -> 0218 */ 264,
+ /* 0053 + 0327 -> 015E */ 149,
+ /* 0054 + 0307 -> 1E6A */ 1226,
+ /* 0054 + 030C -> 0164 */ 155,
+ /* 0054 + 0323 -> 1E6C */ 1228,
+ /* 0054 + 0326 -> 021A */ 266,
+ /* 0054 + 0327 -> 0162 */ 153,
+ /* 0054 + 032D -> 1E70 */ 1232,
+ /* 0054 + 0331 -> 1E6E */ 1230,
+ /* 0055 + 0300 -> 00D9 */ 35,
+ /* 0055 + 0301 -> 00DA */ 36,
+ /* 0055 + 0302 -> 00DB */ 37,
+ /* 0055 + 0303 -> 0168 */ 157,
+ /* 0055 + 0304 -> 016A */ 159,
+ /* 0055 + 0306 -> 016C */ 161,
+ /* 0055 + 0308 -> 00DC */ 38,
+ /* 0055 + 0309 -> 1EE6 */ 1346,
+ /* 0055 + 030A -> 016E */ 163,
+ /* 0055 + 030B -> 0170 */ 165,
+ /* 0055 + 030C -> 01D3 */ 200,
+ /* 0055 + 030F -> 0214 */ 260,
+ /* 0055 + 0311 -> 0216 */ 262,
+ /* 0055 + 031B -> 01AF */ 183,
+ /* 0055 + 0323 -> 1EE4 */ 1344,
+ /* 0055 + 0324 -> 1E72 */ 1234,
+ /* 0055 + 0328 -> 0172 */ 167,
+ /* 0055 + 032D -> 1E76 */ 1238,
+ /* 0055 + 0330 -> 1E74 */ 1236,
+ /* 0056 + 0303 -> 1E7C */ 1244,
+ /* 0056 + 0323 -> 1E7E */ 1246,
+ /* 0057 + 0300 -> 1E80 */ 1248,
+ /* 0057 + 0301 -> 1E82 */ 1250,
+ /* 0057 + 0302 -> 0174 */ 169,
+ /* 0057 + 0307 -> 1E86 */ 1254,
+ /* 0057 + 0308 -> 1E84 */ 1252,
+ /* 0057 + 0323 -> 1E88 */ 1256,
+ /* 0058 + 0307 -> 1E8A */ 1258,
+ /* 0058 + 0308 -> 1E8C */ 1260,
+ /* 0059 + 0300 -> 1EF2 */ 1358,
+ /* 0059 + 0301 -> 00DD */ 39,
+ /* 0059 + 0302 -> 0176 */ 171,
+ /* 0059 + 0303 -> 1EF8 */ 1364,
+ /* 0059 + 0304 -> 0232 */ 282,
+ /* 0059 + 0307 -> 1E8E */ 1262,
+ /* 0059 + 0308 -> 0178 */ 173,
+ /* 0059 + 0309 -> 1EF6 */ 1362,
+ /* 0059 + 0323 -> 1EF4 */ 1360,
+ /* 005A + 0301 -> 0179 */ 174,
+ /* 005A + 0302 -> 1E90 */ 1264,
+ /* 005A + 0307 -> 017B */ 176,
+ /* 005A + 030C -> 017D */ 178,
+ /* 005A + 0323 -> 1E92 */ 1266,
+ /* 005A + 0331 -> 1E94 */ 1268,
+ /* 0061 + 0300 -> 00E0 */ 40,
+ /* 0061 + 0301 -> 00E1 */ 41,
+ /* 0061 + 0302 -> 00E2 */ 42,
+ /* 0061 + 0303 -> 00E3 */ 43,
+ /* 0061 + 0304 -> 0101 */ 68,
+ /* 0061 + 0306 -> 0103 */ 70,
+ /* 0061 + 0307 -> 0227 */ 271,
+ /* 0061 + 0308 -> 00E4 */ 44,
+ /* 0061 + 0309 -> 1EA3 */ 1279,
+ /* 0061 + 030A -> 00E5 */ 45,
+ /* 0061 + 030C -> 01CE */ 195,
+ /* 0061 + 030F -> 0201 */ 241,
+ /* 0061 + 0311 -> 0203 */ 243,
+ /* 0061 + 0323 -> 1EA1 */ 1277,
+ /* 0061 + 0325 -> 1E01 */ 1121,
+ /* 0061 + 0328 -> 0105 */ 72,
+ /* 0062 + 0307 -> 1E03 */ 1123,
+ /* 0062 + 0323 -> 1E05 */ 1125,
+ /* 0062 + 0331 -> 1E07 */ 1127,
+ /* 0063 + 0301 -> 0107 */ 74,
+ /* 0063 + 0302 -> 0109 */ 76,
+ /* 0063 + 0307 -> 010B */ 78,
+ /* 0063 + 030C -> 010D */ 80,
+ /* 0063 + 0327 -> 00E7 */ 46,
+ /* 0064 + 0307 -> 1E0B */ 1131,
+ /* 0064 + 030C -> 010F */ 82,
+ /* 0064 + 0323 -> 1E0D */ 1133,
+ /* 0064 + 0327 -> 1E11 */ 1137,
+ /* 0064 + 032D -> 1E13 */ 1139,
+ /* 0064 + 0331 -> 1E0F */ 1135,
+ /* 0065 + 0300 -> 00E8 */ 47,
+ /* 0065 + 0301 -> 00E9 */ 48,
+ /* 0065 + 0302 -> 00EA */ 49,
+ /* 0065 + 0303 -> 1EBD */ 1305,
+ /* 0065 + 0304 -> 0113 */ 84,
+ /* 0065 + 0306 -> 0115 */ 86,
+ /* 0065 + 0307 -> 0117 */ 88,
+ /* 0065 + 0308 -> 00EB */ 50,
+ /* 0065 + 0309 -> 1EBB */ 1303,
+ /* 0065 + 030C -> 011B */ 92,
+ /* 0065 + 030F -> 0205 */ 245,
+ /* 0065 + 0311 -> 0207 */ 247,
+ /* 0065 + 0323 -> 1EB9 */ 1301,
+ /* 0065 + 0327 -> 0229 */ 273,
+ /* 0065 + 0328 -> 0119 */ 90,
+ /* 0065 + 032D -> 1E19 */ 1145,
+ /* 0065 + 0330 -> 1E1B */ 1147,
+ /* 0066 + 0307 -> 1E1F */ 1151,
+ /* 0067 + 0301 -> 01F5 */ 231,
+ /* 0067 + 0302 -> 011D */ 94,
+ /* 0067 + 0304 -> 1E21 */ 1153,
+ /* 0067 + 0306 -> 011F */ 96,
+ /* 0067 + 0307 -> 0121 */ 98,
+ /* 0067 + 030C -> 01E7 */ 217,
+ /* 0067 + 0327 -> 0123 */ 100,
+ /* 0068 + 0302 -> 0125 */ 102,
+ /* 0068 + 0307 -> 1E23 */ 1155,
+ /* 0068 + 0308 -> 1E27 */ 1159,
+ /* 0068 + 030C -> 021F */ 269,
+ /* 0068 + 0323 -> 1E25 */ 1157,
+ /* 0068 + 0327 -> 1E29 */ 1161,
+ /* 0068 + 032E -> 1E2B */ 1163,
+ /* 0068 + 0331 -> 1E96 */ 1270,
+ /* 0069 + 0300 -> 00EC */ 51,
+ /* 0069 + 0301 -> 00ED */ 52,
+ /* 0069 + 0302 -> 00EE */ 53,
+ /* 0069 + 0303 -> 0129 */ 104,
+ /* 0069 + 0304 -> 012B */ 106,
+ /* 0069 + 0306 -> 012D */ 108,
+ /* 0069 + 0308 -> 00EF */ 54,
+ /* 0069 + 0309 -> 1EC9 */ 1317,
+ /* 0069 + 030C -> 01D0 */ 197,
+ /* 0069 + 030F -> 0209 */ 249,
+ /* 0069 + 0311 -> 020B */ 251,
+ /* 0069 + 0323 -> 1ECB */ 1319,
+ /* 0069 + 0328 -> 012F */ 110,
+ /* 0069 + 0330 -> 1E2D */ 1165,
+ /* 006A + 0302 -> 0135 */ 115,
+ /* 006A + 030C -> 01F0 */ 226,
+ /* 006B + 0301 -> 1E31 */ 1169,
+ /* 006B + 030C -> 01E9 */ 219,
+ /* 006B + 0323 -> 1E33 */ 1171,
+ /* 006B + 0327 -> 0137 */ 117,
+ /* 006B + 0331 -> 1E35 */ 1173,
+ /* 006C + 0301 -> 013A */ 119,
+ /* 006C + 030C -> 013E */ 123,
+ /* 006C + 0323 -> 1E37 */ 1175,
+ /* 006C + 0327 -> 013C */ 121,
+ /* 006C + 032D -> 1E3D */ 1181,
+ /* 006C + 0331 -> 1E3B */ 1179,
+ /* 006D + 0301 -> 1E3F */ 1183,
+ /* 006D + 0307 -> 1E41 */ 1185,
+ /* 006D + 0323 -> 1E43 */ 1187,
+ /* 006E + 0300 -> 01F9 */ 233,
+ /* 006E + 0301 -> 0144 */ 127,
+ /* 006E + 0303 -> 00F1 */ 55,
+ /* 006E + 0307 -> 1E45 */ 1189,
+ /* 006E + 030C -> 0148 */ 131,
+ /* 006E + 0323 -> 1E47 */ 1191,
+ /* 006E + 0327 -> 0146 */ 129,
+ /* 006E + 032D -> 1E4B */ 1195,
+ /* 006E + 0331 -> 1E49 */ 1193,
+ /* 006F + 0300 -> 00F2 */ 56,
+ /* 006F + 0301 -> 00F3 */ 57,
+ /* 006F + 0302 -> 00F4 */ 58,
+ /* 006F + 0303 -> 00F5 */ 59,
+ /* 006F + 0304 -> 014D */ 134,
+ /* 006F + 0306 -> 014F */ 136,
+ /* 006F + 0307 -> 022F */ 279,
+ /* 006F + 0308 -> 00F6 */ 60,
+ /* 006F + 0309 -> 1ECF */ 1323,
+ /* 006F + 030B -> 0151 */ 138,
+ /* 006F + 030C -> 01D2 */ 199,
+ /* 006F + 030F -> 020D */ 253,
+ /* 006F + 0311 -> 020F */ 255,
+ /* 006F + 031B -> 01A1 */ 182,
+ /* 006F + 0323 -> 1ECD */ 1321,
+ /* 006F + 0328 -> 01EB */ 221,
+ /* 0070 + 0301 -> 1E55 */ 1205,
+ /* 0070 + 0307 -> 1E57 */ 1207,
+ /* 0072 + 0301 -> 0155 */ 140,
+ /* 0072 + 0307 -> 1E59 */ 1209,
+ /* 0072 + 030C -> 0159 */ 144,
+ /* 0072 + 030F -> 0211 */ 257,
+ /* 0072 + 0311 -> 0213 */ 259,
+ /* 0072 + 0323 -> 1E5B */ 1211,
+ /* 0072 + 0327 -> 0157 */ 142,
+ /* 0072 + 0331 -> 1E5F */ 1215,
+ /* 0073 + 0301 -> 015B */ 146,
+ /* 0073 + 0302 -> 015D */ 148,
+ /* 0073 + 0307 -> 1E61 */ 1217,
+ /* 0073 + 030C -> 0161 */ 152,
+ /* 0073 + 0323 -> 1E63 */ 1219,
+ /* 0073 + 0326 -> 0219 */ 265,
+ /* 0073 + 0327 -> 015F */ 150,
+ /* 0074 + 0307 -> 1E6B */ 1227,
+ /* 0074 + 0308 -> 1E97 */ 1271,
+ /* 0074 + 030C -> 0165 */ 156,
+ /* 0074 + 0323 -> 1E6D */ 1229,
+ /* 0074 + 0326 -> 021B */ 267,
+ /* 0074 + 0327 -> 0163 */ 154,
+ /* 0074 + 032D -> 1E71 */ 1233,
+ /* 0074 + 0331 -> 1E6F */ 1231,
+ /* 0075 + 0300 -> 00F9 */ 61,
+ /* 0075 + 0301 -> 00FA */ 62,
+ /* 0075 + 0302 -> 00FB */ 63,
+ /* 0075 + 0303 -> 0169 */ 158,
+ /* 0075 + 0304 -> 016B */ 160,
+ /* 0075 + 0306 -> 016D */ 162,
+ /* 0075 + 0308 -> 00FC */ 64,
+ /* 0075 + 0309 -> 1EE7 */ 1347,
+ /* 0075 + 030A -> 016F */ 164,
+ /* 0075 + 030B -> 0171 */ 166,
+ /* 0075 + 030C -> 01D4 */ 201,
+ /* 0075 + 030F -> 0215 */ 261,
+ /* 0075 + 0311 -> 0217 */ 263,
+ /* 0075 + 031B -> 01B0 */ 184,
+ /* 0075 + 0323 -> 1EE5 */ 1345,
+ /* 0075 + 0324 -> 1E73 */ 1235,
+ /* 0075 + 0328 -> 0173 */ 168,
+ /* 0075 + 032D -> 1E77 */ 1239,
+ /* 0075 + 0330 -> 1E75 */ 1237,
+ /* 0076 + 0303 -> 1E7D */ 1245,
+ /* 0076 + 0323 -> 1E7F */ 1247,
+ /* 0077 + 0300 -> 1E81 */ 1249,
+ /* 0077 + 0301 -> 1E83 */ 1251,
+ /* 0077 + 0302 -> 0175 */ 170,
+ /* 0077 + 0307 -> 1E87 */ 1255,
+ /* 0077 + 0308 -> 1E85 */ 1253,
+ /* 0077 + 030A -> 1E98 */ 1272,
+ /* 0077 + 0323 -> 1E89 */ 1257,
+ /* 0078 + 0307 -> 1E8B */ 1259,
+ /* 0078 + 0308 -> 1E8D */ 1261,
+ /* 0079 + 0300 -> 1EF3 */ 1359,
+ /* 0079 + 0301 -> 00FD */ 65,
+ /* 0079 + 0302 -> 0177 */ 172,
+ /* 0079 + 0303 -> 1EF9 */ 1365,
+ /* 0079 + 0304 -> 0233 */ 283,
+ /* 0079 + 0307 -> 1E8F */ 1263,
+ /* 0079 + 0308 -> 00FF */ 66,
+ /* 0079 + 0309 -> 1EF7 */ 1363,
+ /* 0079 + 030A -> 1E99 */ 1273,
+ /* 0079 + 0323 -> 1EF5 */ 1361,
+ /* 007A + 0301 -> 017A */ 175,
+ /* 007A + 0302 -> 1E91 */ 1265,
+ /* 007A + 0307 -> 017C */ 177,
+ /* 007A + 030C -> 017E */ 179,
+ /* 007A + 0323 -> 1E93 */ 1267,
+ /* 007A + 0331 -> 1E95 */ 1269,
+ /* 00A8 + 0300 -> 1FED */ 1584,
+ /* 00A8 + 0301 -> 0385 */ 419,
+ /* 00A8 + 0342 -> 1FC1 */ 1544,
+ /* 00C2 + 0300 -> 1EA6 */ 1282,
+ /* 00C2 + 0301 -> 1EA4 */ 1280,
+ /* 00C2 + 0303 -> 1EAA */ 1286,
+ /* 00C2 + 0309 -> 1EA8 */ 1284,
+ /* 00C4 + 0304 -> 01DE */ 210,
+ /* 00C5 + 0301 -> 01FA */ 234,
+ /* 00C6 + 0301 -> 01FC */ 236,
+ /* 00C6 + 0304 -> 01E2 */ 214,
+ /* 00C7 + 0301 -> 1E08 */ 1128,
+ /* 00CA + 0300 -> 1EC0 */ 1308,
+ /* 00CA + 0301 -> 1EBE */ 1306,
+ /* 00CA + 0303 -> 1EC4 */ 1312,
+ /* 00CA + 0309 -> 1EC2 */ 1310,
+ /* 00CF + 0301 -> 1E2E */ 1166,
+ /* 00D4 + 0300 -> 1ED2 */ 1326,
+ /* 00D4 + 0301 -> 1ED0 */ 1324,
+ /* 00D4 + 0303 -> 1ED6 */ 1330,
+ /* 00D4 + 0309 -> 1ED4 */ 1328,
+ /* 00D5 + 0301 -> 1E4C */ 1196,
+ /* 00D5 + 0304 -> 022C */ 276,
+ /* 00D5 + 0308 -> 1E4E */ 1198,
+ /* 00D6 + 0304 -> 022A */ 274,
+ /* 00D8 + 0301 -> 01FE */ 238,
+ /* 00DC + 0300 -> 01DB */ 208,
+ /* 00DC + 0301 -> 01D7 */ 204,
+ /* 00DC + 0304 -> 01D5 */ 202,
+ /* 00DC + 030C -> 01D9 */ 206,
+ /* 00E2 + 0300 -> 1EA7 */ 1283,
+ /* 00E2 + 0301 -> 1EA5 */ 1281,
+ /* 00E2 + 0303 -> 1EAB */ 1287,
+ /* 00E2 + 0309 -> 1EA9 */ 1285,
+ /* 00E4 + 0304 -> 01DF */ 211,
+ /* 00E5 + 0301 -> 01FB */ 235,
+ /* 00E6 + 0301 -> 01FD */ 237,
+ /* 00E6 + 0304 -> 01E3 */ 215,
+ /* 00E7 + 0301 -> 1E09 */ 1129,
+ /* 00EA + 0300 -> 1EC1 */ 1309,
+ /* 00EA + 0301 -> 1EBF */ 1307,
+ /* 00EA + 0303 -> 1EC5 */ 1313,
+ /* 00EA + 0309 -> 1EC3 */ 1311,
+ /* 00EF + 0301 -> 1E2F */ 1167,
+ /* 00F4 + 0300 -> 1ED3 */ 1327,
+ /* 00F4 + 0301 -> 1ED1 */ 1325,
+ /* 00F4 + 0303 -> 1ED7 */ 1331,
+ /* 00F4 + 0309 -> 1ED5 */ 1329,
+ /* 00F5 + 0301 -> 1E4D */ 1197,
+ /* 00F5 + 0304 -> 022D */ 277,
+ /* 00F5 + 0308 -> 1E4F */ 1199,
+ /* 00F6 + 0304 -> 022B */ 275,
+ /* 00F8 + 0301 -> 01FF */ 239,
+ /* 00FC + 0300 -> 01DC */ 209,
+ /* 00FC + 0301 -> 01D8 */ 205,
+ /* 00FC + 0304 -> 01D6 */ 203,
+ /* 00FC + 030C -> 01DA */ 207,
+ /* 0102 + 0300 -> 1EB0 */ 1292,
+ /* 0102 + 0301 -> 1EAE */ 1290,
+ /* 0102 + 0303 -> 1EB4 */ 1296,
+ /* 0102 + 0309 -> 1EB2 */ 1294,
+ /* 0103 + 0300 -> 1EB1 */ 1293,
+ /* 0103 + 0301 -> 1EAF */ 1291,
+ /* 0103 + 0303 -> 1EB5 */ 1297,
+ /* 0103 + 0309 -> 1EB3 */ 1295,
+ /* 0112 + 0300 -> 1E14 */ 1140,
+ /* 0112 + 0301 -> 1E16 */ 1142,
+ /* 0113 + 0300 -> 1E15 */ 1141,
+ /* 0113 + 0301 -> 1E17 */ 1143,
+ /* 014C + 0300 -> 1E50 */ 1200,
+ /* 014C + 0301 -> 1E52 */ 1202,
+ /* 014D + 0300 -> 1E51 */ 1201,
+ /* 014D + 0301 -> 1E53 */ 1203,
+ /* 015A + 0307 -> 1E64 */ 1220,
+ /* 015B + 0307 -> 1E65 */ 1221,
+ /* 0160 + 0307 -> 1E66 */ 1222,
+ /* 0161 + 0307 -> 1E67 */ 1223,
+ /* 0168 + 0301 -> 1E78 */ 1240,
+ /* 0169 + 0301 -> 1E79 */ 1241,
+ /* 016A + 0308 -> 1E7A */ 1242,
+ /* 016B + 0308 -> 1E7B */ 1243,
+ /* 017F + 0307 -> 1E9B */ 1275,
+ /* 01A0 + 0300 -> 1EDC */ 1336,
+ /* 01A0 + 0301 -> 1EDA */ 1334,
+ /* 01A0 + 0303 -> 1EE0 */ 1340,
+ /* 01A0 + 0309 -> 1EDE */ 1338,
+ /* 01A0 + 0323 -> 1EE2 */ 1342,
+ /* 01A1 + 0300 -> 1EDD */ 1337,
+ /* 01A1 + 0301 -> 1EDB */ 1335,
+ /* 01A1 + 0303 -> 1EE1 */ 1341,
+ /* 01A1 + 0309 -> 1EDF */ 1339,
+ /* 01A1 + 0323 -> 1EE3 */ 1343,
+ /* 01AF + 0300 -> 1EEA */ 1350,
+ /* 01AF + 0301 -> 1EE8 */ 1348,
+ /* 01AF + 0303 -> 1EEE */ 1354,
+ /* 01AF + 0309 -> 1EEC */ 1352,
+ /* 01AF + 0323 -> 1EF0 */ 1356,
+ /* 01B0 + 0300 -> 1EEB */ 1351,
+ /* 01B0 + 0301 -> 1EE9 */ 1349,
+ /* 01B0 + 0303 -> 1EEF */ 1355,
+ /* 01B0 + 0309 -> 1EED */ 1353,
+ /* 01B0 + 0323 -> 1EF1 */ 1357,
+ /* 01B7 + 030C -> 01EE */ 224,
+ /* 01EA + 0304 -> 01EC */ 222,
+ /* 01EB + 0304 -> 01ED */ 223,
+ /* 0226 + 0304 -> 01E0 */ 212,
+ /* 0227 + 0304 -> 01E1 */ 213,
+ /* 0228 + 0306 -> 1E1C */ 1148,
+ /* 0229 + 0306 -> 1E1D */ 1149,
+ /* 022E + 0304 -> 0230 */ 280,
+ /* 022F + 0304 -> 0231 */ 281,
+ /* 0292 + 030C -> 01EF */ 225,
+ /* 0391 + 0300 -> 1FBA */ 1537,
+ /* 0391 + 0301 -> 0386 */ 420,
+ /* 0391 + 0304 -> 1FB9 */ 1536,
+ /* 0391 + 0306 -> 1FB8 */ 1535,
+ /* 0391 + 0313 -> 1F08 */ 1374,
+ /* 0391 + 0314 -> 1F09 */ 1375,
+ /* 0391 + 0345 -> 1FBC */ 1539,
+ /* 0395 + 0300 -> 1FC8 */ 1550,
+ /* 0395 + 0301 -> 0388 */ 422,
+ /* 0395 + 0313 -> 1F18 */ 1388,
+ /* 0395 + 0314 -> 1F19 */ 1389,
+ /* 0397 + 0300 -> 1FCA */ 1552,
+ /* 0397 + 0301 -> 0389 */ 423,
+ /* 0397 + 0313 -> 1F28 */ 1402,
+ /* 0397 + 0314 -> 1F29 */ 1403,
+ /* 0397 + 0345 -> 1FCC */ 1554,
+ /* 0399 + 0300 -> 1FDA */ 1566,
+ /* 0399 + 0301 -> 038A */ 424,
+ /* 0399 + 0304 -> 1FD9 */ 1565,
+ /* 0399 + 0306 -> 1FD8 */ 1564,
+ /* 0399 + 0308 -> 03AA */ 429,
+ /* 0399 + 0313 -> 1F38 */ 1418,
+ /* 0399 + 0314 -> 1F39 */ 1419,
+ /* 039F + 0300 -> 1FF8 */ 1592,
+ /* 039F + 0301 -> 038C */ 425,
+ /* 039F + 0313 -> 1F48 */ 1432,
+ /* 039F + 0314 -> 1F49 */ 1433,
+ /* 03A1 + 0314 -> 1FEC */ 1583,
+ /* 03A5 + 0300 -> 1FEA */ 1581,
+ /* 03A5 + 0301 -> 038E */ 426,
+ /* 03A5 + 0304 -> 1FE9 */ 1580,
+ /* 03A5 + 0306 -> 1FE8 */ 1579,
+ /* 03A5 + 0308 -> 03AB */ 430,
+ /* 03A5 + 0314 -> 1F59 */ 1446,
+ /* 03A9 + 0300 -> 1FFA */ 1594,
+ /* 03A9 + 0301 -> 038F */ 427,
+ /* 03A9 + 0313 -> 1F68 */ 1458,
+ /* 03A9 + 0314 -> 1F69 */ 1459,
+ /* 03A9 + 0345 -> 1FFC */ 1596,
+ /* 03AC + 0345 -> 1FB4 */ 1532,
+ /* 03AE + 0345 -> 1FC4 */ 1547,
+ /* 03B1 + 0300 -> 1F70 */ 1466,
+ /* 03B1 + 0301 -> 03AC */ 431,
+ /* 03B1 + 0304 -> 1FB1 */ 1529,
+ /* 03B1 + 0306 -> 1FB0 */ 1528,
+ /* 03B1 + 0313 -> 1F00 */ 1366,
+ /* 03B1 + 0314 -> 1F01 */ 1367,
+ /* 03B1 + 0342 -> 1FB6 */ 1533,
+ /* 03B1 + 0345 -> 1FB3 */ 1531,
+ /* 03B5 + 0300 -> 1F72 */ 1468,
+ /* 03B5 + 0301 -> 03AD */ 432,
+ /* 03B5 + 0313 -> 1F10 */ 1382,
+ /* 03B5 + 0314 -> 1F11 */ 1383,
+ /* 03B7 + 0300 -> 1F74 */ 1470,
+ /* 03B7 + 0301 -> 03AE */ 433,
+ /* 03B7 + 0313 -> 1F20 */ 1394,
+ /* 03B7 + 0314 -> 1F21 */ 1395,
+ /* 03B7 + 0342 -> 1FC6 */ 1548,
+ /* 03B7 + 0345 -> 1FC3 */ 1546,
+ /* 03B9 + 0300 -> 1F76 */ 1472,
+ /* 03B9 + 0301 -> 03AF */ 434,
+ /* 03B9 + 0304 -> 1FD1 */ 1559,
+ /* 03B9 + 0306 -> 1FD0 */ 1558,
+ /* 03B9 + 0308 -> 03CA */ 436,
+ /* 03B9 + 0313 -> 1F30 */ 1410,
+ /* 03B9 + 0314 -> 1F31 */ 1411,
+ /* 03B9 + 0342 -> 1FD6 */ 1562,
+ /* 03BF + 0300 -> 1F78 */ 1474,
+ /* 03BF + 0301 -> 03CC */ 438,
+ /* 03BF + 0313 -> 1F40 */ 1426,
+ /* 03BF + 0314 -> 1F41 */ 1427,
+ /* 03C1 + 0313 -> 1FE4 */ 1575,
+ /* 03C1 + 0314 -> 1FE5 */ 1576,
+ /* 03C5 + 0300 -> 1F7A */ 1476,
+ /* 03C5 + 0301 -> 03CD */ 439,
+ /* 03C5 + 0304 -> 1FE1 */ 1572,
+ /* 03C5 + 0306 -> 1FE0 */ 1571,
+ /* 03C5 + 0308 -> 03CB */ 437,
+ /* 03C5 + 0313 -> 1F50 */ 1438,
+ /* 03C5 + 0314 -> 1F51 */ 1439,
+ /* 03C5 + 0342 -> 1FE6 */ 1577,
+ /* 03C9 + 0300 -> 1F7C */ 1478,
+ /* 03C9 + 0301 -> 03CE */ 440,
+ /* 03C9 + 0313 -> 1F60 */ 1450,
+ /* 03C9 + 0314 -> 1F61 */ 1451,
+ /* 03C9 + 0342 -> 1FF6 */ 1590,
+ /* 03C9 + 0345 -> 1FF3 */ 1588,
+ /* 03CA + 0300 -> 1FD2 */ 1560,
+ /* 03CA + 0301 -> 0390 */ 428,
+ /* 03CA + 0342 -> 1FD7 */ 1563,
+ /* 03CB + 0300 -> 1FE2 */ 1573,
+ /* 03CB + 0301 -> 03B0 */ 435,
+ /* 03CB + 0342 -> 1FE7 */ 1578,
+ /* 03CE + 0345 -> 1FF4 */ 1589,
+ /* 03D2 + 0301 -> 03D3 */ 444,
+ /* 03D2 + 0308 -> 03D4 */ 445,
+ /* 0406 + 0308 -> 0407 */ 457,
+ /* 0410 + 0306 -> 04D0 */ 479,
+ /* 0410 + 0308 -> 04D2 */ 481,
+ /* 0413 + 0301 -> 0403 */ 456,
+ /* 0415 + 0300 -> 0400 */ 454,
+ /* 0415 + 0306 -> 04D6 */ 483,
+ /* 0415 + 0308 -> 0401 */ 455,
+ /* 0416 + 0306 -> 04C1 */ 477,
+ /* 0416 + 0308 -> 04DC */ 487,
+ /* 0417 + 0308 -> 04DE */ 489,
+ /* 0418 + 0300 -> 040D */ 459,
+ /* 0418 + 0304 -> 04E2 */ 491,
+ /* 0418 + 0306 -> 0419 */ 461,
+ /* 0418 + 0308 -> 04E4 */ 493,
+ /* 041A + 0301 -> 040C */ 458,
+ /* 041E + 0308 -> 04E6 */ 495,
+ /* 0423 + 0304 -> 04EE */ 501,
+ /* 0423 + 0306 -> 040E */ 460,
+ /* 0423 + 0308 -> 04F0 */ 503,
+ /* 0423 + 030B -> 04F2 */ 505,
+ /* 0427 + 0308 -> 04F4 */ 507,
+ /* 042B + 0308 -> 04F8 */ 509,
+ /* 042D + 0308 -> 04EC */ 499,
+ /* 0430 + 0306 -> 04D1 */ 480,
+ /* 0430 + 0308 -> 04D3 */ 482,
+ /* 0433 + 0301 -> 0453 */ 465,
+ /* 0435 + 0300 -> 0450 */ 463,
+ /* 0435 + 0306 -> 04D7 */ 484,
+ /* 0435 + 0308 -> 0451 */ 464,
+ /* 0436 + 0306 -> 04C2 */ 478,
+ /* 0436 + 0308 -> 04DD */ 488,
+ /* 0437 + 0308 -> 04DF */ 490,
+ /* 0438 + 0300 -> 045D */ 468,
+ /* 0438 + 0304 -> 04E3 */ 492,
+ /* 0438 + 0306 -> 0439 */ 462,
+ /* 0438 + 0308 -> 04E5 */ 494,
+ /* 043A + 0301 -> 045C */ 467,
+ /* 043E + 0308 -> 04E7 */ 496,
+ /* 0443 + 0304 -> 04EF */ 502,
+ /* 0443 + 0306 -> 045E */ 469,
+ /* 0443 + 0308 -> 04F1 */ 504,
+ /* 0443 + 030B -> 04F3 */ 506,
+ /* 0447 + 0308 -> 04F5 */ 508,
+ /* 044B + 0308 -> 04F9 */ 510,
+ /* 044D + 0308 -> 04ED */ 500,
+ /* 0456 + 0308 -> 0457 */ 466,
+ /* 0474 + 030F -> 0476 */ 470,
+ /* 0475 + 030F -> 0477 */ 471,
+ /* 04D8 + 0308 -> 04DA */ 485,
+ /* 04D9 + 0308 -> 04DB */ 486,
+ /* 04E8 + 0308 -> 04EA */ 497,
+ /* 04E9 + 0308 -> 04EB */ 498,
+ /* 0627 + 0653 -> 0622 */ 574,
+ /* 0627 + 0654 -> 0623 */ 575,
+ /* 0627 + 0655 -> 0625 */ 577,
+ /* 0648 + 0654 -> 0624 */ 576,
+ /* 064A + 0654 -> 0626 */ 578,
+ /* 06C1 + 0654 -> 06C2 */ 606,
+ /* 06D2 + 0654 -> 06D3 */ 607,
+ /* 06D5 + 0654 -> 06C0 */ 605,
+ /* 0928 + 093C -> 0929 */ 733,
+ /* 0930 + 093C -> 0931 */ 734,
+ /* 0933 + 093C -> 0934 */ 735,
+ /* 09C7 + 09BE -> 09CB */ 751,
+ /* 09C7 + 09D7 -> 09CC */ 752,
+ /* 0B47 + 0B3E -> 0B4B */ 770,
+ /* 0B47 + 0B56 -> 0B48 */ 769,
+ /* 0B47 + 0B57 -> 0B4C */ 771,
+ /* 0B92 + 0BD7 -> 0B94 */ 775,
+ /* 0BC6 + 0BBE -> 0BCA */ 776,
+ /* 0BC6 + 0BD7 -> 0BCC */ 778,
+ /* 0BC7 + 0BBE -> 0BCB */ 777,
+ /* 0C46 + 0C56 -> 0C48 */ 780,
+ /* 0CBF + 0CD5 -> 0CC0 */ 785,
+ /* 0CC6 + 0CC2 -> 0CCA */ 788,
+ /* 0CC6 + 0CD5 -> 0CC7 */ 786,
+ /* 0CC6 + 0CD6 -> 0CC8 */ 787,
+ /* 0CCA + 0CD5 -> 0CCB */ 789,
+ /* 0D46 + 0D3E -> 0D4A */ 793,
+ /* 0D46 + 0D57 -> 0D4C */ 795,
+ /* 0D47 + 0D3E -> 0D4B */ 794,
+ /* 0DD9 + 0DCA -> 0DDA */ 798,
+ /* 0DD9 + 0DCF -> 0DDC */ 799,
+ /* 0DD9 + 0DDF -> 0DDE */ 801,
+ /* 0DDC + 0DCA -> 0DDD */ 800,
+ /* 1025 + 102E -> 1026 */ 859,
+ /* 1B05 + 1B35 -> 1B06 */ 904,
+ /* 1B07 + 1B35 -> 1B08 */ 905,
+ /* 1B09 + 1B35 -> 1B0A */ 906,
+ /* 1B0B + 1B35 -> 1B0C */ 907,
+ /* 1B0D + 1B35 -> 1B0E */ 908,
+ /* 1B11 + 1B35 -> 1B12 */ 909,
+ /* 1B3A + 1B35 -> 1B3B */ 911,
+ /* 1B3C + 1B35 -> 1B3D */ 912,
+ /* 1B3E + 1B35 -> 1B40 */ 913,
+ /* 1B3F + 1B35 -> 1B41 */ 914,
+ /* 1B42 + 1B35 -> 1B43 */ 915,
+ /* 1E36 + 0304 -> 1E38 */ 1176,
+ /* 1E37 + 0304 -> 1E39 */ 1177,
+ /* 1E5A + 0304 -> 1E5C */ 1212,
+ /* 1E5B + 0304 -> 1E5D */ 1213,
+ /* 1E62 + 0307 -> 1E68 */ 1224,
+ /* 1E63 + 0307 -> 1E69 */ 1225,
+ /* 1EA0 + 0302 -> 1EAC */ 1288,
+ /* 1EA0 + 0306 -> 1EB6 */ 1298,
+ /* 1EA1 + 0302 -> 1EAD */ 1289,
+ /* 1EA1 + 0306 -> 1EB7 */ 1299,
+ /* 1EB8 + 0302 -> 1EC6 */ 1314,
+ /* 1EB9 + 0302 -> 1EC7 */ 1315,
+ /* 1ECC + 0302 -> 1ED8 */ 1332,
+ /* 1ECD + 0302 -> 1ED9 */ 1333,
+ /* 1F00 + 0300 -> 1F02 */ 1368,
+ /* 1F00 + 0301 -> 1F04 */ 1370,
+ /* 1F00 + 0342 -> 1F06 */ 1372,
+ /* 1F00 + 0345 -> 1F80 */ 1480,
+ /* 1F01 + 0300 -> 1F03 */ 1369,
+ /* 1F01 + 0301 -> 1F05 */ 1371,
+ /* 1F01 + 0342 -> 1F07 */ 1373,
+ /* 1F01 + 0345 -> 1F81 */ 1481,
+ /* 1F02 + 0345 -> 1F82 */ 1482,
+ /* 1F03 + 0345 -> 1F83 */ 1483,
+ /* 1F04 + 0345 -> 1F84 */ 1484,
+ /* 1F05 + 0345 -> 1F85 */ 1485,
+ /* 1F06 + 0345 -> 1F86 */ 1486,
+ /* 1F07 + 0345 -> 1F87 */ 1487,
+ /* 1F08 + 0300 -> 1F0A */ 1376,
+ /* 1F08 + 0301 -> 1F0C */ 1378,
+ /* 1F08 + 0342 -> 1F0E */ 1380,
+ /* 1F08 + 0345 -> 1F88 */ 1488,
+ /* 1F09 + 0300 -> 1F0B */ 1377,
+ /* 1F09 + 0301 -> 1F0D */ 1379,
+ /* 1F09 + 0342 -> 1F0F */ 1381,
+ /* 1F09 + 0345 -> 1F89 */ 1489,
+ /* 1F0A + 0345 -> 1F8A */ 1490,
+ /* 1F0B + 0345 -> 1F8B */ 1491,
+ /* 1F0C + 0345 -> 1F8C */ 1492,
+ /* 1F0D + 0345 -> 1F8D */ 1493,
+ /* 1F0E + 0345 -> 1F8E */ 1494,
+ /* 1F0F + 0345 -> 1F8F */ 1495,
+ /* 1F10 + 0300 -> 1F12 */ 1384,
+ /* 1F10 + 0301 -> 1F14 */ 1386,
+ /* 1F11 + 0300 -> 1F13 */ 1385,
+ /* 1F11 + 0301 -> 1F15 */ 1387,
+ /* 1F18 + 0300 -> 1F1A */ 1390,
+ /* 1F18 + 0301 -> 1F1C */ 1392,
+ /* 1F19 + 0300 -> 1F1B */ 1391,
+ /* 1F19 + 0301 -> 1F1D */ 1393,
+ /* 1F20 + 0300 -> 1F22 */ 1396,
+ /* 1F20 + 0301 -> 1F24 */ 1398,
+ /* 1F20 + 0342 -> 1F26 */ 1400,
+ /* 1F20 + 0345 -> 1F90 */ 1496,
+ /* 1F21 + 0300 -> 1F23 */ 1397,
+ /* 1F21 + 0301 -> 1F25 */ 1399,
+ /* 1F21 + 0342 -> 1F27 */ 1401,
+ /* 1F21 + 0345 -> 1F91 */ 1497,
+ /* 1F22 + 0345 -> 1F92 */ 1498,
+ /* 1F23 + 0345 -> 1F93 */ 1499,
+ /* 1F24 + 0345 -> 1F94 */ 1500,
+ /* 1F25 + 0345 -> 1F95 */ 1501,
+ /* 1F26 + 0345 -> 1F96 */ 1502,
+ /* 1F27 + 0345 -> 1F97 */ 1503,
+ /* 1F28 + 0300 -> 1F2A */ 1404,
+ /* 1F28 + 0301 -> 1F2C */ 1406,
+ /* 1F28 + 0342 -> 1F2E */ 1408,
+ /* 1F28 + 0345 -> 1F98 */ 1504,
+ /* 1F29 + 0300 -> 1F2B */ 1405,
+ /* 1F29 + 0301 -> 1F2D */ 1407,
+ /* 1F29 + 0342 -> 1F2F */ 1409,
+ /* 1F29 + 0345 -> 1F99 */ 1505,
+ /* 1F2A + 0345 -> 1F9A */ 1506,
+ /* 1F2B + 0345 -> 1F9B */ 1507,
+ /* 1F2C + 0345 -> 1F9C */ 1508,
+ /* 1F2D + 0345 -> 1F9D */ 1509,
+ /* 1F2E + 0345 -> 1F9E */ 1510,
+ /* 1F2F + 0345 -> 1F9F */ 1511,
+ /* 1F30 + 0300 -> 1F32 */ 1412,
+ /* 1F30 + 0301 -> 1F34 */ 1414,
+ /* 1F30 + 0342 -> 1F36 */ 1416,
+ /* 1F31 + 0300 -> 1F33 */ 1413,
+ /* 1F31 + 0301 -> 1F35 */ 1415,
+ /* 1F31 + 0342 -> 1F37 */ 1417,
+ /* 1F38 + 0300 -> 1F3A */ 1420,
+ /* 1F38 + 0301 -> 1F3C */ 1422,
+ /* 1F38 + 0342 -> 1F3E */ 1424,
+ /* 1F39 + 0300 -> 1F3B */ 1421,
+ /* 1F39 + 0301 -> 1F3D */ 1423,
+ /* 1F39 + 0342 -> 1F3F */ 1425,
+ /* 1F40 + 0300 -> 1F42 */ 1428,
+ /* 1F40 + 0301 -> 1F44 */ 1430,
+ /* 1F41 + 0300 -> 1F43 */ 1429,
+ /* 1F41 + 0301 -> 1F45 */ 1431,
+ /* 1F48 + 0300 -> 1F4A */ 1434,
+ /* 1F48 + 0301 -> 1F4C */ 1436,
+ /* 1F49 + 0300 -> 1F4B */ 1435,
+ /* 1F49 + 0301 -> 1F4D */ 1437,
+ /* 1F50 + 0300 -> 1F52 */ 1440,
+ /* 1F50 + 0301 -> 1F54 */ 1442,
+ /* 1F50 + 0342 -> 1F56 */ 1444,
+ /* 1F51 + 0300 -> 1F53 */ 1441,
+ /* 1F51 + 0301 -> 1F55 */ 1443,
+ /* 1F51 + 0342 -> 1F57 */ 1445,
+ /* 1F59 + 0300 -> 1F5B */ 1447,
+ /* 1F59 + 0301 -> 1F5D */ 1448,
+ /* 1F59 + 0342 -> 1F5F */ 1449,
+ /* 1F60 + 0300 -> 1F62 */ 1452,
+ /* 1F60 + 0301 -> 1F64 */ 1454,
+ /* 1F60 + 0342 -> 1F66 */ 1456,
+ /* 1F60 + 0345 -> 1FA0 */ 1512,
+ /* 1F61 + 0300 -> 1F63 */ 1453,
+ /* 1F61 + 0301 -> 1F65 */ 1455,
+ /* 1F61 + 0342 -> 1F67 */ 1457,
+ /* 1F61 + 0345 -> 1FA1 */ 1513,
+ /* 1F62 + 0345 -> 1FA2 */ 1514,
+ /* 1F63 + 0345 -> 1FA3 */ 1515,
+ /* 1F64 + 0345 -> 1FA4 */ 1516,
+ /* 1F65 + 0345 -> 1FA5 */ 1517,
+ /* 1F66 + 0345 -> 1FA6 */ 1518,
+ /* 1F67 + 0345 -> 1FA7 */ 1519,
+ /* 1F68 + 0300 -> 1F6A */ 1460,
+ /* 1F68 + 0301 -> 1F6C */ 1462,
+ /* 1F68 + 0342 -> 1F6E */ 1464,
+ /* 1F68 + 0345 -> 1FA8 */ 1520,
+ /* 1F69 + 0300 -> 1F6B */ 1461,
+ /* 1F69 + 0301 -> 1F6D */ 1463,
+ /* 1F69 + 0342 -> 1F6F */ 1465,
+ /* 1F69 + 0345 -> 1FA9 */ 1521,
+ /* 1F6A + 0345 -> 1FAA */ 1522,
+ /* 1F6B + 0345 -> 1FAB */ 1523,
+ /* 1F6C + 0345 -> 1FAC */ 1524,
+ /* 1F6D + 0345 -> 1FAD */ 1525,
+ /* 1F6E + 0345 -> 1FAE */ 1526,
+ /* 1F6F + 0345 -> 1FAF */ 1527,
+ /* 1F70 + 0345 -> 1FB2 */ 1530,
+ /* 1F74 + 0345 -> 1FC2 */ 1545,
+ /* 1F7C + 0345 -> 1FF2 */ 1587,
+ /* 1FB6 + 0345 -> 1FB7 */ 1534,
+ /* 1FBF + 0300 -> 1FCD */ 1555,
+ /* 1FBF + 0301 -> 1FCE */ 1556,
+ /* 1FBF + 0342 -> 1FCF */ 1557,
+ /* 1FC6 + 0345 -> 1FC7 */ 1549,
+ /* 1FF6 + 0345 -> 1FF7 */ 1591,
+ /* 1FFE + 0300 -> 1FDD */ 1568,
+ /* 1FFE + 0301 -> 1FDE */ 1569,
+ /* 1FFE + 0342 -> 1FDF */ 1570,
+ /* 2190 + 0338 -> 219A */ 1801,
+ /* 2192 + 0338 -> 219B */ 1802,
+ /* 2194 + 0338 -> 21AE */ 1803,
+ /* 21D0 + 0338 -> 21CD */ 1804,
+ /* 21D2 + 0338 -> 21CF */ 1806,
+ /* 21D4 + 0338 -> 21CE */ 1805,
+ /* 2203 + 0338 -> 2204 */ 1807,
+ /* 2208 + 0338 -> 2209 */ 1808,
+ /* 220B + 0338 -> 220C */ 1809,
+ /* 2223 + 0338 -> 2224 */ 1810,
+ /* 2225 + 0338 -> 2226 */ 1811,
+ /* 223C + 0338 -> 2241 */ 1816,
+ /* 2243 + 0338 -> 2244 */ 1817,
+ /* 2245 + 0338 -> 2247 */ 1818,
+ /* 2248 + 0338 -> 2249 */ 1819,
+ /* 224D + 0338 -> 226D */ 1822,
+ /* 2261 + 0338 -> 2262 */ 1821,
+ /* 2264 + 0338 -> 2270 */ 1825,
+ /* 2265 + 0338 -> 2271 */ 1826,
+ /* 2272 + 0338 -> 2274 */ 1827,
+ /* 2273 + 0338 -> 2275 */ 1828,
+ /* 2276 + 0338 -> 2278 */ 1829,
+ /* 2277 + 0338 -> 2279 */ 1830,
+ /* 227A + 0338 -> 2280 */ 1831,
+ /* 227B + 0338 -> 2281 */ 1832,
+ /* 227C + 0338 -> 22E0 */ 1841,
+ /* 227D + 0338 -> 22E1 */ 1842,
+ /* 2282 + 0338 -> 2284 */ 1833,
+ /* 2283 + 0338 -> 2285 */ 1834,
+ /* 2286 + 0338 -> 2288 */ 1835,
+ /* 2287 + 0338 -> 2289 */ 1836,
+ /* 2291 + 0338 -> 22E2 */ 1843,
+ /* 2292 + 0338 -> 22E3 */ 1844,
+ /* 22A2 + 0338 -> 22AC */ 1837,
+ /* 22A8 + 0338 -> 22AD */ 1838,
+ /* 22A9 + 0338 -> 22AE */ 1839,
+ /* 22AB + 0338 -> 22AF */ 1840,
+ /* 22B2 + 0338 -> 22EA */ 1845,
+ /* 22B3 + 0338 -> 22EB */ 1846,
+ /* 22B4 + 0338 -> 22EC */ 1847,
+ /* 22B5 + 0338 -> 22ED */ 1848,
+ /* 3046 + 3099 -> 3094 */ 2286,
+ /* 304B + 3099 -> 304C */ 2261,
+ /* 304D + 3099 -> 304E */ 2262,
+ /* 304F + 3099 -> 3050 */ 2263,
+ /* 3051 + 3099 -> 3052 */ 2264,
+ /* 3053 + 3099 -> 3054 */ 2265,
+ /* 3055 + 3099 -> 3056 */ 2266,
+ /* 3057 + 3099 -> 3058 */ 2267,
+ /* 3059 + 3099 -> 305A */ 2268,
+ /* 305B + 3099 -> 305C */ 2269,
+ /* 305D + 3099 -> 305E */ 2270,
+ /* 305F + 3099 -> 3060 */ 2271,
+ /* 3061 + 3099 -> 3062 */ 2272,
+ /* 3064 + 3099 -> 3065 */ 2273,
+ /* 3066 + 3099 -> 3067 */ 2274,
+ /* 3068 + 3099 -> 3069 */ 2275,
+ /* 306F + 3099 -> 3070 */ 2276,
+ /* 306F + 309A -> 3071 */ 2277,
+ /* 3072 + 3099 -> 3073 */ 2278,
+ /* 3072 + 309A -> 3074 */ 2279,
+ /* 3075 + 3099 -> 3076 */ 2280,
+ /* 3075 + 309A -> 3077 */ 2281,
+ /* 3078 + 3099 -> 3079 */ 2282,
+ /* 3078 + 309A -> 307A */ 2283,
+ /* 307B + 3099 -> 307C */ 2284,
+ /* 307B + 309A -> 307D */ 2285,
+ /* 309D + 3099 -> 309E */ 2291,
+ /* 30A6 + 3099 -> 30F4 */ 2318,
+ /* 30AB + 3099 -> 30AC */ 2293,
+ /* 30AD + 3099 -> 30AE */ 2294,
+ /* 30AF + 3099 -> 30B0 */ 2295,
+ /* 30B1 + 3099 -> 30B2 */ 2296,
+ /* 30B3 + 3099 -> 30B4 */ 2297,
+ /* 30B5 + 3099 -> 30B6 */ 2298,
+ /* 30B7 + 3099 -> 30B8 */ 2299,
+ /* 30B9 + 3099 -> 30BA */ 2300,
+ /* 30BB + 3099 -> 30BC */ 2301,
+ /* 30BD + 3099 -> 30BE */ 2302,
+ /* 30BF + 3099 -> 30C0 */ 2303,
+ /* 30C1 + 3099 -> 30C2 */ 2304,
+ /* 30C4 + 3099 -> 30C5 */ 2305,
+ /* 30C6 + 3099 -> 30C7 */ 2306,
+ /* 30C8 + 3099 -> 30C9 */ 2307,
+ /* 30CF + 3099 -> 30D0 */ 2308,
+ /* 30CF + 309A -> 30D1 */ 2309,
+ /* 30D2 + 3099 -> 30D3 */ 2310,
+ /* 30D2 + 309A -> 30D4 */ 2311,
+ /* 30D5 + 3099 -> 30D6 */ 2312,
+ /* 30D5 + 309A -> 30D7 */ 2313,
+ /* 30D8 + 3099 -> 30D9 */ 2314,
+ /* 30D8 + 309A -> 30DA */ 2315,
+ /* 30DB + 3099 -> 30DC */ 2316,
+ /* 30DB + 309A -> 30DD */ 2317,
+ /* 30EF + 3099 -> 30F7 */ 2319,
+ /* 30F0 + 3099 -> 30F8 */ 2320,
+ /* 30F1 + 3099 -> 30F9 */ 2321,
+ /* 30F2 + 3099 -> 30FA */ 2322,
+ /* 30FD + 3099 -> 30FE */ 2323,
+ /* 11099 + 110BA -> 1109A */ 4588,
+ /* 1109B + 110BA -> 1109C */ 4589,
+ /* 110A5 + 110BA -> 110AB */ 4590,
+ /* 11131 + 11127 -> 1112E */ 4596,
+ /* 11132 + 11127 -> 1112F */ 4597,
+ /* 11347 + 1133E -> 1134B */ 4609,
+ /* 11347 + 11357 -> 1134C */ 4610,
+ /* 114B9 + 114B0 -> 114BC */ 4628,
+ /* 114B9 + 114BA -> 114BB */ 4627,
+ /* 114B9 + 114BD -> 114BE */ 4629,
+ /* 115B8 + 115AF -> 115BA */ 4632,
+ /* 115B9 + 115AF -> 115BB */ 4633,
+ /* 11935 + 11930 -> 11938 */ 4642
+};
+
+/* Perfect hash function for recomposition */
+static int
+Recomp_hash_func(const void *key)
+{
+ static const int16 h[1883] = {
+ 772, 773, 621, 32767, 32767, 387, 653, 196,
+ 32767, 32767, 855, 463, -19, 651, 32767, 32767,
+ 32767, 364, 32767, 32767, -108, 32767, 32767, 32767,
+ 32767, 0, -568, 32767, 32767, 32767, 0, 0,
+ 0, -103, 364, 0, 210, 732, 0, 0,
+ -506, 0, 0, 0, 32767, 32767, 0, 32767,
+ 407, -140, 32767, 409, 32767, 772, 0, 86,
+ 842, 934, 32767, 32767, -499, -355, 32767, 32767,
+ 532, 138, 174, -243, 860, 1870, 742, 32767,
+ 32767, 339, 32767, 1290, 0, 32767, 32767, 0,
+ -449, -1386, 1633, 560, 561, 32767, 1219, 1004,
+ 139, -804, 32767, -179, 141, 579, 1586, 32767,
+ 32767, 32767, 142, 199, 32767, 32767, 143, 0,
+ 32767, 32767, 314, 896, 32767, 32767, 428, 129,
+ 286, -58, 0, 68, 32767, 0, 244, -566,
+ 32767, 32767, 32767, 246, 32767, 32767, 0, 32767,
+ 32767, 271, -108, 928, 32767, 715, 32767, 32767,
+ -211, -497, 32767, 0, 1055, 1339, 32767, 0,
+ 32767, 32767, -968, -144, 32767, 32767, 248, 32767,
+ -161, 32767, 32767, 282, 32767, -372, 0, 2,
+ -137, 1116, 32767, 687, 32767, 459, 913, 0,
+ 461, 879, -816, 443, 32767, 32767, 462, 1089,
+ 32767, 1054, 0, 314, 447, -26, 480, 32767,
+ 64, 0, 0, 112, 32767, 66, 0, 646,
+ 603, 22, -292, 0, 710, 475, 32767, 24,
+ -781, 32767, 32767, 32767, 281, 307, 32767, 1289,
+ 32767, 0, 1064, -149, 454, 118, 32767, 32767,
+ 0, 32767, -126, 0, 32767, 32767, 858, 32767,
+ 32767, 32767, 1029, 886, 665, 209, 0, 26,
+ 359, 0, 0, -108, -508, -603, 894, 906,
+ 32767, 32767, 14, 0, 0, 534, 984, 876,
+ 32767, -93, 110, -367, 167, 843, 32767, 32767,
+ -947, -290, 169, 0, 0, 32767, -42, 564,
+ 0, -927, 32767, 817, 32767, 32767, 32767, 110,
+ 0, 32767, 32767, -38, 32767, 32767, -101, 694,
+ -142, 190, 191, 1288, 32767, -687, 194, -579,
+ 534, -452, 0, -72, 536, 765, 823, 266,
+ -259, 684, 767, 32767, 654, 32767, 32767, 64,
+ 920, 32767, 32767, 32767, 0, 1653, 0, 0,
+ 32767, 32767, -452, -222, 855, 0, 32767, -1153,
+ 127, 490, 449, 863, 32767, -144, 32767, -379,
+ 545, 32767, 32767, 32767, 530, 32767, 32767, 1331,
+ 611, -612, 332, 545, -73, 0, 604, 201,
+ 32767, -279, 338, 836, 340, 408, 32767, -60,
+ -358, 32767, 343, 69, 707, 0, -129, 582,
+ 32767, 0, 32767, 96, 392, 490, 639, 157,
+ -4, 406, 32767, 32767, -571, 1077, 546, 32767,
+ 551, 0, 0, 0, 32767, 32767, 348, 32767,
+ 498, -181, 0, -433, 1057, 260, 0, 32767,
+ 32767, 397, 32767, 816, -130, 32767, 624, 0,
+ 0, 32767, 32767, 32767, 485, 0, 32767, 32767,
+ 32767, 32767, 32767, 0, 32767, 32767, 32767, 1222,
+ -230, 32767, 797, -538, 32767, 974, 32767, 32767,
+ 831, 70, -658, 145, 0, 147, 0, 32767,
+ 1295, 32767, 0, 0, 895, 0, 0, -385,
+ 491, -287, 32767, -587, 32767, 32767, 32767, 813,
+ -471, -13, 32767, 32767, 32767, 0, 203, 411,
+ 470, 0, -546, -179, 146, 0, 0, 32767,
+ -468, 32767, 0, 0, 32767, 32767, 32767, 211,
+ 32767, 32767, 0, 32767, 0, 52, 32767, 0,
+ 32767, 0, 692, 990, 32767, 32767, 32767, 56,
+ -507, 784, 951, 0, 32767, 0, 697, 32767,
+ 187, 0, 32767, 32767, 430, 1209, 682, 32767,
+ 130, 0, -25, 0, -1006, 0, 32767, 214,
+ 433, 22, 0, -1119, 32767, 285, 32767, 32767,
+ 32767, 216, 32767, 32767, 32767, 217, 527, 32767,
+ 32767, 32767, 829, 485, 419, 717, 620, 731,
+ 32767, 470, 0, -145, -620, 1162, -644, 848,
+ 287, -632, 32767, 32767, 32767, 32767, 381, 32767,
+ 510, 511, -554, -2, 32767, 0, 0, 698,
+ 32767, 32767, 436, 1154, 32767, 463, 32767, 32767,
+ 627, 517, 32767, 32767, 854, 579, 723, 396,
+ 110, -42, 354, 32767, 664, 32767, 32767, 0,
+ 0, 32767, 65, -163, 67, 140, 69, 341,
+ 70, 71, 402, 73, 623, 544, 624, 417,
+ -1375, 648, 32767, -26, 904, 0, 548, 0,
+ 0, 32767, 32767, 855, 32767, 488, -524, 599,
+ 130, 131, 32767, 32767, 542, -1110, -324, -462,
+ 32767, -405, -440, 0, 0, 629, 850, 0,
+ 741, 257, 258, 32767, 32767, 0, 32767, 923,
+ 0, 32767, 0, 32767, 1559, 32767, 32767, 32767,
+ 671, 32767, 134, 32767, 32767, -336, -104, 576,
+ 577, 829, 32767, 32767, 762, 902, 32767, 0,
+ 32767, 0, 1506, 887, 32767, 636, 601, 2465,
+ 426, 0, 236, 317, 427, 968, 32767, -975,
+ -559, -343, 341, 32767, 937, 241, 0, 32767,
+ 32767, 547, 32767, 32767, 32767, 32767, 32767, 789,
+ 0, 32767, 32767, 32767, 0, 0, 0, 32767,
+ -192, 859, 1185, 1153, 69, 32767, 32767, 32767,
+ -539, 32767, 32767, 0, 32767, 32767, 32767, 32767,
+ 640, 578, 32767, 32767, -766, 32767, 32767, 32767,
+ 32767, 1050, -572, 32767, 32767, 32767, 32767, 1268,
+ 32767, 32767, 32767, 754, 32767, 32767, 1640, 179,
+ 804, 32767, 32767, 32767, 32767, 0, 684, 943,
+ 1006, 32767, 32767, 652, 0, 32767, 1041, 32767,
+ 718, 791, 32767, 274, 697, 32767, 32767, 0,
+ 32767, 32767, 32767, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 735,
+ 0, 32767, 32767, 32767, 275, 358, 688, 32767,
+ 32767, 32767, 548, -87, 770, 32767, -42, 0,
+ 551, 32767, 691, 222, 32767, 32767, 32767, 32767,
+ 0, 1273, 403, -121, 806, 553, 554, 163,
+ 32767, 32767, 892, 825, 32767, 32767, -490, 32767,
+ 32767, 32767, 32767, 32767, -109, 744, 910, 32767,
+ 91, 32767, 32767, 0, 0, 32767, 32767, 32767,
+ 1521, 50, 701, 32767, 32767, 32767, 32767, 164,
+ 658, 32767, 288, 0, 32767, 0, 51, 0,
+ 32767, 32767, 32767, 32767, 555, 1547, 32767, 32767,
+ 595, 585, 429, 32767, -80, 32767, 1258, 0,
+ 540, 486, -434, 865, 0, 192, 0, 884,
+ 0, 0, 0, 175, 555, 0, 32767, 32767,
+ 0, 32767, -566, 866, 591, 32767, 32767, 32767,
+ 32767, 32767, 496, 495, -215, 32767, 849, -772,
+ 32767, 32767, 502, 178, 483, 32767, 912, 793,
+ 794, 0, 32767, 32767, 32767, -556, 499, 838,
+ 32767, 32767, -506, 331, 0, 0, -1096, 512,
+ 880, 0, 774, -338, 649, 32767, 270, 32767,
+ 32767, -624, 328, 459, 32767, 32767, 32767, 32767,
+ 329, -201, -835, 813, -879, 560, 0, -212,
+ -114, 35, -494, 37, 523, 653, 751, -653,
+ -743, 32767, 1356, 818, 32767, 32767, 856, 0,
+ 44, 902, 0, 0, 0, 0, 32767, -26,
+ 526, 795, 456, 32767, 104, -209, -341, 133,
+ -372, 0, 45, 110, 111, 0, 511, 47,
+ 114, 32767, 32767, 93, 48, 116, -1031, -279,
+ 32767, 192, 0, 32767, 453, 415, 0, -190,
+ 32767, 471, 240, 175, 29, 665, 684, 0,
+ -11, -95, -344, 32767, 245, 148, 0, 530,
+ 0, 1185, -615, -712, 693, 784, 32767, 0,
+ -776, 32767, 32767, -813, 0, 0, 0, 207,
+ 208, 32767, 674, 32767, 742, -289, 249, 32767,
+ 520, 929, -50, 781, 0, -778, 32767, 0,
+ 302, 32767, 720, -465, 0, 32767, 32767, 32767,
+ 0, 0, 32767, 833, 328, 806, 32767, -403,
+ 0, 32767, -77, 32767, 0, 441, 930, 32767,
+ 643, 0, 32767, 1938, 0, 1334, 381, 32767,
+ 216, 32767, 32767, 0, 32767, 484, 383, 0,
+ 242, 395, 0, 32767, 32767, 32767, -781, 355,
+ 356, 32767, 292, 706, 32767, 32767, 32767, 32767,
+ 32767, -410, 32767, 32767, 782, 32767, 189, 32767,
+ 32767, 943, 0, -212, 407, 335, 0, 135,
+ 32767, 616, 0, -497, 0, -67, 853, 32767,
+ 700, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 459, -48, 32767, 58, 0,
+ -856, 1017, 32767, 59, 916, -731, 32767, 940,
+ -855, 347, 650, 0, 678, 32767, 0, 32767,
+ 32767, 530, 32767, 0, -80, 32767, -730, 32767,
+ 1214, 799, 58, 651, 841, 0, 0, -589,
+ -1530, -478, 651, 652, 93, 576, -1215, 32767,
+ 125, 32767, 1279, 32767, 32767, 0, 32767, 0,
+ -367, 416, -1236, 32767, 418, 32767, 815, 558,
+ 559, 781, 419, 32767, 739, 32767, 0, 32767,
+ 128, 570, 1349, -298, -66, 0, 147, -488,
+ 32767, 590, 189, 274, 524, 32767, 1082, -209,
+ 32767, 423, 32767, 32767, 975, 573, 32767, 424,
+ 32767, 32767, 1241, 32767, 32767, 32767, 32767, 32767,
+ 612, 391, 32767, 0, -803, 1004, -561, 32767,
+ 32767, 735, 870, 32767, 0, 32767, 32767, -123,
+ 99, 210, 600, 1294, 109, 1053, 32767, 307,
+ 834, 32767, 0, 1651, 32767, 644, 32767, 32767,
+ 0, 32767, -801, 385, 379, 32767, -368, 32767,
+ 32767, 830, 0, 32767, 32767, 739, 371, 372,
+ -275, 32767, 32767, 331, -780, 32767, 0, 1229,
+ -1462, 913, 266, 827, 125, 32767, 32767, 32767,
+ 393, 32767, 631, -33, -883, -661, -204, 6,
+ -19, 257, 8, 9, 118, 519, 615, -541,
+ -893, 0, 32767, 0, 1156, 15, 900, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1022, 376, 0,
+ 32767, 32767, -972, 676, 840, -661, 631, 58,
+ 0, 17, 32767, 0, -799, 82, 0, 32767,
+ 32767, 680, 32767, 905, 0, 0, 32767, 32767,
+ 0, 0, 32767, 0, 828, 386, 802, 0,
+ 146, 0, 148, 32767, -1146, 0, 150, 151,
+ -743, 153, 154, 32767, 32767, 442, 32767, 743,
+ 0, 0, 746, 0, 32767, 32767, 32767, 98,
+ 32767, 157, 0, 696, 0, 32767, 32767, -294,
+ 32767, 158, 159, 32767, 0, 32767, 160, 32767,
+ 933, 32767, 32767, -50, 759, 824, 162, 672,
+ 32767, 356, 0, 356, 32767, 32767, 0, 0,
+ 656, 692, 253, 254, -374, 102, 256, 32767,
+ 0, 0, 32767, 32767, 259, 32767, 63, 260,
+ 510, 261, 32767, 0, 32767, 1061, 32767, 521,
+ 32767, 32767, 32767, 32767, 32767, 32767, 316, 317,
+ 846, 0, 32767, -500, 318, 0, 32767, 32767,
+ 263, 0, 790, 872, 32767, 32767, 32767, 2171,
+ 264, 32767, 32767, 32767, 32767, 486, 334, 465,
+ 32767, 466, 32767, 444, 606, 32767, 0, 445,
+ 320, -317, 0, 520, 322, 718, 32767, 32767,
+ 32767, 0, 1013, 32767, 32767, 32767, 32767, 32767,
+ 32767, 611, 32767, 0, 0, 32767, 32767, -120,
+ 156, 613, 0, 0, 32767, -68, 32767, 622,
+ 32767, 32767, 32767, 32767, 32767, 455, 32767, 32767,
+ 32767, 403, 533, 0, -161, 405, 95, 96,
+ 32767, 97, 32767, 0, 29, 0, 32767, 32767,
+ 30, 32767, 99, 32767, 32767, 0, 161, 32767,
+ 97, 0, 32, 32767, 32767, 0, 0, 315,
+ 32767, 32767, 414, 966, 0, 585, 32767, 32767,
+ -616, -256, 171, 172, 666, 101, 562, 563,
+ 32767, 95, 0, 0, 1492, 390, -251, 103,
+ 32767, 0, 32767, 188, 1487, 32767, 0, 0,
+ 586, 668, -126, 0, 0, 32767, 32767, 204,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 656, 32767, 32767,
+ 599, 0, 222, 32767, 0, 1368, -412, 435,
+ 32767, 936, 32767, -17, 32767, 832, 32767, 437,
+ 0, -518, 787, 32767, 864, -449, 0, 636,
+ 713, 206, 592, 572, 0, 483, -139, 32767,
+ 32767, 180, 818, 32767, 32767, 1304, 0, 32767,
+ 274, 0, 0, 0, 0, 705, 32767, 32767,
+ 32767, 0, -272, 0, 502, 503, 319, 0,
+ 32767, 0, 13, 32767, 32767, 0, 32767, 270,
+ 737, 0, 32767, 32767, 32767, 901, 32767, 616,
+ 180, 32767, 721, 353, 32767, 0, 32767, 32767,
+ -199, 0, 280, 788, 32767, 940, 32767, 51,
+ 0, 400, 53, 0, 54, -637, 0, -453,
+ 0, 0, 0, 380, 0, 32767, 504, 0,
+ 2049, 0, -964, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 798, 32767, 32767, 32767, 0,
+ 538, 488, 0, 32767, -528, 57, 819, 32767,
+ 32767, 1244, 0, 488, 739, 908, 32767, 32767,
+ 0, 32767, 32767, 0, 55, 533, 0, 32767,
+ 814, 0, 32767, 458, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 776, 777, 920, 0,
+ 0, 755, 32767, 0, 32767, 32767, 0, 32767,
+ 55, -954, 0, 372, 166, 218, 165, 857,
+ 221, 675, 0, 223, 224, -155, 226, 32767,
+ 1851, 227, 32767, 32767, 1192, 0, 229, 0,
+ -72, 0, 865, 0, 0, -330, 0, 683,
+ 32767, -550, -196, 725, -573, 293, 102, 32767,
+ -589, 296, 297, 298, 231, -256, 300, 32767,
+ 32767, 301, 233, 868, 32767, 234, 0, 811,
+ 1187, 32767, 32767, 0, 32767, 518, 0, 361,
+ 362, 466, 0, 365, 32767, -179, 366, 367,
+ 874, 369, 305, 0, 32767, 0, 32767, 0,
+ 32767, 2000, 1215, 451, 652, 0, 0, 799,
+ 32767, 32767, 32767,
+ };
+
+ const unsigned char *k = (const unsigned char *) key;
+ size_t keylen = 8;
+ uint32 a = 0;
+ uint32 b = 0;
+
+ while (keylen--)
+ {
+ unsigned char c = *k++;
+
+ a = a * 257 + c;
+ b = b * 17 + c;
+ }
+ return h[a % 1883] + h[b % 1883];
+}
+
+/* Hash lookup information for recomposition */
+static const pg_unicode_recompinfo UnicodeRecompInfo =
+{
+ RecompInverseLookup,
+ Recomp_hash_func,
+ 941
+};
--
2.22.0
On Thu, Oct 15, 2020 at 01:59:38PM -0400, John Naylor wrote:
I think I've seen a trie recommended somewhere, maybe the official website.
That said, I was able to get the hash working for recomposition (split into
a separate patch, and both of them now leave frontend alone), and I'm
pleased to say it's 50-75x faster than linear search in simple tests. I'd
be curious how it compares to ICU now. Perhaps Daniel Verite would be
interested in testing again? (CC'd)
Yeah, that would be interesting to compare. Now the gains proposed by
this patch are already a good step forward, so I don't think that it
should be a blocker for a solution we have at hand as the numbers
speak by themselves here. So if something better gets proposed, we
could always change the decomposition and recomposition logic as
needed.
select count(normalize(t, NFC)) from (
select md5(i::text) as t from
generate_series(1,100000) as i
) s;master patch
18800ms 257ms
My environment was showing HEAD as being a bit faster with 15s, while
the patch gets "only" down to 290~300ms (compiled with -O2, as I guess
you did). Nice.
+ # Then the second
+ return -1 if $a2 < $b2;
+ return 1 if $a2 > $b2;
Should say "second code point" here?
+ hashkey = pg_hton64(((uint64) start << 32) | (uint64) code);
+ h = recompinfo.hash(&hashkey);
This choice should be documented, and most likely we should have
comments on the perl and C sides to keep track of the relationship
between the two.
The binary sizes of libpgcommon_shlib.a and libpgcommon.a change
because Decomp_hash_func() gets included, impacting libpq.
Structurally, wouldn't it be better to move this part into its own,
backend-only, header? It could be possible to paint the difference
with some ifdef FRONTEND of course, or just keep things as they are
because this can be useful for some out-of-core frontend tool? But if
we keep that as a separate header then any C part can decide to
include it or not, so frontend tools could also make this choice.
Note that we don't include unicode_normprops_table.h for frontends in
unicode_norm.c, but that's the case of unicode_norm_table.h.
--
Michael
John Naylor wrote:
I'd be curious how it compares to ICU now
I've made another run of the test in [1]/messages/by-id/2c5e8df9-43b8-41fa-88e6-286e8634f00a@manitou-mail.org with your v2 patches
from this thread against icu_ext built with ICU-67.1.
The results show the times in milliseconds to process
about 10 million short strings:
operation | unpatched | patched | icu_ext
------------+-----------+---------+---------
nfc check | 7968 | 5989 | 4076
nfc conv | 700894 | 15163 | 6808
nfd check | 16399 | 9852 | 3849
nfd conv | 17391 | 10916 | 6758
nfkc check | 8259 | 6092 | 4301
nfkc conv | 700241 | 15354 | 7034
nfkd check | 16585 | 10049 | 4038
nfkd conv | 17587 | 11109 | 7086
The ICU implementation still wins by a large margin, but
the improvements brought by the patch are gorgeous,
especially for the conversion to NFC/NFKC.
This test ran on a slower machine than what I used for [1]/messages/by-id/2c5e8df9-43b8-41fa-88e6-286e8634f00a@manitou-mail.org, so
that's why all queries take longer.
For the two queries upthread, I get this:
1)
select count(normalize(t, NFC)) from (
select md5(i::text) as t from
generate_series(1,100000) as i
) s;
count
--------
100000
(1 row)
Time: 371.043 ms
VS ICU:
select count(icu_normalize(t, 'NFC')) from (
select md5(i::text) as t from
generate_series(1,100000) as i
) s;
count
--------
100000
(1 row)
Time: 125.809 ms
2)
select count(normalize(t, NFC)) from (
select repeat(U&'\00E4\00C5\0958\00F4\1EBF\3300\1FE2\3316\2465\322D', i % 3
+ 1) as t from
generate_series(1,100000) as i
) s;
count
--------
100000
(1 row)
Time: 428.214 ms
VS ICU:
select count(icu_normalize(t, 'NFC')) from (
select repeat(U&'\00E4\00C5\0958\00F4\1EBF\3300\1FE2\3316\2465\322D', i % 3
+ 1) as t from
generate_series(1,100000) as i
) s;
count
--------
100000
(1 row)
Time: 147.713 ms
[1]: /messages/by-id/2c5e8df9-43b8-41fa-88e6-286e8634f00a@manitou-mail.org
/messages/by-id/2c5e8df9-43b8-41fa-88e6-286e8634f00a@manitou-mail.org
Best regards,
--
Daniel Vérité
PostgreSQL-powered mailer: https://www.manitou-mail.org
Twitter: @DanielVerite
On Thu, Oct 15, 2020 at 11:32 PM Michael Paquier <michael@paquier.xyz>
wrote:
The binary sizes of libpgcommon_shlib.a and libpgcommon.a change
because Decomp_hash_func() gets included, impacting libpq.
I don't see any difference on gcc/Linux in those two files, nor in
unicode_norm_shlib.o -- I do see a difference in unicode_norm_srv.o as
expected. Could it depend on the compiler?
--
John Naylor
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
On Fri, Oct 16, 2020 at 2:08 PM Daniel Verite <daniel@manitou-mail.org>
wrote:
John Naylor wrote:
I'd be curious how it compares to ICU now
I've made another run of the test in [1] with your v2 patches
from this thread against icu_ext built with ICU-67.1.
The results show the times in milliseconds to process
about 10 million short strings:
Thanks for testing!
--
John Naylor
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
On Mon, Oct 19, 2020 at 10:34:33AM -0400, John Naylor wrote:
I don't see any difference on gcc/Linux in those two files, nor in
unicode_norm_shlib.o -- I do see a difference in unicode_norm_srv.o as
expected. Could it depend on the compiler?
Hmm. My guess is that you don't have --enable-debug in your set of
configure options? It is not unusual to have this one enabled for GCC
even on production systems, and the size of the libs is impacted in
this case with your patch.
--
Michael
On Tue, Oct 20, 2020 at 3:22 AM Michael Paquier <michael@paquier.xyz> wrote:
On Mon, Oct 19, 2020 at 10:34:33AM -0400, John Naylor wrote:
I don't see any difference on gcc/Linux in those two files, nor in
unicode_norm_shlib.o -- I do see a difference in unicode_norm_srv.o as
expected. Could it depend on the compiler?Hmm. My guess is that you don't have --enable-debug in your set of
configure options? It is not unusual to have this one enabled for GCC
even on production systems, and the size of the libs is impacted in
this case with your patch.
I've confirmed that. How about a new header unicode_norm_hashfunc.h which
would include unicode_norm_table.h at the top. In unicode.c, we can include
one of these depending on frontend or backend.
--
John Naylor
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
On Tue, Oct 20, 2020 at 08:03:12AM -0400, John Naylor wrote:
I've confirmed that. How about a new header unicode_norm_hashfunc.h which
would include unicode_norm_table.h at the top. In unicode.c, we can include
one of these depending on frontend or backend.
Sounds good to me. Looking at the code, I would just generate the
second file within generate-unicode_norm_table.pl.
--
Michael
Attached v3 addressing review points below:
On Thu, Oct 15, 2020 at 11:32 PM Michael Paquier <michael@paquier.xyz>
wrote:
+ # Then the second + return -1 if $a2 < $b2; + return 1 if $a2 > $b2; Should say "second code point" here?
Done. Also changed the tiebreaker to the composed codepoint. Beforehand, it
was the index into DecompMain[], which is only equivalent if the list is in
order (it is but we don't want correctness to depend on that), and not very
clear.
+ hashkey = pg_hton64(((uint64) start << 32) | (uint64) code); + h = recompinfo.hash(&hashkey); This choice should be documented, and most likely we should have comments on the perl and C sides to keep track of the relationship between the two.
Done.
<separate headers>
Done.
Other cosmetic changes:
- format recomp array comments like /* U+0045+032D -> U+1E18 */
- make sure to comment #endif's that are far from the #if
- small whitespace fixes
Note: for the new header I simply adapted from unicode_norm_table.h the
choice of "There is deliberately not an #ifndef PG_UNICODE_NORM_TABLE_H
here", although I must confess I'm not sure what the purpose of that is, in
this case.
--
John Naylor
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
Attachments:
v3-0001-Speed-up-unicode-decomposition.patchapplication/octet-stream; name=v3-0001-Speed-up-unicode-decomposition.patchDownload
From 11d36f15a7a663ed854e3eec0b3221d604fc5994 Mon Sep 17 00:00:00 2001
From: John Naylor <john.naylor@2ndquadrant.com>
Date: Wed, 21 Oct 2020 18:21:19 -0400
Subject: [PATCH v3 1/2] Speed up unicode decomposition
Replace binary search in the backend with a perfect hash function.
This takes up 26kB additional bytes, so leave out of the frontend
since decomposition there is thus far only used on password-length
strings.
---
src/common/unicode/Makefile | 4 +-
.../unicode/generate-unicode_norm_table.pl | 106 +-
src/common/unicode_norm.c | 61 +-
src/include/common/unicode_norm_hashfunc.h | 1713 +++++++++++++++++
src/tools/pgindent/exclude_file_patterns | 4 +-
5 files changed, 1849 insertions(+), 39 deletions(-)
create mode 100644 src/include/common/unicode_norm_hashfunc.h
diff --git a/src/common/unicode/Makefile b/src/common/unicode/Makefile
index 93a9d1615f..eb14add28a 100644
--- a/src/common/unicode/Makefile
+++ b/src/common/unicode/Makefile
@@ -18,7 +18,7 @@ LIBS += $(PTHREAD_LIBS)
# By default, do nothing.
all:
-update-unicode: unicode_norm_table.h unicode_combining_table.h unicode_normprops_table.h
+update-unicode: unicode_norm_table.h unicode_combining_table.h unicode_normprops_table.h unicode_norm_hashfunc.h
mv $^ ../../../src/include/common/
$(MAKE) normalization-check
@@ -30,6 +30,8 @@ UnicodeData.txt DerivedNormalizationProps.txt CompositionExclusions.txt Normaliz
# Generation of conversion tables used for string normalization with
# UTF-8 strings.
+unicode_norm_hashfunc.h: unicode_norm_table.h
+
unicode_norm_table.h: generate-unicode_norm_table.pl UnicodeData.txt CompositionExclusions.txt
$(PERL) generate-unicode_norm_table.pl
diff --git a/src/common/unicode/generate-unicode_norm_table.pl b/src/common/unicode/generate-unicode_norm_table.pl
index 7ce15e1a03..5fca88796f 100644
--- a/src/common/unicode/generate-unicode_norm_table.pl
+++ b/src/common/unicode/generate-unicode_norm_table.pl
@@ -10,7 +10,12 @@
use strict;
use warnings;
-my $output_file = "unicode_norm_table.h";
+use FindBin;
+use lib "$FindBin::RealBin/../../tools/";
+use PerfectHash;
+
+my $output_table_file = "unicode_norm_table.h";
+my $output_func_file = "unicode_norm_hashfunc.h";
my $FH;
@@ -64,11 +69,13 @@ close $FH;
my $num_characters = scalar @characters;
-# Start writing out the output file
-open my $OUTPUT, '>', $output_file
- or die "Could not open output file $output_file: $!\n";
+# Start writing out the output files
+open my $OT, '>', $output_table_file
+ or die "Could not open output file $output_table_file: $!\n";
+open my $OF, '>', $output_func_file
+ or die "Could not open output file $output_func_file: $!\n";
-print $OUTPUT <<HEADER;
+print $OT <<HEADER;
/*-------------------------------------------------------------------------
*
* unicode_norm_table.h
@@ -111,8 +118,44 @@ static const pg_unicode_decomposition UnicodeDecompMain[$num_characters] =
{
HEADER
+print $OF <<HEADER;
+/*-------------------------------------------------------------------------
+ *
+ * unicode_norm_hashfunc.h
+ * Perfect hash functions used for Unicode normalization
+ *
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/common/unicode_norm_hashfunc.h
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/*
+ * File auto-generated by src/common/unicode/generate-unicode_norm_table.pl,
+ * do not edit. There is deliberately not an #ifndef PG_UNICODE_NORM_HASHFUNC_H
+ * here.
+ */
+
+#include "unicode_norm_table.h"
+
+/* Typedef for perfect hash functions */
+typedef int (*cp_hash_func) (const void *key);
+
+/* Information for lookups with perfect hash functions */
+typedef struct
+{
+ const pg_unicode_decomposition *decomps;
+ cp_hash_func hash;
+ int num_decomps;
+} pg_unicode_decompinfo;
+
+HEADER
+
my $decomp_index = 0;
my $decomp_string = "";
+my @dec_cp_packed;
my $last_code = $characters[-1]->{code};
foreach my $char (@characters)
@@ -121,6 +164,9 @@ foreach my $char (@characters)
my $class = $char->{class};
my $decomp = $char->{decomp};
+ # Save the code point bytes as a string in network order.
+ push @dec_cp_packed, pack('N', hex($char->{code}));
+
# The character decomposition mapping field in UnicodeData.txt is a list
# of unicode codepoints, separated by space. But it can be prefixed with
# so-called compatibility formatting tag, like "<compat>", or "<font>".
@@ -163,7 +209,7 @@ foreach my $char (@characters)
{
foreach my $lcode (@composition_exclusion_codes)
{
- if ($lcode eq $char->{code})
+ if ($lcode eq $code)
{
$flags .= " | DECOMP_NO_COMPOSE";
$comment = "in exclusion list";
@@ -175,7 +221,7 @@ foreach my $char (@characters)
if ($decomp_size == 0)
{
- print $OUTPUT "\t{0x$code, $class, 0$flags, 0}";
+ print $OT "\t{0x$code, $class, 0$flags, 0}";
}
elsif ($decomp_size == 1 && length($first_decomp) <= 4)
{
@@ -183,11 +229,11 @@ foreach my $char (@characters)
# The decomposition consists of a single codepoint, and it fits
# in a uint16, so we can store it "inline" in the main table.
$flags .= " | DECOMP_INLINE";
- print $OUTPUT "\t{0x$code, $class, 1$flags, 0x$first_decomp}";
+ print $OT "\t{0x$code, $class, 1$flags, 0x$first_decomp}";
}
else
{
- print $OUTPUT
+ print $OT
"\t{0x$code, $class, $decomp_size$flags, $decomp_index}";
# Now save the decompositions into a dedicated area that will
@@ -205,25 +251,15 @@ foreach my $char (@characters)
}
# Print a comma after all items except the last one.
- print $OUTPUT "," unless ($code eq $last_code);
- if ($comment ne "")
- {
-
- # If the line is wide already, indent the comment with one tab,
- # otherwise with two. This is to make the output match the way
- # pgindent would mangle it. (This is quite hacky. To do this
- # properly, we should actually track how long the line is so far,
- # but this works for now.)
- print $OUTPUT "\t" if ($decomp_index < 10);
+ print $OT "," unless ($code eq $last_code);
- print $OUTPUT "\t/* $comment */" if ($comment ne "");
- }
- print $OUTPUT "\n";
+ print $OT "\t/* $comment */" if ($comment ne "");
+ print $OT "\n";
}
-print $OUTPUT "\n};\n\n";
+print $OT "\n};\n\n";
# Print the array of decomposed codes.
-print $OUTPUT <<HEADER;
+print $OT <<HEADER;
/* codepoints array */
static const uint32 UnicodeDecomp_codepoints[$decomp_index] =
{
@@ -231,4 +267,24 @@ $decomp_string
};
HEADER
-close $OUTPUT;
+# Emit the definition of the decomp hash function.
+my $dec_funcname = 'Decomp_hash_func';
+my $dec_func = PerfectHash::generate_hash_function(\@dec_cp_packed,
+ $dec_funcname, fixed_key_length => 4);
+print $OF "/* Perfect hash function for decomposition */\n";
+print $OF "static $dec_func\n";
+
+# Emit the structure that wraps the hash lookup information into
+# one variable.
+print $OF <<HEADER;
+/* Hash lookup information for decomposition */
+static const pg_unicode_decompinfo UnicodeDecompInfo =
+{
+ UnicodeDecompMain,
+ $dec_funcname,
+ $num_characters
+};
+HEADER
+
+close $OT;
+close $OF;
diff --git a/src/common/unicode_norm.c b/src/common/unicode_norm.c
index 4bb6a0f587..7d0d23ab21 100644
--- a/src/common/unicode_norm.c
+++ b/src/common/unicode_norm.c
@@ -19,9 +19,11 @@
#endif
#include "common/unicode_norm.h"
-#include "common/unicode_norm_table.h"
#ifndef FRONTEND
+#include "common/unicode_norm_hashfunc.h"
#include "common/unicode_normprops_table.h"
+#else
+#include "common/unicode_norm_table.h"
#endif
#include "port/pg_bswap.h"
@@ -44,6 +46,42 @@
#define NCOUNT VCOUNT * TCOUNT
#define SCOUNT LCOUNT * NCOUNT
+/*
+ * Get the entry corresponding to code in the decomposition lookup table.
+ */
+#ifndef FRONTEND
+
+static const pg_unicode_decomposition *
+get_code_entry(pg_wchar code)
+{
+ int h;
+ uint32 hashkey;
+ pg_unicode_decompinfo decompinfo = UnicodeDecompInfo;
+
+ /*
+ * Compute the hash function. The hash key is the codepoint with the bytes
+ * in network order.
+ */
+ hashkey = pg_hton32(code);
+ h = decompinfo.hash(&hashkey);
+
+ /* An out-of-range result implies no match */
+ if (h < 0 || h >= decompinfo.num_decomps)
+ return NULL;
+
+ /*
+ * Since it's a perfect hash, we need only match to the specific codepoint
+ * it identifies.
+ */
+ if (code != decompinfo.decomps[h].codepoint)
+ return NULL;
+
+ /* Success! */
+ return &decompinfo.decomps[h];
+}
+
+#else
+
/* comparison routine for bsearch() of decomposition lookup table. */
static int
conv_compare(const void *p1, const void *p2)
@@ -56,10 +94,7 @@ conv_compare(const void *p1, const void *p2)
return (v1 > v2) ? 1 : ((v1 == v2) ? 0 : -1);
}
-/*
- * Get the entry corresponding to code in the decomposition lookup table.
- */
-static pg_unicode_decomposition *
+static const pg_unicode_decomposition *
get_code_entry(pg_wchar code)
{
return bsearch(&(code),
@@ -69,6 +104,8 @@ get_code_entry(pg_wchar code)
conv_compare);
}
+#endif /* !FRONTEND */
+
/*
* Given a decomposition entry looked up earlier, get the decomposed
* characters.
@@ -77,7 +114,7 @@ get_code_entry(pg_wchar code)
* is only valid until next call to this function!
*/
static const pg_wchar *
-get_code_decomposition(pg_unicode_decomposition *entry, int *dec_size)
+get_code_decomposition(const pg_unicode_decomposition *entry, int *dec_size)
{
static pg_wchar x;
@@ -104,7 +141,7 @@ get_code_decomposition(pg_unicode_decomposition *entry, int *dec_size)
static int
get_decomposed_size(pg_wchar code, bool compat)
{
- pg_unicode_decomposition *entry;
+ const pg_unicode_decomposition *entry;
int size = 0;
int i;
const uint32 *decomp;
@@ -231,7 +268,7 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
static void
decompose_code(pg_wchar code, bool compat, pg_wchar **result, int *current)
{
- pg_unicode_decomposition *entry;
+ const pg_unicode_decomposition *entry;
int i;
const uint32 *decomp;
int dec_size;
@@ -358,8 +395,8 @@ unicode_normalize(UnicodeNormalizationForm form, const pg_wchar *input)
pg_wchar prev = decomp_chars[count - 1];
pg_wchar next = decomp_chars[count];
pg_wchar tmp;
- pg_unicode_decomposition *prevEntry = get_code_entry(prev);
- pg_unicode_decomposition *nextEntry = get_code_entry(next);
+ const pg_unicode_decomposition *prevEntry = get_code_entry(prev);
+ const pg_unicode_decomposition *nextEntry = get_code_entry(next);
/*
* If no entries are found, the character used is either an Hangul
@@ -417,7 +454,7 @@ unicode_normalize(UnicodeNormalizationForm form, const pg_wchar *input)
for (count = 1; count < decomp_size; count++)
{
pg_wchar ch = decomp_chars[count];
- pg_unicode_decomposition *ch_entry = get_code_entry(ch);
+ const pg_unicode_decomposition *ch_entry = get_code_entry(ch);
int ch_class = (ch_entry == NULL) ? 0 : ch_entry->comb_class;
pg_wchar composite;
@@ -458,7 +495,7 @@ unicode_normalize(UnicodeNormalizationForm form, const pg_wchar *input)
static uint8
get_canonical_class(pg_wchar ch)
{
- pg_unicode_decomposition *entry = get_code_entry(ch);
+ const pg_unicode_decomposition *entry = get_code_entry(ch);
if (!entry)
return 0;
diff --git a/src/include/common/unicode_norm_hashfunc.h b/src/include/common/unicode_norm_hashfunc.h
new file mode 100644
index 0000000000..d2f4ad884b
--- /dev/null
+++ b/src/include/common/unicode_norm_hashfunc.h
@@ -0,0 +1,1713 @@
+/*-------------------------------------------------------------------------
+ *
+ * unicode_norm_hashfunc.h
+ * Perfect hash functions used for Unicode normalization
+ *
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/common/unicode_norm_hashfunc.h
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/*
+ * File auto-generated by src/common/unicode/generate-unicode_norm_table.pl,
+ * do not edit. There is deliberately not an #ifndef PG_UNICODE_NORM_HASHFUNC_H
+ * here.
+ */
+
+#include "unicode_norm_table.h"
+
+/* Typedef for perfect hash functions */
+typedef int (*cp_hash_func) (const void *key);
+
+/* Information for lookups with perfect hash functions */
+typedef struct
+{
+ const pg_unicode_decomposition *decomps;
+ cp_hash_func hash;
+ int num_decomps;
+} pg_unicode_decompinfo;
+
+/* Perfect hash function for decomposition */
+static int
+Decomp_hash_func(const void *key)
+{
+ static const int16 h[13209] = {
+ 0, 1515, 4744, 4745, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3890, 3890, 0, 0,
+ 3891, 3891, -2046, 2800, 3890, 3890, 3890, -4396,
+ 4361, 4362, -4441, -4441, -4396, 1773, 1773, 1773,
+ 4372, 4373, -4438, -4438, -4393, -4393, 2619, 17,
+ -4347, -4393, -4393, -4393, -4393, -4393, 2619, 2619,
+ 1560, 4346, 4347, 4348, 1917, 1873, 1874, 1875,
+ -7856, 4358, 17619, 2622, 2622, 2622, 6357, 6358,
+ 6359, 6360, 6361, 6362, 6363, 2622, -4390, -4390,
+ 4414, -5356, -5356, 4374, 4375, -5356, -5356, -6335,
+ -3020, 2511, -5356, -5356, -3583, -3583, -3583, -3583,
+ -995, 0, 0, -9799, -9754, 2874, 2875, 2876,
+ 2877, 2878, -9830, -3591, -9756, -9756, -2744, -5346,
+ -9710, -9756, 342, -5346, -9756, -5346, -2743, -449,
+ 348, 2894, 2895, -2853, 2897, 2898, 2899, 2900,
+ 2901, 2902, 2903, 2904, 2905, 2906, 2907, 2908,
+ 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916,
+ 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924,
+ 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932,
+ 2933, 2934, 32767, 32767, 32767, 32767, 32767, 32767,
+ -8721, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 1, 32767, 48, 32767, 32767, 32767, 32767, 49,
+ 32767, 32767, -8687, -8687, -6255, -6210, 32767, 32767,
+ -8689, -8689, -21949,32767, -18635,-15320,-15320,32767,
+ -12006,-8691, -8691, -8691, -8691, -8691, 32767, 66,
+ -8737, -8737, -8692, -8692, -8692, -8692, 73, 74,
+ 32767, -8738, -8693, -8693, -8693, -8693, -8693, 32767,
+ 32767, -8695, -8695, -8695, -8695, -8695, 32767, 32767,
+ 40, 41, -2390, -2434, 44, 45, 32767, 46,
+ 13307, 9993, 9994, 6680, 6681, 3367, 3368, 54,
+ 0, 55, 56, 57, -8699, -8699, 105, 32767,
+ 32767, 61, 62, 63, -8701, -8701, 32767, 111,
+ 32767, 67, 68, 69, 70, 1890, 3687, -1272,
+ 3690, 75, 76, 77, 78, 79, 80, 81,
+ 82, 32767, 32767, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 32767,
+ 32767, 103, 104, 105, 106, 107, 108, 109,
+ -8660, -8660, 32767, -8661, -8661, -8661, -8661, -8661,
+ -8661, 32767, 73, 74, 75, 76, -2355, -2399,
+ 79, 80, 32767, 32767, 13341, 10027, 10028, 6714,
+ 6715, 3401, 3402, 32767, 32767, 88, 89, 90,
+ -8666, -8666, 138, 32767, 32767, 94, 95, 96,
+ -8668, -8668, 144, 145, 101, -2553, -2553, -2553,
+ -2553, -4983, -2553, -2553, 154, -2553, 156, 32767,
+ 32767, 6114, 158, -3153, -3152, -3151, -12891,-6888,
+ -931, -3149, 166, -3148, -4728, 169, -3147, -3146,
+ -3145, -3144, -3143, -3142, -3141, -2543, -3139, -3138,
+ 180, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 3314,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 3660, 3661, 2131, 2132, 2133, 2134, 2135,
+ 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143,
+ 2144, 2145, -5472, -5472, -3612, -3612, -3612, -3612,
+ -3612, 2652, -3612, -3612, -3612, -3612, -3612, -3612,
+ -3612, -3612, 3693, -3613, -7015, -7015, 1742, 1743,
+ -7060, -7060, -7015, -846, -846, -846, 1753, 1754,
+ -7057, -7057, -7012, -7012, 0, -2602, -6966, -7012,
+ -7012, -7012, -7012, -7012, 0, 0, 1725, 1726,
+ 1727, 1728, -703, -747, -746, 0, 1735, 1736,
+ 14997, 0, 0, 0, 3735, 3736, 3737, 3738,
+ 3739, 3740, 3741, 0, -7012, -7012, 1792, 1793,
+ 1749, 1750, 1751, -7980, -7980, -8959, -5644, -113,
+ -7980, -113, -2382, -6116, -6116, -6116, -6116, -6116,
+ -6116, -6116, -2374, 4639, 4640, -4163, 5608, 5609,
+ -4120, -4120, 5612, 5613, 6593, 3279, -2251, 5617,
+ 5618, 3846, 3847, 3848, 3849, 1262, 1262, 10066,
+ 10067, 10023, 3855, 3856, 3857, 1259, 1259, 10071,
+ 3861, 10027, 10028, 3017, 5620, 9985, 10032, -65,
+ 5624, 10035, 5626, 3024, 731, -65, 1298, 12530,
+ 3727, 3727, 3772, 3772, 3772, 13504, 13505, 14485,
+ 11171, 5641, 13509, 5643, 7913, 11648, 11649, 11650,
+ 11651, 11652, 11653, 11654, 7913, 901, 901, 9705,
+ -65, -65, 9665, 9666, -65, -65, -1044, 2271,
+ 7802, -65, -65, 1708, 1708, 1708, 1708, 4296,
+ 4297, -4506, -4506, -4461, 1708, 1708, 1708, 4307,
+ 4308, -4503, 1708, -4457, -4457, 2555, -47, -4411,
+ -4457, 5641, -47, -4457, -47, 2556, 4850, 5647,
+ 4285, -6946, 1858, 1859, 1815, 1816, 1817, -7914,
+ -7914, -8893, -5578, -47, -7914, -47, -2316, -6050,
+ -6050, -6050, -6050, -6050, -6050, -6050, -2308, 4705,
+ 4706, -4097, 5674, 5675, -4054, -4054, 5678, 5679,
+ 6659, 3345, -2185, 5683, 5684, 3912, 3913, 3914,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -3083, -3083, 232, 287, 233, 233,
+ 233, 8990, 8991, 32767, 32767, 3668, 32767, 3667,
+ 3667, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 208, 208, 208, 208, 208, 208,
+ 32767, 32767, 206, 206, 206, 206, 206, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 304, 305, -1274, 307, 308,
+ 309, 6753, -1374, 10488, 4486, -1470, 4488, 316,
+ 4489, -5607, 4490, 4491, 4492, 322, 760, 324,
+ 325, 326, 166, 763, 329, -2553, 765, 332,
+ 333, 334, 335, 772, 337, 6310, 339, 340,
+ 341, 342, 343, 344, 345, 346, -2542, -2542,
+ -2542, 350, 351, 352, 353, 354, 355, 356,
+ 357, 358, 359, 360, 361, 362, -6008, 364,
+ 365, 366, 367, 368, 369, 370, 254, 372,
+ 373, 374, 375, 376, 377, 378, 379, 380,
+ 381, 382, 32767, 383, 384, -3606, -3605, -3604,
+ -3603, 389, -3600, -3599, -3598, 2340, -1238, -3595,
+ -3594, -3593, 4694, -4062, -4062, 4742, 4743, 4699,
+ -1469, -1468, -1467, -4065, -4065, 4747, -1463, 4703,
+ 4704, -2307, 296, 32767, 0, 32767, 32767, 4708,
+ -1376, -1376, -1376, 32767, 32767, -1246, 506, 506,
+ 0, -1559, 32767, 32767, 32767, 32767, 32767, 305,
+ 419, 308, 2578, 6313, 6314, 424, 32767, -6030,
+ 32767, 426, 427, 428, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 32767, 0,
+ 32767, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 32767, 429, -5407, 431,
+ -5406, 433, -3601, 435, 32767, -3751, 32767, 32767,
+ 32767, 32767, -3755, 32767, 32767, 32767, 32767, 0,
+ 32767, 32767, 32767, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 436, -11425,-5422,
+ 535, -5422, 535, -5422, 4675, -5421, -5421, -5421,
+ -5421, -5421, 4681, 0, 0, 0, 4682, 4683,
+ 4684, 4685, 4686, 4687, 0, 0, 32767, 32767,
+ 0, 0, -5684, 0, 4688, 4689, 4690, 4691,
+ 4692, 4693, 4694, 4695, -1257, -1257, 4696, -5441,
+ -5441, 4699, 4700, 4701, -5443, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 454, 0, 32767, 456,
+ 32767, 32767, 0, 457, 32767, 32767, 32767, 0,
+ 458, 459, 460, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 4703, 4704, 4705, 4706, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 4655, 4656, 4657, 4658,
+ 4659, 4712, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 462, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 463, 464, 32767, 465,
+ 32767, 32767, 32767, 466, 32767, 32767, 32767, 32767,
+ 467, 468, 469, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 3011, 3011, 3011,
+ 3011, 3011, 3011, 3011, 32767, 32767, 32767, 32767,
+ 32767, 32767, 470, 471, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 472,
+ 473, 474, 475, 476, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 4713, 4714, 4715, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 477, 478, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 479, 480, 481, 482,
+ 32767, 32767, 483, 484, 32767, 32767, 485, 486,
+ 487, 488, 489, 490, 32767, 32767, 491, 492,
+ 493, 494, 495, 496, 32767, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 665, -255, 667, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 693, 694, 695, 696,
+ 697, 698, 699, 700, 701, 702, 703, 704,
+ 705, 706, 707, 708, 709, 710, 711, 712,
+ 7183, 714, -1580, 716, 2547, 718, 7194, 720,
+ 2553, 722, 723, 7204, 725, 726, 727, 728,
+ 729, 730, 731, 732, 733, 734, 735, 736,
+ 0, 0, 8114, 8159, 745, -1535, 747, 748,
+ 8161, -5019, -5019, -5019, -5019, 1938, 0, 0,
+ 0, 0, 0, 0, 767, 768, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 32767, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, -2875, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -2884, -2884,
+ -2884, -2884, -2884, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -4271, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -2884, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -2884, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -2884, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -2884, 32767, -2885, 32767, -2886, -2886,
+ 32767, -2887, -2887, 32767, -2888, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 563, 564,
+ 565, 566, 567, 568, 569, 570, 571, 572,
+ 573, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 574, 575, 576, 577, 578, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, -294, -294, -294, -3047, 583, 584, 585,
+ -4462, -4418, -4418, -4418, -4418, -4418, -4462, -4462,
+ -4462, 595, 596, 597, 598, 599, 32767, 32767,
+ 32767, 32767, -4471, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 4716, 4717, 4718, 4719,
+ 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727,
+ 4728, 4729, 4730, 4731, 4732, 4733, 4734, 4735,
+ 3826, 4737, 4738, 4739, 4740, 4741, 4742, 3832,
+ 4744, 3833, 3120, 3121, 3835, 3835, 3124, 3836,
+ 3836, 4753, 4754, 4755, 4756, 4757, 4758, 4759,
+ 4760, 4761, 4762, 4763, 4764, 4765, 4766, 4767,
+ 4768, 4769, 4770, 4771, 4772, 4773, 4774, 4775,
+ 4776, 4777, 4778, 4779, 4780, 4781, 6619, 6620,
+ 6621, 11272, 6623, 6624, 4788, 4789, 4790, 3874,
+ 4761, 3874, 4794, 3874, 4796, 4797, 4798, 3874,
+ 4800, 32767, 0, 4802, 4803, 4804, 4805, 4806,
+ 4807, 4808, 4809, 4810, 4811, 4812, 4813, 4814,
+ 4815, 4816, 4817, 4818, 4819, 4820, 4821, 4822,
+ 4823, 4824, 4825, 4826, 4827, 4828, 11299, 4830,
+ 2536, 4832, 6663, 4834, 11310, 4836, 6669, 4838,
+ 4839, 11320, 4841, 4842, 4843, 4844, 4845, 4846,
+ 4847, 4848, 4849, 4850, 4851, 4852, 1188, 4854,
+ 4855, 4856, 4857, 2577, 4859, 4860, 12273, -907,
+ -907, -907, -907, -907, -907, 4868, 4869, 4870,
+ 4871, 32767, 4872, 4873, 32767, 32767, 4874, 32767,
+ 627, 4875, 4876, 32767, 32767, 4877, 4878, 4879,
+ 6722, 32767, 4881, 4882, 4883, 6730, 6731, 7446,
+ 6733, 4888, 7449, 7449, 4891, 4892, 32767, 4893,
+ 32767, 4894, 4895, 4896, 4897, 4898, 4899, 3512,
+ 3513, 3514, 3515, 3516, 4904, 3518, 3519, 3520,
+ 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528,
+ 3529, 3530, 3531, 3532, 3533, 3534, 3535, 3536,
+ 3537, 3538, 4926, 6797, 4928, 6800, 4930, 4931,
+ 4932, 4933, 4934, 4935, 6813, 4937, 4938, 6816,
+ 6817, 4941, 4942, 4943, 0, 4945, 6821, 0,
+ 0, 4949, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, -127, -127, -127,
+ 7285, -127, -127, 0, -128, -128, -128, -128,
+ 0, 32767, -130, 4971, -129, 5613, 5614, 5615,
+ 4976, 5618, 32767, 5619, 5620, 5621, 4981, 5624,
+ 4983, 4984, 32767, 5630, 5631, -1986, -1986, -126,
+ -126, 5078, 4992, 5037, 5038, 5039, 5040, 5041,
+ 5086, 5087, 5088, 5089, -2322, 5091, 5092, 5093,
+ 5094, 5095, 5096, 5097, 5098, 5099, 5100, 0,
+ 5101, -640, -640, -640, 0, -641, -641, -641,
+ -641, -641, 0, -642, 0, 0, 32767, -645,
+ -645, 6973, 6974, 5115, 5116, -87, 0, -44,
+ -44, -44, -44, -44, -88, -88, -88, -88,
+ 7324, -88, -88, -88, -88, -88, -88, -88,
+ -88, -88, -88, -88, -88, 5654, 5655, 5656,
+ 5657, 5658, 5659, 5660, 5661, 5662, 5663, 5664,
+ 5665, 5666, 5667, 5668, 5669, -1948, -1948, -88,
+ -88, 5116, 5117, 5074, 5075, 5076, 5077, 5078,
+ 5123, 5124, 5125, 5126, -2285, 5128, 5129, 5130,
+ 5131, 5132, 5133, 5134, 5135, 5136, 5137, 5138,
+ 5139, -602, -602, -602, -602, -602, -602, -602,
+ -602, -602, -602, -602, -602, -602, -602, -602,
+ -602, 7016, 7017, 5158, 5159, -44, -44, 0,
+ 0, 0, 0, 0, -44, -44, -44, -44,
+ 7368, -44, -44, -44, -44, -44, -44, -44,
+ -44, -44, -44, -44, -44, 5698, 5699, 5700,
+ 5701, 5702, 5703, 5704, 5705, 5706, 5707, 5708,
+ 5709, 5710, 5711, 5712, 5713, -1904, -1904, -44,
+ -44, 5160, 5161, 5118, 5119, 5120, 5121, 5122,
+ 5167, 5168, 5169, 5170, -2241, 5172, 5173, 5174,
+ 5175, 5176, 5177, 5178, 5179, 5180, 5181, 5182,
+ 5183, -558, -558, -558, -558, -558, -558, -558,
+ -558, -558, -558, -558, -558, -558, -558, -558,
+ -558, 7060, 7061, 5202, 5203, 0, 0, 44,
+ 44, 44, 44, 44, 0, 0, 0, 0,
+ 7412, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5742, 5743, 5744,
+ 5745, 5746, 5747, 5748, 5749, 5750, 5751, 5752,
+ 5753, 5754, 5755, 5756, 5757, -1860, -1860, 0,
+ 0, 0, 0, 0, 6264, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -3402,
+ -3402, 5355, 5356, -3447, -3447, -3402, -3402, -3402,
+ -3402, 5363, 5364, -3447, -3447, -3402, -3402, -3402,
+ -3358, -3358, -3404, -3404, -3404, -3404, -3404, -3404,
+ -3404, 5331, 5332, 5333, 5334, 2903, 2859, 5337,
+ 5338, 5339, 5340, 18601, 15287, 15288, 11974, 11975,
+ 8661, 8662, 5348, 5349, 5350, 5351, 5352, -3404,
+ -3404, 5400, 5401, 5357, 5358, 5359, 5360, -3404,
+ -3404, 5408, 5409, 5365, 5366, 5367, 5324, 5325,
+ 5372, 5373, 5374, 5375, 5376, 5377, 5378, -3356,
+ -3356, -3356, -3356, -924, -879, -3356, -3356, -3356,
+ -3356, -16616,-13301,-13301,-9986, -9986, -6671, -6671,
+ -3356, -3356, -3356, -3356, -3356, 5401, 5402, -3401,
+ -3401, -3356, -3356, -3356, -3356, 5409, 5410, -3401,
+ -3401, -3356, -3356, -3356, -3312, -3312, -3358, -3358,
+ -3358, -3358, -3358, -3358, -3358, 5377, 5378, 5379,
+ 5380, 2949, 2905, 5383, 5384, 5385, 5386, 18647,
+ 15333, 15334, 12020, 12021, 8707, 8708, 5394, 5395,
+ 5396, 5397, 5398, -3358, -3358, 5446, 5447, 5403,
+ 5404, 5405, 5406, -3358, -3358, 5454, 5455, 5411,
+ 5412, 5413, 5414, 5415, 5416, 5417, 5418, 5419,
+ 5420, 5421, 5422, -3312, -3312, -3312, -3312, -880,
+ -835, -3312, -3312, -3312, -3312, -16572,-13257,-13257,
+ -9942, -9942, -6627, -6627, -3312, -3312, -3312, -3312,
+ -3312, 5445, 5446, -3357, -3357, -3312, -3312, -3312,
+ -3312, 5453, 5454, -3357, -3357, -3312, -3312, -3312,
+ -3312, -3312, -3312, -3312, -3312, -3312, -3312, -3312,
+ -3312, 5423, 5424, 5425, 5426, 2995, 2951, 5429,
+ 5430, 5431, 5432, 18693, 15379, 15380, 12066, 12067,
+ 8753, 8754, 5440, 5441, 5442, 5443, 5444, -3312,
+ -3312, 5492, 5493, 5449, 5450, 5451, 5452, -3312,
+ -3312, 5500, 5501, 5457, 2803, 2803, 2803, 2803,
+ 373, 2803, 2803, 5510, 2803, 5512, 11470, 5514,
+ 11472, 5516, 2205, 2206, 2207, -7533, -1530, 4427,
+ 2209, 5524, 2210, 630, 5527, 2211, 2212, 2213,
+ 2214, 2215, 2216, 2217, 2815, 2219, 2220, 5538,
+ 2221, 5540, 2222, 5542, 5543, 2223, -3312, -3312,
+ -3312, 5548, 5549, -3312, -3312, 2803, 2803, 2803,
+ 5555, 5556, 5557, 2803, 2803, 2803, 2803, 2803,
+ 2803, 2803, 2803, 2803, 2803, 2803, 2803, 2803,
+ 9050, 9051, 2803, 2803, 2803, 2803, 2803, 2803,
+ 2803, 2803, 2803, 2803, 2803, 2803, 4318, 7547,
+ 7548, 2803, 2803, 2803, 2803, 2803, 2803, 2803,
+ 2803, 6693, 6693, 2803, 2803, 6694, 6694, 757,
+ 5603, 6693, 6693, 6693, -1593, 7164, 7165, -1638,
+ -1638, -1593, 4576, 4576, 4576, 7175, 7176, -1635,
+ -1635, -1590, -1590, 5422, 2820, -1544, -1590, -1590,
+ -1590, -1590, -1590, 5422, 5422, 4363, 7149, 7150,
+ 7151, 4720, 4676, 4677, 4678, -5053, 7161, 20422,
+ 5425, 5425, 5425, 9160, 9161, 9162, 9163, 9164,
+ 9165, 9166, 5425, -1587, -1587, 7217, -2553, -2553,
+ 7177, 7178, -2553, 32767, 32767, -219, 5312, -2555,
+ -2555, -782, -782, -782, -782, 1806, 2801, 2801,
+ -6998, -6953, 5675, 5676, 5677, 5678, 5679, -7029,
+ -790, -6955, -6955, 57, -2545, -6909, -6955, 3143,
+ -2545, -6955, -2545, 58, 2352, 3149, 5695, 5696,
+ -52, 5698, 5699, 5700, 5701, 5702, 5703, 5704,
+ 5705, 5706, 5707, 5708, 5709, 5710, 5711, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -1838, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 6927,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -973, 32767, 32767,
+ 32767, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 4567, 4568, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -437,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -448, 32767, 32767, -450, -450,
+ -450, 0, 32767, 32767, 32767, -2166, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 0, 32767, -464,
+ -464, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -514,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 5757, 5758, 5759, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -4186, -4186, -12097,-4186, 32767,
+ -4187, -4187, -8787, 32767, 0, 0, 5952, 0,
+ 0, -4183, -4183, -4183, 0, -2386, -4182, 778,
+ -4183, -5935, 32767, 32767, -4690, -6249, -4184, -4184,
+ -4184, 32767, 32767, -4186, -4186, -77, 32767, -77,
+ 32767, -4188, 0, -4189, 32767, 0, 0, 0,
+ 0, 32767, 0, 0, 0, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 32767, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -5937, -2358, 0, 0, 0,
+ -8286, 471, 472, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 1747, 32767, -2126, 32767, 32767, 1748,
+ 1749, 1750, 1751, 1752, 1753, 8224, 1755, -539,
+ 1757, 781, 32767, 32767, 32767, -1991, -2035, 32767,
+ 32767, 782, -3784, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 837, 32767, 32767, 32767, 32767, 32767, -4008,
+ -4008, -4008, 2949, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, -797, 1806, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 4605, 4606,
+ 32767, 32767, 0, 455, 32767, 0, 32767, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -4244, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 784, 32767, 32767, 2950, 2951, 32767, 32767, 32767,
+ 32767, 32767, 32767, 786, 787, 32767, 1252, 1253,
+ 32767, 790, 32767, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 32767, 0, 32767, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -200, -200, -200,
+ -200, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ -5932, -5932, 32767, 32767, 2952, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -5387,
+ -5387, -5387, -5387, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 0, 32767, 32767,
+ 0, 0, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 497, 498, 499, 500,
+ 501, 502, 503, 504, 505, 506, 507, 508,
+ 32767, 32767, -156, 765, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -861,
+ 32767, 6106, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2953, 2954, 32767, 797,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 2955, 32767, 32767, 32767, -8929,
+ 32767, -8885, -8885, -8885, 32767, 32767, 32767, 32767,
+ 32767, 32767, -749, 7119, 7120, 32767, 32767, 32767,
+ 32767, 2760, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, -1181, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -5587, 0, 7596,
+ 7597, 0, 0, 0, 0, 0, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -714, 0,
+ 0, -713, -712, 0, -711, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1859,
+ 0, 3247, 32767, 32767, 0, 3247, 0, 3248,
+ 0, 3249, 0, 3250, 0, 3251, 0, 3252,
+ 808, 3252, 0, 3253, 0, 3254, 0, 0,
+ 3256, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 0, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 0, 0, 6824,
+ 32767, 0, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 4207, 4208, 0, 0, 0, 0, 0, 1896,
+ 0, 0, 1898, 1898, 1898, 1898, 0, 0,
+ 0, 1901, 1901, 0, 0, 0, 0, 0,
+ 0, -1319, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 7618, 7619, 7620,
+ 3, 3, 1863, 1863, 7067, 7068, 7025, 7026,
+ 7027, 7028, 7029, 7074, 7075, 7076, 7077, -334,
+ 7079, 7080, 7081, 7082, 7083, 7084, 7085, 7086,
+ 7087, 7088, 7089, 7090, 1349, 1349, 1349, 1349,
+ 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349,
+ 1349, 1349, 1349, 1349, 8967, 8968, 7109, 7110,
+ 1907, 1907, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 2976, 2977, 2978, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 820, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 821,
+ 2381, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 2005, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 823, 32767, 824, 32767,
+ 825, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 826, 32767, 32767, 32767, 32767, 32767,
+ 32767, 4575, 4576, 4577, 4578, 4579, 4580, 4581,
+ 4582, 4583, 4584, 4585, 32767, 32767, 829, 32767,
+ 32767, 32767, 32767, 830, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 6253, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 6253, -3848, 834, 835, 836, -3845, -3845, -3845,
+ -3845, -3845, -3845, 843, 844, -4280, 32767, 845,
+ 846, 6531, 848, -3839, 32767, -3840, -3840, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 1946, 32767,
+ 32767, 32767, -3849, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 853, 32767, 32767, 32767,
+ 32767, 854, 32767, 32767, 32767, 32767, 855, 32767,
+ 32767, 32767, 32767, 856, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 857, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -3799, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 8266, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 859, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 860,
+ 32767, 861, -5065, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 10746, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4526,
+ 32767, 4573, 4574, 4575, 32767, 32767, -2436, -1376,
+ 32767, 32767, 32767, 32767, 32767, -1689, -1689, 4349,
+ -4171, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 4588, 32767,
+ 4589, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4590,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 4591, 4592, 32767,
+ 32767, 32767, 32767, 32767, 32767, 2933, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 864, 32767, 32767, 32767,
+ 0, 32767, 0, 32767, 32767, -2977, 335, 335,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2992, 2993, 2994, 2995,
+ 32767, 32767, 32767, 4596, 2550, 32767, 32767, 32767,
+ -1188, 4769, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 4600, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 2997, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 4601, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 2013,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -11287,32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -4664, 32767, 32767, -4711, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -4718, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4049,
+ 32767, 32767, 32767, 4050, 4051, 4052, 17313, 32767,
+ 32767, 32767, 10684, 7370, 7371, 4057, 4058, 4059,
+ 4060, 4061, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 4603, 8793, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 1283, 4897, 4898, 4899, 12175, 4901, 4902, 32767,
+ 4903, 4904, 4905, 4906, 4907, 10276, -1469, 1282,
+ 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
+ 1282, 32767, 32767, 4920, 4921, 4063, -2051, -2050,
+ 4925, 4926, 32767, 7332, 7333, 32767, 7334, 7335,
+ 7336, 7337, 5045, 32767, 32767, 32767, -2049, -2048,
+ 32767, -8294, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1132, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 20166, 16852, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6908, 6909, 6910, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -4510, -4510, -4510, -4510, -4510, -4510, -4510, 0,
+ 0, 0, 0, 0, 0, -1831, -1831, -1831,
+ -15091,-11776,-11776,-8461, 0, 0, 0, -1834,
+ -1834, -1834, -1834, -1834, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -1819, -3615, 1345, -3616, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 32767, 32767, 0,
+ 0, 0, 0, 0, 0, 0, 8770, 8771,
+ 8772, 8773, 8774, 8775, 8776, 8777, 8778, 8779,
+ 45, 45, 45, 45, 2477, 2522, 45, 45,
+ 45, 45, -13215,-9900, -9900, -6585, -6585, -3270,
+ -3270, 45, 45, 45, 45, 45, 8802, 8803,
+ 0, 0, 45, 45, 45, 45, 8810, 8811,
+ 0, 0, 45, 2700, 2701, 2702, 2703, 5134,
+ 2705, 2706, 0, 2708, 0, -5957, 0, -5957,
+ 0, 3312, 3312, 3312, 13053, 7051, 1095, 3314,
+ 0, 3315, 4896, 0, 3317, 3317, 3317, 3317,
+ 3317, 3317, 3317, 2720, 3317, 3317, 0, 3318,
+ 0, 3319, 0, 0, 3321, 8857, 8858, 8859,
+ 0, 0, 8862, 8863, 2749, 2750, 2751, 0,
+ 0, 0, 2755, 2756, 2757, 2758, 2759, 2760,
+ 2761, 2762, 2763, 2764, 2765, 2766, 2767, -3479,
+ -3479, 2770, 2771, 2772, 2773, 2774, 2775, 2776,
+ 2777, 2778, 2779, 2780, 2781, 1267, -1961, -1961,
+ 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792,
+ -1097, -1096, 2795, 2796, -1094, -1093, 4845, 0,
+ -1089, -1088, -1087, 7200, -1556, -1556, 7248, 7249,
+ 7205, 1037, 1038, 1039, -1559, -1559, 7253, 7254,
+ 7210, 7211, 200, 2803, 7168, 7215, 7216, 7217,
+ 7218, 7219, 208, 209, 1269, -1516, -1516, -1516,
+ 916, 961, 961, 961, 10693, -1520, -14780,218,
+ 219, 220, -3514, -3514, -3514, -3514, -3514, -3514,
+ -3514, 228, 7241, 7242, -1561, 8210, 8211, -1518,
+ -1518, 8214, 8215, 9195, 5881, 351, 8219, 8220,
+ 6448, 6449, 6450, 6451, 3864, 2870, 2871, 12671,
+ 12627, 0, 0, 0, 0, 0, 12709, 6471,
+ 12637, 12638, 5627, 8230, 12595, 12642, 2545, 8234,
+ 12645, 8236, 5634, 3341, 2545, 0, 0, 5749,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 0, 0, 11602,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 1466,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5760, 0, 0, 0, 0, 0, 32767,
+ 0, 32767, 0, 0, 32767, 0, 0, 32767,
+ 0, 3507, 3508, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 1644, 1645, 1646, 1647, -5764, 1649, 1650, 1651,
+ 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659,
+ 1660, -4081, -4081, -4081, -4081, -4081, -4081, -4081,
+ -4081, -4081, -4081, -4081, -4081, -4081, -4081, -4081,
+ -4081, 3537, 3538, 1679, 3582, 3583, 3584, -3482,
+ -3482, -3482, -3482, -3482, -3526, -3526, -3526, -3526,
+ 3886, -3526, -3526, -3526, -3526, 3599, 3600, 3601,
+ 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609,
+ 3610, 3611, 3612, 3613, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+ -7275, 0, 0, -7234, 0, 0, 0, 0,
+ 0, -5368, 6378, 3628, 3629, 3630, 3631, 3632,
+ 3633, 3634, 3635, 3636, 3637, 3638, 3639, 0,
+ 0, 859, 6974, 6974, 0, 0, 3647, -2405,
+ -2405, 3650, -2405, -2405, -2405, -2405, -112, -2405,
+ -3201, 3658, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 32767, 32767, 32767,
+ 32767, 5280, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 4637, 4638, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 4014, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 802, 32767, 32767,
+ 32767, 32767, 803, -1055, 805, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 4639, 32767,
+ 32767, 32767, 806, -2445, 0, -2443, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 810, 32767, 32767,
+ 32767, 32767, 811, 812, 813, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -6211, -6211, -6211, -6211, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -6271, -6271,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 935, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, -10300,32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 0, 32767, 32767, 4640, 4641, 32767,
+ 32767, 32767, 32767, 32767, 4624, 32767, 32767, 32767,
+ -4233, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 1859, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 872, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -4568, -1253, 32767,
+ -3590, 32767, 32767, 32767, -1820, -1820, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 873, 874, 875, 3629, 0, 0,
+ 0, 5048, 5005, 5006, 5007, 5008, 5009, 5054,
+ 5055, 5056, 0, 0, 0, 0, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4118,
+ 32767, 32767, 32767, 32767, -4122, -4122, -4122, -4122,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4193,
+ 32767, -4194, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -4209, 32767, 32767, -4211, -4211, -4211,
+ -4211, -4211, -4211, -4211, 32767, 32767, -4213, -10683,
+ -4213, -1918, -4213, -6043, 32767, 32767, -4215, -6047,
+ 32767, -4216, -10696,-4216, -4216, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 4646, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 876, 877, 0, 32767, 0, 32767, 0,
+ 32767, 0, 32767, 0, 32767, 32767, 32767, 0,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 1844, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -2899, 0, 32767,
+ 0, 32767, 0, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 836, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32767, 0, 0, 0, 879,
+ 880, 881, 882, 883, 884, 885, 886, 0,
+ 0, 887, 0, 920, 0, 922, 923, 924,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 5431,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 3639, 889, 890, 891, 892, 893,
+ 894, 895, 896, 897, 898, 899, 900, -2739,
+ 927, -1881, 4234, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -459, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -458,
+ -457, 904, 32767, 905, 32767, 906, 32767, 907,
+ 32767, 908, 32767, 32767, 32767, 909, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 910,
+ 0, 0, 0, 0, 0, 0, 911, 0,
+ 912, 1626, 1626, 913, 914, 1626, 915, 916,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -1837, -1837, -1837,
+ -6487, -1837, -1837, 0, 0, 0, 917, 31,
+ 919, 0, 921, 0, 0, 0, 925, 0,
+ 32767, 4801, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -6470, 0, 2295,
+ 0, -1830, 0, -6475, 0, -1832, 0, 0,
+ -6480, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3665, 0, 0,
+ 0, 0, 2281, 0, 0, -7412, 5769, 5770,
+ 5771, 5772, 5773, 5774, 0, 0, 0, 0,
+ 32767, 0, 0, 32767, 32767, 0, 32767, 32767,
+ 0, 0, 32767, 32767, 0, 0, 0, -1842,
+ 32767, 0, 0, 0, -1846, -1846, -2560, -1846,
+ 0, -2560, -2559, 0, 0, 32767, 0, 32767,
+ 0, 0, 0, 0, 0, 0, 1388, 0,
+ 1387, 1387, 1387, 0, 1387, 1387, 1387, 1387,
+ 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
+ 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
+ 1387, 0, -1870, 0, -1871, 0, 0, 0,
+ 0, 0, 0, -1877, 0, 0, -1877, -1877,
+ 0, 0, 0, 4944, 0, -1875, 4947, 4948,
+ 0, 4950, 4951, 4952, 4953, 4954, 4955, 4956,
+ 4957, 4958, 4959, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+ 32767, 32767, 0, 0, 0, 0, 32767, 32767,
+ 32767, 0, 0, 931, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4650,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 5375,
+ 5376, 5377, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 13180, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, -4011, 933, -4011, 32767,
+ 935, 936, -4012, 938, 939, 940, 941, 942,
+ 943, 944, 945, 946, 947, 32767, 1075, 1076,
+ 1077, -6334, 1079, 1080, 954, 32767, 32767, 32767,
+ 32767, 955, 32767, 32767, 32767, 32767, 32767, 32767,
+ -4659, 32767, 32767, 32767, -4662, -4662, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 959, 960, 961, 32767, 962, 963, 964,
+ 965, 966, 967, 968, 969, 970, 971, 972,
+ 32767, 973, 974, 975, 976, 977, 978, 979,
+ 980, 981, 982, 983, 984, 985, 986, 987,
+ 988, 989, 990, 32767, 991, 992, 993, 994,
+ 995, 996, 997, 998, 999, 1000, 1001, 1002,
+ 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
+ 1011, 1012, 1013, 1014, 1015, 1016, 1017, -362,
+ -362, 32767, 32767, 32767, 32767, -410, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1019, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 164, 1021, -3551, -3551, 1024, 1025, 1026, 1027,
+ 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035,
+ 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043,
+ 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051,
+ 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059,
+ 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
+ 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075,
+ 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083,
+ 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091,
+ 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099,
+ 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107,
+ 1108, 1109, 1110, 1111, 1112, 1113, 1114, 32767,
+ 1115, 1116, 1117, 1118, 1119, 32767, 1120, 1121,
+ 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129,
+ 1130, 1131, 0, 1133, 1134, 1135, 1136, 1137,
+ 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145,
+ 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153,
+ 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161,
+ 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169,
+ 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177,
+ 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185,
+ 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193,
+ 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201,
+ 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209,
+ -18956,-15641,1212, 1213, 1214, 1215, 1216, 1217,
+ 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225,
+ -5682, -5682, -5682, 1229, 1230, 1231, 1232, 1233,
+ 1234, 1235, 1236, 1237, 1238, 1239, 5750, 5751,
+ 5752, 5753, 5754, 5755, 5756, 1247, 1248, 1249,
+ 1250, 1251, 1252, 3084, 3085, 3086, 16347, 13033,
+ 13034, 9720, 1260, 1261, 1262, 3097, 3098, 3099,
+ 3100, 3101, 1268, 1269, 1270, 1271, 1272, 1273,
+ 1274, 1275, 32767, 32767, 32767, 32767, 1276, 1277,
+ 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285,
+ 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293,
+ 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301,
+ 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309,
+ 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317,
+ 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325,
+ 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333,
+ 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341,
+ 1342, 3162, 4959, 0, 4962, 1347, 1348, 1349,
+ 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357,
+ 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 7481,
+ 7482, 7483, 7484, 5053, 5009, 7487, 7488, 7489,
+ 7490, 20751, 17437, 17438, 14124, 14125, 10811, 10812,
+ 7498, 7499, 7500, 7501, 7502, 32767, 32767, 7548,
+ 7549, 7505, 7506, 7507, 7508, 32767, 32767, 7554,
+ 7555, 7511, 4857, 4857, 4857, 4857, 2427, 4857,
+ 4857, 7564, 4857, 7566, 13524, 7568, 13526, 7570,
+ 4259, 4260, 4261, -5479, 524, 6481, 4263, 7578,
+ 4264, 2684, 1421, -7842, -4527, -4527, -1212, -1212,
+ -1212, -1212, -1212, 7545, 7546, 0, 0, -1214,
+ -1214, -1214, -1214, 7551, 7552, 32767, 1610, -1216,
+ 1439, 1440, 1441, 1442, 3873, 1444, 1445, 32767,
+ 1446, 32767, -7220, 32767, -7221, 0, 2047, 2047,
+ 2047, 11788, 5786, -170, 2049, -1265, 2050, 3631,
+ -1265, 2052, 2052, 2052, 2052, 2052, 2052, 2052,
+ 1455, 2052, 2052, -1265, 2053, -1265, 2054, -1265,
+ -1265, 2056, 7592, 7593, 7594, 32767, 32767, 7595,
+ 7596, 1482, 1483, 1484, -1267, -1267, -1267, 1488,
+ 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496,
+ 1497, 1498, 1499, 1500, -4746, -4746, 1503, 1504,
+ 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512,
+ 1513, 1514, 0, -3228, -3228, 1518, 1519, 1520,
+ 1521, 1522, 1523, 1524, 1525, -2364, -2363, 1528,
+ 1529, -2361, -2360, 3578, 0, -2357, -2356, -2355,
+ 5932, -2824, -2824, 5980, 5981, 5937, -231, -230,
+ -229, -2827, -2827, 5985, -225, 5941, 5942, -1069,
+ 1534, 5899, 5946, 5947, 5948, 5949, 5950, -1061,
+ -1060, 0, -2785, 0, -355, -355, -310, -310,
+ -310, 9422, -2791, 32767, -1054, -1053, -1052, -4786,
+ -4786, -4786, -4786, -4786, -4786, -4786, -1044, 5969,
+ 5970, -2833, 6938, 6939, -2790, -2790, 6942, 0,
+ 32767, 4607, -923, 6945, 32767, 5173, 5174, 5175,
+ 5176, 2589, 1595, 1596, 11396, 11352, 32767, 32767,
+ 6126, 2812, 2813, 2814, 2815, 2816, -5940, -5940,
+ 1607, 1608, 2823, 32767, 32767, 1516, 0, -8581,
+ 0, 0, 728, 1525, 163, -11068,0, -2262,
+ -2306, -2305, 32767, 32767, 0, 0, 1580, 0,
+ 0, 0, -6443, 1685, -10176,-4173, 1784, -4173,
+ 0, -4172, 5925, -4171, -4171, -4171, 0, -437,
+ 0, 0, 0, 161, -435, 0, 2883, -434,
+ 0, 0, 0, 0, -436, 0, -5972, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2889,
+ 2890, 2891, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 6371,
+ 0, 0, 0, 0, 0, 0, 0, 117,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32767, 0, 0, 3991, 3991,
+ 3991, 3991, 0, 3990, 3990, 3990, -1947, 1632,
+ 3990, 3990, 3990, -4296, 4461, 4462, -4341, -4341,
+ -4296, 1873, 1873, 1873, 4472, 4473, -4338, 1873,
+ -4292, -4292, 2720, 118, -4246, -4292, -4292, 117,
+ -4293, -4293, 2719, 2719, 1660, 4446, 1662, 2018,
+ 2019, 1975, 1976, 1977, -7754, -7754, -8733, -5418,
+ 113, 0, 112, -2157, -5891, -5891, 0, -5892,
+ 6455, -5893, 0, 0, 0, 32767, 32767, 32767,
+ 5826, 32767, 32767, 32767, 32767, 6806, 32767, -2039,
+ 32767, 5829, 32767, 5830, 5831, 5832, 32767, 5833,
+ 5834, 32767, 5835, 32767, 32767, -3520, 0, 5837,
+ 0, 5838, 0, 4035, 0, 5840, 32767, 10251,
+ 154, 1671, 10253, 1673, 1674, 947, 151, 1514,
+ 12746, 1679, 3942, 3987, 3987, 3987, 13719, 13720,
+ 14700, 103, 5855, 13723, 5857, 8127, 0, 11862,
+ 5860, -96, 5862, 1690, 5863, -4233, 5864, 5865,
+ 5866, 5867, 5868, 5869, 5870, 5871, 5872, 5873,
+ 32767, 5874, 5875, 5876, 5877, 5878, 5879, 5880,
+ 5881, 5882, 5883, 13795, 5885, 5886, 5887, 5888,
+ 10489, 5890, 1703, 1704, -4247, 1706, 1707, 5891,
+ 5892, 5893, 1711, 4098, 5895, 5896, 5897, 7650,
+ 32767, 5899, 6406, 7966, 5902, 5903, 5904, 5905,
+ 5906, 5907, 5908, 1800, 5910, 1801, 5912, 5913,
+ 5914, 5915, 32767, 1727, 1728, 1729, 1730, 32767,
+ 1731, 1732, 1733, 32767, 1734, 1735, 1736, 1737,
+ 1738, 1739, 1740, 32767, 1741, 1742, 1743, 1744,
+ 1745, 1746, 32767, 32767, 32767, 32767, 1747, 1748,
+ 1749, 1750, 1751, 32767, 32767, 32767, 32767, 32767,
+ 32767, 1752, 1753, 1754, 1755, 1756, 1757, 1758,
+ 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766,
+ 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774,
+ 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782,
+ 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790,
+ 1791, 7729, 4151, 1794, 1795, 1796, 10083, 1327,
+ 1327, 10131, 10132, 10088, 3920, 3921, 3922, 1324,
+ 1324, 10136, 3926, 10092, 10093, 3082, 5685, 10050,
+ 10097, 0, 5689, 10100, 5691, 3089, 796, 0,
+ 1363, 12595, 3792, 3792, 3837, 3837, 3837, 13569,
+ 13570, 14550, 11236, 5706, 13574, 5708, 7978, 11713,
+ 11714, 11715, 11716, 11717, 11718, 11719, 7978, 966,
+ 966, 9770, 0, 0, 9730, 9731, 0, 0,
+ -979, 2336, 7867, 0, 0, 32767, 0, 0,
+ 0, 32767, 0, 0, 32767, 0, 32767, 32767,
+ 9356, 32767, 0, 32767, 0, 32767, 1804, 2602,
+ 0, -4364, -4410, 5688, 0, -4410, 0, 2603,
+ 4897, 5694, 4332, -6899, 1905, 1906, 1862, 1863,
+ 1864, -7867, -7867, -8846, -5531, 0, -7867, 0,
+ -2269, -6003, -6003, 0, 5957, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -7911, 0,
+ 0, 0, 0, -4600, 0, 0, 4156, 32767,
+ 32767, 0, 0, 0, 0, 0, 1796, 0,
+ 0, 0, -1752, 0, 0, -506, -2065, 0,
+ 0, 0, 0, 0, 0, 0, 4109, 0,
+ 4110, 0, 0, 0, 0, 0, 4111, 17372,
+ 0, 14058, 10744, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -4650, 0, 0, 4161, 32767,
+ 32767, 4117, 32767, 4118, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -7946, 32767, -4632, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4642,
+ -4642, 4123, 4124, -4687, 0, 0, -4644, -4644,
+ 0, 0, -4646, -4646, 32767, 32767, 32767, 32767,
+ 32767, 32767, 4084, 4085, 32767, 32767, 1609, 4087,
+ 32767, 32767, 4088, 17349, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 10092, 4136,
+ 10094, 4138, 10096, 0, 10097, 10098, 10099, 10100,
+ 10101, 0, 32767, 32767, 32767, 0, 0, 0,
+ 0, 0, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32767, 32767, 0, 10138, 10139,
+ 0, 0, 0, 10145, 32767, 32767, 32767, 32767,
+ 32767, 32767, -1425, 8316, 2314, -3642, 32767, 0,
+ 32767, 32767, 32767, 32767, -1426, -1426, -1426, -1426,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 52, 52, 52, 52, 52,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 1849, 1850, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, -5633, -5633, -5633, -5633, -5633, -5633, -5633,
+ -5633, -5633, -5633, -5633, -5633, -5633, -5633, -5633,
+ -5633, 1985, 1986, 127, 2030, 2031, 2032, -5034,
+ 32767, 32767, 32767, 32767, 32767, 0, 32767, 32767,
+ 32767, 5916, 5917, 5918, 5919, 5920, 5921, 5922,
+ 5923, 5924, 8824, 5926, 32767, 32767, 0, 32767,
+ 0, 5927, 5928, 5929, 5930, 5931, 5932, 5933,
+ 5934, 5935, 5936, 5937, 5938, 5939, 5940, 5105,
+ 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949,
+ 5950, 5951, 5952, 5953, 5954, 5955, 5956, 5957,
+ 32767, 5958, 5959, 5960, 5082, 5082, 5082, 5082,
+ 5082, 5082, 5082, 5082, 5969, 5970, 5084, 5972,
+ 5053, 5974, 5053, 5053, 5053, 5978, 5979, 5980,
+ 5981, 5982, 5983, 5984, 5985, 5986, 5987, 5988,
+ 5989, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2552, 32767, 32767, 32767,
+ 32767, 32767, 32767, 5990, 5991, 5992, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 5993, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 6936, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 1851, 1852, 1853, 1854,
+ 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862,
+ 1863, 1864, 1200, 2121, 1200, 1868, 1869, 1870,
+ 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878,
+ 1879, 1880, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, -5282, 1188,
+ 3483, 1188, -642, 1188, -5287, 1188, -644, 1188,
+ 1188, -5292, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1925, 1926,
+ -6187, -6231, 1184, 3465, 1184, 1184, -6228, 6953,
+ 6954, 6955, 6956, 0, 1939, 1940, 1941, 1942,
+ 1943, 1944, 1178, 1178, 1947, 1948, 1949, 1950,
+ 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958,
+ 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966,
+ 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974,
+ 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982,
+ 1983, 1984, 1985, 1986, 1987, 1988, 1989, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 709, 666, 667, 668, 32767, 669,
+ 714, 715, 716, 717, -6694, 719, 720, 721,
+ 32767, 722, 723, 724, 32767, 725, 726, 727,
+ 728, -5013, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 6052, 0, 0, 6055,
+ 0, 0, 0, 0, 2293, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1244, 1245, 1246,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4660,
+ -4660, -4660, -4660, 4097, 4098, -4705, -4705, -4660,
+ -4660, -4660, -4660, 4105, 4106, -4705, 32767, -4661,
+ -4661, -4661, -4617, -4617, -4663, -4663, -4663, -4663,
+ -4663, -4663, -4663, 4072, 4073, 4074, 4075, 1644,
+ 1600, 4078, 4079, 4080, 4081, 17342, 14028, 14029,
+ 10715, 10716, 7402, 7403, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32767, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1380, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 856, 0, 4573,
+ 4574, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 0, 0, 0,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 5204, 5161, 5162, 5163, 5164, 5165, 5210, 5211,
+ 5212, 5213, -2198, 5215, 5216, 5217, 5218, 5219,
+ 5220, 5221, 5222, 5223, 5224, 5225, 5226, -515,
+ -515, -515, -515, -515, -515, -515, -515, -515,
+ -515, -515, -515, -515, -515, -515, -515, 7103,
+ 7104, 5245, 5246, 5247, 5248, 5249, -1014, 5251,
+ 5252, 5253, 5254, 5255, 5256, 5257, 5258, 5259,
+ 5260, 8663, 8664, -92, -92, 8712, 8713, 8669,
+ 8670, 8671, 8672, -92, -92, 8720, 8721, 8677,
+ 8678, 8679, 8636, 8637, 8684, 8685, 8686, 8687,
+ 8688, 8689, 8690, -44, -44, -44, -44, 2388,
+ 2433, -44, -44, -44, -44, -13304,-9989, -9989,
+ -6674, -6674, -3359, -3359, -44, -44, -44, -44,
+ -44, 8713, 8714, -89, -89, -44, -44, -44,
+ -44, 8721, 8722, -89, -89, -44, -44, -44,
+ 0, 0, -46, -46, -46, -46, -46, -46,
+ -46, 8689, 8690, 8691, 8692, 6261, 6217, 8695,
+ 8696, 8697, 8698, 21959, 18645, 18646, 15332, 15333,
+ 12019, 12020, 8706, 8707, 8708, 8709, 8710, -46,
+ -46, 8758, 8759, 8715, 8716, 8717, 8718, -46,
+ -46, 8766, 8767, 8723, 8724, 8725, 8726, 8727,
+ 8728, 8729, 8730, 8731, 8732, 8733, 8734, 0,
+ 0, 0, 0, 2432, 2477, 0, 0, 0,
+ 0, -13260,-9945, -9945, -6630, -6630, -3315, -3315,
+ 0, 0, 0, 0, 0, 8757, 8758, -45,
+ -45, 0, 0, 0, 0, 8765, 8766, -45,
+ -45, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 8735, 8736, 8737,
+ 8738, 6307, 6263, 8741, 8742, 8743, 8744, 22005,
+ 18691, 18692, 15378, 15379, 12065, 12066, 8752, 8753,
+ 8754, 8755, 8756, 0, 0, 8804, 8805, 8761,
+ 8762, 8763, 8764, 0, 0, 8812, 8813, 8769,
+ 6115, 6115, 6115, 6115, 3685, 6115, 6115, 8822,
+ 6115, 8824, 14782, 8826, 14784, 8828, 5517, 5518,
+ 5519, -4221, 1782, 7739, 5521, 8836, 5522, 3942,
+ 8839, 5523, 5524, 5525, 5526, 5527, 5528, 5529,
+ 6127, 5531, 5532, 8850, 5533, 8852, 5534, 8854,
+ 8855, 5535, 0, 0, 0, 8860, 8861, 0,
+ 0, 0, 13252, 9939, 9939, 6626, 6626, 3313,
+ 3313, 0, 0, 0, -9269, -3312, 0, 0,
+ 0, 9741, 32767, 32767, 0, 32767, 0, 32767,
+ 32767, 0, 0, 0, 0, 0, 0, 0,
+ -597, 0, 0, 32767, 0, 32767, 0, 32767,
+ 32767, 0, 0, 32767, 32767, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -1387, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -1773, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, -4161, 1581, 1582, 32767, 32767, 1990, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 1539, 32767, 32767, 6150, 6151, 6152, 411,
+ 411, 411, 411, 411, 411, 411, 411, 411,
+ 411, 411, 411, 411, 411, 411, 411, 8029,
+ 8030, 6171, 6172, 969, 969, 1013, 1013, 1013,
+ 1013, 1013, 969, 969, 969, 969, 8381, 969,
+ 969, 969, 969, 969, 969, 969, 969, 969,
+ 969, 969, 969, 6711, 6712, 6713, 6714, 6715,
+ 6716, 6717, 6718, 6719, 6720, 6721, 6722, 6723,
+ 6724, 6725, 6726, -891, -891, 969, 969, 6173,
+ 6174, 6131, 6132, 6133, 6134, 6135, 6180, 6181,
+ 6182, 6183, -1228, 6185, 6186, 6187, 6188, 6189,
+ 6190, 6191, 6192, 6193, 6194, 6195, 6196, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 8073,
+ 8074, 6215, 6216, 1013, 1013, 1057, 1057, 1057,
+ 1057, 1057, 1013, 1013, 1013, 1013, 8425, 1013,
+ 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
+ 1013, 1013, 1013, 6755, 6756, 6757, 6758, 6759,
+ 6760, 6761, 6762, 6763, 6764, 6765, 6766, 6767,
+ 6768, 6769, 6770, -847, -847, 1013, 1013, 6217,
+ 6218, 6175, 6176, 6177, 6178, 6179, 6224, 6225,
+ 6226, 6227, -1184, 6229, 6230, 6231, 6232, 6233,
+ 6234, 6235, 6236, 6237, 6238, 6239, 6240, 499,
+ 499, 499, 499, 499, 499, 499, 499, 499,
+ 499, 499, 499, 499, 499, 499, 499, 8117,
+ 8118, 6259, 6260, 6261, 6262, 6263, 0, 6265,
+ 6266, 6267, 6268, 6269, 6270, 6271, 6272, 6273,
+ 6274, 9677, 9678, 922, 922, 9726, 9727, 9683,
+ 9684, 9685, 9686, 922, 922, 9734, 9735, 9691,
+ 9692, 9693, 9650, 9651, 9698, 9699, 9700, 9701,
+ 9702, 9703, 9704, 970, 970, 970, 970, 3402,
+ 3447, 970, 970, 970, 970, -12290,-8975, -8975,
+ -5660, -5660, -2345, -2345, -2345, -2345, -2345, 6412,
+ 6413, -2390, -2390, -2345, -2345, -2345, -2345, 6420,
+ 6421, -2390, -2390, -2345, -2345, -2345, -2301, -2301,
+ -2347, -2347, -2347, -2347, -2347, -2347, -2347, 6388,
+ 6389, 6390, 6391, 3960, 3916, 6394, 6395, 6396,
+ 6397, 19658, 16344, 16345, 13031, 13032, 9718, 9719,
+ 6405, 6406, 6407, 6408, 6409, -2347, -2347, 6457,
+ 6458, 6414, 6415, 6416, 6417, -2347, -2347, 6465,
+ 6466, 6422, 6423, 6424, 6381, 6382, 6429, 6430,
+ 6431, 6432, 6433, 6434, 6435, -2299, -2299, -2299,
+ -2299, 133, 178, -2299, -2299, -2299, -2299, -15559,
+ -12244,-12244,-8929, -8929, -5614, -5614, -2299, -2299,
+ -2299, -2299, -2299, 6458, 6459, -2344, -2344, -2299,
+ -2299, -2299, -2299, 6466, 6467, -2344, -2344, -2299,
+ -2299, -2299, -2299, -2299, -2299, -2299, -2299, -2299,
+ -2299, -2299, -2299, 6436, 6437, 6438, 6439, 4008,
+ 3964, 6442, 6443, 6444, 6445, 19706, 16392, 16393,
+ 13079, 13080, 9766, 9767, 6453, 6454, 6455, 6456,
+ 6457, -2299, -2299, 6505, 6506, 6462, 6463, 6464,
+ 6465, -2299, -2299, 6513, 6514, 6470, 6471, 6472,
+ 6473, 6474, 6475, 6476, 6477, 6478, 6479, 6480,
+ 6481, -2253, -2253, -2253, -2253, 179, 224, -2253,
+ -2253, -2253, -2253, -15513,-12198,-12198,-8883, -8883,
+ -5568, -5568, -2253, -2253, -2253, -2253, -2253, 6504,
+ 6505, -2298, -2298, -2253, -2253, -2253, -2253, 6512,
+ 6513, -2298, -2298, -2253, 402, 403, 404, 405,
+ 2836, 407, 408, -2298, 410, -2298, -8255, -2298,
+ -8255, -2298, 1014, 1014, 1014, 10755, 4753, -1203,
+ 1016, -2298, 1017, 2598, -2298, 1019, 1019, 1019,
+ 1019, 1019, 1019, 1019, 422, 1019, 1019, -2298,
+ 1020, -2298, 1021, -2298, -2298, 1023, 6559, 6560,
+ 6561, -2298, -2298, 6564, 6565, 6566, -6685, -3371,
+ -3370, -56, -55, 3259, 3260, 3261, 12531, 6575,
+ 3264, 3265, 3266, -6474, -471, 5486, 3268, 6583,
+ 3269, 1689, 6586, 3270, 3271, 3272, 3273, 3274,
+ 3275, 3276, 3874, 3278, 3279, 6597, 3280, 6599,
+ 3281, 6601, 6602, 3282, 3283, 32767, 32767, 32767,
+ 3284, 3285, 3286, 3287, 3288, 3289, 3290, 3291,
+ 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3299,
+ 3300, 3301, 3302, 3303, 3304, 3305, 3306, 3307,
+ 3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315,
+ 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323,
+ 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331,
+ 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339,
+ 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347,
+ 3348, 3349, 3350, 3351, 32767, 32767, 3352, 3353,
+ 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361,
+ 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369,
+ 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377,
+ 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385,
+ 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393,
+ 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401,
+ 3402, 3403, 3404, 3405, 3406, 3407, 4795, 3409,
+ 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417,
+ 3418, 3419, 3420, 3421, 3422, 3423, 3424, 3425,
+ 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433,
+ 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441,
+ 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449,
+ 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 3458,
+ 3459, 3460, 3461, 3462, -8139, 3464, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 3465, 3466, 2001, 3468, 3469, 32767,
+ 32767, 32767, 32767, 32767, 3470, 3471, 3472, 3473,
+ 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481,
+ 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489,
+ 3490, 3491, 3492, 3493, 3494, 3495, 32767, 3496,
+ 3497, 3498, 3499, 3500, 32767, 3501, 32767, 3502,
+ 3503, 32767, 3504, 3505, 32767, 3506, 0, 0,
+ 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516,
+ 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3524,
+ 3525, 3526, 3527, 3528, 3529, 3530, 3531, 3532,
+ 3533, 3534, 3535, 3536, 3537, 3538, 3539, 3540,
+ 3541, 3542, 3543, 3544, 3545, 1902, 1902, 1902,
+ 1902, 9314, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 7644, 7645,
+ 7646, 7647, 7648, 7649, 7650, 7651, 7652, 7653,
+ 7654, 7655, 7656, 7657, 7658, 7659, 42, 42,
+ 1902, 0, 0, 0, 7067, 7068, 7069, 7070,
+ 7071, 7116, 7117, 7118, 7119, -292, 7121, 7122,
+ 7123, 7124, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3614, 3615, 3616, 10892, 3618, 3619,
+ 10854, 3621, 3622, 3623, 3624, 3625, 8994, -2751,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3640, 3641, 2783, -3331,
+ -3330, 3645, 3646, 0, 6053, 6054, 0, 6056,
+ 6057, 6058, 6059, 3767, 6061, 6858, 0, 0,
+ 3659, 0, 0, 1531, 1531, 1531, 1531, 1531,
+ 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531,
+ 1531, 1531, 9149, 9150, 7291, 7292, 7293, 7294,
+ 7295, 1032, 7297, 7298, 7299, 7300, 7301, 7302,
+ 7303, 7304, 0, 7307, 10710, 10711, 1955, 1955,
+ 10759, 10760, 10716, 4548, 4549, 4550, 1952, 1952,
+ 10764, 10765, 10721, 10722, 3711, 6314, 10679, 10726,
+ 10727, 10728, 10729, 10730, 3719, 3720, 1996, 1996,
+ 1996, 1996, 4428, 4473, 4473, 3728, 1994, 1994,
+ -11266,3732, 3733, 3734, 0, 0, 0, 0,
+ 0, 0, 0, 3742, 10755, 10756, 1953, 1953,
+ 1998, 1998, 1998, 11730, 11731, 12711, 9397, 3867,
+ 11735, 3869, 6139, 9874, 9875, 9876, 9877, 9878,
+ 9879, 9880, 6139, -873, -873, 7931, -1839, -1839,
+ 7891, 7892, -1839, -1839, -2818, 497, 6028, -1839,
+ -1839, -66, -66, -66, -66, 2522, 2523, -6280,
+ -6280, -6235, -66, -66, -66, 2533, 2534, -6277,
+ -66, -6231, -6231, 781, -1821, -6185, -6231, 3867,
+ -1821, -6231, -1821, 782, 3076, 3873, 2511, -8720,
+ 84, 85, 41, 42, 43, -9688, -9688, -10667,
+ -7352, -1821, -9688, -1821, -4090, -7824, -7824, -7824,
+ -7824, -7824, -7824, -7824, -4082, 2931, 2932, -5871,
+ 3900, 3901, -5828, -5828, 3904, 3905, 4885, 1571,
+ -3959, 3909, 3910, 2138, 2139, 2140, 2141, -446,
+ -446, 8358, 8359, 8315, 2147, 2148, 2149, -449,
+ -449, 8363, 2153, 8319, 8320, 1309, 3912, 8277,
+ 8324, -1773, 3916, 8327, 3918, 1316, -977, -1773,
+ -410, 10822, 2019, 2019, 2064, 2064, 2064, 11796,
+ 11797, 12777, 9463, 3933, 11801, 3935, 6205, 9940,
+ 9941, 9942, 9943, 9944, 9945, 9946, 6205, -807,
+ -807, 7997, -1773, -1773, 7957, 7958, -1773, -1773,
+ -2752, 563, 6094, -1773, -1773, 0, 0, 0,
+ 0, 2588, 2589, -6214, -6214, -6169, 0, 0,
+ 0, 2599, 2600, -6211, 0, -6165, -6165, 847,
+ -1755, -6119, -6165, 3933, -1755, -6165, -1755, 848,
+ 3142, 3939, 2577, -8654, 150, 151, 107, 108,
+ 109, -9622, -9622, -10601,-7286, -1755, -9622, -1755,
+ -4024, -7758, -7758, -7758, -7758, -7758, -7758, -7758,
+ -4016, 2997, 2998, -5805, 3966, 3967, -5762, -5762,
+ 3970, 3971, 4951, 1637, -3893, 3975, 3976, 2204,
+ 2205, 2206, 2207, -380, -380, 8424, 8425, 8381,
+ 2213, 2214, 2215, -383, -383, 8429, 2219, 8385,
+ 8386, 1375, 3978, 8343, 8390, -1707, 3982, 8393,
+ 3984, 1382, -911, -1707, -344, 10888, 2085, 2085,
+ 2130, 2130, 2130, 11862, 11863, 12843, 9529, 3999,
+ 11867, 4001, 6271, 10006, 10007, 4005, -1951, 4007,
+ 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015,
+ 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023,
+ 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031,
+ 11943, 4033, 4034, 4035, 4036, 8637, 4038, 4039,
+ -116, 32767, 32767, 4041, 4042, 4043, 4044, 4045,
+ 2250, 4047, 4048, 4049, 5802, 4051, 4052, 4559,
+ 6119, 4055, 4056, 4057, 4058, 4059, 4060, 4061,
+ -47, 4063, -46, 4065, 4066, 4067, 4068, 4069,
+ -41, -13301,4072, -9985, -6670, 4075, 4076, 4077,
+ 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085,
+ 4086, 4087, 4088, 4089, 4090, 8741, 4092, 4093,
+ -67, 32767, 32767, 32767, 32767, 32767, 2257, 32767,
+ 2258, 2259, 2260, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2261, 32767, 2262, 32767,
+ 2263, 32767, 2264, 32767, 2265, 32767, 2266, 32767,
+ 2267, 8737, 8738, -26, -26, 8786, 4100, 4101,
+ 8746, 8747, 4104, 4105, 8752, 8753, 32767, 2274,
+ 32767, 2275, 32767, 32767, 32767, 32767, 32767, 32767,
+ 2276, 2277, 32767, 2278, 2279, 32767, 2280, 0,
+ 32767, 2282, 9695, 4109, -3486, -3486, 4112, 4113,
+ 4114, 4115, 4116, 4117, 32767, 32767, 32767, 32767,
+ 32767, 32767, 4118, 4119, 4120, 4121, 4122, 4123,
+ 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131,
+ 4132, 4133, 4134, 4849, 4136, 4137, 4851, 4851,
+ 4140, 4852, 4142, 4143, 4144, 4145, 4146, 4147,
+ 4148, 4149, 4150, 4151, 2293, 4153, 907, 32767,
+ 2295, 4155, 909, 4157, 910, 4159, 911, 4161,
+ 912, 4163, 913, 4165, 914, 32767, 915, 4168,
+ 916, 4170, 917, 4172, 4173, 918, 4175, 4176,
+ 4177, 4178, 4179, 4180, 4181, 4182, 4183, 4184,
+ 4185, 2309, 4186, 4187, 4188, 4189, 2312, 2313,
+ 32767, 2314, 4190, 4191, -2632, 2317, 4193, 32767,
+ 4194, 4195, 4196, 4197, 4198, 4199, 4200, 4201,
+ 4202, 4203, 4204, 4205, 4206, 0, 0, 4209,
+ 4210, 4211, 4212, 4213, 2318, 4215, 4216, 2319,
+ 2320, 2321, 2322, 4221, 4222, 4223, 2323, 2324,
+ 4226, 4227, 4228, 4229, 4230, 4231, 5551, 4233,
+ 4234, 4235, 4236, 4237, 4238, 4239, 4240, 4241,
+ 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249,
+ 4250, 4251, 4252, 4253, 4254, 4255, 4256, 4257,
+ 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265,
+ 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273,
+ 4274, 4275, -3342, -3342, -3342, 4276, 4277, 2418,
+ 2419, -2784, -2784, -2740, -2740, -2740, -2740, -2740,
+ -2784, -2784, -2784, -2784, 4628, -2784, -2784, -2784,
+ -2784, -2784, -2784, -2784, -2784, -2784, -2784, -2784,
+ -2784, 2958, 2959, 2960, 2961, 2962, 2963, 2964,
+ 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972,
+ 2973, -4644, -4644, -2784, -2784, 2420, 2421, 2378,
+ 2379, 2380, 2381, 2382, 2427, 2428, 2429, 2430,
+ -4981, 2432, 2433, 2434, 2435, 2436, 2437, 2438,
+ 2439, 2440, 2441, 2442, 2443, -3298, -3298, -3298,
+ -3298, -3298, -3298, -3298, -3298, -3298, -3298, -3298,
+ -3298, -3298, -3298, -3298, -3298, 4320, 4321, 2462,
+ 4365, 4366, 4367, -2699, -2699, -2699, -2699, -2699,
+ -2743, -2743, -2743, -2743, 4669, -2743, -2743, -2743,
+ -2743, 4382, 4383, 4384, 4385, 4386, 4387, 4388,
+ 4389, 4390, 4391, 4392, 4393, 4394, 4395, 4396,
+ 4397, 4398, 4399, 4400, 4401, 4402, 4403, 4404,
+ 4405, 4406, 4407, 4408, 4409, 4410, 4411, 4412,
+ 4413, 4414, 4415, 4416, 4417, 4418, 4419, 4420,
+ 4421, 4422, 4423, 4424, 4425, 4426, 4427, 4428,
+ 4429, 816, 816, 816, -6459, 816, 816, -6418,
+ 816, 816, 816, 816, 816, -4552, 7194, 4444,
+ 4445, 4446, 4447, 4448, 4449, 4450, 4451, 4452,
+ 4453, 4454, 4455, 816, 816, 1675, 7790, 7790,
+ 816, 816, 4463, -1589, -1589, 4466, -1589, -1589,
+ -1589, -1589, 704, -1589, -2385, 4474, 4475, 817,
+ 4477, 4478, 2948, 2949, 2950, 2951, 2952, 2953,
+ 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961,
+ 2962, -4655, -4655, -2795, -2795, -2795, -2795, -2795,
+ 3469, -2795, -2795, -2795, -2795, -2795, -2795, -2795,
+ -2795, 4510, -2796, -6198, -6198, 2559, 2560, -6243,
+ -6243, -6198, -6198, -6198, -6198, 2567, 2568, -6243,
+ -6243, -6198, -6198, -6198, -6154, -6154, -6200, -6200,
+ -6200, -6200, -6200, -6200, -6200, 2535, 2536, 2537,
+ 2538, 107, 63, 2541, 2542, 2543, 2544, 15805,
+ 12491, 12492, 32767, 4540, 4541, 4542, 4543, 4544,
+ 4545, 4546, 2548, -6208, -6208, 2596, 2597, 2553,
+ 2554, 2555, 2556, -6208, -6208, 2604, 2605, 2561,
+ 2562, 2563, 2520, 2521, 2568, 2569, 2570, 2571,
+ 2572, 2573, 2574, -6160, -6160, -6160, -6160, -3728,
+ -3683, -6160, -6160, -6160, -6160, -19420,-16105,-16105,
+ -12790,-12790,-9475, -9475, -6160, -6160, -6160, -6160,
+ -6160, 32767, 2597, -6206, -6206, -6161, -6161, -6161,
+ -6161, 2604, 2605, -6206, -6206, -6161, -6161, -6161,
+ -6161, -6161, -6161, -6161, -6161, -6161, -6161, -6161,
+ -6161, 2574, 2575, 2576, 2577, 146, 102, 2580,
+ 2581, 2582, 2583, 15844, 12530, 12531, 9217, 9218,
+ 5904, 5905, 2591, 2592, 2593, 2594, 2595, -6161,
+ -6161, 2643, 2644, 2600, 2601, 2602, 2603, -6161,
+ -6161, 2651, 2652, 2608, 2609, 2610, 2611, 2612,
+ 2613, 2614, 2615, 2616, 2617, 2618, 2619, -6115,
+ -6115, -6115, -6115, -3683, -3638, -6115, -6115, -6115,
+ -6115, -19375,-16060,-16060,-12745,-12745,-9430, -9430,
+ -6115, -6115, -6115, -6115, -6115, 2642, 2643, -6160,
+ -6160, -6115, -6115, -6115, -6115, 2650, 2651, -6160,
+ -6160, -6115, -3460, -3459, -3458, -3457, -1026, -3455,
+ -3454, -6160, -3452, -6160, -12117,-6160, -12117,-6160,
+ -2848, -2848, -2848, 6893, 891, -5065, -2846, -6160,
+ -2845, -1264, 0, 9264, 5950, 5951, 2637, 2638,
+ 2639, 2640, 2641, -6115, -6115, 2689, 2690, 2646,
+ 2647, 2648, 2649, -6115, -6115, 2697, 2698, 2654,
+ 0, 0, 0, 0, -2430, 0, 0, 2707,
+ 0, 2709, 8667, 2711, 8669, 2713, -598, -597,
+ -596, -10336,-4333, 1624, -594, 2721, -593, -2173,
+ 2724, -592, -591, -590, -589, -588, -587, -586,
+ 12, -584, -583, 2735, -582, 2737, -581, 2739,
+ 2740, -580, -6115, -6115, -6115, 2745, 2746, -6115,
+ -6115, 0, 0, 0, 2752, 2753, 2754, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6247, 6248, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
+ };
+
+ const unsigned char *k = (const unsigned char *) key;
+ size_t keylen = 4;
+ uint32 a = 0;
+ uint32 b = 1;
+
+ while (keylen--)
+ {
+ unsigned char c = *k++;
+
+ a = a * 257 + c;
+ b = b * 8191 + c;
+ }
+ return h[a % 13209] + h[b % 13209];
+}
+
+/* Hash lookup information for decomposition */
+static const pg_unicode_decompinfo UnicodeDecompInfo =
+{
+ UnicodeDecompMain,
+ Decomp_hash_func,
+ 6604
+};
diff --git a/src/tools/pgindent/exclude_file_patterns b/src/tools/pgindent/exclude_file_patterns
index 86bdd9d6dc..738169f6cd 100644
--- a/src/tools/pgindent/exclude_file_patterns
+++ b/src/tools/pgindent/exclude_file_patterns
@@ -18,9 +18,11 @@ src/backend/utils/fmgrprotos\.h$
# they match pgindent style, they'd look worse not better, so exclude them.
kwlist_d\.h$
#
-# This is generated by the scripts from src/common/unicode/. It uses
+# These are generated by the scripts from src/common/unicode/. They use
# hash functions generated by PerfectHash.pm whose format looks worse with
# pgindent.
+src/include/common/unicode_norm_hashfunc\.h$
+src/include/common/unicode_norm_table\.h$
src/include/common/unicode_normprops_table\.h$
#
# Exclude ecpg test files to avoid breaking the ecpg regression tests
--
2.22.0
v3-0002-Speed-up-unicode-recomposition.patchapplication/octet-stream; name=v3-0002-Speed-up-unicode-recomposition.patchDownload
From 376c450a3e0fa883d7670a3a248ed7d213b93296 Mon Sep 17 00:00:00 2001
From: John Naylor <john.naylor@2ndquadrant.com>
Date: Wed, 21 Oct 2020 18:27:09 -0400
Subject: [PATCH v3 2/2] Speed up unicode recomposition.
As with decomposition, use a perfect hash function for speed.
The performance increase is much higher in this casebecause the
former implementation used linear search. This makes normalizing
to NFC and NFKC more than 40x faster in the backend, while adding
only 6kB to the binary. While this is small, keep out of the frontend
since its use is not performance critical.
---
.../unicode/generate-unicode_norm_table.pl | 113 ++
src/common/unicode_norm.c | 37 +-
src/include/common/unicode_norm_hashfunc.h | 1220 +++++++++++++++++
3 files changed, 1368 insertions(+), 2 deletions(-)
diff --git a/src/common/unicode/generate-unicode_norm_table.pl b/src/common/unicode/generate-unicode_norm_table.pl
index 5fca88796f..6bbe81f17d 100644
--- a/src/common/unicode/generate-unicode_norm_table.pl
+++ b/src/common/unicode/generate-unicode_norm_table.pl
@@ -144,6 +144,7 @@ print $OF <<HEADER;
typedef int (*cp_hash_func) (const void *key);
/* Information for lookups with perfect hash functions */
+
typedef struct
{
const pg_unicode_decomposition *decomps;
@@ -151,11 +152,20 @@ typedef struct
int num_decomps;
} pg_unicode_decompinfo;
+typedef struct
+{
+ const uint16 *inverse_lookup;
+ cp_hash_func hash;
+ int num_recomps;
+} pg_unicode_recompinfo;
+
HEADER
my $decomp_index = 0;
my $decomp_string = "";
my @dec_cp_packed;
+my $main_index = 0;
+my @rec_info;
my $last_code = $characters[-1]->{code};
foreach my $char (@characters)
@@ -217,6 +227,18 @@ foreach my $char (@characters)
}
}
}
+
+ # Save info for recomposeable codepoints.
+ # XXX This must match the DECOMPOSITION_NO_COMPOSE C macro above!
+ # See the inverse lookup in recompose_code() found in
+ # common/unicode_norm.c.
+ if (!($flags =~ /DECOMP_COMPAT/ || $flags =~ /DECOMP_NO_COMPOSE/))
+ {
+ push @rec_info, {code => $code,
+ main_index => $main_index,
+ first => $first_decomp,
+ second => $decomp_elts[0]};
+ }
}
if ($decomp_size == 0)
@@ -255,6 +277,8 @@ foreach my $char (@characters)
print $OT "\t/* $comment */" if ($comment ne "");
print $OT "\n";
+
+ $main_index++;
}
print $OT "\n};\n\n";
@@ -284,7 +308,96 @@ static const pg_unicode_decompinfo UnicodeDecompInfo =
$dec_funcname,
$num_characters
};
+
+HEADER
+
+# Find the lowest codepoint that decomposes to each recomposeable
+# code pair and create a mapping to it.
+my $recomp_string = "";
+my @rec_cp_packed;
+my %seenit;
+my $firstentry = 1;
+foreach my $rec (sort recomp_sort @rec_info)
+{
+ # The hash key is formed by concatenating the bytes of the two
+ # codepoints. See also recompose_code() in common/unicode_norm.c.
+ my $hashkey = (hex($rec->{first}) << 32) | hex($rec->{second});
+
+ # We are only interested in the lowest code point that decomposes
+ # to the given code pair.
+ next if $seenit{$hashkey};
+
+ # Save the hash key bytes in network order
+ push @rec_cp_packed, pack('Q>', $hashkey);
+
+ # Append inverse lookup element
+ $recomp_string .= ",\n" if ! $firstentry;
+ $recomp_string .= sprintf "\t/* U+%s+%s -> U+%s */ %s",
+ $rec->{first},
+ $rec->{second},
+ $rec->{code},
+ $rec->{main_index};
+
+ $seenit{$hashkey} = 1;
+ $firstentry = 0;
+}
+
+# Emit the inverse lookup array containing indexes into UnicodeDecompMain
+my $num_recomps = scalar @rec_cp_packed;
+print $OF <<HEADER;
+/* Inverse lookup array -- contains indexes into UnicodeDecompMain[] */
+static const uint16 RecompInverseLookup[$num_recomps] =
+{
+$recomp_string
+};
+
+HEADER
+
+# Emit the definition of the recomp hash function.
+my $rec_funcname = 'Recomp_hash_func';
+my $rec_func = PerfectHash::generate_hash_function(\@rec_cp_packed, $rec_funcname,
+ fixed_key_length => 8);
+print $OF "/* Perfect hash function for recomposition */\n";
+print $OF "static $rec_func\n";
+
+# Emit the structure that wraps the hash lookup information into
+# one variable.
+print $OF <<HEADER;
+/* Hash lookup information for recomposition */
+static const pg_unicode_recompinfo UnicodeRecompInfo =
+{
+ RecompInverseLookup,
+ $rec_funcname,
+ $num_recomps
+};
HEADER
close $OT;
close $OF;
+
+sub recomp_sort
+{
+ my $a1 = hex($a->{first});
+ my $b1 = hex($b->{first});
+
+ my $a2 = hex($a->{second});
+ my $b2 = hex($b->{second});
+
+ # First sort by first code point
+ return -1 if $a1 < $b1;
+ return 1 if $a1 > $b1;
+
+ # Then the second code point
+ return -1 if $a2 < $b2;
+ return 1 if $a2 > $b2;
+
+ # Finally by the code point that decomposes into first and second.
+
+ my $acode = hex($a->{code});
+ my $bcode = hex($b->{code});
+
+ return -1 if $acode < $bcode;
+ return -1 if $acode > $bcode;
+
+ die "found duplicate entries of recomposeable code pairs";
+}
diff --git a/src/common/unicode_norm.c b/src/common/unicode_norm.c
index 7d0d23ab21..da7e6f8fa1 100644
--- a/src/common/unicode_norm.c
+++ b/src/common/unicode_norm.c
@@ -228,7 +228,7 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
}
else
{
- int i;
+ const pg_unicode_decomposition *entry;
/*
* Do an inverse lookup of the decomposition tables to see if anything
@@ -236,9 +236,41 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
* sub-table of size two, because the start character has already been
* recomposed partially.
*/
+#ifndef FRONTEND
+
+ int h, inv_lookup_index;
+ uint64 hashkey;
+ pg_unicode_recompinfo recompinfo = UnicodeRecompInfo;
+
+ /*
+ * Compute the hash function. The hash key is formed by concatenating
+ * bytes of the two codepoints in network order. See also
+ * common/unicode/generate-unicode_norm_table.pl.
+ */
+ hashkey = pg_hton64(((uint64) start << 32) | (uint64) code);
+ h = recompinfo.hash(&hashkey);
+
+ /* An out-of-range result implies no match */
+ if (h < 0 || h >= recompinfo.num_recomps)
+ return false;
+
+ inv_lookup_index = recompinfo.inverse_lookup[h];
+ entry = &UnicodeDecompMain[inv_lookup_index];
+
+ if (start == UnicodeDecomp_codepoints[entry->dec_index] &&
+ code == UnicodeDecomp_codepoints[entry->dec_index + 1])
+ {
+ *result = entry->codepoint;
+ return true;
+ }
+
+#else
+
+ int i;
+
for (i = 0; i < lengthof(UnicodeDecompMain); i++)
{
- const pg_unicode_decomposition *entry = &UnicodeDecompMain[i];
+ entry = &UnicodeDecompMain[i];
if (DECOMPOSITION_SIZE(entry) != 2)
continue;
@@ -253,6 +285,7 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
return true;
}
}
+#endif /* !FRONTEND */
}
return false;
diff --git a/src/include/common/unicode_norm_hashfunc.h b/src/include/common/unicode_norm_hashfunc.h
index d2f4ad884b..39b7138f2b 100644
--- a/src/include/common/unicode_norm_hashfunc.h
+++ b/src/include/common/unicode_norm_hashfunc.h
@@ -23,6 +23,7 @@
typedef int (*cp_hash_func) (const void *key);
/* Information for lookups with perfect hash functions */
+
typedef struct
{
const pg_unicode_decomposition *decomps;
@@ -30,6 +31,13 @@ typedef struct
int num_decomps;
} pg_unicode_decompinfo;
+typedef struct
+{
+ const uint16 *inverse_lookup;
+ cp_hash_func hash;
+ int num_recomps;
+} pg_unicode_recompinfo;
+
/* Perfect hash function for decomposition */
static int
Decomp_hash_func(const void *key)
@@ -1711,3 +1719,1215 @@ static const pg_unicode_decompinfo UnicodeDecompInfo =
Decomp_hash_func,
6604
};
+
+/* Inverse lookup array -- contains indexes into UnicodeDecompMain[] */
+static const uint16 RecompInverseLookup[941] =
+{
+ /* U+003C+0338 -> U+226E */ 1823,
+ /* U+003D+0338 -> U+2260 */ 1820,
+ /* U+003E+0338 -> U+226F */ 1824,
+ /* U+0041+0300 -> U+00C0 */ 14,
+ /* U+0041+0301 -> U+00C1 */ 15,
+ /* U+0041+0302 -> U+00C2 */ 16,
+ /* U+0041+0303 -> U+00C3 */ 17,
+ /* U+0041+0304 -> U+0100 */ 67,
+ /* U+0041+0306 -> U+0102 */ 69,
+ /* U+0041+0307 -> U+0226 */ 270,
+ /* U+0041+0308 -> U+00C4 */ 18,
+ /* U+0041+0309 -> U+1EA2 */ 1278,
+ /* U+0041+030A -> U+00C5 */ 19,
+ /* U+0041+030C -> U+01CD */ 194,
+ /* U+0041+030F -> U+0200 */ 240,
+ /* U+0041+0311 -> U+0202 */ 242,
+ /* U+0041+0323 -> U+1EA0 */ 1276,
+ /* U+0041+0325 -> U+1E00 */ 1120,
+ /* U+0041+0328 -> U+0104 */ 71,
+ /* U+0042+0307 -> U+1E02 */ 1122,
+ /* U+0042+0323 -> U+1E04 */ 1124,
+ /* U+0042+0331 -> U+1E06 */ 1126,
+ /* U+0043+0301 -> U+0106 */ 73,
+ /* U+0043+0302 -> U+0108 */ 75,
+ /* U+0043+0307 -> U+010A */ 77,
+ /* U+0043+030C -> U+010C */ 79,
+ /* U+0043+0327 -> U+00C7 */ 20,
+ /* U+0044+0307 -> U+1E0A */ 1130,
+ /* U+0044+030C -> U+010E */ 81,
+ /* U+0044+0323 -> U+1E0C */ 1132,
+ /* U+0044+0327 -> U+1E10 */ 1136,
+ /* U+0044+032D -> U+1E12 */ 1138,
+ /* U+0044+0331 -> U+1E0E */ 1134,
+ /* U+0045+0300 -> U+00C8 */ 21,
+ /* U+0045+0301 -> U+00C9 */ 22,
+ /* U+0045+0302 -> U+00CA */ 23,
+ /* U+0045+0303 -> U+1EBC */ 1304,
+ /* U+0045+0304 -> U+0112 */ 83,
+ /* U+0045+0306 -> U+0114 */ 85,
+ /* U+0045+0307 -> U+0116 */ 87,
+ /* U+0045+0308 -> U+00CB */ 24,
+ /* U+0045+0309 -> U+1EBA */ 1302,
+ /* U+0045+030C -> U+011A */ 91,
+ /* U+0045+030F -> U+0204 */ 244,
+ /* U+0045+0311 -> U+0206 */ 246,
+ /* U+0045+0323 -> U+1EB8 */ 1300,
+ /* U+0045+0327 -> U+0228 */ 272,
+ /* U+0045+0328 -> U+0118 */ 89,
+ /* U+0045+032D -> U+1E18 */ 1144,
+ /* U+0045+0330 -> U+1E1A */ 1146,
+ /* U+0046+0307 -> U+1E1E */ 1150,
+ /* U+0047+0301 -> U+01F4 */ 230,
+ /* U+0047+0302 -> U+011C */ 93,
+ /* U+0047+0304 -> U+1E20 */ 1152,
+ /* U+0047+0306 -> U+011E */ 95,
+ /* U+0047+0307 -> U+0120 */ 97,
+ /* U+0047+030C -> U+01E6 */ 216,
+ /* U+0047+0327 -> U+0122 */ 99,
+ /* U+0048+0302 -> U+0124 */ 101,
+ /* U+0048+0307 -> U+1E22 */ 1154,
+ /* U+0048+0308 -> U+1E26 */ 1158,
+ /* U+0048+030C -> U+021E */ 268,
+ /* U+0048+0323 -> U+1E24 */ 1156,
+ /* U+0048+0327 -> U+1E28 */ 1160,
+ /* U+0048+032E -> U+1E2A */ 1162,
+ /* U+0049+0300 -> U+00CC */ 25,
+ /* U+0049+0301 -> U+00CD */ 26,
+ /* U+0049+0302 -> U+00CE */ 27,
+ /* U+0049+0303 -> U+0128 */ 103,
+ /* U+0049+0304 -> U+012A */ 105,
+ /* U+0049+0306 -> U+012C */ 107,
+ /* U+0049+0307 -> U+0130 */ 111,
+ /* U+0049+0308 -> U+00CF */ 28,
+ /* U+0049+0309 -> U+1EC8 */ 1316,
+ /* U+0049+030C -> U+01CF */ 196,
+ /* U+0049+030F -> U+0208 */ 248,
+ /* U+0049+0311 -> U+020A */ 250,
+ /* U+0049+0323 -> U+1ECA */ 1318,
+ /* U+0049+0328 -> U+012E */ 109,
+ /* U+0049+0330 -> U+1E2C */ 1164,
+ /* U+004A+0302 -> U+0134 */ 114,
+ /* U+004B+0301 -> U+1E30 */ 1168,
+ /* U+004B+030C -> U+01E8 */ 218,
+ /* U+004B+0323 -> U+1E32 */ 1170,
+ /* U+004B+0327 -> U+0136 */ 116,
+ /* U+004B+0331 -> U+1E34 */ 1172,
+ /* U+004C+0301 -> U+0139 */ 118,
+ /* U+004C+030C -> U+013D */ 122,
+ /* U+004C+0323 -> U+1E36 */ 1174,
+ /* U+004C+0327 -> U+013B */ 120,
+ /* U+004C+032D -> U+1E3C */ 1180,
+ /* U+004C+0331 -> U+1E3A */ 1178,
+ /* U+004D+0301 -> U+1E3E */ 1182,
+ /* U+004D+0307 -> U+1E40 */ 1184,
+ /* U+004D+0323 -> U+1E42 */ 1186,
+ /* U+004E+0300 -> U+01F8 */ 232,
+ /* U+004E+0301 -> U+0143 */ 126,
+ /* U+004E+0303 -> U+00D1 */ 29,
+ /* U+004E+0307 -> U+1E44 */ 1188,
+ /* U+004E+030C -> U+0147 */ 130,
+ /* U+004E+0323 -> U+1E46 */ 1190,
+ /* U+004E+0327 -> U+0145 */ 128,
+ /* U+004E+032D -> U+1E4A */ 1194,
+ /* U+004E+0331 -> U+1E48 */ 1192,
+ /* U+004F+0300 -> U+00D2 */ 30,
+ /* U+004F+0301 -> U+00D3 */ 31,
+ /* U+004F+0302 -> U+00D4 */ 32,
+ /* U+004F+0303 -> U+00D5 */ 33,
+ /* U+004F+0304 -> U+014C */ 133,
+ /* U+004F+0306 -> U+014E */ 135,
+ /* U+004F+0307 -> U+022E */ 278,
+ /* U+004F+0308 -> U+00D6 */ 34,
+ /* U+004F+0309 -> U+1ECE */ 1322,
+ /* U+004F+030B -> U+0150 */ 137,
+ /* U+004F+030C -> U+01D1 */ 198,
+ /* U+004F+030F -> U+020C */ 252,
+ /* U+004F+0311 -> U+020E */ 254,
+ /* U+004F+031B -> U+01A0 */ 181,
+ /* U+004F+0323 -> U+1ECC */ 1320,
+ /* U+004F+0328 -> U+01EA */ 220,
+ /* U+0050+0301 -> U+1E54 */ 1204,
+ /* U+0050+0307 -> U+1E56 */ 1206,
+ /* U+0052+0301 -> U+0154 */ 139,
+ /* U+0052+0307 -> U+1E58 */ 1208,
+ /* U+0052+030C -> U+0158 */ 143,
+ /* U+0052+030F -> U+0210 */ 256,
+ /* U+0052+0311 -> U+0212 */ 258,
+ /* U+0052+0323 -> U+1E5A */ 1210,
+ /* U+0052+0327 -> U+0156 */ 141,
+ /* U+0052+0331 -> U+1E5E */ 1214,
+ /* U+0053+0301 -> U+015A */ 145,
+ /* U+0053+0302 -> U+015C */ 147,
+ /* U+0053+0307 -> U+1E60 */ 1216,
+ /* U+0053+030C -> U+0160 */ 151,
+ /* U+0053+0323 -> U+1E62 */ 1218,
+ /* U+0053+0326 -> U+0218 */ 264,
+ /* U+0053+0327 -> U+015E */ 149,
+ /* U+0054+0307 -> U+1E6A */ 1226,
+ /* U+0054+030C -> U+0164 */ 155,
+ /* U+0054+0323 -> U+1E6C */ 1228,
+ /* U+0054+0326 -> U+021A */ 266,
+ /* U+0054+0327 -> U+0162 */ 153,
+ /* U+0054+032D -> U+1E70 */ 1232,
+ /* U+0054+0331 -> U+1E6E */ 1230,
+ /* U+0055+0300 -> U+00D9 */ 35,
+ /* U+0055+0301 -> U+00DA */ 36,
+ /* U+0055+0302 -> U+00DB */ 37,
+ /* U+0055+0303 -> U+0168 */ 157,
+ /* U+0055+0304 -> U+016A */ 159,
+ /* U+0055+0306 -> U+016C */ 161,
+ /* U+0055+0308 -> U+00DC */ 38,
+ /* U+0055+0309 -> U+1EE6 */ 1346,
+ /* U+0055+030A -> U+016E */ 163,
+ /* U+0055+030B -> U+0170 */ 165,
+ /* U+0055+030C -> U+01D3 */ 200,
+ /* U+0055+030F -> U+0214 */ 260,
+ /* U+0055+0311 -> U+0216 */ 262,
+ /* U+0055+031B -> U+01AF */ 183,
+ /* U+0055+0323 -> U+1EE4 */ 1344,
+ /* U+0055+0324 -> U+1E72 */ 1234,
+ /* U+0055+0328 -> U+0172 */ 167,
+ /* U+0055+032D -> U+1E76 */ 1238,
+ /* U+0055+0330 -> U+1E74 */ 1236,
+ /* U+0056+0303 -> U+1E7C */ 1244,
+ /* U+0056+0323 -> U+1E7E */ 1246,
+ /* U+0057+0300 -> U+1E80 */ 1248,
+ /* U+0057+0301 -> U+1E82 */ 1250,
+ /* U+0057+0302 -> U+0174 */ 169,
+ /* U+0057+0307 -> U+1E86 */ 1254,
+ /* U+0057+0308 -> U+1E84 */ 1252,
+ /* U+0057+0323 -> U+1E88 */ 1256,
+ /* U+0058+0307 -> U+1E8A */ 1258,
+ /* U+0058+0308 -> U+1E8C */ 1260,
+ /* U+0059+0300 -> U+1EF2 */ 1358,
+ /* U+0059+0301 -> U+00DD */ 39,
+ /* U+0059+0302 -> U+0176 */ 171,
+ /* U+0059+0303 -> U+1EF8 */ 1364,
+ /* U+0059+0304 -> U+0232 */ 282,
+ /* U+0059+0307 -> U+1E8E */ 1262,
+ /* U+0059+0308 -> U+0178 */ 173,
+ /* U+0059+0309 -> U+1EF6 */ 1362,
+ /* U+0059+0323 -> U+1EF4 */ 1360,
+ /* U+005A+0301 -> U+0179 */ 174,
+ /* U+005A+0302 -> U+1E90 */ 1264,
+ /* U+005A+0307 -> U+017B */ 176,
+ /* U+005A+030C -> U+017D */ 178,
+ /* U+005A+0323 -> U+1E92 */ 1266,
+ /* U+005A+0331 -> U+1E94 */ 1268,
+ /* U+0061+0300 -> U+00E0 */ 40,
+ /* U+0061+0301 -> U+00E1 */ 41,
+ /* U+0061+0302 -> U+00E2 */ 42,
+ /* U+0061+0303 -> U+00E3 */ 43,
+ /* U+0061+0304 -> U+0101 */ 68,
+ /* U+0061+0306 -> U+0103 */ 70,
+ /* U+0061+0307 -> U+0227 */ 271,
+ /* U+0061+0308 -> U+00E4 */ 44,
+ /* U+0061+0309 -> U+1EA3 */ 1279,
+ /* U+0061+030A -> U+00E5 */ 45,
+ /* U+0061+030C -> U+01CE */ 195,
+ /* U+0061+030F -> U+0201 */ 241,
+ /* U+0061+0311 -> U+0203 */ 243,
+ /* U+0061+0323 -> U+1EA1 */ 1277,
+ /* U+0061+0325 -> U+1E01 */ 1121,
+ /* U+0061+0328 -> U+0105 */ 72,
+ /* U+0062+0307 -> U+1E03 */ 1123,
+ /* U+0062+0323 -> U+1E05 */ 1125,
+ /* U+0062+0331 -> U+1E07 */ 1127,
+ /* U+0063+0301 -> U+0107 */ 74,
+ /* U+0063+0302 -> U+0109 */ 76,
+ /* U+0063+0307 -> U+010B */ 78,
+ /* U+0063+030C -> U+010D */ 80,
+ /* U+0063+0327 -> U+00E7 */ 46,
+ /* U+0064+0307 -> U+1E0B */ 1131,
+ /* U+0064+030C -> U+010F */ 82,
+ /* U+0064+0323 -> U+1E0D */ 1133,
+ /* U+0064+0327 -> U+1E11 */ 1137,
+ /* U+0064+032D -> U+1E13 */ 1139,
+ /* U+0064+0331 -> U+1E0F */ 1135,
+ /* U+0065+0300 -> U+00E8 */ 47,
+ /* U+0065+0301 -> U+00E9 */ 48,
+ /* U+0065+0302 -> U+00EA */ 49,
+ /* U+0065+0303 -> U+1EBD */ 1305,
+ /* U+0065+0304 -> U+0113 */ 84,
+ /* U+0065+0306 -> U+0115 */ 86,
+ /* U+0065+0307 -> U+0117 */ 88,
+ /* U+0065+0308 -> U+00EB */ 50,
+ /* U+0065+0309 -> U+1EBB */ 1303,
+ /* U+0065+030C -> U+011B */ 92,
+ /* U+0065+030F -> U+0205 */ 245,
+ /* U+0065+0311 -> U+0207 */ 247,
+ /* U+0065+0323 -> U+1EB9 */ 1301,
+ /* U+0065+0327 -> U+0229 */ 273,
+ /* U+0065+0328 -> U+0119 */ 90,
+ /* U+0065+032D -> U+1E19 */ 1145,
+ /* U+0065+0330 -> U+1E1B */ 1147,
+ /* U+0066+0307 -> U+1E1F */ 1151,
+ /* U+0067+0301 -> U+01F5 */ 231,
+ /* U+0067+0302 -> U+011D */ 94,
+ /* U+0067+0304 -> U+1E21 */ 1153,
+ /* U+0067+0306 -> U+011F */ 96,
+ /* U+0067+0307 -> U+0121 */ 98,
+ /* U+0067+030C -> U+01E7 */ 217,
+ /* U+0067+0327 -> U+0123 */ 100,
+ /* U+0068+0302 -> U+0125 */ 102,
+ /* U+0068+0307 -> U+1E23 */ 1155,
+ /* U+0068+0308 -> U+1E27 */ 1159,
+ /* U+0068+030C -> U+021F */ 269,
+ /* U+0068+0323 -> U+1E25 */ 1157,
+ /* U+0068+0327 -> U+1E29 */ 1161,
+ /* U+0068+032E -> U+1E2B */ 1163,
+ /* U+0068+0331 -> U+1E96 */ 1270,
+ /* U+0069+0300 -> U+00EC */ 51,
+ /* U+0069+0301 -> U+00ED */ 52,
+ /* U+0069+0302 -> U+00EE */ 53,
+ /* U+0069+0303 -> U+0129 */ 104,
+ /* U+0069+0304 -> U+012B */ 106,
+ /* U+0069+0306 -> U+012D */ 108,
+ /* U+0069+0308 -> U+00EF */ 54,
+ /* U+0069+0309 -> U+1EC9 */ 1317,
+ /* U+0069+030C -> U+01D0 */ 197,
+ /* U+0069+030F -> U+0209 */ 249,
+ /* U+0069+0311 -> U+020B */ 251,
+ /* U+0069+0323 -> U+1ECB */ 1319,
+ /* U+0069+0328 -> U+012F */ 110,
+ /* U+0069+0330 -> U+1E2D */ 1165,
+ /* U+006A+0302 -> U+0135 */ 115,
+ /* U+006A+030C -> U+01F0 */ 226,
+ /* U+006B+0301 -> U+1E31 */ 1169,
+ /* U+006B+030C -> U+01E9 */ 219,
+ /* U+006B+0323 -> U+1E33 */ 1171,
+ /* U+006B+0327 -> U+0137 */ 117,
+ /* U+006B+0331 -> U+1E35 */ 1173,
+ /* U+006C+0301 -> U+013A */ 119,
+ /* U+006C+030C -> U+013E */ 123,
+ /* U+006C+0323 -> U+1E37 */ 1175,
+ /* U+006C+0327 -> U+013C */ 121,
+ /* U+006C+032D -> U+1E3D */ 1181,
+ /* U+006C+0331 -> U+1E3B */ 1179,
+ /* U+006D+0301 -> U+1E3F */ 1183,
+ /* U+006D+0307 -> U+1E41 */ 1185,
+ /* U+006D+0323 -> U+1E43 */ 1187,
+ /* U+006E+0300 -> U+01F9 */ 233,
+ /* U+006E+0301 -> U+0144 */ 127,
+ /* U+006E+0303 -> U+00F1 */ 55,
+ /* U+006E+0307 -> U+1E45 */ 1189,
+ /* U+006E+030C -> U+0148 */ 131,
+ /* U+006E+0323 -> U+1E47 */ 1191,
+ /* U+006E+0327 -> U+0146 */ 129,
+ /* U+006E+032D -> U+1E4B */ 1195,
+ /* U+006E+0331 -> U+1E49 */ 1193,
+ /* U+006F+0300 -> U+00F2 */ 56,
+ /* U+006F+0301 -> U+00F3 */ 57,
+ /* U+006F+0302 -> U+00F4 */ 58,
+ /* U+006F+0303 -> U+00F5 */ 59,
+ /* U+006F+0304 -> U+014D */ 134,
+ /* U+006F+0306 -> U+014F */ 136,
+ /* U+006F+0307 -> U+022F */ 279,
+ /* U+006F+0308 -> U+00F6 */ 60,
+ /* U+006F+0309 -> U+1ECF */ 1323,
+ /* U+006F+030B -> U+0151 */ 138,
+ /* U+006F+030C -> U+01D2 */ 199,
+ /* U+006F+030F -> U+020D */ 253,
+ /* U+006F+0311 -> U+020F */ 255,
+ /* U+006F+031B -> U+01A1 */ 182,
+ /* U+006F+0323 -> U+1ECD */ 1321,
+ /* U+006F+0328 -> U+01EB */ 221,
+ /* U+0070+0301 -> U+1E55 */ 1205,
+ /* U+0070+0307 -> U+1E57 */ 1207,
+ /* U+0072+0301 -> U+0155 */ 140,
+ /* U+0072+0307 -> U+1E59 */ 1209,
+ /* U+0072+030C -> U+0159 */ 144,
+ /* U+0072+030F -> U+0211 */ 257,
+ /* U+0072+0311 -> U+0213 */ 259,
+ /* U+0072+0323 -> U+1E5B */ 1211,
+ /* U+0072+0327 -> U+0157 */ 142,
+ /* U+0072+0331 -> U+1E5F */ 1215,
+ /* U+0073+0301 -> U+015B */ 146,
+ /* U+0073+0302 -> U+015D */ 148,
+ /* U+0073+0307 -> U+1E61 */ 1217,
+ /* U+0073+030C -> U+0161 */ 152,
+ /* U+0073+0323 -> U+1E63 */ 1219,
+ /* U+0073+0326 -> U+0219 */ 265,
+ /* U+0073+0327 -> U+015F */ 150,
+ /* U+0074+0307 -> U+1E6B */ 1227,
+ /* U+0074+0308 -> U+1E97 */ 1271,
+ /* U+0074+030C -> U+0165 */ 156,
+ /* U+0074+0323 -> U+1E6D */ 1229,
+ /* U+0074+0326 -> U+021B */ 267,
+ /* U+0074+0327 -> U+0163 */ 154,
+ /* U+0074+032D -> U+1E71 */ 1233,
+ /* U+0074+0331 -> U+1E6F */ 1231,
+ /* U+0075+0300 -> U+00F9 */ 61,
+ /* U+0075+0301 -> U+00FA */ 62,
+ /* U+0075+0302 -> U+00FB */ 63,
+ /* U+0075+0303 -> U+0169 */ 158,
+ /* U+0075+0304 -> U+016B */ 160,
+ /* U+0075+0306 -> U+016D */ 162,
+ /* U+0075+0308 -> U+00FC */ 64,
+ /* U+0075+0309 -> U+1EE7 */ 1347,
+ /* U+0075+030A -> U+016F */ 164,
+ /* U+0075+030B -> U+0171 */ 166,
+ /* U+0075+030C -> U+01D4 */ 201,
+ /* U+0075+030F -> U+0215 */ 261,
+ /* U+0075+0311 -> U+0217 */ 263,
+ /* U+0075+031B -> U+01B0 */ 184,
+ /* U+0075+0323 -> U+1EE5 */ 1345,
+ /* U+0075+0324 -> U+1E73 */ 1235,
+ /* U+0075+0328 -> U+0173 */ 168,
+ /* U+0075+032D -> U+1E77 */ 1239,
+ /* U+0075+0330 -> U+1E75 */ 1237,
+ /* U+0076+0303 -> U+1E7D */ 1245,
+ /* U+0076+0323 -> U+1E7F */ 1247,
+ /* U+0077+0300 -> U+1E81 */ 1249,
+ /* U+0077+0301 -> U+1E83 */ 1251,
+ /* U+0077+0302 -> U+0175 */ 170,
+ /* U+0077+0307 -> U+1E87 */ 1255,
+ /* U+0077+0308 -> U+1E85 */ 1253,
+ /* U+0077+030A -> U+1E98 */ 1272,
+ /* U+0077+0323 -> U+1E89 */ 1257,
+ /* U+0078+0307 -> U+1E8B */ 1259,
+ /* U+0078+0308 -> U+1E8D */ 1261,
+ /* U+0079+0300 -> U+1EF3 */ 1359,
+ /* U+0079+0301 -> U+00FD */ 65,
+ /* U+0079+0302 -> U+0177 */ 172,
+ /* U+0079+0303 -> U+1EF9 */ 1365,
+ /* U+0079+0304 -> U+0233 */ 283,
+ /* U+0079+0307 -> U+1E8F */ 1263,
+ /* U+0079+0308 -> U+00FF */ 66,
+ /* U+0079+0309 -> U+1EF7 */ 1363,
+ /* U+0079+030A -> U+1E99 */ 1273,
+ /* U+0079+0323 -> U+1EF5 */ 1361,
+ /* U+007A+0301 -> U+017A */ 175,
+ /* U+007A+0302 -> U+1E91 */ 1265,
+ /* U+007A+0307 -> U+017C */ 177,
+ /* U+007A+030C -> U+017E */ 179,
+ /* U+007A+0323 -> U+1E93 */ 1267,
+ /* U+007A+0331 -> U+1E95 */ 1269,
+ /* U+00A8+0300 -> U+1FED */ 1584,
+ /* U+00A8+0301 -> U+0385 */ 419,
+ /* U+00A8+0342 -> U+1FC1 */ 1544,
+ /* U+00C2+0300 -> U+1EA6 */ 1282,
+ /* U+00C2+0301 -> U+1EA4 */ 1280,
+ /* U+00C2+0303 -> U+1EAA */ 1286,
+ /* U+00C2+0309 -> U+1EA8 */ 1284,
+ /* U+00C4+0304 -> U+01DE */ 210,
+ /* U+00C5+0301 -> U+01FA */ 234,
+ /* U+00C6+0301 -> U+01FC */ 236,
+ /* U+00C6+0304 -> U+01E2 */ 214,
+ /* U+00C7+0301 -> U+1E08 */ 1128,
+ /* U+00CA+0300 -> U+1EC0 */ 1308,
+ /* U+00CA+0301 -> U+1EBE */ 1306,
+ /* U+00CA+0303 -> U+1EC4 */ 1312,
+ /* U+00CA+0309 -> U+1EC2 */ 1310,
+ /* U+00CF+0301 -> U+1E2E */ 1166,
+ /* U+00D4+0300 -> U+1ED2 */ 1326,
+ /* U+00D4+0301 -> U+1ED0 */ 1324,
+ /* U+00D4+0303 -> U+1ED6 */ 1330,
+ /* U+00D4+0309 -> U+1ED4 */ 1328,
+ /* U+00D5+0301 -> U+1E4C */ 1196,
+ /* U+00D5+0304 -> U+022C */ 276,
+ /* U+00D5+0308 -> U+1E4E */ 1198,
+ /* U+00D6+0304 -> U+022A */ 274,
+ /* U+00D8+0301 -> U+01FE */ 238,
+ /* U+00DC+0300 -> U+01DB */ 208,
+ /* U+00DC+0301 -> U+01D7 */ 204,
+ /* U+00DC+0304 -> U+01D5 */ 202,
+ /* U+00DC+030C -> U+01D9 */ 206,
+ /* U+00E2+0300 -> U+1EA7 */ 1283,
+ /* U+00E2+0301 -> U+1EA5 */ 1281,
+ /* U+00E2+0303 -> U+1EAB */ 1287,
+ /* U+00E2+0309 -> U+1EA9 */ 1285,
+ /* U+00E4+0304 -> U+01DF */ 211,
+ /* U+00E5+0301 -> U+01FB */ 235,
+ /* U+00E6+0301 -> U+01FD */ 237,
+ /* U+00E6+0304 -> U+01E3 */ 215,
+ /* U+00E7+0301 -> U+1E09 */ 1129,
+ /* U+00EA+0300 -> U+1EC1 */ 1309,
+ /* U+00EA+0301 -> U+1EBF */ 1307,
+ /* U+00EA+0303 -> U+1EC5 */ 1313,
+ /* U+00EA+0309 -> U+1EC3 */ 1311,
+ /* U+00EF+0301 -> U+1E2F */ 1167,
+ /* U+00F4+0300 -> U+1ED3 */ 1327,
+ /* U+00F4+0301 -> U+1ED1 */ 1325,
+ /* U+00F4+0303 -> U+1ED7 */ 1331,
+ /* U+00F4+0309 -> U+1ED5 */ 1329,
+ /* U+00F5+0301 -> U+1E4D */ 1197,
+ /* U+00F5+0304 -> U+022D */ 277,
+ /* U+00F5+0308 -> U+1E4F */ 1199,
+ /* U+00F6+0304 -> U+022B */ 275,
+ /* U+00F8+0301 -> U+01FF */ 239,
+ /* U+00FC+0300 -> U+01DC */ 209,
+ /* U+00FC+0301 -> U+01D8 */ 205,
+ /* U+00FC+0304 -> U+01D6 */ 203,
+ /* U+00FC+030C -> U+01DA */ 207,
+ /* U+0102+0300 -> U+1EB0 */ 1292,
+ /* U+0102+0301 -> U+1EAE */ 1290,
+ /* U+0102+0303 -> U+1EB4 */ 1296,
+ /* U+0102+0309 -> U+1EB2 */ 1294,
+ /* U+0103+0300 -> U+1EB1 */ 1293,
+ /* U+0103+0301 -> U+1EAF */ 1291,
+ /* U+0103+0303 -> U+1EB5 */ 1297,
+ /* U+0103+0309 -> U+1EB3 */ 1295,
+ /* U+0112+0300 -> U+1E14 */ 1140,
+ /* U+0112+0301 -> U+1E16 */ 1142,
+ /* U+0113+0300 -> U+1E15 */ 1141,
+ /* U+0113+0301 -> U+1E17 */ 1143,
+ /* U+014C+0300 -> U+1E50 */ 1200,
+ /* U+014C+0301 -> U+1E52 */ 1202,
+ /* U+014D+0300 -> U+1E51 */ 1201,
+ /* U+014D+0301 -> U+1E53 */ 1203,
+ /* U+015A+0307 -> U+1E64 */ 1220,
+ /* U+015B+0307 -> U+1E65 */ 1221,
+ /* U+0160+0307 -> U+1E66 */ 1222,
+ /* U+0161+0307 -> U+1E67 */ 1223,
+ /* U+0168+0301 -> U+1E78 */ 1240,
+ /* U+0169+0301 -> U+1E79 */ 1241,
+ /* U+016A+0308 -> U+1E7A */ 1242,
+ /* U+016B+0308 -> U+1E7B */ 1243,
+ /* U+017F+0307 -> U+1E9B */ 1275,
+ /* U+01A0+0300 -> U+1EDC */ 1336,
+ /* U+01A0+0301 -> U+1EDA */ 1334,
+ /* U+01A0+0303 -> U+1EE0 */ 1340,
+ /* U+01A0+0309 -> U+1EDE */ 1338,
+ /* U+01A0+0323 -> U+1EE2 */ 1342,
+ /* U+01A1+0300 -> U+1EDD */ 1337,
+ /* U+01A1+0301 -> U+1EDB */ 1335,
+ /* U+01A1+0303 -> U+1EE1 */ 1341,
+ /* U+01A1+0309 -> U+1EDF */ 1339,
+ /* U+01A1+0323 -> U+1EE3 */ 1343,
+ /* U+01AF+0300 -> U+1EEA */ 1350,
+ /* U+01AF+0301 -> U+1EE8 */ 1348,
+ /* U+01AF+0303 -> U+1EEE */ 1354,
+ /* U+01AF+0309 -> U+1EEC */ 1352,
+ /* U+01AF+0323 -> U+1EF0 */ 1356,
+ /* U+01B0+0300 -> U+1EEB */ 1351,
+ /* U+01B0+0301 -> U+1EE9 */ 1349,
+ /* U+01B0+0303 -> U+1EEF */ 1355,
+ /* U+01B0+0309 -> U+1EED */ 1353,
+ /* U+01B0+0323 -> U+1EF1 */ 1357,
+ /* U+01B7+030C -> U+01EE */ 224,
+ /* U+01EA+0304 -> U+01EC */ 222,
+ /* U+01EB+0304 -> U+01ED */ 223,
+ /* U+0226+0304 -> U+01E0 */ 212,
+ /* U+0227+0304 -> U+01E1 */ 213,
+ /* U+0228+0306 -> U+1E1C */ 1148,
+ /* U+0229+0306 -> U+1E1D */ 1149,
+ /* U+022E+0304 -> U+0230 */ 280,
+ /* U+022F+0304 -> U+0231 */ 281,
+ /* U+0292+030C -> U+01EF */ 225,
+ /* U+0391+0300 -> U+1FBA */ 1537,
+ /* U+0391+0301 -> U+0386 */ 420,
+ /* U+0391+0304 -> U+1FB9 */ 1536,
+ /* U+0391+0306 -> U+1FB8 */ 1535,
+ /* U+0391+0313 -> U+1F08 */ 1374,
+ /* U+0391+0314 -> U+1F09 */ 1375,
+ /* U+0391+0345 -> U+1FBC */ 1539,
+ /* U+0395+0300 -> U+1FC8 */ 1550,
+ /* U+0395+0301 -> U+0388 */ 422,
+ /* U+0395+0313 -> U+1F18 */ 1388,
+ /* U+0395+0314 -> U+1F19 */ 1389,
+ /* U+0397+0300 -> U+1FCA */ 1552,
+ /* U+0397+0301 -> U+0389 */ 423,
+ /* U+0397+0313 -> U+1F28 */ 1402,
+ /* U+0397+0314 -> U+1F29 */ 1403,
+ /* U+0397+0345 -> U+1FCC */ 1554,
+ /* U+0399+0300 -> U+1FDA */ 1566,
+ /* U+0399+0301 -> U+038A */ 424,
+ /* U+0399+0304 -> U+1FD9 */ 1565,
+ /* U+0399+0306 -> U+1FD8 */ 1564,
+ /* U+0399+0308 -> U+03AA */ 429,
+ /* U+0399+0313 -> U+1F38 */ 1418,
+ /* U+0399+0314 -> U+1F39 */ 1419,
+ /* U+039F+0300 -> U+1FF8 */ 1592,
+ /* U+039F+0301 -> U+038C */ 425,
+ /* U+039F+0313 -> U+1F48 */ 1432,
+ /* U+039F+0314 -> U+1F49 */ 1433,
+ /* U+03A1+0314 -> U+1FEC */ 1583,
+ /* U+03A5+0300 -> U+1FEA */ 1581,
+ /* U+03A5+0301 -> U+038E */ 426,
+ /* U+03A5+0304 -> U+1FE9 */ 1580,
+ /* U+03A5+0306 -> U+1FE8 */ 1579,
+ /* U+03A5+0308 -> U+03AB */ 430,
+ /* U+03A5+0314 -> U+1F59 */ 1446,
+ /* U+03A9+0300 -> U+1FFA */ 1594,
+ /* U+03A9+0301 -> U+038F */ 427,
+ /* U+03A9+0313 -> U+1F68 */ 1458,
+ /* U+03A9+0314 -> U+1F69 */ 1459,
+ /* U+03A9+0345 -> U+1FFC */ 1596,
+ /* U+03AC+0345 -> U+1FB4 */ 1532,
+ /* U+03AE+0345 -> U+1FC4 */ 1547,
+ /* U+03B1+0300 -> U+1F70 */ 1466,
+ /* U+03B1+0301 -> U+03AC */ 431,
+ /* U+03B1+0304 -> U+1FB1 */ 1529,
+ /* U+03B1+0306 -> U+1FB0 */ 1528,
+ /* U+03B1+0313 -> U+1F00 */ 1366,
+ /* U+03B1+0314 -> U+1F01 */ 1367,
+ /* U+03B1+0342 -> U+1FB6 */ 1533,
+ /* U+03B1+0345 -> U+1FB3 */ 1531,
+ /* U+03B5+0300 -> U+1F72 */ 1468,
+ /* U+03B5+0301 -> U+03AD */ 432,
+ /* U+03B5+0313 -> U+1F10 */ 1382,
+ /* U+03B5+0314 -> U+1F11 */ 1383,
+ /* U+03B7+0300 -> U+1F74 */ 1470,
+ /* U+03B7+0301 -> U+03AE */ 433,
+ /* U+03B7+0313 -> U+1F20 */ 1394,
+ /* U+03B7+0314 -> U+1F21 */ 1395,
+ /* U+03B7+0342 -> U+1FC6 */ 1548,
+ /* U+03B7+0345 -> U+1FC3 */ 1546,
+ /* U+03B9+0300 -> U+1F76 */ 1472,
+ /* U+03B9+0301 -> U+03AF */ 434,
+ /* U+03B9+0304 -> U+1FD1 */ 1559,
+ /* U+03B9+0306 -> U+1FD0 */ 1558,
+ /* U+03B9+0308 -> U+03CA */ 436,
+ /* U+03B9+0313 -> U+1F30 */ 1410,
+ /* U+03B9+0314 -> U+1F31 */ 1411,
+ /* U+03B9+0342 -> U+1FD6 */ 1562,
+ /* U+03BF+0300 -> U+1F78 */ 1474,
+ /* U+03BF+0301 -> U+03CC */ 438,
+ /* U+03BF+0313 -> U+1F40 */ 1426,
+ /* U+03BF+0314 -> U+1F41 */ 1427,
+ /* U+03C1+0313 -> U+1FE4 */ 1575,
+ /* U+03C1+0314 -> U+1FE5 */ 1576,
+ /* U+03C5+0300 -> U+1F7A */ 1476,
+ /* U+03C5+0301 -> U+03CD */ 439,
+ /* U+03C5+0304 -> U+1FE1 */ 1572,
+ /* U+03C5+0306 -> U+1FE0 */ 1571,
+ /* U+03C5+0308 -> U+03CB */ 437,
+ /* U+03C5+0313 -> U+1F50 */ 1438,
+ /* U+03C5+0314 -> U+1F51 */ 1439,
+ /* U+03C5+0342 -> U+1FE6 */ 1577,
+ /* U+03C9+0300 -> U+1F7C */ 1478,
+ /* U+03C9+0301 -> U+03CE */ 440,
+ /* U+03C9+0313 -> U+1F60 */ 1450,
+ /* U+03C9+0314 -> U+1F61 */ 1451,
+ /* U+03C9+0342 -> U+1FF6 */ 1590,
+ /* U+03C9+0345 -> U+1FF3 */ 1588,
+ /* U+03CA+0300 -> U+1FD2 */ 1560,
+ /* U+03CA+0301 -> U+0390 */ 428,
+ /* U+03CA+0342 -> U+1FD7 */ 1563,
+ /* U+03CB+0300 -> U+1FE2 */ 1573,
+ /* U+03CB+0301 -> U+03B0 */ 435,
+ /* U+03CB+0342 -> U+1FE7 */ 1578,
+ /* U+03CE+0345 -> U+1FF4 */ 1589,
+ /* U+03D2+0301 -> U+03D3 */ 444,
+ /* U+03D2+0308 -> U+03D4 */ 445,
+ /* U+0406+0308 -> U+0407 */ 457,
+ /* U+0410+0306 -> U+04D0 */ 479,
+ /* U+0410+0308 -> U+04D2 */ 481,
+ /* U+0413+0301 -> U+0403 */ 456,
+ /* U+0415+0300 -> U+0400 */ 454,
+ /* U+0415+0306 -> U+04D6 */ 483,
+ /* U+0415+0308 -> U+0401 */ 455,
+ /* U+0416+0306 -> U+04C1 */ 477,
+ /* U+0416+0308 -> U+04DC */ 487,
+ /* U+0417+0308 -> U+04DE */ 489,
+ /* U+0418+0300 -> U+040D */ 459,
+ /* U+0418+0304 -> U+04E2 */ 491,
+ /* U+0418+0306 -> U+0419 */ 461,
+ /* U+0418+0308 -> U+04E4 */ 493,
+ /* U+041A+0301 -> U+040C */ 458,
+ /* U+041E+0308 -> U+04E6 */ 495,
+ /* U+0423+0304 -> U+04EE */ 501,
+ /* U+0423+0306 -> U+040E */ 460,
+ /* U+0423+0308 -> U+04F0 */ 503,
+ /* U+0423+030B -> U+04F2 */ 505,
+ /* U+0427+0308 -> U+04F4 */ 507,
+ /* U+042B+0308 -> U+04F8 */ 509,
+ /* U+042D+0308 -> U+04EC */ 499,
+ /* U+0430+0306 -> U+04D1 */ 480,
+ /* U+0430+0308 -> U+04D3 */ 482,
+ /* U+0433+0301 -> U+0453 */ 465,
+ /* U+0435+0300 -> U+0450 */ 463,
+ /* U+0435+0306 -> U+04D7 */ 484,
+ /* U+0435+0308 -> U+0451 */ 464,
+ /* U+0436+0306 -> U+04C2 */ 478,
+ /* U+0436+0308 -> U+04DD */ 488,
+ /* U+0437+0308 -> U+04DF */ 490,
+ /* U+0438+0300 -> U+045D */ 468,
+ /* U+0438+0304 -> U+04E3 */ 492,
+ /* U+0438+0306 -> U+0439 */ 462,
+ /* U+0438+0308 -> U+04E5 */ 494,
+ /* U+043A+0301 -> U+045C */ 467,
+ /* U+043E+0308 -> U+04E7 */ 496,
+ /* U+0443+0304 -> U+04EF */ 502,
+ /* U+0443+0306 -> U+045E */ 469,
+ /* U+0443+0308 -> U+04F1 */ 504,
+ /* U+0443+030B -> U+04F3 */ 506,
+ /* U+0447+0308 -> U+04F5 */ 508,
+ /* U+044B+0308 -> U+04F9 */ 510,
+ /* U+044D+0308 -> U+04ED */ 500,
+ /* U+0456+0308 -> U+0457 */ 466,
+ /* U+0474+030F -> U+0476 */ 470,
+ /* U+0475+030F -> U+0477 */ 471,
+ /* U+04D8+0308 -> U+04DA */ 485,
+ /* U+04D9+0308 -> U+04DB */ 486,
+ /* U+04E8+0308 -> U+04EA */ 497,
+ /* U+04E9+0308 -> U+04EB */ 498,
+ /* U+0627+0653 -> U+0622 */ 574,
+ /* U+0627+0654 -> U+0623 */ 575,
+ /* U+0627+0655 -> U+0625 */ 577,
+ /* U+0648+0654 -> U+0624 */ 576,
+ /* U+064A+0654 -> U+0626 */ 578,
+ /* U+06C1+0654 -> U+06C2 */ 606,
+ /* U+06D2+0654 -> U+06D3 */ 607,
+ /* U+06D5+0654 -> U+06C0 */ 605,
+ /* U+0928+093C -> U+0929 */ 733,
+ /* U+0930+093C -> U+0931 */ 734,
+ /* U+0933+093C -> U+0934 */ 735,
+ /* U+09C7+09BE -> U+09CB */ 751,
+ /* U+09C7+09D7 -> U+09CC */ 752,
+ /* U+0B47+0B3E -> U+0B4B */ 770,
+ /* U+0B47+0B56 -> U+0B48 */ 769,
+ /* U+0B47+0B57 -> U+0B4C */ 771,
+ /* U+0B92+0BD7 -> U+0B94 */ 775,
+ /* U+0BC6+0BBE -> U+0BCA */ 776,
+ /* U+0BC6+0BD7 -> U+0BCC */ 778,
+ /* U+0BC7+0BBE -> U+0BCB */ 777,
+ /* U+0C46+0C56 -> U+0C48 */ 780,
+ /* U+0CBF+0CD5 -> U+0CC0 */ 785,
+ /* U+0CC6+0CC2 -> U+0CCA */ 788,
+ /* U+0CC6+0CD5 -> U+0CC7 */ 786,
+ /* U+0CC6+0CD6 -> U+0CC8 */ 787,
+ /* U+0CCA+0CD5 -> U+0CCB */ 789,
+ /* U+0D46+0D3E -> U+0D4A */ 793,
+ /* U+0D46+0D57 -> U+0D4C */ 795,
+ /* U+0D47+0D3E -> U+0D4B */ 794,
+ /* U+0DD9+0DCA -> U+0DDA */ 798,
+ /* U+0DD9+0DCF -> U+0DDC */ 799,
+ /* U+0DD9+0DDF -> U+0DDE */ 801,
+ /* U+0DDC+0DCA -> U+0DDD */ 800,
+ /* U+1025+102E -> U+1026 */ 859,
+ /* U+1B05+1B35 -> U+1B06 */ 904,
+ /* U+1B07+1B35 -> U+1B08 */ 905,
+ /* U+1B09+1B35 -> U+1B0A */ 906,
+ /* U+1B0B+1B35 -> U+1B0C */ 907,
+ /* U+1B0D+1B35 -> U+1B0E */ 908,
+ /* U+1B11+1B35 -> U+1B12 */ 909,
+ /* U+1B3A+1B35 -> U+1B3B */ 911,
+ /* U+1B3C+1B35 -> U+1B3D */ 912,
+ /* U+1B3E+1B35 -> U+1B40 */ 913,
+ /* U+1B3F+1B35 -> U+1B41 */ 914,
+ /* U+1B42+1B35 -> U+1B43 */ 915,
+ /* U+1E36+0304 -> U+1E38 */ 1176,
+ /* U+1E37+0304 -> U+1E39 */ 1177,
+ /* U+1E5A+0304 -> U+1E5C */ 1212,
+ /* U+1E5B+0304 -> U+1E5D */ 1213,
+ /* U+1E62+0307 -> U+1E68 */ 1224,
+ /* U+1E63+0307 -> U+1E69 */ 1225,
+ /* U+1EA0+0302 -> U+1EAC */ 1288,
+ /* U+1EA0+0306 -> U+1EB6 */ 1298,
+ /* U+1EA1+0302 -> U+1EAD */ 1289,
+ /* U+1EA1+0306 -> U+1EB7 */ 1299,
+ /* U+1EB8+0302 -> U+1EC6 */ 1314,
+ /* U+1EB9+0302 -> U+1EC7 */ 1315,
+ /* U+1ECC+0302 -> U+1ED8 */ 1332,
+ /* U+1ECD+0302 -> U+1ED9 */ 1333,
+ /* U+1F00+0300 -> U+1F02 */ 1368,
+ /* U+1F00+0301 -> U+1F04 */ 1370,
+ /* U+1F00+0342 -> U+1F06 */ 1372,
+ /* U+1F00+0345 -> U+1F80 */ 1480,
+ /* U+1F01+0300 -> U+1F03 */ 1369,
+ /* U+1F01+0301 -> U+1F05 */ 1371,
+ /* U+1F01+0342 -> U+1F07 */ 1373,
+ /* U+1F01+0345 -> U+1F81 */ 1481,
+ /* U+1F02+0345 -> U+1F82 */ 1482,
+ /* U+1F03+0345 -> U+1F83 */ 1483,
+ /* U+1F04+0345 -> U+1F84 */ 1484,
+ /* U+1F05+0345 -> U+1F85 */ 1485,
+ /* U+1F06+0345 -> U+1F86 */ 1486,
+ /* U+1F07+0345 -> U+1F87 */ 1487,
+ /* U+1F08+0300 -> U+1F0A */ 1376,
+ /* U+1F08+0301 -> U+1F0C */ 1378,
+ /* U+1F08+0342 -> U+1F0E */ 1380,
+ /* U+1F08+0345 -> U+1F88 */ 1488,
+ /* U+1F09+0300 -> U+1F0B */ 1377,
+ /* U+1F09+0301 -> U+1F0D */ 1379,
+ /* U+1F09+0342 -> U+1F0F */ 1381,
+ /* U+1F09+0345 -> U+1F89 */ 1489,
+ /* U+1F0A+0345 -> U+1F8A */ 1490,
+ /* U+1F0B+0345 -> U+1F8B */ 1491,
+ /* U+1F0C+0345 -> U+1F8C */ 1492,
+ /* U+1F0D+0345 -> U+1F8D */ 1493,
+ /* U+1F0E+0345 -> U+1F8E */ 1494,
+ /* U+1F0F+0345 -> U+1F8F */ 1495,
+ /* U+1F10+0300 -> U+1F12 */ 1384,
+ /* U+1F10+0301 -> U+1F14 */ 1386,
+ /* U+1F11+0300 -> U+1F13 */ 1385,
+ /* U+1F11+0301 -> U+1F15 */ 1387,
+ /* U+1F18+0300 -> U+1F1A */ 1390,
+ /* U+1F18+0301 -> U+1F1C */ 1392,
+ /* U+1F19+0300 -> U+1F1B */ 1391,
+ /* U+1F19+0301 -> U+1F1D */ 1393,
+ /* U+1F20+0300 -> U+1F22 */ 1396,
+ /* U+1F20+0301 -> U+1F24 */ 1398,
+ /* U+1F20+0342 -> U+1F26 */ 1400,
+ /* U+1F20+0345 -> U+1F90 */ 1496,
+ /* U+1F21+0300 -> U+1F23 */ 1397,
+ /* U+1F21+0301 -> U+1F25 */ 1399,
+ /* U+1F21+0342 -> U+1F27 */ 1401,
+ /* U+1F21+0345 -> U+1F91 */ 1497,
+ /* U+1F22+0345 -> U+1F92 */ 1498,
+ /* U+1F23+0345 -> U+1F93 */ 1499,
+ /* U+1F24+0345 -> U+1F94 */ 1500,
+ /* U+1F25+0345 -> U+1F95 */ 1501,
+ /* U+1F26+0345 -> U+1F96 */ 1502,
+ /* U+1F27+0345 -> U+1F97 */ 1503,
+ /* U+1F28+0300 -> U+1F2A */ 1404,
+ /* U+1F28+0301 -> U+1F2C */ 1406,
+ /* U+1F28+0342 -> U+1F2E */ 1408,
+ /* U+1F28+0345 -> U+1F98 */ 1504,
+ /* U+1F29+0300 -> U+1F2B */ 1405,
+ /* U+1F29+0301 -> U+1F2D */ 1407,
+ /* U+1F29+0342 -> U+1F2F */ 1409,
+ /* U+1F29+0345 -> U+1F99 */ 1505,
+ /* U+1F2A+0345 -> U+1F9A */ 1506,
+ /* U+1F2B+0345 -> U+1F9B */ 1507,
+ /* U+1F2C+0345 -> U+1F9C */ 1508,
+ /* U+1F2D+0345 -> U+1F9D */ 1509,
+ /* U+1F2E+0345 -> U+1F9E */ 1510,
+ /* U+1F2F+0345 -> U+1F9F */ 1511,
+ /* U+1F30+0300 -> U+1F32 */ 1412,
+ /* U+1F30+0301 -> U+1F34 */ 1414,
+ /* U+1F30+0342 -> U+1F36 */ 1416,
+ /* U+1F31+0300 -> U+1F33 */ 1413,
+ /* U+1F31+0301 -> U+1F35 */ 1415,
+ /* U+1F31+0342 -> U+1F37 */ 1417,
+ /* U+1F38+0300 -> U+1F3A */ 1420,
+ /* U+1F38+0301 -> U+1F3C */ 1422,
+ /* U+1F38+0342 -> U+1F3E */ 1424,
+ /* U+1F39+0300 -> U+1F3B */ 1421,
+ /* U+1F39+0301 -> U+1F3D */ 1423,
+ /* U+1F39+0342 -> U+1F3F */ 1425,
+ /* U+1F40+0300 -> U+1F42 */ 1428,
+ /* U+1F40+0301 -> U+1F44 */ 1430,
+ /* U+1F41+0300 -> U+1F43 */ 1429,
+ /* U+1F41+0301 -> U+1F45 */ 1431,
+ /* U+1F48+0300 -> U+1F4A */ 1434,
+ /* U+1F48+0301 -> U+1F4C */ 1436,
+ /* U+1F49+0300 -> U+1F4B */ 1435,
+ /* U+1F49+0301 -> U+1F4D */ 1437,
+ /* U+1F50+0300 -> U+1F52 */ 1440,
+ /* U+1F50+0301 -> U+1F54 */ 1442,
+ /* U+1F50+0342 -> U+1F56 */ 1444,
+ /* U+1F51+0300 -> U+1F53 */ 1441,
+ /* U+1F51+0301 -> U+1F55 */ 1443,
+ /* U+1F51+0342 -> U+1F57 */ 1445,
+ /* U+1F59+0300 -> U+1F5B */ 1447,
+ /* U+1F59+0301 -> U+1F5D */ 1448,
+ /* U+1F59+0342 -> U+1F5F */ 1449,
+ /* U+1F60+0300 -> U+1F62 */ 1452,
+ /* U+1F60+0301 -> U+1F64 */ 1454,
+ /* U+1F60+0342 -> U+1F66 */ 1456,
+ /* U+1F60+0345 -> U+1FA0 */ 1512,
+ /* U+1F61+0300 -> U+1F63 */ 1453,
+ /* U+1F61+0301 -> U+1F65 */ 1455,
+ /* U+1F61+0342 -> U+1F67 */ 1457,
+ /* U+1F61+0345 -> U+1FA1 */ 1513,
+ /* U+1F62+0345 -> U+1FA2 */ 1514,
+ /* U+1F63+0345 -> U+1FA3 */ 1515,
+ /* U+1F64+0345 -> U+1FA4 */ 1516,
+ /* U+1F65+0345 -> U+1FA5 */ 1517,
+ /* U+1F66+0345 -> U+1FA6 */ 1518,
+ /* U+1F67+0345 -> U+1FA7 */ 1519,
+ /* U+1F68+0300 -> U+1F6A */ 1460,
+ /* U+1F68+0301 -> U+1F6C */ 1462,
+ /* U+1F68+0342 -> U+1F6E */ 1464,
+ /* U+1F68+0345 -> U+1FA8 */ 1520,
+ /* U+1F69+0300 -> U+1F6B */ 1461,
+ /* U+1F69+0301 -> U+1F6D */ 1463,
+ /* U+1F69+0342 -> U+1F6F */ 1465,
+ /* U+1F69+0345 -> U+1FA9 */ 1521,
+ /* U+1F6A+0345 -> U+1FAA */ 1522,
+ /* U+1F6B+0345 -> U+1FAB */ 1523,
+ /* U+1F6C+0345 -> U+1FAC */ 1524,
+ /* U+1F6D+0345 -> U+1FAD */ 1525,
+ /* U+1F6E+0345 -> U+1FAE */ 1526,
+ /* U+1F6F+0345 -> U+1FAF */ 1527,
+ /* U+1F70+0345 -> U+1FB2 */ 1530,
+ /* U+1F74+0345 -> U+1FC2 */ 1545,
+ /* U+1F7C+0345 -> U+1FF2 */ 1587,
+ /* U+1FB6+0345 -> U+1FB7 */ 1534,
+ /* U+1FBF+0300 -> U+1FCD */ 1555,
+ /* U+1FBF+0301 -> U+1FCE */ 1556,
+ /* U+1FBF+0342 -> U+1FCF */ 1557,
+ /* U+1FC6+0345 -> U+1FC7 */ 1549,
+ /* U+1FF6+0345 -> U+1FF7 */ 1591,
+ /* U+1FFE+0300 -> U+1FDD */ 1568,
+ /* U+1FFE+0301 -> U+1FDE */ 1569,
+ /* U+1FFE+0342 -> U+1FDF */ 1570,
+ /* U+2190+0338 -> U+219A */ 1801,
+ /* U+2192+0338 -> U+219B */ 1802,
+ /* U+2194+0338 -> U+21AE */ 1803,
+ /* U+21D0+0338 -> U+21CD */ 1804,
+ /* U+21D2+0338 -> U+21CF */ 1806,
+ /* U+21D4+0338 -> U+21CE */ 1805,
+ /* U+2203+0338 -> U+2204 */ 1807,
+ /* U+2208+0338 -> U+2209 */ 1808,
+ /* U+220B+0338 -> U+220C */ 1809,
+ /* U+2223+0338 -> U+2224 */ 1810,
+ /* U+2225+0338 -> U+2226 */ 1811,
+ /* U+223C+0338 -> U+2241 */ 1816,
+ /* U+2243+0338 -> U+2244 */ 1817,
+ /* U+2245+0338 -> U+2247 */ 1818,
+ /* U+2248+0338 -> U+2249 */ 1819,
+ /* U+224D+0338 -> U+226D */ 1822,
+ /* U+2261+0338 -> U+2262 */ 1821,
+ /* U+2264+0338 -> U+2270 */ 1825,
+ /* U+2265+0338 -> U+2271 */ 1826,
+ /* U+2272+0338 -> U+2274 */ 1827,
+ /* U+2273+0338 -> U+2275 */ 1828,
+ /* U+2276+0338 -> U+2278 */ 1829,
+ /* U+2277+0338 -> U+2279 */ 1830,
+ /* U+227A+0338 -> U+2280 */ 1831,
+ /* U+227B+0338 -> U+2281 */ 1832,
+ /* U+227C+0338 -> U+22E0 */ 1841,
+ /* U+227D+0338 -> U+22E1 */ 1842,
+ /* U+2282+0338 -> U+2284 */ 1833,
+ /* U+2283+0338 -> U+2285 */ 1834,
+ /* U+2286+0338 -> U+2288 */ 1835,
+ /* U+2287+0338 -> U+2289 */ 1836,
+ /* U+2291+0338 -> U+22E2 */ 1843,
+ /* U+2292+0338 -> U+22E3 */ 1844,
+ /* U+22A2+0338 -> U+22AC */ 1837,
+ /* U+22A8+0338 -> U+22AD */ 1838,
+ /* U+22A9+0338 -> U+22AE */ 1839,
+ /* U+22AB+0338 -> U+22AF */ 1840,
+ /* U+22B2+0338 -> U+22EA */ 1845,
+ /* U+22B3+0338 -> U+22EB */ 1846,
+ /* U+22B4+0338 -> U+22EC */ 1847,
+ /* U+22B5+0338 -> U+22ED */ 1848,
+ /* U+3046+3099 -> U+3094 */ 2286,
+ /* U+304B+3099 -> U+304C */ 2261,
+ /* U+304D+3099 -> U+304E */ 2262,
+ /* U+304F+3099 -> U+3050 */ 2263,
+ /* U+3051+3099 -> U+3052 */ 2264,
+ /* U+3053+3099 -> U+3054 */ 2265,
+ /* U+3055+3099 -> U+3056 */ 2266,
+ /* U+3057+3099 -> U+3058 */ 2267,
+ /* U+3059+3099 -> U+305A */ 2268,
+ /* U+305B+3099 -> U+305C */ 2269,
+ /* U+305D+3099 -> U+305E */ 2270,
+ /* U+305F+3099 -> U+3060 */ 2271,
+ /* U+3061+3099 -> U+3062 */ 2272,
+ /* U+3064+3099 -> U+3065 */ 2273,
+ /* U+3066+3099 -> U+3067 */ 2274,
+ /* U+3068+3099 -> U+3069 */ 2275,
+ /* U+306F+3099 -> U+3070 */ 2276,
+ /* U+306F+309A -> U+3071 */ 2277,
+ /* U+3072+3099 -> U+3073 */ 2278,
+ /* U+3072+309A -> U+3074 */ 2279,
+ /* U+3075+3099 -> U+3076 */ 2280,
+ /* U+3075+309A -> U+3077 */ 2281,
+ /* U+3078+3099 -> U+3079 */ 2282,
+ /* U+3078+309A -> U+307A */ 2283,
+ /* U+307B+3099 -> U+307C */ 2284,
+ /* U+307B+309A -> U+307D */ 2285,
+ /* U+309D+3099 -> U+309E */ 2291,
+ /* U+30A6+3099 -> U+30F4 */ 2318,
+ /* U+30AB+3099 -> U+30AC */ 2293,
+ /* U+30AD+3099 -> U+30AE */ 2294,
+ /* U+30AF+3099 -> U+30B0 */ 2295,
+ /* U+30B1+3099 -> U+30B2 */ 2296,
+ /* U+30B3+3099 -> U+30B4 */ 2297,
+ /* U+30B5+3099 -> U+30B6 */ 2298,
+ /* U+30B7+3099 -> U+30B8 */ 2299,
+ /* U+30B9+3099 -> U+30BA */ 2300,
+ /* U+30BB+3099 -> U+30BC */ 2301,
+ /* U+30BD+3099 -> U+30BE */ 2302,
+ /* U+30BF+3099 -> U+30C0 */ 2303,
+ /* U+30C1+3099 -> U+30C2 */ 2304,
+ /* U+30C4+3099 -> U+30C5 */ 2305,
+ /* U+30C6+3099 -> U+30C7 */ 2306,
+ /* U+30C8+3099 -> U+30C9 */ 2307,
+ /* U+30CF+3099 -> U+30D0 */ 2308,
+ /* U+30CF+309A -> U+30D1 */ 2309,
+ /* U+30D2+3099 -> U+30D3 */ 2310,
+ /* U+30D2+309A -> U+30D4 */ 2311,
+ /* U+30D5+3099 -> U+30D6 */ 2312,
+ /* U+30D5+309A -> U+30D7 */ 2313,
+ /* U+30D8+3099 -> U+30D9 */ 2314,
+ /* U+30D8+309A -> U+30DA */ 2315,
+ /* U+30DB+3099 -> U+30DC */ 2316,
+ /* U+30DB+309A -> U+30DD */ 2317,
+ /* U+30EF+3099 -> U+30F7 */ 2319,
+ /* U+30F0+3099 -> U+30F8 */ 2320,
+ /* U+30F1+3099 -> U+30F9 */ 2321,
+ /* U+30F2+3099 -> U+30FA */ 2322,
+ /* U+30FD+3099 -> U+30FE */ 2323,
+ /* U+11099+110BA -> U+1109A */ 4588,
+ /* U+1109B+110BA -> U+1109C */ 4589,
+ /* U+110A5+110BA -> U+110AB */ 4590,
+ /* U+11131+11127 -> U+1112E */ 4596,
+ /* U+11132+11127 -> U+1112F */ 4597,
+ /* U+11347+1133E -> U+1134B */ 4609,
+ /* U+11347+11357 -> U+1134C */ 4610,
+ /* U+114B9+114B0 -> U+114BC */ 4628,
+ /* U+114B9+114BA -> U+114BB */ 4627,
+ /* U+114B9+114BD -> U+114BE */ 4629,
+ /* U+115B8+115AF -> U+115BA */ 4632,
+ /* U+115B9+115AF -> U+115BB */ 4633,
+ /* U+11935+11930 -> U+11938 */ 4642
+};
+
+/* Perfect hash function for recomposition */
+static int
+Recomp_hash_func(const void *key)
+{
+ static const int16 h[1883] = {
+ 772, 773, 621, 32767, 32767, 387, 653, 196,
+ 32767, 32767, 855, 463, -19, 651, 32767, 32767,
+ 32767, 364, 32767, 32767, -108, 32767, 32767, 32767,
+ 32767, 0, -568, 32767, 32767, 32767, 0, 0,
+ 0, -103, 364, 0, 210, 732, 0, 0,
+ -506, 0, 0, 0, 32767, 32767, 0, 32767,
+ 407, -140, 32767, 409, 32767, 772, 0, 86,
+ 842, 934, 32767, 32767, -499, -355, 32767, 32767,
+ 532, 138, 174, -243, 860, 1870, 742, 32767,
+ 32767, 339, 32767, 1290, 0, 32767, 32767, 0,
+ -449, -1386, 1633, 560, 561, 32767, 1219, 1004,
+ 139, -804, 32767, -179, 141, 579, 1586, 32767,
+ 32767, 32767, 142, 199, 32767, 32767, 143, 0,
+ 32767, 32767, 314, 896, 32767, 32767, 428, 129,
+ 286, -58, 0, 68, 32767, 0, 244, -566,
+ 32767, 32767, 32767, 246, 32767, 32767, 0, 32767,
+ 32767, 271, -108, 928, 32767, 715, 32767, 32767,
+ -211, -497, 32767, 0, 1055, 1339, 32767, 0,
+ 32767, 32767, -968, -144, 32767, 32767, 248, 32767,
+ -161, 32767, 32767, 282, 32767, -372, 0, 2,
+ -137, 1116, 32767, 687, 32767, 459, 913, 0,
+ 461, 879, -816, 443, 32767, 32767, 462, 1089,
+ 32767, 1054, 0, 314, 447, -26, 480, 32767,
+ 64, 0, 0, 112, 32767, 66, 0, 646,
+ 603, 22, -292, 0, 710, 475, 32767, 24,
+ -781, 32767, 32767, 32767, 281, 307, 32767, 1289,
+ 32767, 0, 1064, -149, 454, 118, 32767, 32767,
+ 0, 32767, -126, 0, 32767, 32767, 858, 32767,
+ 32767, 32767, 1029, 886, 665, 209, 0, 26,
+ 359, 0, 0, -108, -508, -603, 894, 906,
+ 32767, 32767, 14, 0, 0, 534, 984, 876,
+ 32767, -93, 110, -367, 167, 843, 32767, 32767,
+ -947, -290, 169, 0, 0, 32767, -42, 564,
+ 0, -927, 32767, 817, 32767, 32767, 32767, 110,
+ 0, 32767, 32767, -38, 32767, 32767, -101, 694,
+ -142, 190, 191, 1288, 32767, -687, 194, -579,
+ 534, -452, 0, -72, 536, 765, 823, 266,
+ -259, 684, 767, 32767, 654, 32767, 32767, 64,
+ 920, 32767, 32767, 32767, 0, 1653, 0, 0,
+ 32767, 32767, -452, -222, 855, 0, 32767, -1153,
+ 127, 490, 449, 863, 32767, -144, 32767, -379,
+ 545, 32767, 32767, 32767, 530, 32767, 32767, 1331,
+ 611, -612, 332, 545, -73, 0, 604, 201,
+ 32767, -279, 338, 836, 340, 408, 32767, -60,
+ -358, 32767, 343, 69, 707, 0, -129, 582,
+ 32767, 0, 32767, 96, 392, 490, 639, 157,
+ -4, 406, 32767, 32767, -571, 1077, 546, 32767,
+ 551, 0, 0, 0, 32767, 32767, 348, 32767,
+ 498, -181, 0, -433, 1057, 260, 0, 32767,
+ 32767, 397, 32767, 816, -130, 32767, 624, 0,
+ 0, 32767, 32767, 32767, 485, 0, 32767, 32767,
+ 32767, 32767, 32767, 0, 32767, 32767, 32767, 1222,
+ -230, 32767, 797, -538, 32767, 974, 32767, 32767,
+ 831, 70, -658, 145, 0, 147, 0, 32767,
+ 1295, 32767, 0, 0, 895, 0, 0, -385,
+ 491, -287, 32767, -587, 32767, 32767, 32767, 813,
+ -471, -13, 32767, 32767, 32767, 0, 203, 411,
+ 470, 0, -546, -179, 146, 0, 0, 32767,
+ -468, 32767, 0, 0, 32767, 32767, 32767, 211,
+ 32767, 32767, 0, 32767, 0, 52, 32767, 0,
+ 32767, 0, 692, 990, 32767, 32767, 32767, 56,
+ -507, 784, 951, 0, 32767, 0, 697, 32767,
+ 187, 0, 32767, 32767, 430, 1209, 682, 32767,
+ 130, 0, -25, 0, -1006, 0, 32767, 214,
+ 433, 22, 0, -1119, 32767, 285, 32767, 32767,
+ 32767, 216, 32767, 32767, 32767, 217, 527, 32767,
+ 32767, 32767, 829, 485, 419, 717, 620, 731,
+ 32767, 470, 0, -145, -620, 1162, -644, 848,
+ 287, -632, 32767, 32767, 32767, 32767, 381, 32767,
+ 510, 511, -554, -2, 32767, 0, 0, 698,
+ 32767, 32767, 436, 1154, 32767, 463, 32767, 32767,
+ 627, 517, 32767, 32767, 854, 579, 723, 396,
+ 110, -42, 354, 32767, 664, 32767, 32767, 0,
+ 0, 32767, 65, -163, 67, 140, 69, 341,
+ 70, 71, 402, 73, 623, 544, 624, 417,
+ -1375, 648, 32767, -26, 904, 0, 548, 0,
+ 0, 32767, 32767, 855, 32767, 488, -524, 599,
+ 130, 131, 32767, 32767, 542, -1110, -324, -462,
+ 32767, -405, -440, 0, 0, 629, 850, 0,
+ 741, 257, 258, 32767, 32767, 0, 32767, 923,
+ 0, 32767, 0, 32767, 1559, 32767, 32767, 32767,
+ 671, 32767, 134, 32767, 32767, -336, -104, 576,
+ 577, 829, 32767, 32767, 762, 902, 32767, 0,
+ 32767, 0, 1506, 887, 32767, 636, 601, 2465,
+ 426, 0, 236, 317, 427, 968, 32767, -975,
+ -559, -343, 341, 32767, 937, 241, 0, 32767,
+ 32767, 547, 32767, 32767, 32767, 32767, 32767, 789,
+ 0, 32767, 32767, 32767, 0, 0, 0, 32767,
+ -192, 859, 1185, 1153, 69, 32767, 32767, 32767,
+ -539, 32767, 32767, 0, 32767, 32767, 32767, 32767,
+ 640, 578, 32767, 32767, -766, 32767, 32767, 32767,
+ 32767, 1050, -572, 32767, 32767, 32767, 32767, 1268,
+ 32767, 32767, 32767, 754, 32767, 32767, 1640, 179,
+ 804, 32767, 32767, 32767, 32767, 0, 684, 943,
+ 1006, 32767, 32767, 652, 0, 32767, 1041, 32767,
+ 718, 791, 32767, 274, 697, 32767, 32767, 0,
+ 32767, 32767, 32767, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 735,
+ 0, 32767, 32767, 32767, 275, 358, 688, 32767,
+ 32767, 32767, 548, -87, 770, 32767, -42, 0,
+ 551, 32767, 691, 222, 32767, 32767, 32767, 32767,
+ 0, 1273, 403, -121, 806, 553, 554, 163,
+ 32767, 32767, 892, 825, 32767, 32767, -490, 32767,
+ 32767, 32767, 32767, 32767, -109, 744, 910, 32767,
+ 91, 32767, 32767, 0, 0, 32767, 32767, 32767,
+ 1521, 50, 701, 32767, 32767, 32767, 32767, 164,
+ 658, 32767, 288, 0, 32767, 0, 51, 0,
+ 32767, 32767, 32767, 32767, 555, 1547, 32767, 32767,
+ 595, 585, 429, 32767, -80, 32767, 1258, 0,
+ 540, 486, -434, 865, 0, 192, 0, 884,
+ 0, 0, 0, 175, 555, 0, 32767, 32767,
+ 0, 32767, -566, 866, 591, 32767, 32767, 32767,
+ 32767, 32767, 496, 495, -215, 32767, 849, -772,
+ 32767, 32767, 502, 178, 483, 32767, 912, 793,
+ 794, 0, 32767, 32767, 32767, -556, 499, 838,
+ 32767, 32767, -506, 331, 0, 0, -1096, 512,
+ 880, 0, 774, -338, 649, 32767, 270, 32767,
+ 32767, -624, 328, 459, 32767, 32767, 32767, 32767,
+ 329, -201, -835, 813, -879, 560, 0, -212,
+ -114, 35, -494, 37, 523, 653, 751, -653,
+ -743, 32767, 1356, 818, 32767, 32767, 856, 0,
+ 44, 902, 0, 0, 0, 0, 32767, -26,
+ 526, 795, 456, 32767, 104, -209, -341, 133,
+ -372, 0, 45, 110, 111, 0, 511, 47,
+ 114, 32767, 32767, 93, 48, 116, -1031, -279,
+ 32767, 192, 0, 32767, 453, 415, 0, -190,
+ 32767, 471, 240, 175, 29, 665, 684, 0,
+ -11, -95, -344, 32767, 245, 148, 0, 530,
+ 0, 1185, -615, -712, 693, 784, 32767, 0,
+ -776, 32767, 32767, -813, 0, 0, 0, 207,
+ 208, 32767, 674, 32767, 742, -289, 249, 32767,
+ 520, 929, -50, 781, 0, -778, 32767, 0,
+ 302, 32767, 720, -465, 0, 32767, 32767, 32767,
+ 0, 0, 32767, 833, 328, 806, 32767, -403,
+ 0, 32767, -77, 32767, 0, 441, 930, 32767,
+ 643, 0, 32767, 1938, 0, 1334, 381, 32767,
+ 216, 32767, 32767, 0, 32767, 484, 383, 0,
+ 242, 395, 0, 32767, 32767, 32767, -781, 355,
+ 356, 32767, 292, 706, 32767, 32767, 32767, 32767,
+ 32767, -410, 32767, 32767, 782, 32767, 189, 32767,
+ 32767, 943, 0, -212, 407, 335, 0, 135,
+ 32767, 616, 0, -497, 0, -67, 853, 32767,
+ 700, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 459, -48, 32767, 58, 0,
+ -856, 1017, 32767, 59, 916, -731, 32767, 940,
+ -855, 347, 650, 0, 678, 32767, 0, 32767,
+ 32767, 530, 32767, 0, -80, 32767, -730, 32767,
+ 1214, 799, 58, 651, 841, 0, 0, -589,
+ -1530, -478, 651, 652, 93, 576, -1215, 32767,
+ 125, 32767, 1279, 32767, 32767, 0, 32767, 0,
+ -367, 416, -1236, 32767, 418, 32767, 815, 558,
+ 559, 781, 419, 32767, 739, 32767, 0, 32767,
+ 128, 570, 1349, -298, -66, 0, 147, -488,
+ 32767, 590, 189, 274, 524, 32767, 1082, -209,
+ 32767, 423, 32767, 32767, 975, 573, 32767, 424,
+ 32767, 32767, 1241, 32767, 32767, 32767, 32767, 32767,
+ 612, 391, 32767, 0, -803, 1004, -561, 32767,
+ 32767, 735, 870, 32767, 0, 32767, 32767, -123,
+ 99, 210, 600, 1294, 109, 1053, 32767, 307,
+ 834, 32767, 0, 1651, 32767, 644, 32767, 32767,
+ 0, 32767, -801, 385, 379, 32767, -368, 32767,
+ 32767, 830, 0, 32767, 32767, 739, 371, 372,
+ -275, 32767, 32767, 331, -780, 32767, 0, 1229,
+ -1462, 913, 266, 827, 125, 32767, 32767, 32767,
+ 393, 32767, 631, -33, -883, -661, -204, 6,
+ -19, 257, 8, 9, 118, 519, 615, -541,
+ -893, 0, 32767, 0, 1156, 15, 900, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1022, 376, 0,
+ 32767, 32767, -972, 676, 840, -661, 631, 58,
+ 0, 17, 32767, 0, -799, 82, 0, 32767,
+ 32767, 680, 32767, 905, 0, 0, 32767, 32767,
+ 0, 0, 32767, 0, 828, 386, 802, 0,
+ 146, 0, 148, 32767, -1146, 0, 150, 151,
+ -743, 153, 154, 32767, 32767, 442, 32767, 743,
+ 0, 0, 746, 0, 32767, 32767, 32767, 98,
+ 32767, 157, 0, 696, 0, 32767, 32767, -294,
+ 32767, 158, 159, 32767, 0, 32767, 160, 32767,
+ 933, 32767, 32767, -50, 759, 824, 162, 672,
+ 32767, 356, 0, 356, 32767, 32767, 0, 0,
+ 656, 692, 253, 254, -374, 102, 256, 32767,
+ 0, 0, 32767, 32767, 259, 32767, 63, 260,
+ 510, 261, 32767, 0, 32767, 1061, 32767, 521,
+ 32767, 32767, 32767, 32767, 32767, 32767, 316, 317,
+ 846, 0, 32767, -500, 318, 0, 32767, 32767,
+ 263, 0, 790, 872, 32767, 32767, 32767, 2171,
+ 264, 32767, 32767, 32767, 32767, 486, 334, 465,
+ 32767, 466, 32767, 444, 606, 32767, 0, 445,
+ 320, -317, 0, 520, 322, 718, 32767, 32767,
+ 32767, 0, 1013, 32767, 32767, 32767, 32767, 32767,
+ 32767, 611, 32767, 0, 0, 32767, 32767, -120,
+ 156, 613, 0, 0, 32767, -68, 32767, 622,
+ 32767, 32767, 32767, 32767, 32767, 455, 32767, 32767,
+ 32767, 403, 533, 0, -161, 405, 95, 96,
+ 32767, 97, 32767, 0, 29, 0, 32767, 32767,
+ 30, 32767, 99, 32767, 32767, 0, 161, 32767,
+ 97, 0, 32, 32767, 32767, 0, 0, 315,
+ 32767, 32767, 414, 966, 0, 585, 32767, 32767,
+ -616, -256, 171, 172, 666, 101, 562, 563,
+ 32767, 95, 0, 0, 1492, 390, -251, 103,
+ 32767, 0, 32767, 188, 1487, 32767, 0, 0,
+ 586, 668, -126, 0, 0, 32767, 32767, 204,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 656, 32767, 32767,
+ 599, 0, 222, 32767, 0, 1368, -412, 435,
+ 32767, 936, 32767, -17, 32767, 832, 32767, 437,
+ 0, -518, 787, 32767, 864, -449, 0, 636,
+ 713, 206, 592, 572, 0, 483, -139, 32767,
+ 32767, 180, 818, 32767, 32767, 1304, 0, 32767,
+ 274, 0, 0, 0, 0, 705, 32767, 32767,
+ 32767, 0, -272, 0, 502, 503, 319, 0,
+ 32767, 0, 13, 32767, 32767, 0, 32767, 270,
+ 737, 0, 32767, 32767, 32767, 901, 32767, 616,
+ 180, 32767, 721, 353, 32767, 0, 32767, 32767,
+ -199, 0, 280, 788, 32767, 940, 32767, 51,
+ 0, 400, 53, 0, 54, -637, 0, -453,
+ 0, 0, 0, 380, 0, 32767, 504, 0,
+ 2049, 0, -964, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 798, 32767, 32767, 32767, 0,
+ 538, 488, 0, 32767, -528, 57, 819, 32767,
+ 32767, 1244, 0, 488, 739, 908, 32767, 32767,
+ 0, 32767, 32767, 0, 55, 533, 0, 32767,
+ 814, 0, 32767, 458, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 776, 777, 920, 0,
+ 0, 755, 32767, 0, 32767, 32767, 0, 32767,
+ 55, -954, 0, 372, 166, 218, 165, 857,
+ 221, 675, 0, 223, 224, -155, 226, 32767,
+ 1851, 227, 32767, 32767, 1192, 0, 229, 0,
+ -72, 0, 865, 0, 0, -330, 0, 683,
+ 32767, -550, -196, 725, -573, 293, 102, 32767,
+ -589, 296, 297, 298, 231, -256, 300, 32767,
+ 32767, 301, 233, 868, 32767, 234, 0, 811,
+ 1187, 32767, 32767, 0, 32767, 518, 0, 361,
+ 362, 466, 0, 365, 32767, -179, 366, 367,
+ 874, 369, 305, 0, 32767, 0, 32767, 0,
+ 32767, 2000, 1215, 451, 652, 0, 0, 799,
+ 32767, 32767, 32767
+ };
+
+ const unsigned char *k = (const unsigned char *) key;
+ size_t keylen = 8;
+ uint32 a = 0;
+ uint32 b = 0;
+
+ while (keylen--)
+ {
+ unsigned char c = *k++;
+
+ a = a * 257 + c;
+ b = b * 17 + c;
+ }
+ return h[a % 1883] + h[b % 1883];
+}
+
+/* Hash lookup information for recomposition */
+static const pg_unicode_recompinfo UnicodeRecompInfo =
+{
+ RecompInverseLookup,
+ Recomp_hash_func,
+ 941
+};
--
2.22.0
There was a mistake in v3 with pgindent/exclude_file_patterns, fixed in v4.
--
John Naylor
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
Attachments:
v4-0001-Speed-up-unicode-decomposition.patchapplication/octet-stream; name=v4-0001-Speed-up-unicode-decomposition.patchDownload
From 19622c50dea74aed8d881c797bc9b83b0c5fbb6b Mon Sep 17 00:00:00 2001
From: John Naylor <john.naylor@2ndquadrant.com>
Date: Wed, 21 Oct 2020 19:23:56 -0400
Subject: [PATCH v4 1/2] Speed up unicode decomposition
Replace binary search in the backend with a perfect hash function.
This takes up 26kB additional bytes, so leave out of the frontend
since decomposition there is thus far only used on password-length
strings.
---
src/common/unicode/Makefile | 4 +-
.../unicode/generate-unicode_norm_table.pl | 106 +-
src/common/unicode_norm.c | 61 +-
src/include/common/unicode_norm_hashfunc.h | 1713 +++++++++++++++++
src/tools/pgindent/exclude_file_patterns | 3 +-
5 files changed, 1848 insertions(+), 39 deletions(-)
create mode 100644 src/include/common/unicode_norm_hashfunc.h
diff --git a/src/common/unicode/Makefile b/src/common/unicode/Makefile
index 93a9d1615f..eb14add28a 100644
--- a/src/common/unicode/Makefile
+++ b/src/common/unicode/Makefile
@@ -18,7 +18,7 @@ LIBS += $(PTHREAD_LIBS)
# By default, do nothing.
all:
-update-unicode: unicode_norm_table.h unicode_combining_table.h unicode_normprops_table.h
+update-unicode: unicode_norm_table.h unicode_combining_table.h unicode_normprops_table.h unicode_norm_hashfunc.h
mv $^ ../../../src/include/common/
$(MAKE) normalization-check
@@ -30,6 +30,8 @@ UnicodeData.txt DerivedNormalizationProps.txt CompositionExclusions.txt Normaliz
# Generation of conversion tables used for string normalization with
# UTF-8 strings.
+unicode_norm_hashfunc.h: unicode_norm_table.h
+
unicode_norm_table.h: generate-unicode_norm_table.pl UnicodeData.txt CompositionExclusions.txt
$(PERL) generate-unicode_norm_table.pl
diff --git a/src/common/unicode/generate-unicode_norm_table.pl b/src/common/unicode/generate-unicode_norm_table.pl
index 7ce15e1a03..5fca88796f 100644
--- a/src/common/unicode/generate-unicode_norm_table.pl
+++ b/src/common/unicode/generate-unicode_norm_table.pl
@@ -10,7 +10,12 @@
use strict;
use warnings;
-my $output_file = "unicode_norm_table.h";
+use FindBin;
+use lib "$FindBin::RealBin/../../tools/";
+use PerfectHash;
+
+my $output_table_file = "unicode_norm_table.h";
+my $output_func_file = "unicode_norm_hashfunc.h";
my $FH;
@@ -64,11 +69,13 @@ close $FH;
my $num_characters = scalar @characters;
-# Start writing out the output file
-open my $OUTPUT, '>', $output_file
- or die "Could not open output file $output_file: $!\n";
+# Start writing out the output files
+open my $OT, '>', $output_table_file
+ or die "Could not open output file $output_table_file: $!\n";
+open my $OF, '>', $output_func_file
+ or die "Could not open output file $output_func_file: $!\n";
-print $OUTPUT <<HEADER;
+print $OT <<HEADER;
/*-------------------------------------------------------------------------
*
* unicode_norm_table.h
@@ -111,8 +118,44 @@ static const pg_unicode_decomposition UnicodeDecompMain[$num_characters] =
{
HEADER
+print $OF <<HEADER;
+/*-------------------------------------------------------------------------
+ *
+ * unicode_norm_hashfunc.h
+ * Perfect hash functions used for Unicode normalization
+ *
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/common/unicode_norm_hashfunc.h
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/*
+ * File auto-generated by src/common/unicode/generate-unicode_norm_table.pl,
+ * do not edit. There is deliberately not an #ifndef PG_UNICODE_NORM_HASHFUNC_H
+ * here.
+ */
+
+#include "unicode_norm_table.h"
+
+/* Typedef for perfect hash functions */
+typedef int (*cp_hash_func) (const void *key);
+
+/* Information for lookups with perfect hash functions */
+typedef struct
+{
+ const pg_unicode_decomposition *decomps;
+ cp_hash_func hash;
+ int num_decomps;
+} pg_unicode_decompinfo;
+
+HEADER
+
my $decomp_index = 0;
my $decomp_string = "";
+my @dec_cp_packed;
my $last_code = $characters[-1]->{code};
foreach my $char (@characters)
@@ -121,6 +164,9 @@ foreach my $char (@characters)
my $class = $char->{class};
my $decomp = $char->{decomp};
+ # Save the code point bytes as a string in network order.
+ push @dec_cp_packed, pack('N', hex($char->{code}));
+
# The character decomposition mapping field in UnicodeData.txt is a list
# of unicode codepoints, separated by space. But it can be prefixed with
# so-called compatibility formatting tag, like "<compat>", or "<font>".
@@ -163,7 +209,7 @@ foreach my $char (@characters)
{
foreach my $lcode (@composition_exclusion_codes)
{
- if ($lcode eq $char->{code})
+ if ($lcode eq $code)
{
$flags .= " | DECOMP_NO_COMPOSE";
$comment = "in exclusion list";
@@ -175,7 +221,7 @@ foreach my $char (@characters)
if ($decomp_size == 0)
{
- print $OUTPUT "\t{0x$code, $class, 0$flags, 0}";
+ print $OT "\t{0x$code, $class, 0$flags, 0}";
}
elsif ($decomp_size == 1 && length($first_decomp) <= 4)
{
@@ -183,11 +229,11 @@ foreach my $char (@characters)
# The decomposition consists of a single codepoint, and it fits
# in a uint16, so we can store it "inline" in the main table.
$flags .= " | DECOMP_INLINE";
- print $OUTPUT "\t{0x$code, $class, 1$flags, 0x$first_decomp}";
+ print $OT "\t{0x$code, $class, 1$flags, 0x$first_decomp}";
}
else
{
- print $OUTPUT
+ print $OT
"\t{0x$code, $class, $decomp_size$flags, $decomp_index}";
# Now save the decompositions into a dedicated area that will
@@ -205,25 +251,15 @@ foreach my $char (@characters)
}
# Print a comma after all items except the last one.
- print $OUTPUT "," unless ($code eq $last_code);
- if ($comment ne "")
- {
-
- # If the line is wide already, indent the comment with one tab,
- # otherwise with two. This is to make the output match the way
- # pgindent would mangle it. (This is quite hacky. To do this
- # properly, we should actually track how long the line is so far,
- # but this works for now.)
- print $OUTPUT "\t" if ($decomp_index < 10);
+ print $OT "," unless ($code eq $last_code);
- print $OUTPUT "\t/* $comment */" if ($comment ne "");
- }
- print $OUTPUT "\n";
+ print $OT "\t/* $comment */" if ($comment ne "");
+ print $OT "\n";
}
-print $OUTPUT "\n};\n\n";
+print $OT "\n};\n\n";
# Print the array of decomposed codes.
-print $OUTPUT <<HEADER;
+print $OT <<HEADER;
/* codepoints array */
static const uint32 UnicodeDecomp_codepoints[$decomp_index] =
{
@@ -231,4 +267,24 @@ $decomp_string
};
HEADER
-close $OUTPUT;
+# Emit the definition of the decomp hash function.
+my $dec_funcname = 'Decomp_hash_func';
+my $dec_func = PerfectHash::generate_hash_function(\@dec_cp_packed,
+ $dec_funcname, fixed_key_length => 4);
+print $OF "/* Perfect hash function for decomposition */\n";
+print $OF "static $dec_func\n";
+
+# Emit the structure that wraps the hash lookup information into
+# one variable.
+print $OF <<HEADER;
+/* Hash lookup information for decomposition */
+static const pg_unicode_decompinfo UnicodeDecompInfo =
+{
+ UnicodeDecompMain,
+ $dec_funcname,
+ $num_characters
+};
+HEADER
+
+close $OT;
+close $OF;
diff --git a/src/common/unicode_norm.c b/src/common/unicode_norm.c
index 4bb6a0f587..7d0d23ab21 100644
--- a/src/common/unicode_norm.c
+++ b/src/common/unicode_norm.c
@@ -19,9 +19,11 @@
#endif
#include "common/unicode_norm.h"
-#include "common/unicode_norm_table.h"
#ifndef FRONTEND
+#include "common/unicode_norm_hashfunc.h"
#include "common/unicode_normprops_table.h"
+#else
+#include "common/unicode_norm_table.h"
#endif
#include "port/pg_bswap.h"
@@ -44,6 +46,42 @@
#define NCOUNT VCOUNT * TCOUNT
#define SCOUNT LCOUNT * NCOUNT
+/*
+ * Get the entry corresponding to code in the decomposition lookup table.
+ */
+#ifndef FRONTEND
+
+static const pg_unicode_decomposition *
+get_code_entry(pg_wchar code)
+{
+ int h;
+ uint32 hashkey;
+ pg_unicode_decompinfo decompinfo = UnicodeDecompInfo;
+
+ /*
+ * Compute the hash function. The hash key is the codepoint with the bytes
+ * in network order.
+ */
+ hashkey = pg_hton32(code);
+ h = decompinfo.hash(&hashkey);
+
+ /* An out-of-range result implies no match */
+ if (h < 0 || h >= decompinfo.num_decomps)
+ return NULL;
+
+ /*
+ * Since it's a perfect hash, we need only match to the specific codepoint
+ * it identifies.
+ */
+ if (code != decompinfo.decomps[h].codepoint)
+ return NULL;
+
+ /* Success! */
+ return &decompinfo.decomps[h];
+}
+
+#else
+
/* comparison routine for bsearch() of decomposition lookup table. */
static int
conv_compare(const void *p1, const void *p2)
@@ -56,10 +94,7 @@ conv_compare(const void *p1, const void *p2)
return (v1 > v2) ? 1 : ((v1 == v2) ? 0 : -1);
}
-/*
- * Get the entry corresponding to code in the decomposition lookup table.
- */
-static pg_unicode_decomposition *
+static const pg_unicode_decomposition *
get_code_entry(pg_wchar code)
{
return bsearch(&(code),
@@ -69,6 +104,8 @@ get_code_entry(pg_wchar code)
conv_compare);
}
+#endif /* !FRONTEND */
+
/*
* Given a decomposition entry looked up earlier, get the decomposed
* characters.
@@ -77,7 +114,7 @@ get_code_entry(pg_wchar code)
* is only valid until next call to this function!
*/
static const pg_wchar *
-get_code_decomposition(pg_unicode_decomposition *entry, int *dec_size)
+get_code_decomposition(const pg_unicode_decomposition *entry, int *dec_size)
{
static pg_wchar x;
@@ -104,7 +141,7 @@ get_code_decomposition(pg_unicode_decomposition *entry, int *dec_size)
static int
get_decomposed_size(pg_wchar code, bool compat)
{
- pg_unicode_decomposition *entry;
+ const pg_unicode_decomposition *entry;
int size = 0;
int i;
const uint32 *decomp;
@@ -231,7 +268,7 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
static void
decompose_code(pg_wchar code, bool compat, pg_wchar **result, int *current)
{
- pg_unicode_decomposition *entry;
+ const pg_unicode_decomposition *entry;
int i;
const uint32 *decomp;
int dec_size;
@@ -358,8 +395,8 @@ unicode_normalize(UnicodeNormalizationForm form, const pg_wchar *input)
pg_wchar prev = decomp_chars[count - 1];
pg_wchar next = decomp_chars[count];
pg_wchar tmp;
- pg_unicode_decomposition *prevEntry = get_code_entry(prev);
- pg_unicode_decomposition *nextEntry = get_code_entry(next);
+ const pg_unicode_decomposition *prevEntry = get_code_entry(prev);
+ const pg_unicode_decomposition *nextEntry = get_code_entry(next);
/*
* If no entries are found, the character used is either an Hangul
@@ -417,7 +454,7 @@ unicode_normalize(UnicodeNormalizationForm form, const pg_wchar *input)
for (count = 1; count < decomp_size; count++)
{
pg_wchar ch = decomp_chars[count];
- pg_unicode_decomposition *ch_entry = get_code_entry(ch);
+ const pg_unicode_decomposition *ch_entry = get_code_entry(ch);
int ch_class = (ch_entry == NULL) ? 0 : ch_entry->comb_class;
pg_wchar composite;
@@ -458,7 +495,7 @@ unicode_normalize(UnicodeNormalizationForm form, const pg_wchar *input)
static uint8
get_canonical_class(pg_wchar ch)
{
- pg_unicode_decomposition *entry = get_code_entry(ch);
+ const pg_unicode_decomposition *entry = get_code_entry(ch);
if (!entry)
return 0;
diff --git a/src/include/common/unicode_norm_hashfunc.h b/src/include/common/unicode_norm_hashfunc.h
new file mode 100644
index 0000000000..d2f4ad884b
--- /dev/null
+++ b/src/include/common/unicode_norm_hashfunc.h
@@ -0,0 +1,1713 @@
+/*-------------------------------------------------------------------------
+ *
+ * unicode_norm_hashfunc.h
+ * Perfect hash functions used for Unicode normalization
+ *
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/common/unicode_norm_hashfunc.h
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/*
+ * File auto-generated by src/common/unicode/generate-unicode_norm_table.pl,
+ * do not edit. There is deliberately not an #ifndef PG_UNICODE_NORM_HASHFUNC_H
+ * here.
+ */
+
+#include "unicode_norm_table.h"
+
+/* Typedef for perfect hash functions */
+typedef int (*cp_hash_func) (const void *key);
+
+/* Information for lookups with perfect hash functions */
+typedef struct
+{
+ const pg_unicode_decomposition *decomps;
+ cp_hash_func hash;
+ int num_decomps;
+} pg_unicode_decompinfo;
+
+/* Perfect hash function for decomposition */
+static int
+Decomp_hash_func(const void *key)
+{
+ static const int16 h[13209] = {
+ 0, 1515, 4744, 4745, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3890, 3890, 0, 0,
+ 3891, 3891, -2046, 2800, 3890, 3890, 3890, -4396,
+ 4361, 4362, -4441, -4441, -4396, 1773, 1773, 1773,
+ 4372, 4373, -4438, -4438, -4393, -4393, 2619, 17,
+ -4347, -4393, -4393, -4393, -4393, -4393, 2619, 2619,
+ 1560, 4346, 4347, 4348, 1917, 1873, 1874, 1875,
+ -7856, 4358, 17619, 2622, 2622, 2622, 6357, 6358,
+ 6359, 6360, 6361, 6362, 6363, 2622, -4390, -4390,
+ 4414, -5356, -5356, 4374, 4375, -5356, -5356, -6335,
+ -3020, 2511, -5356, -5356, -3583, -3583, -3583, -3583,
+ -995, 0, 0, -9799, -9754, 2874, 2875, 2876,
+ 2877, 2878, -9830, -3591, -9756, -9756, -2744, -5346,
+ -9710, -9756, 342, -5346, -9756, -5346, -2743, -449,
+ 348, 2894, 2895, -2853, 2897, 2898, 2899, 2900,
+ 2901, 2902, 2903, 2904, 2905, 2906, 2907, 2908,
+ 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916,
+ 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924,
+ 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932,
+ 2933, 2934, 32767, 32767, 32767, 32767, 32767, 32767,
+ -8721, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 1, 32767, 48, 32767, 32767, 32767, 32767, 49,
+ 32767, 32767, -8687, -8687, -6255, -6210, 32767, 32767,
+ -8689, -8689, -21949,32767, -18635,-15320,-15320,32767,
+ -12006,-8691, -8691, -8691, -8691, -8691, 32767, 66,
+ -8737, -8737, -8692, -8692, -8692, -8692, 73, 74,
+ 32767, -8738, -8693, -8693, -8693, -8693, -8693, 32767,
+ 32767, -8695, -8695, -8695, -8695, -8695, 32767, 32767,
+ 40, 41, -2390, -2434, 44, 45, 32767, 46,
+ 13307, 9993, 9994, 6680, 6681, 3367, 3368, 54,
+ 0, 55, 56, 57, -8699, -8699, 105, 32767,
+ 32767, 61, 62, 63, -8701, -8701, 32767, 111,
+ 32767, 67, 68, 69, 70, 1890, 3687, -1272,
+ 3690, 75, 76, 77, 78, 79, 80, 81,
+ 82, 32767, 32767, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 32767,
+ 32767, 103, 104, 105, 106, 107, 108, 109,
+ -8660, -8660, 32767, -8661, -8661, -8661, -8661, -8661,
+ -8661, 32767, 73, 74, 75, 76, -2355, -2399,
+ 79, 80, 32767, 32767, 13341, 10027, 10028, 6714,
+ 6715, 3401, 3402, 32767, 32767, 88, 89, 90,
+ -8666, -8666, 138, 32767, 32767, 94, 95, 96,
+ -8668, -8668, 144, 145, 101, -2553, -2553, -2553,
+ -2553, -4983, -2553, -2553, 154, -2553, 156, 32767,
+ 32767, 6114, 158, -3153, -3152, -3151, -12891,-6888,
+ -931, -3149, 166, -3148, -4728, 169, -3147, -3146,
+ -3145, -3144, -3143, -3142, -3141, -2543, -3139, -3138,
+ 180, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 3314,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 3660, 3661, 2131, 2132, 2133, 2134, 2135,
+ 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143,
+ 2144, 2145, -5472, -5472, -3612, -3612, -3612, -3612,
+ -3612, 2652, -3612, -3612, -3612, -3612, -3612, -3612,
+ -3612, -3612, 3693, -3613, -7015, -7015, 1742, 1743,
+ -7060, -7060, -7015, -846, -846, -846, 1753, 1754,
+ -7057, -7057, -7012, -7012, 0, -2602, -6966, -7012,
+ -7012, -7012, -7012, -7012, 0, 0, 1725, 1726,
+ 1727, 1728, -703, -747, -746, 0, 1735, 1736,
+ 14997, 0, 0, 0, 3735, 3736, 3737, 3738,
+ 3739, 3740, 3741, 0, -7012, -7012, 1792, 1793,
+ 1749, 1750, 1751, -7980, -7980, -8959, -5644, -113,
+ -7980, -113, -2382, -6116, -6116, -6116, -6116, -6116,
+ -6116, -6116, -2374, 4639, 4640, -4163, 5608, 5609,
+ -4120, -4120, 5612, 5613, 6593, 3279, -2251, 5617,
+ 5618, 3846, 3847, 3848, 3849, 1262, 1262, 10066,
+ 10067, 10023, 3855, 3856, 3857, 1259, 1259, 10071,
+ 3861, 10027, 10028, 3017, 5620, 9985, 10032, -65,
+ 5624, 10035, 5626, 3024, 731, -65, 1298, 12530,
+ 3727, 3727, 3772, 3772, 3772, 13504, 13505, 14485,
+ 11171, 5641, 13509, 5643, 7913, 11648, 11649, 11650,
+ 11651, 11652, 11653, 11654, 7913, 901, 901, 9705,
+ -65, -65, 9665, 9666, -65, -65, -1044, 2271,
+ 7802, -65, -65, 1708, 1708, 1708, 1708, 4296,
+ 4297, -4506, -4506, -4461, 1708, 1708, 1708, 4307,
+ 4308, -4503, 1708, -4457, -4457, 2555, -47, -4411,
+ -4457, 5641, -47, -4457, -47, 2556, 4850, 5647,
+ 4285, -6946, 1858, 1859, 1815, 1816, 1817, -7914,
+ -7914, -8893, -5578, -47, -7914, -47, -2316, -6050,
+ -6050, -6050, -6050, -6050, -6050, -6050, -2308, 4705,
+ 4706, -4097, 5674, 5675, -4054, -4054, 5678, 5679,
+ 6659, 3345, -2185, 5683, 5684, 3912, 3913, 3914,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -3083, -3083, 232, 287, 233, 233,
+ 233, 8990, 8991, 32767, 32767, 3668, 32767, 3667,
+ 3667, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 208, 208, 208, 208, 208, 208,
+ 32767, 32767, 206, 206, 206, 206, 206, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 304, 305, -1274, 307, 308,
+ 309, 6753, -1374, 10488, 4486, -1470, 4488, 316,
+ 4489, -5607, 4490, 4491, 4492, 322, 760, 324,
+ 325, 326, 166, 763, 329, -2553, 765, 332,
+ 333, 334, 335, 772, 337, 6310, 339, 340,
+ 341, 342, 343, 344, 345, 346, -2542, -2542,
+ -2542, 350, 351, 352, 353, 354, 355, 356,
+ 357, 358, 359, 360, 361, 362, -6008, 364,
+ 365, 366, 367, 368, 369, 370, 254, 372,
+ 373, 374, 375, 376, 377, 378, 379, 380,
+ 381, 382, 32767, 383, 384, -3606, -3605, -3604,
+ -3603, 389, -3600, -3599, -3598, 2340, -1238, -3595,
+ -3594, -3593, 4694, -4062, -4062, 4742, 4743, 4699,
+ -1469, -1468, -1467, -4065, -4065, 4747, -1463, 4703,
+ 4704, -2307, 296, 32767, 0, 32767, 32767, 4708,
+ -1376, -1376, -1376, 32767, 32767, -1246, 506, 506,
+ 0, -1559, 32767, 32767, 32767, 32767, 32767, 305,
+ 419, 308, 2578, 6313, 6314, 424, 32767, -6030,
+ 32767, 426, 427, 428, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 32767, 0,
+ 32767, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 32767, 429, -5407, 431,
+ -5406, 433, -3601, 435, 32767, -3751, 32767, 32767,
+ 32767, 32767, -3755, 32767, 32767, 32767, 32767, 0,
+ 32767, 32767, 32767, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 436, -11425,-5422,
+ 535, -5422, 535, -5422, 4675, -5421, -5421, -5421,
+ -5421, -5421, 4681, 0, 0, 0, 4682, 4683,
+ 4684, 4685, 4686, 4687, 0, 0, 32767, 32767,
+ 0, 0, -5684, 0, 4688, 4689, 4690, 4691,
+ 4692, 4693, 4694, 4695, -1257, -1257, 4696, -5441,
+ -5441, 4699, 4700, 4701, -5443, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 454, 0, 32767, 456,
+ 32767, 32767, 0, 457, 32767, 32767, 32767, 0,
+ 458, 459, 460, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 4703, 4704, 4705, 4706, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 4655, 4656, 4657, 4658,
+ 4659, 4712, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 462, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 463, 464, 32767, 465,
+ 32767, 32767, 32767, 466, 32767, 32767, 32767, 32767,
+ 467, 468, 469, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 3011, 3011, 3011,
+ 3011, 3011, 3011, 3011, 32767, 32767, 32767, 32767,
+ 32767, 32767, 470, 471, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 472,
+ 473, 474, 475, 476, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 4713, 4714, 4715, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 477, 478, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 479, 480, 481, 482,
+ 32767, 32767, 483, 484, 32767, 32767, 485, 486,
+ 487, 488, 489, 490, 32767, 32767, 491, 492,
+ 493, 494, 495, 496, 32767, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 665, -255, 667, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 693, 694, 695, 696,
+ 697, 698, 699, 700, 701, 702, 703, 704,
+ 705, 706, 707, 708, 709, 710, 711, 712,
+ 7183, 714, -1580, 716, 2547, 718, 7194, 720,
+ 2553, 722, 723, 7204, 725, 726, 727, 728,
+ 729, 730, 731, 732, 733, 734, 735, 736,
+ 0, 0, 8114, 8159, 745, -1535, 747, 748,
+ 8161, -5019, -5019, -5019, -5019, 1938, 0, 0,
+ 0, 0, 0, 0, 767, 768, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 32767, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, -2875, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -2884, -2884,
+ -2884, -2884, -2884, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -4271, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -2884, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -2884, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -2884, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -2884, 32767, -2885, 32767, -2886, -2886,
+ 32767, -2887, -2887, 32767, -2888, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 563, 564,
+ 565, 566, 567, 568, 569, 570, 571, 572,
+ 573, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 574, 575, 576, 577, 578, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, -294, -294, -294, -3047, 583, 584, 585,
+ -4462, -4418, -4418, -4418, -4418, -4418, -4462, -4462,
+ -4462, 595, 596, 597, 598, 599, 32767, 32767,
+ 32767, 32767, -4471, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 4716, 4717, 4718, 4719,
+ 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727,
+ 4728, 4729, 4730, 4731, 4732, 4733, 4734, 4735,
+ 3826, 4737, 4738, 4739, 4740, 4741, 4742, 3832,
+ 4744, 3833, 3120, 3121, 3835, 3835, 3124, 3836,
+ 3836, 4753, 4754, 4755, 4756, 4757, 4758, 4759,
+ 4760, 4761, 4762, 4763, 4764, 4765, 4766, 4767,
+ 4768, 4769, 4770, 4771, 4772, 4773, 4774, 4775,
+ 4776, 4777, 4778, 4779, 4780, 4781, 6619, 6620,
+ 6621, 11272, 6623, 6624, 4788, 4789, 4790, 3874,
+ 4761, 3874, 4794, 3874, 4796, 4797, 4798, 3874,
+ 4800, 32767, 0, 4802, 4803, 4804, 4805, 4806,
+ 4807, 4808, 4809, 4810, 4811, 4812, 4813, 4814,
+ 4815, 4816, 4817, 4818, 4819, 4820, 4821, 4822,
+ 4823, 4824, 4825, 4826, 4827, 4828, 11299, 4830,
+ 2536, 4832, 6663, 4834, 11310, 4836, 6669, 4838,
+ 4839, 11320, 4841, 4842, 4843, 4844, 4845, 4846,
+ 4847, 4848, 4849, 4850, 4851, 4852, 1188, 4854,
+ 4855, 4856, 4857, 2577, 4859, 4860, 12273, -907,
+ -907, -907, -907, -907, -907, 4868, 4869, 4870,
+ 4871, 32767, 4872, 4873, 32767, 32767, 4874, 32767,
+ 627, 4875, 4876, 32767, 32767, 4877, 4878, 4879,
+ 6722, 32767, 4881, 4882, 4883, 6730, 6731, 7446,
+ 6733, 4888, 7449, 7449, 4891, 4892, 32767, 4893,
+ 32767, 4894, 4895, 4896, 4897, 4898, 4899, 3512,
+ 3513, 3514, 3515, 3516, 4904, 3518, 3519, 3520,
+ 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528,
+ 3529, 3530, 3531, 3532, 3533, 3534, 3535, 3536,
+ 3537, 3538, 4926, 6797, 4928, 6800, 4930, 4931,
+ 4932, 4933, 4934, 4935, 6813, 4937, 4938, 6816,
+ 6817, 4941, 4942, 4943, 0, 4945, 6821, 0,
+ 0, 4949, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, -127, -127, -127,
+ 7285, -127, -127, 0, -128, -128, -128, -128,
+ 0, 32767, -130, 4971, -129, 5613, 5614, 5615,
+ 4976, 5618, 32767, 5619, 5620, 5621, 4981, 5624,
+ 4983, 4984, 32767, 5630, 5631, -1986, -1986, -126,
+ -126, 5078, 4992, 5037, 5038, 5039, 5040, 5041,
+ 5086, 5087, 5088, 5089, -2322, 5091, 5092, 5093,
+ 5094, 5095, 5096, 5097, 5098, 5099, 5100, 0,
+ 5101, -640, -640, -640, 0, -641, -641, -641,
+ -641, -641, 0, -642, 0, 0, 32767, -645,
+ -645, 6973, 6974, 5115, 5116, -87, 0, -44,
+ -44, -44, -44, -44, -88, -88, -88, -88,
+ 7324, -88, -88, -88, -88, -88, -88, -88,
+ -88, -88, -88, -88, -88, 5654, 5655, 5656,
+ 5657, 5658, 5659, 5660, 5661, 5662, 5663, 5664,
+ 5665, 5666, 5667, 5668, 5669, -1948, -1948, -88,
+ -88, 5116, 5117, 5074, 5075, 5076, 5077, 5078,
+ 5123, 5124, 5125, 5126, -2285, 5128, 5129, 5130,
+ 5131, 5132, 5133, 5134, 5135, 5136, 5137, 5138,
+ 5139, -602, -602, -602, -602, -602, -602, -602,
+ -602, -602, -602, -602, -602, -602, -602, -602,
+ -602, 7016, 7017, 5158, 5159, -44, -44, 0,
+ 0, 0, 0, 0, -44, -44, -44, -44,
+ 7368, -44, -44, -44, -44, -44, -44, -44,
+ -44, -44, -44, -44, -44, 5698, 5699, 5700,
+ 5701, 5702, 5703, 5704, 5705, 5706, 5707, 5708,
+ 5709, 5710, 5711, 5712, 5713, -1904, -1904, -44,
+ -44, 5160, 5161, 5118, 5119, 5120, 5121, 5122,
+ 5167, 5168, 5169, 5170, -2241, 5172, 5173, 5174,
+ 5175, 5176, 5177, 5178, 5179, 5180, 5181, 5182,
+ 5183, -558, -558, -558, -558, -558, -558, -558,
+ -558, -558, -558, -558, -558, -558, -558, -558,
+ -558, 7060, 7061, 5202, 5203, 0, 0, 44,
+ 44, 44, 44, 44, 0, 0, 0, 0,
+ 7412, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5742, 5743, 5744,
+ 5745, 5746, 5747, 5748, 5749, 5750, 5751, 5752,
+ 5753, 5754, 5755, 5756, 5757, -1860, -1860, 0,
+ 0, 0, 0, 0, 6264, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -3402,
+ -3402, 5355, 5356, -3447, -3447, -3402, -3402, -3402,
+ -3402, 5363, 5364, -3447, -3447, -3402, -3402, -3402,
+ -3358, -3358, -3404, -3404, -3404, -3404, -3404, -3404,
+ -3404, 5331, 5332, 5333, 5334, 2903, 2859, 5337,
+ 5338, 5339, 5340, 18601, 15287, 15288, 11974, 11975,
+ 8661, 8662, 5348, 5349, 5350, 5351, 5352, -3404,
+ -3404, 5400, 5401, 5357, 5358, 5359, 5360, -3404,
+ -3404, 5408, 5409, 5365, 5366, 5367, 5324, 5325,
+ 5372, 5373, 5374, 5375, 5376, 5377, 5378, -3356,
+ -3356, -3356, -3356, -924, -879, -3356, -3356, -3356,
+ -3356, -16616,-13301,-13301,-9986, -9986, -6671, -6671,
+ -3356, -3356, -3356, -3356, -3356, 5401, 5402, -3401,
+ -3401, -3356, -3356, -3356, -3356, 5409, 5410, -3401,
+ -3401, -3356, -3356, -3356, -3312, -3312, -3358, -3358,
+ -3358, -3358, -3358, -3358, -3358, 5377, 5378, 5379,
+ 5380, 2949, 2905, 5383, 5384, 5385, 5386, 18647,
+ 15333, 15334, 12020, 12021, 8707, 8708, 5394, 5395,
+ 5396, 5397, 5398, -3358, -3358, 5446, 5447, 5403,
+ 5404, 5405, 5406, -3358, -3358, 5454, 5455, 5411,
+ 5412, 5413, 5414, 5415, 5416, 5417, 5418, 5419,
+ 5420, 5421, 5422, -3312, -3312, -3312, -3312, -880,
+ -835, -3312, -3312, -3312, -3312, -16572,-13257,-13257,
+ -9942, -9942, -6627, -6627, -3312, -3312, -3312, -3312,
+ -3312, 5445, 5446, -3357, -3357, -3312, -3312, -3312,
+ -3312, 5453, 5454, -3357, -3357, -3312, -3312, -3312,
+ -3312, -3312, -3312, -3312, -3312, -3312, -3312, -3312,
+ -3312, 5423, 5424, 5425, 5426, 2995, 2951, 5429,
+ 5430, 5431, 5432, 18693, 15379, 15380, 12066, 12067,
+ 8753, 8754, 5440, 5441, 5442, 5443, 5444, -3312,
+ -3312, 5492, 5493, 5449, 5450, 5451, 5452, -3312,
+ -3312, 5500, 5501, 5457, 2803, 2803, 2803, 2803,
+ 373, 2803, 2803, 5510, 2803, 5512, 11470, 5514,
+ 11472, 5516, 2205, 2206, 2207, -7533, -1530, 4427,
+ 2209, 5524, 2210, 630, 5527, 2211, 2212, 2213,
+ 2214, 2215, 2216, 2217, 2815, 2219, 2220, 5538,
+ 2221, 5540, 2222, 5542, 5543, 2223, -3312, -3312,
+ -3312, 5548, 5549, -3312, -3312, 2803, 2803, 2803,
+ 5555, 5556, 5557, 2803, 2803, 2803, 2803, 2803,
+ 2803, 2803, 2803, 2803, 2803, 2803, 2803, 2803,
+ 9050, 9051, 2803, 2803, 2803, 2803, 2803, 2803,
+ 2803, 2803, 2803, 2803, 2803, 2803, 4318, 7547,
+ 7548, 2803, 2803, 2803, 2803, 2803, 2803, 2803,
+ 2803, 6693, 6693, 2803, 2803, 6694, 6694, 757,
+ 5603, 6693, 6693, 6693, -1593, 7164, 7165, -1638,
+ -1638, -1593, 4576, 4576, 4576, 7175, 7176, -1635,
+ -1635, -1590, -1590, 5422, 2820, -1544, -1590, -1590,
+ -1590, -1590, -1590, 5422, 5422, 4363, 7149, 7150,
+ 7151, 4720, 4676, 4677, 4678, -5053, 7161, 20422,
+ 5425, 5425, 5425, 9160, 9161, 9162, 9163, 9164,
+ 9165, 9166, 5425, -1587, -1587, 7217, -2553, -2553,
+ 7177, 7178, -2553, 32767, 32767, -219, 5312, -2555,
+ -2555, -782, -782, -782, -782, 1806, 2801, 2801,
+ -6998, -6953, 5675, 5676, 5677, 5678, 5679, -7029,
+ -790, -6955, -6955, 57, -2545, -6909, -6955, 3143,
+ -2545, -6955, -2545, 58, 2352, 3149, 5695, 5696,
+ -52, 5698, 5699, 5700, 5701, 5702, 5703, 5704,
+ 5705, 5706, 5707, 5708, 5709, 5710, 5711, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -1838, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 6927,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -973, 32767, 32767,
+ 32767, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 4567, 4568, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -437,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -448, 32767, 32767, -450, -450,
+ -450, 0, 32767, 32767, 32767, -2166, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 0, 32767, -464,
+ -464, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -514,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 5757, 5758, 5759, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -4186, -4186, -12097,-4186, 32767,
+ -4187, -4187, -8787, 32767, 0, 0, 5952, 0,
+ 0, -4183, -4183, -4183, 0, -2386, -4182, 778,
+ -4183, -5935, 32767, 32767, -4690, -6249, -4184, -4184,
+ -4184, 32767, 32767, -4186, -4186, -77, 32767, -77,
+ 32767, -4188, 0, -4189, 32767, 0, 0, 0,
+ 0, 32767, 0, 0, 0, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 32767, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -5937, -2358, 0, 0, 0,
+ -8286, 471, 472, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 1747, 32767, -2126, 32767, 32767, 1748,
+ 1749, 1750, 1751, 1752, 1753, 8224, 1755, -539,
+ 1757, 781, 32767, 32767, 32767, -1991, -2035, 32767,
+ 32767, 782, -3784, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 837, 32767, 32767, 32767, 32767, 32767, -4008,
+ -4008, -4008, 2949, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, -797, 1806, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 4605, 4606,
+ 32767, 32767, 0, 455, 32767, 0, 32767, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -4244, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 784, 32767, 32767, 2950, 2951, 32767, 32767, 32767,
+ 32767, 32767, 32767, 786, 787, 32767, 1252, 1253,
+ 32767, 790, 32767, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 32767, 0, 32767, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -200, -200, -200,
+ -200, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ -5932, -5932, 32767, 32767, 2952, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -5387,
+ -5387, -5387, -5387, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 0, 32767, 32767,
+ 0, 0, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 497, 498, 499, 500,
+ 501, 502, 503, 504, 505, 506, 507, 508,
+ 32767, 32767, -156, 765, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -861,
+ 32767, 6106, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2953, 2954, 32767, 797,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 2955, 32767, 32767, 32767, -8929,
+ 32767, -8885, -8885, -8885, 32767, 32767, 32767, 32767,
+ 32767, 32767, -749, 7119, 7120, 32767, 32767, 32767,
+ 32767, 2760, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, -1181, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -5587, 0, 7596,
+ 7597, 0, 0, 0, 0, 0, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -714, 0,
+ 0, -713, -712, 0, -711, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1859,
+ 0, 3247, 32767, 32767, 0, 3247, 0, 3248,
+ 0, 3249, 0, 3250, 0, 3251, 0, 3252,
+ 808, 3252, 0, 3253, 0, 3254, 0, 0,
+ 3256, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 0, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 0, 0, 6824,
+ 32767, 0, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 4207, 4208, 0, 0, 0, 0, 0, 1896,
+ 0, 0, 1898, 1898, 1898, 1898, 0, 0,
+ 0, 1901, 1901, 0, 0, 0, 0, 0,
+ 0, -1319, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 7618, 7619, 7620,
+ 3, 3, 1863, 1863, 7067, 7068, 7025, 7026,
+ 7027, 7028, 7029, 7074, 7075, 7076, 7077, -334,
+ 7079, 7080, 7081, 7082, 7083, 7084, 7085, 7086,
+ 7087, 7088, 7089, 7090, 1349, 1349, 1349, 1349,
+ 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349,
+ 1349, 1349, 1349, 1349, 8967, 8968, 7109, 7110,
+ 1907, 1907, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 2976, 2977, 2978, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 820, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 821,
+ 2381, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 2005, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 823, 32767, 824, 32767,
+ 825, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 826, 32767, 32767, 32767, 32767, 32767,
+ 32767, 4575, 4576, 4577, 4578, 4579, 4580, 4581,
+ 4582, 4583, 4584, 4585, 32767, 32767, 829, 32767,
+ 32767, 32767, 32767, 830, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 6253, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 6253, -3848, 834, 835, 836, -3845, -3845, -3845,
+ -3845, -3845, -3845, 843, 844, -4280, 32767, 845,
+ 846, 6531, 848, -3839, 32767, -3840, -3840, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 1946, 32767,
+ 32767, 32767, -3849, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 853, 32767, 32767, 32767,
+ 32767, 854, 32767, 32767, 32767, 32767, 855, 32767,
+ 32767, 32767, 32767, 856, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 857, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -3799, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 8266, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 859, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 860,
+ 32767, 861, -5065, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 10746, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4526,
+ 32767, 4573, 4574, 4575, 32767, 32767, -2436, -1376,
+ 32767, 32767, 32767, 32767, 32767, -1689, -1689, 4349,
+ -4171, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 4588, 32767,
+ 4589, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4590,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 4591, 4592, 32767,
+ 32767, 32767, 32767, 32767, 32767, 2933, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 864, 32767, 32767, 32767,
+ 0, 32767, 0, 32767, 32767, -2977, 335, 335,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2992, 2993, 2994, 2995,
+ 32767, 32767, 32767, 4596, 2550, 32767, 32767, 32767,
+ -1188, 4769, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 4600, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 2997, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 4601, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 2013,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -11287,32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -4664, 32767, 32767, -4711, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -4718, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4049,
+ 32767, 32767, 32767, 4050, 4051, 4052, 17313, 32767,
+ 32767, 32767, 10684, 7370, 7371, 4057, 4058, 4059,
+ 4060, 4061, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 4603, 8793, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 1283, 4897, 4898, 4899, 12175, 4901, 4902, 32767,
+ 4903, 4904, 4905, 4906, 4907, 10276, -1469, 1282,
+ 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
+ 1282, 32767, 32767, 4920, 4921, 4063, -2051, -2050,
+ 4925, 4926, 32767, 7332, 7333, 32767, 7334, 7335,
+ 7336, 7337, 5045, 32767, 32767, 32767, -2049, -2048,
+ 32767, -8294, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1132, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 20166, 16852, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6908, 6909, 6910, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -4510, -4510, -4510, -4510, -4510, -4510, -4510, 0,
+ 0, 0, 0, 0, 0, -1831, -1831, -1831,
+ -15091,-11776,-11776,-8461, 0, 0, 0, -1834,
+ -1834, -1834, -1834, -1834, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -1819, -3615, 1345, -3616, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 32767, 32767, 0,
+ 0, 0, 0, 0, 0, 0, 8770, 8771,
+ 8772, 8773, 8774, 8775, 8776, 8777, 8778, 8779,
+ 45, 45, 45, 45, 2477, 2522, 45, 45,
+ 45, 45, -13215,-9900, -9900, -6585, -6585, -3270,
+ -3270, 45, 45, 45, 45, 45, 8802, 8803,
+ 0, 0, 45, 45, 45, 45, 8810, 8811,
+ 0, 0, 45, 2700, 2701, 2702, 2703, 5134,
+ 2705, 2706, 0, 2708, 0, -5957, 0, -5957,
+ 0, 3312, 3312, 3312, 13053, 7051, 1095, 3314,
+ 0, 3315, 4896, 0, 3317, 3317, 3317, 3317,
+ 3317, 3317, 3317, 2720, 3317, 3317, 0, 3318,
+ 0, 3319, 0, 0, 3321, 8857, 8858, 8859,
+ 0, 0, 8862, 8863, 2749, 2750, 2751, 0,
+ 0, 0, 2755, 2756, 2757, 2758, 2759, 2760,
+ 2761, 2762, 2763, 2764, 2765, 2766, 2767, -3479,
+ -3479, 2770, 2771, 2772, 2773, 2774, 2775, 2776,
+ 2777, 2778, 2779, 2780, 2781, 1267, -1961, -1961,
+ 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792,
+ -1097, -1096, 2795, 2796, -1094, -1093, 4845, 0,
+ -1089, -1088, -1087, 7200, -1556, -1556, 7248, 7249,
+ 7205, 1037, 1038, 1039, -1559, -1559, 7253, 7254,
+ 7210, 7211, 200, 2803, 7168, 7215, 7216, 7217,
+ 7218, 7219, 208, 209, 1269, -1516, -1516, -1516,
+ 916, 961, 961, 961, 10693, -1520, -14780,218,
+ 219, 220, -3514, -3514, -3514, -3514, -3514, -3514,
+ -3514, 228, 7241, 7242, -1561, 8210, 8211, -1518,
+ -1518, 8214, 8215, 9195, 5881, 351, 8219, 8220,
+ 6448, 6449, 6450, 6451, 3864, 2870, 2871, 12671,
+ 12627, 0, 0, 0, 0, 0, 12709, 6471,
+ 12637, 12638, 5627, 8230, 12595, 12642, 2545, 8234,
+ 12645, 8236, 5634, 3341, 2545, 0, 0, 5749,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 0, 0, 11602,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 1466,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5760, 0, 0, 0, 0, 0, 32767,
+ 0, 32767, 0, 0, 32767, 0, 0, 32767,
+ 0, 3507, 3508, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 1644, 1645, 1646, 1647, -5764, 1649, 1650, 1651,
+ 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659,
+ 1660, -4081, -4081, -4081, -4081, -4081, -4081, -4081,
+ -4081, -4081, -4081, -4081, -4081, -4081, -4081, -4081,
+ -4081, 3537, 3538, 1679, 3582, 3583, 3584, -3482,
+ -3482, -3482, -3482, -3482, -3526, -3526, -3526, -3526,
+ 3886, -3526, -3526, -3526, -3526, 3599, 3600, 3601,
+ 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609,
+ 3610, 3611, 3612, 3613, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+ -7275, 0, 0, -7234, 0, 0, 0, 0,
+ 0, -5368, 6378, 3628, 3629, 3630, 3631, 3632,
+ 3633, 3634, 3635, 3636, 3637, 3638, 3639, 0,
+ 0, 859, 6974, 6974, 0, 0, 3647, -2405,
+ -2405, 3650, -2405, -2405, -2405, -2405, -112, -2405,
+ -3201, 3658, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 32767, 32767, 32767,
+ 32767, 5280, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 4637, 4638, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 4014, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 802, 32767, 32767,
+ 32767, 32767, 803, -1055, 805, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 4639, 32767,
+ 32767, 32767, 806, -2445, 0, -2443, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 810, 32767, 32767,
+ 32767, 32767, 811, 812, 813, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -6211, -6211, -6211, -6211, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -6271, -6271,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 935, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, -10300,32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 0, 32767, 32767, 4640, 4641, 32767,
+ 32767, 32767, 32767, 32767, 4624, 32767, 32767, 32767,
+ -4233, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 1859, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 872, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -4568, -1253, 32767,
+ -3590, 32767, 32767, 32767, -1820, -1820, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 873, 874, 875, 3629, 0, 0,
+ 0, 5048, 5005, 5006, 5007, 5008, 5009, 5054,
+ 5055, 5056, 0, 0, 0, 0, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4118,
+ 32767, 32767, 32767, 32767, -4122, -4122, -4122, -4122,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4193,
+ 32767, -4194, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -4209, 32767, 32767, -4211, -4211, -4211,
+ -4211, -4211, -4211, -4211, 32767, 32767, -4213, -10683,
+ -4213, -1918, -4213, -6043, 32767, 32767, -4215, -6047,
+ 32767, -4216, -10696,-4216, -4216, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 4646, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 876, 877, 0, 32767, 0, 32767, 0,
+ 32767, 0, 32767, 0, 32767, 32767, 32767, 0,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 1844, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -2899, 0, 32767,
+ 0, 32767, 0, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 836, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32767, 0, 0, 0, 879,
+ 880, 881, 882, 883, 884, 885, 886, 0,
+ 0, 887, 0, 920, 0, 922, 923, 924,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 5431,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 3639, 889, 890, 891, 892, 893,
+ 894, 895, 896, 897, 898, 899, 900, -2739,
+ 927, -1881, 4234, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -459, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -458,
+ -457, 904, 32767, 905, 32767, 906, 32767, 907,
+ 32767, 908, 32767, 32767, 32767, 909, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 910,
+ 0, 0, 0, 0, 0, 0, 911, 0,
+ 912, 1626, 1626, 913, 914, 1626, 915, 916,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -1837, -1837, -1837,
+ -6487, -1837, -1837, 0, 0, 0, 917, 31,
+ 919, 0, 921, 0, 0, 0, 925, 0,
+ 32767, 4801, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -6470, 0, 2295,
+ 0, -1830, 0, -6475, 0, -1832, 0, 0,
+ -6480, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3665, 0, 0,
+ 0, 0, 2281, 0, 0, -7412, 5769, 5770,
+ 5771, 5772, 5773, 5774, 0, 0, 0, 0,
+ 32767, 0, 0, 32767, 32767, 0, 32767, 32767,
+ 0, 0, 32767, 32767, 0, 0, 0, -1842,
+ 32767, 0, 0, 0, -1846, -1846, -2560, -1846,
+ 0, -2560, -2559, 0, 0, 32767, 0, 32767,
+ 0, 0, 0, 0, 0, 0, 1388, 0,
+ 1387, 1387, 1387, 0, 1387, 1387, 1387, 1387,
+ 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
+ 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
+ 1387, 0, -1870, 0, -1871, 0, 0, 0,
+ 0, 0, 0, -1877, 0, 0, -1877, -1877,
+ 0, 0, 0, 4944, 0, -1875, 4947, 4948,
+ 0, 4950, 4951, 4952, 4953, 4954, 4955, 4956,
+ 4957, 4958, 4959, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+ 32767, 32767, 0, 0, 0, 0, 32767, 32767,
+ 32767, 0, 0, 931, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4650,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 5375,
+ 5376, 5377, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 13180, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, -4011, 933, -4011, 32767,
+ 935, 936, -4012, 938, 939, 940, 941, 942,
+ 943, 944, 945, 946, 947, 32767, 1075, 1076,
+ 1077, -6334, 1079, 1080, 954, 32767, 32767, 32767,
+ 32767, 955, 32767, 32767, 32767, 32767, 32767, 32767,
+ -4659, 32767, 32767, 32767, -4662, -4662, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 959, 960, 961, 32767, 962, 963, 964,
+ 965, 966, 967, 968, 969, 970, 971, 972,
+ 32767, 973, 974, 975, 976, 977, 978, 979,
+ 980, 981, 982, 983, 984, 985, 986, 987,
+ 988, 989, 990, 32767, 991, 992, 993, 994,
+ 995, 996, 997, 998, 999, 1000, 1001, 1002,
+ 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
+ 1011, 1012, 1013, 1014, 1015, 1016, 1017, -362,
+ -362, 32767, 32767, 32767, 32767, -410, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1019, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 164, 1021, -3551, -3551, 1024, 1025, 1026, 1027,
+ 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035,
+ 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043,
+ 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051,
+ 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059,
+ 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
+ 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075,
+ 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083,
+ 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091,
+ 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099,
+ 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107,
+ 1108, 1109, 1110, 1111, 1112, 1113, 1114, 32767,
+ 1115, 1116, 1117, 1118, 1119, 32767, 1120, 1121,
+ 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129,
+ 1130, 1131, 0, 1133, 1134, 1135, 1136, 1137,
+ 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145,
+ 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153,
+ 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161,
+ 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169,
+ 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177,
+ 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185,
+ 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193,
+ 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201,
+ 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209,
+ -18956,-15641,1212, 1213, 1214, 1215, 1216, 1217,
+ 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225,
+ -5682, -5682, -5682, 1229, 1230, 1231, 1232, 1233,
+ 1234, 1235, 1236, 1237, 1238, 1239, 5750, 5751,
+ 5752, 5753, 5754, 5755, 5756, 1247, 1248, 1249,
+ 1250, 1251, 1252, 3084, 3085, 3086, 16347, 13033,
+ 13034, 9720, 1260, 1261, 1262, 3097, 3098, 3099,
+ 3100, 3101, 1268, 1269, 1270, 1271, 1272, 1273,
+ 1274, 1275, 32767, 32767, 32767, 32767, 1276, 1277,
+ 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285,
+ 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293,
+ 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301,
+ 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309,
+ 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317,
+ 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325,
+ 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333,
+ 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341,
+ 1342, 3162, 4959, 0, 4962, 1347, 1348, 1349,
+ 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357,
+ 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 7481,
+ 7482, 7483, 7484, 5053, 5009, 7487, 7488, 7489,
+ 7490, 20751, 17437, 17438, 14124, 14125, 10811, 10812,
+ 7498, 7499, 7500, 7501, 7502, 32767, 32767, 7548,
+ 7549, 7505, 7506, 7507, 7508, 32767, 32767, 7554,
+ 7555, 7511, 4857, 4857, 4857, 4857, 2427, 4857,
+ 4857, 7564, 4857, 7566, 13524, 7568, 13526, 7570,
+ 4259, 4260, 4261, -5479, 524, 6481, 4263, 7578,
+ 4264, 2684, 1421, -7842, -4527, -4527, -1212, -1212,
+ -1212, -1212, -1212, 7545, 7546, 0, 0, -1214,
+ -1214, -1214, -1214, 7551, 7552, 32767, 1610, -1216,
+ 1439, 1440, 1441, 1442, 3873, 1444, 1445, 32767,
+ 1446, 32767, -7220, 32767, -7221, 0, 2047, 2047,
+ 2047, 11788, 5786, -170, 2049, -1265, 2050, 3631,
+ -1265, 2052, 2052, 2052, 2052, 2052, 2052, 2052,
+ 1455, 2052, 2052, -1265, 2053, -1265, 2054, -1265,
+ -1265, 2056, 7592, 7593, 7594, 32767, 32767, 7595,
+ 7596, 1482, 1483, 1484, -1267, -1267, -1267, 1488,
+ 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496,
+ 1497, 1498, 1499, 1500, -4746, -4746, 1503, 1504,
+ 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512,
+ 1513, 1514, 0, -3228, -3228, 1518, 1519, 1520,
+ 1521, 1522, 1523, 1524, 1525, -2364, -2363, 1528,
+ 1529, -2361, -2360, 3578, 0, -2357, -2356, -2355,
+ 5932, -2824, -2824, 5980, 5981, 5937, -231, -230,
+ -229, -2827, -2827, 5985, -225, 5941, 5942, -1069,
+ 1534, 5899, 5946, 5947, 5948, 5949, 5950, -1061,
+ -1060, 0, -2785, 0, -355, -355, -310, -310,
+ -310, 9422, -2791, 32767, -1054, -1053, -1052, -4786,
+ -4786, -4786, -4786, -4786, -4786, -4786, -1044, 5969,
+ 5970, -2833, 6938, 6939, -2790, -2790, 6942, 0,
+ 32767, 4607, -923, 6945, 32767, 5173, 5174, 5175,
+ 5176, 2589, 1595, 1596, 11396, 11352, 32767, 32767,
+ 6126, 2812, 2813, 2814, 2815, 2816, -5940, -5940,
+ 1607, 1608, 2823, 32767, 32767, 1516, 0, -8581,
+ 0, 0, 728, 1525, 163, -11068,0, -2262,
+ -2306, -2305, 32767, 32767, 0, 0, 1580, 0,
+ 0, 0, -6443, 1685, -10176,-4173, 1784, -4173,
+ 0, -4172, 5925, -4171, -4171, -4171, 0, -437,
+ 0, 0, 0, 161, -435, 0, 2883, -434,
+ 0, 0, 0, 0, -436, 0, -5972, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2889,
+ 2890, 2891, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 6371,
+ 0, 0, 0, 0, 0, 0, 0, 117,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32767, 0, 0, 3991, 3991,
+ 3991, 3991, 0, 3990, 3990, 3990, -1947, 1632,
+ 3990, 3990, 3990, -4296, 4461, 4462, -4341, -4341,
+ -4296, 1873, 1873, 1873, 4472, 4473, -4338, 1873,
+ -4292, -4292, 2720, 118, -4246, -4292, -4292, 117,
+ -4293, -4293, 2719, 2719, 1660, 4446, 1662, 2018,
+ 2019, 1975, 1976, 1977, -7754, -7754, -8733, -5418,
+ 113, 0, 112, -2157, -5891, -5891, 0, -5892,
+ 6455, -5893, 0, 0, 0, 32767, 32767, 32767,
+ 5826, 32767, 32767, 32767, 32767, 6806, 32767, -2039,
+ 32767, 5829, 32767, 5830, 5831, 5832, 32767, 5833,
+ 5834, 32767, 5835, 32767, 32767, -3520, 0, 5837,
+ 0, 5838, 0, 4035, 0, 5840, 32767, 10251,
+ 154, 1671, 10253, 1673, 1674, 947, 151, 1514,
+ 12746, 1679, 3942, 3987, 3987, 3987, 13719, 13720,
+ 14700, 103, 5855, 13723, 5857, 8127, 0, 11862,
+ 5860, -96, 5862, 1690, 5863, -4233, 5864, 5865,
+ 5866, 5867, 5868, 5869, 5870, 5871, 5872, 5873,
+ 32767, 5874, 5875, 5876, 5877, 5878, 5879, 5880,
+ 5881, 5882, 5883, 13795, 5885, 5886, 5887, 5888,
+ 10489, 5890, 1703, 1704, -4247, 1706, 1707, 5891,
+ 5892, 5893, 1711, 4098, 5895, 5896, 5897, 7650,
+ 32767, 5899, 6406, 7966, 5902, 5903, 5904, 5905,
+ 5906, 5907, 5908, 1800, 5910, 1801, 5912, 5913,
+ 5914, 5915, 32767, 1727, 1728, 1729, 1730, 32767,
+ 1731, 1732, 1733, 32767, 1734, 1735, 1736, 1737,
+ 1738, 1739, 1740, 32767, 1741, 1742, 1743, 1744,
+ 1745, 1746, 32767, 32767, 32767, 32767, 1747, 1748,
+ 1749, 1750, 1751, 32767, 32767, 32767, 32767, 32767,
+ 32767, 1752, 1753, 1754, 1755, 1756, 1757, 1758,
+ 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766,
+ 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774,
+ 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782,
+ 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790,
+ 1791, 7729, 4151, 1794, 1795, 1796, 10083, 1327,
+ 1327, 10131, 10132, 10088, 3920, 3921, 3922, 1324,
+ 1324, 10136, 3926, 10092, 10093, 3082, 5685, 10050,
+ 10097, 0, 5689, 10100, 5691, 3089, 796, 0,
+ 1363, 12595, 3792, 3792, 3837, 3837, 3837, 13569,
+ 13570, 14550, 11236, 5706, 13574, 5708, 7978, 11713,
+ 11714, 11715, 11716, 11717, 11718, 11719, 7978, 966,
+ 966, 9770, 0, 0, 9730, 9731, 0, 0,
+ -979, 2336, 7867, 0, 0, 32767, 0, 0,
+ 0, 32767, 0, 0, 32767, 0, 32767, 32767,
+ 9356, 32767, 0, 32767, 0, 32767, 1804, 2602,
+ 0, -4364, -4410, 5688, 0, -4410, 0, 2603,
+ 4897, 5694, 4332, -6899, 1905, 1906, 1862, 1863,
+ 1864, -7867, -7867, -8846, -5531, 0, -7867, 0,
+ -2269, -6003, -6003, 0, 5957, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -7911, 0,
+ 0, 0, 0, -4600, 0, 0, 4156, 32767,
+ 32767, 0, 0, 0, 0, 0, 1796, 0,
+ 0, 0, -1752, 0, 0, -506, -2065, 0,
+ 0, 0, 0, 0, 0, 0, 4109, 0,
+ 4110, 0, 0, 0, 0, 0, 4111, 17372,
+ 0, 14058, 10744, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -4650, 0, 0, 4161, 32767,
+ 32767, 4117, 32767, 4118, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -7946, 32767, -4632, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4642,
+ -4642, 4123, 4124, -4687, 0, 0, -4644, -4644,
+ 0, 0, -4646, -4646, 32767, 32767, 32767, 32767,
+ 32767, 32767, 4084, 4085, 32767, 32767, 1609, 4087,
+ 32767, 32767, 4088, 17349, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 10092, 4136,
+ 10094, 4138, 10096, 0, 10097, 10098, 10099, 10100,
+ 10101, 0, 32767, 32767, 32767, 0, 0, 0,
+ 0, 0, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32767, 32767, 0, 10138, 10139,
+ 0, 0, 0, 10145, 32767, 32767, 32767, 32767,
+ 32767, 32767, -1425, 8316, 2314, -3642, 32767, 0,
+ 32767, 32767, 32767, 32767, -1426, -1426, -1426, -1426,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 52, 52, 52, 52, 52,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 1849, 1850, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, -5633, -5633, -5633, -5633, -5633, -5633, -5633,
+ -5633, -5633, -5633, -5633, -5633, -5633, -5633, -5633,
+ -5633, 1985, 1986, 127, 2030, 2031, 2032, -5034,
+ 32767, 32767, 32767, 32767, 32767, 0, 32767, 32767,
+ 32767, 5916, 5917, 5918, 5919, 5920, 5921, 5922,
+ 5923, 5924, 8824, 5926, 32767, 32767, 0, 32767,
+ 0, 5927, 5928, 5929, 5930, 5931, 5932, 5933,
+ 5934, 5935, 5936, 5937, 5938, 5939, 5940, 5105,
+ 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949,
+ 5950, 5951, 5952, 5953, 5954, 5955, 5956, 5957,
+ 32767, 5958, 5959, 5960, 5082, 5082, 5082, 5082,
+ 5082, 5082, 5082, 5082, 5969, 5970, 5084, 5972,
+ 5053, 5974, 5053, 5053, 5053, 5978, 5979, 5980,
+ 5981, 5982, 5983, 5984, 5985, 5986, 5987, 5988,
+ 5989, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2552, 32767, 32767, 32767,
+ 32767, 32767, 32767, 5990, 5991, 5992, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 5993, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 6936, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 1851, 1852, 1853, 1854,
+ 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862,
+ 1863, 1864, 1200, 2121, 1200, 1868, 1869, 1870,
+ 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878,
+ 1879, 1880, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, -5282, 1188,
+ 3483, 1188, -642, 1188, -5287, 1188, -644, 1188,
+ 1188, -5292, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1925, 1926,
+ -6187, -6231, 1184, 3465, 1184, 1184, -6228, 6953,
+ 6954, 6955, 6956, 0, 1939, 1940, 1941, 1942,
+ 1943, 1944, 1178, 1178, 1947, 1948, 1949, 1950,
+ 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958,
+ 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966,
+ 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974,
+ 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982,
+ 1983, 1984, 1985, 1986, 1987, 1988, 1989, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 709, 666, 667, 668, 32767, 669,
+ 714, 715, 716, 717, -6694, 719, 720, 721,
+ 32767, 722, 723, 724, 32767, 725, 726, 727,
+ 728, -5013, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 6052, 0, 0, 6055,
+ 0, 0, 0, 0, 2293, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1244, 1245, 1246,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4660,
+ -4660, -4660, -4660, 4097, 4098, -4705, -4705, -4660,
+ -4660, -4660, -4660, 4105, 4106, -4705, 32767, -4661,
+ -4661, -4661, -4617, -4617, -4663, -4663, -4663, -4663,
+ -4663, -4663, -4663, 4072, 4073, 4074, 4075, 1644,
+ 1600, 4078, 4079, 4080, 4081, 17342, 14028, 14029,
+ 10715, 10716, 7402, 7403, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32767, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1380, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 856, 0, 4573,
+ 4574, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 0, 0, 0,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 5204, 5161, 5162, 5163, 5164, 5165, 5210, 5211,
+ 5212, 5213, -2198, 5215, 5216, 5217, 5218, 5219,
+ 5220, 5221, 5222, 5223, 5224, 5225, 5226, -515,
+ -515, -515, -515, -515, -515, -515, -515, -515,
+ -515, -515, -515, -515, -515, -515, -515, 7103,
+ 7104, 5245, 5246, 5247, 5248, 5249, -1014, 5251,
+ 5252, 5253, 5254, 5255, 5256, 5257, 5258, 5259,
+ 5260, 8663, 8664, -92, -92, 8712, 8713, 8669,
+ 8670, 8671, 8672, -92, -92, 8720, 8721, 8677,
+ 8678, 8679, 8636, 8637, 8684, 8685, 8686, 8687,
+ 8688, 8689, 8690, -44, -44, -44, -44, 2388,
+ 2433, -44, -44, -44, -44, -13304,-9989, -9989,
+ -6674, -6674, -3359, -3359, -44, -44, -44, -44,
+ -44, 8713, 8714, -89, -89, -44, -44, -44,
+ -44, 8721, 8722, -89, -89, -44, -44, -44,
+ 0, 0, -46, -46, -46, -46, -46, -46,
+ -46, 8689, 8690, 8691, 8692, 6261, 6217, 8695,
+ 8696, 8697, 8698, 21959, 18645, 18646, 15332, 15333,
+ 12019, 12020, 8706, 8707, 8708, 8709, 8710, -46,
+ -46, 8758, 8759, 8715, 8716, 8717, 8718, -46,
+ -46, 8766, 8767, 8723, 8724, 8725, 8726, 8727,
+ 8728, 8729, 8730, 8731, 8732, 8733, 8734, 0,
+ 0, 0, 0, 2432, 2477, 0, 0, 0,
+ 0, -13260,-9945, -9945, -6630, -6630, -3315, -3315,
+ 0, 0, 0, 0, 0, 8757, 8758, -45,
+ -45, 0, 0, 0, 0, 8765, 8766, -45,
+ -45, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 8735, 8736, 8737,
+ 8738, 6307, 6263, 8741, 8742, 8743, 8744, 22005,
+ 18691, 18692, 15378, 15379, 12065, 12066, 8752, 8753,
+ 8754, 8755, 8756, 0, 0, 8804, 8805, 8761,
+ 8762, 8763, 8764, 0, 0, 8812, 8813, 8769,
+ 6115, 6115, 6115, 6115, 3685, 6115, 6115, 8822,
+ 6115, 8824, 14782, 8826, 14784, 8828, 5517, 5518,
+ 5519, -4221, 1782, 7739, 5521, 8836, 5522, 3942,
+ 8839, 5523, 5524, 5525, 5526, 5527, 5528, 5529,
+ 6127, 5531, 5532, 8850, 5533, 8852, 5534, 8854,
+ 8855, 5535, 0, 0, 0, 8860, 8861, 0,
+ 0, 0, 13252, 9939, 9939, 6626, 6626, 3313,
+ 3313, 0, 0, 0, -9269, -3312, 0, 0,
+ 0, 9741, 32767, 32767, 0, 32767, 0, 32767,
+ 32767, 0, 0, 0, 0, 0, 0, 0,
+ -597, 0, 0, 32767, 0, 32767, 0, 32767,
+ 32767, 0, 0, 32767, 32767, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -1387, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -1773, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, -4161, 1581, 1582, 32767, 32767, 1990, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 1539, 32767, 32767, 6150, 6151, 6152, 411,
+ 411, 411, 411, 411, 411, 411, 411, 411,
+ 411, 411, 411, 411, 411, 411, 411, 8029,
+ 8030, 6171, 6172, 969, 969, 1013, 1013, 1013,
+ 1013, 1013, 969, 969, 969, 969, 8381, 969,
+ 969, 969, 969, 969, 969, 969, 969, 969,
+ 969, 969, 969, 6711, 6712, 6713, 6714, 6715,
+ 6716, 6717, 6718, 6719, 6720, 6721, 6722, 6723,
+ 6724, 6725, 6726, -891, -891, 969, 969, 6173,
+ 6174, 6131, 6132, 6133, 6134, 6135, 6180, 6181,
+ 6182, 6183, -1228, 6185, 6186, 6187, 6188, 6189,
+ 6190, 6191, 6192, 6193, 6194, 6195, 6196, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 8073,
+ 8074, 6215, 6216, 1013, 1013, 1057, 1057, 1057,
+ 1057, 1057, 1013, 1013, 1013, 1013, 8425, 1013,
+ 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
+ 1013, 1013, 1013, 6755, 6756, 6757, 6758, 6759,
+ 6760, 6761, 6762, 6763, 6764, 6765, 6766, 6767,
+ 6768, 6769, 6770, -847, -847, 1013, 1013, 6217,
+ 6218, 6175, 6176, 6177, 6178, 6179, 6224, 6225,
+ 6226, 6227, -1184, 6229, 6230, 6231, 6232, 6233,
+ 6234, 6235, 6236, 6237, 6238, 6239, 6240, 499,
+ 499, 499, 499, 499, 499, 499, 499, 499,
+ 499, 499, 499, 499, 499, 499, 499, 8117,
+ 8118, 6259, 6260, 6261, 6262, 6263, 0, 6265,
+ 6266, 6267, 6268, 6269, 6270, 6271, 6272, 6273,
+ 6274, 9677, 9678, 922, 922, 9726, 9727, 9683,
+ 9684, 9685, 9686, 922, 922, 9734, 9735, 9691,
+ 9692, 9693, 9650, 9651, 9698, 9699, 9700, 9701,
+ 9702, 9703, 9704, 970, 970, 970, 970, 3402,
+ 3447, 970, 970, 970, 970, -12290,-8975, -8975,
+ -5660, -5660, -2345, -2345, -2345, -2345, -2345, 6412,
+ 6413, -2390, -2390, -2345, -2345, -2345, -2345, 6420,
+ 6421, -2390, -2390, -2345, -2345, -2345, -2301, -2301,
+ -2347, -2347, -2347, -2347, -2347, -2347, -2347, 6388,
+ 6389, 6390, 6391, 3960, 3916, 6394, 6395, 6396,
+ 6397, 19658, 16344, 16345, 13031, 13032, 9718, 9719,
+ 6405, 6406, 6407, 6408, 6409, -2347, -2347, 6457,
+ 6458, 6414, 6415, 6416, 6417, -2347, -2347, 6465,
+ 6466, 6422, 6423, 6424, 6381, 6382, 6429, 6430,
+ 6431, 6432, 6433, 6434, 6435, -2299, -2299, -2299,
+ -2299, 133, 178, -2299, -2299, -2299, -2299, -15559,
+ -12244,-12244,-8929, -8929, -5614, -5614, -2299, -2299,
+ -2299, -2299, -2299, 6458, 6459, -2344, -2344, -2299,
+ -2299, -2299, -2299, 6466, 6467, -2344, -2344, -2299,
+ -2299, -2299, -2299, -2299, -2299, -2299, -2299, -2299,
+ -2299, -2299, -2299, 6436, 6437, 6438, 6439, 4008,
+ 3964, 6442, 6443, 6444, 6445, 19706, 16392, 16393,
+ 13079, 13080, 9766, 9767, 6453, 6454, 6455, 6456,
+ 6457, -2299, -2299, 6505, 6506, 6462, 6463, 6464,
+ 6465, -2299, -2299, 6513, 6514, 6470, 6471, 6472,
+ 6473, 6474, 6475, 6476, 6477, 6478, 6479, 6480,
+ 6481, -2253, -2253, -2253, -2253, 179, 224, -2253,
+ -2253, -2253, -2253, -15513,-12198,-12198,-8883, -8883,
+ -5568, -5568, -2253, -2253, -2253, -2253, -2253, 6504,
+ 6505, -2298, -2298, -2253, -2253, -2253, -2253, 6512,
+ 6513, -2298, -2298, -2253, 402, 403, 404, 405,
+ 2836, 407, 408, -2298, 410, -2298, -8255, -2298,
+ -8255, -2298, 1014, 1014, 1014, 10755, 4753, -1203,
+ 1016, -2298, 1017, 2598, -2298, 1019, 1019, 1019,
+ 1019, 1019, 1019, 1019, 422, 1019, 1019, -2298,
+ 1020, -2298, 1021, -2298, -2298, 1023, 6559, 6560,
+ 6561, -2298, -2298, 6564, 6565, 6566, -6685, -3371,
+ -3370, -56, -55, 3259, 3260, 3261, 12531, 6575,
+ 3264, 3265, 3266, -6474, -471, 5486, 3268, 6583,
+ 3269, 1689, 6586, 3270, 3271, 3272, 3273, 3274,
+ 3275, 3276, 3874, 3278, 3279, 6597, 3280, 6599,
+ 3281, 6601, 6602, 3282, 3283, 32767, 32767, 32767,
+ 3284, 3285, 3286, 3287, 3288, 3289, 3290, 3291,
+ 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3299,
+ 3300, 3301, 3302, 3303, 3304, 3305, 3306, 3307,
+ 3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315,
+ 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323,
+ 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331,
+ 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339,
+ 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347,
+ 3348, 3349, 3350, 3351, 32767, 32767, 3352, 3353,
+ 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361,
+ 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369,
+ 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377,
+ 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385,
+ 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393,
+ 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401,
+ 3402, 3403, 3404, 3405, 3406, 3407, 4795, 3409,
+ 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417,
+ 3418, 3419, 3420, 3421, 3422, 3423, 3424, 3425,
+ 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433,
+ 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441,
+ 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449,
+ 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 3458,
+ 3459, 3460, 3461, 3462, -8139, 3464, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 3465, 3466, 2001, 3468, 3469, 32767,
+ 32767, 32767, 32767, 32767, 3470, 3471, 3472, 3473,
+ 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481,
+ 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489,
+ 3490, 3491, 3492, 3493, 3494, 3495, 32767, 3496,
+ 3497, 3498, 3499, 3500, 32767, 3501, 32767, 3502,
+ 3503, 32767, 3504, 3505, 32767, 3506, 0, 0,
+ 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516,
+ 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3524,
+ 3525, 3526, 3527, 3528, 3529, 3530, 3531, 3532,
+ 3533, 3534, 3535, 3536, 3537, 3538, 3539, 3540,
+ 3541, 3542, 3543, 3544, 3545, 1902, 1902, 1902,
+ 1902, 9314, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 7644, 7645,
+ 7646, 7647, 7648, 7649, 7650, 7651, 7652, 7653,
+ 7654, 7655, 7656, 7657, 7658, 7659, 42, 42,
+ 1902, 0, 0, 0, 7067, 7068, 7069, 7070,
+ 7071, 7116, 7117, 7118, 7119, -292, 7121, 7122,
+ 7123, 7124, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3614, 3615, 3616, 10892, 3618, 3619,
+ 10854, 3621, 3622, 3623, 3624, 3625, 8994, -2751,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3640, 3641, 2783, -3331,
+ -3330, 3645, 3646, 0, 6053, 6054, 0, 6056,
+ 6057, 6058, 6059, 3767, 6061, 6858, 0, 0,
+ 3659, 0, 0, 1531, 1531, 1531, 1531, 1531,
+ 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531,
+ 1531, 1531, 9149, 9150, 7291, 7292, 7293, 7294,
+ 7295, 1032, 7297, 7298, 7299, 7300, 7301, 7302,
+ 7303, 7304, 0, 7307, 10710, 10711, 1955, 1955,
+ 10759, 10760, 10716, 4548, 4549, 4550, 1952, 1952,
+ 10764, 10765, 10721, 10722, 3711, 6314, 10679, 10726,
+ 10727, 10728, 10729, 10730, 3719, 3720, 1996, 1996,
+ 1996, 1996, 4428, 4473, 4473, 3728, 1994, 1994,
+ -11266,3732, 3733, 3734, 0, 0, 0, 0,
+ 0, 0, 0, 3742, 10755, 10756, 1953, 1953,
+ 1998, 1998, 1998, 11730, 11731, 12711, 9397, 3867,
+ 11735, 3869, 6139, 9874, 9875, 9876, 9877, 9878,
+ 9879, 9880, 6139, -873, -873, 7931, -1839, -1839,
+ 7891, 7892, -1839, -1839, -2818, 497, 6028, -1839,
+ -1839, -66, -66, -66, -66, 2522, 2523, -6280,
+ -6280, -6235, -66, -66, -66, 2533, 2534, -6277,
+ -66, -6231, -6231, 781, -1821, -6185, -6231, 3867,
+ -1821, -6231, -1821, 782, 3076, 3873, 2511, -8720,
+ 84, 85, 41, 42, 43, -9688, -9688, -10667,
+ -7352, -1821, -9688, -1821, -4090, -7824, -7824, -7824,
+ -7824, -7824, -7824, -7824, -4082, 2931, 2932, -5871,
+ 3900, 3901, -5828, -5828, 3904, 3905, 4885, 1571,
+ -3959, 3909, 3910, 2138, 2139, 2140, 2141, -446,
+ -446, 8358, 8359, 8315, 2147, 2148, 2149, -449,
+ -449, 8363, 2153, 8319, 8320, 1309, 3912, 8277,
+ 8324, -1773, 3916, 8327, 3918, 1316, -977, -1773,
+ -410, 10822, 2019, 2019, 2064, 2064, 2064, 11796,
+ 11797, 12777, 9463, 3933, 11801, 3935, 6205, 9940,
+ 9941, 9942, 9943, 9944, 9945, 9946, 6205, -807,
+ -807, 7997, -1773, -1773, 7957, 7958, -1773, -1773,
+ -2752, 563, 6094, -1773, -1773, 0, 0, 0,
+ 0, 2588, 2589, -6214, -6214, -6169, 0, 0,
+ 0, 2599, 2600, -6211, 0, -6165, -6165, 847,
+ -1755, -6119, -6165, 3933, -1755, -6165, -1755, 848,
+ 3142, 3939, 2577, -8654, 150, 151, 107, 108,
+ 109, -9622, -9622, -10601,-7286, -1755, -9622, -1755,
+ -4024, -7758, -7758, -7758, -7758, -7758, -7758, -7758,
+ -4016, 2997, 2998, -5805, 3966, 3967, -5762, -5762,
+ 3970, 3971, 4951, 1637, -3893, 3975, 3976, 2204,
+ 2205, 2206, 2207, -380, -380, 8424, 8425, 8381,
+ 2213, 2214, 2215, -383, -383, 8429, 2219, 8385,
+ 8386, 1375, 3978, 8343, 8390, -1707, 3982, 8393,
+ 3984, 1382, -911, -1707, -344, 10888, 2085, 2085,
+ 2130, 2130, 2130, 11862, 11863, 12843, 9529, 3999,
+ 11867, 4001, 6271, 10006, 10007, 4005, -1951, 4007,
+ 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015,
+ 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023,
+ 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031,
+ 11943, 4033, 4034, 4035, 4036, 8637, 4038, 4039,
+ -116, 32767, 32767, 4041, 4042, 4043, 4044, 4045,
+ 2250, 4047, 4048, 4049, 5802, 4051, 4052, 4559,
+ 6119, 4055, 4056, 4057, 4058, 4059, 4060, 4061,
+ -47, 4063, -46, 4065, 4066, 4067, 4068, 4069,
+ -41, -13301,4072, -9985, -6670, 4075, 4076, 4077,
+ 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085,
+ 4086, 4087, 4088, 4089, 4090, 8741, 4092, 4093,
+ -67, 32767, 32767, 32767, 32767, 32767, 2257, 32767,
+ 2258, 2259, 2260, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2261, 32767, 2262, 32767,
+ 2263, 32767, 2264, 32767, 2265, 32767, 2266, 32767,
+ 2267, 8737, 8738, -26, -26, 8786, 4100, 4101,
+ 8746, 8747, 4104, 4105, 8752, 8753, 32767, 2274,
+ 32767, 2275, 32767, 32767, 32767, 32767, 32767, 32767,
+ 2276, 2277, 32767, 2278, 2279, 32767, 2280, 0,
+ 32767, 2282, 9695, 4109, -3486, -3486, 4112, 4113,
+ 4114, 4115, 4116, 4117, 32767, 32767, 32767, 32767,
+ 32767, 32767, 4118, 4119, 4120, 4121, 4122, 4123,
+ 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131,
+ 4132, 4133, 4134, 4849, 4136, 4137, 4851, 4851,
+ 4140, 4852, 4142, 4143, 4144, 4145, 4146, 4147,
+ 4148, 4149, 4150, 4151, 2293, 4153, 907, 32767,
+ 2295, 4155, 909, 4157, 910, 4159, 911, 4161,
+ 912, 4163, 913, 4165, 914, 32767, 915, 4168,
+ 916, 4170, 917, 4172, 4173, 918, 4175, 4176,
+ 4177, 4178, 4179, 4180, 4181, 4182, 4183, 4184,
+ 4185, 2309, 4186, 4187, 4188, 4189, 2312, 2313,
+ 32767, 2314, 4190, 4191, -2632, 2317, 4193, 32767,
+ 4194, 4195, 4196, 4197, 4198, 4199, 4200, 4201,
+ 4202, 4203, 4204, 4205, 4206, 0, 0, 4209,
+ 4210, 4211, 4212, 4213, 2318, 4215, 4216, 2319,
+ 2320, 2321, 2322, 4221, 4222, 4223, 2323, 2324,
+ 4226, 4227, 4228, 4229, 4230, 4231, 5551, 4233,
+ 4234, 4235, 4236, 4237, 4238, 4239, 4240, 4241,
+ 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249,
+ 4250, 4251, 4252, 4253, 4254, 4255, 4256, 4257,
+ 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265,
+ 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273,
+ 4274, 4275, -3342, -3342, -3342, 4276, 4277, 2418,
+ 2419, -2784, -2784, -2740, -2740, -2740, -2740, -2740,
+ -2784, -2784, -2784, -2784, 4628, -2784, -2784, -2784,
+ -2784, -2784, -2784, -2784, -2784, -2784, -2784, -2784,
+ -2784, 2958, 2959, 2960, 2961, 2962, 2963, 2964,
+ 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972,
+ 2973, -4644, -4644, -2784, -2784, 2420, 2421, 2378,
+ 2379, 2380, 2381, 2382, 2427, 2428, 2429, 2430,
+ -4981, 2432, 2433, 2434, 2435, 2436, 2437, 2438,
+ 2439, 2440, 2441, 2442, 2443, -3298, -3298, -3298,
+ -3298, -3298, -3298, -3298, -3298, -3298, -3298, -3298,
+ -3298, -3298, -3298, -3298, -3298, 4320, 4321, 2462,
+ 4365, 4366, 4367, -2699, -2699, -2699, -2699, -2699,
+ -2743, -2743, -2743, -2743, 4669, -2743, -2743, -2743,
+ -2743, 4382, 4383, 4384, 4385, 4386, 4387, 4388,
+ 4389, 4390, 4391, 4392, 4393, 4394, 4395, 4396,
+ 4397, 4398, 4399, 4400, 4401, 4402, 4403, 4404,
+ 4405, 4406, 4407, 4408, 4409, 4410, 4411, 4412,
+ 4413, 4414, 4415, 4416, 4417, 4418, 4419, 4420,
+ 4421, 4422, 4423, 4424, 4425, 4426, 4427, 4428,
+ 4429, 816, 816, 816, -6459, 816, 816, -6418,
+ 816, 816, 816, 816, 816, -4552, 7194, 4444,
+ 4445, 4446, 4447, 4448, 4449, 4450, 4451, 4452,
+ 4453, 4454, 4455, 816, 816, 1675, 7790, 7790,
+ 816, 816, 4463, -1589, -1589, 4466, -1589, -1589,
+ -1589, -1589, 704, -1589, -2385, 4474, 4475, 817,
+ 4477, 4478, 2948, 2949, 2950, 2951, 2952, 2953,
+ 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961,
+ 2962, -4655, -4655, -2795, -2795, -2795, -2795, -2795,
+ 3469, -2795, -2795, -2795, -2795, -2795, -2795, -2795,
+ -2795, 4510, -2796, -6198, -6198, 2559, 2560, -6243,
+ -6243, -6198, -6198, -6198, -6198, 2567, 2568, -6243,
+ -6243, -6198, -6198, -6198, -6154, -6154, -6200, -6200,
+ -6200, -6200, -6200, -6200, -6200, 2535, 2536, 2537,
+ 2538, 107, 63, 2541, 2542, 2543, 2544, 15805,
+ 12491, 12492, 32767, 4540, 4541, 4542, 4543, 4544,
+ 4545, 4546, 2548, -6208, -6208, 2596, 2597, 2553,
+ 2554, 2555, 2556, -6208, -6208, 2604, 2605, 2561,
+ 2562, 2563, 2520, 2521, 2568, 2569, 2570, 2571,
+ 2572, 2573, 2574, -6160, -6160, -6160, -6160, -3728,
+ -3683, -6160, -6160, -6160, -6160, -19420,-16105,-16105,
+ -12790,-12790,-9475, -9475, -6160, -6160, -6160, -6160,
+ -6160, 32767, 2597, -6206, -6206, -6161, -6161, -6161,
+ -6161, 2604, 2605, -6206, -6206, -6161, -6161, -6161,
+ -6161, -6161, -6161, -6161, -6161, -6161, -6161, -6161,
+ -6161, 2574, 2575, 2576, 2577, 146, 102, 2580,
+ 2581, 2582, 2583, 15844, 12530, 12531, 9217, 9218,
+ 5904, 5905, 2591, 2592, 2593, 2594, 2595, -6161,
+ -6161, 2643, 2644, 2600, 2601, 2602, 2603, -6161,
+ -6161, 2651, 2652, 2608, 2609, 2610, 2611, 2612,
+ 2613, 2614, 2615, 2616, 2617, 2618, 2619, -6115,
+ -6115, -6115, -6115, -3683, -3638, -6115, -6115, -6115,
+ -6115, -19375,-16060,-16060,-12745,-12745,-9430, -9430,
+ -6115, -6115, -6115, -6115, -6115, 2642, 2643, -6160,
+ -6160, -6115, -6115, -6115, -6115, 2650, 2651, -6160,
+ -6160, -6115, -3460, -3459, -3458, -3457, -1026, -3455,
+ -3454, -6160, -3452, -6160, -12117,-6160, -12117,-6160,
+ -2848, -2848, -2848, 6893, 891, -5065, -2846, -6160,
+ -2845, -1264, 0, 9264, 5950, 5951, 2637, 2638,
+ 2639, 2640, 2641, -6115, -6115, 2689, 2690, 2646,
+ 2647, 2648, 2649, -6115, -6115, 2697, 2698, 2654,
+ 0, 0, 0, 0, -2430, 0, 0, 2707,
+ 0, 2709, 8667, 2711, 8669, 2713, -598, -597,
+ -596, -10336,-4333, 1624, -594, 2721, -593, -2173,
+ 2724, -592, -591, -590, -589, -588, -587, -586,
+ 12, -584, -583, 2735, -582, 2737, -581, 2739,
+ 2740, -580, -6115, -6115, -6115, 2745, 2746, -6115,
+ -6115, 0, 0, 0, 2752, 2753, 2754, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6247, 6248, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
+ };
+
+ const unsigned char *k = (const unsigned char *) key;
+ size_t keylen = 4;
+ uint32 a = 0;
+ uint32 b = 1;
+
+ while (keylen--)
+ {
+ unsigned char c = *k++;
+
+ a = a * 257 + c;
+ b = b * 8191 + c;
+ }
+ return h[a % 13209] + h[b % 13209];
+}
+
+/* Hash lookup information for decomposition */
+static const pg_unicode_decompinfo UnicodeDecompInfo =
+{
+ UnicodeDecompMain,
+ Decomp_hash_func,
+ 6604
+};
diff --git a/src/tools/pgindent/exclude_file_patterns b/src/tools/pgindent/exclude_file_patterns
index 86bdd9d6dc..f08180b0d0 100644
--- a/src/tools/pgindent/exclude_file_patterns
+++ b/src/tools/pgindent/exclude_file_patterns
@@ -18,9 +18,10 @@ src/backend/utils/fmgrprotos\.h$
# they match pgindent style, they'd look worse not better, so exclude them.
kwlist_d\.h$
#
-# This is generated by the scripts from src/common/unicode/. It uses
+# These are generated by the scripts from src/common/unicode/. They use
# hash functions generated by PerfectHash.pm whose format looks worse with
# pgindent.
+src/include/common/unicode_norm_hashfunc\.h$
src/include/common/unicode_normprops_table\.h$
#
# Exclude ecpg test files to avoid breaking the ecpg regression tests
--
2.22.0
v4-0002-Speed-up-unicode-recomposition.patchapplication/octet-stream; name=v4-0002-Speed-up-unicode-recomposition.patchDownload
From f1c7408f66dc946609384933f883cf6f542e0f17 Mon Sep 17 00:00:00 2001
From: John Naylor <john.naylor@2ndquadrant.com>
Date: Wed, 21 Oct 2020 18:27:09 -0400
Subject: [PATCH v4 2/2] Speed up unicode recomposition.
As with decomposition, use a perfect hash function for speed.
The performance increase is much higher in this casebecause the
former implementation used linear search. This makes normalizing
to NFC and NFKC more than 40x faster in the backend, while adding
only 6kB to the binary. While this is small, keep out of the frontend
since its use is not performance critical.
---
.../unicode/generate-unicode_norm_table.pl | 113 ++
src/common/unicode_norm.c | 37 +-
src/include/common/unicode_norm_hashfunc.h | 1220 +++++++++++++++++
3 files changed, 1368 insertions(+), 2 deletions(-)
diff --git a/src/common/unicode/generate-unicode_norm_table.pl b/src/common/unicode/generate-unicode_norm_table.pl
index 5fca88796f..6bbe81f17d 100644
--- a/src/common/unicode/generate-unicode_norm_table.pl
+++ b/src/common/unicode/generate-unicode_norm_table.pl
@@ -144,6 +144,7 @@ print $OF <<HEADER;
typedef int (*cp_hash_func) (const void *key);
/* Information for lookups with perfect hash functions */
+
typedef struct
{
const pg_unicode_decomposition *decomps;
@@ -151,11 +152,20 @@ typedef struct
int num_decomps;
} pg_unicode_decompinfo;
+typedef struct
+{
+ const uint16 *inverse_lookup;
+ cp_hash_func hash;
+ int num_recomps;
+} pg_unicode_recompinfo;
+
HEADER
my $decomp_index = 0;
my $decomp_string = "";
my @dec_cp_packed;
+my $main_index = 0;
+my @rec_info;
my $last_code = $characters[-1]->{code};
foreach my $char (@characters)
@@ -217,6 +227,18 @@ foreach my $char (@characters)
}
}
}
+
+ # Save info for recomposeable codepoints.
+ # XXX This must match the DECOMPOSITION_NO_COMPOSE C macro above!
+ # See the inverse lookup in recompose_code() found in
+ # common/unicode_norm.c.
+ if (!($flags =~ /DECOMP_COMPAT/ || $flags =~ /DECOMP_NO_COMPOSE/))
+ {
+ push @rec_info, {code => $code,
+ main_index => $main_index,
+ first => $first_decomp,
+ second => $decomp_elts[0]};
+ }
}
if ($decomp_size == 0)
@@ -255,6 +277,8 @@ foreach my $char (@characters)
print $OT "\t/* $comment */" if ($comment ne "");
print $OT "\n";
+
+ $main_index++;
}
print $OT "\n};\n\n";
@@ -284,7 +308,96 @@ static const pg_unicode_decompinfo UnicodeDecompInfo =
$dec_funcname,
$num_characters
};
+
+HEADER
+
+# Find the lowest codepoint that decomposes to each recomposeable
+# code pair and create a mapping to it.
+my $recomp_string = "";
+my @rec_cp_packed;
+my %seenit;
+my $firstentry = 1;
+foreach my $rec (sort recomp_sort @rec_info)
+{
+ # The hash key is formed by concatenating the bytes of the two
+ # codepoints. See also recompose_code() in common/unicode_norm.c.
+ my $hashkey = (hex($rec->{first}) << 32) | hex($rec->{second});
+
+ # We are only interested in the lowest code point that decomposes
+ # to the given code pair.
+ next if $seenit{$hashkey};
+
+ # Save the hash key bytes in network order
+ push @rec_cp_packed, pack('Q>', $hashkey);
+
+ # Append inverse lookup element
+ $recomp_string .= ",\n" if ! $firstentry;
+ $recomp_string .= sprintf "\t/* U+%s+%s -> U+%s */ %s",
+ $rec->{first},
+ $rec->{second},
+ $rec->{code},
+ $rec->{main_index};
+
+ $seenit{$hashkey} = 1;
+ $firstentry = 0;
+}
+
+# Emit the inverse lookup array containing indexes into UnicodeDecompMain
+my $num_recomps = scalar @rec_cp_packed;
+print $OF <<HEADER;
+/* Inverse lookup array -- contains indexes into UnicodeDecompMain[] */
+static const uint16 RecompInverseLookup[$num_recomps] =
+{
+$recomp_string
+};
+
+HEADER
+
+# Emit the definition of the recomp hash function.
+my $rec_funcname = 'Recomp_hash_func';
+my $rec_func = PerfectHash::generate_hash_function(\@rec_cp_packed, $rec_funcname,
+ fixed_key_length => 8);
+print $OF "/* Perfect hash function for recomposition */\n";
+print $OF "static $rec_func\n";
+
+# Emit the structure that wraps the hash lookup information into
+# one variable.
+print $OF <<HEADER;
+/* Hash lookup information for recomposition */
+static const pg_unicode_recompinfo UnicodeRecompInfo =
+{
+ RecompInverseLookup,
+ $rec_funcname,
+ $num_recomps
+};
HEADER
close $OT;
close $OF;
+
+sub recomp_sort
+{
+ my $a1 = hex($a->{first});
+ my $b1 = hex($b->{first});
+
+ my $a2 = hex($a->{second});
+ my $b2 = hex($b->{second});
+
+ # First sort by first code point
+ return -1 if $a1 < $b1;
+ return 1 if $a1 > $b1;
+
+ # Then the second code point
+ return -1 if $a2 < $b2;
+ return 1 if $a2 > $b2;
+
+ # Finally by the code point that decomposes into first and second.
+
+ my $acode = hex($a->{code});
+ my $bcode = hex($b->{code});
+
+ return -1 if $acode < $bcode;
+ return -1 if $acode > $bcode;
+
+ die "found duplicate entries of recomposeable code pairs";
+}
diff --git a/src/common/unicode_norm.c b/src/common/unicode_norm.c
index 7d0d23ab21..da7e6f8fa1 100644
--- a/src/common/unicode_norm.c
+++ b/src/common/unicode_norm.c
@@ -228,7 +228,7 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
}
else
{
- int i;
+ const pg_unicode_decomposition *entry;
/*
* Do an inverse lookup of the decomposition tables to see if anything
@@ -236,9 +236,41 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
* sub-table of size two, because the start character has already been
* recomposed partially.
*/
+#ifndef FRONTEND
+
+ int h, inv_lookup_index;
+ uint64 hashkey;
+ pg_unicode_recompinfo recompinfo = UnicodeRecompInfo;
+
+ /*
+ * Compute the hash function. The hash key is formed by concatenating
+ * bytes of the two codepoints in network order. See also
+ * common/unicode/generate-unicode_norm_table.pl.
+ */
+ hashkey = pg_hton64(((uint64) start << 32) | (uint64) code);
+ h = recompinfo.hash(&hashkey);
+
+ /* An out-of-range result implies no match */
+ if (h < 0 || h >= recompinfo.num_recomps)
+ return false;
+
+ inv_lookup_index = recompinfo.inverse_lookup[h];
+ entry = &UnicodeDecompMain[inv_lookup_index];
+
+ if (start == UnicodeDecomp_codepoints[entry->dec_index] &&
+ code == UnicodeDecomp_codepoints[entry->dec_index + 1])
+ {
+ *result = entry->codepoint;
+ return true;
+ }
+
+#else
+
+ int i;
+
for (i = 0; i < lengthof(UnicodeDecompMain); i++)
{
- const pg_unicode_decomposition *entry = &UnicodeDecompMain[i];
+ entry = &UnicodeDecompMain[i];
if (DECOMPOSITION_SIZE(entry) != 2)
continue;
@@ -253,6 +285,7 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
return true;
}
}
+#endif /* !FRONTEND */
}
return false;
diff --git a/src/include/common/unicode_norm_hashfunc.h b/src/include/common/unicode_norm_hashfunc.h
index d2f4ad884b..39b7138f2b 100644
--- a/src/include/common/unicode_norm_hashfunc.h
+++ b/src/include/common/unicode_norm_hashfunc.h
@@ -23,6 +23,7 @@
typedef int (*cp_hash_func) (const void *key);
/* Information for lookups with perfect hash functions */
+
typedef struct
{
const pg_unicode_decomposition *decomps;
@@ -30,6 +31,13 @@ typedef struct
int num_decomps;
} pg_unicode_decompinfo;
+typedef struct
+{
+ const uint16 *inverse_lookup;
+ cp_hash_func hash;
+ int num_recomps;
+} pg_unicode_recompinfo;
+
/* Perfect hash function for decomposition */
static int
Decomp_hash_func(const void *key)
@@ -1711,3 +1719,1215 @@ static const pg_unicode_decompinfo UnicodeDecompInfo =
Decomp_hash_func,
6604
};
+
+/* Inverse lookup array -- contains indexes into UnicodeDecompMain[] */
+static const uint16 RecompInverseLookup[941] =
+{
+ /* U+003C+0338 -> U+226E */ 1823,
+ /* U+003D+0338 -> U+2260 */ 1820,
+ /* U+003E+0338 -> U+226F */ 1824,
+ /* U+0041+0300 -> U+00C0 */ 14,
+ /* U+0041+0301 -> U+00C1 */ 15,
+ /* U+0041+0302 -> U+00C2 */ 16,
+ /* U+0041+0303 -> U+00C3 */ 17,
+ /* U+0041+0304 -> U+0100 */ 67,
+ /* U+0041+0306 -> U+0102 */ 69,
+ /* U+0041+0307 -> U+0226 */ 270,
+ /* U+0041+0308 -> U+00C4 */ 18,
+ /* U+0041+0309 -> U+1EA2 */ 1278,
+ /* U+0041+030A -> U+00C5 */ 19,
+ /* U+0041+030C -> U+01CD */ 194,
+ /* U+0041+030F -> U+0200 */ 240,
+ /* U+0041+0311 -> U+0202 */ 242,
+ /* U+0041+0323 -> U+1EA0 */ 1276,
+ /* U+0041+0325 -> U+1E00 */ 1120,
+ /* U+0041+0328 -> U+0104 */ 71,
+ /* U+0042+0307 -> U+1E02 */ 1122,
+ /* U+0042+0323 -> U+1E04 */ 1124,
+ /* U+0042+0331 -> U+1E06 */ 1126,
+ /* U+0043+0301 -> U+0106 */ 73,
+ /* U+0043+0302 -> U+0108 */ 75,
+ /* U+0043+0307 -> U+010A */ 77,
+ /* U+0043+030C -> U+010C */ 79,
+ /* U+0043+0327 -> U+00C7 */ 20,
+ /* U+0044+0307 -> U+1E0A */ 1130,
+ /* U+0044+030C -> U+010E */ 81,
+ /* U+0044+0323 -> U+1E0C */ 1132,
+ /* U+0044+0327 -> U+1E10 */ 1136,
+ /* U+0044+032D -> U+1E12 */ 1138,
+ /* U+0044+0331 -> U+1E0E */ 1134,
+ /* U+0045+0300 -> U+00C8 */ 21,
+ /* U+0045+0301 -> U+00C9 */ 22,
+ /* U+0045+0302 -> U+00CA */ 23,
+ /* U+0045+0303 -> U+1EBC */ 1304,
+ /* U+0045+0304 -> U+0112 */ 83,
+ /* U+0045+0306 -> U+0114 */ 85,
+ /* U+0045+0307 -> U+0116 */ 87,
+ /* U+0045+0308 -> U+00CB */ 24,
+ /* U+0045+0309 -> U+1EBA */ 1302,
+ /* U+0045+030C -> U+011A */ 91,
+ /* U+0045+030F -> U+0204 */ 244,
+ /* U+0045+0311 -> U+0206 */ 246,
+ /* U+0045+0323 -> U+1EB8 */ 1300,
+ /* U+0045+0327 -> U+0228 */ 272,
+ /* U+0045+0328 -> U+0118 */ 89,
+ /* U+0045+032D -> U+1E18 */ 1144,
+ /* U+0045+0330 -> U+1E1A */ 1146,
+ /* U+0046+0307 -> U+1E1E */ 1150,
+ /* U+0047+0301 -> U+01F4 */ 230,
+ /* U+0047+0302 -> U+011C */ 93,
+ /* U+0047+0304 -> U+1E20 */ 1152,
+ /* U+0047+0306 -> U+011E */ 95,
+ /* U+0047+0307 -> U+0120 */ 97,
+ /* U+0047+030C -> U+01E6 */ 216,
+ /* U+0047+0327 -> U+0122 */ 99,
+ /* U+0048+0302 -> U+0124 */ 101,
+ /* U+0048+0307 -> U+1E22 */ 1154,
+ /* U+0048+0308 -> U+1E26 */ 1158,
+ /* U+0048+030C -> U+021E */ 268,
+ /* U+0048+0323 -> U+1E24 */ 1156,
+ /* U+0048+0327 -> U+1E28 */ 1160,
+ /* U+0048+032E -> U+1E2A */ 1162,
+ /* U+0049+0300 -> U+00CC */ 25,
+ /* U+0049+0301 -> U+00CD */ 26,
+ /* U+0049+0302 -> U+00CE */ 27,
+ /* U+0049+0303 -> U+0128 */ 103,
+ /* U+0049+0304 -> U+012A */ 105,
+ /* U+0049+0306 -> U+012C */ 107,
+ /* U+0049+0307 -> U+0130 */ 111,
+ /* U+0049+0308 -> U+00CF */ 28,
+ /* U+0049+0309 -> U+1EC8 */ 1316,
+ /* U+0049+030C -> U+01CF */ 196,
+ /* U+0049+030F -> U+0208 */ 248,
+ /* U+0049+0311 -> U+020A */ 250,
+ /* U+0049+0323 -> U+1ECA */ 1318,
+ /* U+0049+0328 -> U+012E */ 109,
+ /* U+0049+0330 -> U+1E2C */ 1164,
+ /* U+004A+0302 -> U+0134 */ 114,
+ /* U+004B+0301 -> U+1E30 */ 1168,
+ /* U+004B+030C -> U+01E8 */ 218,
+ /* U+004B+0323 -> U+1E32 */ 1170,
+ /* U+004B+0327 -> U+0136 */ 116,
+ /* U+004B+0331 -> U+1E34 */ 1172,
+ /* U+004C+0301 -> U+0139 */ 118,
+ /* U+004C+030C -> U+013D */ 122,
+ /* U+004C+0323 -> U+1E36 */ 1174,
+ /* U+004C+0327 -> U+013B */ 120,
+ /* U+004C+032D -> U+1E3C */ 1180,
+ /* U+004C+0331 -> U+1E3A */ 1178,
+ /* U+004D+0301 -> U+1E3E */ 1182,
+ /* U+004D+0307 -> U+1E40 */ 1184,
+ /* U+004D+0323 -> U+1E42 */ 1186,
+ /* U+004E+0300 -> U+01F8 */ 232,
+ /* U+004E+0301 -> U+0143 */ 126,
+ /* U+004E+0303 -> U+00D1 */ 29,
+ /* U+004E+0307 -> U+1E44 */ 1188,
+ /* U+004E+030C -> U+0147 */ 130,
+ /* U+004E+0323 -> U+1E46 */ 1190,
+ /* U+004E+0327 -> U+0145 */ 128,
+ /* U+004E+032D -> U+1E4A */ 1194,
+ /* U+004E+0331 -> U+1E48 */ 1192,
+ /* U+004F+0300 -> U+00D2 */ 30,
+ /* U+004F+0301 -> U+00D3 */ 31,
+ /* U+004F+0302 -> U+00D4 */ 32,
+ /* U+004F+0303 -> U+00D5 */ 33,
+ /* U+004F+0304 -> U+014C */ 133,
+ /* U+004F+0306 -> U+014E */ 135,
+ /* U+004F+0307 -> U+022E */ 278,
+ /* U+004F+0308 -> U+00D6 */ 34,
+ /* U+004F+0309 -> U+1ECE */ 1322,
+ /* U+004F+030B -> U+0150 */ 137,
+ /* U+004F+030C -> U+01D1 */ 198,
+ /* U+004F+030F -> U+020C */ 252,
+ /* U+004F+0311 -> U+020E */ 254,
+ /* U+004F+031B -> U+01A0 */ 181,
+ /* U+004F+0323 -> U+1ECC */ 1320,
+ /* U+004F+0328 -> U+01EA */ 220,
+ /* U+0050+0301 -> U+1E54 */ 1204,
+ /* U+0050+0307 -> U+1E56 */ 1206,
+ /* U+0052+0301 -> U+0154 */ 139,
+ /* U+0052+0307 -> U+1E58 */ 1208,
+ /* U+0052+030C -> U+0158 */ 143,
+ /* U+0052+030F -> U+0210 */ 256,
+ /* U+0052+0311 -> U+0212 */ 258,
+ /* U+0052+0323 -> U+1E5A */ 1210,
+ /* U+0052+0327 -> U+0156 */ 141,
+ /* U+0052+0331 -> U+1E5E */ 1214,
+ /* U+0053+0301 -> U+015A */ 145,
+ /* U+0053+0302 -> U+015C */ 147,
+ /* U+0053+0307 -> U+1E60 */ 1216,
+ /* U+0053+030C -> U+0160 */ 151,
+ /* U+0053+0323 -> U+1E62 */ 1218,
+ /* U+0053+0326 -> U+0218 */ 264,
+ /* U+0053+0327 -> U+015E */ 149,
+ /* U+0054+0307 -> U+1E6A */ 1226,
+ /* U+0054+030C -> U+0164 */ 155,
+ /* U+0054+0323 -> U+1E6C */ 1228,
+ /* U+0054+0326 -> U+021A */ 266,
+ /* U+0054+0327 -> U+0162 */ 153,
+ /* U+0054+032D -> U+1E70 */ 1232,
+ /* U+0054+0331 -> U+1E6E */ 1230,
+ /* U+0055+0300 -> U+00D9 */ 35,
+ /* U+0055+0301 -> U+00DA */ 36,
+ /* U+0055+0302 -> U+00DB */ 37,
+ /* U+0055+0303 -> U+0168 */ 157,
+ /* U+0055+0304 -> U+016A */ 159,
+ /* U+0055+0306 -> U+016C */ 161,
+ /* U+0055+0308 -> U+00DC */ 38,
+ /* U+0055+0309 -> U+1EE6 */ 1346,
+ /* U+0055+030A -> U+016E */ 163,
+ /* U+0055+030B -> U+0170 */ 165,
+ /* U+0055+030C -> U+01D3 */ 200,
+ /* U+0055+030F -> U+0214 */ 260,
+ /* U+0055+0311 -> U+0216 */ 262,
+ /* U+0055+031B -> U+01AF */ 183,
+ /* U+0055+0323 -> U+1EE4 */ 1344,
+ /* U+0055+0324 -> U+1E72 */ 1234,
+ /* U+0055+0328 -> U+0172 */ 167,
+ /* U+0055+032D -> U+1E76 */ 1238,
+ /* U+0055+0330 -> U+1E74 */ 1236,
+ /* U+0056+0303 -> U+1E7C */ 1244,
+ /* U+0056+0323 -> U+1E7E */ 1246,
+ /* U+0057+0300 -> U+1E80 */ 1248,
+ /* U+0057+0301 -> U+1E82 */ 1250,
+ /* U+0057+0302 -> U+0174 */ 169,
+ /* U+0057+0307 -> U+1E86 */ 1254,
+ /* U+0057+0308 -> U+1E84 */ 1252,
+ /* U+0057+0323 -> U+1E88 */ 1256,
+ /* U+0058+0307 -> U+1E8A */ 1258,
+ /* U+0058+0308 -> U+1E8C */ 1260,
+ /* U+0059+0300 -> U+1EF2 */ 1358,
+ /* U+0059+0301 -> U+00DD */ 39,
+ /* U+0059+0302 -> U+0176 */ 171,
+ /* U+0059+0303 -> U+1EF8 */ 1364,
+ /* U+0059+0304 -> U+0232 */ 282,
+ /* U+0059+0307 -> U+1E8E */ 1262,
+ /* U+0059+0308 -> U+0178 */ 173,
+ /* U+0059+0309 -> U+1EF6 */ 1362,
+ /* U+0059+0323 -> U+1EF4 */ 1360,
+ /* U+005A+0301 -> U+0179 */ 174,
+ /* U+005A+0302 -> U+1E90 */ 1264,
+ /* U+005A+0307 -> U+017B */ 176,
+ /* U+005A+030C -> U+017D */ 178,
+ /* U+005A+0323 -> U+1E92 */ 1266,
+ /* U+005A+0331 -> U+1E94 */ 1268,
+ /* U+0061+0300 -> U+00E0 */ 40,
+ /* U+0061+0301 -> U+00E1 */ 41,
+ /* U+0061+0302 -> U+00E2 */ 42,
+ /* U+0061+0303 -> U+00E3 */ 43,
+ /* U+0061+0304 -> U+0101 */ 68,
+ /* U+0061+0306 -> U+0103 */ 70,
+ /* U+0061+0307 -> U+0227 */ 271,
+ /* U+0061+0308 -> U+00E4 */ 44,
+ /* U+0061+0309 -> U+1EA3 */ 1279,
+ /* U+0061+030A -> U+00E5 */ 45,
+ /* U+0061+030C -> U+01CE */ 195,
+ /* U+0061+030F -> U+0201 */ 241,
+ /* U+0061+0311 -> U+0203 */ 243,
+ /* U+0061+0323 -> U+1EA1 */ 1277,
+ /* U+0061+0325 -> U+1E01 */ 1121,
+ /* U+0061+0328 -> U+0105 */ 72,
+ /* U+0062+0307 -> U+1E03 */ 1123,
+ /* U+0062+0323 -> U+1E05 */ 1125,
+ /* U+0062+0331 -> U+1E07 */ 1127,
+ /* U+0063+0301 -> U+0107 */ 74,
+ /* U+0063+0302 -> U+0109 */ 76,
+ /* U+0063+0307 -> U+010B */ 78,
+ /* U+0063+030C -> U+010D */ 80,
+ /* U+0063+0327 -> U+00E7 */ 46,
+ /* U+0064+0307 -> U+1E0B */ 1131,
+ /* U+0064+030C -> U+010F */ 82,
+ /* U+0064+0323 -> U+1E0D */ 1133,
+ /* U+0064+0327 -> U+1E11 */ 1137,
+ /* U+0064+032D -> U+1E13 */ 1139,
+ /* U+0064+0331 -> U+1E0F */ 1135,
+ /* U+0065+0300 -> U+00E8 */ 47,
+ /* U+0065+0301 -> U+00E9 */ 48,
+ /* U+0065+0302 -> U+00EA */ 49,
+ /* U+0065+0303 -> U+1EBD */ 1305,
+ /* U+0065+0304 -> U+0113 */ 84,
+ /* U+0065+0306 -> U+0115 */ 86,
+ /* U+0065+0307 -> U+0117 */ 88,
+ /* U+0065+0308 -> U+00EB */ 50,
+ /* U+0065+0309 -> U+1EBB */ 1303,
+ /* U+0065+030C -> U+011B */ 92,
+ /* U+0065+030F -> U+0205 */ 245,
+ /* U+0065+0311 -> U+0207 */ 247,
+ /* U+0065+0323 -> U+1EB9 */ 1301,
+ /* U+0065+0327 -> U+0229 */ 273,
+ /* U+0065+0328 -> U+0119 */ 90,
+ /* U+0065+032D -> U+1E19 */ 1145,
+ /* U+0065+0330 -> U+1E1B */ 1147,
+ /* U+0066+0307 -> U+1E1F */ 1151,
+ /* U+0067+0301 -> U+01F5 */ 231,
+ /* U+0067+0302 -> U+011D */ 94,
+ /* U+0067+0304 -> U+1E21 */ 1153,
+ /* U+0067+0306 -> U+011F */ 96,
+ /* U+0067+0307 -> U+0121 */ 98,
+ /* U+0067+030C -> U+01E7 */ 217,
+ /* U+0067+0327 -> U+0123 */ 100,
+ /* U+0068+0302 -> U+0125 */ 102,
+ /* U+0068+0307 -> U+1E23 */ 1155,
+ /* U+0068+0308 -> U+1E27 */ 1159,
+ /* U+0068+030C -> U+021F */ 269,
+ /* U+0068+0323 -> U+1E25 */ 1157,
+ /* U+0068+0327 -> U+1E29 */ 1161,
+ /* U+0068+032E -> U+1E2B */ 1163,
+ /* U+0068+0331 -> U+1E96 */ 1270,
+ /* U+0069+0300 -> U+00EC */ 51,
+ /* U+0069+0301 -> U+00ED */ 52,
+ /* U+0069+0302 -> U+00EE */ 53,
+ /* U+0069+0303 -> U+0129 */ 104,
+ /* U+0069+0304 -> U+012B */ 106,
+ /* U+0069+0306 -> U+012D */ 108,
+ /* U+0069+0308 -> U+00EF */ 54,
+ /* U+0069+0309 -> U+1EC9 */ 1317,
+ /* U+0069+030C -> U+01D0 */ 197,
+ /* U+0069+030F -> U+0209 */ 249,
+ /* U+0069+0311 -> U+020B */ 251,
+ /* U+0069+0323 -> U+1ECB */ 1319,
+ /* U+0069+0328 -> U+012F */ 110,
+ /* U+0069+0330 -> U+1E2D */ 1165,
+ /* U+006A+0302 -> U+0135 */ 115,
+ /* U+006A+030C -> U+01F0 */ 226,
+ /* U+006B+0301 -> U+1E31 */ 1169,
+ /* U+006B+030C -> U+01E9 */ 219,
+ /* U+006B+0323 -> U+1E33 */ 1171,
+ /* U+006B+0327 -> U+0137 */ 117,
+ /* U+006B+0331 -> U+1E35 */ 1173,
+ /* U+006C+0301 -> U+013A */ 119,
+ /* U+006C+030C -> U+013E */ 123,
+ /* U+006C+0323 -> U+1E37 */ 1175,
+ /* U+006C+0327 -> U+013C */ 121,
+ /* U+006C+032D -> U+1E3D */ 1181,
+ /* U+006C+0331 -> U+1E3B */ 1179,
+ /* U+006D+0301 -> U+1E3F */ 1183,
+ /* U+006D+0307 -> U+1E41 */ 1185,
+ /* U+006D+0323 -> U+1E43 */ 1187,
+ /* U+006E+0300 -> U+01F9 */ 233,
+ /* U+006E+0301 -> U+0144 */ 127,
+ /* U+006E+0303 -> U+00F1 */ 55,
+ /* U+006E+0307 -> U+1E45 */ 1189,
+ /* U+006E+030C -> U+0148 */ 131,
+ /* U+006E+0323 -> U+1E47 */ 1191,
+ /* U+006E+0327 -> U+0146 */ 129,
+ /* U+006E+032D -> U+1E4B */ 1195,
+ /* U+006E+0331 -> U+1E49 */ 1193,
+ /* U+006F+0300 -> U+00F2 */ 56,
+ /* U+006F+0301 -> U+00F3 */ 57,
+ /* U+006F+0302 -> U+00F4 */ 58,
+ /* U+006F+0303 -> U+00F5 */ 59,
+ /* U+006F+0304 -> U+014D */ 134,
+ /* U+006F+0306 -> U+014F */ 136,
+ /* U+006F+0307 -> U+022F */ 279,
+ /* U+006F+0308 -> U+00F6 */ 60,
+ /* U+006F+0309 -> U+1ECF */ 1323,
+ /* U+006F+030B -> U+0151 */ 138,
+ /* U+006F+030C -> U+01D2 */ 199,
+ /* U+006F+030F -> U+020D */ 253,
+ /* U+006F+0311 -> U+020F */ 255,
+ /* U+006F+031B -> U+01A1 */ 182,
+ /* U+006F+0323 -> U+1ECD */ 1321,
+ /* U+006F+0328 -> U+01EB */ 221,
+ /* U+0070+0301 -> U+1E55 */ 1205,
+ /* U+0070+0307 -> U+1E57 */ 1207,
+ /* U+0072+0301 -> U+0155 */ 140,
+ /* U+0072+0307 -> U+1E59 */ 1209,
+ /* U+0072+030C -> U+0159 */ 144,
+ /* U+0072+030F -> U+0211 */ 257,
+ /* U+0072+0311 -> U+0213 */ 259,
+ /* U+0072+0323 -> U+1E5B */ 1211,
+ /* U+0072+0327 -> U+0157 */ 142,
+ /* U+0072+0331 -> U+1E5F */ 1215,
+ /* U+0073+0301 -> U+015B */ 146,
+ /* U+0073+0302 -> U+015D */ 148,
+ /* U+0073+0307 -> U+1E61 */ 1217,
+ /* U+0073+030C -> U+0161 */ 152,
+ /* U+0073+0323 -> U+1E63 */ 1219,
+ /* U+0073+0326 -> U+0219 */ 265,
+ /* U+0073+0327 -> U+015F */ 150,
+ /* U+0074+0307 -> U+1E6B */ 1227,
+ /* U+0074+0308 -> U+1E97 */ 1271,
+ /* U+0074+030C -> U+0165 */ 156,
+ /* U+0074+0323 -> U+1E6D */ 1229,
+ /* U+0074+0326 -> U+021B */ 267,
+ /* U+0074+0327 -> U+0163 */ 154,
+ /* U+0074+032D -> U+1E71 */ 1233,
+ /* U+0074+0331 -> U+1E6F */ 1231,
+ /* U+0075+0300 -> U+00F9 */ 61,
+ /* U+0075+0301 -> U+00FA */ 62,
+ /* U+0075+0302 -> U+00FB */ 63,
+ /* U+0075+0303 -> U+0169 */ 158,
+ /* U+0075+0304 -> U+016B */ 160,
+ /* U+0075+0306 -> U+016D */ 162,
+ /* U+0075+0308 -> U+00FC */ 64,
+ /* U+0075+0309 -> U+1EE7 */ 1347,
+ /* U+0075+030A -> U+016F */ 164,
+ /* U+0075+030B -> U+0171 */ 166,
+ /* U+0075+030C -> U+01D4 */ 201,
+ /* U+0075+030F -> U+0215 */ 261,
+ /* U+0075+0311 -> U+0217 */ 263,
+ /* U+0075+031B -> U+01B0 */ 184,
+ /* U+0075+0323 -> U+1EE5 */ 1345,
+ /* U+0075+0324 -> U+1E73 */ 1235,
+ /* U+0075+0328 -> U+0173 */ 168,
+ /* U+0075+032D -> U+1E77 */ 1239,
+ /* U+0075+0330 -> U+1E75 */ 1237,
+ /* U+0076+0303 -> U+1E7D */ 1245,
+ /* U+0076+0323 -> U+1E7F */ 1247,
+ /* U+0077+0300 -> U+1E81 */ 1249,
+ /* U+0077+0301 -> U+1E83 */ 1251,
+ /* U+0077+0302 -> U+0175 */ 170,
+ /* U+0077+0307 -> U+1E87 */ 1255,
+ /* U+0077+0308 -> U+1E85 */ 1253,
+ /* U+0077+030A -> U+1E98 */ 1272,
+ /* U+0077+0323 -> U+1E89 */ 1257,
+ /* U+0078+0307 -> U+1E8B */ 1259,
+ /* U+0078+0308 -> U+1E8D */ 1261,
+ /* U+0079+0300 -> U+1EF3 */ 1359,
+ /* U+0079+0301 -> U+00FD */ 65,
+ /* U+0079+0302 -> U+0177 */ 172,
+ /* U+0079+0303 -> U+1EF9 */ 1365,
+ /* U+0079+0304 -> U+0233 */ 283,
+ /* U+0079+0307 -> U+1E8F */ 1263,
+ /* U+0079+0308 -> U+00FF */ 66,
+ /* U+0079+0309 -> U+1EF7 */ 1363,
+ /* U+0079+030A -> U+1E99 */ 1273,
+ /* U+0079+0323 -> U+1EF5 */ 1361,
+ /* U+007A+0301 -> U+017A */ 175,
+ /* U+007A+0302 -> U+1E91 */ 1265,
+ /* U+007A+0307 -> U+017C */ 177,
+ /* U+007A+030C -> U+017E */ 179,
+ /* U+007A+0323 -> U+1E93 */ 1267,
+ /* U+007A+0331 -> U+1E95 */ 1269,
+ /* U+00A8+0300 -> U+1FED */ 1584,
+ /* U+00A8+0301 -> U+0385 */ 419,
+ /* U+00A8+0342 -> U+1FC1 */ 1544,
+ /* U+00C2+0300 -> U+1EA6 */ 1282,
+ /* U+00C2+0301 -> U+1EA4 */ 1280,
+ /* U+00C2+0303 -> U+1EAA */ 1286,
+ /* U+00C2+0309 -> U+1EA8 */ 1284,
+ /* U+00C4+0304 -> U+01DE */ 210,
+ /* U+00C5+0301 -> U+01FA */ 234,
+ /* U+00C6+0301 -> U+01FC */ 236,
+ /* U+00C6+0304 -> U+01E2 */ 214,
+ /* U+00C7+0301 -> U+1E08 */ 1128,
+ /* U+00CA+0300 -> U+1EC0 */ 1308,
+ /* U+00CA+0301 -> U+1EBE */ 1306,
+ /* U+00CA+0303 -> U+1EC4 */ 1312,
+ /* U+00CA+0309 -> U+1EC2 */ 1310,
+ /* U+00CF+0301 -> U+1E2E */ 1166,
+ /* U+00D4+0300 -> U+1ED2 */ 1326,
+ /* U+00D4+0301 -> U+1ED0 */ 1324,
+ /* U+00D4+0303 -> U+1ED6 */ 1330,
+ /* U+00D4+0309 -> U+1ED4 */ 1328,
+ /* U+00D5+0301 -> U+1E4C */ 1196,
+ /* U+00D5+0304 -> U+022C */ 276,
+ /* U+00D5+0308 -> U+1E4E */ 1198,
+ /* U+00D6+0304 -> U+022A */ 274,
+ /* U+00D8+0301 -> U+01FE */ 238,
+ /* U+00DC+0300 -> U+01DB */ 208,
+ /* U+00DC+0301 -> U+01D7 */ 204,
+ /* U+00DC+0304 -> U+01D5 */ 202,
+ /* U+00DC+030C -> U+01D9 */ 206,
+ /* U+00E2+0300 -> U+1EA7 */ 1283,
+ /* U+00E2+0301 -> U+1EA5 */ 1281,
+ /* U+00E2+0303 -> U+1EAB */ 1287,
+ /* U+00E2+0309 -> U+1EA9 */ 1285,
+ /* U+00E4+0304 -> U+01DF */ 211,
+ /* U+00E5+0301 -> U+01FB */ 235,
+ /* U+00E6+0301 -> U+01FD */ 237,
+ /* U+00E6+0304 -> U+01E3 */ 215,
+ /* U+00E7+0301 -> U+1E09 */ 1129,
+ /* U+00EA+0300 -> U+1EC1 */ 1309,
+ /* U+00EA+0301 -> U+1EBF */ 1307,
+ /* U+00EA+0303 -> U+1EC5 */ 1313,
+ /* U+00EA+0309 -> U+1EC3 */ 1311,
+ /* U+00EF+0301 -> U+1E2F */ 1167,
+ /* U+00F4+0300 -> U+1ED3 */ 1327,
+ /* U+00F4+0301 -> U+1ED1 */ 1325,
+ /* U+00F4+0303 -> U+1ED7 */ 1331,
+ /* U+00F4+0309 -> U+1ED5 */ 1329,
+ /* U+00F5+0301 -> U+1E4D */ 1197,
+ /* U+00F5+0304 -> U+022D */ 277,
+ /* U+00F5+0308 -> U+1E4F */ 1199,
+ /* U+00F6+0304 -> U+022B */ 275,
+ /* U+00F8+0301 -> U+01FF */ 239,
+ /* U+00FC+0300 -> U+01DC */ 209,
+ /* U+00FC+0301 -> U+01D8 */ 205,
+ /* U+00FC+0304 -> U+01D6 */ 203,
+ /* U+00FC+030C -> U+01DA */ 207,
+ /* U+0102+0300 -> U+1EB0 */ 1292,
+ /* U+0102+0301 -> U+1EAE */ 1290,
+ /* U+0102+0303 -> U+1EB4 */ 1296,
+ /* U+0102+0309 -> U+1EB2 */ 1294,
+ /* U+0103+0300 -> U+1EB1 */ 1293,
+ /* U+0103+0301 -> U+1EAF */ 1291,
+ /* U+0103+0303 -> U+1EB5 */ 1297,
+ /* U+0103+0309 -> U+1EB3 */ 1295,
+ /* U+0112+0300 -> U+1E14 */ 1140,
+ /* U+0112+0301 -> U+1E16 */ 1142,
+ /* U+0113+0300 -> U+1E15 */ 1141,
+ /* U+0113+0301 -> U+1E17 */ 1143,
+ /* U+014C+0300 -> U+1E50 */ 1200,
+ /* U+014C+0301 -> U+1E52 */ 1202,
+ /* U+014D+0300 -> U+1E51 */ 1201,
+ /* U+014D+0301 -> U+1E53 */ 1203,
+ /* U+015A+0307 -> U+1E64 */ 1220,
+ /* U+015B+0307 -> U+1E65 */ 1221,
+ /* U+0160+0307 -> U+1E66 */ 1222,
+ /* U+0161+0307 -> U+1E67 */ 1223,
+ /* U+0168+0301 -> U+1E78 */ 1240,
+ /* U+0169+0301 -> U+1E79 */ 1241,
+ /* U+016A+0308 -> U+1E7A */ 1242,
+ /* U+016B+0308 -> U+1E7B */ 1243,
+ /* U+017F+0307 -> U+1E9B */ 1275,
+ /* U+01A0+0300 -> U+1EDC */ 1336,
+ /* U+01A0+0301 -> U+1EDA */ 1334,
+ /* U+01A0+0303 -> U+1EE0 */ 1340,
+ /* U+01A0+0309 -> U+1EDE */ 1338,
+ /* U+01A0+0323 -> U+1EE2 */ 1342,
+ /* U+01A1+0300 -> U+1EDD */ 1337,
+ /* U+01A1+0301 -> U+1EDB */ 1335,
+ /* U+01A1+0303 -> U+1EE1 */ 1341,
+ /* U+01A1+0309 -> U+1EDF */ 1339,
+ /* U+01A1+0323 -> U+1EE3 */ 1343,
+ /* U+01AF+0300 -> U+1EEA */ 1350,
+ /* U+01AF+0301 -> U+1EE8 */ 1348,
+ /* U+01AF+0303 -> U+1EEE */ 1354,
+ /* U+01AF+0309 -> U+1EEC */ 1352,
+ /* U+01AF+0323 -> U+1EF0 */ 1356,
+ /* U+01B0+0300 -> U+1EEB */ 1351,
+ /* U+01B0+0301 -> U+1EE9 */ 1349,
+ /* U+01B0+0303 -> U+1EEF */ 1355,
+ /* U+01B0+0309 -> U+1EED */ 1353,
+ /* U+01B0+0323 -> U+1EF1 */ 1357,
+ /* U+01B7+030C -> U+01EE */ 224,
+ /* U+01EA+0304 -> U+01EC */ 222,
+ /* U+01EB+0304 -> U+01ED */ 223,
+ /* U+0226+0304 -> U+01E0 */ 212,
+ /* U+0227+0304 -> U+01E1 */ 213,
+ /* U+0228+0306 -> U+1E1C */ 1148,
+ /* U+0229+0306 -> U+1E1D */ 1149,
+ /* U+022E+0304 -> U+0230 */ 280,
+ /* U+022F+0304 -> U+0231 */ 281,
+ /* U+0292+030C -> U+01EF */ 225,
+ /* U+0391+0300 -> U+1FBA */ 1537,
+ /* U+0391+0301 -> U+0386 */ 420,
+ /* U+0391+0304 -> U+1FB9 */ 1536,
+ /* U+0391+0306 -> U+1FB8 */ 1535,
+ /* U+0391+0313 -> U+1F08 */ 1374,
+ /* U+0391+0314 -> U+1F09 */ 1375,
+ /* U+0391+0345 -> U+1FBC */ 1539,
+ /* U+0395+0300 -> U+1FC8 */ 1550,
+ /* U+0395+0301 -> U+0388 */ 422,
+ /* U+0395+0313 -> U+1F18 */ 1388,
+ /* U+0395+0314 -> U+1F19 */ 1389,
+ /* U+0397+0300 -> U+1FCA */ 1552,
+ /* U+0397+0301 -> U+0389 */ 423,
+ /* U+0397+0313 -> U+1F28 */ 1402,
+ /* U+0397+0314 -> U+1F29 */ 1403,
+ /* U+0397+0345 -> U+1FCC */ 1554,
+ /* U+0399+0300 -> U+1FDA */ 1566,
+ /* U+0399+0301 -> U+038A */ 424,
+ /* U+0399+0304 -> U+1FD9 */ 1565,
+ /* U+0399+0306 -> U+1FD8 */ 1564,
+ /* U+0399+0308 -> U+03AA */ 429,
+ /* U+0399+0313 -> U+1F38 */ 1418,
+ /* U+0399+0314 -> U+1F39 */ 1419,
+ /* U+039F+0300 -> U+1FF8 */ 1592,
+ /* U+039F+0301 -> U+038C */ 425,
+ /* U+039F+0313 -> U+1F48 */ 1432,
+ /* U+039F+0314 -> U+1F49 */ 1433,
+ /* U+03A1+0314 -> U+1FEC */ 1583,
+ /* U+03A5+0300 -> U+1FEA */ 1581,
+ /* U+03A5+0301 -> U+038E */ 426,
+ /* U+03A5+0304 -> U+1FE9 */ 1580,
+ /* U+03A5+0306 -> U+1FE8 */ 1579,
+ /* U+03A5+0308 -> U+03AB */ 430,
+ /* U+03A5+0314 -> U+1F59 */ 1446,
+ /* U+03A9+0300 -> U+1FFA */ 1594,
+ /* U+03A9+0301 -> U+038F */ 427,
+ /* U+03A9+0313 -> U+1F68 */ 1458,
+ /* U+03A9+0314 -> U+1F69 */ 1459,
+ /* U+03A9+0345 -> U+1FFC */ 1596,
+ /* U+03AC+0345 -> U+1FB4 */ 1532,
+ /* U+03AE+0345 -> U+1FC4 */ 1547,
+ /* U+03B1+0300 -> U+1F70 */ 1466,
+ /* U+03B1+0301 -> U+03AC */ 431,
+ /* U+03B1+0304 -> U+1FB1 */ 1529,
+ /* U+03B1+0306 -> U+1FB0 */ 1528,
+ /* U+03B1+0313 -> U+1F00 */ 1366,
+ /* U+03B1+0314 -> U+1F01 */ 1367,
+ /* U+03B1+0342 -> U+1FB6 */ 1533,
+ /* U+03B1+0345 -> U+1FB3 */ 1531,
+ /* U+03B5+0300 -> U+1F72 */ 1468,
+ /* U+03B5+0301 -> U+03AD */ 432,
+ /* U+03B5+0313 -> U+1F10 */ 1382,
+ /* U+03B5+0314 -> U+1F11 */ 1383,
+ /* U+03B7+0300 -> U+1F74 */ 1470,
+ /* U+03B7+0301 -> U+03AE */ 433,
+ /* U+03B7+0313 -> U+1F20 */ 1394,
+ /* U+03B7+0314 -> U+1F21 */ 1395,
+ /* U+03B7+0342 -> U+1FC6 */ 1548,
+ /* U+03B7+0345 -> U+1FC3 */ 1546,
+ /* U+03B9+0300 -> U+1F76 */ 1472,
+ /* U+03B9+0301 -> U+03AF */ 434,
+ /* U+03B9+0304 -> U+1FD1 */ 1559,
+ /* U+03B9+0306 -> U+1FD0 */ 1558,
+ /* U+03B9+0308 -> U+03CA */ 436,
+ /* U+03B9+0313 -> U+1F30 */ 1410,
+ /* U+03B9+0314 -> U+1F31 */ 1411,
+ /* U+03B9+0342 -> U+1FD6 */ 1562,
+ /* U+03BF+0300 -> U+1F78 */ 1474,
+ /* U+03BF+0301 -> U+03CC */ 438,
+ /* U+03BF+0313 -> U+1F40 */ 1426,
+ /* U+03BF+0314 -> U+1F41 */ 1427,
+ /* U+03C1+0313 -> U+1FE4 */ 1575,
+ /* U+03C1+0314 -> U+1FE5 */ 1576,
+ /* U+03C5+0300 -> U+1F7A */ 1476,
+ /* U+03C5+0301 -> U+03CD */ 439,
+ /* U+03C5+0304 -> U+1FE1 */ 1572,
+ /* U+03C5+0306 -> U+1FE0 */ 1571,
+ /* U+03C5+0308 -> U+03CB */ 437,
+ /* U+03C5+0313 -> U+1F50 */ 1438,
+ /* U+03C5+0314 -> U+1F51 */ 1439,
+ /* U+03C5+0342 -> U+1FE6 */ 1577,
+ /* U+03C9+0300 -> U+1F7C */ 1478,
+ /* U+03C9+0301 -> U+03CE */ 440,
+ /* U+03C9+0313 -> U+1F60 */ 1450,
+ /* U+03C9+0314 -> U+1F61 */ 1451,
+ /* U+03C9+0342 -> U+1FF6 */ 1590,
+ /* U+03C9+0345 -> U+1FF3 */ 1588,
+ /* U+03CA+0300 -> U+1FD2 */ 1560,
+ /* U+03CA+0301 -> U+0390 */ 428,
+ /* U+03CA+0342 -> U+1FD7 */ 1563,
+ /* U+03CB+0300 -> U+1FE2 */ 1573,
+ /* U+03CB+0301 -> U+03B0 */ 435,
+ /* U+03CB+0342 -> U+1FE7 */ 1578,
+ /* U+03CE+0345 -> U+1FF4 */ 1589,
+ /* U+03D2+0301 -> U+03D3 */ 444,
+ /* U+03D2+0308 -> U+03D4 */ 445,
+ /* U+0406+0308 -> U+0407 */ 457,
+ /* U+0410+0306 -> U+04D0 */ 479,
+ /* U+0410+0308 -> U+04D2 */ 481,
+ /* U+0413+0301 -> U+0403 */ 456,
+ /* U+0415+0300 -> U+0400 */ 454,
+ /* U+0415+0306 -> U+04D6 */ 483,
+ /* U+0415+0308 -> U+0401 */ 455,
+ /* U+0416+0306 -> U+04C1 */ 477,
+ /* U+0416+0308 -> U+04DC */ 487,
+ /* U+0417+0308 -> U+04DE */ 489,
+ /* U+0418+0300 -> U+040D */ 459,
+ /* U+0418+0304 -> U+04E2 */ 491,
+ /* U+0418+0306 -> U+0419 */ 461,
+ /* U+0418+0308 -> U+04E4 */ 493,
+ /* U+041A+0301 -> U+040C */ 458,
+ /* U+041E+0308 -> U+04E6 */ 495,
+ /* U+0423+0304 -> U+04EE */ 501,
+ /* U+0423+0306 -> U+040E */ 460,
+ /* U+0423+0308 -> U+04F0 */ 503,
+ /* U+0423+030B -> U+04F2 */ 505,
+ /* U+0427+0308 -> U+04F4 */ 507,
+ /* U+042B+0308 -> U+04F8 */ 509,
+ /* U+042D+0308 -> U+04EC */ 499,
+ /* U+0430+0306 -> U+04D1 */ 480,
+ /* U+0430+0308 -> U+04D3 */ 482,
+ /* U+0433+0301 -> U+0453 */ 465,
+ /* U+0435+0300 -> U+0450 */ 463,
+ /* U+0435+0306 -> U+04D7 */ 484,
+ /* U+0435+0308 -> U+0451 */ 464,
+ /* U+0436+0306 -> U+04C2 */ 478,
+ /* U+0436+0308 -> U+04DD */ 488,
+ /* U+0437+0308 -> U+04DF */ 490,
+ /* U+0438+0300 -> U+045D */ 468,
+ /* U+0438+0304 -> U+04E3 */ 492,
+ /* U+0438+0306 -> U+0439 */ 462,
+ /* U+0438+0308 -> U+04E5 */ 494,
+ /* U+043A+0301 -> U+045C */ 467,
+ /* U+043E+0308 -> U+04E7 */ 496,
+ /* U+0443+0304 -> U+04EF */ 502,
+ /* U+0443+0306 -> U+045E */ 469,
+ /* U+0443+0308 -> U+04F1 */ 504,
+ /* U+0443+030B -> U+04F3 */ 506,
+ /* U+0447+0308 -> U+04F5 */ 508,
+ /* U+044B+0308 -> U+04F9 */ 510,
+ /* U+044D+0308 -> U+04ED */ 500,
+ /* U+0456+0308 -> U+0457 */ 466,
+ /* U+0474+030F -> U+0476 */ 470,
+ /* U+0475+030F -> U+0477 */ 471,
+ /* U+04D8+0308 -> U+04DA */ 485,
+ /* U+04D9+0308 -> U+04DB */ 486,
+ /* U+04E8+0308 -> U+04EA */ 497,
+ /* U+04E9+0308 -> U+04EB */ 498,
+ /* U+0627+0653 -> U+0622 */ 574,
+ /* U+0627+0654 -> U+0623 */ 575,
+ /* U+0627+0655 -> U+0625 */ 577,
+ /* U+0648+0654 -> U+0624 */ 576,
+ /* U+064A+0654 -> U+0626 */ 578,
+ /* U+06C1+0654 -> U+06C2 */ 606,
+ /* U+06D2+0654 -> U+06D3 */ 607,
+ /* U+06D5+0654 -> U+06C0 */ 605,
+ /* U+0928+093C -> U+0929 */ 733,
+ /* U+0930+093C -> U+0931 */ 734,
+ /* U+0933+093C -> U+0934 */ 735,
+ /* U+09C7+09BE -> U+09CB */ 751,
+ /* U+09C7+09D7 -> U+09CC */ 752,
+ /* U+0B47+0B3E -> U+0B4B */ 770,
+ /* U+0B47+0B56 -> U+0B48 */ 769,
+ /* U+0B47+0B57 -> U+0B4C */ 771,
+ /* U+0B92+0BD7 -> U+0B94 */ 775,
+ /* U+0BC6+0BBE -> U+0BCA */ 776,
+ /* U+0BC6+0BD7 -> U+0BCC */ 778,
+ /* U+0BC7+0BBE -> U+0BCB */ 777,
+ /* U+0C46+0C56 -> U+0C48 */ 780,
+ /* U+0CBF+0CD5 -> U+0CC0 */ 785,
+ /* U+0CC6+0CC2 -> U+0CCA */ 788,
+ /* U+0CC6+0CD5 -> U+0CC7 */ 786,
+ /* U+0CC6+0CD6 -> U+0CC8 */ 787,
+ /* U+0CCA+0CD5 -> U+0CCB */ 789,
+ /* U+0D46+0D3E -> U+0D4A */ 793,
+ /* U+0D46+0D57 -> U+0D4C */ 795,
+ /* U+0D47+0D3E -> U+0D4B */ 794,
+ /* U+0DD9+0DCA -> U+0DDA */ 798,
+ /* U+0DD9+0DCF -> U+0DDC */ 799,
+ /* U+0DD9+0DDF -> U+0DDE */ 801,
+ /* U+0DDC+0DCA -> U+0DDD */ 800,
+ /* U+1025+102E -> U+1026 */ 859,
+ /* U+1B05+1B35 -> U+1B06 */ 904,
+ /* U+1B07+1B35 -> U+1B08 */ 905,
+ /* U+1B09+1B35 -> U+1B0A */ 906,
+ /* U+1B0B+1B35 -> U+1B0C */ 907,
+ /* U+1B0D+1B35 -> U+1B0E */ 908,
+ /* U+1B11+1B35 -> U+1B12 */ 909,
+ /* U+1B3A+1B35 -> U+1B3B */ 911,
+ /* U+1B3C+1B35 -> U+1B3D */ 912,
+ /* U+1B3E+1B35 -> U+1B40 */ 913,
+ /* U+1B3F+1B35 -> U+1B41 */ 914,
+ /* U+1B42+1B35 -> U+1B43 */ 915,
+ /* U+1E36+0304 -> U+1E38 */ 1176,
+ /* U+1E37+0304 -> U+1E39 */ 1177,
+ /* U+1E5A+0304 -> U+1E5C */ 1212,
+ /* U+1E5B+0304 -> U+1E5D */ 1213,
+ /* U+1E62+0307 -> U+1E68 */ 1224,
+ /* U+1E63+0307 -> U+1E69 */ 1225,
+ /* U+1EA0+0302 -> U+1EAC */ 1288,
+ /* U+1EA0+0306 -> U+1EB6 */ 1298,
+ /* U+1EA1+0302 -> U+1EAD */ 1289,
+ /* U+1EA1+0306 -> U+1EB7 */ 1299,
+ /* U+1EB8+0302 -> U+1EC6 */ 1314,
+ /* U+1EB9+0302 -> U+1EC7 */ 1315,
+ /* U+1ECC+0302 -> U+1ED8 */ 1332,
+ /* U+1ECD+0302 -> U+1ED9 */ 1333,
+ /* U+1F00+0300 -> U+1F02 */ 1368,
+ /* U+1F00+0301 -> U+1F04 */ 1370,
+ /* U+1F00+0342 -> U+1F06 */ 1372,
+ /* U+1F00+0345 -> U+1F80 */ 1480,
+ /* U+1F01+0300 -> U+1F03 */ 1369,
+ /* U+1F01+0301 -> U+1F05 */ 1371,
+ /* U+1F01+0342 -> U+1F07 */ 1373,
+ /* U+1F01+0345 -> U+1F81 */ 1481,
+ /* U+1F02+0345 -> U+1F82 */ 1482,
+ /* U+1F03+0345 -> U+1F83 */ 1483,
+ /* U+1F04+0345 -> U+1F84 */ 1484,
+ /* U+1F05+0345 -> U+1F85 */ 1485,
+ /* U+1F06+0345 -> U+1F86 */ 1486,
+ /* U+1F07+0345 -> U+1F87 */ 1487,
+ /* U+1F08+0300 -> U+1F0A */ 1376,
+ /* U+1F08+0301 -> U+1F0C */ 1378,
+ /* U+1F08+0342 -> U+1F0E */ 1380,
+ /* U+1F08+0345 -> U+1F88 */ 1488,
+ /* U+1F09+0300 -> U+1F0B */ 1377,
+ /* U+1F09+0301 -> U+1F0D */ 1379,
+ /* U+1F09+0342 -> U+1F0F */ 1381,
+ /* U+1F09+0345 -> U+1F89 */ 1489,
+ /* U+1F0A+0345 -> U+1F8A */ 1490,
+ /* U+1F0B+0345 -> U+1F8B */ 1491,
+ /* U+1F0C+0345 -> U+1F8C */ 1492,
+ /* U+1F0D+0345 -> U+1F8D */ 1493,
+ /* U+1F0E+0345 -> U+1F8E */ 1494,
+ /* U+1F0F+0345 -> U+1F8F */ 1495,
+ /* U+1F10+0300 -> U+1F12 */ 1384,
+ /* U+1F10+0301 -> U+1F14 */ 1386,
+ /* U+1F11+0300 -> U+1F13 */ 1385,
+ /* U+1F11+0301 -> U+1F15 */ 1387,
+ /* U+1F18+0300 -> U+1F1A */ 1390,
+ /* U+1F18+0301 -> U+1F1C */ 1392,
+ /* U+1F19+0300 -> U+1F1B */ 1391,
+ /* U+1F19+0301 -> U+1F1D */ 1393,
+ /* U+1F20+0300 -> U+1F22 */ 1396,
+ /* U+1F20+0301 -> U+1F24 */ 1398,
+ /* U+1F20+0342 -> U+1F26 */ 1400,
+ /* U+1F20+0345 -> U+1F90 */ 1496,
+ /* U+1F21+0300 -> U+1F23 */ 1397,
+ /* U+1F21+0301 -> U+1F25 */ 1399,
+ /* U+1F21+0342 -> U+1F27 */ 1401,
+ /* U+1F21+0345 -> U+1F91 */ 1497,
+ /* U+1F22+0345 -> U+1F92 */ 1498,
+ /* U+1F23+0345 -> U+1F93 */ 1499,
+ /* U+1F24+0345 -> U+1F94 */ 1500,
+ /* U+1F25+0345 -> U+1F95 */ 1501,
+ /* U+1F26+0345 -> U+1F96 */ 1502,
+ /* U+1F27+0345 -> U+1F97 */ 1503,
+ /* U+1F28+0300 -> U+1F2A */ 1404,
+ /* U+1F28+0301 -> U+1F2C */ 1406,
+ /* U+1F28+0342 -> U+1F2E */ 1408,
+ /* U+1F28+0345 -> U+1F98 */ 1504,
+ /* U+1F29+0300 -> U+1F2B */ 1405,
+ /* U+1F29+0301 -> U+1F2D */ 1407,
+ /* U+1F29+0342 -> U+1F2F */ 1409,
+ /* U+1F29+0345 -> U+1F99 */ 1505,
+ /* U+1F2A+0345 -> U+1F9A */ 1506,
+ /* U+1F2B+0345 -> U+1F9B */ 1507,
+ /* U+1F2C+0345 -> U+1F9C */ 1508,
+ /* U+1F2D+0345 -> U+1F9D */ 1509,
+ /* U+1F2E+0345 -> U+1F9E */ 1510,
+ /* U+1F2F+0345 -> U+1F9F */ 1511,
+ /* U+1F30+0300 -> U+1F32 */ 1412,
+ /* U+1F30+0301 -> U+1F34 */ 1414,
+ /* U+1F30+0342 -> U+1F36 */ 1416,
+ /* U+1F31+0300 -> U+1F33 */ 1413,
+ /* U+1F31+0301 -> U+1F35 */ 1415,
+ /* U+1F31+0342 -> U+1F37 */ 1417,
+ /* U+1F38+0300 -> U+1F3A */ 1420,
+ /* U+1F38+0301 -> U+1F3C */ 1422,
+ /* U+1F38+0342 -> U+1F3E */ 1424,
+ /* U+1F39+0300 -> U+1F3B */ 1421,
+ /* U+1F39+0301 -> U+1F3D */ 1423,
+ /* U+1F39+0342 -> U+1F3F */ 1425,
+ /* U+1F40+0300 -> U+1F42 */ 1428,
+ /* U+1F40+0301 -> U+1F44 */ 1430,
+ /* U+1F41+0300 -> U+1F43 */ 1429,
+ /* U+1F41+0301 -> U+1F45 */ 1431,
+ /* U+1F48+0300 -> U+1F4A */ 1434,
+ /* U+1F48+0301 -> U+1F4C */ 1436,
+ /* U+1F49+0300 -> U+1F4B */ 1435,
+ /* U+1F49+0301 -> U+1F4D */ 1437,
+ /* U+1F50+0300 -> U+1F52 */ 1440,
+ /* U+1F50+0301 -> U+1F54 */ 1442,
+ /* U+1F50+0342 -> U+1F56 */ 1444,
+ /* U+1F51+0300 -> U+1F53 */ 1441,
+ /* U+1F51+0301 -> U+1F55 */ 1443,
+ /* U+1F51+0342 -> U+1F57 */ 1445,
+ /* U+1F59+0300 -> U+1F5B */ 1447,
+ /* U+1F59+0301 -> U+1F5D */ 1448,
+ /* U+1F59+0342 -> U+1F5F */ 1449,
+ /* U+1F60+0300 -> U+1F62 */ 1452,
+ /* U+1F60+0301 -> U+1F64 */ 1454,
+ /* U+1F60+0342 -> U+1F66 */ 1456,
+ /* U+1F60+0345 -> U+1FA0 */ 1512,
+ /* U+1F61+0300 -> U+1F63 */ 1453,
+ /* U+1F61+0301 -> U+1F65 */ 1455,
+ /* U+1F61+0342 -> U+1F67 */ 1457,
+ /* U+1F61+0345 -> U+1FA1 */ 1513,
+ /* U+1F62+0345 -> U+1FA2 */ 1514,
+ /* U+1F63+0345 -> U+1FA3 */ 1515,
+ /* U+1F64+0345 -> U+1FA4 */ 1516,
+ /* U+1F65+0345 -> U+1FA5 */ 1517,
+ /* U+1F66+0345 -> U+1FA6 */ 1518,
+ /* U+1F67+0345 -> U+1FA7 */ 1519,
+ /* U+1F68+0300 -> U+1F6A */ 1460,
+ /* U+1F68+0301 -> U+1F6C */ 1462,
+ /* U+1F68+0342 -> U+1F6E */ 1464,
+ /* U+1F68+0345 -> U+1FA8 */ 1520,
+ /* U+1F69+0300 -> U+1F6B */ 1461,
+ /* U+1F69+0301 -> U+1F6D */ 1463,
+ /* U+1F69+0342 -> U+1F6F */ 1465,
+ /* U+1F69+0345 -> U+1FA9 */ 1521,
+ /* U+1F6A+0345 -> U+1FAA */ 1522,
+ /* U+1F6B+0345 -> U+1FAB */ 1523,
+ /* U+1F6C+0345 -> U+1FAC */ 1524,
+ /* U+1F6D+0345 -> U+1FAD */ 1525,
+ /* U+1F6E+0345 -> U+1FAE */ 1526,
+ /* U+1F6F+0345 -> U+1FAF */ 1527,
+ /* U+1F70+0345 -> U+1FB2 */ 1530,
+ /* U+1F74+0345 -> U+1FC2 */ 1545,
+ /* U+1F7C+0345 -> U+1FF2 */ 1587,
+ /* U+1FB6+0345 -> U+1FB7 */ 1534,
+ /* U+1FBF+0300 -> U+1FCD */ 1555,
+ /* U+1FBF+0301 -> U+1FCE */ 1556,
+ /* U+1FBF+0342 -> U+1FCF */ 1557,
+ /* U+1FC6+0345 -> U+1FC7 */ 1549,
+ /* U+1FF6+0345 -> U+1FF7 */ 1591,
+ /* U+1FFE+0300 -> U+1FDD */ 1568,
+ /* U+1FFE+0301 -> U+1FDE */ 1569,
+ /* U+1FFE+0342 -> U+1FDF */ 1570,
+ /* U+2190+0338 -> U+219A */ 1801,
+ /* U+2192+0338 -> U+219B */ 1802,
+ /* U+2194+0338 -> U+21AE */ 1803,
+ /* U+21D0+0338 -> U+21CD */ 1804,
+ /* U+21D2+0338 -> U+21CF */ 1806,
+ /* U+21D4+0338 -> U+21CE */ 1805,
+ /* U+2203+0338 -> U+2204 */ 1807,
+ /* U+2208+0338 -> U+2209 */ 1808,
+ /* U+220B+0338 -> U+220C */ 1809,
+ /* U+2223+0338 -> U+2224 */ 1810,
+ /* U+2225+0338 -> U+2226 */ 1811,
+ /* U+223C+0338 -> U+2241 */ 1816,
+ /* U+2243+0338 -> U+2244 */ 1817,
+ /* U+2245+0338 -> U+2247 */ 1818,
+ /* U+2248+0338 -> U+2249 */ 1819,
+ /* U+224D+0338 -> U+226D */ 1822,
+ /* U+2261+0338 -> U+2262 */ 1821,
+ /* U+2264+0338 -> U+2270 */ 1825,
+ /* U+2265+0338 -> U+2271 */ 1826,
+ /* U+2272+0338 -> U+2274 */ 1827,
+ /* U+2273+0338 -> U+2275 */ 1828,
+ /* U+2276+0338 -> U+2278 */ 1829,
+ /* U+2277+0338 -> U+2279 */ 1830,
+ /* U+227A+0338 -> U+2280 */ 1831,
+ /* U+227B+0338 -> U+2281 */ 1832,
+ /* U+227C+0338 -> U+22E0 */ 1841,
+ /* U+227D+0338 -> U+22E1 */ 1842,
+ /* U+2282+0338 -> U+2284 */ 1833,
+ /* U+2283+0338 -> U+2285 */ 1834,
+ /* U+2286+0338 -> U+2288 */ 1835,
+ /* U+2287+0338 -> U+2289 */ 1836,
+ /* U+2291+0338 -> U+22E2 */ 1843,
+ /* U+2292+0338 -> U+22E3 */ 1844,
+ /* U+22A2+0338 -> U+22AC */ 1837,
+ /* U+22A8+0338 -> U+22AD */ 1838,
+ /* U+22A9+0338 -> U+22AE */ 1839,
+ /* U+22AB+0338 -> U+22AF */ 1840,
+ /* U+22B2+0338 -> U+22EA */ 1845,
+ /* U+22B3+0338 -> U+22EB */ 1846,
+ /* U+22B4+0338 -> U+22EC */ 1847,
+ /* U+22B5+0338 -> U+22ED */ 1848,
+ /* U+3046+3099 -> U+3094 */ 2286,
+ /* U+304B+3099 -> U+304C */ 2261,
+ /* U+304D+3099 -> U+304E */ 2262,
+ /* U+304F+3099 -> U+3050 */ 2263,
+ /* U+3051+3099 -> U+3052 */ 2264,
+ /* U+3053+3099 -> U+3054 */ 2265,
+ /* U+3055+3099 -> U+3056 */ 2266,
+ /* U+3057+3099 -> U+3058 */ 2267,
+ /* U+3059+3099 -> U+305A */ 2268,
+ /* U+305B+3099 -> U+305C */ 2269,
+ /* U+305D+3099 -> U+305E */ 2270,
+ /* U+305F+3099 -> U+3060 */ 2271,
+ /* U+3061+3099 -> U+3062 */ 2272,
+ /* U+3064+3099 -> U+3065 */ 2273,
+ /* U+3066+3099 -> U+3067 */ 2274,
+ /* U+3068+3099 -> U+3069 */ 2275,
+ /* U+306F+3099 -> U+3070 */ 2276,
+ /* U+306F+309A -> U+3071 */ 2277,
+ /* U+3072+3099 -> U+3073 */ 2278,
+ /* U+3072+309A -> U+3074 */ 2279,
+ /* U+3075+3099 -> U+3076 */ 2280,
+ /* U+3075+309A -> U+3077 */ 2281,
+ /* U+3078+3099 -> U+3079 */ 2282,
+ /* U+3078+309A -> U+307A */ 2283,
+ /* U+307B+3099 -> U+307C */ 2284,
+ /* U+307B+309A -> U+307D */ 2285,
+ /* U+309D+3099 -> U+309E */ 2291,
+ /* U+30A6+3099 -> U+30F4 */ 2318,
+ /* U+30AB+3099 -> U+30AC */ 2293,
+ /* U+30AD+3099 -> U+30AE */ 2294,
+ /* U+30AF+3099 -> U+30B0 */ 2295,
+ /* U+30B1+3099 -> U+30B2 */ 2296,
+ /* U+30B3+3099 -> U+30B4 */ 2297,
+ /* U+30B5+3099 -> U+30B6 */ 2298,
+ /* U+30B7+3099 -> U+30B8 */ 2299,
+ /* U+30B9+3099 -> U+30BA */ 2300,
+ /* U+30BB+3099 -> U+30BC */ 2301,
+ /* U+30BD+3099 -> U+30BE */ 2302,
+ /* U+30BF+3099 -> U+30C0 */ 2303,
+ /* U+30C1+3099 -> U+30C2 */ 2304,
+ /* U+30C4+3099 -> U+30C5 */ 2305,
+ /* U+30C6+3099 -> U+30C7 */ 2306,
+ /* U+30C8+3099 -> U+30C9 */ 2307,
+ /* U+30CF+3099 -> U+30D0 */ 2308,
+ /* U+30CF+309A -> U+30D1 */ 2309,
+ /* U+30D2+3099 -> U+30D3 */ 2310,
+ /* U+30D2+309A -> U+30D4 */ 2311,
+ /* U+30D5+3099 -> U+30D6 */ 2312,
+ /* U+30D5+309A -> U+30D7 */ 2313,
+ /* U+30D8+3099 -> U+30D9 */ 2314,
+ /* U+30D8+309A -> U+30DA */ 2315,
+ /* U+30DB+3099 -> U+30DC */ 2316,
+ /* U+30DB+309A -> U+30DD */ 2317,
+ /* U+30EF+3099 -> U+30F7 */ 2319,
+ /* U+30F0+3099 -> U+30F8 */ 2320,
+ /* U+30F1+3099 -> U+30F9 */ 2321,
+ /* U+30F2+3099 -> U+30FA */ 2322,
+ /* U+30FD+3099 -> U+30FE */ 2323,
+ /* U+11099+110BA -> U+1109A */ 4588,
+ /* U+1109B+110BA -> U+1109C */ 4589,
+ /* U+110A5+110BA -> U+110AB */ 4590,
+ /* U+11131+11127 -> U+1112E */ 4596,
+ /* U+11132+11127 -> U+1112F */ 4597,
+ /* U+11347+1133E -> U+1134B */ 4609,
+ /* U+11347+11357 -> U+1134C */ 4610,
+ /* U+114B9+114B0 -> U+114BC */ 4628,
+ /* U+114B9+114BA -> U+114BB */ 4627,
+ /* U+114B9+114BD -> U+114BE */ 4629,
+ /* U+115B8+115AF -> U+115BA */ 4632,
+ /* U+115B9+115AF -> U+115BB */ 4633,
+ /* U+11935+11930 -> U+11938 */ 4642
+};
+
+/* Perfect hash function for recomposition */
+static int
+Recomp_hash_func(const void *key)
+{
+ static const int16 h[1883] = {
+ 772, 773, 621, 32767, 32767, 387, 653, 196,
+ 32767, 32767, 855, 463, -19, 651, 32767, 32767,
+ 32767, 364, 32767, 32767, -108, 32767, 32767, 32767,
+ 32767, 0, -568, 32767, 32767, 32767, 0, 0,
+ 0, -103, 364, 0, 210, 732, 0, 0,
+ -506, 0, 0, 0, 32767, 32767, 0, 32767,
+ 407, -140, 32767, 409, 32767, 772, 0, 86,
+ 842, 934, 32767, 32767, -499, -355, 32767, 32767,
+ 532, 138, 174, -243, 860, 1870, 742, 32767,
+ 32767, 339, 32767, 1290, 0, 32767, 32767, 0,
+ -449, -1386, 1633, 560, 561, 32767, 1219, 1004,
+ 139, -804, 32767, -179, 141, 579, 1586, 32767,
+ 32767, 32767, 142, 199, 32767, 32767, 143, 0,
+ 32767, 32767, 314, 896, 32767, 32767, 428, 129,
+ 286, -58, 0, 68, 32767, 0, 244, -566,
+ 32767, 32767, 32767, 246, 32767, 32767, 0, 32767,
+ 32767, 271, -108, 928, 32767, 715, 32767, 32767,
+ -211, -497, 32767, 0, 1055, 1339, 32767, 0,
+ 32767, 32767, -968, -144, 32767, 32767, 248, 32767,
+ -161, 32767, 32767, 282, 32767, -372, 0, 2,
+ -137, 1116, 32767, 687, 32767, 459, 913, 0,
+ 461, 879, -816, 443, 32767, 32767, 462, 1089,
+ 32767, 1054, 0, 314, 447, -26, 480, 32767,
+ 64, 0, 0, 112, 32767, 66, 0, 646,
+ 603, 22, -292, 0, 710, 475, 32767, 24,
+ -781, 32767, 32767, 32767, 281, 307, 32767, 1289,
+ 32767, 0, 1064, -149, 454, 118, 32767, 32767,
+ 0, 32767, -126, 0, 32767, 32767, 858, 32767,
+ 32767, 32767, 1029, 886, 665, 209, 0, 26,
+ 359, 0, 0, -108, -508, -603, 894, 906,
+ 32767, 32767, 14, 0, 0, 534, 984, 876,
+ 32767, -93, 110, -367, 167, 843, 32767, 32767,
+ -947, -290, 169, 0, 0, 32767, -42, 564,
+ 0, -927, 32767, 817, 32767, 32767, 32767, 110,
+ 0, 32767, 32767, -38, 32767, 32767, -101, 694,
+ -142, 190, 191, 1288, 32767, -687, 194, -579,
+ 534, -452, 0, -72, 536, 765, 823, 266,
+ -259, 684, 767, 32767, 654, 32767, 32767, 64,
+ 920, 32767, 32767, 32767, 0, 1653, 0, 0,
+ 32767, 32767, -452, -222, 855, 0, 32767, -1153,
+ 127, 490, 449, 863, 32767, -144, 32767, -379,
+ 545, 32767, 32767, 32767, 530, 32767, 32767, 1331,
+ 611, -612, 332, 545, -73, 0, 604, 201,
+ 32767, -279, 338, 836, 340, 408, 32767, -60,
+ -358, 32767, 343, 69, 707, 0, -129, 582,
+ 32767, 0, 32767, 96, 392, 490, 639, 157,
+ -4, 406, 32767, 32767, -571, 1077, 546, 32767,
+ 551, 0, 0, 0, 32767, 32767, 348, 32767,
+ 498, -181, 0, -433, 1057, 260, 0, 32767,
+ 32767, 397, 32767, 816, -130, 32767, 624, 0,
+ 0, 32767, 32767, 32767, 485, 0, 32767, 32767,
+ 32767, 32767, 32767, 0, 32767, 32767, 32767, 1222,
+ -230, 32767, 797, -538, 32767, 974, 32767, 32767,
+ 831, 70, -658, 145, 0, 147, 0, 32767,
+ 1295, 32767, 0, 0, 895, 0, 0, -385,
+ 491, -287, 32767, -587, 32767, 32767, 32767, 813,
+ -471, -13, 32767, 32767, 32767, 0, 203, 411,
+ 470, 0, -546, -179, 146, 0, 0, 32767,
+ -468, 32767, 0, 0, 32767, 32767, 32767, 211,
+ 32767, 32767, 0, 32767, 0, 52, 32767, 0,
+ 32767, 0, 692, 990, 32767, 32767, 32767, 56,
+ -507, 784, 951, 0, 32767, 0, 697, 32767,
+ 187, 0, 32767, 32767, 430, 1209, 682, 32767,
+ 130, 0, -25, 0, -1006, 0, 32767, 214,
+ 433, 22, 0, -1119, 32767, 285, 32767, 32767,
+ 32767, 216, 32767, 32767, 32767, 217, 527, 32767,
+ 32767, 32767, 829, 485, 419, 717, 620, 731,
+ 32767, 470, 0, -145, -620, 1162, -644, 848,
+ 287, -632, 32767, 32767, 32767, 32767, 381, 32767,
+ 510, 511, -554, -2, 32767, 0, 0, 698,
+ 32767, 32767, 436, 1154, 32767, 463, 32767, 32767,
+ 627, 517, 32767, 32767, 854, 579, 723, 396,
+ 110, -42, 354, 32767, 664, 32767, 32767, 0,
+ 0, 32767, 65, -163, 67, 140, 69, 341,
+ 70, 71, 402, 73, 623, 544, 624, 417,
+ -1375, 648, 32767, -26, 904, 0, 548, 0,
+ 0, 32767, 32767, 855, 32767, 488, -524, 599,
+ 130, 131, 32767, 32767, 542, -1110, -324, -462,
+ 32767, -405, -440, 0, 0, 629, 850, 0,
+ 741, 257, 258, 32767, 32767, 0, 32767, 923,
+ 0, 32767, 0, 32767, 1559, 32767, 32767, 32767,
+ 671, 32767, 134, 32767, 32767, -336, -104, 576,
+ 577, 829, 32767, 32767, 762, 902, 32767, 0,
+ 32767, 0, 1506, 887, 32767, 636, 601, 2465,
+ 426, 0, 236, 317, 427, 968, 32767, -975,
+ -559, -343, 341, 32767, 937, 241, 0, 32767,
+ 32767, 547, 32767, 32767, 32767, 32767, 32767, 789,
+ 0, 32767, 32767, 32767, 0, 0, 0, 32767,
+ -192, 859, 1185, 1153, 69, 32767, 32767, 32767,
+ -539, 32767, 32767, 0, 32767, 32767, 32767, 32767,
+ 640, 578, 32767, 32767, -766, 32767, 32767, 32767,
+ 32767, 1050, -572, 32767, 32767, 32767, 32767, 1268,
+ 32767, 32767, 32767, 754, 32767, 32767, 1640, 179,
+ 804, 32767, 32767, 32767, 32767, 0, 684, 943,
+ 1006, 32767, 32767, 652, 0, 32767, 1041, 32767,
+ 718, 791, 32767, 274, 697, 32767, 32767, 0,
+ 32767, 32767, 32767, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 735,
+ 0, 32767, 32767, 32767, 275, 358, 688, 32767,
+ 32767, 32767, 548, -87, 770, 32767, -42, 0,
+ 551, 32767, 691, 222, 32767, 32767, 32767, 32767,
+ 0, 1273, 403, -121, 806, 553, 554, 163,
+ 32767, 32767, 892, 825, 32767, 32767, -490, 32767,
+ 32767, 32767, 32767, 32767, -109, 744, 910, 32767,
+ 91, 32767, 32767, 0, 0, 32767, 32767, 32767,
+ 1521, 50, 701, 32767, 32767, 32767, 32767, 164,
+ 658, 32767, 288, 0, 32767, 0, 51, 0,
+ 32767, 32767, 32767, 32767, 555, 1547, 32767, 32767,
+ 595, 585, 429, 32767, -80, 32767, 1258, 0,
+ 540, 486, -434, 865, 0, 192, 0, 884,
+ 0, 0, 0, 175, 555, 0, 32767, 32767,
+ 0, 32767, -566, 866, 591, 32767, 32767, 32767,
+ 32767, 32767, 496, 495, -215, 32767, 849, -772,
+ 32767, 32767, 502, 178, 483, 32767, 912, 793,
+ 794, 0, 32767, 32767, 32767, -556, 499, 838,
+ 32767, 32767, -506, 331, 0, 0, -1096, 512,
+ 880, 0, 774, -338, 649, 32767, 270, 32767,
+ 32767, -624, 328, 459, 32767, 32767, 32767, 32767,
+ 329, -201, -835, 813, -879, 560, 0, -212,
+ -114, 35, -494, 37, 523, 653, 751, -653,
+ -743, 32767, 1356, 818, 32767, 32767, 856, 0,
+ 44, 902, 0, 0, 0, 0, 32767, -26,
+ 526, 795, 456, 32767, 104, -209, -341, 133,
+ -372, 0, 45, 110, 111, 0, 511, 47,
+ 114, 32767, 32767, 93, 48, 116, -1031, -279,
+ 32767, 192, 0, 32767, 453, 415, 0, -190,
+ 32767, 471, 240, 175, 29, 665, 684, 0,
+ -11, -95, -344, 32767, 245, 148, 0, 530,
+ 0, 1185, -615, -712, 693, 784, 32767, 0,
+ -776, 32767, 32767, -813, 0, 0, 0, 207,
+ 208, 32767, 674, 32767, 742, -289, 249, 32767,
+ 520, 929, -50, 781, 0, -778, 32767, 0,
+ 302, 32767, 720, -465, 0, 32767, 32767, 32767,
+ 0, 0, 32767, 833, 328, 806, 32767, -403,
+ 0, 32767, -77, 32767, 0, 441, 930, 32767,
+ 643, 0, 32767, 1938, 0, 1334, 381, 32767,
+ 216, 32767, 32767, 0, 32767, 484, 383, 0,
+ 242, 395, 0, 32767, 32767, 32767, -781, 355,
+ 356, 32767, 292, 706, 32767, 32767, 32767, 32767,
+ 32767, -410, 32767, 32767, 782, 32767, 189, 32767,
+ 32767, 943, 0, -212, 407, 335, 0, 135,
+ 32767, 616, 0, -497, 0, -67, 853, 32767,
+ 700, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 459, -48, 32767, 58, 0,
+ -856, 1017, 32767, 59, 916, -731, 32767, 940,
+ -855, 347, 650, 0, 678, 32767, 0, 32767,
+ 32767, 530, 32767, 0, -80, 32767, -730, 32767,
+ 1214, 799, 58, 651, 841, 0, 0, -589,
+ -1530, -478, 651, 652, 93, 576, -1215, 32767,
+ 125, 32767, 1279, 32767, 32767, 0, 32767, 0,
+ -367, 416, -1236, 32767, 418, 32767, 815, 558,
+ 559, 781, 419, 32767, 739, 32767, 0, 32767,
+ 128, 570, 1349, -298, -66, 0, 147, -488,
+ 32767, 590, 189, 274, 524, 32767, 1082, -209,
+ 32767, 423, 32767, 32767, 975, 573, 32767, 424,
+ 32767, 32767, 1241, 32767, 32767, 32767, 32767, 32767,
+ 612, 391, 32767, 0, -803, 1004, -561, 32767,
+ 32767, 735, 870, 32767, 0, 32767, 32767, -123,
+ 99, 210, 600, 1294, 109, 1053, 32767, 307,
+ 834, 32767, 0, 1651, 32767, 644, 32767, 32767,
+ 0, 32767, -801, 385, 379, 32767, -368, 32767,
+ 32767, 830, 0, 32767, 32767, 739, 371, 372,
+ -275, 32767, 32767, 331, -780, 32767, 0, 1229,
+ -1462, 913, 266, 827, 125, 32767, 32767, 32767,
+ 393, 32767, 631, -33, -883, -661, -204, 6,
+ -19, 257, 8, 9, 118, 519, 615, -541,
+ -893, 0, 32767, 0, 1156, 15, 900, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1022, 376, 0,
+ 32767, 32767, -972, 676, 840, -661, 631, 58,
+ 0, 17, 32767, 0, -799, 82, 0, 32767,
+ 32767, 680, 32767, 905, 0, 0, 32767, 32767,
+ 0, 0, 32767, 0, 828, 386, 802, 0,
+ 146, 0, 148, 32767, -1146, 0, 150, 151,
+ -743, 153, 154, 32767, 32767, 442, 32767, 743,
+ 0, 0, 746, 0, 32767, 32767, 32767, 98,
+ 32767, 157, 0, 696, 0, 32767, 32767, -294,
+ 32767, 158, 159, 32767, 0, 32767, 160, 32767,
+ 933, 32767, 32767, -50, 759, 824, 162, 672,
+ 32767, 356, 0, 356, 32767, 32767, 0, 0,
+ 656, 692, 253, 254, -374, 102, 256, 32767,
+ 0, 0, 32767, 32767, 259, 32767, 63, 260,
+ 510, 261, 32767, 0, 32767, 1061, 32767, 521,
+ 32767, 32767, 32767, 32767, 32767, 32767, 316, 317,
+ 846, 0, 32767, -500, 318, 0, 32767, 32767,
+ 263, 0, 790, 872, 32767, 32767, 32767, 2171,
+ 264, 32767, 32767, 32767, 32767, 486, 334, 465,
+ 32767, 466, 32767, 444, 606, 32767, 0, 445,
+ 320, -317, 0, 520, 322, 718, 32767, 32767,
+ 32767, 0, 1013, 32767, 32767, 32767, 32767, 32767,
+ 32767, 611, 32767, 0, 0, 32767, 32767, -120,
+ 156, 613, 0, 0, 32767, -68, 32767, 622,
+ 32767, 32767, 32767, 32767, 32767, 455, 32767, 32767,
+ 32767, 403, 533, 0, -161, 405, 95, 96,
+ 32767, 97, 32767, 0, 29, 0, 32767, 32767,
+ 30, 32767, 99, 32767, 32767, 0, 161, 32767,
+ 97, 0, 32, 32767, 32767, 0, 0, 315,
+ 32767, 32767, 414, 966, 0, 585, 32767, 32767,
+ -616, -256, 171, 172, 666, 101, 562, 563,
+ 32767, 95, 0, 0, 1492, 390, -251, 103,
+ 32767, 0, 32767, 188, 1487, 32767, 0, 0,
+ 586, 668, -126, 0, 0, 32767, 32767, 204,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 656, 32767, 32767,
+ 599, 0, 222, 32767, 0, 1368, -412, 435,
+ 32767, 936, 32767, -17, 32767, 832, 32767, 437,
+ 0, -518, 787, 32767, 864, -449, 0, 636,
+ 713, 206, 592, 572, 0, 483, -139, 32767,
+ 32767, 180, 818, 32767, 32767, 1304, 0, 32767,
+ 274, 0, 0, 0, 0, 705, 32767, 32767,
+ 32767, 0, -272, 0, 502, 503, 319, 0,
+ 32767, 0, 13, 32767, 32767, 0, 32767, 270,
+ 737, 0, 32767, 32767, 32767, 901, 32767, 616,
+ 180, 32767, 721, 353, 32767, 0, 32767, 32767,
+ -199, 0, 280, 788, 32767, 940, 32767, 51,
+ 0, 400, 53, 0, 54, -637, 0, -453,
+ 0, 0, 0, 380, 0, 32767, 504, 0,
+ 2049, 0, -964, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 798, 32767, 32767, 32767, 0,
+ 538, 488, 0, 32767, -528, 57, 819, 32767,
+ 32767, 1244, 0, 488, 739, 908, 32767, 32767,
+ 0, 32767, 32767, 0, 55, 533, 0, 32767,
+ 814, 0, 32767, 458, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 776, 777, 920, 0,
+ 0, 755, 32767, 0, 32767, 32767, 0, 32767,
+ 55, -954, 0, 372, 166, 218, 165, 857,
+ 221, 675, 0, 223, 224, -155, 226, 32767,
+ 1851, 227, 32767, 32767, 1192, 0, 229, 0,
+ -72, 0, 865, 0, 0, -330, 0, 683,
+ 32767, -550, -196, 725, -573, 293, 102, 32767,
+ -589, 296, 297, 298, 231, -256, 300, 32767,
+ 32767, 301, 233, 868, 32767, 234, 0, 811,
+ 1187, 32767, 32767, 0, 32767, 518, 0, 361,
+ 362, 466, 0, 365, 32767, -179, 366, 367,
+ 874, 369, 305, 0, 32767, 0, 32767, 0,
+ 32767, 2000, 1215, 451, 652, 0, 0, 799,
+ 32767, 32767, 32767
+ };
+
+ const unsigned char *k = (const unsigned char *) key;
+ size_t keylen = 8;
+ uint32 a = 0;
+ uint32 b = 0;
+
+ while (keylen--)
+ {
+ unsigned char c = *k++;
+
+ a = a * 257 + c;
+ b = b * 17 + c;
+ }
+ return h[a % 1883] + h[b % 1883];
+}
+
+/* Hash lookup information for recomposition */
+static const pg_unicode_recompinfo UnicodeRecompInfo =
+{
+ RecompInverseLookup,
+ Recomp_hash_func,
+ 941
+};
--
2.22.0
On Wed, Oct 21, 2020 at 07:35:12PM -0400, John Naylor wrote:
There was a mistake in v3 with pgindent/exclude_file_patterns, fixed in v4.
Thanks for the updated version, that was fast. I have found a couple
of places that needed to be adjusted, like the comment at the top of
generate-unicode_norm_table.pl or some comments, an incorrect include
in the new headers and the indentation was not right in perl (we use
perltidy v20170521, see the README in src/tools/pgindent).
Except that, this looks good to me. Attached is the updated version
with all my tweaks, that I would like to commit. If there are any
comments, please feel free of course.
--
Michael
Attachments:
unicode-derecomp-v5.patchtext/x-diff; charset=us-asciiDownload
diff --git a/src/include/common/unicode_norm_hashfunc.h b/src/include/common/unicode_norm_hashfunc.h
new file mode 100644
index 0000000000..e6acb2a8d0
--- /dev/null
+++ b/src/include/common/unicode_norm_hashfunc.h
@@ -0,0 +1,2932 @@
+/*-------------------------------------------------------------------------
+ *
+ * unicode_norm_hashfunc.h
+ * Perfect hash functions used for Unicode normalization
+ *
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/common/unicode_norm_hashfunc.h
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/*
+ * File auto-generated by src/common/unicode/generate-unicode_norm_table.pl,
+ * do not edit. There is deliberately not an #ifndef PG_UNICODE_NORM_HASHFUNC_H
+ * here.
+ */
+
+#include "common/unicode_norm_table.h"
+
+/* Typedef for perfect hash functions */
+typedef int (*cp_hash_func) (const void *key);
+
+/* Information for lookups with perfect hash functions */
+typedef struct
+{
+ const pg_unicode_decomposition *decomps;
+ cp_hash_func hash;
+ int num_decomps;
+} pg_unicode_decompinfo;
+
+typedef struct
+{
+ const uint16 *inverse_lookup;
+ cp_hash_func hash;
+ int num_recomps;
+} pg_unicode_recompinfo;
+
+/* Perfect hash function for decomposition */
+static int
+Decomp_hash_func(const void *key)
+{
+ static const int16 h[13209] = {
+ 0, 1515, 4744, 4745, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3890, 3890, 0, 0,
+ 3891, 3891, -2046, 2800, 3890, 3890, 3890, -4396,
+ 4361, 4362, -4441, -4441, -4396, 1773, 1773, 1773,
+ 4372, 4373, -4438, -4438, -4393, -4393, 2619, 17,
+ -4347, -4393, -4393, -4393, -4393, -4393, 2619, 2619,
+ 1560, 4346, 4347, 4348, 1917, 1873, 1874, 1875,
+ -7856, 4358, 17619, 2622, 2622, 2622, 6357, 6358,
+ 6359, 6360, 6361, 6362, 6363, 2622, -4390, -4390,
+ 4414, -5356, -5356, 4374, 4375, -5356, -5356, -6335,
+ -3020, 2511, -5356, -5356, -3583, -3583, -3583, -3583,
+ -995, 0, 0, -9799, -9754, 2874, 2875, 2876,
+ 2877, 2878, -9830, -3591, -9756, -9756, -2744, -5346,
+ -9710, -9756, 342, -5346, -9756, -5346, -2743, -449,
+ 348, 2894, 2895, -2853, 2897, 2898, 2899, 2900,
+ 2901, 2902, 2903, 2904, 2905, 2906, 2907, 2908,
+ 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916,
+ 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924,
+ 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932,
+ 2933, 2934, 32767, 32767, 32767, 32767, 32767, 32767,
+ -8721, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 1, 32767, 48, 32767, 32767, 32767, 32767, 49,
+ 32767, 32767, -8687, -8687, -6255, -6210, 32767, 32767,
+ -8689, -8689, -21949,32767, -18635,-15320,-15320,32767,
+ -12006,-8691, -8691, -8691, -8691, -8691, 32767, 66,
+ -8737, -8737, -8692, -8692, -8692, -8692, 73, 74,
+ 32767, -8738, -8693, -8693, -8693, -8693, -8693, 32767,
+ 32767, -8695, -8695, -8695, -8695, -8695, 32767, 32767,
+ 40, 41, -2390, -2434, 44, 45, 32767, 46,
+ 13307, 9993, 9994, 6680, 6681, 3367, 3368, 54,
+ 0, 55, 56, 57, -8699, -8699, 105, 32767,
+ 32767, 61, 62, 63, -8701, -8701, 32767, 111,
+ 32767, 67, 68, 69, 70, 1890, 3687, -1272,
+ 3690, 75, 76, 77, 78, 79, 80, 81,
+ 82, 32767, 32767, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 32767,
+ 32767, 103, 104, 105, 106, 107, 108, 109,
+ -8660, -8660, 32767, -8661, -8661, -8661, -8661, -8661,
+ -8661, 32767, 73, 74, 75, 76, -2355, -2399,
+ 79, 80, 32767, 32767, 13341, 10027, 10028, 6714,
+ 6715, 3401, 3402, 32767, 32767, 88, 89, 90,
+ -8666, -8666, 138, 32767, 32767, 94, 95, 96,
+ -8668, -8668, 144, 145, 101, -2553, -2553, -2553,
+ -2553, -4983, -2553, -2553, 154, -2553, 156, 32767,
+ 32767, 6114, 158, -3153, -3152, -3151, -12891,-6888,
+ -931, -3149, 166, -3148, -4728, 169, -3147, -3146,
+ -3145, -3144, -3143, -3142, -3141, -2543, -3139, -3138,
+ 180, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 3314,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 3660, 3661, 2131, 2132, 2133, 2134, 2135,
+ 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143,
+ 2144, 2145, -5472, -5472, -3612, -3612, -3612, -3612,
+ -3612, 2652, -3612, -3612, -3612, -3612, -3612, -3612,
+ -3612, -3612, 3693, -3613, -7015, -7015, 1742, 1743,
+ -7060, -7060, -7015, -846, -846, -846, 1753, 1754,
+ -7057, -7057, -7012, -7012, 0, -2602, -6966, -7012,
+ -7012, -7012, -7012, -7012, 0, 0, 1725, 1726,
+ 1727, 1728, -703, -747, -746, 0, 1735, 1736,
+ 14997, 0, 0, 0, 3735, 3736, 3737, 3738,
+ 3739, 3740, 3741, 0, -7012, -7012, 1792, 1793,
+ 1749, 1750, 1751, -7980, -7980, -8959, -5644, -113,
+ -7980, -113, -2382, -6116, -6116, -6116, -6116, -6116,
+ -6116, -6116, -2374, 4639, 4640, -4163, 5608, 5609,
+ -4120, -4120, 5612, 5613, 6593, 3279, -2251, 5617,
+ 5618, 3846, 3847, 3848, 3849, 1262, 1262, 10066,
+ 10067, 10023, 3855, 3856, 3857, 1259, 1259, 10071,
+ 3861, 10027, 10028, 3017, 5620, 9985, 10032, -65,
+ 5624, 10035, 5626, 3024, 731, -65, 1298, 12530,
+ 3727, 3727, 3772, 3772, 3772, 13504, 13505, 14485,
+ 11171, 5641, 13509, 5643, 7913, 11648, 11649, 11650,
+ 11651, 11652, 11653, 11654, 7913, 901, 901, 9705,
+ -65, -65, 9665, 9666, -65, -65, -1044, 2271,
+ 7802, -65, -65, 1708, 1708, 1708, 1708, 4296,
+ 4297, -4506, -4506, -4461, 1708, 1708, 1708, 4307,
+ 4308, -4503, 1708, -4457, -4457, 2555, -47, -4411,
+ -4457, 5641, -47, -4457, -47, 2556, 4850, 5647,
+ 4285, -6946, 1858, 1859, 1815, 1816, 1817, -7914,
+ -7914, -8893, -5578, -47, -7914, -47, -2316, -6050,
+ -6050, -6050, -6050, -6050, -6050, -6050, -2308, 4705,
+ 4706, -4097, 5674, 5675, -4054, -4054, 5678, 5679,
+ 6659, 3345, -2185, 5683, 5684, 3912, 3913, 3914,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -3083, -3083, 232, 287, 233, 233,
+ 233, 8990, 8991, 32767, 32767, 3668, 32767, 3667,
+ 3667, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 208, 208, 208, 208, 208, 208,
+ 32767, 32767, 206, 206, 206, 206, 206, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 304, 305, -1274, 307, 308,
+ 309, 6753, -1374, 10488, 4486, -1470, 4488, 316,
+ 4489, -5607, 4490, 4491, 4492, 322, 760, 324,
+ 325, 326, 166, 763, 329, -2553, 765, 332,
+ 333, 334, 335, 772, 337, 6310, 339, 340,
+ 341, 342, 343, 344, 345, 346, -2542, -2542,
+ -2542, 350, 351, 352, 353, 354, 355, 356,
+ 357, 358, 359, 360, 361, 362, -6008, 364,
+ 365, 366, 367, 368, 369, 370, 254, 372,
+ 373, 374, 375, 376, 377, 378, 379, 380,
+ 381, 382, 32767, 383, 384, -3606, -3605, -3604,
+ -3603, 389, -3600, -3599, -3598, 2340, -1238, -3595,
+ -3594, -3593, 4694, -4062, -4062, 4742, 4743, 4699,
+ -1469, -1468, -1467, -4065, -4065, 4747, -1463, 4703,
+ 4704, -2307, 296, 32767, 0, 32767, 32767, 4708,
+ -1376, -1376, -1376, 32767, 32767, -1246, 506, 506,
+ 0, -1559, 32767, 32767, 32767, 32767, 32767, 305,
+ 419, 308, 2578, 6313, 6314, 424, 32767, -6030,
+ 32767, 426, 427, 428, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 32767, 0,
+ 32767, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 32767, 429, -5407, 431,
+ -5406, 433, -3601, 435, 32767, -3751, 32767, 32767,
+ 32767, 32767, -3755, 32767, 32767, 32767, 32767, 0,
+ 32767, 32767, 32767, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 436, -11425,-5422,
+ 535, -5422, 535, -5422, 4675, -5421, -5421, -5421,
+ -5421, -5421, 4681, 0, 0, 0, 4682, 4683,
+ 4684, 4685, 4686, 4687, 0, 0, 32767, 32767,
+ 0, 0, -5684, 0, 4688, 4689, 4690, 4691,
+ 4692, 4693, 4694, 4695, -1257, -1257, 4696, -5441,
+ -5441, 4699, 4700, 4701, -5443, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 454, 0, 32767, 456,
+ 32767, 32767, 0, 457, 32767, 32767, 32767, 0,
+ 458, 459, 460, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 4703, 4704, 4705, 4706, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 4655, 4656, 4657, 4658,
+ 4659, 4712, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 462, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 463, 464, 32767, 465,
+ 32767, 32767, 32767, 466, 32767, 32767, 32767, 32767,
+ 467, 468, 469, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 3011, 3011, 3011,
+ 3011, 3011, 3011, 3011, 32767, 32767, 32767, 32767,
+ 32767, 32767, 470, 471, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 472,
+ 473, 474, 475, 476, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 4713, 4714, 4715, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 477, 478, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 479, 480, 481, 482,
+ 32767, 32767, 483, 484, 32767, 32767, 485, 486,
+ 487, 488, 489, 490, 32767, 32767, 491, 492,
+ 493, 494, 495, 496, 32767, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 665, -255, 667, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 693, 694, 695, 696,
+ 697, 698, 699, 700, 701, 702, 703, 704,
+ 705, 706, 707, 708, 709, 710, 711, 712,
+ 7183, 714, -1580, 716, 2547, 718, 7194, 720,
+ 2553, 722, 723, 7204, 725, 726, 727, 728,
+ 729, 730, 731, 732, 733, 734, 735, 736,
+ 0, 0, 8114, 8159, 745, -1535, 747, 748,
+ 8161, -5019, -5019, -5019, -5019, 1938, 0, 0,
+ 0, 0, 0, 0, 767, 768, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 32767, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, -2875, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -2884, -2884,
+ -2884, -2884, -2884, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -4271, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -2884, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -2884, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -2884, -2884, -2884, -2884, -2884, -2884,
+ -2884, -2884, -2884, 32767, -2885, 32767, -2886, -2886,
+ 32767, -2887, -2887, 32767, -2888, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 563, 564,
+ 565, 566, 567, 568, 569, 570, 571, 572,
+ 573, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 574, 575, 576, 577, 578, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, -294, -294, -294, -3047, 583, 584, 585,
+ -4462, -4418, -4418, -4418, -4418, -4418, -4462, -4462,
+ -4462, 595, 596, 597, 598, 599, 32767, 32767,
+ 32767, 32767, -4471, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 4716, 4717, 4718, 4719,
+ 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727,
+ 4728, 4729, 4730, 4731, 4732, 4733, 4734, 4735,
+ 3826, 4737, 4738, 4739, 4740, 4741, 4742, 3832,
+ 4744, 3833, 3120, 3121, 3835, 3835, 3124, 3836,
+ 3836, 4753, 4754, 4755, 4756, 4757, 4758, 4759,
+ 4760, 4761, 4762, 4763, 4764, 4765, 4766, 4767,
+ 4768, 4769, 4770, 4771, 4772, 4773, 4774, 4775,
+ 4776, 4777, 4778, 4779, 4780, 4781, 6619, 6620,
+ 6621, 11272, 6623, 6624, 4788, 4789, 4790, 3874,
+ 4761, 3874, 4794, 3874, 4796, 4797, 4798, 3874,
+ 4800, 32767, 0, 4802, 4803, 4804, 4805, 4806,
+ 4807, 4808, 4809, 4810, 4811, 4812, 4813, 4814,
+ 4815, 4816, 4817, 4818, 4819, 4820, 4821, 4822,
+ 4823, 4824, 4825, 4826, 4827, 4828, 11299, 4830,
+ 2536, 4832, 6663, 4834, 11310, 4836, 6669, 4838,
+ 4839, 11320, 4841, 4842, 4843, 4844, 4845, 4846,
+ 4847, 4848, 4849, 4850, 4851, 4852, 1188, 4854,
+ 4855, 4856, 4857, 2577, 4859, 4860, 12273, -907,
+ -907, -907, -907, -907, -907, 4868, 4869, 4870,
+ 4871, 32767, 4872, 4873, 32767, 32767, 4874, 32767,
+ 627, 4875, 4876, 32767, 32767, 4877, 4878, 4879,
+ 6722, 32767, 4881, 4882, 4883, 6730, 6731, 7446,
+ 6733, 4888, 7449, 7449, 4891, 4892, 32767, 4893,
+ 32767, 4894, 4895, 4896, 4897, 4898, 4899, 3512,
+ 3513, 3514, 3515, 3516, 4904, 3518, 3519, 3520,
+ 3521, 3522, 3523, 3524, 3525, 3526, 3527, 3528,
+ 3529, 3530, 3531, 3532, 3533, 3534, 3535, 3536,
+ 3537, 3538, 4926, 6797, 4928, 6800, 4930, 4931,
+ 4932, 4933, 4934, 4935, 6813, 4937, 4938, 6816,
+ 6817, 4941, 4942, 4943, 0, 4945, 6821, 0,
+ 0, 4949, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, -127, -127, -127,
+ 7285, -127, -127, 0, -128, -128, -128, -128,
+ 0, 32767, -130, 4971, -129, 5613, 5614, 5615,
+ 4976, 5618, 32767, 5619, 5620, 5621, 4981, 5624,
+ 4983, 4984, 32767, 5630, 5631, -1986, -1986, -126,
+ -126, 5078, 4992, 5037, 5038, 5039, 5040, 5041,
+ 5086, 5087, 5088, 5089, -2322, 5091, 5092, 5093,
+ 5094, 5095, 5096, 5097, 5098, 5099, 5100, 0,
+ 5101, -640, -640, -640, 0, -641, -641, -641,
+ -641, -641, 0, -642, 0, 0, 32767, -645,
+ -645, 6973, 6974, 5115, 5116, -87, 0, -44,
+ -44, -44, -44, -44, -88, -88, -88, -88,
+ 7324, -88, -88, -88, -88, -88, -88, -88,
+ -88, -88, -88, -88, -88, 5654, 5655, 5656,
+ 5657, 5658, 5659, 5660, 5661, 5662, 5663, 5664,
+ 5665, 5666, 5667, 5668, 5669, -1948, -1948, -88,
+ -88, 5116, 5117, 5074, 5075, 5076, 5077, 5078,
+ 5123, 5124, 5125, 5126, -2285, 5128, 5129, 5130,
+ 5131, 5132, 5133, 5134, 5135, 5136, 5137, 5138,
+ 5139, -602, -602, -602, -602, -602, -602, -602,
+ -602, -602, -602, -602, -602, -602, -602, -602,
+ -602, 7016, 7017, 5158, 5159, -44, -44, 0,
+ 0, 0, 0, 0, -44, -44, -44, -44,
+ 7368, -44, -44, -44, -44, -44, -44, -44,
+ -44, -44, -44, -44, -44, 5698, 5699, 5700,
+ 5701, 5702, 5703, 5704, 5705, 5706, 5707, 5708,
+ 5709, 5710, 5711, 5712, 5713, -1904, -1904, -44,
+ -44, 5160, 5161, 5118, 5119, 5120, 5121, 5122,
+ 5167, 5168, 5169, 5170, -2241, 5172, 5173, 5174,
+ 5175, 5176, 5177, 5178, 5179, 5180, 5181, 5182,
+ 5183, -558, -558, -558, -558, -558, -558, -558,
+ -558, -558, -558, -558, -558, -558, -558, -558,
+ -558, 7060, 7061, 5202, 5203, 0, 0, 44,
+ 44, 44, 44, 44, 0, 0, 0, 0,
+ 7412, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 5742, 5743, 5744,
+ 5745, 5746, 5747, 5748, 5749, 5750, 5751, 5752,
+ 5753, 5754, 5755, 5756, 5757, -1860, -1860, 0,
+ 0, 0, 0, 0, 6264, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, -3402,
+ -3402, 5355, 5356, -3447, -3447, -3402, -3402, -3402,
+ -3402, 5363, 5364, -3447, -3447, -3402, -3402, -3402,
+ -3358, -3358, -3404, -3404, -3404, -3404, -3404, -3404,
+ -3404, 5331, 5332, 5333, 5334, 2903, 2859, 5337,
+ 5338, 5339, 5340, 18601, 15287, 15288, 11974, 11975,
+ 8661, 8662, 5348, 5349, 5350, 5351, 5352, -3404,
+ -3404, 5400, 5401, 5357, 5358, 5359, 5360, -3404,
+ -3404, 5408, 5409, 5365, 5366, 5367, 5324, 5325,
+ 5372, 5373, 5374, 5375, 5376, 5377, 5378, -3356,
+ -3356, -3356, -3356, -924, -879, -3356, -3356, -3356,
+ -3356, -16616,-13301,-13301,-9986, -9986, -6671, -6671,
+ -3356, -3356, -3356, -3356, -3356, 5401, 5402, -3401,
+ -3401, -3356, -3356, -3356, -3356, 5409, 5410, -3401,
+ -3401, -3356, -3356, -3356, -3312, -3312, -3358, -3358,
+ -3358, -3358, -3358, -3358, -3358, 5377, 5378, 5379,
+ 5380, 2949, 2905, 5383, 5384, 5385, 5386, 18647,
+ 15333, 15334, 12020, 12021, 8707, 8708, 5394, 5395,
+ 5396, 5397, 5398, -3358, -3358, 5446, 5447, 5403,
+ 5404, 5405, 5406, -3358, -3358, 5454, 5455, 5411,
+ 5412, 5413, 5414, 5415, 5416, 5417, 5418, 5419,
+ 5420, 5421, 5422, -3312, -3312, -3312, -3312, -880,
+ -835, -3312, -3312, -3312, -3312, -16572,-13257,-13257,
+ -9942, -9942, -6627, -6627, -3312, -3312, -3312, -3312,
+ -3312, 5445, 5446, -3357, -3357, -3312, -3312, -3312,
+ -3312, 5453, 5454, -3357, -3357, -3312, -3312, -3312,
+ -3312, -3312, -3312, -3312, -3312, -3312, -3312, -3312,
+ -3312, 5423, 5424, 5425, 5426, 2995, 2951, 5429,
+ 5430, 5431, 5432, 18693, 15379, 15380, 12066, 12067,
+ 8753, 8754, 5440, 5441, 5442, 5443, 5444, -3312,
+ -3312, 5492, 5493, 5449, 5450, 5451, 5452, -3312,
+ -3312, 5500, 5501, 5457, 2803, 2803, 2803, 2803,
+ 373, 2803, 2803, 5510, 2803, 5512, 11470, 5514,
+ 11472, 5516, 2205, 2206, 2207, -7533, -1530, 4427,
+ 2209, 5524, 2210, 630, 5527, 2211, 2212, 2213,
+ 2214, 2215, 2216, 2217, 2815, 2219, 2220, 5538,
+ 2221, 5540, 2222, 5542, 5543, 2223, -3312, -3312,
+ -3312, 5548, 5549, -3312, -3312, 2803, 2803, 2803,
+ 5555, 5556, 5557, 2803, 2803, 2803, 2803, 2803,
+ 2803, 2803, 2803, 2803, 2803, 2803, 2803, 2803,
+ 9050, 9051, 2803, 2803, 2803, 2803, 2803, 2803,
+ 2803, 2803, 2803, 2803, 2803, 2803, 4318, 7547,
+ 7548, 2803, 2803, 2803, 2803, 2803, 2803, 2803,
+ 2803, 6693, 6693, 2803, 2803, 6694, 6694, 757,
+ 5603, 6693, 6693, 6693, -1593, 7164, 7165, -1638,
+ -1638, -1593, 4576, 4576, 4576, 7175, 7176, -1635,
+ -1635, -1590, -1590, 5422, 2820, -1544, -1590, -1590,
+ -1590, -1590, -1590, 5422, 5422, 4363, 7149, 7150,
+ 7151, 4720, 4676, 4677, 4678, -5053, 7161, 20422,
+ 5425, 5425, 5425, 9160, 9161, 9162, 9163, 9164,
+ 9165, 9166, 5425, -1587, -1587, 7217, -2553, -2553,
+ 7177, 7178, -2553, 32767, 32767, -219, 5312, -2555,
+ -2555, -782, -782, -782, -782, 1806, 2801, 2801,
+ -6998, -6953, 5675, 5676, 5677, 5678, 5679, -7029,
+ -790, -6955, -6955, 57, -2545, -6909, -6955, 3143,
+ -2545, -6955, -2545, 58, 2352, 3149, 5695, 5696,
+ -52, 5698, 5699, 5700, 5701, 5702, 5703, 5704,
+ 5705, 5706, 5707, 5708, 5709, 5710, 5711, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -1838, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 6927,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -973, 32767, 32767,
+ 32767, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 4567, 4568, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -437,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -448, 32767, 32767, -450, -450,
+ -450, 0, 32767, 32767, 32767, -2166, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 0, 32767, -464,
+ -464, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -514,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 5757, 5758, 5759, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -4186, -4186, -12097,-4186, 32767,
+ -4187, -4187, -8787, 32767, 0, 0, 5952, 0,
+ 0, -4183, -4183, -4183, 0, -2386, -4182, 778,
+ -4183, -5935, 32767, 32767, -4690, -6249, -4184, -4184,
+ -4184, 32767, 32767, -4186, -4186, -77, 32767, -77,
+ 32767, -4188, 0, -4189, 32767, 0, 0, 0,
+ 0, 32767, 0, 0, 0, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 32767, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -5937, -2358, 0, 0, 0,
+ -8286, 471, 472, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 1747, 32767, -2126, 32767, 32767, 1748,
+ 1749, 1750, 1751, 1752, 1753, 8224, 1755, -539,
+ 1757, 781, 32767, 32767, 32767, -1991, -2035, 32767,
+ 32767, 782, -3784, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 837, 32767, 32767, 32767, 32767, 32767, -4008,
+ -4008, -4008, 2949, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, -797, 1806, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 4605, 4606,
+ 32767, 32767, 0, 455, 32767, 0, 32767, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -4244, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 784, 32767, 32767, 2950, 2951, 32767, 32767, 32767,
+ 32767, 32767, 32767, 786, 787, 32767, 1252, 1253,
+ 32767, 790, 32767, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 32767, 0, 32767, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -200, -200, -200,
+ -200, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ -5932, -5932, 32767, 32767, 2952, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -5387,
+ -5387, -5387, -5387, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 0, 32767, 32767,
+ 0, 0, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 497, 498, 499, 500,
+ 501, 502, 503, 504, 505, 506, 507, 508,
+ 32767, 32767, -156, 765, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -861,
+ 32767, 6106, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2953, 2954, 32767, 797,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 2955, 32767, 32767, 32767, -8929,
+ 32767, -8885, -8885, -8885, 32767, 32767, 32767, 32767,
+ 32767, 32767, -749, 7119, 7120, 32767, 32767, 32767,
+ 32767, 2760, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, -1181, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -5587, 0, 7596,
+ 7597, 0, 0, 0, 0, 0, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -714, 0,
+ 0, -713, -712, 0, -711, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1859,
+ 0, 3247, 32767, 32767, 0, 3247, 0, 3248,
+ 0, 3249, 0, 3250, 0, 3251, 0, 3252,
+ 808, 3252, 0, 3253, 0, 3254, 0, 0,
+ 3256, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 0, 0, 0,
+ 0, 32767, 32767, 32767, 32767, 0, 0, 6824,
+ 32767, 0, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 4207, 4208, 0, 0, 0, 0, 0, 1896,
+ 0, 0, 1898, 1898, 1898, 1898, 0, 0,
+ 0, 1901, 1901, 0, 0, 0, 0, 0,
+ 0, -1319, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 7618, 7619, 7620,
+ 3, 3, 1863, 1863, 7067, 7068, 7025, 7026,
+ 7027, 7028, 7029, 7074, 7075, 7076, 7077, -334,
+ 7079, 7080, 7081, 7082, 7083, 7084, 7085, 7086,
+ 7087, 7088, 7089, 7090, 1349, 1349, 1349, 1349,
+ 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349,
+ 1349, 1349, 1349, 1349, 8967, 8968, 7109, 7110,
+ 1907, 1907, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 2976, 2977, 2978, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 820, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 821,
+ 2381, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 2005, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 823, 32767, 824, 32767,
+ 825, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 826, 32767, 32767, 32767, 32767, 32767,
+ 32767, 4575, 4576, 4577, 4578, 4579, 4580, 4581,
+ 4582, 4583, 4584, 4585, 32767, 32767, 829, 32767,
+ 32767, 32767, 32767, 830, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 6253, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 6253, -3848, 834, 835, 836, -3845, -3845, -3845,
+ -3845, -3845, -3845, 843, 844, -4280, 32767, 845,
+ 846, 6531, 848, -3839, 32767, -3840, -3840, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 1946, 32767,
+ 32767, 32767, -3849, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 853, 32767, 32767, 32767,
+ 32767, 854, 32767, 32767, 32767, 32767, 855, 32767,
+ 32767, 32767, 32767, 856, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 857, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -3799, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 8266, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 859, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 860,
+ 32767, 861, -5065, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 10746, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4526,
+ 32767, 4573, 4574, 4575, 32767, 32767, -2436, -1376,
+ 32767, 32767, 32767, 32767, 32767, -1689, -1689, 4349,
+ -4171, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 4588, 32767,
+ 4589, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4590,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 4591, 4592, 32767,
+ 32767, 32767, 32767, 32767, 32767, 2933, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 864, 32767, 32767, 32767,
+ 0, 32767, 0, 32767, 32767, -2977, 335, 335,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2992, 2993, 2994, 2995,
+ 32767, 32767, 32767, 4596, 2550, 32767, 32767, 32767,
+ -1188, 4769, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 4600, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 2997, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 4601, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 2013,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -11287,32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -4664, 32767, 32767, -4711, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -4718, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4049,
+ 32767, 32767, 32767, 4050, 4051, 4052, 17313, 32767,
+ 32767, 32767, 10684, 7370, 7371, 4057, 4058, 4059,
+ 4060, 4061, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 4603, 8793, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 1283, 4897, 4898, 4899, 12175, 4901, 4902, 32767,
+ 4903, 4904, 4905, 4906, 4907, 10276, -1469, 1282,
+ 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
+ 1282, 32767, 32767, 4920, 4921, 4063, -2051, -2050,
+ 4925, 4926, 32767, 7332, 7333, 32767, 7334, 7335,
+ 7336, 7337, 5045, 32767, 32767, 32767, -2049, -2048,
+ 32767, -8294, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1132, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 20166, 16852, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6908, 6909, 6910, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ -4510, -4510, -4510, -4510, -4510, -4510, -4510, 0,
+ 0, 0, 0, 0, 0, -1831, -1831, -1831,
+ -15091,-11776,-11776,-8461, 0, 0, 0, -1834,
+ -1834, -1834, -1834, -1834, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -1819, -3615, 1345, -3616, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 32767, 32767, 0,
+ 0, 0, 0, 0, 0, 0, 8770, 8771,
+ 8772, 8773, 8774, 8775, 8776, 8777, 8778, 8779,
+ 45, 45, 45, 45, 2477, 2522, 45, 45,
+ 45, 45, -13215,-9900, -9900, -6585, -6585, -3270,
+ -3270, 45, 45, 45, 45, 45, 8802, 8803,
+ 0, 0, 45, 45, 45, 45, 8810, 8811,
+ 0, 0, 45, 2700, 2701, 2702, 2703, 5134,
+ 2705, 2706, 0, 2708, 0, -5957, 0, -5957,
+ 0, 3312, 3312, 3312, 13053, 7051, 1095, 3314,
+ 0, 3315, 4896, 0, 3317, 3317, 3317, 3317,
+ 3317, 3317, 3317, 2720, 3317, 3317, 0, 3318,
+ 0, 3319, 0, 0, 3321, 8857, 8858, 8859,
+ 0, 0, 8862, 8863, 2749, 2750, 2751, 0,
+ 0, 0, 2755, 2756, 2757, 2758, 2759, 2760,
+ 2761, 2762, 2763, 2764, 2765, 2766, 2767, -3479,
+ -3479, 2770, 2771, 2772, 2773, 2774, 2775, 2776,
+ 2777, 2778, 2779, 2780, 2781, 1267, -1961, -1961,
+ 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792,
+ -1097, -1096, 2795, 2796, -1094, -1093, 4845, 0,
+ -1089, -1088, -1087, 7200, -1556, -1556, 7248, 7249,
+ 7205, 1037, 1038, 1039, -1559, -1559, 7253, 7254,
+ 7210, 7211, 200, 2803, 7168, 7215, 7216, 7217,
+ 7218, 7219, 208, 209, 1269, -1516, -1516, -1516,
+ 916, 961, 961, 961, 10693, -1520, -14780,218,
+ 219, 220, -3514, -3514, -3514, -3514, -3514, -3514,
+ -3514, 228, 7241, 7242, -1561, 8210, 8211, -1518,
+ -1518, 8214, 8215, 9195, 5881, 351, 8219, 8220,
+ 6448, 6449, 6450, 6451, 3864, 2870, 2871, 12671,
+ 12627, 0, 0, 0, 0, 0, 12709, 6471,
+ 12637, 12638, 5627, 8230, 12595, 12642, 2545, 8234,
+ 12645, 8236, 5634, 3341, 2545, 0, 0, 5749,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 0, 0, 11602,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 1466,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 5760, 0, 0, 0, 0, 0, 32767,
+ 0, 32767, 0, 0, 32767, 0, 0, 32767,
+ 0, 3507, 3508, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 1644, 1645, 1646, 1647, -5764, 1649, 1650, 1651,
+ 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659,
+ 1660, -4081, -4081, -4081, -4081, -4081, -4081, -4081,
+ -4081, -4081, -4081, -4081, -4081, -4081, -4081, -4081,
+ -4081, 3537, 3538, 1679, 3582, 3583, 3584, -3482,
+ -3482, -3482, -3482, -3482, -3526, -3526, -3526, -3526,
+ 3886, -3526, -3526, -3526, -3526, 3599, 3600, 3601,
+ 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609,
+ 3610, 3611, 3612, 3613, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 0,
+ -7275, 0, 0, -7234, 0, 0, 0, 0,
+ 0, -5368, 6378, 3628, 3629, 3630, 3631, 3632,
+ 3633, 3634, 3635, 3636, 3637, 3638, 3639, 0,
+ 0, 859, 6974, 6974, 0, 0, 3647, -2405,
+ -2405, 3650, -2405, -2405, -2405, -2405, -112, -2405,
+ -3201, 3658, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 32767, 32767, 32767,
+ 32767, 5280, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 4637, 4638, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 4014, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 802, 32767, 32767,
+ 32767, 32767, 803, -1055, 805, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 4639, 32767,
+ 32767, 32767, 806, -2445, 0, -2443, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 810, 32767, 32767,
+ 32767, 32767, 811, 812, 813, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -6211, -6211, -6211, -6211, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, -6271, -6271,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 935, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, -10300,32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 0, 32767, 32767, 4640, 4641, 32767,
+ 32767, 32767, 32767, 32767, 4624, 32767, 32767, 32767,
+ -4233, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 1859, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 872, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -4568, -1253, 32767,
+ -3590, 32767, 32767, 32767, -1820, -1820, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 873, 874, 875, 3629, 0, 0,
+ 0, 5048, 5005, 5006, 5007, 5008, 5009, 5054,
+ 5055, 5056, 0, 0, 0, 0, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4118,
+ 32767, 32767, 32767, 32767, -4122, -4122, -4122, -4122,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4193,
+ 32767, -4194, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -4209, 32767, 32767, -4211, -4211, -4211,
+ -4211, -4211, -4211, -4211, 32767, 32767, -4213, -10683,
+ -4213, -1918, -4213, -6043, 32767, 32767, -4215, -6047,
+ 32767, -4216, -10696,-4216, -4216, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 4646, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 876, 877, 0, 32767, 0, 32767, 0,
+ 32767, 0, 32767, 0, 32767, 32767, 32767, 0,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 1844, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -2899, 0, 32767,
+ 0, 32767, 0, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 836, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32767, 0, 0, 0, 879,
+ 880, 881, 882, 883, 884, 885, 886, 0,
+ 0, 887, 0, 920, 0, 922, 923, 924,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 5431,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 3639, 889, 890, 891, 892, 893,
+ 894, 895, 896, 897, 898, 899, 900, -2739,
+ 927, -1881, 4234, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, -459, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -458,
+ -457, 904, 32767, 905, 32767, 906, 32767, 907,
+ 32767, 908, 32767, 32767, 32767, 909, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 910,
+ 0, 0, 0, 0, 0, 0, 911, 0,
+ 912, 1626, 1626, 913, 914, 1626, 915, 916,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -1837, -1837, -1837,
+ -6487, -1837, -1837, 0, 0, 0, 917, 31,
+ 919, 0, 921, 0, 0, 0, 925, 0,
+ 32767, 4801, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -6470, 0, 2295,
+ 0, -1830, 0, -6475, 0, -1832, 0, 0,
+ -6480, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 3665, 0, 0,
+ 0, 0, 2281, 0, 0, -7412, 5769, 5770,
+ 5771, 5772, 5773, 5774, 0, 0, 0, 0,
+ 32767, 0, 0, 32767, 32767, 0, 32767, 32767,
+ 0, 0, 32767, 32767, 0, 0, 0, -1842,
+ 32767, 0, 0, 0, -1846, -1846, -2560, -1846,
+ 0, -2560, -2559, 0, 0, 32767, 0, 32767,
+ 0, 0, 0, 0, 0, 0, 1388, 0,
+ 1387, 1387, 1387, 0, 1387, 1387, 1387, 1387,
+ 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
+ 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
+ 1387, 0, -1870, 0, -1871, 0, 0, 0,
+ 0, 0, 0, -1877, 0, 0, -1877, -1877,
+ 0, 0, 0, 4944, 0, -1875, 4947, 4948,
+ 0, 4950, 4951, 4952, 4953, 4954, 4955, 4956,
+ 4957, 4958, 4959, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+ 32767, 32767, 0, 0, 0, 0, 32767, 32767,
+ 32767, 0, 0, 931, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 4650,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 5375,
+ 5376, 5377, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 13180, 0, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, -4011, 933, -4011, 32767,
+ 935, 936, -4012, 938, 939, 940, 941, 942,
+ 943, 944, 945, 946, 947, 32767, 1075, 1076,
+ 1077, -6334, 1079, 1080, 954, 32767, 32767, 32767,
+ 32767, 955, 32767, 32767, 32767, 32767, 32767, 32767,
+ -4659, 32767, 32767, 32767, -4662, -4662, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 959, 960, 961, 32767, 962, 963, 964,
+ 965, 966, 967, 968, 969, 970, 971, 972,
+ 32767, 973, 974, 975, 976, 977, 978, 979,
+ 980, 981, 982, 983, 984, 985, 986, 987,
+ 988, 989, 990, 32767, 991, 992, 993, 994,
+ 995, 996, 997, 998, 999, 1000, 1001, 1002,
+ 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
+ 1011, 1012, 1013, 1014, 1015, 1016, 1017, -362,
+ -362, 32767, 32767, 32767, 32767, -410, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1019, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 164, 1021, -3551, -3551, 1024, 1025, 1026, 1027,
+ 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035,
+ 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043,
+ 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051,
+ 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059,
+ 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067,
+ 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075,
+ 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083,
+ 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091,
+ 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099,
+ 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107,
+ 1108, 1109, 1110, 1111, 1112, 1113, 1114, 32767,
+ 1115, 1116, 1117, 1118, 1119, 32767, 1120, 1121,
+ 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129,
+ 1130, 1131, 0, 1133, 1134, 1135, 1136, 1137,
+ 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145,
+ 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153,
+ 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161,
+ 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169,
+ 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177,
+ 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185,
+ 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193,
+ 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201,
+ 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209,
+ -18956,-15641,1212, 1213, 1214, 1215, 1216, 1217,
+ 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225,
+ -5682, -5682, -5682, 1229, 1230, 1231, 1232, 1233,
+ 1234, 1235, 1236, 1237, 1238, 1239, 5750, 5751,
+ 5752, 5753, 5754, 5755, 5756, 1247, 1248, 1249,
+ 1250, 1251, 1252, 3084, 3085, 3086, 16347, 13033,
+ 13034, 9720, 1260, 1261, 1262, 3097, 3098, 3099,
+ 3100, 3101, 1268, 1269, 1270, 1271, 1272, 1273,
+ 1274, 1275, 32767, 32767, 32767, 32767, 1276, 1277,
+ 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285,
+ 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293,
+ 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301,
+ 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309,
+ 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317,
+ 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325,
+ 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333,
+ 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341,
+ 1342, 3162, 4959, 0, 4962, 1347, 1348, 1349,
+ 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357,
+ 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 7481,
+ 7482, 7483, 7484, 5053, 5009, 7487, 7488, 7489,
+ 7490, 20751, 17437, 17438, 14124, 14125, 10811, 10812,
+ 7498, 7499, 7500, 7501, 7502, 32767, 32767, 7548,
+ 7549, 7505, 7506, 7507, 7508, 32767, 32767, 7554,
+ 7555, 7511, 4857, 4857, 4857, 4857, 2427, 4857,
+ 4857, 7564, 4857, 7566, 13524, 7568, 13526, 7570,
+ 4259, 4260, 4261, -5479, 524, 6481, 4263, 7578,
+ 4264, 2684, 1421, -7842, -4527, -4527, -1212, -1212,
+ -1212, -1212, -1212, 7545, 7546, 0, 0, -1214,
+ -1214, -1214, -1214, 7551, 7552, 32767, 1610, -1216,
+ 1439, 1440, 1441, 1442, 3873, 1444, 1445, 32767,
+ 1446, 32767, -7220, 32767, -7221, 0, 2047, 2047,
+ 2047, 11788, 5786, -170, 2049, -1265, 2050, 3631,
+ -1265, 2052, 2052, 2052, 2052, 2052, 2052, 2052,
+ 1455, 2052, 2052, -1265, 2053, -1265, 2054, -1265,
+ -1265, 2056, 7592, 7593, 7594, 32767, 32767, 7595,
+ 7596, 1482, 1483, 1484, -1267, -1267, -1267, 1488,
+ 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496,
+ 1497, 1498, 1499, 1500, -4746, -4746, 1503, 1504,
+ 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512,
+ 1513, 1514, 0, -3228, -3228, 1518, 1519, 1520,
+ 1521, 1522, 1523, 1524, 1525, -2364, -2363, 1528,
+ 1529, -2361, -2360, 3578, 0, -2357, -2356, -2355,
+ 5932, -2824, -2824, 5980, 5981, 5937, -231, -230,
+ -229, -2827, -2827, 5985, -225, 5941, 5942, -1069,
+ 1534, 5899, 5946, 5947, 5948, 5949, 5950, -1061,
+ -1060, 0, -2785, 0, -355, -355, -310, -310,
+ -310, 9422, -2791, 32767, -1054, -1053, -1052, -4786,
+ -4786, -4786, -4786, -4786, -4786, -4786, -1044, 5969,
+ 5970, -2833, 6938, 6939, -2790, -2790, 6942, 0,
+ 32767, 4607, -923, 6945, 32767, 5173, 5174, 5175,
+ 5176, 2589, 1595, 1596, 11396, 11352, 32767, 32767,
+ 6126, 2812, 2813, 2814, 2815, 2816, -5940, -5940,
+ 1607, 1608, 2823, 32767, 32767, 1516, 0, -8581,
+ 0, 0, 728, 1525, 163, -11068,0, -2262,
+ -2306, -2305, 32767, 32767, 0, 0, 1580, 0,
+ 0, 0, -6443, 1685, -10176,-4173, 1784, -4173,
+ 0, -4172, 5925, -4171, -4171, -4171, 0, -437,
+ 0, 0, 0, 161, -435, 0, 2883, -434,
+ 0, 0, 0, 0, -436, 0, -5972, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2889,
+ 2890, 2891, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 6371,
+ 0, 0, 0, 0, 0, 0, 0, 117,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32767, 0, 0, 3991, 3991,
+ 3991, 3991, 0, 3990, 3990, 3990, -1947, 1632,
+ 3990, 3990, 3990, -4296, 4461, 4462, -4341, -4341,
+ -4296, 1873, 1873, 1873, 4472, 4473, -4338, 1873,
+ -4292, -4292, 2720, 118, -4246, -4292, -4292, 117,
+ -4293, -4293, 2719, 2719, 1660, 4446, 1662, 2018,
+ 2019, 1975, 1976, 1977, -7754, -7754, -8733, -5418,
+ 113, 0, 112, -2157, -5891, -5891, 0, -5892,
+ 6455, -5893, 0, 0, 0, 32767, 32767, 32767,
+ 5826, 32767, 32767, 32767, 32767, 6806, 32767, -2039,
+ 32767, 5829, 32767, 5830, 5831, 5832, 32767, 5833,
+ 5834, 32767, 5835, 32767, 32767, -3520, 0, 5837,
+ 0, 5838, 0, 4035, 0, 5840, 32767, 10251,
+ 154, 1671, 10253, 1673, 1674, 947, 151, 1514,
+ 12746, 1679, 3942, 3987, 3987, 3987, 13719, 13720,
+ 14700, 103, 5855, 13723, 5857, 8127, 0, 11862,
+ 5860, -96, 5862, 1690, 5863, -4233, 5864, 5865,
+ 5866, 5867, 5868, 5869, 5870, 5871, 5872, 5873,
+ 32767, 5874, 5875, 5876, 5877, 5878, 5879, 5880,
+ 5881, 5882, 5883, 13795, 5885, 5886, 5887, 5888,
+ 10489, 5890, 1703, 1704, -4247, 1706, 1707, 5891,
+ 5892, 5893, 1711, 4098, 5895, 5896, 5897, 7650,
+ 32767, 5899, 6406, 7966, 5902, 5903, 5904, 5905,
+ 5906, 5907, 5908, 1800, 5910, 1801, 5912, 5913,
+ 5914, 5915, 32767, 1727, 1728, 1729, 1730, 32767,
+ 1731, 1732, 1733, 32767, 1734, 1735, 1736, 1737,
+ 1738, 1739, 1740, 32767, 1741, 1742, 1743, 1744,
+ 1745, 1746, 32767, 32767, 32767, 32767, 1747, 1748,
+ 1749, 1750, 1751, 32767, 32767, 32767, 32767, 32767,
+ 32767, 1752, 1753, 1754, 1755, 1756, 1757, 1758,
+ 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766,
+ 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774,
+ 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782,
+ 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790,
+ 1791, 7729, 4151, 1794, 1795, 1796, 10083, 1327,
+ 1327, 10131, 10132, 10088, 3920, 3921, 3922, 1324,
+ 1324, 10136, 3926, 10092, 10093, 3082, 5685, 10050,
+ 10097, 0, 5689, 10100, 5691, 3089, 796, 0,
+ 1363, 12595, 3792, 3792, 3837, 3837, 3837, 13569,
+ 13570, 14550, 11236, 5706, 13574, 5708, 7978, 11713,
+ 11714, 11715, 11716, 11717, 11718, 11719, 7978, 966,
+ 966, 9770, 0, 0, 9730, 9731, 0, 0,
+ -979, 2336, 7867, 0, 0, 32767, 0, 0,
+ 0, 32767, 0, 0, 32767, 0, 32767, 32767,
+ 9356, 32767, 0, 32767, 0, 32767, 1804, 2602,
+ 0, -4364, -4410, 5688, 0, -4410, 0, 2603,
+ 4897, 5694, 4332, -6899, 1905, 1906, 1862, 1863,
+ 1864, -7867, -7867, -8846, -5531, 0, -7867, 0,
+ -2269, -6003, -6003, 0, 5957, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -7911, 0,
+ 0, 0, 0, -4600, 0, 0, 4156, 32767,
+ 32767, 0, 0, 0, 0, 0, 1796, 0,
+ 0, 0, -1752, 0, 0, -506, -2065, 0,
+ 0, 0, 0, 0, 0, 0, 4109, 0,
+ 4110, 0, 0, 0, 0, 0, 4111, 17372,
+ 0, 14058, 10744, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, -4650, 0, 0, 4161, 32767,
+ 32767, 4117, 32767, 4118, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, -7946, 32767, -4632, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4642,
+ -4642, 4123, 4124, -4687, 0, 0, -4644, -4644,
+ 0, 0, -4646, -4646, 32767, 32767, 32767, 32767,
+ 32767, 32767, 4084, 4085, 32767, 32767, 1609, 4087,
+ 32767, 32767, 4088, 17349, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 10092, 4136,
+ 10094, 4138, 10096, 0, 10097, 10098, 10099, 10100,
+ 10101, 0, 32767, 32767, 32767, 0, 0, 0,
+ 0, 0, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 0, 0, 0, 0,
+ 0, 0, 0, 32767, 32767, 0, 10138, 10139,
+ 0, 0, 0, 10145, 32767, 32767, 32767, 32767,
+ 32767, 32767, -1425, 8316, 2314, -3642, 32767, 0,
+ 32767, 32767, 32767, 32767, -1426, -1426, -1426, -1426,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 52, 52, 52, 52, 52,
+ 0, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 1849, 1850, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, -5633, -5633, -5633, -5633, -5633, -5633, -5633,
+ -5633, -5633, -5633, -5633, -5633, -5633, -5633, -5633,
+ -5633, 1985, 1986, 127, 2030, 2031, 2032, -5034,
+ 32767, 32767, 32767, 32767, 32767, 0, 32767, 32767,
+ 32767, 5916, 5917, 5918, 5919, 5920, 5921, 5922,
+ 5923, 5924, 8824, 5926, 32767, 32767, 0, 32767,
+ 0, 5927, 5928, 5929, 5930, 5931, 5932, 5933,
+ 5934, 5935, 5936, 5937, 5938, 5939, 5940, 5105,
+ 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5949,
+ 5950, 5951, 5952, 5953, 5954, 5955, 5956, 5957,
+ 32767, 5958, 5959, 5960, 5082, 5082, 5082, 5082,
+ 5082, 5082, 5082, 5082, 5969, 5970, 5084, 5972,
+ 5053, 5974, 5053, 5053, 5053, 5978, 5979, 5980,
+ 5981, 5982, 5983, 5984, 5985, 5986, 5987, 5988,
+ 5989, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2552, 32767, 32767, 32767,
+ 32767, 32767, 32767, 5990, 5991, 5992, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 5993, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 6936, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 1851, 1852, 1853, 1854,
+ 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862,
+ 1863, 1864, 1200, 2121, 1200, 1868, 1869, 1870,
+ 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878,
+ 1879, 1880, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, -5282, 1188,
+ 3483, 1188, -642, 1188, -5287, 1188, -644, 1188,
+ 1188, -5292, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1925, 1926,
+ -6187, -6231, 1184, 3465, 1184, 1184, -6228, 6953,
+ 6954, 6955, 6956, 0, 1939, 1940, 1941, 1942,
+ 1943, 1944, 1178, 1178, 1947, 1948, 1949, 1950,
+ 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958,
+ 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966,
+ 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974,
+ 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982,
+ 1983, 1984, 1985, 1986, 1987, 1988, 1989, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 0, 0, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 709, 666, 667, 668, 32767, 669,
+ 714, 715, 716, 717, -6694, 719, 720, 721,
+ 32767, 722, 723, 724, 32767, 725, 726, 727,
+ 728, -5013, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 6052, 0, 0, 6055,
+ 0, 0, 0, 0, 2293, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1244, 1245, 1246,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, -4660,
+ -4660, -4660, -4660, 4097, 4098, -4705, -4705, -4660,
+ -4660, -4660, -4660, 4105, 4106, -4705, 32767, -4661,
+ -4661, -4661, -4617, -4617, -4663, -4663, -4663, -4663,
+ -4663, -4663, -4663, 4072, 4073, 4074, 4075, 1644,
+ 1600, 4078, 4079, 4080, 4081, 17342, 14028, 14029,
+ 10715, 10716, 7402, 7403, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 0, 0,
+ 0, 32767, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 32767, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1380, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 856, 0, 4573,
+ 4574, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 32767, 0, 0, 0,
+ 0, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 5204, 5161, 5162, 5163, 5164, 5165, 5210, 5211,
+ 5212, 5213, -2198, 5215, 5216, 5217, 5218, 5219,
+ 5220, 5221, 5222, 5223, 5224, 5225, 5226, -515,
+ -515, -515, -515, -515, -515, -515, -515, -515,
+ -515, -515, -515, -515, -515, -515, -515, 7103,
+ 7104, 5245, 5246, 5247, 5248, 5249, -1014, 5251,
+ 5252, 5253, 5254, 5255, 5256, 5257, 5258, 5259,
+ 5260, 8663, 8664, -92, -92, 8712, 8713, 8669,
+ 8670, 8671, 8672, -92, -92, 8720, 8721, 8677,
+ 8678, 8679, 8636, 8637, 8684, 8685, 8686, 8687,
+ 8688, 8689, 8690, -44, -44, -44, -44, 2388,
+ 2433, -44, -44, -44, -44, -13304,-9989, -9989,
+ -6674, -6674, -3359, -3359, -44, -44, -44, -44,
+ -44, 8713, 8714, -89, -89, -44, -44, -44,
+ -44, 8721, 8722, -89, -89, -44, -44, -44,
+ 0, 0, -46, -46, -46, -46, -46, -46,
+ -46, 8689, 8690, 8691, 8692, 6261, 6217, 8695,
+ 8696, 8697, 8698, 21959, 18645, 18646, 15332, 15333,
+ 12019, 12020, 8706, 8707, 8708, 8709, 8710, -46,
+ -46, 8758, 8759, 8715, 8716, 8717, 8718, -46,
+ -46, 8766, 8767, 8723, 8724, 8725, 8726, 8727,
+ 8728, 8729, 8730, 8731, 8732, 8733, 8734, 0,
+ 0, 0, 0, 2432, 2477, 0, 0, 0,
+ 0, -13260,-9945, -9945, -6630, -6630, -3315, -3315,
+ 0, 0, 0, 0, 0, 8757, 8758, -45,
+ -45, 0, 0, 0, 0, 8765, 8766, -45,
+ -45, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 8735, 8736, 8737,
+ 8738, 6307, 6263, 8741, 8742, 8743, 8744, 22005,
+ 18691, 18692, 15378, 15379, 12065, 12066, 8752, 8753,
+ 8754, 8755, 8756, 0, 0, 8804, 8805, 8761,
+ 8762, 8763, 8764, 0, 0, 8812, 8813, 8769,
+ 6115, 6115, 6115, 6115, 3685, 6115, 6115, 8822,
+ 6115, 8824, 14782, 8826, 14784, 8828, 5517, 5518,
+ 5519, -4221, 1782, 7739, 5521, 8836, 5522, 3942,
+ 8839, 5523, 5524, 5525, 5526, 5527, 5528, 5529,
+ 6127, 5531, 5532, 8850, 5533, 8852, 5534, 8854,
+ 8855, 5535, 0, 0, 0, 8860, 8861, 0,
+ 0, 0, 13252, 9939, 9939, 6626, 6626, 3313,
+ 3313, 0, 0, 0, -9269, -3312, 0, 0,
+ 0, 9741, 32767, 32767, 0, 32767, 0, 32767,
+ 32767, 0, 0, 0, 0, 0, 0, 0,
+ -597, 0, 0, 32767, 0, 32767, 0, 32767,
+ 32767, 0, 0, 32767, 32767, 32767, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 32767, 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -1387, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, -1773, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 0,
+ 0, 0, 0, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, -4161, 1581, 1582, 32767, 32767, 1990, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 0, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 1539, 32767, 32767, 6150, 6151, 6152, 411,
+ 411, 411, 411, 411, 411, 411, 411, 411,
+ 411, 411, 411, 411, 411, 411, 411, 8029,
+ 8030, 6171, 6172, 969, 969, 1013, 1013, 1013,
+ 1013, 1013, 969, 969, 969, 969, 8381, 969,
+ 969, 969, 969, 969, 969, 969, 969, 969,
+ 969, 969, 969, 6711, 6712, 6713, 6714, 6715,
+ 6716, 6717, 6718, 6719, 6720, 6721, 6722, 6723,
+ 6724, 6725, 6726, -891, -891, 969, 969, 6173,
+ 6174, 6131, 6132, 6133, 6134, 6135, 6180, 6181,
+ 6182, 6183, -1228, 6185, 6186, 6187, 6188, 6189,
+ 6190, 6191, 6192, 6193, 6194, 6195, 6196, 455,
+ 455, 455, 455, 455, 455, 455, 455, 455,
+ 455, 455, 455, 455, 455, 455, 455, 8073,
+ 8074, 6215, 6216, 1013, 1013, 1057, 1057, 1057,
+ 1057, 1057, 1013, 1013, 1013, 1013, 8425, 1013,
+ 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
+ 1013, 1013, 1013, 6755, 6756, 6757, 6758, 6759,
+ 6760, 6761, 6762, 6763, 6764, 6765, 6766, 6767,
+ 6768, 6769, 6770, -847, -847, 1013, 1013, 6217,
+ 6218, 6175, 6176, 6177, 6178, 6179, 6224, 6225,
+ 6226, 6227, -1184, 6229, 6230, 6231, 6232, 6233,
+ 6234, 6235, 6236, 6237, 6238, 6239, 6240, 499,
+ 499, 499, 499, 499, 499, 499, 499, 499,
+ 499, 499, 499, 499, 499, 499, 499, 8117,
+ 8118, 6259, 6260, 6261, 6262, 6263, 0, 6265,
+ 6266, 6267, 6268, 6269, 6270, 6271, 6272, 6273,
+ 6274, 9677, 9678, 922, 922, 9726, 9727, 9683,
+ 9684, 9685, 9686, 922, 922, 9734, 9735, 9691,
+ 9692, 9693, 9650, 9651, 9698, 9699, 9700, 9701,
+ 9702, 9703, 9704, 970, 970, 970, 970, 3402,
+ 3447, 970, 970, 970, 970, -12290,-8975, -8975,
+ -5660, -5660, -2345, -2345, -2345, -2345, -2345, 6412,
+ 6413, -2390, -2390, -2345, -2345, -2345, -2345, 6420,
+ 6421, -2390, -2390, -2345, -2345, -2345, -2301, -2301,
+ -2347, -2347, -2347, -2347, -2347, -2347, -2347, 6388,
+ 6389, 6390, 6391, 3960, 3916, 6394, 6395, 6396,
+ 6397, 19658, 16344, 16345, 13031, 13032, 9718, 9719,
+ 6405, 6406, 6407, 6408, 6409, -2347, -2347, 6457,
+ 6458, 6414, 6415, 6416, 6417, -2347, -2347, 6465,
+ 6466, 6422, 6423, 6424, 6381, 6382, 6429, 6430,
+ 6431, 6432, 6433, 6434, 6435, -2299, -2299, -2299,
+ -2299, 133, 178, -2299, -2299, -2299, -2299, -15559,
+ -12244,-12244,-8929, -8929, -5614, -5614, -2299, -2299,
+ -2299, -2299, -2299, 6458, 6459, -2344, -2344, -2299,
+ -2299, -2299, -2299, 6466, 6467, -2344, -2344, -2299,
+ -2299, -2299, -2299, -2299, -2299, -2299, -2299, -2299,
+ -2299, -2299, -2299, 6436, 6437, 6438, 6439, 4008,
+ 3964, 6442, 6443, 6444, 6445, 19706, 16392, 16393,
+ 13079, 13080, 9766, 9767, 6453, 6454, 6455, 6456,
+ 6457, -2299, -2299, 6505, 6506, 6462, 6463, 6464,
+ 6465, -2299, -2299, 6513, 6514, 6470, 6471, 6472,
+ 6473, 6474, 6475, 6476, 6477, 6478, 6479, 6480,
+ 6481, -2253, -2253, -2253, -2253, 179, 224, -2253,
+ -2253, -2253, -2253, -15513,-12198,-12198,-8883, -8883,
+ -5568, -5568, -2253, -2253, -2253, -2253, -2253, 6504,
+ 6505, -2298, -2298, -2253, -2253, -2253, -2253, 6512,
+ 6513, -2298, -2298, -2253, 402, 403, 404, 405,
+ 2836, 407, 408, -2298, 410, -2298, -8255, -2298,
+ -8255, -2298, 1014, 1014, 1014, 10755, 4753, -1203,
+ 1016, -2298, 1017, 2598, -2298, 1019, 1019, 1019,
+ 1019, 1019, 1019, 1019, 422, 1019, 1019, -2298,
+ 1020, -2298, 1021, -2298, -2298, 1023, 6559, 6560,
+ 6561, -2298, -2298, 6564, 6565, 6566, -6685, -3371,
+ -3370, -56, -55, 3259, 3260, 3261, 12531, 6575,
+ 3264, 3265, 3266, -6474, -471, 5486, 3268, 6583,
+ 3269, 1689, 6586, 3270, 3271, 3272, 3273, 3274,
+ 3275, 3276, 3874, 3278, 3279, 6597, 3280, 6599,
+ 3281, 6601, 6602, 3282, 3283, 32767, 32767, 32767,
+ 3284, 3285, 3286, 3287, 3288, 3289, 3290, 3291,
+ 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3299,
+ 3300, 3301, 3302, 3303, 3304, 3305, 3306, 3307,
+ 3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315,
+ 3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323,
+ 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331,
+ 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339,
+ 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347,
+ 3348, 3349, 3350, 3351, 32767, 32767, 3352, 3353,
+ 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361,
+ 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369,
+ 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377,
+ 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385,
+ 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393,
+ 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401,
+ 3402, 3403, 3404, 3405, 3406, 3407, 4795, 3409,
+ 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417,
+ 3418, 3419, 3420, 3421, 3422, 3423, 3424, 3425,
+ 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433,
+ 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441,
+ 3442, 3443, 3444, 3445, 3446, 3447, 3448, 3449,
+ 3450, 3451, 3452, 3453, 3454, 3455, 3456, 3457,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 3458,
+ 3459, 3460, 3461, 3462, -8139, 3464, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 3465, 3466, 2001, 3468, 3469, 32767,
+ 32767, 32767, 32767, 32767, 3470, 3471, 3472, 3473,
+ 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481,
+ 3482, 3483, 3484, 3485, 3486, 3487, 3488, 3489,
+ 3490, 3491, 3492, 3493, 3494, 3495, 32767, 3496,
+ 3497, 3498, 3499, 3500, 32767, 3501, 32767, 3502,
+ 3503, 32767, 3504, 3505, 32767, 3506, 0, 0,
+ 3509, 3510, 3511, 3512, 3513, 3514, 3515, 3516,
+ 3517, 3518, 3519, 3520, 3521, 3522, 3523, 3524,
+ 3525, 3526, 3527, 3528, 3529, 3530, 3531, 3532,
+ 3533, 3534, 3535, 3536, 3537, 3538, 3539, 3540,
+ 3541, 3542, 3543, 3544, 3545, 1902, 1902, 1902,
+ 1902, 9314, 1902, 1902, 1902, 1902, 1902, 1902,
+ 1902, 1902, 1902, 1902, 1902, 1902, 7644, 7645,
+ 7646, 7647, 7648, 7649, 7650, 7651, 7652, 7653,
+ 7654, 7655, 7656, 7657, 7658, 7659, 42, 42,
+ 1902, 0, 0, 0, 7067, 7068, 7069, 7070,
+ 7071, 7116, 7117, 7118, 7119, -292, 7121, 7122,
+ 7123, 7124, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3614, 3615, 3616, 10892, 3618, 3619,
+ 10854, 3621, 3622, 3623, 3624, 3625, 8994, -2751,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3640, 3641, 2783, -3331,
+ -3330, 3645, 3646, 0, 6053, 6054, 0, 6056,
+ 6057, 6058, 6059, 3767, 6061, 6858, 0, 0,
+ 3659, 0, 0, 1531, 1531, 1531, 1531, 1531,
+ 1531, 1531, 1531, 1531, 1531, 1531, 1531, 1531,
+ 1531, 1531, 9149, 9150, 7291, 7292, 7293, 7294,
+ 7295, 1032, 7297, 7298, 7299, 7300, 7301, 7302,
+ 7303, 7304, 0, 7307, 10710, 10711, 1955, 1955,
+ 10759, 10760, 10716, 4548, 4549, 4550, 1952, 1952,
+ 10764, 10765, 10721, 10722, 3711, 6314, 10679, 10726,
+ 10727, 10728, 10729, 10730, 3719, 3720, 1996, 1996,
+ 1996, 1996, 4428, 4473, 4473, 3728, 1994, 1994,
+ -11266,3732, 3733, 3734, 0, 0, 0, 0,
+ 0, 0, 0, 3742, 10755, 10756, 1953, 1953,
+ 1998, 1998, 1998, 11730, 11731, 12711, 9397, 3867,
+ 11735, 3869, 6139, 9874, 9875, 9876, 9877, 9878,
+ 9879, 9880, 6139, -873, -873, 7931, -1839, -1839,
+ 7891, 7892, -1839, -1839, -2818, 497, 6028, -1839,
+ -1839, -66, -66, -66, -66, 2522, 2523, -6280,
+ -6280, -6235, -66, -66, -66, 2533, 2534, -6277,
+ -66, -6231, -6231, 781, -1821, -6185, -6231, 3867,
+ -1821, -6231, -1821, 782, 3076, 3873, 2511, -8720,
+ 84, 85, 41, 42, 43, -9688, -9688, -10667,
+ -7352, -1821, -9688, -1821, -4090, -7824, -7824, -7824,
+ -7824, -7824, -7824, -7824, -4082, 2931, 2932, -5871,
+ 3900, 3901, -5828, -5828, 3904, 3905, 4885, 1571,
+ -3959, 3909, 3910, 2138, 2139, 2140, 2141, -446,
+ -446, 8358, 8359, 8315, 2147, 2148, 2149, -449,
+ -449, 8363, 2153, 8319, 8320, 1309, 3912, 8277,
+ 8324, -1773, 3916, 8327, 3918, 1316, -977, -1773,
+ -410, 10822, 2019, 2019, 2064, 2064, 2064, 11796,
+ 11797, 12777, 9463, 3933, 11801, 3935, 6205, 9940,
+ 9941, 9942, 9943, 9944, 9945, 9946, 6205, -807,
+ -807, 7997, -1773, -1773, 7957, 7958, -1773, -1773,
+ -2752, 563, 6094, -1773, -1773, 0, 0, 0,
+ 0, 2588, 2589, -6214, -6214, -6169, 0, 0,
+ 0, 2599, 2600, -6211, 0, -6165, -6165, 847,
+ -1755, -6119, -6165, 3933, -1755, -6165, -1755, 848,
+ 3142, 3939, 2577, -8654, 150, 151, 107, 108,
+ 109, -9622, -9622, -10601,-7286, -1755, -9622, -1755,
+ -4024, -7758, -7758, -7758, -7758, -7758, -7758, -7758,
+ -4016, 2997, 2998, -5805, 3966, 3967, -5762, -5762,
+ 3970, 3971, 4951, 1637, -3893, 3975, 3976, 2204,
+ 2205, 2206, 2207, -380, -380, 8424, 8425, 8381,
+ 2213, 2214, 2215, -383, -383, 8429, 2219, 8385,
+ 8386, 1375, 3978, 8343, 8390, -1707, 3982, 8393,
+ 3984, 1382, -911, -1707, -344, 10888, 2085, 2085,
+ 2130, 2130, 2130, 11862, 11863, 12843, 9529, 3999,
+ 11867, 4001, 6271, 10006, 10007, 4005, -1951, 4007,
+ 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4015,
+ 4016, 4017, 4018, 4019, 4020, 4021, 4022, 4023,
+ 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031,
+ 11943, 4033, 4034, 4035, 4036, 8637, 4038, 4039,
+ -116, 32767, 32767, 4041, 4042, 4043, 4044, 4045,
+ 2250, 4047, 4048, 4049, 5802, 4051, 4052, 4559,
+ 6119, 4055, 4056, 4057, 4058, 4059, 4060, 4061,
+ -47, 4063, -46, 4065, 4066, 4067, 4068, 4069,
+ -41, -13301,4072, -9985, -6670, 4075, 4076, 4077,
+ 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085,
+ 4086, 4087, 4088, 4089, 4090, 8741, 4092, 4093,
+ -67, 32767, 32767, 32767, 32767, 32767, 2257, 32767,
+ 2258, 2259, 2260, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 2261, 32767, 2262, 32767,
+ 2263, 32767, 2264, 32767, 2265, 32767, 2266, 32767,
+ 2267, 8737, 8738, -26, -26, 8786, 4100, 4101,
+ 8746, 8747, 4104, 4105, 8752, 8753, 32767, 2274,
+ 32767, 2275, 32767, 32767, 32767, 32767, 32767, 32767,
+ 2276, 2277, 32767, 2278, 2279, 32767, 2280, 0,
+ 32767, 2282, 9695, 4109, -3486, -3486, 4112, 4113,
+ 4114, 4115, 4116, 4117, 32767, 32767, 32767, 32767,
+ 32767, 32767, 4118, 4119, 4120, 4121, 4122, 4123,
+ 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131,
+ 4132, 4133, 4134, 4849, 4136, 4137, 4851, 4851,
+ 4140, 4852, 4142, 4143, 4144, 4145, 4146, 4147,
+ 4148, 4149, 4150, 4151, 2293, 4153, 907, 32767,
+ 2295, 4155, 909, 4157, 910, 4159, 911, 4161,
+ 912, 4163, 913, 4165, 914, 32767, 915, 4168,
+ 916, 4170, 917, 4172, 4173, 918, 4175, 4176,
+ 4177, 4178, 4179, 4180, 4181, 4182, 4183, 4184,
+ 4185, 2309, 4186, 4187, 4188, 4189, 2312, 2313,
+ 32767, 2314, 4190, 4191, -2632, 2317, 4193, 32767,
+ 4194, 4195, 4196, 4197, 4198, 4199, 4200, 4201,
+ 4202, 4203, 4204, 4205, 4206, 0, 0, 4209,
+ 4210, 4211, 4212, 4213, 2318, 4215, 4216, 2319,
+ 2320, 2321, 2322, 4221, 4222, 4223, 2323, 2324,
+ 4226, 4227, 4228, 4229, 4230, 4231, 5551, 4233,
+ 4234, 4235, 4236, 4237, 4238, 4239, 4240, 4241,
+ 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249,
+ 4250, 4251, 4252, 4253, 4254, 4255, 4256, 4257,
+ 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265,
+ 4266, 4267, 4268, 4269, 4270, 4271, 4272, 4273,
+ 4274, 4275, -3342, -3342, -3342, 4276, 4277, 2418,
+ 2419, -2784, -2784, -2740, -2740, -2740, -2740, -2740,
+ -2784, -2784, -2784, -2784, 4628, -2784, -2784, -2784,
+ -2784, -2784, -2784, -2784, -2784, -2784, -2784, -2784,
+ -2784, 2958, 2959, 2960, 2961, 2962, 2963, 2964,
+ 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972,
+ 2973, -4644, -4644, -2784, -2784, 2420, 2421, 2378,
+ 2379, 2380, 2381, 2382, 2427, 2428, 2429, 2430,
+ -4981, 2432, 2433, 2434, 2435, 2436, 2437, 2438,
+ 2439, 2440, 2441, 2442, 2443, -3298, -3298, -3298,
+ -3298, -3298, -3298, -3298, -3298, -3298, -3298, -3298,
+ -3298, -3298, -3298, -3298, -3298, 4320, 4321, 2462,
+ 4365, 4366, 4367, -2699, -2699, -2699, -2699, -2699,
+ -2743, -2743, -2743, -2743, 4669, -2743, -2743, -2743,
+ -2743, 4382, 4383, 4384, 4385, 4386, 4387, 4388,
+ 4389, 4390, 4391, 4392, 4393, 4394, 4395, 4396,
+ 4397, 4398, 4399, 4400, 4401, 4402, 4403, 4404,
+ 4405, 4406, 4407, 4408, 4409, 4410, 4411, 4412,
+ 4413, 4414, 4415, 4416, 4417, 4418, 4419, 4420,
+ 4421, 4422, 4423, 4424, 4425, 4426, 4427, 4428,
+ 4429, 816, 816, 816, -6459, 816, 816, -6418,
+ 816, 816, 816, 816, 816, -4552, 7194, 4444,
+ 4445, 4446, 4447, 4448, 4449, 4450, 4451, 4452,
+ 4453, 4454, 4455, 816, 816, 1675, 7790, 7790,
+ 816, 816, 4463, -1589, -1589, 4466, -1589, -1589,
+ -1589, -1589, 704, -1589, -2385, 4474, 4475, 817,
+ 4477, 4478, 2948, 2949, 2950, 2951, 2952, 2953,
+ 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961,
+ 2962, -4655, -4655, -2795, -2795, -2795, -2795, -2795,
+ 3469, -2795, -2795, -2795, -2795, -2795, -2795, -2795,
+ -2795, 4510, -2796, -6198, -6198, 2559, 2560, -6243,
+ -6243, -6198, -6198, -6198, -6198, 2567, 2568, -6243,
+ -6243, -6198, -6198, -6198, -6154, -6154, -6200, -6200,
+ -6200, -6200, -6200, -6200, -6200, 2535, 2536, 2537,
+ 2538, 107, 63, 2541, 2542, 2543, 2544, 15805,
+ 12491, 12492, 32767, 4540, 4541, 4542, 4543, 4544,
+ 4545, 4546, 2548, -6208, -6208, 2596, 2597, 2553,
+ 2554, 2555, 2556, -6208, -6208, 2604, 2605, 2561,
+ 2562, 2563, 2520, 2521, 2568, 2569, 2570, 2571,
+ 2572, 2573, 2574, -6160, -6160, -6160, -6160, -3728,
+ -3683, -6160, -6160, -6160, -6160, -19420,-16105,-16105,
+ -12790,-12790,-9475, -9475, -6160, -6160, -6160, -6160,
+ -6160, 32767, 2597, -6206, -6206, -6161, -6161, -6161,
+ -6161, 2604, 2605, -6206, -6206, -6161, -6161, -6161,
+ -6161, -6161, -6161, -6161, -6161, -6161, -6161, -6161,
+ -6161, 2574, 2575, 2576, 2577, 146, 102, 2580,
+ 2581, 2582, 2583, 15844, 12530, 12531, 9217, 9218,
+ 5904, 5905, 2591, 2592, 2593, 2594, 2595, -6161,
+ -6161, 2643, 2644, 2600, 2601, 2602, 2603, -6161,
+ -6161, 2651, 2652, 2608, 2609, 2610, 2611, 2612,
+ 2613, 2614, 2615, 2616, 2617, 2618, 2619, -6115,
+ -6115, -6115, -6115, -3683, -3638, -6115, -6115, -6115,
+ -6115, -19375,-16060,-16060,-12745,-12745,-9430, -9430,
+ -6115, -6115, -6115, -6115, -6115, 2642, 2643, -6160,
+ -6160, -6115, -6115, -6115, -6115, 2650, 2651, -6160,
+ -6160, -6115, -3460, -3459, -3458, -3457, -1026, -3455,
+ -3454, -6160, -3452, -6160, -12117,-6160, -12117,-6160,
+ -2848, -2848, -2848, 6893, 891, -5065, -2846, -6160,
+ -2845, -1264, 0, 9264, 5950, 5951, 2637, 2638,
+ 2639, 2640, 2641, -6115, -6115, 2689, 2690, 2646,
+ 2647, 2648, 2649, -6115, -6115, 2697, 2698, 2654,
+ 0, 0, 0, 0, -2430, 0, 0, 2707,
+ 0, 2709, 8667, 2711, 8669, 2713, -598, -597,
+ -596, -10336,-4333, 1624, -594, 2721, -593, -2173,
+ 2724, -592, -591, -590, -589, -588, -587, -586,
+ 12, -584, -583, 2735, -582, 2737, -581, 2739,
+ 2740, -580, -6115, -6115, -6115, 2745, 2746, -6115,
+ -6115, 0, 0, 0, 2752, 2753, 2754, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 6247, 6248, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0
+ };
+
+ const unsigned char *k = (const unsigned char *) key;
+ size_t keylen = 4;
+ uint32 a = 0;
+ uint32 b = 1;
+
+ while (keylen--)
+ {
+ unsigned char c = *k++;
+
+ a = a * 257 + c;
+ b = b * 8191 + c;
+ }
+ return h[a % 13209] + h[b % 13209];
+}
+
+/* Hash lookup information for decomposition */
+static const pg_unicode_decompinfo UnicodeDecompInfo =
+{
+ UnicodeDecompMain,
+ Decomp_hash_func,
+ 6604
+};
+
+/* Inverse lookup array -- contains indexes into UnicodeDecompMain[] */
+static const uint16 RecompInverseLookup[941] =
+{
+ /* U+003C+0338 -> U+226E */ 1823,
+ /* U+003D+0338 -> U+2260 */ 1820,
+ /* U+003E+0338 -> U+226F */ 1824,
+ /* U+0041+0300 -> U+00C0 */ 14,
+ /* U+0041+0301 -> U+00C1 */ 15,
+ /* U+0041+0302 -> U+00C2 */ 16,
+ /* U+0041+0303 -> U+00C3 */ 17,
+ /* U+0041+0304 -> U+0100 */ 67,
+ /* U+0041+0306 -> U+0102 */ 69,
+ /* U+0041+0307 -> U+0226 */ 270,
+ /* U+0041+0308 -> U+00C4 */ 18,
+ /* U+0041+0309 -> U+1EA2 */ 1278,
+ /* U+0041+030A -> U+00C5 */ 19,
+ /* U+0041+030C -> U+01CD */ 194,
+ /* U+0041+030F -> U+0200 */ 240,
+ /* U+0041+0311 -> U+0202 */ 242,
+ /* U+0041+0323 -> U+1EA0 */ 1276,
+ /* U+0041+0325 -> U+1E00 */ 1120,
+ /* U+0041+0328 -> U+0104 */ 71,
+ /* U+0042+0307 -> U+1E02 */ 1122,
+ /* U+0042+0323 -> U+1E04 */ 1124,
+ /* U+0042+0331 -> U+1E06 */ 1126,
+ /* U+0043+0301 -> U+0106 */ 73,
+ /* U+0043+0302 -> U+0108 */ 75,
+ /* U+0043+0307 -> U+010A */ 77,
+ /* U+0043+030C -> U+010C */ 79,
+ /* U+0043+0327 -> U+00C7 */ 20,
+ /* U+0044+0307 -> U+1E0A */ 1130,
+ /* U+0044+030C -> U+010E */ 81,
+ /* U+0044+0323 -> U+1E0C */ 1132,
+ /* U+0044+0327 -> U+1E10 */ 1136,
+ /* U+0044+032D -> U+1E12 */ 1138,
+ /* U+0044+0331 -> U+1E0E */ 1134,
+ /* U+0045+0300 -> U+00C8 */ 21,
+ /* U+0045+0301 -> U+00C9 */ 22,
+ /* U+0045+0302 -> U+00CA */ 23,
+ /* U+0045+0303 -> U+1EBC */ 1304,
+ /* U+0045+0304 -> U+0112 */ 83,
+ /* U+0045+0306 -> U+0114 */ 85,
+ /* U+0045+0307 -> U+0116 */ 87,
+ /* U+0045+0308 -> U+00CB */ 24,
+ /* U+0045+0309 -> U+1EBA */ 1302,
+ /* U+0045+030C -> U+011A */ 91,
+ /* U+0045+030F -> U+0204 */ 244,
+ /* U+0045+0311 -> U+0206 */ 246,
+ /* U+0045+0323 -> U+1EB8 */ 1300,
+ /* U+0045+0327 -> U+0228 */ 272,
+ /* U+0045+0328 -> U+0118 */ 89,
+ /* U+0045+032D -> U+1E18 */ 1144,
+ /* U+0045+0330 -> U+1E1A */ 1146,
+ /* U+0046+0307 -> U+1E1E */ 1150,
+ /* U+0047+0301 -> U+01F4 */ 230,
+ /* U+0047+0302 -> U+011C */ 93,
+ /* U+0047+0304 -> U+1E20 */ 1152,
+ /* U+0047+0306 -> U+011E */ 95,
+ /* U+0047+0307 -> U+0120 */ 97,
+ /* U+0047+030C -> U+01E6 */ 216,
+ /* U+0047+0327 -> U+0122 */ 99,
+ /* U+0048+0302 -> U+0124 */ 101,
+ /* U+0048+0307 -> U+1E22 */ 1154,
+ /* U+0048+0308 -> U+1E26 */ 1158,
+ /* U+0048+030C -> U+021E */ 268,
+ /* U+0048+0323 -> U+1E24 */ 1156,
+ /* U+0048+0327 -> U+1E28 */ 1160,
+ /* U+0048+032E -> U+1E2A */ 1162,
+ /* U+0049+0300 -> U+00CC */ 25,
+ /* U+0049+0301 -> U+00CD */ 26,
+ /* U+0049+0302 -> U+00CE */ 27,
+ /* U+0049+0303 -> U+0128 */ 103,
+ /* U+0049+0304 -> U+012A */ 105,
+ /* U+0049+0306 -> U+012C */ 107,
+ /* U+0049+0307 -> U+0130 */ 111,
+ /* U+0049+0308 -> U+00CF */ 28,
+ /* U+0049+0309 -> U+1EC8 */ 1316,
+ /* U+0049+030C -> U+01CF */ 196,
+ /* U+0049+030F -> U+0208 */ 248,
+ /* U+0049+0311 -> U+020A */ 250,
+ /* U+0049+0323 -> U+1ECA */ 1318,
+ /* U+0049+0328 -> U+012E */ 109,
+ /* U+0049+0330 -> U+1E2C */ 1164,
+ /* U+004A+0302 -> U+0134 */ 114,
+ /* U+004B+0301 -> U+1E30 */ 1168,
+ /* U+004B+030C -> U+01E8 */ 218,
+ /* U+004B+0323 -> U+1E32 */ 1170,
+ /* U+004B+0327 -> U+0136 */ 116,
+ /* U+004B+0331 -> U+1E34 */ 1172,
+ /* U+004C+0301 -> U+0139 */ 118,
+ /* U+004C+030C -> U+013D */ 122,
+ /* U+004C+0323 -> U+1E36 */ 1174,
+ /* U+004C+0327 -> U+013B */ 120,
+ /* U+004C+032D -> U+1E3C */ 1180,
+ /* U+004C+0331 -> U+1E3A */ 1178,
+ /* U+004D+0301 -> U+1E3E */ 1182,
+ /* U+004D+0307 -> U+1E40 */ 1184,
+ /* U+004D+0323 -> U+1E42 */ 1186,
+ /* U+004E+0300 -> U+01F8 */ 232,
+ /* U+004E+0301 -> U+0143 */ 126,
+ /* U+004E+0303 -> U+00D1 */ 29,
+ /* U+004E+0307 -> U+1E44 */ 1188,
+ /* U+004E+030C -> U+0147 */ 130,
+ /* U+004E+0323 -> U+1E46 */ 1190,
+ /* U+004E+0327 -> U+0145 */ 128,
+ /* U+004E+032D -> U+1E4A */ 1194,
+ /* U+004E+0331 -> U+1E48 */ 1192,
+ /* U+004F+0300 -> U+00D2 */ 30,
+ /* U+004F+0301 -> U+00D3 */ 31,
+ /* U+004F+0302 -> U+00D4 */ 32,
+ /* U+004F+0303 -> U+00D5 */ 33,
+ /* U+004F+0304 -> U+014C */ 133,
+ /* U+004F+0306 -> U+014E */ 135,
+ /* U+004F+0307 -> U+022E */ 278,
+ /* U+004F+0308 -> U+00D6 */ 34,
+ /* U+004F+0309 -> U+1ECE */ 1322,
+ /* U+004F+030B -> U+0150 */ 137,
+ /* U+004F+030C -> U+01D1 */ 198,
+ /* U+004F+030F -> U+020C */ 252,
+ /* U+004F+0311 -> U+020E */ 254,
+ /* U+004F+031B -> U+01A0 */ 181,
+ /* U+004F+0323 -> U+1ECC */ 1320,
+ /* U+004F+0328 -> U+01EA */ 220,
+ /* U+0050+0301 -> U+1E54 */ 1204,
+ /* U+0050+0307 -> U+1E56 */ 1206,
+ /* U+0052+0301 -> U+0154 */ 139,
+ /* U+0052+0307 -> U+1E58 */ 1208,
+ /* U+0052+030C -> U+0158 */ 143,
+ /* U+0052+030F -> U+0210 */ 256,
+ /* U+0052+0311 -> U+0212 */ 258,
+ /* U+0052+0323 -> U+1E5A */ 1210,
+ /* U+0052+0327 -> U+0156 */ 141,
+ /* U+0052+0331 -> U+1E5E */ 1214,
+ /* U+0053+0301 -> U+015A */ 145,
+ /* U+0053+0302 -> U+015C */ 147,
+ /* U+0053+0307 -> U+1E60 */ 1216,
+ /* U+0053+030C -> U+0160 */ 151,
+ /* U+0053+0323 -> U+1E62 */ 1218,
+ /* U+0053+0326 -> U+0218 */ 264,
+ /* U+0053+0327 -> U+015E */ 149,
+ /* U+0054+0307 -> U+1E6A */ 1226,
+ /* U+0054+030C -> U+0164 */ 155,
+ /* U+0054+0323 -> U+1E6C */ 1228,
+ /* U+0054+0326 -> U+021A */ 266,
+ /* U+0054+0327 -> U+0162 */ 153,
+ /* U+0054+032D -> U+1E70 */ 1232,
+ /* U+0054+0331 -> U+1E6E */ 1230,
+ /* U+0055+0300 -> U+00D9 */ 35,
+ /* U+0055+0301 -> U+00DA */ 36,
+ /* U+0055+0302 -> U+00DB */ 37,
+ /* U+0055+0303 -> U+0168 */ 157,
+ /* U+0055+0304 -> U+016A */ 159,
+ /* U+0055+0306 -> U+016C */ 161,
+ /* U+0055+0308 -> U+00DC */ 38,
+ /* U+0055+0309 -> U+1EE6 */ 1346,
+ /* U+0055+030A -> U+016E */ 163,
+ /* U+0055+030B -> U+0170 */ 165,
+ /* U+0055+030C -> U+01D3 */ 200,
+ /* U+0055+030F -> U+0214 */ 260,
+ /* U+0055+0311 -> U+0216 */ 262,
+ /* U+0055+031B -> U+01AF */ 183,
+ /* U+0055+0323 -> U+1EE4 */ 1344,
+ /* U+0055+0324 -> U+1E72 */ 1234,
+ /* U+0055+0328 -> U+0172 */ 167,
+ /* U+0055+032D -> U+1E76 */ 1238,
+ /* U+0055+0330 -> U+1E74 */ 1236,
+ /* U+0056+0303 -> U+1E7C */ 1244,
+ /* U+0056+0323 -> U+1E7E */ 1246,
+ /* U+0057+0300 -> U+1E80 */ 1248,
+ /* U+0057+0301 -> U+1E82 */ 1250,
+ /* U+0057+0302 -> U+0174 */ 169,
+ /* U+0057+0307 -> U+1E86 */ 1254,
+ /* U+0057+0308 -> U+1E84 */ 1252,
+ /* U+0057+0323 -> U+1E88 */ 1256,
+ /* U+0058+0307 -> U+1E8A */ 1258,
+ /* U+0058+0308 -> U+1E8C */ 1260,
+ /* U+0059+0300 -> U+1EF2 */ 1358,
+ /* U+0059+0301 -> U+00DD */ 39,
+ /* U+0059+0302 -> U+0176 */ 171,
+ /* U+0059+0303 -> U+1EF8 */ 1364,
+ /* U+0059+0304 -> U+0232 */ 282,
+ /* U+0059+0307 -> U+1E8E */ 1262,
+ /* U+0059+0308 -> U+0178 */ 173,
+ /* U+0059+0309 -> U+1EF6 */ 1362,
+ /* U+0059+0323 -> U+1EF4 */ 1360,
+ /* U+005A+0301 -> U+0179 */ 174,
+ /* U+005A+0302 -> U+1E90 */ 1264,
+ /* U+005A+0307 -> U+017B */ 176,
+ /* U+005A+030C -> U+017D */ 178,
+ /* U+005A+0323 -> U+1E92 */ 1266,
+ /* U+005A+0331 -> U+1E94 */ 1268,
+ /* U+0061+0300 -> U+00E0 */ 40,
+ /* U+0061+0301 -> U+00E1 */ 41,
+ /* U+0061+0302 -> U+00E2 */ 42,
+ /* U+0061+0303 -> U+00E3 */ 43,
+ /* U+0061+0304 -> U+0101 */ 68,
+ /* U+0061+0306 -> U+0103 */ 70,
+ /* U+0061+0307 -> U+0227 */ 271,
+ /* U+0061+0308 -> U+00E4 */ 44,
+ /* U+0061+0309 -> U+1EA3 */ 1279,
+ /* U+0061+030A -> U+00E5 */ 45,
+ /* U+0061+030C -> U+01CE */ 195,
+ /* U+0061+030F -> U+0201 */ 241,
+ /* U+0061+0311 -> U+0203 */ 243,
+ /* U+0061+0323 -> U+1EA1 */ 1277,
+ /* U+0061+0325 -> U+1E01 */ 1121,
+ /* U+0061+0328 -> U+0105 */ 72,
+ /* U+0062+0307 -> U+1E03 */ 1123,
+ /* U+0062+0323 -> U+1E05 */ 1125,
+ /* U+0062+0331 -> U+1E07 */ 1127,
+ /* U+0063+0301 -> U+0107 */ 74,
+ /* U+0063+0302 -> U+0109 */ 76,
+ /* U+0063+0307 -> U+010B */ 78,
+ /* U+0063+030C -> U+010D */ 80,
+ /* U+0063+0327 -> U+00E7 */ 46,
+ /* U+0064+0307 -> U+1E0B */ 1131,
+ /* U+0064+030C -> U+010F */ 82,
+ /* U+0064+0323 -> U+1E0D */ 1133,
+ /* U+0064+0327 -> U+1E11 */ 1137,
+ /* U+0064+032D -> U+1E13 */ 1139,
+ /* U+0064+0331 -> U+1E0F */ 1135,
+ /* U+0065+0300 -> U+00E8 */ 47,
+ /* U+0065+0301 -> U+00E9 */ 48,
+ /* U+0065+0302 -> U+00EA */ 49,
+ /* U+0065+0303 -> U+1EBD */ 1305,
+ /* U+0065+0304 -> U+0113 */ 84,
+ /* U+0065+0306 -> U+0115 */ 86,
+ /* U+0065+0307 -> U+0117 */ 88,
+ /* U+0065+0308 -> U+00EB */ 50,
+ /* U+0065+0309 -> U+1EBB */ 1303,
+ /* U+0065+030C -> U+011B */ 92,
+ /* U+0065+030F -> U+0205 */ 245,
+ /* U+0065+0311 -> U+0207 */ 247,
+ /* U+0065+0323 -> U+1EB9 */ 1301,
+ /* U+0065+0327 -> U+0229 */ 273,
+ /* U+0065+0328 -> U+0119 */ 90,
+ /* U+0065+032D -> U+1E19 */ 1145,
+ /* U+0065+0330 -> U+1E1B */ 1147,
+ /* U+0066+0307 -> U+1E1F */ 1151,
+ /* U+0067+0301 -> U+01F5 */ 231,
+ /* U+0067+0302 -> U+011D */ 94,
+ /* U+0067+0304 -> U+1E21 */ 1153,
+ /* U+0067+0306 -> U+011F */ 96,
+ /* U+0067+0307 -> U+0121 */ 98,
+ /* U+0067+030C -> U+01E7 */ 217,
+ /* U+0067+0327 -> U+0123 */ 100,
+ /* U+0068+0302 -> U+0125 */ 102,
+ /* U+0068+0307 -> U+1E23 */ 1155,
+ /* U+0068+0308 -> U+1E27 */ 1159,
+ /* U+0068+030C -> U+021F */ 269,
+ /* U+0068+0323 -> U+1E25 */ 1157,
+ /* U+0068+0327 -> U+1E29 */ 1161,
+ /* U+0068+032E -> U+1E2B */ 1163,
+ /* U+0068+0331 -> U+1E96 */ 1270,
+ /* U+0069+0300 -> U+00EC */ 51,
+ /* U+0069+0301 -> U+00ED */ 52,
+ /* U+0069+0302 -> U+00EE */ 53,
+ /* U+0069+0303 -> U+0129 */ 104,
+ /* U+0069+0304 -> U+012B */ 106,
+ /* U+0069+0306 -> U+012D */ 108,
+ /* U+0069+0308 -> U+00EF */ 54,
+ /* U+0069+0309 -> U+1EC9 */ 1317,
+ /* U+0069+030C -> U+01D0 */ 197,
+ /* U+0069+030F -> U+0209 */ 249,
+ /* U+0069+0311 -> U+020B */ 251,
+ /* U+0069+0323 -> U+1ECB */ 1319,
+ /* U+0069+0328 -> U+012F */ 110,
+ /* U+0069+0330 -> U+1E2D */ 1165,
+ /* U+006A+0302 -> U+0135 */ 115,
+ /* U+006A+030C -> U+01F0 */ 226,
+ /* U+006B+0301 -> U+1E31 */ 1169,
+ /* U+006B+030C -> U+01E9 */ 219,
+ /* U+006B+0323 -> U+1E33 */ 1171,
+ /* U+006B+0327 -> U+0137 */ 117,
+ /* U+006B+0331 -> U+1E35 */ 1173,
+ /* U+006C+0301 -> U+013A */ 119,
+ /* U+006C+030C -> U+013E */ 123,
+ /* U+006C+0323 -> U+1E37 */ 1175,
+ /* U+006C+0327 -> U+013C */ 121,
+ /* U+006C+032D -> U+1E3D */ 1181,
+ /* U+006C+0331 -> U+1E3B */ 1179,
+ /* U+006D+0301 -> U+1E3F */ 1183,
+ /* U+006D+0307 -> U+1E41 */ 1185,
+ /* U+006D+0323 -> U+1E43 */ 1187,
+ /* U+006E+0300 -> U+01F9 */ 233,
+ /* U+006E+0301 -> U+0144 */ 127,
+ /* U+006E+0303 -> U+00F1 */ 55,
+ /* U+006E+0307 -> U+1E45 */ 1189,
+ /* U+006E+030C -> U+0148 */ 131,
+ /* U+006E+0323 -> U+1E47 */ 1191,
+ /* U+006E+0327 -> U+0146 */ 129,
+ /* U+006E+032D -> U+1E4B */ 1195,
+ /* U+006E+0331 -> U+1E49 */ 1193,
+ /* U+006F+0300 -> U+00F2 */ 56,
+ /* U+006F+0301 -> U+00F3 */ 57,
+ /* U+006F+0302 -> U+00F4 */ 58,
+ /* U+006F+0303 -> U+00F5 */ 59,
+ /* U+006F+0304 -> U+014D */ 134,
+ /* U+006F+0306 -> U+014F */ 136,
+ /* U+006F+0307 -> U+022F */ 279,
+ /* U+006F+0308 -> U+00F6 */ 60,
+ /* U+006F+0309 -> U+1ECF */ 1323,
+ /* U+006F+030B -> U+0151 */ 138,
+ /* U+006F+030C -> U+01D2 */ 199,
+ /* U+006F+030F -> U+020D */ 253,
+ /* U+006F+0311 -> U+020F */ 255,
+ /* U+006F+031B -> U+01A1 */ 182,
+ /* U+006F+0323 -> U+1ECD */ 1321,
+ /* U+006F+0328 -> U+01EB */ 221,
+ /* U+0070+0301 -> U+1E55 */ 1205,
+ /* U+0070+0307 -> U+1E57 */ 1207,
+ /* U+0072+0301 -> U+0155 */ 140,
+ /* U+0072+0307 -> U+1E59 */ 1209,
+ /* U+0072+030C -> U+0159 */ 144,
+ /* U+0072+030F -> U+0211 */ 257,
+ /* U+0072+0311 -> U+0213 */ 259,
+ /* U+0072+0323 -> U+1E5B */ 1211,
+ /* U+0072+0327 -> U+0157 */ 142,
+ /* U+0072+0331 -> U+1E5F */ 1215,
+ /* U+0073+0301 -> U+015B */ 146,
+ /* U+0073+0302 -> U+015D */ 148,
+ /* U+0073+0307 -> U+1E61 */ 1217,
+ /* U+0073+030C -> U+0161 */ 152,
+ /* U+0073+0323 -> U+1E63 */ 1219,
+ /* U+0073+0326 -> U+0219 */ 265,
+ /* U+0073+0327 -> U+015F */ 150,
+ /* U+0074+0307 -> U+1E6B */ 1227,
+ /* U+0074+0308 -> U+1E97 */ 1271,
+ /* U+0074+030C -> U+0165 */ 156,
+ /* U+0074+0323 -> U+1E6D */ 1229,
+ /* U+0074+0326 -> U+021B */ 267,
+ /* U+0074+0327 -> U+0163 */ 154,
+ /* U+0074+032D -> U+1E71 */ 1233,
+ /* U+0074+0331 -> U+1E6F */ 1231,
+ /* U+0075+0300 -> U+00F9 */ 61,
+ /* U+0075+0301 -> U+00FA */ 62,
+ /* U+0075+0302 -> U+00FB */ 63,
+ /* U+0075+0303 -> U+0169 */ 158,
+ /* U+0075+0304 -> U+016B */ 160,
+ /* U+0075+0306 -> U+016D */ 162,
+ /* U+0075+0308 -> U+00FC */ 64,
+ /* U+0075+0309 -> U+1EE7 */ 1347,
+ /* U+0075+030A -> U+016F */ 164,
+ /* U+0075+030B -> U+0171 */ 166,
+ /* U+0075+030C -> U+01D4 */ 201,
+ /* U+0075+030F -> U+0215 */ 261,
+ /* U+0075+0311 -> U+0217 */ 263,
+ /* U+0075+031B -> U+01B0 */ 184,
+ /* U+0075+0323 -> U+1EE5 */ 1345,
+ /* U+0075+0324 -> U+1E73 */ 1235,
+ /* U+0075+0328 -> U+0173 */ 168,
+ /* U+0075+032D -> U+1E77 */ 1239,
+ /* U+0075+0330 -> U+1E75 */ 1237,
+ /* U+0076+0303 -> U+1E7D */ 1245,
+ /* U+0076+0323 -> U+1E7F */ 1247,
+ /* U+0077+0300 -> U+1E81 */ 1249,
+ /* U+0077+0301 -> U+1E83 */ 1251,
+ /* U+0077+0302 -> U+0175 */ 170,
+ /* U+0077+0307 -> U+1E87 */ 1255,
+ /* U+0077+0308 -> U+1E85 */ 1253,
+ /* U+0077+030A -> U+1E98 */ 1272,
+ /* U+0077+0323 -> U+1E89 */ 1257,
+ /* U+0078+0307 -> U+1E8B */ 1259,
+ /* U+0078+0308 -> U+1E8D */ 1261,
+ /* U+0079+0300 -> U+1EF3 */ 1359,
+ /* U+0079+0301 -> U+00FD */ 65,
+ /* U+0079+0302 -> U+0177 */ 172,
+ /* U+0079+0303 -> U+1EF9 */ 1365,
+ /* U+0079+0304 -> U+0233 */ 283,
+ /* U+0079+0307 -> U+1E8F */ 1263,
+ /* U+0079+0308 -> U+00FF */ 66,
+ /* U+0079+0309 -> U+1EF7 */ 1363,
+ /* U+0079+030A -> U+1E99 */ 1273,
+ /* U+0079+0323 -> U+1EF5 */ 1361,
+ /* U+007A+0301 -> U+017A */ 175,
+ /* U+007A+0302 -> U+1E91 */ 1265,
+ /* U+007A+0307 -> U+017C */ 177,
+ /* U+007A+030C -> U+017E */ 179,
+ /* U+007A+0323 -> U+1E93 */ 1267,
+ /* U+007A+0331 -> U+1E95 */ 1269,
+ /* U+00A8+0300 -> U+1FED */ 1584,
+ /* U+00A8+0301 -> U+0385 */ 419,
+ /* U+00A8+0342 -> U+1FC1 */ 1544,
+ /* U+00C2+0300 -> U+1EA6 */ 1282,
+ /* U+00C2+0301 -> U+1EA4 */ 1280,
+ /* U+00C2+0303 -> U+1EAA */ 1286,
+ /* U+00C2+0309 -> U+1EA8 */ 1284,
+ /* U+00C4+0304 -> U+01DE */ 210,
+ /* U+00C5+0301 -> U+01FA */ 234,
+ /* U+00C6+0301 -> U+01FC */ 236,
+ /* U+00C6+0304 -> U+01E2 */ 214,
+ /* U+00C7+0301 -> U+1E08 */ 1128,
+ /* U+00CA+0300 -> U+1EC0 */ 1308,
+ /* U+00CA+0301 -> U+1EBE */ 1306,
+ /* U+00CA+0303 -> U+1EC4 */ 1312,
+ /* U+00CA+0309 -> U+1EC2 */ 1310,
+ /* U+00CF+0301 -> U+1E2E */ 1166,
+ /* U+00D4+0300 -> U+1ED2 */ 1326,
+ /* U+00D4+0301 -> U+1ED0 */ 1324,
+ /* U+00D4+0303 -> U+1ED6 */ 1330,
+ /* U+00D4+0309 -> U+1ED4 */ 1328,
+ /* U+00D5+0301 -> U+1E4C */ 1196,
+ /* U+00D5+0304 -> U+022C */ 276,
+ /* U+00D5+0308 -> U+1E4E */ 1198,
+ /* U+00D6+0304 -> U+022A */ 274,
+ /* U+00D8+0301 -> U+01FE */ 238,
+ /* U+00DC+0300 -> U+01DB */ 208,
+ /* U+00DC+0301 -> U+01D7 */ 204,
+ /* U+00DC+0304 -> U+01D5 */ 202,
+ /* U+00DC+030C -> U+01D9 */ 206,
+ /* U+00E2+0300 -> U+1EA7 */ 1283,
+ /* U+00E2+0301 -> U+1EA5 */ 1281,
+ /* U+00E2+0303 -> U+1EAB */ 1287,
+ /* U+00E2+0309 -> U+1EA9 */ 1285,
+ /* U+00E4+0304 -> U+01DF */ 211,
+ /* U+00E5+0301 -> U+01FB */ 235,
+ /* U+00E6+0301 -> U+01FD */ 237,
+ /* U+00E6+0304 -> U+01E3 */ 215,
+ /* U+00E7+0301 -> U+1E09 */ 1129,
+ /* U+00EA+0300 -> U+1EC1 */ 1309,
+ /* U+00EA+0301 -> U+1EBF */ 1307,
+ /* U+00EA+0303 -> U+1EC5 */ 1313,
+ /* U+00EA+0309 -> U+1EC3 */ 1311,
+ /* U+00EF+0301 -> U+1E2F */ 1167,
+ /* U+00F4+0300 -> U+1ED3 */ 1327,
+ /* U+00F4+0301 -> U+1ED1 */ 1325,
+ /* U+00F4+0303 -> U+1ED7 */ 1331,
+ /* U+00F4+0309 -> U+1ED5 */ 1329,
+ /* U+00F5+0301 -> U+1E4D */ 1197,
+ /* U+00F5+0304 -> U+022D */ 277,
+ /* U+00F5+0308 -> U+1E4F */ 1199,
+ /* U+00F6+0304 -> U+022B */ 275,
+ /* U+00F8+0301 -> U+01FF */ 239,
+ /* U+00FC+0300 -> U+01DC */ 209,
+ /* U+00FC+0301 -> U+01D8 */ 205,
+ /* U+00FC+0304 -> U+01D6 */ 203,
+ /* U+00FC+030C -> U+01DA */ 207,
+ /* U+0102+0300 -> U+1EB0 */ 1292,
+ /* U+0102+0301 -> U+1EAE */ 1290,
+ /* U+0102+0303 -> U+1EB4 */ 1296,
+ /* U+0102+0309 -> U+1EB2 */ 1294,
+ /* U+0103+0300 -> U+1EB1 */ 1293,
+ /* U+0103+0301 -> U+1EAF */ 1291,
+ /* U+0103+0303 -> U+1EB5 */ 1297,
+ /* U+0103+0309 -> U+1EB3 */ 1295,
+ /* U+0112+0300 -> U+1E14 */ 1140,
+ /* U+0112+0301 -> U+1E16 */ 1142,
+ /* U+0113+0300 -> U+1E15 */ 1141,
+ /* U+0113+0301 -> U+1E17 */ 1143,
+ /* U+014C+0300 -> U+1E50 */ 1200,
+ /* U+014C+0301 -> U+1E52 */ 1202,
+ /* U+014D+0300 -> U+1E51 */ 1201,
+ /* U+014D+0301 -> U+1E53 */ 1203,
+ /* U+015A+0307 -> U+1E64 */ 1220,
+ /* U+015B+0307 -> U+1E65 */ 1221,
+ /* U+0160+0307 -> U+1E66 */ 1222,
+ /* U+0161+0307 -> U+1E67 */ 1223,
+ /* U+0168+0301 -> U+1E78 */ 1240,
+ /* U+0169+0301 -> U+1E79 */ 1241,
+ /* U+016A+0308 -> U+1E7A */ 1242,
+ /* U+016B+0308 -> U+1E7B */ 1243,
+ /* U+017F+0307 -> U+1E9B */ 1275,
+ /* U+01A0+0300 -> U+1EDC */ 1336,
+ /* U+01A0+0301 -> U+1EDA */ 1334,
+ /* U+01A0+0303 -> U+1EE0 */ 1340,
+ /* U+01A0+0309 -> U+1EDE */ 1338,
+ /* U+01A0+0323 -> U+1EE2 */ 1342,
+ /* U+01A1+0300 -> U+1EDD */ 1337,
+ /* U+01A1+0301 -> U+1EDB */ 1335,
+ /* U+01A1+0303 -> U+1EE1 */ 1341,
+ /* U+01A1+0309 -> U+1EDF */ 1339,
+ /* U+01A1+0323 -> U+1EE3 */ 1343,
+ /* U+01AF+0300 -> U+1EEA */ 1350,
+ /* U+01AF+0301 -> U+1EE8 */ 1348,
+ /* U+01AF+0303 -> U+1EEE */ 1354,
+ /* U+01AF+0309 -> U+1EEC */ 1352,
+ /* U+01AF+0323 -> U+1EF0 */ 1356,
+ /* U+01B0+0300 -> U+1EEB */ 1351,
+ /* U+01B0+0301 -> U+1EE9 */ 1349,
+ /* U+01B0+0303 -> U+1EEF */ 1355,
+ /* U+01B0+0309 -> U+1EED */ 1353,
+ /* U+01B0+0323 -> U+1EF1 */ 1357,
+ /* U+01B7+030C -> U+01EE */ 224,
+ /* U+01EA+0304 -> U+01EC */ 222,
+ /* U+01EB+0304 -> U+01ED */ 223,
+ /* U+0226+0304 -> U+01E0 */ 212,
+ /* U+0227+0304 -> U+01E1 */ 213,
+ /* U+0228+0306 -> U+1E1C */ 1148,
+ /* U+0229+0306 -> U+1E1D */ 1149,
+ /* U+022E+0304 -> U+0230 */ 280,
+ /* U+022F+0304 -> U+0231 */ 281,
+ /* U+0292+030C -> U+01EF */ 225,
+ /* U+0391+0300 -> U+1FBA */ 1537,
+ /* U+0391+0301 -> U+0386 */ 420,
+ /* U+0391+0304 -> U+1FB9 */ 1536,
+ /* U+0391+0306 -> U+1FB8 */ 1535,
+ /* U+0391+0313 -> U+1F08 */ 1374,
+ /* U+0391+0314 -> U+1F09 */ 1375,
+ /* U+0391+0345 -> U+1FBC */ 1539,
+ /* U+0395+0300 -> U+1FC8 */ 1550,
+ /* U+0395+0301 -> U+0388 */ 422,
+ /* U+0395+0313 -> U+1F18 */ 1388,
+ /* U+0395+0314 -> U+1F19 */ 1389,
+ /* U+0397+0300 -> U+1FCA */ 1552,
+ /* U+0397+0301 -> U+0389 */ 423,
+ /* U+0397+0313 -> U+1F28 */ 1402,
+ /* U+0397+0314 -> U+1F29 */ 1403,
+ /* U+0397+0345 -> U+1FCC */ 1554,
+ /* U+0399+0300 -> U+1FDA */ 1566,
+ /* U+0399+0301 -> U+038A */ 424,
+ /* U+0399+0304 -> U+1FD9 */ 1565,
+ /* U+0399+0306 -> U+1FD8 */ 1564,
+ /* U+0399+0308 -> U+03AA */ 429,
+ /* U+0399+0313 -> U+1F38 */ 1418,
+ /* U+0399+0314 -> U+1F39 */ 1419,
+ /* U+039F+0300 -> U+1FF8 */ 1592,
+ /* U+039F+0301 -> U+038C */ 425,
+ /* U+039F+0313 -> U+1F48 */ 1432,
+ /* U+039F+0314 -> U+1F49 */ 1433,
+ /* U+03A1+0314 -> U+1FEC */ 1583,
+ /* U+03A5+0300 -> U+1FEA */ 1581,
+ /* U+03A5+0301 -> U+038E */ 426,
+ /* U+03A5+0304 -> U+1FE9 */ 1580,
+ /* U+03A5+0306 -> U+1FE8 */ 1579,
+ /* U+03A5+0308 -> U+03AB */ 430,
+ /* U+03A5+0314 -> U+1F59 */ 1446,
+ /* U+03A9+0300 -> U+1FFA */ 1594,
+ /* U+03A9+0301 -> U+038F */ 427,
+ /* U+03A9+0313 -> U+1F68 */ 1458,
+ /* U+03A9+0314 -> U+1F69 */ 1459,
+ /* U+03A9+0345 -> U+1FFC */ 1596,
+ /* U+03AC+0345 -> U+1FB4 */ 1532,
+ /* U+03AE+0345 -> U+1FC4 */ 1547,
+ /* U+03B1+0300 -> U+1F70 */ 1466,
+ /* U+03B1+0301 -> U+03AC */ 431,
+ /* U+03B1+0304 -> U+1FB1 */ 1529,
+ /* U+03B1+0306 -> U+1FB0 */ 1528,
+ /* U+03B1+0313 -> U+1F00 */ 1366,
+ /* U+03B1+0314 -> U+1F01 */ 1367,
+ /* U+03B1+0342 -> U+1FB6 */ 1533,
+ /* U+03B1+0345 -> U+1FB3 */ 1531,
+ /* U+03B5+0300 -> U+1F72 */ 1468,
+ /* U+03B5+0301 -> U+03AD */ 432,
+ /* U+03B5+0313 -> U+1F10 */ 1382,
+ /* U+03B5+0314 -> U+1F11 */ 1383,
+ /* U+03B7+0300 -> U+1F74 */ 1470,
+ /* U+03B7+0301 -> U+03AE */ 433,
+ /* U+03B7+0313 -> U+1F20 */ 1394,
+ /* U+03B7+0314 -> U+1F21 */ 1395,
+ /* U+03B7+0342 -> U+1FC6 */ 1548,
+ /* U+03B7+0345 -> U+1FC3 */ 1546,
+ /* U+03B9+0300 -> U+1F76 */ 1472,
+ /* U+03B9+0301 -> U+03AF */ 434,
+ /* U+03B9+0304 -> U+1FD1 */ 1559,
+ /* U+03B9+0306 -> U+1FD0 */ 1558,
+ /* U+03B9+0308 -> U+03CA */ 436,
+ /* U+03B9+0313 -> U+1F30 */ 1410,
+ /* U+03B9+0314 -> U+1F31 */ 1411,
+ /* U+03B9+0342 -> U+1FD6 */ 1562,
+ /* U+03BF+0300 -> U+1F78 */ 1474,
+ /* U+03BF+0301 -> U+03CC */ 438,
+ /* U+03BF+0313 -> U+1F40 */ 1426,
+ /* U+03BF+0314 -> U+1F41 */ 1427,
+ /* U+03C1+0313 -> U+1FE4 */ 1575,
+ /* U+03C1+0314 -> U+1FE5 */ 1576,
+ /* U+03C5+0300 -> U+1F7A */ 1476,
+ /* U+03C5+0301 -> U+03CD */ 439,
+ /* U+03C5+0304 -> U+1FE1 */ 1572,
+ /* U+03C5+0306 -> U+1FE0 */ 1571,
+ /* U+03C5+0308 -> U+03CB */ 437,
+ /* U+03C5+0313 -> U+1F50 */ 1438,
+ /* U+03C5+0314 -> U+1F51 */ 1439,
+ /* U+03C5+0342 -> U+1FE6 */ 1577,
+ /* U+03C9+0300 -> U+1F7C */ 1478,
+ /* U+03C9+0301 -> U+03CE */ 440,
+ /* U+03C9+0313 -> U+1F60 */ 1450,
+ /* U+03C9+0314 -> U+1F61 */ 1451,
+ /* U+03C9+0342 -> U+1FF6 */ 1590,
+ /* U+03C9+0345 -> U+1FF3 */ 1588,
+ /* U+03CA+0300 -> U+1FD2 */ 1560,
+ /* U+03CA+0301 -> U+0390 */ 428,
+ /* U+03CA+0342 -> U+1FD7 */ 1563,
+ /* U+03CB+0300 -> U+1FE2 */ 1573,
+ /* U+03CB+0301 -> U+03B0 */ 435,
+ /* U+03CB+0342 -> U+1FE7 */ 1578,
+ /* U+03CE+0345 -> U+1FF4 */ 1589,
+ /* U+03D2+0301 -> U+03D3 */ 444,
+ /* U+03D2+0308 -> U+03D4 */ 445,
+ /* U+0406+0308 -> U+0407 */ 457,
+ /* U+0410+0306 -> U+04D0 */ 479,
+ /* U+0410+0308 -> U+04D2 */ 481,
+ /* U+0413+0301 -> U+0403 */ 456,
+ /* U+0415+0300 -> U+0400 */ 454,
+ /* U+0415+0306 -> U+04D6 */ 483,
+ /* U+0415+0308 -> U+0401 */ 455,
+ /* U+0416+0306 -> U+04C1 */ 477,
+ /* U+0416+0308 -> U+04DC */ 487,
+ /* U+0417+0308 -> U+04DE */ 489,
+ /* U+0418+0300 -> U+040D */ 459,
+ /* U+0418+0304 -> U+04E2 */ 491,
+ /* U+0418+0306 -> U+0419 */ 461,
+ /* U+0418+0308 -> U+04E4 */ 493,
+ /* U+041A+0301 -> U+040C */ 458,
+ /* U+041E+0308 -> U+04E6 */ 495,
+ /* U+0423+0304 -> U+04EE */ 501,
+ /* U+0423+0306 -> U+040E */ 460,
+ /* U+0423+0308 -> U+04F0 */ 503,
+ /* U+0423+030B -> U+04F2 */ 505,
+ /* U+0427+0308 -> U+04F4 */ 507,
+ /* U+042B+0308 -> U+04F8 */ 509,
+ /* U+042D+0308 -> U+04EC */ 499,
+ /* U+0430+0306 -> U+04D1 */ 480,
+ /* U+0430+0308 -> U+04D3 */ 482,
+ /* U+0433+0301 -> U+0453 */ 465,
+ /* U+0435+0300 -> U+0450 */ 463,
+ /* U+0435+0306 -> U+04D7 */ 484,
+ /* U+0435+0308 -> U+0451 */ 464,
+ /* U+0436+0306 -> U+04C2 */ 478,
+ /* U+0436+0308 -> U+04DD */ 488,
+ /* U+0437+0308 -> U+04DF */ 490,
+ /* U+0438+0300 -> U+045D */ 468,
+ /* U+0438+0304 -> U+04E3 */ 492,
+ /* U+0438+0306 -> U+0439 */ 462,
+ /* U+0438+0308 -> U+04E5 */ 494,
+ /* U+043A+0301 -> U+045C */ 467,
+ /* U+043E+0308 -> U+04E7 */ 496,
+ /* U+0443+0304 -> U+04EF */ 502,
+ /* U+0443+0306 -> U+045E */ 469,
+ /* U+0443+0308 -> U+04F1 */ 504,
+ /* U+0443+030B -> U+04F3 */ 506,
+ /* U+0447+0308 -> U+04F5 */ 508,
+ /* U+044B+0308 -> U+04F9 */ 510,
+ /* U+044D+0308 -> U+04ED */ 500,
+ /* U+0456+0308 -> U+0457 */ 466,
+ /* U+0474+030F -> U+0476 */ 470,
+ /* U+0475+030F -> U+0477 */ 471,
+ /* U+04D8+0308 -> U+04DA */ 485,
+ /* U+04D9+0308 -> U+04DB */ 486,
+ /* U+04E8+0308 -> U+04EA */ 497,
+ /* U+04E9+0308 -> U+04EB */ 498,
+ /* U+0627+0653 -> U+0622 */ 574,
+ /* U+0627+0654 -> U+0623 */ 575,
+ /* U+0627+0655 -> U+0625 */ 577,
+ /* U+0648+0654 -> U+0624 */ 576,
+ /* U+064A+0654 -> U+0626 */ 578,
+ /* U+06C1+0654 -> U+06C2 */ 606,
+ /* U+06D2+0654 -> U+06D3 */ 607,
+ /* U+06D5+0654 -> U+06C0 */ 605,
+ /* U+0928+093C -> U+0929 */ 733,
+ /* U+0930+093C -> U+0931 */ 734,
+ /* U+0933+093C -> U+0934 */ 735,
+ /* U+09C7+09BE -> U+09CB */ 751,
+ /* U+09C7+09D7 -> U+09CC */ 752,
+ /* U+0B47+0B3E -> U+0B4B */ 770,
+ /* U+0B47+0B56 -> U+0B48 */ 769,
+ /* U+0B47+0B57 -> U+0B4C */ 771,
+ /* U+0B92+0BD7 -> U+0B94 */ 775,
+ /* U+0BC6+0BBE -> U+0BCA */ 776,
+ /* U+0BC6+0BD7 -> U+0BCC */ 778,
+ /* U+0BC7+0BBE -> U+0BCB */ 777,
+ /* U+0C46+0C56 -> U+0C48 */ 780,
+ /* U+0CBF+0CD5 -> U+0CC0 */ 785,
+ /* U+0CC6+0CC2 -> U+0CCA */ 788,
+ /* U+0CC6+0CD5 -> U+0CC7 */ 786,
+ /* U+0CC6+0CD6 -> U+0CC8 */ 787,
+ /* U+0CCA+0CD5 -> U+0CCB */ 789,
+ /* U+0D46+0D3E -> U+0D4A */ 793,
+ /* U+0D46+0D57 -> U+0D4C */ 795,
+ /* U+0D47+0D3E -> U+0D4B */ 794,
+ /* U+0DD9+0DCA -> U+0DDA */ 798,
+ /* U+0DD9+0DCF -> U+0DDC */ 799,
+ /* U+0DD9+0DDF -> U+0DDE */ 801,
+ /* U+0DDC+0DCA -> U+0DDD */ 800,
+ /* U+1025+102E -> U+1026 */ 859,
+ /* U+1B05+1B35 -> U+1B06 */ 904,
+ /* U+1B07+1B35 -> U+1B08 */ 905,
+ /* U+1B09+1B35 -> U+1B0A */ 906,
+ /* U+1B0B+1B35 -> U+1B0C */ 907,
+ /* U+1B0D+1B35 -> U+1B0E */ 908,
+ /* U+1B11+1B35 -> U+1B12 */ 909,
+ /* U+1B3A+1B35 -> U+1B3B */ 911,
+ /* U+1B3C+1B35 -> U+1B3D */ 912,
+ /* U+1B3E+1B35 -> U+1B40 */ 913,
+ /* U+1B3F+1B35 -> U+1B41 */ 914,
+ /* U+1B42+1B35 -> U+1B43 */ 915,
+ /* U+1E36+0304 -> U+1E38 */ 1176,
+ /* U+1E37+0304 -> U+1E39 */ 1177,
+ /* U+1E5A+0304 -> U+1E5C */ 1212,
+ /* U+1E5B+0304 -> U+1E5D */ 1213,
+ /* U+1E62+0307 -> U+1E68 */ 1224,
+ /* U+1E63+0307 -> U+1E69 */ 1225,
+ /* U+1EA0+0302 -> U+1EAC */ 1288,
+ /* U+1EA0+0306 -> U+1EB6 */ 1298,
+ /* U+1EA1+0302 -> U+1EAD */ 1289,
+ /* U+1EA1+0306 -> U+1EB7 */ 1299,
+ /* U+1EB8+0302 -> U+1EC6 */ 1314,
+ /* U+1EB9+0302 -> U+1EC7 */ 1315,
+ /* U+1ECC+0302 -> U+1ED8 */ 1332,
+ /* U+1ECD+0302 -> U+1ED9 */ 1333,
+ /* U+1F00+0300 -> U+1F02 */ 1368,
+ /* U+1F00+0301 -> U+1F04 */ 1370,
+ /* U+1F00+0342 -> U+1F06 */ 1372,
+ /* U+1F00+0345 -> U+1F80 */ 1480,
+ /* U+1F01+0300 -> U+1F03 */ 1369,
+ /* U+1F01+0301 -> U+1F05 */ 1371,
+ /* U+1F01+0342 -> U+1F07 */ 1373,
+ /* U+1F01+0345 -> U+1F81 */ 1481,
+ /* U+1F02+0345 -> U+1F82 */ 1482,
+ /* U+1F03+0345 -> U+1F83 */ 1483,
+ /* U+1F04+0345 -> U+1F84 */ 1484,
+ /* U+1F05+0345 -> U+1F85 */ 1485,
+ /* U+1F06+0345 -> U+1F86 */ 1486,
+ /* U+1F07+0345 -> U+1F87 */ 1487,
+ /* U+1F08+0300 -> U+1F0A */ 1376,
+ /* U+1F08+0301 -> U+1F0C */ 1378,
+ /* U+1F08+0342 -> U+1F0E */ 1380,
+ /* U+1F08+0345 -> U+1F88 */ 1488,
+ /* U+1F09+0300 -> U+1F0B */ 1377,
+ /* U+1F09+0301 -> U+1F0D */ 1379,
+ /* U+1F09+0342 -> U+1F0F */ 1381,
+ /* U+1F09+0345 -> U+1F89 */ 1489,
+ /* U+1F0A+0345 -> U+1F8A */ 1490,
+ /* U+1F0B+0345 -> U+1F8B */ 1491,
+ /* U+1F0C+0345 -> U+1F8C */ 1492,
+ /* U+1F0D+0345 -> U+1F8D */ 1493,
+ /* U+1F0E+0345 -> U+1F8E */ 1494,
+ /* U+1F0F+0345 -> U+1F8F */ 1495,
+ /* U+1F10+0300 -> U+1F12 */ 1384,
+ /* U+1F10+0301 -> U+1F14 */ 1386,
+ /* U+1F11+0300 -> U+1F13 */ 1385,
+ /* U+1F11+0301 -> U+1F15 */ 1387,
+ /* U+1F18+0300 -> U+1F1A */ 1390,
+ /* U+1F18+0301 -> U+1F1C */ 1392,
+ /* U+1F19+0300 -> U+1F1B */ 1391,
+ /* U+1F19+0301 -> U+1F1D */ 1393,
+ /* U+1F20+0300 -> U+1F22 */ 1396,
+ /* U+1F20+0301 -> U+1F24 */ 1398,
+ /* U+1F20+0342 -> U+1F26 */ 1400,
+ /* U+1F20+0345 -> U+1F90 */ 1496,
+ /* U+1F21+0300 -> U+1F23 */ 1397,
+ /* U+1F21+0301 -> U+1F25 */ 1399,
+ /* U+1F21+0342 -> U+1F27 */ 1401,
+ /* U+1F21+0345 -> U+1F91 */ 1497,
+ /* U+1F22+0345 -> U+1F92 */ 1498,
+ /* U+1F23+0345 -> U+1F93 */ 1499,
+ /* U+1F24+0345 -> U+1F94 */ 1500,
+ /* U+1F25+0345 -> U+1F95 */ 1501,
+ /* U+1F26+0345 -> U+1F96 */ 1502,
+ /* U+1F27+0345 -> U+1F97 */ 1503,
+ /* U+1F28+0300 -> U+1F2A */ 1404,
+ /* U+1F28+0301 -> U+1F2C */ 1406,
+ /* U+1F28+0342 -> U+1F2E */ 1408,
+ /* U+1F28+0345 -> U+1F98 */ 1504,
+ /* U+1F29+0300 -> U+1F2B */ 1405,
+ /* U+1F29+0301 -> U+1F2D */ 1407,
+ /* U+1F29+0342 -> U+1F2F */ 1409,
+ /* U+1F29+0345 -> U+1F99 */ 1505,
+ /* U+1F2A+0345 -> U+1F9A */ 1506,
+ /* U+1F2B+0345 -> U+1F9B */ 1507,
+ /* U+1F2C+0345 -> U+1F9C */ 1508,
+ /* U+1F2D+0345 -> U+1F9D */ 1509,
+ /* U+1F2E+0345 -> U+1F9E */ 1510,
+ /* U+1F2F+0345 -> U+1F9F */ 1511,
+ /* U+1F30+0300 -> U+1F32 */ 1412,
+ /* U+1F30+0301 -> U+1F34 */ 1414,
+ /* U+1F30+0342 -> U+1F36 */ 1416,
+ /* U+1F31+0300 -> U+1F33 */ 1413,
+ /* U+1F31+0301 -> U+1F35 */ 1415,
+ /* U+1F31+0342 -> U+1F37 */ 1417,
+ /* U+1F38+0300 -> U+1F3A */ 1420,
+ /* U+1F38+0301 -> U+1F3C */ 1422,
+ /* U+1F38+0342 -> U+1F3E */ 1424,
+ /* U+1F39+0300 -> U+1F3B */ 1421,
+ /* U+1F39+0301 -> U+1F3D */ 1423,
+ /* U+1F39+0342 -> U+1F3F */ 1425,
+ /* U+1F40+0300 -> U+1F42 */ 1428,
+ /* U+1F40+0301 -> U+1F44 */ 1430,
+ /* U+1F41+0300 -> U+1F43 */ 1429,
+ /* U+1F41+0301 -> U+1F45 */ 1431,
+ /* U+1F48+0300 -> U+1F4A */ 1434,
+ /* U+1F48+0301 -> U+1F4C */ 1436,
+ /* U+1F49+0300 -> U+1F4B */ 1435,
+ /* U+1F49+0301 -> U+1F4D */ 1437,
+ /* U+1F50+0300 -> U+1F52 */ 1440,
+ /* U+1F50+0301 -> U+1F54 */ 1442,
+ /* U+1F50+0342 -> U+1F56 */ 1444,
+ /* U+1F51+0300 -> U+1F53 */ 1441,
+ /* U+1F51+0301 -> U+1F55 */ 1443,
+ /* U+1F51+0342 -> U+1F57 */ 1445,
+ /* U+1F59+0300 -> U+1F5B */ 1447,
+ /* U+1F59+0301 -> U+1F5D */ 1448,
+ /* U+1F59+0342 -> U+1F5F */ 1449,
+ /* U+1F60+0300 -> U+1F62 */ 1452,
+ /* U+1F60+0301 -> U+1F64 */ 1454,
+ /* U+1F60+0342 -> U+1F66 */ 1456,
+ /* U+1F60+0345 -> U+1FA0 */ 1512,
+ /* U+1F61+0300 -> U+1F63 */ 1453,
+ /* U+1F61+0301 -> U+1F65 */ 1455,
+ /* U+1F61+0342 -> U+1F67 */ 1457,
+ /* U+1F61+0345 -> U+1FA1 */ 1513,
+ /* U+1F62+0345 -> U+1FA2 */ 1514,
+ /* U+1F63+0345 -> U+1FA3 */ 1515,
+ /* U+1F64+0345 -> U+1FA4 */ 1516,
+ /* U+1F65+0345 -> U+1FA5 */ 1517,
+ /* U+1F66+0345 -> U+1FA6 */ 1518,
+ /* U+1F67+0345 -> U+1FA7 */ 1519,
+ /* U+1F68+0300 -> U+1F6A */ 1460,
+ /* U+1F68+0301 -> U+1F6C */ 1462,
+ /* U+1F68+0342 -> U+1F6E */ 1464,
+ /* U+1F68+0345 -> U+1FA8 */ 1520,
+ /* U+1F69+0300 -> U+1F6B */ 1461,
+ /* U+1F69+0301 -> U+1F6D */ 1463,
+ /* U+1F69+0342 -> U+1F6F */ 1465,
+ /* U+1F69+0345 -> U+1FA9 */ 1521,
+ /* U+1F6A+0345 -> U+1FAA */ 1522,
+ /* U+1F6B+0345 -> U+1FAB */ 1523,
+ /* U+1F6C+0345 -> U+1FAC */ 1524,
+ /* U+1F6D+0345 -> U+1FAD */ 1525,
+ /* U+1F6E+0345 -> U+1FAE */ 1526,
+ /* U+1F6F+0345 -> U+1FAF */ 1527,
+ /* U+1F70+0345 -> U+1FB2 */ 1530,
+ /* U+1F74+0345 -> U+1FC2 */ 1545,
+ /* U+1F7C+0345 -> U+1FF2 */ 1587,
+ /* U+1FB6+0345 -> U+1FB7 */ 1534,
+ /* U+1FBF+0300 -> U+1FCD */ 1555,
+ /* U+1FBF+0301 -> U+1FCE */ 1556,
+ /* U+1FBF+0342 -> U+1FCF */ 1557,
+ /* U+1FC6+0345 -> U+1FC7 */ 1549,
+ /* U+1FF6+0345 -> U+1FF7 */ 1591,
+ /* U+1FFE+0300 -> U+1FDD */ 1568,
+ /* U+1FFE+0301 -> U+1FDE */ 1569,
+ /* U+1FFE+0342 -> U+1FDF */ 1570,
+ /* U+2190+0338 -> U+219A */ 1801,
+ /* U+2192+0338 -> U+219B */ 1802,
+ /* U+2194+0338 -> U+21AE */ 1803,
+ /* U+21D0+0338 -> U+21CD */ 1804,
+ /* U+21D2+0338 -> U+21CF */ 1806,
+ /* U+21D4+0338 -> U+21CE */ 1805,
+ /* U+2203+0338 -> U+2204 */ 1807,
+ /* U+2208+0338 -> U+2209 */ 1808,
+ /* U+220B+0338 -> U+220C */ 1809,
+ /* U+2223+0338 -> U+2224 */ 1810,
+ /* U+2225+0338 -> U+2226 */ 1811,
+ /* U+223C+0338 -> U+2241 */ 1816,
+ /* U+2243+0338 -> U+2244 */ 1817,
+ /* U+2245+0338 -> U+2247 */ 1818,
+ /* U+2248+0338 -> U+2249 */ 1819,
+ /* U+224D+0338 -> U+226D */ 1822,
+ /* U+2261+0338 -> U+2262 */ 1821,
+ /* U+2264+0338 -> U+2270 */ 1825,
+ /* U+2265+0338 -> U+2271 */ 1826,
+ /* U+2272+0338 -> U+2274 */ 1827,
+ /* U+2273+0338 -> U+2275 */ 1828,
+ /* U+2276+0338 -> U+2278 */ 1829,
+ /* U+2277+0338 -> U+2279 */ 1830,
+ /* U+227A+0338 -> U+2280 */ 1831,
+ /* U+227B+0338 -> U+2281 */ 1832,
+ /* U+227C+0338 -> U+22E0 */ 1841,
+ /* U+227D+0338 -> U+22E1 */ 1842,
+ /* U+2282+0338 -> U+2284 */ 1833,
+ /* U+2283+0338 -> U+2285 */ 1834,
+ /* U+2286+0338 -> U+2288 */ 1835,
+ /* U+2287+0338 -> U+2289 */ 1836,
+ /* U+2291+0338 -> U+22E2 */ 1843,
+ /* U+2292+0338 -> U+22E3 */ 1844,
+ /* U+22A2+0338 -> U+22AC */ 1837,
+ /* U+22A8+0338 -> U+22AD */ 1838,
+ /* U+22A9+0338 -> U+22AE */ 1839,
+ /* U+22AB+0338 -> U+22AF */ 1840,
+ /* U+22B2+0338 -> U+22EA */ 1845,
+ /* U+22B3+0338 -> U+22EB */ 1846,
+ /* U+22B4+0338 -> U+22EC */ 1847,
+ /* U+22B5+0338 -> U+22ED */ 1848,
+ /* U+3046+3099 -> U+3094 */ 2286,
+ /* U+304B+3099 -> U+304C */ 2261,
+ /* U+304D+3099 -> U+304E */ 2262,
+ /* U+304F+3099 -> U+3050 */ 2263,
+ /* U+3051+3099 -> U+3052 */ 2264,
+ /* U+3053+3099 -> U+3054 */ 2265,
+ /* U+3055+3099 -> U+3056 */ 2266,
+ /* U+3057+3099 -> U+3058 */ 2267,
+ /* U+3059+3099 -> U+305A */ 2268,
+ /* U+305B+3099 -> U+305C */ 2269,
+ /* U+305D+3099 -> U+305E */ 2270,
+ /* U+305F+3099 -> U+3060 */ 2271,
+ /* U+3061+3099 -> U+3062 */ 2272,
+ /* U+3064+3099 -> U+3065 */ 2273,
+ /* U+3066+3099 -> U+3067 */ 2274,
+ /* U+3068+3099 -> U+3069 */ 2275,
+ /* U+306F+3099 -> U+3070 */ 2276,
+ /* U+306F+309A -> U+3071 */ 2277,
+ /* U+3072+3099 -> U+3073 */ 2278,
+ /* U+3072+309A -> U+3074 */ 2279,
+ /* U+3075+3099 -> U+3076 */ 2280,
+ /* U+3075+309A -> U+3077 */ 2281,
+ /* U+3078+3099 -> U+3079 */ 2282,
+ /* U+3078+309A -> U+307A */ 2283,
+ /* U+307B+3099 -> U+307C */ 2284,
+ /* U+307B+309A -> U+307D */ 2285,
+ /* U+309D+3099 -> U+309E */ 2291,
+ /* U+30A6+3099 -> U+30F4 */ 2318,
+ /* U+30AB+3099 -> U+30AC */ 2293,
+ /* U+30AD+3099 -> U+30AE */ 2294,
+ /* U+30AF+3099 -> U+30B0 */ 2295,
+ /* U+30B1+3099 -> U+30B2 */ 2296,
+ /* U+30B3+3099 -> U+30B4 */ 2297,
+ /* U+30B5+3099 -> U+30B6 */ 2298,
+ /* U+30B7+3099 -> U+30B8 */ 2299,
+ /* U+30B9+3099 -> U+30BA */ 2300,
+ /* U+30BB+3099 -> U+30BC */ 2301,
+ /* U+30BD+3099 -> U+30BE */ 2302,
+ /* U+30BF+3099 -> U+30C0 */ 2303,
+ /* U+30C1+3099 -> U+30C2 */ 2304,
+ /* U+30C4+3099 -> U+30C5 */ 2305,
+ /* U+30C6+3099 -> U+30C7 */ 2306,
+ /* U+30C8+3099 -> U+30C9 */ 2307,
+ /* U+30CF+3099 -> U+30D0 */ 2308,
+ /* U+30CF+309A -> U+30D1 */ 2309,
+ /* U+30D2+3099 -> U+30D3 */ 2310,
+ /* U+30D2+309A -> U+30D4 */ 2311,
+ /* U+30D5+3099 -> U+30D6 */ 2312,
+ /* U+30D5+309A -> U+30D7 */ 2313,
+ /* U+30D8+3099 -> U+30D9 */ 2314,
+ /* U+30D8+309A -> U+30DA */ 2315,
+ /* U+30DB+3099 -> U+30DC */ 2316,
+ /* U+30DB+309A -> U+30DD */ 2317,
+ /* U+30EF+3099 -> U+30F7 */ 2319,
+ /* U+30F0+3099 -> U+30F8 */ 2320,
+ /* U+30F1+3099 -> U+30F9 */ 2321,
+ /* U+30F2+3099 -> U+30FA */ 2322,
+ /* U+30FD+3099 -> U+30FE */ 2323,
+ /* U+11099+110BA -> U+1109A */ 4588,
+ /* U+1109B+110BA -> U+1109C */ 4589,
+ /* U+110A5+110BA -> U+110AB */ 4590,
+ /* U+11131+11127 -> U+1112E */ 4596,
+ /* U+11132+11127 -> U+1112F */ 4597,
+ /* U+11347+1133E -> U+1134B */ 4609,
+ /* U+11347+11357 -> U+1134C */ 4610,
+ /* U+114B9+114B0 -> U+114BC */ 4628,
+ /* U+114B9+114BA -> U+114BB */ 4627,
+ /* U+114B9+114BD -> U+114BE */ 4629,
+ /* U+115B8+115AF -> U+115BA */ 4632,
+ /* U+115B9+115AF -> U+115BB */ 4633,
+ /* U+11935+11930 -> U+11938 */ 4642
+};
+
+/* Perfect hash function for recomposition */
+static int
+Recomp_hash_func(const void *key)
+{
+ static const int16 h[1883] = {
+ 772, 773, 621, 32767, 32767, 387, 653, 196,
+ 32767, 32767, 855, 463, -19, 651, 32767, 32767,
+ 32767, 364, 32767, 32767, -108, 32767, 32767, 32767,
+ 32767, 0, -568, 32767, 32767, 32767, 0, 0,
+ 0, -103, 364, 0, 210, 732, 0, 0,
+ -506, 0, 0, 0, 32767, 32767, 0, 32767,
+ 407, -140, 32767, 409, 32767, 772, 0, 86,
+ 842, 934, 32767, 32767, -499, -355, 32767, 32767,
+ 532, 138, 174, -243, 860, 1870, 742, 32767,
+ 32767, 339, 32767, 1290, 0, 32767, 32767, 0,
+ -449, -1386, 1633, 560, 561, 32767, 1219, 1004,
+ 139, -804, 32767, -179, 141, 579, 1586, 32767,
+ 32767, 32767, 142, 199, 32767, 32767, 143, 0,
+ 32767, 32767, 314, 896, 32767, 32767, 428, 129,
+ 286, -58, 0, 68, 32767, 0, 244, -566,
+ 32767, 32767, 32767, 246, 32767, 32767, 0, 32767,
+ 32767, 271, -108, 928, 32767, 715, 32767, 32767,
+ -211, -497, 32767, 0, 1055, 1339, 32767, 0,
+ 32767, 32767, -968, -144, 32767, 32767, 248, 32767,
+ -161, 32767, 32767, 282, 32767, -372, 0, 2,
+ -137, 1116, 32767, 687, 32767, 459, 913, 0,
+ 461, 879, -816, 443, 32767, 32767, 462, 1089,
+ 32767, 1054, 0, 314, 447, -26, 480, 32767,
+ 64, 0, 0, 112, 32767, 66, 0, 646,
+ 603, 22, -292, 0, 710, 475, 32767, 24,
+ -781, 32767, 32767, 32767, 281, 307, 32767, 1289,
+ 32767, 0, 1064, -149, 454, 118, 32767, 32767,
+ 0, 32767, -126, 0, 32767, 32767, 858, 32767,
+ 32767, 32767, 1029, 886, 665, 209, 0, 26,
+ 359, 0, 0, -108, -508, -603, 894, 906,
+ 32767, 32767, 14, 0, 0, 534, 984, 876,
+ 32767, -93, 110, -367, 167, 843, 32767, 32767,
+ -947, -290, 169, 0, 0, 32767, -42, 564,
+ 0, -927, 32767, 817, 32767, 32767, 32767, 110,
+ 0, 32767, 32767, -38, 32767, 32767, -101, 694,
+ -142, 190, 191, 1288, 32767, -687, 194, -579,
+ 534, -452, 0, -72, 536, 765, 823, 266,
+ -259, 684, 767, 32767, 654, 32767, 32767, 64,
+ 920, 32767, 32767, 32767, 0, 1653, 0, 0,
+ 32767, 32767, -452, -222, 855, 0, 32767, -1153,
+ 127, 490, 449, 863, 32767, -144, 32767, -379,
+ 545, 32767, 32767, 32767, 530, 32767, 32767, 1331,
+ 611, -612, 332, 545, -73, 0, 604, 201,
+ 32767, -279, 338, 836, 340, 408, 32767, -60,
+ -358, 32767, 343, 69, 707, 0, -129, 582,
+ 32767, 0, 32767, 96, 392, 490, 639, 157,
+ -4, 406, 32767, 32767, -571, 1077, 546, 32767,
+ 551, 0, 0, 0, 32767, 32767, 348, 32767,
+ 498, -181, 0, -433, 1057, 260, 0, 32767,
+ 32767, 397, 32767, 816, -130, 32767, 624, 0,
+ 0, 32767, 32767, 32767, 485, 0, 32767, 32767,
+ 32767, 32767, 32767, 0, 32767, 32767, 32767, 1222,
+ -230, 32767, 797, -538, 32767, 974, 32767, 32767,
+ 831, 70, -658, 145, 0, 147, 0, 32767,
+ 1295, 32767, 0, 0, 895, 0, 0, -385,
+ 491, -287, 32767, -587, 32767, 32767, 32767, 813,
+ -471, -13, 32767, 32767, 32767, 0, 203, 411,
+ 470, 0, -546, -179, 146, 0, 0, 32767,
+ -468, 32767, 0, 0, 32767, 32767, 32767, 211,
+ 32767, 32767, 0, 32767, 0, 52, 32767, 0,
+ 32767, 0, 692, 990, 32767, 32767, 32767, 56,
+ -507, 784, 951, 0, 32767, 0, 697, 32767,
+ 187, 0, 32767, 32767, 430, 1209, 682, 32767,
+ 130, 0, -25, 0, -1006, 0, 32767, 214,
+ 433, 22, 0, -1119, 32767, 285, 32767, 32767,
+ 32767, 216, 32767, 32767, 32767, 217, 527, 32767,
+ 32767, 32767, 829, 485, 419, 717, 620, 731,
+ 32767, 470, 0, -145, -620, 1162, -644, 848,
+ 287, -632, 32767, 32767, 32767, 32767, 381, 32767,
+ 510, 511, -554, -2, 32767, 0, 0, 698,
+ 32767, 32767, 436, 1154, 32767, 463, 32767, 32767,
+ 627, 517, 32767, 32767, 854, 579, 723, 396,
+ 110, -42, 354, 32767, 664, 32767, 32767, 0,
+ 0, 32767, 65, -163, 67, 140, 69, 341,
+ 70, 71, 402, 73, 623, 544, 624, 417,
+ -1375, 648, 32767, -26, 904, 0, 548, 0,
+ 0, 32767, 32767, 855, 32767, 488, -524, 599,
+ 130, 131, 32767, 32767, 542, -1110, -324, -462,
+ 32767, -405, -440, 0, 0, 629, 850, 0,
+ 741, 257, 258, 32767, 32767, 0, 32767, 923,
+ 0, 32767, 0, 32767, 1559, 32767, 32767, 32767,
+ 671, 32767, 134, 32767, 32767, -336, -104, 576,
+ 577, 829, 32767, 32767, 762, 902, 32767, 0,
+ 32767, 0, 1506, 887, 32767, 636, 601, 2465,
+ 426, 0, 236, 317, 427, 968, 32767, -975,
+ -559, -343, 341, 32767, 937, 241, 0, 32767,
+ 32767, 547, 32767, 32767, 32767, 32767, 32767, 789,
+ 0, 32767, 32767, 32767, 0, 0, 0, 32767,
+ -192, 859, 1185, 1153, 69, 32767, 32767, 32767,
+ -539, 32767, 32767, 0, 32767, 32767, 32767, 32767,
+ 640, 578, 32767, 32767, -766, 32767, 32767, 32767,
+ 32767, 1050, -572, 32767, 32767, 32767, 32767, 1268,
+ 32767, 32767, 32767, 754, 32767, 32767, 1640, 179,
+ 804, 32767, 32767, 32767, 32767, 0, 684, 943,
+ 1006, 32767, 32767, 652, 0, 32767, 1041, 32767,
+ 718, 791, 32767, 274, 697, 32767, 32767, 0,
+ 32767, 32767, 32767, 0, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 735,
+ 0, 32767, 32767, 32767, 275, 358, 688, 32767,
+ 32767, 32767, 548, -87, 770, 32767, -42, 0,
+ 551, 32767, 691, 222, 32767, 32767, 32767, 32767,
+ 0, 1273, 403, -121, 806, 553, 554, 163,
+ 32767, 32767, 892, 825, 32767, 32767, -490, 32767,
+ 32767, 32767, 32767, 32767, -109, 744, 910, 32767,
+ 91, 32767, 32767, 0, 0, 32767, 32767, 32767,
+ 1521, 50, 701, 32767, 32767, 32767, 32767, 164,
+ 658, 32767, 288, 0, 32767, 0, 51, 0,
+ 32767, 32767, 32767, 32767, 555, 1547, 32767, 32767,
+ 595, 585, 429, 32767, -80, 32767, 1258, 0,
+ 540, 486, -434, 865, 0, 192, 0, 884,
+ 0, 0, 0, 175, 555, 0, 32767, 32767,
+ 0, 32767, -566, 866, 591, 32767, 32767, 32767,
+ 32767, 32767, 496, 495, -215, 32767, 849, -772,
+ 32767, 32767, 502, 178, 483, 32767, 912, 793,
+ 794, 0, 32767, 32767, 32767, -556, 499, 838,
+ 32767, 32767, -506, 331, 0, 0, -1096, 512,
+ 880, 0, 774, -338, 649, 32767, 270, 32767,
+ 32767, -624, 328, 459, 32767, 32767, 32767, 32767,
+ 329, -201, -835, 813, -879, 560, 0, -212,
+ -114, 35, -494, 37, 523, 653, 751, -653,
+ -743, 32767, 1356, 818, 32767, 32767, 856, 0,
+ 44, 902, 0, 0, 0, 0, 32767, -26,
+ 526, 795, 456, 32767, 104, -209, -341, 133,
+ -372, 0, 45, 110, 111, 0, 511, 47,
+ 114, 32767, 32767, 93, 48, 116, -1031, -279,
+ 32767, 192, 0, 32767, 453, 415, 0, -190,
+ 32767, 471, 240, 175, 29, 665, 684, 0,
+ -11, -95, -344, 32767, 245, 148, 0, 530,
+ 0, 1185, -615, -712, 693, 784, 32767, 0,
+ -776, 32767, 32767, -813, 0, 0, 0, 207,
+ 208, 32767, 674, 32767, 742, -289, 249, 32767,
+ 520, 929, -50, 781, 0, -778, 32767, 0,
+ 302, 32767, 720, -465, 0, 32767, 32767, 32767,
+ 0, 0, 32767, 833, 328, 806, 32767, -403,
+ 0, 32767, -77, 32767, 0, 441, 930, 32767,
+ 643, 0, 32767, 1938, 0, 1334, 381, 32767,
+ 216, 32767, 32767, 0, 32767, 484, 383, 0,
+ 242, 395, 0, 32767, 32767, 32767, -781, 355,
+ 356, 32767, 292, 706, 32767, 32767, 32767, 32767,
+ 32767, -410, 32767, 32767, 782, 32767, 189, 32767,
+ 32767, 943, 0, -212, 407, 335, 0, 135,
+ 32767, 616, 0, -497, 0, -67, 853, 32767,
+ 700, 32767, 0, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 0, 459, -48, 32767, 58, 0,
+ -856, 1017, 32767, 59, 916, -731, 32767, 940,
+ -855, 347, 650, 0, 678, 32767, 0, 32767,
+ 32767, 530, 32767, 0, -80, 32767, -730, 32767,
+ 1214, 799, 58, 651, 841, 0, 0, -589,
+ -1530, -478, 651, 652, 93, 576, -1215, 32767,
+ 125, 32767, 1279, 32767, 32767, 0, 32767, 0,
+ -367, 416, -1236, 32767, 418, 32767, 815, 558,
+ 559, 781, 419, 32767, 739, 32767, 0, 32767,
+ 128, 570, 1349, -298, -66, 0, 147, -488,
+ 32767, 590, 189, 274, 524, 32767, 1082, -209,
+ 32767, 423, 32767, 32767, 975, 573, 32767, 424,
+ 32767, 32767, 1241, 32767, 32767, 32767, 32767, 32767,
+ 612, 391, 32767, 0, -803, 1004, -561, 32767,
+ 32767, 735, 870, 32767, 0, 32767, 32767, -123,
+ 99, 210, 600, 1294, 109, 1053, 32767, 307,
+ 834, 32767, 0, 1651, 32767, 644, 32767, 32767,
+ 0, 32767, -801, 385, 379, 32767, -368, 32767,
+ 32767, 830, 0, 32767, 32767, 739, 371, 372,
+ -275, 32767, 32767, 331, -780, 32767, 0, 1229,
+ -1462, 913, 266, 827, 125, 32767, 32767, 32767,
+ 393, 32767, 631, -33, -883, -661, -204, 6,
+ -19, 257, 8, 9, 118, 519, 615, -541,
+ -893, 0, 32767, 0, 1156, 15, 900, 32767,
+ 32767, 32767, 32767, 32767, 32767, 1022, 376, 0,
+ 32767, 32767, -972, 676, 840, -661, 631, 58,
+ 0, 17, 32767, 0, -799, 82, 0, 32767,
+ 32767, 680, 32767, 905, 0, 0, 32767, 32767,
+ 0, 0, 32767, 0, 828, 386, 802, 0,
+ 146, 0, 148, 32767, -1146, 0, 150, 151,
+ -743, 153, 154, 32767, 32767, 442, 32767, 743,
+ 0, 0, 746, 0, 32767, 32767, 32767, 98,
+ 32767, 157, 0, 696, 0, 32767, 32767, -294,
+ 32767, 158, 159, 32767, 0, 32767, 160, 32767,
+ 933, 32767, 32767, -50, 759, 824, 162, 672,
+ 32767, 356, 0, 356, 32767, 32767, 0, 0,
+ 656, 692, 253, 254, -374, 102, 256, 32767,
+ 0, 0, 32767, 32767, 259, 32767, 63, 260,
+ 510, 261, 32767, 0, 32767, 1061, 32767, 521,
+ 32767, 32767, 32767, 32767, 32767, 32767, 316, 317,
+ 846, 0, 32767, -500, 318, 0, 32767, 32767,
+ 263, 0, 790, 872, 32767, 32767, 32767, 2171,
+ 264, 32767, 32767, 32767, 32767, 486, 334, 465,
+ 32767, 466, 32767, 444, 606, 32767, 0, 445,
+ 320, -317, 0, 520, 322, 718, 32767, 32767,
+ 32767, 0, 1013, 32767, 32767, 32767, 32767, 32767,
+ 32767, 611, 32767, 0, 0, 32767, 32767, -120,
+ 156, 613, 0, 0, 32767, -68, 32767, 622,
+ 32767, 32767, 32767, 32767, 32767, 455, 32767, 32767,
+ 32767, 403, 533, 0, -161, 405, 95, 96,
+ 32767, 97, 32767, 0, 29, 0, 32767, 32767,
+ 30, 32767, 99, 32767, 32767, 0, 161, 32767,
+ 97, 0, 32, 32767, 32767, 0, 0, 315,
+ 32767, 32767, 414, 966, 0, 585, 32767, 32767,
+ -616, -256, 171, 172, 666, 101, 562, 563,
+ 32767, 95, 0, 0, 1492, 390, -251, 103,
+ 32767, 0, 32767, 188, 1487, 32767, 0, 0,
+ 586, 668, -126, 0, 0, 32767, 32767, 204,
+ 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 32767, 656, 32767, 32767,
+ 599, 0, 222, 32767, 0, 1368, -412, 435,
+ 32767, 936, 32767, -17, 32767, 832, 32767, 437,
+ 0, -518, 787, 32767, 864, -449, 0, 636,
+ 713, 206, 592, 572, 0, 483, -139, 32767,
+ 32767, 180, 818, 32767, 32767, 1304, 0, 32767,
+ 274, 0, 0, 0, 0, 705, 32767, 32767,
+ 32767, 0, -272, 0, 502, 503, 319, 0,
+ 32767, 0, 13, 32767, 32767, 0, 32767, 270,
+ 737, 0, 32767, 32767, 32767, 901, 32767, 616,
+ 180, 32767, 721, 353, 32767, 0, 32767, 32767,
+ -199, 0, 280, 788, 32767, 940, 32767, 51,
+ 0, 400, 53, 0, 54, -637, 0, -453,
+ 0, 0, 0, 380, 0, 32767, 504, 0,
+ 2049, 0, -964, 32767, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 798, 32767, 32767, 32767, 0,
+ 538, 488, 0, 32767, -528, 57, 819, 32767,
+ 32767, 1244, 0, 488, 739, 908, 32767, 32767,
+ 0, 32767, 32767, 0, 55, 533, 0, 32767,
+ 814, 0, 32767, 458, 0, 32767, 32767, 32767,
+ 32767, 32767, 32767, 32767, 776, 777, 920, 0,
+ 0, 755, 32767, 0, 32767, 32767, 0, 32767,
+ 55, -954, 0, 372, 166, 218, 165, 857,
+ 221, 675, 0, 223, 224, -155, 226, 32767,
+ 1851, 227, 32767, 32767, 1192, 0, 229, 0,
+ -72, 0, 865, 0, 0, -330, 0, 683,
+ 32767, -550, -196, 725, -573, 293, 102, 32767,
+ -589, 296, 297, 298, 231, -256, 300, 32767,
+ 32767, 301, 233, 868, 32767, 234, 0, 811,
+ 1187, 32767, 32767, 0, 32767, 518, 0, 361,
+ 362, 466, 0, 365, 32767, -179, 366, 367,
+ 874, 369, 305, 0, 32767, 0, 32767, 0,
+ 32767, 2000, 1215, 451, 652, 0, 0, 799,
+ 32767, 32767, 32767
+ };
+
+ const unsigned char *k = (const unsigned char *) key;
+ size_t keylen = 8;
+ uint32 a = 0;
+ uint32 b = 0;
+
+ while (keylen--)
+ {
+ unsigned char c = *k++;
+
+ a = a * 257 + c;
+ b = b * 17 + c;
+ }
+ return h[a % 1883] + h[b % 1883];
+}
+
+/* Hash lookup information for recomposition */
+static const pg_unicode_recompinfo UnicodeRecompInfo =
+{
+ RecompInverseLookup,
+ Recomp_hash_func,
+ 941
+};
diff --git a/src/common/unicode/Makefile b/src/common/unicode/Makefile
index 93a9d1615f..eb14add28a 100644
--- a/src/common/unicode/Makefile
+++ b/src/common/unicode/Makefile
@@ -18,7 +18,7 @@ LIBS += $(PTHREAD_LIBS)
# By default, do nothing.
all:
-update-unicode: unicode_norm_table.h unicode_combining_table.h unicode_normprops_table.h
+update-unicode: unicode_norm_table.h unicode_combining_table.h unicode_normprops_table.h unicode_norm_hashfunc.h
mv $^ ../../../src/include/common/
$(MAKE) normalization-check
@@ -30,6 +30,8 @@ UnicodeData.txt DerivedNormalizationProps.txt CompositionExclusions.txt Normaliz
# Generation of conversion tables used for string normalization with
# UTF-8 strings.
+unicode_norm_hashfunc.h: unicode_norm_table.h
+
unicode_norm_table.h: generate-unicode_norm_table.pl UnicodeData.txt CompositionExclusions.txt
$(PERL) generate-unicode_norm_table.pl
diff --git a/src/common/unicode/generate-unicode_norm_table.pl b/src/common/unicode/generate-unicode_norm_table.pl
index 7ce15e1a03..f527560334 100644
--- a/src/common/unicode/generate-unicode_norm_table.pl
+++ b/src/common/unicode/generate-unicode_norm_table.pl
@@ -1,16 +1,22 @@
#!/usr/bin/perl
#
-# Generate a composition table, using Unicode data files as input
+# Generate a composition table and its lookup utilities, using Unicode data
+# files as input
#
# Input: UnicodeData.txt and CompositionExclusions.txt
-# Output: unicode_norm_table.h
+# Output: unicode_norm_table.h and unicode_norm_hashfunc.h
#
# Copyright (c) 2000-2020, PostgreSQL Global Development Group
use strict;
use warnings;
-my $output_file = "unicode_norm_table.h";
+use FindBin;
+use lib "$FindBin::RealBin/../../tools/";
+use PerfectHash;
+
+my $output_table_file = "unicode_norm_table.h";
+my $output_func_file = "unicode_norm_hashfunc.h";
my $FH;
@@ -64,11 +70,13 @@ close $FH;
my $num_characters = scalar @characters;
-# Start writing out the output file
-open my $OUTPUT, '>', $output_file
- or die "Could not open output file $output_file: $!\n";
+# Start writing out the output files
+open my $OT, '>', $output_table_file
+ or die "Could not open output file $output_table_file: $!\n";
+open my $OF, '>', $output_func_file
+ or die "Could not open output file $output_func_file: $!\n";
-print $OUTPUT <<HEADER;
+print $OT <<HEADER;
/*-------------------------------------------------------------------------
*
* unicode_norm_table.h
@@ -111,8 +119,53 @@ static const pg_unicode_decomposition UnicodeDecompMain[$num_characters] =
{
HEADER
+print $OF <<HEADER;
+/*-------------------------------------------------------------------------
+ *
+ * unicode_norm_hashfunc.h
+ * Perfect hash functions used for Unicode normalization
+ *
+ * Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/common/unicode_norm_hashfunc.h
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/*
+ * File auto-generated by src/common/unicode/generate-unicode_norm_table.pl,
+ * do not edit. There is deliberately not an #ifndef PG_UNICODE_NORM_HASHFUNC_H
+ * here.
+ */
+
+#include "common/unicode_norm_table.h"
+
+/* Typedef for perfect hash functions */
+typedef int (*cp_hash_func) (const void *key);
+
+/* Information for lookups with perfect hash functions */
+typedef struct
+{
+ const pg_unicode_decomposition *decomps;
+ cp_hash_func hash;
+ int num_decomps;
+} pg_unicode_decompinfo;
+
+typedef struct
+{
+ const uint16 *inverse_lookup;
+ cp_hash_func hash;
+ int num_recomps;
+} pg_unicode_recompinfo;
+
+HEADER
+
my $decomp_index = 0;
my $decomp_string = "";
+my @dec_cp_packed;
+my $main_index = 0;
+my @rec_info;
my $last_code = $characters[-1]->{code};
foreach my $char (@characters)
@@ -121,6 +174,9 @@ foreach my $char (@characters)
my $class = $char->{class};
my $decomp = $char->{decomp};
+ # Save the code point bytes as a string in network order.
+ push @dec_cp_packed, pack('N', hex($char->{code}));
+
# The character decomposition mapping field in UnicodeData.txt is a list
# of unicode codepoints, separated by space. But it can be prefixed with
# so-called compatibility formatting tag, like "<compat>", or "<font>".
@@ -163,7 +219,7 @@ foreach my $char (@characters)
{
foreach my $lcode (@composition_exclusion_codes)
{
- if ($lcode eq $char->{code})
+ if ($lcode eq $code)
{
$flags .= " | DECOMP_NO_COMPOSE";
$comment = "in exclusion list";
@@ -171,11 +227,26 @@ foreach my $char (@characters)
}
}
}
+
+ # Save info for recomposeable codepoints.
+ # Note that this MUST match the macro DECOMPOSITION_NO_COMPOSE in C
+ # above! See also the inverse lookup in recompose_code() found in
+ # src/common/unicode_norm.c.
+ if (!($flags =~ /DECOMP_COMPAT/ || $flags =~ /DECOMP_NO_COMPOSE/))
+ {
+ push @rec_info,
+ {
+ code => $code,
+ main_index => $main_index,
+ first => $first_decomp,
+ second => $decomp_elts[0]
+ };
+ }
}
if ($decomp_size == 0)
{
- print $OUTPUT "\t{0x$code, $class, 0$flags, 0}";
+ print $OT "\t{0x$code, $class, 0$flags, 0}";
}
elsif ($decomp_size == 1 && length($first_decomp) <= 4)
{
@@ -183,12 +254,11 @@ foreach my $char (@characters)
# The decomposition consists of a single codepoint, and it fits
# in a uint16, so we can store it "inline" in the main table.
$flags .= " | DECOMP_INLINE";
- print $OUTPUT "\t{0x$code, $class, 1$flags, 0x$first_decomp}";
+ print $OT "\t{0x$code, $class, 1$flags, 0x$first_decomp}";
}
else
{
- print $OUTPUT
- "\t{0x$code, $class, $decomp_size$flags, $decomp_index}";
+ print $OT "\t{0x$code, $class, $decomp_size$flags, $decomp_index}";
# Now save the decompositions into a dedicated area that will
# be written afterwards. First build the entry dedicated to
@@ -205,25 +275,17 @@ foreach my $char (@characters)
}
# Print a comma after all items except the last one.
- print $OUTPUT "," unless ($code eq $last_code);
- if ($comment ne "")
- {
+ print $OT "," unless ($code eq $last_code);
- # If the line is wide already, indent the comment with one tab,
- # otherwise with two. This is to make the output match the way
- # pgindent would mangle it. (This is quite hacky. To do this
- # properly, we should actually track how long the line is so far,
- # but this works for now.)
- print $OUTPUT "\t" if ($decomp_index < 10);
+ print $OT "\t/* $comment */" if ($comment ne "");
+ print $OT "\n";
- print $OUTPUT "\t/* $comment */" if ($comment ne "");
- }
- print $OUTPUT "\n";
+ $main_index++;
}
-print $OUTPUT "\n};\n\n";
+print $OT "\n};\n\n";
# Print the array of decomposed codes.
-print $OUTPUT <<HEADER;
+print $OT <<HEADER;
/* codepoints array */
static const uint32 UnicodeDecomp_codepoints[$decomp_index] =
{
@@ -231,4 +293,114 @@ $decomp_string
};
HEADER
-close $OUTPUT;
+# Emit the definition of the decomp hash function.
+my $dec_funcname = 'Decomp_hash_func';
+my $dec_func = PerfectHash::generate_hash_function(\@dec_cp_packed,
+ $dec_funcname, fixed_key_length => 4);
+print $OF "/* Perfect hash function for decomposition */\n";
+print $OF "static $dec_func\n";
+
+# Emit the structure that wraps the hash lookup information into
+# one variable.
+print $OF <<HEADER;
+/* Hash lookup information for decomposition */
+static const pg_unicode_decompinfo UnicodeDecompInfo =
+{
+ UnicodeDecompMain,
+ $dec_funcname,
+ $num_characters
+};
+
+HEADER
+
+# Find the lowest codepoint that decomposes to each recomposeable
+# code pair and create a mapping to it.
+my $recomp_string = "";
+my @rec_cp_packed;
+my %seenit;
+my $firstentry = 1;
+foreach my $rec (sort recomp_sort @rec_info)
+{
+ # The hash key is formed by concatenating the bytes of the two
+ # codepoints. See also recompose_code() in common/unicode_norm.c.
+ my $hashkey = (hex($rec->{first}) << 32) | hex($rec->{second});
+
+ # We are only interested in the lowest code point that decomposes
+ # to the given code pair.
+ next if $seenit{$hashkey};
+
+ # Save the hash key bytes in network order
+ push @rec_cp_packed, pack('Q>', $hashkey);
+
+ # Append inverse lookup element
+ $recomp_string .= ",\n" if !$firstentry;
+ $recomp_string .= sprintf "\t/* U+%s+%s -> U+%s */ %s",
+ $rec->{first},
+ $rec->{second},
+ $rec->{code},
+ $rec->{main_index};
+
+ $seenit{$hashkey} = 1;
+ $firstentry = 0;
+}
+
+# Emit the inverse lookup array containing indexes into UnicodeDecompMain.
+my $num_recomps = scalar @rec_cp_packed;
+print $OF <<HEADER;
+/* Inverse lookup array -- contains indexes into UnicodeDecompMain[] */
+static const uint16 RecompInverseLookup[$num_recomps] =
+{
+$recomp_string
+};
+
+HEADER
+
+# Emit the definition of the recomposition hash function.
+my $rec_funcname = 'Recomp_hash_func';
+my $rec_func =
+ PerfectHash::generate_hash_function(\@rec_cp_packed, $rec_funcname,
+ fixed_key_length => 8);
+print $OF "/* Perfect hash function for recomposition */\n";
+print $OF "static $rec_func\n";
+
+# Emit the structure that wraps the hash lookup information into
+# one variable.
+print $OF <<HEADER;
+/* Hash lookup information for recomposition */
+static const pg_unicode_recompinfo UnicodeRecompInfo =
+{
+ RecompInverseLookup,
+ $rec_funcname,
+ $num_recomps
+};
+HEADER
+
+close $OT;
+close $OF;
+
+sub recomp_sort
+{
+ my $a1 = hex($a->{first});
+ my $b1 = hex($b->{first});
+
+ my $a2 = hex($a->{second});
+ my $b2 = hex($b->{second});
+
+ # First sort by the first code point
+ return -1 if $a1 < $b1;
+ return 1 if $a1 > $b1;
+
+ # Then sort by the second code point
+ return -1 if $a2 < $b2;
+ return 1 if $a2 > $b2;
+
+ # Finally sort by the code point that decomposes into first and
+ # second ones.
+ my $acode = hex($a->{code});
+ my $bcode = hex($b->{code});
+
+ return -1 if $acode < $bcode;
+ return -1 if $acode > $bcode;
+
+ die "found duplicate entries of recomposeable code pairs";
+}
diff --git a/src/common/unicode_norm.c b/src/common/unicode_norm.c
index 4bb6a0f587..4ffce0e619 100644
--- a/src/common/unicode_norm.c
+++ b/src/common/unicode_norm.c
@@ -19,9 +19,11 @@
#endif
#include "common/unicode_norm.h"
-#include "common/unicode_norm_table.h"
#ifndef FRONTEND
+#include "common/unicode_norm_hashfunc.h"
#include "common/unicode_normprops_table.h"
+#else
+#include "common/unicode_norm_table.h"
#endif
#include "port/pg_bswap.h"
@@ -44,6 +46,46 @@
#define NCOUNT VCOUNT * TCOUNT
#define SCOUNT LCOUNT * NCOUNT
+/*
+ * get_code_entry
+ *
+ * Get the entry corresponding to code in the decomposition lookup table.
+ * The backend version of this code uses a perfect hash function for the
+ * lookup, while the frontend version uses a binary search.
+ */
+#ifndef FRONTEND
+
+static const pg_unicode_decomposition *
+get_code_entry(pg_wchar code)
+{
+ int h;
+ uint32 hashkey;
+ pg_unicode_decompinfo decompinfo = UnicodeDecompInfo;
+
+ /*
+ * Compute the hash function. The hash key is the codepoint with the bytes
+ * in network order.
+ */
+ hashkey = pg_hton32(code);
+ h = decompinfo.hash(&hashkey);
+
+ /* An out-of-range result implies no match */
+ if (h < 0 || h >= decompinfo.num_decomps)
+ return NULL;
+
+ /*
+ * Since it's a perfect hash, we need only match to the specific codepoint
+ * it identifies.
+ */
+ if (code != decompinfo.decomps[h].codepoint)
+ return NULL;
+
+ /* Success! */
+ return &decompinfo.decomps[h];
+}
+
+#else
+
/* comparison routine for bsearch() of decomposition lookup table. */
static int
conv_compare(const void *p1, const void *p2)
@@ -56,10 +98,7 @@ conv_compare(const void *p1, const void *p2)
return (v1 > v2) ? 1 : ((v1 == v2) ? 0 : -1);
}
-/*
- * Get the entry corresponding to code in the decomposition lookup table.
- */
-static pg_unicode_decomposition *
+static const pg_unicode_decomposition *
get_code_entry(pg_wchar code)
{
return bsearch(&(code),
@@ -69,6 +108,8 @@ get_code_entry(pg_wchar code)
conv_compare);
}
+#endif /* !FRONTEND */
+
/*
* Given a decomposition entry looked up earlier, get the decomposed
* characters.
@@ -77,7 +118,7 @@ get_code_entry(pg_wchar code)
* is only valid until next call to this function!
*/
static const pg_wchar *
-get_code_decomposition(pg_unicode_decomposition *entry, int *dec_size)
+get_code_decomposition(const pg_unicode_decomposition *entry, int *dec_size)
{
static pg_wchar x;
@@ -104,7 +145,7 @@ get_code_decomposition(pg_unicode_decomposition *entry, int *dec_size)
static int
get_decomposed_size(pg_wchar code, bool compat)
{
- pg_unicode_decomposition *entry;
+ const pg_unicode_decomposition *entry;
int size = 0;
int i;
const uint32 *decomp;
@@ -191,17 +232,51 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
}
else
{
- int i;
+ const pg_unicode_decomposition *entry;
/*
* Do an inverse lookup of the decomposition tables to see if anything
* matches. The comparison just needs to be a perfect match on the
* sub-table of size two, because the start character has already been
- * recomposed partially.
+ * recomposed partially. This lookup uses a perfect hash function for
+ * the backend code.
*/
+#ifndef FRONTEND
+
+ int h,
+ inv_lookup_index;
+ uint64 hashkey;
+ pg_unicode_recompinfo recompinfo = UnicodeRecompInfo;
+
+ /*
+ * Compute the hash function. The hash key is formed by concatenating
+ * bytes of the two codepoints in network order. See also
+ * src/common/unicode/generate-unicode_norm_table.pl.
+ */
+ hashkey = pg_hton64(((uint64) start << 32) | (uint64) code);
+ h = recompinfo.hash(&hashkey);
+
+ /* An out-of-range result implies no match */
+ if (h < 0 || h >= recompinfo.num_recomps)
+ return false;
+
+ inv_lookup_index = recompinfo.inverse_lookup[h];
+ entry = &UnicodeDecompMain[inv_lookup_index];
+
+ if (start == UnicodeDecomp_codepoints[entry->dec_index] &&
+ code == UnicodeDecomp_codepoints[entry->dec_index + 1])
+ {
+ *result = entry->codepoint;
+ return true;
+ }
+
+#else
+
+ int i;
+
for (i = 0; i < lengthof(UnicodeDecompMain); i++)
{
- const pg_unicode_decomposition *entry = &UnicodeDecompMain[i];
+ entry = &UnicodeDecompMain[i];
if (DECOMPOSITION_SIZE(entry) != 2)
continue;
@@ -216,6 +291,7 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
return true;
}
}
+#endif /* !FRONTEND */
}
return false;
@@ -231,7 +307,7 @@ recompose_code(uint32 start, uint32 code, uint32 *result)
static void
decompose_code(pg_wchar code, bool compat, pg_wchar **result, int *current)
{
- pg_unicode_decomposition *entry;
+ const pg_unicode_decomposition *entry;
int i;
const uint32 *decomp;
int dec_size;
@@ -358,8 +434,8 @@ unicode_normalize(UnicodeNormalizationForm form, const pg_wchar *input)
pg_wchar prev = decomp_chars[count - 1];
pg_wchar next = decomp_chars[count];
pg_wchar tmp;
- pg_unicode_decomposition *prevEntry = get_code_entry(prev);
- pg_unicode_decomposition *nextEntry = get_code_entry(next);
+ const pg_unicode_decomposition *prevEntry = get_code_entry(prev);
+ const pg_unicode_decomposition *nextEntry = get_code_entry(next);
/*
* If no entries are found, the character used is either an Hangul
@@ -417,7 +493,7 @@ unicode_normalize(UnicodeNormalizationForm form, const pg_wchar *input)
for (count = 1; count < decomp_size; count++)
{
pg_wchar ch = decomp_chars[count];
- pg_unicode_decomposition *ch_entry = get_code_entry(ch);
+ const pg_unicode_decomposition *ch_entry = get_code_entry(ch);
int ch_class = (ch_entry == NULL) ? 0 : ch_entry->comb_class;
pg_wchar composite;
@@ -458,7 +534,7 @@ unicode_normalize(UnicodeNormalizationForm form, const pg_wchar *input)
static uint8
get_canonical_class(pg_wchar ch)
{
- pg_unicode_decomposition *entry = get_code_entry(ch);
+ const pg_unicode_decomposition *entry = get_code_entry(ch);
if (!entry)
return 0;
diff --git a/src/tools/pgindent/exclude_file_patterns b/src/tools/pgindent/exclude_file_patterns
index 86bdd9d6dc..f08180b0d0 100644
--- a/src/tools/pgindent/exclude_file_patterns
+++ b/src/tools/pgindent/exclude_file_patterns
@@ -18,9 +18,10 @@ src/backend/utils/fmgrprotos\.h$
# they match pgindent style, they'd look worse not better, so exclude them.
kwlist_d\.h$
#
-# This is generated by the scripts from src/common/unicode/. It uses
+# These are generated by the scripts from src/common/unicode/. They use
# hash functions generated by PerfectHash.pm whose format looks worse with
# pgindent.
+src/include/common/unicode_norm_hashfunc\.h$
src/include/common/unicode_normprops_table\.h$
#
# Exclude ecpg test files to avoid breaking the ecpg regression tests
On Thu, Oct 22, 2020 at 12:34 AM Michael Paquier <michael@paquier.xyz>
wrote:
Thanks for the updated version, that was fast. I have found a couple
of places that needed to be adjusted, like the comment at the top of
generate-unicode_norm_table.pl or some comments, an incorrect include
in the new headers and the indentation was not right in perl (we use
perltidy v20170521, see the README in src/tools/pgindent).Except that, this looks good to me. Attached is the updated version
with all my tweaks, that I would like to commit. If there are any
comments, please feel free of course.
Looks good to me.
--
John Naylor
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
On Thu, Oct 22, 2020 at 05:50:52AM -0400, John Naylor wrote:
Looks good to me.
Thanks. Committed, then. Great work!
--
Michael
On Thu, Oct 22, 2020 at 10:11 PM Michael Paquier <michael@paquier.xyz>
wrote:
On Thu, Oct 22, 2020 at 05:50:52AM -0400, John Naylor wrote:
Looks good to me.
Thanks. Committed, then. Great work!
Thank you!
--
John Naylor
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
I chanced to do an --enable-coverage test run today, and I got this
weird message during "make coverage-html":
genhtml: WARNING: function data mismatch at /home/postgres/pgsql/src/common/unicode_norm.c:102
I've never seen anything like that before. I suppose it means that
something about 783f0cc64 is a bit fishy, but I don't know what.
The emitted coverage report looks fairly normal anyway. It says
unicode_norm.c has zero test coverage, which is very possibly correct
since I wasn't running in UTF8 encoding, but I'm not entirely sure of
that either.
This is with RHEL8's lcov-1.13-4.el8 package. I suppose the first
question is does anybody else see that?
regards, tom lane
On Oct 23, 2020, at 9:07 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
I chanced to do an --enable-coverage test run today, and I got this
weird message during "make coverage-html":genhtml: WARNING: function data mismatch at /home/postgres/pgsql/src/common/unicode_norm.c:102
I've never seen anything like that before. I suppose it means that
something about 783f0cc64 is a bit fishy, but I don't know what.The emitted coverage report looks fairly normal anyway. It says
unicode_norm.c has zero test coverage, which is very possibly correct
since I wasn't running in UTF8 encoding, but I'm not entirely sure of
that either.This is with RHEL8's lcov-1.13-4.el8 package. I suppose the first
question is does anybody else see that?
I don't see it on mac nor on ubuntu64. I get 70.6% coverage of lines and 90.9% of functions on ubuntu.
—
Mark Dilger
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
On Fri, Oct 23, 2020 at 04:18:13PM -0700, Mark Dilger wrote:
On Oct 23, 2020, at 9:07 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
genhtml: WARNING: function data mismatch at /home/postgres/pgsql/src/common/unicode_norm.c:102
I've never seen anything like that before. I suppose it means that
something about 783f0cc64 is a bit fishy, but I don't know what.The emitted coverage report looks fairly normal anyway. It says
unicode_norm.c has zero test coverage, which is very possibly correct
since I wasn't running in UTF8 encoding, but I'm not entirely sure of
that either.I don't see it on mac nor on ubuntu64. I get 70.6% coverage of
lines and 90.9% of functions on ubuntu.
I can see the problem on Debian GID with lcov 1.14-2. This points to
the second declaration of get_code_entry(). I think that genhtml,
because it considers the code of unicode_norm.c as a whole without its
CFLAGS, gets confused because it finds the same function to index as
defined twice. It expects only one definition, hence the warning. So
I think that this can lead to some incorrect data in the HTML report,
and the attached patch takes care of fixing that. Tom, does it take
care of the issue on your side?
--
Michael
Attachments:
unicode-coverage-fix.patchtext/x-diff; charset=us-asciiDownload
diff --git a/src/common/unicode_norm.c b/src/common/unicode_norm.c
index 4ffce0e619..7cc8faa63a 100644
--- a/src/common/unicode_norm.c
+++ b/src/common/unicode_norm.c
@@ -53,11 +53,26 @@
* The backend version of this code uses a perfect hash function for the
* lookup, while the frontend version uses a binary search.
*/
-#ifndef FRONTEND
+#ifdef FRONTEND
+/* comparison routine for bsearch() of decomposition lookup table. */
+static int
+conv_compare(const void *p1, const void *p2)
+{
+ uint32 v1,
+ v2;
+
+ v1 = *(const uint32 *) p1;
+ v2 = ((const pg_unicode_decomposition *) p2)->codepoint;
+ return (v1 > v2) ? 1 : ((v1 == v2) ? 0 : -1);
+}
+
+#endif
static const pg_unicode_decomposition *
get_code_entry(pg_wchar code)
{
+#ifndef FRONTEND
+
int h;
uint32 hashkey;
pg_unicode_decompinfo decompinfo = UnicodeDecompInfo;
@@ -82,33 +97,17 @@ get_code_entry(pg_wchar code)
/* Success! */
return &decompinfo.decomps[h];
-}
#else
-/* comparison routine for bsearch() of decomposition lookup table. */
-static int
-conv_compare(const void *p1, const void *p2)
-{
- uint32 v1,
- v2;
-
- v1 = *(const uint32 *) p1;
- v2 = ((const pg_unicode_decomposition *) p2)->codepoint;
- return (v1 > v2) ? 1 : ((v1 == v2) ? 0 : -1);
-}
-
-static const pg_unicode_decomposition *
-get_code_entry(pg_wchar code)
-{
return bsearch(&(code),
UnicodeDecompMain,
lengthof(UnicodeDecompMain),
sizeof(pg_unicode_decomposition),
conv_compare);
+#endif
}
-#endif /* !FRONTEND */
/*
* Given a decomposition entry looked up earlier, get the decomposed
Michael Paquier <michael@paquier.xyz> writes:
On Fri, Oct 23, 2020 at 04:18:13PM -0700, Mark Dilger wrote:
On Oct 23, 2020, at 9:07 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
genhtml: WARNING: function data mismatch at /home/postgres/pgsql/src/common/unicode_norm.c:102
I can see the problem on Debian GID with lcov 1.14-2. This points to
the second declaration of get_code_entry(). I think that genhtml,
because it considers the code of unicode_norm.c as a whole without its
CFLAGS, gets confused because it finds the same function to index as
defined twice. It expects only one definition, hence the warning. So
I think that this can lead to some incorrect data in the HTML report,
and the attached patch takes care of fixing that. Tom, does it take
care of the issue on your side?
Good catch! Yeah, that fixes it for me.
I'd advise not putting conv_compare() between get_code_entry() and
the header comment for get_code_entry(). Looks good otherwise.
regards, tom lane
On Fri, Oct 23, 2020 at 08:24:06PM -0400, Tom Lane wrote:
I'd advise not putting conv_compare() between get_code_entry() and
the header comment for get_code_entry(). Looks good otherwise.
Indeed. I have adjusted the position of the comment, and applied the
fix. Thanks for the report.
--
Michael
There is a latent bug in the way code pairs for recomposition are sorted
due to a copy-pasto on my part. Makes no difference now, but it could in
the future. While looking, it seems pg_bswap.h should actually be
backend-only. Both fixed in the attached.
--
John Naylor
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
Attachments:
minor-fixes-in-unicode-norm.patchapplication/octet-stream; name=minor-fixes-in-unicode-norm.patchDownload
diff --git a/src/common/unicode/generate-unicode_norm_table.pl b/src/common/unicode/generate-unicode_norm_table.pl
index e4d3ccc234..804841c1b1 100644
--- a/src/common/unicode/generate-unicode_norm_table.pl
+++ b/src/common/unicode/generate-unicode_norm_table.pl
@@ -400,7 +400,7 @@ sub recomp_sort
my $bcode = hex($b->{code});
return -1 if $acode < $bcode;
- return -1 if $acode > $bcode;
+ return 1 if $acode > $bcode;
die "found duplicate entries of recomposeable code pairs";
}
diff --git a/src/common/unicode_norm.c b/src/common/unicode_norm.c
index abb83cbf98..d46e33d322 100644
--- a/src/common/unicode_norm.c
+++ b/src/common/unicode_norm.c
@@ -22,10 +22,10 @@
#ifndef FRONTEND
#include "common/unicode_norm_hashfunc.h"
#include "common/unicode_normprops_table.h"
+#include "port/pg_bswap.h"
#else
#include "common/unicode_norm_table.h"
#endif
-#include "port/pg_bswap.h"
#ifndef FRONTEND
#define ALLOC(size) palloc(size)
On Fri, Nov 06, 2020 at 06:20:00PM -0400, John Naylor wrote:
There is a latent bug in the way code pairs for recomposition are sorted
due to a copy-pasto on my part. Makes no difference now, but it could in
the future. While looking, it seems pg_bswap.h should actually be
backend-only. Both fixed in the attached.
Thanks John. Both look right to me. I'll apply both in a bit.
--
Michael