/usr/local/share/www.unicode.org/Public/15.1.0/ucd/Scripts.txt \
/usr/local/share/www.unicode.org/Public/15.1.0/ucd/Blocks.txt \
/usr/local/share/www.unicode.org/Public/3.0-Update1/PropList-3.0.1.txt \
+ /usr/local/share/www.unicode.org/Public/15.1.0/ucd/BidiMirroring.txt \
/usr/local/share/www.unicode.org/Public/15.1.0/ucd/EastAsianWidth.txt \
/usr/local/share/www.unicode.org/Public/15.1.0/ucd/LineBreak.txt \
/usr/local/share/www.unicode.org/Public/15.1.0/ucd/auxiliary/WordBreakProperty.txt \
/* See Unicode 3.0 book, section 4.7,
UAX #9. */
-/* List of mirrored character pairs. This is a subset of the characters
- having the BidiMirrored property. */
-static unsigned int mirror_pairs[][2] =
-{
- { 0x0028, 0x0029 },
- { 0x003C, 0x003E },
- { 0x005B, 0x005D },
- { 0x007B, 0x007D },
- { 0x00AB, 0x00BB },
- { 0x2039, 0x203A },
- { 0x2045, 0x2046 },
- { 0x207D, 0x207E },
- { 0x208D, 0x208E },
- { 0x2208, 0x220B },
- { 0x220A, 0x220D },
- { 0x223C, 0x223D },
- { 0x2243, 0x22CD },
- { 0x2252, 0x2253 },
- { 0x2254, 0x2255 },
- { 0x2264, 0x2265 },
- { 0x2266, 0x2267 },
- { 0x226A, 0x226B },
- { 0x2276, 0x2277 },
- { 0x2278, 0x2279 },
- { 0x227A, 0x227B },
- { 0x227C, 0x227D },
- { 0x2282, 0x2283 },
- { 0x2286, 0x2287 },
- { 0x228F, 0x2290 },
- { 0x2291, 0x2292 },
- { 0x22A2, 0x22A3 },
- { 0x22B0, 0x22B1 },
- { 0x22B2, 0x22B3 },
- { 0x22B4, 0x22B5 },
- { 0x22B6, 0x22B7 },
- { 0x22C9, 0x22CA },
- { 0x22CB, 0x22CC },
- { 0x22D0, 0x22D1 },
- { 0x22D6, 0x22D7 },
- { 0x22D8, 0x22D9 },
- { 0x22DA, 0x22DB },
- { 0x22DC, 0x22DD },
- { 0x22DE, 0x22DF },
- { 0x22F0, 0x22F1 },
- { 0x2308, 0x2309 },
- { 0x230A, 0x230B },
- { 0x2329, 0x232A },
- { 0x3008, 0x3009 },
- { 0x300A, 0x300B },
- { 0x300C, 0x300D },
- { 0x300E, 0x300F },
- { 0x3010, 0x3011 },
- { 0x3014, 0x3015 },
- { 0x3016, 0x3017 },
- { 0x3018, 0x3019 },
- { 0x301A, 0x301B }
-};
+/* A pair of mirrored characters. */
+struct mirror_pair { unsigned int uc[2]; };
+
+/* List of mirrored character pairs, from the BidiMirroring.txt file.
+ This is a subset of the characters having the BidiMirrored property. */
+static struct mirror_pair mirror_pairs[1000];
+static unsigned int mirror_pairs_count;
+
+/* Stores in mirror_pairs[] the mirrored character pairs from the
+ BidiMirroring.txt file. */
+static void
+fill_mirror (const char *bidimirroring_filename)
+{
+ FILE *stream;
+ char field0[FIELDLEN];
+ char field1[FIELDLEN];
+ char field2[FIELDLEN];
+ int lineno = 0;
+
+ stream = fopen (bidimirroring_filename, "r");
+ if (stream == NULL)
+ {
+ fprintf (stderr, "error during fopen of '%s'\n", bidimirroring_filename);
+ exit (1);
+ }
+
+ mirror_pairs_count = 0;
+ for (;;)
+ {
+ int n;
+ int c;
+ unsigned int uc1;
+ unsigned int uc2;
+ unsigned int i;
+
+ lineno++;
+ c = getc (stream);
+ if (c == EOF)
+ break;
+ if (c == '\n')
+ continue;
+ if (c == '#')
+ {
+ do c = getc (stream); while (c != EOF && c != '\n');
+ continue;
+ }
+ ungetc (c, stream);
+ n = getfield (stream, field0, ';');
+ do c = getc (stream); while (c == ' ');
+ ungetc (c, stream);
+ n += getfield (stream, field1, '#');
+ n += getfield (stream, field2, '\n');
+ if (n == 0)
+ break;
+ if (n != 3)
+ {
+ fprintf (stderr, "short line in '%s':%d\n",
+ bidimirroring_filename, lineno);
+ exit (1);
+ }
+ /* Remove trailing spaces from field1. */
+ while (strlen (field1) > 0 && field1[strlen (field1) - 1] == ' ')
+ field1[strlen (field1) - 1] = '\0';
+ /* The line should contain two characters. */
+ uc1 = strtoul (field0, NULL, 16);
+ uc2 = strtoul (field1, NULL, 16);
+ if (uc1 == 0 || uc2 == 0 || uc1 == uc2)
+ {
+ fprintf (stderr, "parse error at '%s':%d\n",
+ bidimirroring_filename, lineno);
+ exit (1);
+ }
+ /* Verify that uc1 and uc2 are in range. */
+ if (!(uc1 < 0x110000))
+ {
+ fprintf (stderr, "%s mentions 0x%04X, which is out-of-range.\n",
+ bidimirroring_filename, uc1);
+ exit (1);
+ }
+ if (!(uc2 < 0x110000))
+ {
+ fprintf (stderr, "%s mentions 0x%04X, which is out-of-range.\n",
+ bidimirroring_filename, uc2);
+ exit (1);
+ }
+ /* Have we seen uc1 or uc2 already? */
+ for (i = 0; i < mirror_pairs_count; i++)
+ {
+ if (uc1 == mirror_pairs[i].uc[0])
+ {
+ fprintf (stderr, "%s: mapping conflict for 0x%04X\n",
+ bidimirroring_filename, uc1);
+ exit (1);
+ }
+ if (uc2 == mirror_pairs[i].uc[1])
+ {
+ fprintf (stderr, "%s: mapping conflict for 0x%04X\n",
+ bidimirroring_filename, uc2);
+ exit (1);
+ }
+ }
+ for (i = 0; i < mirror_pairs_count; i++)
+ if (uc1 == mirror_pairs[i].uc[1] || uc2 == mirror_pairs[i].uc[0])
+ break;
+ if (i < mirror_pairs_count)
+ {
+ if (uc1 != mirror_pairs[i].uc[1])
+ {
+ /* uc1 != mirror_pairs[i].uc[1], uc2 == mirror_pairs[i].uc[0] */
+ fprintf (stderr, "%s: mapping conflict for 0x%04X\n",
+ bidimirroring_filename, uc2);
+ exit (1);
+ }
+ if (uc2 != mirror_pairs[i].uc[0])
+ {
+ /* uc1 == mirror_pairs[i].uc[1], uc2 != mirror_pairs[i].uc[0] */
+ fprintf (stderr, "%s: mapping conflict for 0x%04X\n",
+ bidimirroring_filename, uc1);
+ exit (1);
+ }
+ /* uc1 == mirror_pairs[i].uc[1], uc2 == mirror_pairs[i].uc[0].
+ (uc1, uc2) is the reverse pair of a pair that we already had
+ encountered: (uc2, uc1). */
+ }
+ else
+ {
+ /* A new pair. */
+ if (mirror_pairs_count == SIZEOF (mirror_pairs))
+ {
+ fprintf (stderr, "%s contains more pairs than expected, "
+ "increase mirror_pairs' size.\n",
+ bidimirroring_filename);
+ exit (1);
+ }
+ mirror_pairs[mirror_pairs_count].uc[0] = uc1;
+ mirror_pairs[mirror_pairs_count].uc[1] = uc2;
+ mirror_pairs_count++;
+ }
+ /* Verify that uc1 and uc2 have the BidiMirrored property. */
+ if (!(unicode_attributes[uc1].name != NULL
+ && unicode_attributes[uc1].mirrored))
+ {
+ fprintf (stderr, "%s mentions 0x%04X, which is not BidiMirrored\n",
+ bidimirroring_filename, uc1);
+ exit (1);
+ }
+ if (!(unicode_attributes[uc2].name != NULL
+ && unicode_attributes[uc2].mirrored))
+ {
+ fprintf (stderr, "%s mentions 0x%04X, which is not BidiMirrored\n",
+ bidimirroring_filename, uc2);
+ exit (1);
+ }
+ }
+
+ if (ferror (stream) || fclose (stream))
+ {
+ fprintf (stderr, "error reading from '%s'\n", bidimirroring_filename);
+ exit (1);
+ }
+}
static int
get_mirror_value (unsigned int ch)
mirrored = (unicode_attributes[ch].name != NULL
&& unicode_attributes[ch].mirrored);
mirror_char = 0xfffd;
- for (i = 0; i < sizeof (mirror_pairs) / sizeof (mirror_pairs[0]); i++)
- if (ch == mirror_pairs[i][0])
+ for (i = 0; i < mirror_pairs_count; i++)
+ if (ch == mirror_pairs[i].uc[0])
{
- mirror_char = mirror_pairs[i][1];
+ mirror_char = mirror_pairs[i].uc[1];
break;
}
- else if (ch == mirror_pairs[i][1])
+ else if (ch == mirror_pairs[i].uc[1])
{
- mirror_char = mirror_pairs[i][0];
+ mirror_char = mirror_pairs[i].uc[0];
break;
}
if (mirrored)
const char *scripts_filename;
const char *blocks_filename;
const char *proplist30_filename;
+ const char *bidimirroring_filename;
const char *eastasianwidth_filename;
const char *linebreak_filename;
const char *wordbreakproperty_filename;
const char *casefolding_filename;
const char *version;
- if (argc != 17)
+ if (argc != 18)
{
- fprintf (stderr, "Usage: %s UnicodeData.txt PropList.txt DerivedCoreProperties.txt emoji-data.txt ArabicShaping.txt Scripts.txt Blocks.txt PropList-3.0.1.txt EastAsianWidth.txt LineBreak.txt WordBreakProperty.txt GraphemeBreakProperty.txt CompositionExclusions.txt SpecialCasing.txt CaseFolding.txt version\n",
+ fprintf (stderr, "Usage: %s UnicodeData.txt PropList.txt DerivedCoreProperties.txt emoji-data.txt ArabicShaping.txt Scripts.txt Blocks.txt PropList-3.0.1.txt BidiMirroring.txt EastAsianWidth.txt LineBreak.txt WordBreakProperty.txt GraphemeBreakProperty.txt CompositionExclusions.txt SpecialCasing.txt CaseFolding.txt version\n",
argv[0]);
exit (1);
}
scripts_filename = argv[6];
blocks_filename = argv[7];
proplist30_filename = argv[8];
- eastasianwidth_filename = argv[9];
- linebreak_filename = argv[10];
- wordbreakproperty_filename = argv[11];
- graphemebreakproperty_filename = argv[12];
- compositionexclusions_filename = argv[13];
- specialcasing_filename = argv[14];
- casefolding_filename = argv[15];
- version = argv[16];
+ bidimirroring_filename = argv[9];
+ eastasianwidth_filename = argv[10];
+ linebreak_filename = argv[11];
+ wordbreakproperty_filename = argv[12];
+ graphemebreakproperty_filename = argv[13];
+ compositionexclusions_filename = argv[14];
+ specialcasing_filename = argv[15];
+ casefolding_filename = argv[16];
+ version = argv[17];
fill_attributes (unicodedata_filename);
clear_properties ();
fill_arabicshaping (arabicshaping_filename);
fill_scripts (scripts_filename);
fill_blocks (blocks_filename);
+ fill_mirror (bidimirroring_filename);
fill_width (eastasianwidth_filename);
fill_org_lbp (linebreak_filename);
fill_org_wbp (wordbreakproperty_filename);
* /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/15.1.0/ucd/Scripts.txt \\
* /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/15.1.0/ucd/Blocks.txt \\
* /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/3.0.1/PropList-3.0.1.txt \\
+ * /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/15.1.0/ucd/BidiMirroring.txt \\
* /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/15.1.0/ucd/EastAsianWidth.txt \\
* /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/15.1.0/ucd/LineBreak.txt \\
* /media/nas/bruno/www-archive/software/i18n/unicode/ftp.unicode.org/ArchiveVersions/15.1.0/ucd/auxiliary/WordBreakProperty.txt \\
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 61635, 61634, 61633, 61632, 0, 0,
+ 0, 0, 1, -1, 1, -1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 59746, 59745, 0, 0, 0,
+ 0, 0, 0, 1, -1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 56828, 56827, 56826, 56825, 0, 0, 0,
- 3, 56820, 3, -3, 56817, -3, 0, 0,
- 0, 56812, 0, 0, 0, 56808, 56807, 0,
- 0, 0, 56803, 56802, 56801, 56800, 0, 56798,
- 56797, 56796, 56795, 0, 56793, 0, 56791, 0,
+ 3, 3, 3, -3, -3, -3, 0, 0,
+ 0, 56812, 0, 0, 0, 2016, 56807, 0,
+ 0, 0, 56803, 56802, 56801, 56800, 0, 2527,
+ 1923, 1914, 1918, 0, 2250, 0, 56791, 0,
0, 0, 0, 56786, 56785, 56784, 56783, 56782,
56781, 56780, 56779, 56778, 0, 0, 0, 0,
0, 56772, 0, 56770, 1, -1, 56767, 56766,
- 56765, 56764, 56763, 138, 56761, 56760, 56759, 56758,
- 56757, 56756, 56755, 56754, 56753, 0, 0, 0,
+ 56765, 56764, 56763, 138, 56761, 7, 56759, 56758,
+ 56757, 56756, 56755, 56754, -7, 0, 0, 0,
0, 0, 1, -1, 1, -1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 56734,
56733, 0, 56731, 0, 1, -1, 1, -1,
- 56725, 56724, 1, -1, 0, 0, 56719, 56718,
- 56717, 56716, 56715, 56714, 56713, 56712, 1, -1,
- 1, -1, 1, -1, 1, -1, 56703, 56702,
- 56701, 56700, 1, -1, 56697, 56696, 1, -1,
- 56693, 56692, 56691, 56690, 56689, 0, 0, 1,
+ 1, -1, 1, -1, 0, 0, 1, -1,
+ 1, -1, 1, -1, 1, -1, 1, -1,
+ 1, -1, 1, -1, 1, -1, 1, -1,
+ 1, -1, 1, -1, 1, -1, 1, -1,
+ 1, -1, 1, -1, 56689, 0, 0, 1,
-1, 1, -1, 0, 0, 0, 0, 0,
- 56677, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, -1, 0, 0, 56663, 56662,
- 56661, 56660, 56659, 56658, 56657, 56656, 56655, 56654,
+ 1824, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 1, -1, 0, 0, 2104, 56662,
+ 2108, 2106, 56659, 2106, 56657, 56656, 56655, 56654,
1, -1, 1, -1, 1, -1, 1, -1,
- 56645, 0, 0, 0, 0, 0, 56639, 56638,
+ 1316, 0, 0, 0, 0, 0, 56639, 56638,
0, 0, 0, 0, 0, 0, 0, 0,
0, 1, -1, 1, -1, -138, 0, 0,
1, -1, 0, 0, 0, 0, 1, -1,
1, -1, 1, -1, 1, -1, 1, -1,
- 56605, 56604, 56603, 56602, 56601, 56600, 56599, 56598,
- 56597, 56596, 56595, 56594, 56593, 56592, 0, 0,
- 1, -1, 56587, 56586, 56585, 56584, 56583, 56582,
- 56581, 56580, 56579, 56578, 56577, 56576, 56575, 56574,
+ 1, -1, 1, -1, 1, -1, 1, -1,
+ 1, -1, 1, -1, 1, -1, 0, 0,
+ 1, -1, 8, 8, 8, 56584, 7, 7,
+ 56581, 56580, -8, -8, -8, -7, -7, 56574,
0, 0, 0, 0, 0, 0, 0, 0,
1, -1, 1, -1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 55445, 55444, 55443, 55442, 55441, 55440, 55439, 55438,
- 55437, 55436, 55435, 55434, 55433, 55432, 0, 0,
+ 1, -1, 1, -1, 1, -1, 1, -1,
+ 1, -1, 1, -1, 1, -1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 55357, 0, 0, 55354, 55353, 55352, 55351, 0,
- 55349, 55348, 0, 55346, 55345, 55344, 0, 0,
- 0, 0, 0, 55338, 55337, 55336, 55335, 0,
- 0, 0, 0, 0, 55329, 55328, 55327, 0,
- 0, 0, 55323, 55322, 55321, 55320, 55319, 55318,
- 55317, 55316, 55315, 55314, 55313, 55312, 55311, 55310,
+ 55357, 0, 0, 1, -1, 1, -1, 0,
+ 1, -1, 0, 2, 55345, -2, 0, 0,
+ 0, 0, 0, 55338, 55337, 1, -1, 0,
+ 0, 0, 0, 0, -1316, 1, -1, 0,
+ 0, 0, 1, -1, 1, -1, 1, -1,
+ 1, -1, 1, -1, 1, -1, 1, -1,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 54906, 54905, 54904, 54903, 54902,
- 54901, 54900, 54899, 54898, 54897, 54896, 54895, 54894,
- 54893, 54892, 54891, 54890, 54889, 54888, 54887, 54886,
- 54885, 0, 0, 54882, 54881, 54880, 54879, 54878,
- 54877, 0, 54875, 54874, 54873, 54872, 54871, 54870,
- 54869, 54868, 54867, 54866, 54865, 54864, 54863, 54862,
+ 0, 0, 0, 1, -1, 1, -1, 1,
+ -1, 1, -1, 1, -1, 3, 1, -1,
+ -3, 1, -1, 1, -1, 1, -1, 1,
+ -1, 0, 0, -1914, 54881, 54880, 54879, 54878,
+ -1918, 0, 54875, -1923, 1, -1, 54871, 54870,
+ 1, -1, 1, -1, 1, -1, 1, -1,
0, 0, 0, 0, 0, 0, 0, 0,
- 54853, 0, 0, 0, 0, 0, 0, 0,
- 54845, 54844, 54843, 54842, 54841, 54840, 0, 0,
- 0, 54836, 0, 0, 0, 0, 54831, 54830,
- 54829, 54828, 54827, 0, 54825, 54824, 0, 0,
- 54821, 54820, 54819, 54818, 54817, 0, 0, 0,
+ -1824, 0, 0, 0, 0, 0, 0, 0,
+ 1, -1, 54843, 54842, 1, -1, 0, 0,
+ 0, 54836, 0, 0, 0, 0, 54831, 1,
+ -1, 1, -1, 0, 1, -1, 0, 0,
+ 1, -1, 1, -1, 54817, 0, 0, 0,
0, 54812, 0, 54810, 54809, 54808, 0, 0,
- 54805, 54804, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 54793, 54792, 54791, 54790,
- 54789, 54788, 0, 0, 54785, 54784, 0, 0,
+ 1, -1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 54793, -2016, 54791, 54790,
+ 1, -1, 0, 0, 1, -1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 54771, 54770, 54769, 54768, 54767, 54766,
54765, 54764, 54763, 54762, 54761, 54760, 54759, 54758,
54757, 54756, 54755, 54754, 54753, 0, 54751, 54750,
54749, 54748, 0, 0, 54745, 0, 54743, 0,
- 0, 54740, 0, 54738, 54737, 54736, 54735, 0,
- 0, 0, 0, 0, 54729, 54728, 0, 0,
- 0, 0, 0, 0, 54721, 54720, 54719, 0,
+ 0, 54740, 0, 1, -1, 1, -1, 0,
+ 0, 0, 0, 0, 1, -1, 0, 0,
+ 0, 0, 0, 0, 1, -1, 54719, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 54694,
54693, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 54681, 54680, 0, 0,
+ 0, 0, 0, 0, 1, -1, 0, 0,
0, 0, 54675, 54674, 54673, 54672, 0, 54670,
54669, 0, 0, 54666, 54665, 0, 0, 0,
- 0, 54660, 54659, 54658, 54657, 54656, 54655, 54654,
- 54653, 54652, 54651, 54650, 54649, 54648, 54647, 54646,
- 54645, 54644, 54643, 54642, 54641, 54640, 54639, 54638,
- 54637, 54636, 54635, 54634, 54633, 54632, 54631, 54630,
- 54629, 54628, 54627, 54626, 54625, 54624, 54623, 54622,
- 54621, 54620, 54619, 54618, 0, 0, 54615, 54614,
- 54613, 54612, 54611, 54610, 54609, 54608, 0, 54606,
- 54605, 54604, 54603, 54602, 54601, 54600, 54599, 54598,
- 54597, 54596, 54595, 54594, 54593, 54592, 54591, 54590,
- 54589, 54588, 54587, 54586, 54585, 54584, 54583, 54582,
- 54581, 54580, 54579, 54578, 54577, 54576, 54575, 54574,
- 54573, 54572, 54571, 54570, 54569, 54568, 54567, 0,
- 0, 0, 0, 0, 54561, 0, 54559, 0,
- 0, 0, 54555, 54554, 54553, 54552, 54551, 0,
- 0, 0, 0, 0, 54545, 54544, 54543, 0,
- 0, 0, 0, 54538, 0, 0, 0, 54534,
- 54533, 54532, 54531, 54530, 0, 54528, 0, 0,
+ 0, 1, -1, 1, -1, 1, -1, 1,
+ -1, 1, -1, 1, -1, 1, -1, 1,
+ -1, 1, -1, 1, -1, 1, -1, 1,
+ -1, 1, -1, 1, -1, 1, -1, 1,
+ -1, 1, -1, 1, -1, 1, -1, 1,
+ -1, 1, -1, 54618, 0, 0, 1, -1,
+ 1, -1, 1, -1, 1, -1, 0, 1,
+ -1, 1, -1, 1, -1, 1, -1, 1,
+ -1, 1, -1, 1, -1, 1, -1, 1,
+ -1, 1, -1, 1, -1, 1, -1, 1,
+ -1, 1, -1, 1, -1, 1, -1, 1,
+ -1, 1, -1, 1, -1, 1, -1, 0,
+ 0, 0, 0, 0, 54561, 0, -2104, 0,
+ 0, 0, 54555, -2106, -2108, -2106, 54551, 0,
+ 0, 0, 0, 0, 1, -1, -2250, 0,
+ 0, 0, 0, 54538, 0, 0, 0, 1,
+ -1, 1, -1, 54530, 0, 54528, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 54271, 0,
- 0, 0, 53755, 53754, 53753, 53752, 0, 0,
- 0, 53748, 53747, 0, 53745, 53744, 0, 0,
+ 0, 0, 0, 0, 0, 0, -2527, 0,
+ 0, 0, 1, -1, 1, -1, 0, 0,
+ 0, 1, -1, 0, 1, -1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 53729, 53728, 0, 0,
- 53725, 53724, 53723, 53722, 53721, 53720, 53719, 53718,
- 53717, 53716, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, -1, 0, 0,
+ 1, -1, 1, -1, 1, -1, 1, -1,
+ 1, -1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 53672, 53671, 53670,
- 53669, 53668, 53667, 53666, 53665, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, -1, 1,
+ -1, 1, -1, 1, -1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 420, 419, 418, 417, 416, 415, 0,
- 0, 0, 0, 0, 409, 408, 0, 0,
+ 0, 1, -1, 1, -1, 1, -1, 0,
+ 0, 0, 0, 0, 1, -1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 245, 244, 0, 0, 0, 0, 0, 0,
+ 1, -1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 225, 0, 223, 0,
+ 0, 0, 0, 0, 2, 0, -2, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 194, 0, 192, 0, 0,
+ 0, 0, 0, 2, 0, -2, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 162, 0, 160, 0, 158,
- 157, 0, 155, 154, 0, 0, 0, 0,
+ 0, 0, 0, 2, 0, -2, 0, 1,
+ -1, 0, 1, -1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,